struct spi_message
Prev | Chapter 29. Serial Peripheral Interface (SPI) | Next

## Name

struct spi_message — one multi-segment SPI transaction

## Synopsis

    struct spi_message {
      struct list_head transfers;
      struct spi_device * spi;
      unsigned is_dma_mapped:1;
      void (* complete) (void *context);
      void * context;
      unsigned actual_length;
      int status;
      struct list_head queue;
      void * state;
    };

## Members

transfers

  list of transfer segments in this transaction

spi

  SPI device to which the transaction is queued

is_dma_mapped

  if true, the caller provided both dma and cpu virtual addresses for each transfer buffer

complete

  called to report transaction completions

context

  the argument to `complete` when it's called

actual_length

  the total number of bytes that were transferred in all successful segments

status

  zero for success, else negative errno

queue

  for use by whichever driver currently owns the message

state

  for use by whichever driver currently owns the message

## Description

A `spi_message` is used to execute an atomic sequence of data transfers, each represented by a struct spi_transfer. The sequence is “atomic” in the sense that no other spi_message may use that SPI bus until that sequence completes. On some systems, many such sequences can execute as as single programmed DMA transfer. On all systems, these messages are queued, and might complete after transactions to other devices. Messages sent to a given spi_device are alway executed in FIFO order.

The code that submits an spi_message (and its spi_transfers) to the lower layers is responsible for managing its memory. Zero-initialize every field you don't set up explicitly, to insulate against future API updates. After you submit a message and its transfers, ignore them until its completion callback.

Prev | Up | Next
struct spi_transfer | Home | spi_setup