RE: [PATCH 01/11] dmaengine: add context parameter toprep_slave_sg and prep_dma_cyclic

From: Bounine, Alexandre
Date: Mon Feb 06 2012 - 10:57:20 EST


On Mon, Feb 06, 2012 at 10:29 AM, Vinod Koul wrote:
>
> On Mon, 2012-02-06 at 07:04 -0800, Bounine, Alexandre wrote:
> > I was thinking about keeping the original scatterlist for dmac
> unchanged,
> > but allocating another scatterlist in rio_dma_prep_slave_sg() and
> chaining
> > two lists together. After it passed to device specific function, it
> parses
> > first section of the chain for additional transfer parameters and use
> > following scatterlist as intended for dmac.
> hmmm, but that wouldn't make it generic for other systems like proposed
> MSM box mode..., right?

Yes, you are right. It is just another way to pass subsystem specific info
while preserving existing DMA API definitions.

> >
> > But Russell's idea (See https://lkml.org/lkml/2012/2/3/269 ) seems to
> be
> > a better way without added complexity and I am ready to take that
> path and
> > make new patches if you and Dan agree with it.
> but it still doesn't fix his concerns for the using void pointer.

At least corresponding inline functions may use specific data types
or hide the new parameter like in Russell's code example. (I believe
he forgot to pass NULL in chan->device->device_prep_slave_sg() as
the new param there).

>
> If we agree that this is the way, then I was thinking to add arch
> specif
> calls which cast the context pointer to void for passing to dmac. The
> arch specific struct gets defined in dmaengine_arch.h <or something
> similar>. That way clients cant define their own stuff and we continue
> to be generic as well as cater to arch specific requirements.
>

May we keep arch/subsystem specific calls within a subsystem code?
E.g. I am providing rio_dma_prep_slave_sg() which has an interface defined
in RapidIO terms plus I am filtering for an appropriate dmac.

Alex.

èº{.nÇ+‰·Ÿ®‰­†+%ŠËlzwm…ébëæìr¸›zX§»®w¥Š{ayºÊÚë,j­¢f£¢·hš‹àz¹®w¥¢¸ ¢·¦j:+v‰¨ŠwèjØm¶Ÿÿ¾«‘êçzZ+ƒùšŽŠÝj"ú!¶iO•æ¬z·švØ^¶m§ÿðà nÆàþY&—