[PATCH v3 01/11] dmaengine: Add API function dmaengine_prep_slave_dma_array()
Paul Cercueil
paul at crapouillou.net
Tue Apr 4 07:42:11 UTC 2023
Hi Hillf,
Le mardi 04 avril 2023 à 09:59 +0800, Hillf Danton a écrit :
> On 3 Apr 2023 17:47:50 +0200 Paul Cercueil <paul at crapouillou.net>
> > This function can be used to initiate a scatter-gather DMA transfer
> > where the DMA addresses and lengths are located inside arrays.
> >
> > The major difference with dmaengine_prep_slave_sg() is that it
> > supports
> > specifying the lengths of each DMA transfer; as trying to override
> > the
> > length of the transfer with dmaengine_prep_slave_sg() is a very
> > tedious
> > process. The introduction of a new API function is also justified
> > by the
> > fact that scatterlists are on their way out.
>
> Given sg's wayout and conceptually iovec and kvec (in
> include/linux/uio.h),
> what you add should have been dma_vec to ease people making use of
> it.
>
> struct dma_vec {
> dma_addr_t addr;
> size_t len;
> };
Well it's not too late ;)
Thanks for the feedback.
Cheers,
-Paul
> >
> > Signed-off-by: Paul Cercueil <paul at crapouillou.net>
> >
> > ---
> > v3: New patch
> > ---
> > include/linux/dmaengine.h | 16 ++++++++++++++++
> > 1 file changed, 16 insertions(+)
> >
> > diff --git a/include/linux/dmaengine.h b/include/linux/dmaengine.h
> > index c3656e590213..62efa28c009a 100644
> > --- a/include/linux/dmaengine.h
> > +++ b/include/linux/dmaengine.h
> > @@ -912,6 +912,11 @@ struct dma_device {
> > struct dma_async_tx_descriptor
> > *(*device_prep_dma_interrupt)(
> > struct dma_chan *chan, unsigned long flags);
> >
> > + struct dma_async_tx_descriptor
> > *(*device_prep_slave_dma_array)(
> > + struct dma_chan *chan, dma_addr_t *addrs,
> > + size_t *lengths, size_t nb,
> > + enum dma_transfer_direction direction,
> > + unsigned long flags);
>
> Then the callback looks like
>
> struct dma_async_tx_descriptor *(*device_prep_slave_vec)(
> struct dma_chan *chan,
> struct dma_vec *vec,
> int nvec,
> enum dma_transfer_direction direction,
> unsigned long flags);
More information about the dri-devel
mailing list