EHCI(4)
π EHCI(4) β the Kernel Interfaces Manual glow-up π
okay bestie, sit down, hydrate, because we're talking about ehci β the USB Enhanced Host Controller driver and honestly? she's iconic. this is from the Kernel Interfaces Manual, section 4, so you know it's kernel-device territory. let's get into it β¨
πΈ NAME πΈ
ehci β USB Enhanced Host Controller driver
β¨ SYNOPSIS β¨
device ehci
that's it. that's the whole vibe. one line, no cap π
π¦ DESCRIPTION π¦
so the ehci driver is out here providing support for the USB Enhanced Host Controller Interface, which is the interface that USB 2.0 controllers use. periodt.
now here's the tea, and it's kind of a big deal: EHCI controllers are peculiar (their word, not mine, but fr fr) because they can only handle the USB 2.0 protocol. that's literally all they do. which means they normally have one or more companion controllers hanging around β like ohci(4) or uhci(4) β and those besties are the ones handling all the USB 1.x devices. teamwork, slay π«Ά
consequence of all this? every single USB connector is electrically connected to two USB controllers. two. for one physical port. lowkey unhinged but okay.
the handling of this whole situation is totally automatic β you don't have to do anything, she just handles it β but you can notice it, because USB 1.x devices and USB 2.0 devices plugged into the same connector will appear to connect to different USB buses. yes it looks weird. no it's not a bug. it's giving "two controllers, one port, zero drama" π
π LOADER TUNABLES π
okay so when the kernel has been compiled with options USB_DEBUG, some tunables become available that affect the behavior of ehci. you can set these at the loader(8) prompt before booting the kernel, or you can store them in loader.conf(5). your call, bestie β
hw.usb.ehci.lostintrbugβ this tunable enables the lost interrupt quirk. the default value is0(off).hw.usb.ehci.iaadbugβ this tunable enables the EHCI doorbell quirk. the default value is0(off).hw.usb.ehci.no_hsβ this tunable disables USB devices from attaching like HIGH-speed ones, and will force all attached devices to attach to the FULL- or LOW-speed companion controller. the default value is0(off).
ngl these all default to 0 (off) so if you don't touch them, nothing changes. they're there for when things get weird π₯
π SYSCTL VARIABLES π
the following variables are available as both sysctl(8) variables and loader(8) tunables. double duty, main character energy π
hw.usb.ehci.debugβ debug output level, where0is debugging disabled and larger values increase debug message verbosity. default is0.
π SEE ALSO π
go read those too, iykyk π
π HISTORY π
the ehci device driver first appeared in FreeBSD 5.1. a legend from day one π
and that's the whole page, bestie!! this one came from Debian, dated April 24, 2018 β so yeah, vintage but still absolutely eating. go plug something in. πππ¦
π¦ where this page comes from
- debian bookworm: freebsd-manpages 12.2-1 Β· BSD-2-Clause-FreeBSD AND BSD-4-Clause
- debian trixie: freebsd-manpages 12.2-2 Β· BSD-2-Clause-FreeBSD AND BSD-4-Clause
- ubuntu jammy: freebsd-manpages 12.2-1 Β· BSD-2-Clause-FreeBSD AND BSD-4-Clause
- ubuntu noble: freebsd-manpages 12.2-1 Β· BSD-2-Clause-FreeBSD AND BSD-4-Clause
- ubuntu questing: freebsd-manpages 12.2-2
- ubuntu resolute: freebsd-manpages 12.2-2build1 Β· BSD-2-Clause-FreeBSD AND BSD-4-Clause
- ubuntu stonking: freebsd-manpages 12.2-2build1 Β· BSD-2-Clause-FreeBSD AND BSD-4-Clause
- Copyright (c) 2001 The NetBSD Foundation, Inc
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms