[PATCH 2/3] dmaengine: add wrapper functions for dmaengine

Sascha Hauer s.hauer at pengutronix.de
Mon Aug 16 07:07:49 EDT 2010


Currently dmaengine users have to explicitely dereference function
pointers in struct dma_device. For the convenience of drivers and
to be more flexible when changing the dmaengine later add static
inline wrapper functions for the dma commands.

This patch is not complete yet. If there's consensus on this patch
I'll provide an updated patch with the missing functions.

Signed-off-by: Sascha Hauer <s.hauer at pengutronix.de>
---
 include/linux/dmaengine.h |   41 +++++++++++++++++++++++++++++++++++++++++
 1 files changed, 41 insertions(+), 0 deletions(-)

diff --git a/include/linux/dmaengine.h b/include/linux/dmaengine.h
index 0df7864..635c60b 100644
--- a/include/linux/dmaengine.h
+++ b/include/linux/dmaengine.h
@@ -491,6 +491,47 @@ struct dma_device {
 	void (*device_issue_pending)(struct dma_chan *chan);
 };
 
+static inline int dmaengine_device_control(struct dma_chan *chan,
+					   enum dma_ctrl_cmd cmd,
+					   unsigned long arg)
+{
+	return chan->device->device_control(chan, cmd, arg);
+}
+
+static inline int dmaengine_slave_config(struct dma_chan *chan,
+					  struct dma_slave_config *config)
+{
+	return dmaengine_device_control(chan, DMA_SLAVE_CONFIG,
+			(unsigned long)config);
+}
+
+static inline int dmaengine_terminate_all(struct dma_chan *chan)
+{
+	return dmaengine_device_control(chan, DMA_TERMINATE_ALL, 0);
+}
+
+static inline struct dma_async_tx_descriptor *dmaengine_prep_slave_sg(
+		struct dma_chan *chan, struct scatterlist *sgl,
+		unsigned int sg_len, enum dma_data_direction direction,
+		unsigned long flags)
+{
+	return chan->device->device_prep_slave_sg(chan, sgl, sg_len, direction,
+			flags);
+}
+
+static inline struct dma_async_tx_descriptor *dmaengine_prep_cyclic(
+		struct dma_chan *chan, dma_addr_t buf_addr, size_t buf_len,
+		size_t period_len, enum dma_data_direction direction)
+{
+	return chan->device->device_prep_dma_cyclic(chan, buf_addr, buf_len,
+			period_len, direction);
+}
+
+static inline int dmaengine_tx_submit(struct dma_async_tx_descriptor *desc)
+{
+	return desc->tx_submit(desc);
+}
+
 static inline bool dmaengine_check_align(u8 align, size_t off1, size_t off2, size_t len)
 {
 	size_t mask;
-- 
1.7.1




More information about the linux-arm-kernel mailing list