From patchwork Thu Mar 22 10:54:52 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ravi Kumar V X-Patchwork-Id: 148215 Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from ozlabs.org (localhost [IPv6:::1]) by ozlabs.org (Postfix) with ESMTP id 21F73B7165 for ; Thu, 22 Mar 2012 22:35:06 +1100 (EST) X-Greylist: delayed 762 seconds by postgrey-1.34 at bilbo; Thu, 22 Mar 2012 22:08:11 EST Received: from wolverine01.qualcomm.com (wolverine01.qualcomm.com [199.106.114.254]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (Client CN "wolverine01.qualcomm.com", Issuer "VeriSign Class 3 Secure Server CA" (not verified)) by ozlabs.org (Postfix) with ESMTPS id 76E71B6EF4 for ; Thu, 22 Mar 2012 22:08:09 +1100 (EST) X-IronPort-AV: E=McAfee;i="5400,1158,6656"; a="174717920" Received: from pdmz-ns-mip.qualcomm.com (HELO mostmsg01.qualcomm.com) ([199.106.114.10]) by wolverine01.qualcomm.com with ESMTP/TLS/ADH-AES256-SHA; 22 Mar 2012 03:55:14 -0700 Received: from kumarrav-linux.in.qualcomm.com (pdmz-snip-v218.qualcomm.com [192.168.218.1]) by mostmsg01.qualcomm.com (Postfix) with ESMTPA id 5465810004DD; Thu, 22 Mar 2012 03:55:09 -0700 (PDT) From: Ravi Kumar V To: Vinod Koul Subject: [PATCH v4 1/2] dmaengine: Add context parameter to prep_dma_sg and prep_interleaved_dma Date: Thu, 22 Mar 2012 16:24:52 +0530 Message-Id: <1332413692-8312-1-git-send-email-kumarrav@codeaurora.org> X-Mailer: git-send-email 1.7.8 X-Mailman-Approved-At: Thu, 22 Mar 2012 22:34:16 +1100 Cc: tsoni@codeaurora.org, Russell King , Ravi Kumar V , Srinidhi Kasagar , "Ira W. Snyder" , linux-arm-msm@vger.kernel.or, linux-kernel@vger.kernel.org, Zhang Wei , Bryan Huntsman , Al Viro , Barry Song , Daniel Walker , Dan Williams , linuxppc-dev@lists.ozlabs.org, David Brown , linux-arm-kernel@lists.infradead.org X-BeenThere: linuxppc-dev@lists.ozlabs.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: Linux on PowerPC Developers Mail List List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: linuxppc-dev-bounces+patchwork-incoming=ozlabs.org@lists.ozlabs.org Sender: linuxppc-dev-bounces+patchwork-incoming=ozlabs.org@lists.ozlabs.org Add new context parameter to DMA SG and Interleaveid mode for passing per transfer specific private data, using this it enables the dma devices which needs to pass the parameters which changes per each transfer Change-Id: Ia9ee19f2c253e68b8e5ff254a57478dcc51014ca Signed-off-by: Ravi Kumar V --- drivers/dma/fsldma.c | 2 +- drivers/dma/sirf-dma.c | 2 +- drivers/dma/ste_dma40.c | 2 +- drivers/misc/carma/carma-fpga-program.c | 2 +- drivers/misc/carma/carma-fpga.c | 7 +++---- include/linux/dmaengine.h | 22 ++++++++++++++++++++-- 6 files changed, 27 insertions(+), 10 deletions(-) diff --git a/drivers/dma/fsldma.c b/drivers/dma/fsldma.c index b98070c..f9f77db 100644 --- a/drivers/dma/fsldma.c +++ b/drivers/dma/fsldma.c @@ -645,7 +645,7 @@ fail: static struct dma_async_tx_descriptor *fsl_dma_prep_sg(struct dma_chan *dchan, struct scatterlist *dst_sg, unsigned int dst_nents, struct scatterlist *src_sg, unsigned int src_nents, - unsigned long flags) + unsigned long flags, void *context) { struct fsl_desc_sw *first = NULL, *prev = NULL, *new = NULL; struct fsldma_chan *chan = to_fsl_chan(dchan); diff --git a/drivers/dma/sirf-dma.c b/drivers/dma/sirf-dma.c index 2333810..ff4d344 100644 --- a/drivers/dma/sirf-dma.c +++ b/drivers/dma/sirf-dma.c @@ -428,7 +428,7 @@ sirfsoc_dma_tx_status(struct dma_chan *chan, dma_cookie_t cookie, static struct dma_async_tx_descriptor *sirfsoc_dma_prep_interleaved( struct dma_chan *chan, struct dma_interleaved_template *xt, - unsigned long flags) + unsigned long flags, void *context) { struct sirfsoc_dma *sdma = dma_chan_to_sirfsoc_dma(chan); struct sirfsoc_dma_chan *schan = dma_chan_to_sirfsoc_dma_chan(chan); diff --git a/drivers/dma/ste_dma40.c b/drivers/dma/ste_dma40.c index cc5ecbc..2f58ba9 100644 --- a/drivers/dma/ste_dma40.c +++ b/drivers/dma/ste_dma40.c @@ -2287,7 +2287,7 @@ static struct dma_async_tx_descriptor * d40_prep_memcpy_sg(struct dma_chan *chan, struct scatterlist *dst_sg, unsigned int dst_nents, struct scatterlist *src_sg, unsigned int src_nents, - unsigned long dma_flags) + unsigned long dma_flags, void *context) { if (dst_nents != src_nents) return NULL; diff --git a/drivers/misc/carma/carma-fpga-program.c b/drivers/misc/carma/carma-fpga-program.c index a2d25e4..3739a12 100644 --- a/drivers/misc/carma/carma-fpga-program.c +++ b/drivers/misc/carma/carma-fpga-program.c @@ -530,7 +530,7 @@ static noinline int fpga_program_dma(struct fpga_dev *priv) } /* setup and submit the DMA transaction */ - tx = chan->device->device_prep_dma_sg(chan, + tx = chan->device->dmaengine_prep_dma_sg(chan, table.sgl, num_pages, vb->sglist, vb->sglen, 0); if (!tx) { diff --git a/drivers/misc/carma/carma-fpga.c b/drivers/misc/carma/carma-fpga.c index 14e974b2..be0baf6 100644 --- a/drivers/misc/carma/carma-fpga.c +++ b/drivers/misc/carma/carma-fpga.c @@ -638,10 +638,9 @@ static int data_submit_dma(struct fpga_device *priv, struct data_buf *buf) */ /* setup the scatterlist to scatterlist transfer */ - tx = chan->device->device_prep_dma_sg(chan, - dst_sg, dst_nents, - src_sg, src_nents, - 0); + tx = dmaengine_prep_dma_sg(chan, dst_sg, dst_nents, + src_sg, src_nents, + 0); if (!tx) { dev_err(priv->dev, "unable to prep scatterlist DMA\n"); return -ENOMEM; diff --git a/include/linux/dmaengine.h b/include/linux/dmaengine.h index 679b349..68a57da 100644 --- a/include/linux/dmaengine.h +++ b/include/linux/dmaengine.h @@ -570,7 +570,7 @@ struct dma_device { struct dma_chan *chan, struct scatterlist *dst_sg, unsigned int dst_nents, struct scatterlist *src_sg, unsigned int src_nents, - unsigned long flags); + unsigned long flags, void *context); struct dma_async_tx_descriptor *(*device_prep_slave_sg)( struct dma_chan *chan, struct scatterlist *sgl, @@ -581,7 +581,7 @@ struct dma_device { size_t period_len, enum dma_transfer_direction direction); struct dma_async_tx_descriptor *(*device_prep_interleaved_dma)( struct dma_chan *chan, struct dma_interleaved_template *xt, - unsigned long flags); + unsigned long flags, void *context); int (*device_control)(struct dma_chan *chan, enum dma_ctrl_cmd cmd, unsigned long arg); @@ -615,6 +615,24 @@ static inline struct dma_async_tx_descriptor *dmaengine_prep_slave_single( return chan->device->device_prep_slave_sg(chan, &sg, 1, dir, flags); } +static inline struct dma_async_tx_descriptor *dmaengine_prep_dma_sg( + struct dma_chan *chan, struct scatterlist *dst_sg, + unsigned int dst_nents, struct scatterlist *src_sg, + unsigned int src_nents, unsigned long flags) +{ + return chan->device->device_prep_dma_sg(chan, dst_sg, dst_nents, + src_sg, src_nents, flags, NULL); +} + +static inline struct dma_async_tx_descriptor *dmaengine_prep_interleaved_dma( + struct dma_chan *chan, + struct dma_interleaved_template *xt, + unsigned long flags) +{ + return chan->device->device_prep_interleaved_dma(chan, xt, + flags, NULL); +} + static inline int dmaengine_terminate_all(struct dma_chan *chan) { return dmaengine_device_control(chan, DMA_TERMINATE_ALL, 0);