aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorIra Snyder <iws@ovro.caltech.edu>2010-09-30 07:46:44 -0400
committerDan Williams <dan.j.williams@intel.com>2010-10-07 17:41:40 -0400
commita86ee03ce6f279ebe581a7a8c0c4393eaeb789ee (patch)
treee662a6492370232e008d405e4ed7bfa4be0aea2e
parentcc60f8878eab892c03d06b10f389232b9b66bd83 (diff)
dma: add support for scatterlist to scatterlist copy
This adds support for scatterlist to scatterlist DMA transfers. A similar interface is exposed by the fsldma driver (through the DMA_SLAVE API) and by the ste_dma40 driver (through an exported function). This patch paves the way for making this type of copy operation a part of the generic DMAEngine API. Futher patches will add support in individual drivers. Signed-off-by: Ira W. Snyder <iws@ovro.caltech.edu> Signed-off-by: Dan Williams <dan.j.williams@intel.com>
-rw-r--r--drivers/dma/dmaengine.c2
-rw-r--r--include/linux/dmaengine.h6
2 files changed, 8 insertions, 0 deletions
diff --git a/drivers/dma/dmaengine.c b/drivers/dma/dmaengine.c
index 9d31d5eb95c1..db403b8ccabd 100644
--- a/drivers/dma/dmaengine.c
+++ b/drivers/dma/dmaengine.c
@@ -690,6 +690,8 @@ int dma_async_device_register(struct dma_device *device)
690 !device->device_prep_dma_memset); 690 !device->device_prep_dma_memset);
691 BUG_ON(dma_has_cap(DMA_INTERRUPT, device->cap_mask) && 691 BUG_ON(dma_has_cap(DMA_INTERRUPT, device->cap_mask) &&
692 !device->device_prep_dma_interrupt); 692 !device->device_prep_dma_interrupt);
693 BUG_ON(dma_has_cap(DMA_SG, device->cap_mask) &&
694 !device->device_prep_dma_sg);
693 BUG_ON(dma_has_cap(DMA_SLAVE, device->cap_mask) && 695 BUG_ON(dma_has_cap(DMA_SLAVE, device->cap_mask) &&
694 !device->device_prep_slave_sg); 696 !device->device_prep_slave_sg);
695 BUG_ON(dma_has_cap(DMA_SLAVE, device->cap_mask) && 697 BUG_ON(dma_has_cap(DMA_SLAVE, device->cap_mask) &&
diff --git a/include/linux/dmaengine.h b/include/linux/dmaengine.h
index e2106495cc11..2c9ee98f6c77 100644
--- a/include/linux/dmaengine.h
+++ b/include/linux/dmaengine.h
@@ -64,6 +64,7 @@ enum dma_transaction_type {
64 DMA_PQ_VAL, 64 DMA_PQ_VAL,
65 DMA_MEMSET, 65 DMA_MEMSET,
66 DMA_INTERRUPT, 66 DMA_INTERRUPT,
67 DMA_SG,
67 DMA_PRIVATE, 68 DMA_PRIVATE,
68 DMA_ASYNC_TX, 69 DMA_ASYNC_TX,
69 DMA_SLAVE, 70 DMA_SLAVE,
@@ -473,6 +474,11 @@ struct dma_device {
473 unsigned long flags); 474 unsigned long flags);
474 struct dma_async_tx_descriptor *(*device_prep_dma_interrupt)( 475 struct dma_async_tx_descriptor *(*device_prep_dma_interrupt)(
475 struct dma_chan *chan, unsigned long flags); 476 struct dma_chan *chan, unsigned long flags);
477 struct dma_async_tx_descriptor *(*device_prep_dma_sg)(
478 struct dma_chan *chan,
479 struct scatterlist *dst_sg, unsigned int dst_nents,
480 struct scatterlist *src_sg, unsigned int src_nents,
481 unsigned long flags);
476 482
477 struct dma_async_tx_descriptor *(*device_prep_slave_sg)( 483 struct dma_async_tx_descriptor *(*device_prep_slave_sg)(
478 struct dma_chan *chan, struct scatterlist *sgl, 484 struct dma_chan *chan, struct scatterlist *sgl,