USB: update documentation for URB_ISO_ASAP
This patch (as1611) updates the USB documentation and kerneldoc to give a more precise meaning for the URB_ISO_ASAP flag and to explain more of the details of scheduling for isochronous URBs. Signed-off-by: Alan Stern <stern@rowland.harvard.edu> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:

committed by
Greg Kroah-Hartman

parent
7267547992
commit
a03bede5c7
@@ -1129,8 +1129,8 @@ extern int usb_disabled(void);
|
||||
* Note: URB_DIR_IN/OUT is automatically set in usb_submit_urb().
|
||||
*/
|
||||
#define URB_SHORT_NOT_OK 0x0001 /* report short reads as errors */
|
||||
#define URB_ISO_ASAP 0x0002 /* iso-only, urb->start_frame
|
||||
* ignored */
|
||||
#define URB_ISO_ASAP 0x0002 /* iso-only; use the first unexpired
|
||||
* slot in the schedule */
|
||||
#define URB_NO_TRANSFER_DMA_MAP 0x0004 /* urb->transfer_dma valid on submit */
|
||||
#define URB_NO_FSBR 0x0020 /* UHCI-specific */
|
||||
#define URB_ZERO_PACKET 0x0040 /* Finish bulk OUT with short packet */
|
||||
@@ -1309,15 +1309,20 @@ typedef void (*usb_complete_t)(struct urb *);
|
||||
* the transfer interval in the endpoint descriptor is logarithmic.
|
||||
* Device drivers must convert that value to linear units themselves.)
|
||||
*
|
||||
* Isochronous URBs normally use the URB_ISO_ASAP transfer flag, telling
|
||||
* the host controller to schedule the transfer as soon as bandwidth
|
||||
* utilization allows, and then set start_frame to reflect the actual frame
|
||||
* selected during submission. Otherwise drivers must specify the start_frame
|
||||
* and handle the case where the transfer can't begin then. However, drivers
|
||||
* won't know how bandwidth is currently allocated, and while they can
|
||||
* find the current frame using usb_get_current_frame_number () they can't
|
||||
* know the range for that frame number. (Ranges for frame counter values
|
||||
* are HC-specific, and can go from 256 to 65536 frames from "now".)
|
||||
* If an isochronous endpoint queue isn't already running, the host
|
||||
* controller will schedule a new URB to start as soon as bandwidth
|
||||
* utilization allows. If the queue is running then a new URB will be
|
||||
* scheduled to start in the first transfer slot following the end of the
|
||||
* preceding URB, if that slot has not already expired. If the slot has
|
||||
* expired (which can happen when IRQ delivery is delayed for a long time),
|
||||
* the scheduling behavior depends on the URB_ISO_ASAP flag. If the flag
|
||||
* is clear then the URB will be scheduled to start in the expired slot,
|
||||
* implying that some of its packets will not be transferred; if the flag
|
||||
* is set then the URB will be scheduled in the first unexpired slot,
|
||||
* breaking the queue's synchronization. Upon URB completion, the
|
||||
* start_frame field will be set to the (micro)frame number in which the
|
||||
* transfer was scheduled. Ranges for frame counter values are HC-specific
|
||||
* and can go from as low as 256 to as high as 65536 frames.
|
||||
*
|
||||
* Isochronous URBs have a different data transfer model, in part because
|
||||
* the quality of service is only "best effort". Callers provide specially
|
||||
|
Reference in New Issue
Block a user