|
@@ -1036,9 +1036,10 @@ typedef void (*usb_complete_t)(struct urb *);
|
|
* @transfer_flags: A variety of flags may be used to affect how URB
|
|
* @transfer_flags: A variety of flags may be used to affect how URB
|
|
* submission, unlinking, or operation are handled. Different
|
|
* submission, unlinking, or operation are handled. Different
|
|
* kinds of URB can use different flags.
|
|
* kinds of URB can use different flags.
|
|
- * @transfer_buffer: This identifies the buffer to (or from) which
|
|
|
|
- * the I/O request will be performed (unless URB_NO_TRANSFER_DMA_MAP
|
|
|
|
- * is set). This buffer must be suitable for DMA; allocate it with
|
|
|
|
|
|
+ * @transfer_buffer: This identifies the buffer to (or from) which the I/O
|
|
|
|
+ * request will be performed unless URB_NO_TRANSFER_DMA_MAP is set
|
|
|
|
+ * (however, do not leave garbage in transfer_buffer even then).
|
|
|
|
+ * This buffer must be suitable for DMA; allocate it with
|
|
* kmalloc() or equivalent. For transfers to "in" endpoints, contents
|
|
* kmalloc() or equivalent. For transfers to "in" endpoints, contents
|
|
* of this buffer will be modified. This buffer is used for the data
|
|
* of this buffer will be modified. This buffer is used for the data
|
|
* stage of control transfers.
|
|
* stage of control transfers.
|
|
@@ -1104,9 +1105,15 @@ typedef void (*usb_complete_t)(struct urb *);
|
|
* allocate a DMA buffer with usb_buffer_alloc() or call usb_buffer_map().
|
|
* allocate a DMA buffer with usb_buffer_alloc() or call usb_buffer_map().
|
|
* When these transfer flags are provided, host controller drivers will
|
|
* When these transfer flags are provided, host controller drivers will
|
|
* attempt to use the dma addresses found in the transfer_dma and/or
|
|
* attempt to use the dma addresses found in the transfer_dma and/or
|
|
- * setup_dma fields rather than determining a dma address themselves. (Note
|
|
|
|
- * that transfer_buffer and setup_packet must still be set because not all
|
|
|
|
- * host controllers use DMA, nor do virtual root hubs).
|
|
|
|
|
|
+ * setup_dma fields rather than determining a dma address themselves.
|
|
|
|
+ *
|
|
|
|
+ * Note that transfer_buffer must still be set if the controller
|
|
|
|
+ * does not support DMA (as indicated by bus.uses_dma) and when talking
|
|
|
|
+ * to root hub. If you have to trasfer between highmem zone and the device
|
|
|
|
+ * on such controller, create a bounce buffer or bail out with an error.
|
|
|
|
+ * If transfer_buffer cannot be set (is in highmem) and the controller is DMA
|
|
|
|
+ * capable, assign NULL to it, so that usbmon knows not to use the value.
|
|
|
|
+ * The setup_packet must always be set, so it cannot be located in highmem.
|
|
*
|
|
*
|
|
* Initialization:
|
|
* Initialization:
|
|
*
|
|
*
|