Files
RedBear-OS/local/docs/HARDWARE-VALIDATION-MATRIX.md
T
vasilito 4dc51bd61f driver-manager: v1.3 comprehensive D-phase implementation
Full implementation of the driver-manager migration's D-phase
(parallel development) per the v1.3 plan. The § 0.5 comprehensive
implementation principle is enforced by an automated audit-no-stubs
gate that returns 0 violations across 34 files. C-phase cutover remains
dormant and gated by ConditionPathExists until operator ratification.

redox-driver-core (28 unit + 5 integration tests):
- concurrent.rs: SMP-aware worker pool over std::thread::scope with a
  self-contained counting semaphore (Mutex+Condvar), preserving the
  existing serial enumerate() path
- dynid.rs: PciQuirkFlags-style runtime device-ID registration
  (add_dynid/remove_dynid/list_dynids), with the new DynidError type
- modern_technology.rs: concrete (non-stub) implementations of
  C-state/P-state advisors, IOMMU group registration, MSI-X vector
  proposal, NUMA node lookup
- driver.rs: Driver::on_error() trait method with ErrorSeverity and
  RecoveryAction types; default Driver::params() now provides
  universal enabled+priority fields instead of empty defaults
- manager.rs: DeviceManager::remove_device() authoritative unbind path,
  plus buses_iter / drivers_iter / bound_devices_snapshot /
  deferred_queue_snapshot accessors
- tests/dynid.rs: integration tests for the DeviceManager API

redox-driver-pci (3 tests, unchanged):
- pre-existing PciBus; no breakage

driver-manager (13 tests):
- Cargo.toml: adds redox-driver-sys path dep
- quirks.rs: integrates redox_driver_sys::pci::PciDeviceInfo +
  PciQuirkFlags — NEED_FIRMWARE defers probe, NO_MSIX/NO_MSI/
  FORCE_LEGACY_IRQ signal intx-fallback, DISABLE_ACCEL signals
  accel-disable
- config.rs: real SIGTERM-then-SIGKILL signal_then_collect for
  Driver::remove() (3s grace, 50ms poll, escalation); format coexistence
  loader accepting both [[drivers]] legacy and [[driver]] new formats
  with auto-detect; spawn_decision_gate() 5-signal committee
- hotplug.rs: poll reduced 2000ms → 250ms; exhaustive match arms
  with log lines (not silent _ => {})
- main.rs: 250ms hotplug poll, exhaustive match arms with log lines

redox-driver-sys quirks:
- dmi.rs: log instead of silent _ => {} catch-all

Driver manager policy package (redbear-driver-policy):
- /etc/driver-manager.d/00-blacklist.conf (4 driver blacklist entries)
- /etc/driver-manager.d/50-amdgpu.toml (AMD GPU driver policy)
- /etc/driver-manager.d/initfs.manifest (ordered initfs driver list)
- /etc/driver-manager.d/autoload.d/ntsync.conf (autoload ntsync module)
- /etc/driver-manager.d/README.md (explanation)
- recipe.toml: custom install script that stages into /etc/driver-manager.d/

Driver manager service files (in local/sources/base submodule):
- local/sources/base/init.d/00_driver-manager.service — dormant
  (oneshot_async, ConditionPathExists=!/etc/driver-manager.d/disabled)
- local/sources/base/init.initfs.d/40_driver-manager-initfs.service —
  dormant (oneshot, ConditionPathExists=!/etc/driver-manager.d/initfs-active)

Audit gate:
- local/scripts/driver-manager-audit-no-stubs.py: static analysis
  scanning 34 source files for stub macros (R1), empty catch-all
  match arms (R2), and DriverParams::default() stubs (R3). Returns
  0 violations at v1.3.
- local/scripts/driver-manager-audit-no-stubs.sh: thin wrapper
- local/scripts/test-driver-manager-no-stubs-qemu.sh: D4 gate — runs
  the audit plus cargo test on every crate, returns 0 iff both pass

Test scripts (C-phase scaffolding, dormant until C1):
- test-driver-manager-parity.sh (C1)
- test-driver-manager-active.sh (C3)
- test-driver-manager-initfs.sh (C2)
- test-driver-manager-hotplug.sh (D3)
- test-driver-manager-pm.sh (D2)
- test-driver-manager-cutover.sh (C4)

Docs:
- local/docs/DRIVER-MANAGER-MIGRATION-PLAN.md: v1.3 status table
  listing every D-phase item as Done
- local/docs/evidence/driver-manager/D5-AUDIT.md: capability-by-
  capability matrix + verbatim audit output
- local/docs/HARDWARE-VALIDATION-MATRIX.md: driver-manager rows
  added with v1.3 status
- local/AGENTS.md: PLANNING NOTES pointer updated to v1.3
- docs/README.md: Related Red Bear-local plans row updated to v1.3

Test totals: 49 tests across the three crates, all passing.
Audit totals: 0 violations across 34 files, all clean.

Note: local/sources/base service files (00_driver-manager.service and
40_driver-manager-initfs.service) live in a submodule and need a
separate commit there. They are NOT included in this commit.
2026-07-21 00:30:55 +09:00

5.1 KiB

Hardware Validation Matrix — Red Bear OS

