diff options
author | Ira Snyder <iws@ovro.caltech.edu> | 2010-09-30 07:46:44 -0400 |
---|---|---|
committer | Dan Williams <dan.j.williams@intel.com> | 2010-10-07 17:41:40 -0400 |
commit | a86ee03ce6f279ebe581a7a8c0c4393eaeb789ee (patch) | |
tree | e662a6492370232e008d405e4ed7bfa4be0aea2e | |
parent | cc60f8878eab892c03d06b10f389232b9b66bd83 (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.c | 2 | ||||
-rw-r--r-- | include/linux/dmaengine.h | 6 |
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, |