Epic: #113 · Milestone: MC3 — Pi 5 platform drivers
Why
Stub S6: drivers/usb.home is 44 lines — no host controller driver, no enumeration, no transfers. usb_xhci.home (531) claims RP1 support but contains no MMIO; xhci.home (656) and usb_hub.home (1,361) are orphaned. For a media center USB is: plug in a drive with movies, plug in a keyboard/remote dongle.
Tasks
- xHCI driver in Home over the RP1 PCIe BAR (or generic PCI xHCI class — also covers x86 QEMU
-device qemu-xhcifor CI!): capability/operational/runtime regs, DCBAA, command ring, event ring with MSI, device slots, endpoint contexts, TRB rings, port reset/enumeration, USB 2/3 speeds via the RP1 root hub. - USB core: descriptors, config selection, class driver registry, hub class (external hubs), hot-plug events.
- HID: boot-protocol keyboard, generic report-descriptor parser for Consumer Control (play/pause/volume — what most USB remotes send), gamepads later (#99).
- Mass storage: bulk-only transport, SCSI INQUIRY/READ CAPACITY/READ(10)/WRITE(10), block device → mount ext2/FAT32/exFAT-read (exFAT read-only is needed because most USB media sticks ship exFAT).
- CI on x86 QEMU first (
-device qemu-xhci -device usb-kbd -drive …,if=none -device usb-storage) so S6 closes before the Pi.
Acceptance
QEMU: usb shell command lists a keyboard and a storage device, ls /media/usb0 shows files. Pi: same with a real stick; typing on a USB keyboard reaches the shell.
Size: XL · Depends on: #67 (for Pi), #61 · Blocks: #99, #102