david/ipxe
Archived
1
0
This repository has been archived on 2020-12-06. You can view files and clone it, but cannot push or open issues or pull requests.
ipxe/src/include/gpxe/spi_bit.h
Michael Brown 95cb7aaacf Support cards such as natsemi which treat the data as little-endian
(i.e. LSB transmitted first on the wire), even though SPI commands and
addresses always have to be big-endian.
2007-07-01 15:22:12 +01:00

62 lines
1.3 KiB
C

#ifndef _GPXE_SPI_BIT_H
#define _GPXE_SPI_BIT_H
/** @file
*
* SPI bit-bashing interface
*
*/
#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 */