diff options
author | Russell King - ARM Linux <linux@arm.linux.org.uk> | 2012-03-06 22:35:07 +0000 |
---|---|---|
committer | Vinod Koul <vinod.koul@linux.intel.com> | 2012-03-13 11:37:01 +0530 |
commit | f7fbce07c6ce26a25b4e0cb5f241c361fde87901 (patch) | |
tree | 66e6321b5ef49e18479ffeb1ed4fd5169e120f97 /drivers/dma/dmaengine.h | |
parent | 884485e1f12dcd39390f042e772cdbefc9ebb750 (diff) | |
download | linux-stable-f7fbce07c6ce26a25b4e0cb5f241c361fde87901.tar.gz linux-stable-f7fbce07c6ce26a25b4e0cb5f241c361fde87901.tar.bz2 linux-stable-f7fbce07c6ce26a25b4e0cb5f241c361fde87901.zip |
dmaengine: provide a common function for completing a dma descriptor
Provide a common function to do the cookie mechanics for completing
a DMA descriptor.
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
Tested-by: Linus Walleij <linus.walleij@linaro.org>
Reviewed-by: Linus Walleij <linus.walleij@linaro.org>
Acked-by: Jassi Brar <jassisinghbrar@gmail.com>
[imx-sdma.c & mxs-dma.c]
Tested-by: Shawn Guo <shawn.guo@linaro.org>
Signed-off-by: Vinod Koul <vinod.koul@linux.intel.com>
Diffstat (limited to 'drivers/dma/dmaengine.h')
-rw-r--r-- | drivers/dma/dmaengine.h | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/drivers/dma/dmaengine.h b/drivers/dma/dmaengine.h index 7692c8644045..47e099772b8e 100644 --- a/drivers/dma/dmaengine.h +++ b/drivers/dma/dmaengine.h @@ -5,6 +5,7 @@ #ifndef DMAENGINE_H #define DMAENGINE_H +#include <linux/bug.h> #include <linux/dmaengine.h> /** @@ -27,4 +28,21 @@ static inline dma_cookie_t dma_cookie_assign(struct dma_async_tx_descriptor *tx) return cookie; } +/** + * dma_cookie_complete - complete a descriptor + * @tx: descriptor to complete + * + * Mark this descriptor complete by updating the channels completed + * cookie marker. Zero the descriptors cookie to prevent accidental + * repeated completions. + * + * Note: caller is expected to hold a lock to prevent concurrency. + */ +static inline void dma_cookie_complete(struct dma_async_tx_descriptor *tx) +{ + BUG_ON(tx->cookie < DMA_MIN_COOKIE); + tx->chan->completed_cookie = tx->cookie; + tx->cookie = 0; +} + #endif |