123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- #ifndef _GPXE_SPI_BIT_H
- #define _GPXE_SPI_BIT_H
-
- /** @file
- *
- * SPI bit-bashing interface
- *
- */
-
- FILE_LICENCE ( GPL2_OR_LATER );
-
- #include <gpxe/spi.h>
- #include <gpxe/bitbash.h>
-
- /** A bit-bashing SPI bus */
- struct spi_bit_basher {
- /** SPI bus */
- struct spi_bus bus;
- /** Bit-bashing interface */
- struct bit_basher basher;
- /** Endianness of data
- *
- * SPI commands and addresses are always big-endian (i.e. MSB
- * transmitted first on the wire), but some cards
- * (e.g. natsemi) choose to regard the data stored in the
- * EEPROM as little-endian (i.e. LSB transmitted first on the
- * wire).
- */
- int endianness;
- };
-
- /** Bit indices used for SPI bit-bashing interface */
- enum {
- /** Serial clock */
- SPI_BIT_SCLK = 0,
- /** Master Out Slave In */
- SPI_BIT_MOSI,
- /** Master In Slave Out */
- SPI_BIT_MISO,
- /** Slave 0 select */
- SPI_BIT_SS0,
- };
-
- /**
- * Determine bit index for a particular slave
- *
- * @v slave Slave number
- * @ret index Bit index (i.e. SPI_BIT_SSN, where N=slave)
- */
- #define SPI_BIT_SS( slave ) ( SPI_BIT_SS0 + (slave) )
-
- /** Delay between SCLK transitions */
- #define SPI_BIT_UDELAY 1
-
- /** SPI bit basher treats data as big-endian */
- #define SPI_BIT_BIG_ENDIAN 0
-
- /** SPI bit basher treats data as little-endian */
- #define SPI_BIT_LITTLE_ENDIAN 1
-
- extern void init_spi_bit_basher ( struct spi_bit_basher *spibit );
-
- #endif /* _GPXE_SPI_BIT_H */
|