'\" t .\" Title: usb_sg_wait .\" Author: [FIXME: author] [see http://docbook.sf.net/el/author] .\" Generator: DocBook XSL Stylesheets v1.78.1 .\" Date: January 2017 .\" Manual: USB Core APIs .\" Source: Kernel Hackers Manual 4.8.15 .\" Language: English .\" .TH "USB_SG_WAIT" "9" "January 2017" "Kernel Hackers Manual 4\&.8\&." "USB Core APIs" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" usb_sg_wait \- synchronously execute scatter/gather request .SH "SYNOPSIS" .HP \w'void\ usb_sg_wait('u .BI "void usb_sg_wait(struct\ usb_sg_request\ *\ " "io" ");" .SH "ARGUMENTS" .PP \fIio\fR .RS 4 request block handle, as initialized with \fBusb_sg_init\fR\&. some fields become accessible when this call returns\&. .RE .SH "CONTEXT" .PP !in_interrupt () .SH "DESCRIPTION" .PP This function blocks until the specified I/O operation completes\&. It leverages the grouping of the related I/O requests to get good transfer rates, by queueing the requests\&. At higher speeds, such queuing can significantly improve USB throughput\&. .PP There are three kinds of completion for this function\&. (1) success, where io\->status is zero\&. The number of io\->bytes transferred is as requested\&. (2) error, where io\->status is a negative errno value\&. The number of io\->bytes transferred before the error is usually less than requested, and can be nonzero\&. (3) cancellation, a type of error with status \-ECONNRESET that is initiated by \fBusb_sg_cancel\fR\&. .PP When this function returns, all memory allocated through \fBusb_sg_init\fR or this call will have been freed\&. The request block parameter may still be passed to \fBusb_sg_cancel\fR, or it may be freed\&. It could also be reinitialized and then reused\&. .PP Data Transfer Rates: .PP Bulk transfers are valid for full or high speed endpoints\&. The best full speed data rate is 19 packets of 64 bytes each per frame, or 1216 bytes per millisecond\&. The best high speed data rate is 13 packets of 512 bytes each per microframe, or 52 KBytes per millisecond\&. .PP The reason to use interrupt transfers through this API would most likely be to reserve high speed bandwidth, where up to 24 KBytes per millisecond could be transferred\&. That capability is less useful for low or full speed interrupt endpoints, which allow at most one packet per millisecond, of at most 8 or 64 bytes (respectively)\&. .PP It is not necessary to call this function to reserve bandwidth for devices under an xHCI host controller, as the bandwidth is reserved when the configuration or interface alt setting is selected\&. .SH "COPYRIGHT" .br