d60e1a714cee6f9f5daf465a3cf072fca6330e9d
[people/xl0/gpxe.git] / src / include / gpxe / threewire.h
1 #ifndef _GPXE_THREEWIRE_H
2 #define _GPXE_THREEWIRE_H
3
4 /** @file
5  *
6  * Three-wire serial interface
7  *
8  * The Atmel three-wire interface is a subset of the (newer) SPI
9  * interface, and is implemented here as a layer on top of the SPI
10  * support.
11  */
12
13 #include <gpxe/spi.h>
14
15 /**
16  * @defgroup tcmds Three-wire commands
17  * @{
18  */
19
20 /** Read data from memory array */
21 #define THREEWIRE_READ 0x6
22
23 /** @} */
24
25 extern int threewire_read ( struct nvs_device *nvs, unsigned int address,
26                             void *data, size_t len );
27
28 /**
29  * @defgroup tdevs Three-wire device types
30  * @{
31  */
32
33 static inline __attribute__ (( always_inline )) void
34 init_at93cx6 ( struct spi_device *device, unsigned int organisation ) {
35         device->nvs.word_len_log2 = ( ( organisation == 8 ) ? 0 : 1 );
36         device->nvs.block_size = 1;
37         device->command_len = 3,
38         device->nvs.read = threewire_read;
39 }
40
41 /**
42  * Initialise Atmel AT93C46 serial EEPROM
43  *
44  * @v device            SPI device
45  * @v organisation      Word organisation (8 or 16)
46  */
47 static inline __attribute__ (( always_inline )) void
48 init_at93c46 ( struct spi_device *device, unsigned int organisation ) {
49         device->nvs.size = ( 1024 / organisation );
50         device->address_len = ( ( organisation == 8 ) ? 7 : 6 );
51         init_at93cx6 ( device, organisation );
52 }
53
54 /**
55  * Initialise Atmel AT93C56 serial EEPROM
56  *
57  * @v device            SPI device
58  * @v organisation      Word organisation (8 or 16)
59  */
60 static inline __attribute__ (( always_inline )) void
61 init_at93c56 ( struct spi_device *device, unsigned int organisation ) {
62         device->nvs.size = ( 2048 / organisation );
63         device->address_len = ( ( organisation == 8 ) ? 9 : 8 );
64         init_at93cx6 ( device, organisation );
65 }
66
67 /** @} */
68
69 #endif /* _GPXE_THREEWIRE_H */