07.06.2013 Views

Scsi - Index of

Scsi - Index of

Scsi - Index of

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

716 * Bulk URBs may<br />

717 * use the URB_ZERO_PACKET transfer flag, indicating that bulk OUT transfers<br />

718 * should always terminate with a short packet, even if it means adding an<br />

719 * extra zero length packet.<br />

720 *<br />

721 * Control URBs must provide a setup_packet. The setup_packet and<br />

722 * transfer_buffer may each be mapped for DMA or not, independently <strong>of</strong><br />

723 * the other. The transfer_flags bits URB_NO_TRANSFER_DMA_MAP and<br />

724 * URB_NO_SETUP_DMA_MAP indicate which buffers have already been mapped.<br />

725 * URB_NO_SETUP_DMA_MAP is ignored for non-control URBs.<br />

726 *<br />

727 * Interrupt URBs must provide an interval, saying how <strong>of</strong>ten (in milliseconds<br />

728 * or, for highspeed devices, 125 microsecond units)<br />

729 * to poll for transfers. After the URB has been submitted, the interval<br />

730 * field reflects how the transfer was actually scheduled.<br />

731 * The polling interval may be more frequent than requested.<br />

732 * For example, some controllers have a maximum interval <strong>of</strong> 32 microseconds,<br />

733 * while others support intervals <strong>of</strong> up to 1024 microseconds.<br />

734 * Isochronous URBs also have transfer intervals. (Note that for isochronous<br />

735 * endpoints, as well as high speed interrupt endpoints, the encoding <strong>of</strong><br />

736 * the transfer interval in the endpoint descriptor is logarithmic.<br />

737 * Device drivers must convert that value to linear units themselves.)<br />

738 *<br />

739 * Isochronous URBs normally use the URB_ISO_ASAP transfer flag, telling<br />

740 * the host controller to schedule the transfer as soon as bandwidth<br />

741 * utilization allows, and then set start_frame to reflect the actual frame<br />

742 * selected during submission. Otherwise drivers must specify the start_frame<br />

743 * and handle the case where the transfer can't begin then. However, drivers<br />

744 * won't know how bandwidth is currently allocated, and while they can<br />

745 * find the current frame using usb_get_current_frame_number () they can't<br />

67<br />

746 * know the range for that frame number. (Ranges for frame counter values<br />

747 * are HC-specific, and can go from 256 to 65536 frames from "now".)<br />

748 *<br />

749 * Isochronous URBs have a different data transfer model, in part because<br />

750 * the quality <strong>of</strong> service is only "best effort". Callers provide specially<br />

751 * allocated URBs, with number_<strong>of</strong>_packets worth <strong>of</strong> iso_frame_desc structures<br />

752 * at the end. Each such packet is an individual ISO transfer. Isochronous<br />

753 * URBs are normally queued, submitted by drivers to arrange that<br />

754 * transfers are at least double buffered, and then explicitly resubmitted<br />

755 * in completion handlers, so<br />

756 * that data (such as audio or video) streams at as constant a rate as the<br />

757 * host controller scheduler can support.<br />

758 *

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!