XHCI(4)

πŸ“¦
version 15.1 Β· 3 versions
, in freebsd 14.5, freebsd 15.1, nixpkgs unstable

✨ NAME ✨

Okay bestie, welcome to the xhci(4) manual page! πŸ’– This is the kernel interfaces manual moment, and we're about to get into the xhci driver β€” which is literally the USB eXtensible Host Controller driver. Periodt. πŸ’…


✨ SYNOPSIS ✨

options USB_DEBUG
device xhci

✨ DESCRIPTION ✨

So here's the tea: the xhci driver provides support for the USB eXtensible Host Controller Interface, which β€” and this is the iconic part β€” allows use of USB 1.0, 2.0 and 3.0 devices on the same USB port. Like, all of them. Together. Slay. πŸ”₯

The XHCI controller supports USB connection speeds from 5.0Gbps and above when using USB 3.x compliant devices. Highkey fast. ⚑


✨ HARDWARE ✨

The xhci driver supports XHCI compatible controllers having PCI class 12 (serial bus), subclass 3 (USB) and programming interface 48 (XHCI). That's the vibe check for your hardware β€” if it matches, you're in. πŸ¦‹


✨ SYSCTL VARIABLES ✨

The following variables are available as both sysctl(8) variables and loader(8) tunables. Bestie, these are your knobs and dials β€” turn them with intention. πŸŽ›οΈ

  • hw.usb.xhci.debug β€” Set debug output level, where 0 is debugging disabled and larger values increase debug message verbosity. The default value is 0. So like, keep it at 0 unless you're in detective mode. πŸ•΅οΈβ€β™€οΈ
  • hw.usb.xhci.dcepquirk β€” Set to enable quirk for deconfiguration of endpoints. The default value is 0. It's giving "only touch this if you know what you're doing" energy. πŸ™ˆ
  • hw.usb.xhci.ctlquirk β€” Set to submit full USB control request as one job, up to 64kBytes. Else the USB control request will be split into multiple smaller requests. The default value is 1. So by default it's one big job, which is lowkey iconic of it. πŸ’ͺ
  • hw.usb.xhci.streams β€” Set to enable USB streams support. The default value is 0. Streams are off by default, just so you know. 🌊
  • hw.usb.xhci.route β€” Set bitmap for switching EHCI ports to the XHCI controller. The default value is 0. It's a bitmap situation, bestie. πŸ—ΊοΈ
  • hw.usb.xhci.polling β€” Set to use a timer to poll the interrupt handler. The default value is 0. Polling is optional, not mandatory. πŸ•°οΈ
  • hw.usb.xhci.dma32 β€” Set to only use 32-bit DMA for the XHCI controller. The default value is 0. So it's not limited to 32-bit unless you say so. 🧠
  • hw.usb.xhci.ctlstep β€” Set to enable control endpoint status state stepping. The default value is 0. That's the default, and the default is the default. πŸ’β€β™€οΈ

✨ SEE ALSO ✨

Bestie, if you wanna go deeper, check out these bad boys:

They're all in the USB cinematic universe. 🌈


✨ HISTORY ✨

The xhci device driver first appeared in FreeBSD 8.2. That's the origin story, and it's giving legacy. πŸ‘‘


Anyways, that's the whole manual page! πŸ’« This was from Debian, dated October 21, 2022, and it's the XHCI(4) page β€” so if you ever forget, just remember: xhci is the moment, the USB 3.x support is real, and the defaults are exactly what they are. No cap. πŸ«ΆπŸ’œ

πŸ“¦ where this page comes from