October 2017
Intermediate to advanced
586 pages
14h 8m
English
Starting the transaction is the last step in the DMA transfer setup. One activates transactions in the pending queue of a channel by calling dma_async_issue_pending() on that channel. If the channel is idle, then the first transaction in the queue is started and subsequent ones are queued up. On completion of a DMA operation, the next one in the queue is started and a tasklet triggered. This tasklet is in charge of calling the client driver completion callback routine for notification, if set:
void dma_async_issue_pending(struct dma_chan *chan);
An example would look like this:
dma_async_issue_pending(my_dma_chan); wait_for_completion(&transfer_ok); dma_unmap_single(my_dma_chan->device->dev, ...