[PATCH] IMX/SDMA : save the real count for one DMA transaction.

Vinod Koul vinod.koul at intel.com
Wed Nov 23 06:40:42 EST 2011


On Wed, 2011-11-23 at 19:29 +0800, Huang Shijie wrote:
> > On Wed, Nov 23, 2011 at 07:13:23PM +0800, Huang Shijie wrote:
> >>>>>> +	/* save the real count we received or transmitted. */
> >>>>>> +	chan->private = (void *)count;
> >>>>> And if someone later needs another variable which is private?
> >>>>>
> >>>> I ever wanted to add an new parameter `void *` to dma_aync_tx_callback,
> >>>> but it seemed i have
> >>>> to change a lot of files.
> >>>>
> >>>> Do you have any better suggestion?
> >>> Use a private struct and put count in there.
> >>>
> >> Where to put the private struct? in the imx-sdma.c ?
> >> If i put it there, how can i get it in the UART driver with the current
> >> DMA API?
> > So, in the UART driver you assume that void* is an int? Or how do you
> > currently use count?
> >
> In the UART driver, I use the following lines:
> -------------------------------------------------------
> + struct dma_chan *chan = sport->dma_chan_rx;
> + unsigned int count = (unsigned int)chan->private;
> -------------------------------------------------------
Chan->private is a depreciated field, and will be removed soon...
possibly 3.3, so obviosly any usage of it is incorrect

Why dont you use .device_tx_status callback and return the number of
bytes remaining to be transmitted in residue value of the struct
dma_tx_state. That should be size - count.

-- 
~Vinod




More information about the linux-arm-kernel mailing list