dmaengine: enable DMA_CTRL_REUSE
authorRobert Jarzmik <robert.jarzmik@free.fr>
Tue, 13 Oct 2015 19:54:29 +0000 (21:54 +0200)
committerVinod Koul <vinod.koul@intel.com>
Mon, 16 Nov 2015 03:02:16 +0000 (08:32 +0530)
In the current state, the capability of transfer reuse can neither be
set by a slave dmaengine driver, nor used by a client driver, because
the capability is not available to dma_get_slave_caps().

Fix this by adding a way to declare the capability.

Fixes: 272420214d26 ("dmaengine: Add DMA_CTRL_REUSE")
Signed-off-by: Robert Jarzmik <robert.jarzmik@free.fr>
Signed-off-by: Vinod Koul <vinod.koul@intel.com>
drivers/dma/dmaengine.c
include/linux/dmaengine.h

index 3ecec14..4aced66 100644 (file)
@@ -493,6 +493,7 @@ int dma_get_slave_caps(struct dma_chan *chan, struct dma_slave_caps *caps)
        caps->dst_addr_widths = device->dst_addr_widths;
        caps->directions = device->directions;
        caps->residue_granularity = device->residue_granularity;
+       caps->descriptor_reuse = device->descriptor_reuse;
 
        /*
         * Some devices implement only pause (e.g. to get residuum) but no
index c47c68e..6f94b5c 100644 (file)
@@ -659,6 +659,7 @@ enum dmaengine_alignment {
  *     struct with auxiliary transfer status information, otherwise the call
  *     will just return a simple status code
  * @device_issue_pending: push pending transactions to hardware
+ * @descriptor_reuse: a submitted transfer can be resubmitted after completion
  */
 struct dma_device {
 
@@ -681,6 +682,7 @@ struct dma_device {
        u32 src_addr_widths;
        u32 dst_addr_widths;
        u32 directions;
+       bool descriptor_reuse;
        enum dma_residue_granularity residue_granularity;
 
        int (*device_alloc_chan_resources)(struct dma_chan *chan);