Host controller interface (USB, Firewire)


A host controller interface is a register-level interface that enables a host controller for USB or IEEE 1394 hardware to communicate with a host controller driver in software. The driver software is typically provided with an operating system of a personal computer, but may also be implemented by application-specific devices such as a microcontroller.
On the expansion card or motherboard controller, this involves much custom logic, with digital logic engines in the motherboard's controller chip, plus analog circuitry managing the high-speed differential signals. On the software side, it requires a device driver.

IEEE 1394

Open Host Controller Interface

Open Host Controller Interface is an open standard.
When applied to an IEEE 1394 card, OHCI means that the card supports a standard interface to the PC and can be used by the OHCI IEEE 1394 drivers that come with all modern operating systems. Because the card has a standard OHCI interface, the OS does not need to know in advance exactly who makes the card or how it works; it can safely assume that the card understands the set of well-defined commands that are defined in the standard protocol.

USB

Open Host Controller Interface

The OHCI standard for USB is similar to the OHCI standard for IEEE 1394, but supports USB 1.1 only; so as a result its register interface looks completely different. Compared with UHCI, it moves more intelligence into the controller, and thus is accordingly much more efficient; this was part of the motivation for defining it. If a computer provides non-x86 USB 1.1, or x86 USB 1.1 from a USB controller that is not part of an Intel or a VIA chipset, it probably uses OHCI. It has many fewer intellectual property restrictions than UHCI. It only supports 32-bit memory addressing, so it requires an IOMMU or a computationally expensive bounce buffer to work with a 64-bit operating system. OHCI interfaces to the rest of the computer only with memory-mapped I/O.

Universal Host Controller Interface

Universal Host Controller Interface is a proprietary interface created by Intel for USB 1.x. It requires a license from Intel. A USB controller using UHCI does little in hardware and requires a software UHCI driver to do much of the work of managing the USB bus. It only supports 32-bit memory addressing, so it requires an IOMMU or a computationally expensive bounce buffer to work with a 64-bit operating system. UHCI is configured with port-mapped I/O and memory-mapped I/O, and also requires memory-mapped I/O for status updates and for data buffers needed to hold data that needs to be sent or data that was received.

Enhanced Host Controller Interface

The Enhanced Host Controller Interface is a high-speed controller standard applicable to USB 2.0. UHCI- and OHCI-based systems, as existed previously, entailed greater complexity and costs than necessary. Consequently, the USB Implementers Forum insisted on a public specification for EHCI. Intel hosted EHCI conformance-testing and this helped to prevent the incursion of proprietary features.
Originally a PC providing high-speed ports had two controllers, one handling low- and full-speed devices and the second handling high-speed devices. Typically such a system had EHCI and either OHCI or UHCI drivers. The UHCI driver provided low- and full-speed functions using an Intel or VIA chipset's USB host controllers on the motherboard. The OHCI driver provided low- and full-speed functions for USB ports of a PCI expansion card with any other chipset vendor's integrated USB host controllers or discrete controller chipsets attached to the computer's expansion bus, if present. The EHCI driver provided high-speed functions for USB ports on the motherboard or on the discrete USB controller. More recent hardware routes all ports through an internal "rate-matching" hub, and the EHCI controller indirectly provides full and low speed USB functions.
EHCI was designed to work with 32-bit or 64-bit operating systems, so it does not need a bounce buffer or IOMMU to work with a 64-bit operating system as long as a rate-matching hub is implemented to provide full-speed and low-speed connectivity instead of companion controllers.

Extensible Host Controller Interface

Extensible Host Controller Interface is the newest host controller standard that improves speed, power efficiency and virtualization over its predecessors. The goal was also to define a USB host controller to replace UHCI/OHCI/EHCI. It supports all USB device speeds.

Virtual Host Controller Interface

Virtual Host Controller Interface refers to a virtual controller that may export virtual USB devices not backed by physical devices. For instance, on Linux, VHCI controllers are used to expose USB devices from other machines, attached using the USB/IP protocol.