linux-arm-kernel.lists.infradead.org archive mirror
 help / color / mirror / Atom feed
From: s.hauer@pengutronix.de (Sascha Hauer)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH 1/3] dmaengine: add possibility for cyclic transfers
Date: Mon, 16 Aug 2010 14:32:37 +0200	[thread overview]
Message-ID: <20100816123237.GP27749@pengutronix.de> (raw)
In-Reply-To: <19561.10098.732048.877464@ipc1.ka-ro>

On Mon, Aug 16, 2010 at 01:56:34PM +0200, Lothar Wa?mann wrote:
> Hi,
> 
> Sascha Hauer writes:
> > Cyclic transfers are useful for audio where a single buffer divided
> > in periods has to be transfered endlessly until stopped. After being
> > prepared the transfer is started using the dma_async_descriptor->tx_submit
> > function. dma_async_descriptor->callback is called after each period.
> > The transfer is stopped using the DMA_TERMINATE_ALL callback.
> > While being used for cyclic transfers the channel cannot be used
> > for other transfer types.
> > 
> > Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
> > Cc: Haavard Skinnemoen <haavard.skinnemoen@atmel.com>
> > ---
> >  drivers/dma/dmaengine.c   |    2 ++
> >  include/linux/dmaengine.h |    6 +++++-
> >  2 files changed, 7 insertions(+), 1 deletions(-)
> > 
> > diff --git a/drivers/dma/dmaengine.c b/drivers/dma/dmaengine.c
> > index 9d31d5e..e5e79ce 100644
> > --- a/drivers/dma/dmaengine.c
> > +++ b/drivers/dma/dmaengine.c
> > @@ -692,6 +692,8 @@ int dma_async_device_register(struct dma_device *device)
> >  		!device->device_prep_dma_interrupt);
> >  	BUG_ON(dma_has_cap(DMA_SLAVE, device->cap_mask) &&
> >  		!device->device_prep_slave_sg);
> > +	BUG_ON(dma_has_cap(DMA_CYCLIC, device->cap_mask) &&
> > +		!device->device_prep_dma_cyclic);
> >  	BUG_ON(dma_has_cap(DMA_SLAVE, device->cap_mask) &&
> >  		!device->device_control);
> >  
> > diff --git a/include/linux/dmaengine.h b/include/linux/dmaengine.h
> > index c61d4ca..0df7864 100644
> > --- a/include/linux/dmaengine.h
> > +++ b/include/linux/dmaengine.h
> > @@ -67,10 +67,11 @@ enum dma_transaction_type {
> >  	DMA_PRIVATE,
> >  	DMA_ASYNC_TX,
> >  	DMA_SLAVE,
> > +	DMA_CYCLIC,
> >  };
> >  
> >  /* last transaction type for creation of the capabilities mask */
> > -#define DMA_TX_TYPE_END (DMA_SLAVE + 1)
> > +#define DMA_TX_TYPE_END (DMA_CYCLIC + 1)
> >  
> >  
> >  /**
> > @@ -478,6 +479,9 @@ struct dma_device {
> >  		struct dma_chan *chan, struct scatterlist *sgl,
> >  		unsigned int sg_len, enum dma_data_direction direction,
> >  		unsigned long flags);
> > +	struct dma_async_tx_descriptor *(*device_prep_dma_cyclic)(
> > +		struct dma_chan *chan, dma_addr_t buf_addr, size_t buf_len,
> > +		size_t period_len, enum dma_data_direction direction);
> >  	int (*device_control)(struct dma_chan *chan, enum dma_ctrl_cmd cmd,
> >  		unsigned long arg);
> >  
> > -- 
> > 1.7.1
> > 
> Why not implement this feature using cyclic SG lists (created with
> sg_chain())? This would give you endless DMA transfers without any
> special DMA API extensions.

Been there, done that. In the end it just seemed like adding additional
overhead to create the sg list and using the sg for something for which
it is not really designed. Still you need extensions to the DMA API to
signal that you want to have a callback for every sg entry. Normally you
only need a callback on the end of the list.

Sascha


-- 
Pengutronix e.K.                           |                             |
Industrial Linux Solutions                 | http://www.pengutronix.de/  |
Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0    |
Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |

  parent reply	other threads:[~2010-08-16 12:32 UTC|newest]

Thread overview: 40+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-08-16 11:07 [RFC] dmaengine: assorted patches and Freescale SDMA support Sascha Hauer
2010-08-16 11:07 ` [PATCH 1/3] dmaengine: add possibility for cyclic transfers Sascha Hauer
2010-08-16 11:56   ` Lothar Waßmann
2010-08-16 12:27     ` Linus Walleij
2010-08-16 12:32     ` Sascha Hauer [this message]
2010-08-16 12:22   ` Linus Walleij
2010-09-20 13:01   ` Sascha Hauer
2010-09-23 19:42     ` Dan Williams
2010-09-24  7:25       ` Sascha Hauer
2010-08-16 11:07 ` [PATCH 2/3] dmaengine: add wrapper functions for dmaengine Sascha Hauer
2010-08-23  7:17   ` Sascha Hauer
2010-09-23 19:53   ` Dan Williams
2010-09-24  7:25     ` Sascha Hauer
2010-09-24 15:45       ` Dan Williams
2010-08-16 11:07 ` [PATCH 3/3] dmaengine: Add Freescale i.MX SDMA support Sascha Hauer
2010-08-16 12:21   ` Linus Walleij
2010-08-16 14:15     ` Sascha Hauer
2010-08-17  4:36       ` Baruch Siach
2010-08-17  6:47         ` Sascha Hauer
2010-08-18  3:49           ` Alexei Babich
2010-08-18  4:41             ` Baruch Siach
2010-08-18 11:17           ` Philippe Rétornaz
2010-08-24  7:10     ` [PATCH 3/3 v3] " Sascha Hauer
2010-09-02 14:06     ` [PATCH 3/3] " Russell King - ARM Linux
2010-08-23 12:57   ` [PATCH 3/3 v2] " Sascha Hauer
2010-08-23 17:30     ` Linus Walleij
2010-08-24  6:58       ` Sascha Hauer
2010-08-23 17:48     ` Uwe Kleine-König
2010-08-28 15:18       ` Linus Walleij
2010-08-28 15:27         ` Marek Vasut
2010-08-28 16:18           ` Sascha Hauer
2010-08-28 16:30             ` Marek Vasut
2010-08-28 17:20               ` Sascha Hauer
2010-09-02 11:20               ` Russell King - ARM Linux
2010-08-29 12:35             ` Linus Walleij
2010-08-30 12:55               ` Sascha Hauer
2010-08-24  7:58     ` Lothar Waßmann
2010-08-24 15:01       ` Linus Walleij
2010-08-27 12:22   ` [PATCH 3/3 v3] " Sascha Hauer
2010-08-29 21:46     ` Marc Reilly

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20100816123237.GP27749@pengutronix.de \
    --to=s.hauer@pengutronix.de \
    --cc=linux-arm-kernel@lists.infradead.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).