diff options
| author | Ira Snyder <iws@ovro.caltech.edu> | 2010-09-30 07:46:47 -0400 |
|---|---|---|
| committer | Dan Williams <dan.j.williams@intel.com> | 2010-10-07 17:41:41 -0400 |
| commit | 0d688662aab9d80078be82aa5aea561346643298 (patch) | |
| tree | 61ce15bc08f757db7d94a37ab2100973c7e0e06c | |
| parent | 968f19ae802fdc6b6b6b5af6fe79cf23d281be0f (diff) | |
ste_dma40: implement support for scatterlist to scatterlist copy
Now that the DMAEngine API has support for scatterlist to scatterlist
copy, implement support for the STE DMA40 DMA controller.
Cc: Linus Walleij <linus.ml.walleij@gmail.com>
Acked-by: Per Fridén <per.friden@stericsson.com>
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/ste_dma40.c | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/drivers/dma/ste_dma40.c b/drivers/dma/ste_dma40.c index 17e2600a00cf..d5fd098e22e8 100644 --- a/drivers/dma/ste_dma40.c +++ b/drivers/dma/ste_dma40.c | |||
| @@ -1857,6 +1857,18 @@ err: | |||
| 1857 | return NULL; | 1857 | return NULL; |
| 1858 | } | 1858 | } |
| 1859 | 1859 | ||
| 1860 | static struct dma_async_tx_descriptor * | ||
| 1861 | d40_prep_sg(struct dma_chan *chan, | ||
| 1862 | struct scatterlist *dst_sg, unsigned int dst_nents, | ||
| 1863 | struct scatterlist *src_sg, unsigned int src_nents, | ||
| 1864 | unsigned long dma_flags) | ||
| 1865 | { | ||
| 1866 | if (dst_nents != src_nents) | ||
| 1867 | return NULL; | ||
| 1868 | |||
| 1869 | return stedma40_memcpy_sg(chan, dst_sg, src_sg, dst_nents, dma_flags); | ||
| 1870 | } | ||
| 1871 | |||
| 1860 | static int d40_prep_slave_sg_log(struct d40_desc *d40d, | 1872 | static int d40_prep_slave_sg_log(struct d40_desc *d40d, |
| 1861 | struct d40_chan *d40c, | 1873 | struct d40_chan *d40c, |
| 1862 | struct scatterlist *sgl, | 1874 | struct scatterlist *sgl, |
| @@ -2281,6 +2293,7 @@ static int __init d40_dmaengine_init(struct d40_base *base, | |||
| 2281 | base->dma_slave.device_alloc_chan_resources = d40_alloc_chan_resources; | 2293 | base->dma_slave.device_alloc_chan_resources = d40_alloc_chan_resources; |
| 2282 | base->dma_slave.device_free_chan_resources = d40_free_chan_resources; | 2294 | base->dma_slave.device_free_chan_resources = d40_free_chan_resources; |
| 2283 | base->dma_slave.device_prep_dma_memcpy = d40_prep_memcpy; | 2295 | base->dma_slave.device_prep_dma_memcpy = d40_prep_memcpy; |
| 2296 | base->dma_slave.device_prep_dma_sg = d40_prep_sg; | ||
| 2284 | base->dma_slave.device_prep_slave_sg = d40_prep_slave_sg; | 2297 | base->dma_slave.device_prep_slave_sg = d40_prep_slave_sg; |
| 2285 | base->dma_slave.device_tx_status = d40_tx_status; | 2298 | base->dma_slave.device_tx_status = d40_tx_status; |
| 2286 | base->dma_slave.device_issue_pending = d40_issue_pending; | 2299 | base->dma_slave.device_issue_pending = d40_issue_pending; |
| @@ -2301,10 +2314,12 @@ static int __init d40_dmaengine_init(struct d40_base *base, | |||
| 2301 | 2314 | ||
| 2302 | dma_cap_zero(base->dma_memcpy.cap_mask); | 2315 | dma_cap_zero(base->dma_memcpy.cap_mask); |
| 2303 | dma_cap_set(DMA_MEMCPY, base->dma_memcpy.cap_mask); | 2316 | dma_cap_set(DMA_MEMCPY, base->dma_memcpy.cap_mask); |
| 2317 | dma_cap_set(DMA_SG, base->dma_slave.cap_mask); | ||
| 2304 | 2318 | ||
| 2305 | base->dma_memcpy.device_alloc_chan_resources = d40_alloc_chan_resources; | 2319 | base->dma_memcpy.device_alloc_chan_resources = d40_alloc_chan_resources; |
| 2306 | base->dma_memcpy.device_free_chan_resources = d40_free_chan_resources; | 2320 | base->dma_memcpy.device_free_chan_resources = d40_free_chan_resources; |
| 2307 | base->dma_memcpy.device_prep_dma_memcpy = d40_prep_memcpy; | 2321 | base->dma_memcpy.device_prep_dma_memcpy = d40_prep_memcpy; |
| 2322 | base->dma_slave.device_prep_dma_sg = d40_prep_sg; | ||
| 2308 | base->dma_memcpy.device_prep_slave_sg = d40_prep_slave_sg; | 2323 | base->dma_memcpy.device_prep_slave_sg = d40_prep_slave_sg; |
| 2309 | base->dma_memcpy.device_tx_status = d40_tx_status; | 2324 | base->dma_memcpy.device_tx_status = d40_tx_status; |
| 2310 | base->dma_memcpy.device_issue_pending = d40_issue_pending; | 2325 | base->dma_memcpy.device_issue_pending = d40_issue_pending; |
| @@ -2331,10 +2346,12 @@ static int __init d40_dmaengine_init(struct d40_base *base, | |||
| 2331 | dma_cap_zero(base->dma_both.cap_mask); | 2346 | dma_cap_zero(base->dma_both.cap_mask); |
| 2332 | dma_cap_set(DMA_SLAVE, base->dma_both.cap_mask); | 2347 | dma_cap_set(DMA_SLAVE, base->dma_both.cap_mask); |
| 2333 | dma_cap_set(DMA_MEMCPY, base->dma_both.cap_mask); | 2348 | dma_cap_set(DMA_MEMCPY, base->dma_both.cap_mask); |
| 2349 | dma_cap_set(DMA_SG, base->dma_slave.cap_mask); | ||
| 2334 | 2350 | ||
| 2335 | base->dma_both.device_alloc_chan_resources = d40_alloc_chan_resources; | 2351 | base->dma_both.device_alloc_chan_resources = d40_alloc_chan_resources; |
| 2336 | base->dma_both.device_free_chan_resources = d40_free_chan_resources; | 2352 | base->dma_both.device_free_chan_resources = d40_free_chan_resources; |
| 2337 | base->dma_both.device_prep_dma_memcpy = d40_prep_memcpy; | 2353 | base->dma_both.device_prep_dma_memcpy = d40_prep_memcpy; |
| 2354 | base->dma_slave.device_prep_dma_sg = d40_prep_sg; | ||
| 2338 | base->dma_both.device_prep_slave_sg = d40_prep_slave_sg; | 2355 | base->dma_both.device_prep_slave_sg = d40_prep_slave_sg; |
| 2339 | base->dma_both.device_tx_status = d40_tx_status; | 2356 | base->dma_both.device_tx_status = d40_tx_status; |
| 2340 | base->dma_both.device_issue_pending = d40_issue_pending; | 2357 | base->dma_both.device_issue_pending = d40_issue_pending; |
