ReviewOS

home-lang/home-os

USB core (S6) + RP1 xHCI: enumeration, control/bulk/interrupt transfers, HID boot protocol (keyboard + remote), mass storage (BOT/SCSI) for USB media drives

#68
Open chris opened this 10 days ago ·
10 days ago

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-xhci for 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

Sign in to comment on this issue.