Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

USB: Support for submitting control URBs under xHCI.

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.

Signed-off-by: Sarah Sharp <sarah.a.sharp@linux.intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>

authored by

Sarah Sharp and committed by
Greg Kroah-Hartman
6d65b78a 3ffbba95

+3 -1
+3 -1
include/linux/usb.h
··· 1044 1044 * @setup_dma: For control transfers with URB_NO_SETUP_DMA_MAP set, the 1045 1045 * device driver has provided this DMA address for the setup packet. 1046 1046 * The host controller driver should use this in preference to 1047 - * setup_packet. 1047 + * setup_packet, but the HCD may chose to ignore the address if it must 1048 + * copy the setup packet into internal structures. Therefore, setup_packet 1049 + * must always point to a valid buffer. 1048 1050 * @start_frame: Returns the initial frame for isochronous transfers. 1049 1051 * @number_of_packets: Lists the number of ISO transfer buffers. 1050 1052 * @interval: Specifies the polling interval for interrupt or isochronous