Add qemu 2.4.0
[kvmfornfv.git] / qemu / roms / ipxe / src / include / ipxe / spi_bit.h
diff --git a/qemu/roms/ipxe/src/include/ipxe/spi_bit.h b/qemu/roms/ipxe/src/include/ipxe/spi_bit.h
new file mode 100644 (file)
index 0000000..9cfa7b8
--- /dev/null
@@ -0,0 +1,63 @@
+#ifndef _IPXE_SPI_BIT_H
+#define _IPXE_SPI_BIT_H
+
+/** @file
+ *
+ * SPI bit-bashing interface
+ *
+ */
+
+FILE_LICENCE ( GPL2_OR_LATER );
+
+#include <ipxe/spi.h>
+#include <ipxe/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 /* _IPXE_SPI_BIT_H */