Re: [PATCH 13/23] Support for submitting control URBs under xHCI.

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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

[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux