1 #ifndef _GPXE_SPI_BIT_H 2 #define _GPXE_SPI_BIT_H 3 4 /** @file 5 * 6 * SPI bit-bashing interface 7 * 8 */ 9 10 FILE_LICENCE ( GPL2_OR_LATER ); 11 12 #include <gpxe/spi.h> 13 #include <gpxe/bitbash.h> 14 15 /** A bit-bashing SPI bus */ 16 struct spi_bit_basher { 17 /** SPI bus */ 18 struct spi_bus bus; 19 /** Bit-bashing interface */ 20 struct bit_basher basher; 21 /** Endianness of data 22 * 23 * SPI commands and addresses are always big-endian (i.e. MSB 24 * transmitted first on the wire), but some cards 25 * (e.g. natsemi) choose to regard the data stored in the 26 * EEPROM as little-endian (i.e. LSB transmitted first on the 27 * wire). 28 */ 29 int endianness; 30 }; 31 32 /** Bit indices used for SPI bit-bashing interface */ 33 enum { 34 /** Serial clock */ 35 SPI_BIT_SCLK = 0, 36 /** Master Out Slave In */ 37 SPI_BIT_MOSI, 38 /** Master In Slave Out */ 39 SPI_BIT_MISO, 40 /** Slave 0 select */ 41 SPI_BIT_SS0, 42 }; 43 44 /** 45 * Determine bit index for a particular slave 46 * 47 * @v slave Slave number 48 * @ret index Bit index (i.e. SPI_BIT_SSN, where N=slave) 49 */ 50 #define SPI_BIT_SS( slave ) ( SPI_BIT_SS0 + (slave) ) 51 52 /** Delay between SCLK transitions */ 53 #define SPI_BIT_UDELAY 1 54 55 /** SPI bit basher treats data as big-endian */ 56 #define SPI_BIT_BIG_ENDIAN 0 57 58 /** SPI bit basher treats data as little-endian */ 59 #define SPI_BIT_LITTLE_ENDIAN 1 60 61 extern void init_spi_bit_basher ( struct spi_bit_basher *spibit ); 62 63 #endif /* _GPXE_SPI_BIT_H */ 64