summaryrefslogtreecommitdiffstats
path: root/drivers/dma/dmaengine.h
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/dma/dmaengine.h')
-rw-r--r--drivers/dma/dmaengine.h18
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