Content deleted Content added
No edit summary |
Sun Creator (talk | contribs) General and Typo fixing, typos fixed: 1.5 Mb/s → 1.5 Mbit/s (4) using AWB |
||
Line 1:
'''eXtensible Host Controller Interface (xHCI)''' is a computer interface specification that defines a register-level description of a Host Controller for Universal Serial bus (USB), which is capable of interfacing to USB 1.0, 2.0, and 3.0 compatible devices. The specification is also referred to as the [[
== Architectural goals ==
Line 16:
== Architectural details ==
=== Support for all speeds ===
The OHCI and UHCI controllers support only USB 1 speed devices (1.5
The xHCI architecture was designed to support all USB speeds, including SuperSpeed (5
=== Power efficiency ===
Line 32:
* Support for native USB device sharing.
* Support of PCIe SR-IOV.
=== Simplified driver architecture ===
The EHCI utilizes OHCI or UHCI controllers as “companion controllers”, where USB 2 devices are managed through the EHCI stack, and the port logic of the EHCI allows a USB 1 or 2 device to be routed to a port of a “companion” UHCI or OHCI controller, where the USB 1 and 2 devices are managed through the respective UHCI or OHCI stack. For example, a USB 2 PCIe host controller card that presents 4 USB “Standard A” connectors typically presents one 4-port EHCI and two 2-port OHCI controllers to system software. When a USB 2 device is attached to any of the 4 connectors, the device is managed through one of the 4 root hub ports of the EHCI controller. If a USB 1 device is attached to connectors 1 or 2 they will be routed to the root hub ports of one of the OHCI controllers for management, and USB 1 devices attached to connectors 3 or 4 will be routed to the root hub ports of the other OHCI controller. The EHCI dependence on separate host controllers for USB 1 and 2 devices results in complex interactions and dependencies between the EHCI and OHCI/UHCI drivers.
* The xHCI architecture eliminates the need for companion controllers and their separate driver stacks.
* The incorporation of the schedule, bandwidth management, and USB device address assignment functions, that were previously performed by the driver in to the xHCI hardware enable a simpler, leaner, lower latency software stack for the xHCI.
=== Stream support ===
Support for Streams was added to the USB 3.0 SuperSpeed specification, primarily to enable high performance storage operations over USB. Classically there has been a 1:1 relationship between a USB endpoint and a buffer in system memory, and the host controller solely responsible for directing all data transfers. Streams changed this paradigm by providing a 1-to-many “endpoint to buffer” association, and allowing the device to direct the host controller as to which buffer to move. The USB data transfers associated with a USB Stream endpoint are scheduled by the xHCI the same as any other bulk endpoint is, however the data buffer associated with a transfer is determined by the device.
* The xHCI USB Stream support allows up to 64K buffers to be associated with a single endpoint.
* The xHCI Streams protocol support allows a USB device to select which buffer that the xHCI will transfer when the endpoint is scheduled.
=== Scalability ===
The xHCI architecture was designed to highly scalable, capable of supporting 1 to 255 USB devices and 1 to 255 root hub ports. Since each USB device is allowed to define up to 31 endpoints, an xHCI that supported 255 devices would have to support 7,906 separate total endpoints. Classically, each memory buffer associated with an endpoint is described by a queue of physical memory blocks, where the queue requires a head pointer, tail pointer, length and other registers to define its state. There are many ways to define queue state, however if one were to assume 32 bytes of register space for each queue, then almost a 256KB of register space would be required to support 7,906 queues. Typically only a small number of USB devices are attached to a system at one time, and on the average a USB device supports 3-4 endpoints, of which only a subset of the endpoints are active at the same time.
Line 50 ⟶ 53:
The Open Host Controller Interface (OHCI) specification was defined by a consortium of companies (Compaq, Microsoft, and National Semiconductor) as open specification to support USB 1.0 devices. The Universal Host Controller Interface (UHCI) refers to a specification that [[Intel]] originally defined as a proprietary interface to support USB 1.0 devices. The UHCI specification was eventually made public, but only after the rest of industry had adopted the OHCI specification.
The EHCI specification was defined by Intel to support USB 2.0 devices. The EHCI architecture was modeled after the UHCI and OHCI controllers, which required software to build the USB transaction schedules in memory, and to manage bandwidth and address allocation. To eliminate a redundant industry effort of defining an open version of a USB 2.0 host controller interface, Intel made the EHCI specification available to the industry with no licensing fees. This licensing model was continued for the xHCI specification.
The xHCI specification was also defined by Intel, however with a greatly expanded industry contribution. Over 100 companies have contributed to the xHCI specification. The [[USB Implementers Forum]] (USB-IF) has also funded a set of xHCI Compliance Tests to maximize the compatibility of the various xHCI implementations. xHCI controllers have been shipping since December
=== Version history ===
The xHCI specification uses "errata" files to define updates and clarifications to a specific release. The changes in the errata files are accumulated in each release. Refer to the associated errata files for the details of specific changes.
Most changes defined in the xHCI errata files are clarifications, grammatical or spelling corrections, additional cross-references, etc., which do not affect a driver implementation. Changes that are determined to be ''architectural'' utilize a ''Capability'' flag to determine whether a particular feature is supported by an xHCI implementation, and an ''Enable'' flag to turn on the feature.
==== Prereleases ====
The xHCI specification evolved through several versions before its official release in 2010:
Line 60 ⟶ 65:
* ''USB 0.96'': Released in August 2009.
* ''USB 0.96a'': 1.0 Release Candidate, Released in April 2010. First shipping devices based on this version.
==== xHCI 1.0 ====
* ''xHCI 1.0'': First public release, May 21, 2010. <br />Specified USB data rates of ''1.5 Mbit/s'' (''Low-speed''), ''12 Mbit/s'' (''Full-speed''), ''480 Mbit/s'' (''High-speed'') and ''5 Gbit/s'' (''SuperSpeed'').
Line 76 ⟶ 82:
{{DISPLAYTITLE:eXtensible Host Controller Interface (xHCI)}}
[[Category:Universal Serial Bus]]
|