[RFC PATCH v2 8/9] USB: add HCD_NO_COHERENT_MEM host controller driver flag
Alan Stern
stern at rowland.harvard.edu
Tue Mar 2 10:50:23 EST 2010
On Mon, 1 Mar 2010, Albert Herranz wrote:
> > If transfer_buffer_length is 0 then do nothing.
> > Otherwise if num_sgs > 0 then do nothing.
> > Otherwise if URB_NO_TRANSFER_DMA_MAP and transfer_dma
> > are both set (this avoids your HCD_NO_COHERENT_MEM
> > case) then do nothing.
> >
>
> I see. This case would include the PIO case too (for which dma_handle
> is set to all 1s).
The test above should be transfer_dma != ~0, not transfer_dma != 0,
since ~0 means the DMA address isn't set. In fact I forgot to
include the PIO case; it should be handled by changing the remaining
tests as follows:
Otherwise if hcd->self.uses_dma is set then
If this URB doesn't require PIO then call dma_map_single
Otherwise if HCD_LOCAL_MEM is set then call hcd_alloc_coherent
Otherwise do nothing (PIO case).
Currently "this URB doesn't require PIO" is always true, but in the
future it won't be.
> So this assumes that transfer_dma should be set initially to 0 when
> allocating USB buffers for HCD_NO_COHERENT_MEM.
No, it should be set to ~0, the same as when buffers are allocated for
a PIO-based controller.
Alan Stern
More information about the linux-arm-kernel
mailing list