The Extensible Host Controller Interface (xHCI) is a register-level hardware/software interface between USB host system software and the USB host controller hardware. The xHCI architecture is defined to ultimately replace the UHCI/OHCI/EHCI, and to provide high performance, high power efficient, and extensible USB host architecture for interfacing to next-generation USB devices and even beyond.
Conceptual Blocks of xHCI Architecture
The following figure illustrates a conceptual block diagram of an USB 3.0 host system. The Extensible Host Controller (xHC) is the USB 3.0 host hardware implementation, which enables ports of Low-Speed, Full-Speed, High-Speed and SuperSpeed support. The interface presented by the Extensible Host Controller to the software system is the Extensible Host Controller Interface (xHCI). The Extensible Host Controller Driver is the software entity of the interface between the Extensible Host Controller and the USB Driver. USB Driver provides interface the transport mechanisms of different architectures (Isoch, Interrupt, Control, and Bulk Pipes). The Class Driver executes the function corresponding to a particular class of USB devices (Mass Storage, Human Interface, Audio, etc.). The Application Software provides specified functions by USB devices through the standard interfaces provided by the Class Driver.
USB 3.0 SuperSpeed and legacy speed support
xHCI specification describes the host controller architecture that is capable of USB 3.0 SuperSpeed devices. This includes new USB 3.0 features and other extensions to the protocol. xHCI specification also defined to support all legacy USB device speeds including Low-Speed, Full-Speed, and High-Speed.
USB 3.0 specification provides more power management modes to improve battery life of mobile devices. xHCI supports all power management needs of USB 3.0 and USB2 LPM extensions (Link Power Management).
Memory Access Efficiency
The xHCI’s data transfer model eliminates the memory based transaction schedules and utilize transfer level operations to decrease the average number of memory accesses required to execute USB operations. The xHCI controller inherently supports up to 64-bit memory addressing.
Simple Hardware Interface
The xHCI provides a simple interface between host controller and software. Via the interface, the software can provide the host controller with parameterized Transfer Requests to execute transactions on USB. The interface allows software to asynchronously add request to the interface while the host controller is executing.
The xHCI architecture moves the management of cross Virtual Machines (VMs) into hardware, enabling USB resource management across VMs. The xHCI virtualization features also provide for: (1) Direct-Assignment of individual USB devices (irrespective of their location in the bus topology) to any VM, (2) minimizing run-time inter-VM communications, and (3) support for native USB device sharing.