···80808181 - slave_sg: DMA a list of scatter gather buffers from/to a peripheral82828383+ - peripheral_dma_vec: DMA an array of scatter gather buffers from/to a8484+ peripheral. Similar to slave_sg, but uses an array of dma_vec8585+ structures instead of a scatterlist.8686+8387 - dma_cyclic: Perform a cyclic DMA operation from/to a peripheral till the8488 operation is explicitly stopped.8589···104100 struct dma_async_tx_descriptor *dmaengine_prep_slave_sg(105101 struct dma_chan *chan, struct scatterlist *sgl,106102 unsigned int sg_len, enum dma_data_direction direction,103103+ unsigned long flags);104104+105105+ struct dma_async_tx_descriptor *dmaengine_prep_peripheral_dma_vec(106106+ struct dma_chan *chan, const struct dma_vec *vecs,107107+ size_t nents, enum dma_data_direction direction,107108 unsigned long flags);108109109110 struct dma_async_tx_descriptor *dmaengine_prep_dma_cyclic(
+10
Documentation/driver-api/dmaengine/provider.rst
···433433 - residue: Provides the residue bytes of the transfer for those that434434 support residue.435435436436+- ``device_prep_peripheral_dma_vec``437437+438438+ - Similar to ``device_prep_slave_sg``, but it takes a pointer to a439439+ array of ``dma_vec`` structures, which (in the long run) will replace440440+ scatterlists.441441+436442- ``device_issue_pending``437443438444 - Takes the first transaction descriptor in the pending queue,···549543550544- Not really relevant any more since the introduction of ``virt-dma``551545 that abstracts it away.546546+547547+dma_vec548548+549549+- A small structure that contains a DMA address and length.552550553551DMA_CTRL_ACK554552
···161161};162162163163/**164164+ * struct dma_vec - DMA vector165165+ * @addr: Bus address of the start of the vector166166+ * @len: Length in bytes of the DMA vector167167+ */168168+struct dma_vec {169169+ dma_addr_t addr;170170+ size_t len;171171+};172172+173173+/**164174 * enum dma_ctrl_flags - DMA flags to augment operation preparation,165175 * control completion, and communicate status.166176 * @DMA_PREP_INTERRUPT - trigger an interrupt (callback) upon completion of···920910 struct dma_async_tx_descriptor *(*device_prep_dma_interrupt)(921911 struct dma_chan *chan, unsigned long flags);922912913913+ struct dma_async_tx_descriptor *(*device_prep_peripheral_dma_vec)(914914+ struct dma_chan *chan, const struct dma_vec *vecs,915915+ size_t nents, enum dma_transfer_direction direction,916916+ unsigned long flags);923917 struct dma_async_tx_descriptor *(*device_prep_slave_sg)(924918 struct dma_chan *chan, struct scatterlist *sgl,925919 unsigned int sg_len, enum dma_transfer_direction direction,···985971986972 return chan->device->device_prep_slave_sg(chan, &sg, 1,987973 dir, flags, NULL);974974+}975975+976976+/**977977+ * dmaengine_prep_peripheral_dma_vec() - Prepare a DMA scatter-gather descriptor978978+ * @chan: The channel to be used for this descriptor979979+ * @vecs: The array of DMA vectors that should be transferred980980+ * @nents: The number of DMA vectors in the array981981+ * @dir: Specifies the direction of the data transfer982982+ * @flags: DMA engine flags983983+ */984984+static inline struct dma_async_tx_descriptor *dmaengine_prep_peripheral_dma_vec(985985+ struct dma_chan *chan, const struct dma_vec *vecs, size_t nents,986986+ enum dma_transfer_direction dir, unsigned long flags)987987+{988988+ if (!chan || !chan->device || !chan->device->device_prep_peripheral_dma_vec)989989+ return NULL;990990+991991+ return chan->device->device_prep_peripheral_dma_vec(chan, vecs, nents,992992+ dir, flags);988993}989994990995static inline struct dma_async_tx_descriptor *dmaengine_prep_slave_sg(