diff options
author | Jassi Brar <jaswinder.singh@linaro.org> | 2011-10-13 03:03:30 -0400 |
---|---|---|
committer | Vinod Koul <vinod.koul@linux.intel.com> | 2011-11-18 01:46:24 -0500 |
commit | b14dab792dee3245b628e046d80a7fad5573fea6 (patch) | |
tree | c77574d19be7c150b57bd9a9b0184580c733621b /drivers/dma | |
parent | e0d23ef29ed637dc6bd739f590985746d9ad9caa (diff) |
DMAEngine: Define interleaved transfer request api
Define a new api that could be used for doing fancy data transfers
like interleaved to contiguous copy and vice-versa.
Traditional SG_list based transfers tend to be very inefficient in
such cases as where the interleave and chunk are only a few bytes,
which call for a very condensed api to convey pattern of the transfer.
This api supports all 4 variants of scatter-gather and contiguous transfer.
Of course, neither can this api help transfers that don't lend to DMA by
nature, i.e, scattered tiny read/writes with no periodic pattern.
Also since now we support SLAVE channels that might not provide
device_prep_slave_sg callback but device_prep_interleaved_dma,
remove the BUG_ON check.
Signed-off-by: Jassi Brar <jaswinder.singh@linaro.org>
Acked-by: Barry Song <Baohua.Song@csr.com>
[renamed dmaxfer_template to dma_interleaved_template
did fixup after the enum dma_transfer_merge]
Signed-off-by: Vinod Koul <vinod.koul@linux.intel.com>
Diffstat (limited to 'drivers/dma')
-rw-r--r-- | drivers/dma/dmaengine.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/drivers/dma/dmaengine.c b/drivers/dma/dmaengine.c index b48967b499da..a6c6051ec858 100644 --- a/drivers/dma/dmaengine.c +++ b/drivers/dma/dmaengine.c | |||
@@ -693,12 +693,12 @@ int dma_async_device_register(struct dma_device *device) | |||
693 | !device->device_prep_dma_interrupt); | 693 | !device->device_prep_dma_interrupt); |
694 | BUG_ON(dma_has_cap(DMA_SG, device->cap_mask) && | 694 | BUG_ON(dma_has_cap(DMA_SG, device->cap_mask) && |
695 | !device->device_prep_dma_sg); | 695 | !device->device_prep_dma_sg); |
696 | BUG_ON(dma_has_cap(DMA_SLAVE, device->cap_mask) && | ||
697 | !device->device_prep_slave_sg); | ||
698 | BUG_ON(dma_has_cap(DMA_CYCLIC, device->cap_mask) && | 696 | BUG_ON(dma_has_cap(DMA_CYCLIC, device->cap_mask) && |
699 | !device->device_prep_dma_cyclic); | 697 | !device->device_prep_dma_cyclic); |
700 | BUG_ON(dma_has_cap(DMA_SLAVE, device->cap_mask) && | 698 | BUG_ON(dma_has_cap(DMA_SLAVE, device->cap_mask) && |
701 | !device->device_control); | 699 | !device->device_control); |
700 | BUG_ON(dma_has_cap(DMA_INTERLEAVE, device->cap_mask) && | ||
701 | !device->device_prep_interleaved_dma); | ||
702 | 702 | ||
703 | BUG_ON(!device->device_alloc_chan_resources); | 703 | BUG_ON(!device->device_alloc_chan_resources); |
704 | BUG_ON(!device->device_free_chan_resources); | 704 | BUG_ON(!device->device_free_chan_resources); |