diff options
author | Vinod Koul <vkoul@kernel.org> | 2020-08-07 08:43:37 +0300 |
---|---|---|
committer | Vinod Koul <vkoul@kernel.org> | 2020-08-07 08:43:37 +0300 |
commit | 00043a2689232631f39ebbf6719d545b1d799086 (patch) | |
tree | 0660e8e30210547562ad9132be0255b795453d73 /include/linux/dmaengine.h | |
parent | 0b5ad7b9522e6172342511fac6114fd8b7eb622a (diff) | |
parent | bc227385eb71f2cb453efeddc053265bbd2525f9 (diff) | |
download | linux-00043a2689232631f39ebbf6719d545b1d799086.tar.xz |
Merge branch 'topic/xilinx' into fixes
Conflicts:
Documentation/driver-api/dmaengine/provider.rst
include/linux/dmaengine.h
Diffstat (limited to 'include/linux/dmaengine.h')
-rw-r--r-- | include/linux/dmaengine.h | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/include/linux/dmaengine.h b/include/linux/dmaengine.h index d718671bfd25..9d8e8ebf6d12 100644 --- a/include/linux/dmaengine.h +++ b/include/linux/dmaengine.h @@ -63,6 +63,8 @@ enum dma_transaction_type { DMA_CYCLIC, DMA_INTERLEAVE, DMA_COMPLETION_NO_ORDER, + DMA_REPEAT, + DMA_LOAD_EOT, /* last transaction type for creation of the capabilities mask */ DMA_TX_TYPE_END, }; @@ -178,6 +180,16 @@ struct dma_interleaved_template { * @DMA_PREP_CMD: tell the driver that the data passed to DMA API is command * data and the descriptor should be in different format from normal * data descriptors. + * @DMA_PREP_REPEAT: tell the driver that the transaction shall be automatically + * repeated when it ends until a transaction is issued on the same channel + * with the DMA_PREP_LOAD_EOT flag set. This flag is only applicable to + * interleaved transactions and is ignored for all other transaction types. + * @DMA_PREP_LOAD_EOT: tell the driver that the transaction shall replace any + * active repeated (as indicated by DMA_PREP_REPEAT) transaction when the + * repeated transaction ends. Not setting this flag when the previously queued + * transaction is marked with DMA_PREP_REPEAT will cause the new transaction + * to never be processed and stay in the issued queue forever. The flag is + * ignored if the previous transaction is not a repeated transaction. */ enum dma_ctrl_flags { DMA_PREP_INTERRUPT = (1 << 0), @@ -188,6 +200,8 @@ enum dma_ctrl_flags { DMA_PREP_FENCE = (1 << 5), DMA_CTRL_REUSE = (1 << 6), DMA_PREP_CMD = (1 << 7), + DMA_PREP_REPEAT = (1 << 8), + DMA_PREP_LOAD_EOT = (1 << 9), }; /** @@ -998,6 +1012,9 @@ static inline struct dma_async_tx_descriptor *dmaengine_prep_interleaved_dma( { if (!chan || !chan->device || !chan->device->device_prep_interleaved_dma) return NULL; + if (flags & DMA_PREP_REPEAT && + !test_bit(DMA_REPEAT, chan->device->cap_mask.bits)) + return NULL; return chan->device->device_prep_interleaved_dma(chan, xt, flags); } |