On Monday 27 April 2009, Sarah Sharp wrote: > Warn users of URB_NO_SETUP_DMA_MAP about xHCI behavior. > > Device drivers can choose to DMA map the setup packet of a control transfer > before submitting the URB to the USB core. Drivers then set the > URB_NO_SETUP_DMA_MAP and pass in the DMA memory address in setup_dma, instead of > providing a kernel address for setup_packet. However, xHCI requires that the > setup packet be copied into an internal data structure, and we need a kernel > memory address pointer for that. Warn users of URB_NO_SETUP_DMA_MAP that they > should provide a valid pointer for setup_packet, along with the DMA address. > > FIXME: I'm not entirely sure how to work around this in the xHCI driver > or USB core. Are you quite certain "provide both addresses" isn't already a requirement? I kind of thought it was one... (Even if the driver *can* do DMA for a given URB, there is no way to guarantee that it will in fact do so ... it may need to fall back to PIO for various reasons.) > Signed-off-by: Sarah Sharp <sarah.a.sharp@xxxxxxxxxxxxxxx> > --- > include/linux/usb.h | 4 +++- > 1 files changed, 3 insertions(+), 1 deletions(-) > > diff --git a/include/linux/usb.h b/include/linux/usb.h > index 2b8845b..d673d05 100644 > --- a/include/linux/usb.h > +++ b/include/linux/usb.h > @@ -1045,7 +1045,9 @@ typedef void (*usb_complete_t)(struct urb *); > * @setup_dma: For control transfers with URB_NO_SETUP_DMA_MAP set, the > * device driver has provided this DMA address for the setup packet. > * The host controller driver should use this in preference to > - * setup_packet. > + * setup_packet, but the HCD may chose to ignore the address if it must > + * copy the setup packet into internal structures. Therefore, setup_packet > + * must always point to a valid buffer. > * @start_frame: Returns the initial frame for isochronous transfers. > * @number_of_packets: Lists the number of ISO transfer buffers. > * @interval: Specifies the polling interval for interrupt or isochronous > -- > 1.5.6.5 > > -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html