This post is a cop out. The first three sentences were added
just to increase the ratio of content actually written by me.
Nonetheless, I'm pretty sure someone else will find it useful.
Several times now I've wondered about the difference between
the Linux ohci_hcd, uhci_hcd and ehci_hcd
drivers. Well, at long last I looked it up.
The hardware that contains the host controller and the root
hub has an interface toward the programmer which is called
Host Controller Device (HCD) and is defined by the hardware
implementer. In practice, these are hardware registers (ports)
in the computer.
At version 1.0 and 1.1 there were two competing HCD
implementations. Compaq's Open Host Controller Interface
(OHCI) was adopted as the standard by the USB-IF. However,
Intel subsequently created a specification they called the
Universal Host Controller Interface (UHCI) and insisted other
implementers pay to license and implement UHCI. VIA
Technologies licensed the UHCI standard from Intel; all other
chipset implementers use OHCI. The main difference between
OHCI and UHCI is the fact that UHCI is more software-driven
than OHCI is, making UHCI slightly more processor-intensive
but cheaper to implement (excluding the license fees). The
dueling implementations forced operating system vendors and
hardware vendors to develop and test on both implementations
which increased cost. During the design phase of USB 2.0 the
USB-IF insisted on only one implementation. The USB 2.0 HCD
implementation is called the Extended Host Controller
Interface (EHCI). Only EHCI can support high-speed transfers.
Each EHCI controller contains four virtual HCD implementations
to support Full Speed and Low Speed devices. The virtual HCD
on Intel and Via EHCI controllers are UHCI. All other vendors
use virtual OHCI controllers.
-- http://en.wikipedia.org/wiki/Universal_Serial_Bus#Technical_details