The SPI I/O model consists of a set of queued messages. We submit one or more struct spi_message structures, which are processed and completed synchronously or asynchronously. A single message consists of one or more struct spi_transfer objects, each of which represents a full duplex SPI transfer. These are two main structures to exchange data between the driver and the device. They are both defined in include/linux/spi/spi.h:
struct spi_transfer represents a full duplex SPI transfer:
struct spi_transfer { const void *tx_buf; void *rx_buf; unsigned len; dma_addr_t tx_dma; dma_addr_t ...