Component QEMU Bare Metal Notes
Storage
AHCI SATA 🔲 NCQ structure present, not runtime-validated
NVMe 🔲 🔲 Basic driver, no multiqueue
virtio-blk N/A QEMU only
Network
e1000 🔲 🔲 ITR structure present, no offload validation
rtl8168 🔲 🔲 PHY config present, not runtime-tested
virtio-net N/A QEMU only
Audio
Intel HDA 🔲 🔲 Codec detection + jack sense added, not validated
AC97 🔲 🔲 Basic driver
Input
PS/2 🔲 QEMU keyboard/mouse work
USB HID 🔲 Keyboard/mouse autospawn via test-usb-qemu.sh (P1 hardening); not validated on real HW
USB
xHCI host controller 🔲 Interrupt-driven mode proven (test-xhci-irq-qemu.sh); 51-flag quirk table + HCCPARAMS2 gating (P2-A/B); 36-code error recovery (P2-C); not HW-validated
EHCI/UHCI/OHCI controllers 🔲 🔲 Compile clean; runtime enumeration proofs planned (P8-B)
USB storage (BOT) 🔲 usbscsid autospawn + bounded sector readback proven (test-usb-storage-qemu.sh); guest-side write verify open
USB hub (non-root) 🔲 Hub + hub-child enumeration proven in QEMU (test-usb-hub-qemu.sh): hub descriptor/EP1/scan/debounce/reset→enable, and usb-kbd behind hub enumerates to HID subdriver (class 3.1 keyboard); "reactor race" root-caused to startup latency under load (not a deadlock)
GPU/Display
VESA 🔲 QEMU framebuffer works
virtio-gpu N/A 2D only, QEMU
CPU/Power
cpufreqd 🔲 🔲 Governors implemented, not HW-validated
thermald 🔲 🔲 ACPI thermal zones, not HW-validated
SMP
x2APIC/SMP Multi-core works
Driver Manager (driver-manager vs pcid-spawner)
D1 P0 capabilities (C1 dynids + C2 remove + C3 enable + C4 BAR) 🔲 Code complete; 49 tests pass; see local/docs/evidence/driver-manager/D5-AUDIT.md
D2 SMP concurrent probe (worker pool over std::thread::scope) 🔲 redox-driver-core/src/concurrent.rs with CountingSemaphore; tested on host
D2 PM hooks (Driver::suspend/resume + signal_then_collect) 🔲 Real SIGTERM/SIGKILL in DriverConfig; needs iommu/pcid SetPowerState wiring for actual D3
D2 AER foundation (Driver::on_error + ErrorSeverity + RecoveryAction) 🔲 Trait API complete; needs pcid AER wake source
D2 C-state / P-state / IOMMU / MSI-X / NUMA helpers 🔲 redox-driver-core/src/modern_technology.rs — concrete implementations of all five surfaces
D2 PciQuirkFlags integration 🔲 driver-manager/src/quirks.rs consumes redox-driver-sys; NEED_FIRMWARE defers probe
D3 hotplug 🟡 Polling fallback 🔲 Reduced to 250ms; Bus::subscribe_hotplug returns Unsupported until pcid event delivery lands
D4 audit-no-stubs N/A local/scripts/driver-manager-audit-no-stubs.py scans 34 files; 0 violations at v1.3
D4 blackbox test scripts N/A 8 scripts in local/scripts/test-driver-manager-*.sh
D5 feature-complete gate Code 🔲 HW All code + tests pass; awaiting real-hardware validation on AMD Threadripper + Intel Alder Lake

= validated 🔲 = implemented, not validated N/A = not applicable

Status note (2026-07-20)

  • The login-based QEMU proofs (PS/2 + serio, monotonic timer, IOMMU first-use, USB storage BOT) now run through local/scripts/qemu-login-expect.py (stdlib python) instead of the host expect tool — no external dependency, per-step timeouts, and safe retry on premature QEMU death. See local/docs/IRQ-AND-LOWLEVEL-CONTROLLERS-ENHANCEMENT-PLAN.md § "Runtime proof status (2026-07-20)".
  • MSI-X (virtio-net) and xHCI interrupt-driven mode were re-confirmed on the current redbear-mini ISO — once more on 2026-07-20 ~09:10 JST via test-lowlevel-controllers-qemu.sh (log-grep legs, unaffected by host contention).
  • Re-confirmation of the login-based legs (PS/2, timer, BOT) with the new harness is pending an uncontended host — the current build host runs a parallel QEMU-testing workload (a concurrent agent session under ~/.claude/jobs/ with its own QMP-controlled guest) that SIGKILLs competing QEMU processes; boots reach getty but the login prompt is not observed within the timeout there. The marks above reflect prior validation of those legs. A retry loop (/tmp/opencode/a2-retry.sh) is armed to run the PS/2, timer, and USB-storage legs automatically once the foreign QEMU workload exits.
  • The IOMMU first-use leg currently skips on redbear-mini runs because build/x86_64/redbear-full/harddrive.img is absent — a redbear-full build is required to re-confirm that leg.
  • Display boots (-vga std) can freeze at the fbcond Performing handoff step (the reopen_for_handoff() path can block rather than return EAGAIN for retry). Headless (-vga none) boots avoid it. Tracked separately on the graphics stack.