Move per-transition delays from generic bit-bashing layer to i2c layer
[people/xl0/gpxe.git] / src / include / gpxe / bitbash.h
1 #ifndef _GPXE_BITBASH_H
2 #define _GPXE_BITBASH_H
3
4 /** @file
5  *
6  * Bit-bashing interfaces
7  *
8  */
9
10 /** A bit-bashing interface */
11 struct bit_basher {
12         /**
13          * Set/clear output bit
14          *
15          * @v basher            Bit-bashing interface
16          * @v bit_id            Bit number
17          * @v data              Value to write
18          * 
19          * @c data will be 0 if a logic 0 should be written (i.e. the
20          * bit should be cleared), or -1UL if a logic 1 should be
21          * written (i.e. the bit should be set).  This is done so that
22          * the method may simply binary-AND @c data with the
23          * appropriate bit mask.
24          */
25         void ( * write ) ( struct bit_basher *basher, unsigned int bit_id,
26                            unsigned long data );
27         /**
28          * Read input bit
29          *
30          * @v basher            Bit-bashing interface
31          * @v bit_id            Bit number
32          * @ret zero            Input is a logic 0
33          * @ret non-zero        Input is a logic 1
34          */
35         int ( * read ) ( struct bit_basher *basher, unsigned int bit_id );
36 };
37
38 extern void write_bit ( struct bit_basher *basher, unsigned int bit_id,
39                         unsigned long data );
40 extern int read_bit ( struct bit_basher *basher, unsigned int bit_id );
41
42 #endif /* _GPXE_BITBASH_H */