e289904852
- STUBS-AUDIT-AND-REWRITE-PLAN.md: master plan, 20 drivers audited - USB-STUBS-AUDIT.md: USB stack focus, xhcid/usbhubd/usbctl/usbhidd/usbscsid/ucsid - HID-STUBS-AUDIT.md: HID focus, usbhidd/i2c-hidd/intel-thc-hidd/ps2d/inputd/evdevd - LOWLEVEL-STUBS-AUDIT.md: ACPI/PCI/IRQ/IOMMU/boot/init, 50+ row coverage - BOOT-AND-HW-ENABLEMENT-ASSESSMENT.md: kernel to display chain, NO VESA policy - DESKTOP-SERVICES-ASSESSMENT.md: D-Bus, session, audio, network - CONFIG-AND-INIT-ASSESSMENT.md: configs, init.d, recipes, layering - GPU-MESA-KDE-CHAIN-ASSESSMENT.md: Mesa to Plasma build chain These documents track the v6.0 stub-fix campaign and the comprehensive Phase 1-5 implementation work. All cited paths and line numbers are real. Documents are durable in local/docs/ which survives make distclean.
1092 lines
40 KiB
Markdown
1092 lines
40 KiB
Markdown
# Red Bear OS Low-Level Infrastructure Stubs and Incomplete-Code Audit
|
|
|
|
**Document Version:** 1.0
|
|
**Date:** 2026-06-09
|
|
**Scope:** ACPI, PCI, IRQ, IOMMU, Boot, Init infrastructure
|
|
**Reference Kernel:** Linux 7.1 (read-only reference)
|
|
|
|
---
|
|
|
|
## Executive Summary
|
|
|
|
### Components Audited: 8
|
|
| Component | Location | LoC | Status |
|
|
|-----------|----------|-----|--------|
|
|
| acpid | `local/sources/base/drivers/acpid/` | ~2,965 | Partial - ACPI table parsing works, Notify/GPE/EC incomplete |
|
|
| pcid | `local/sources/base/drivers/pcid/` | ~3,626 | Partial - MSI/MSI-X works, multi-bus/PCIe extended incomplete |
|
|
| pcid-spawner | `local/sources/base/drivers/pcid-spawner/` | ~101 | Minimal - ACPI matching incomplete |
|
|
| amlserde | `local/sources/base/drivers/amlserde/` | ~475 | Partial - core AML works, namespace/Method incomplete |
|
|
| kernel | `local/sources/kernel/` | ~21,555 | Partial - x2APIC/MADT works, IOMMU/interrupt remapping incomplete |
|
|
| init | `local/sources/base/init/` | ~846 | Partial - scheduling works, deps/auto-restart incomplete |
|
|
| bootstrap | `local/sources/base/bootstrap/` | ~4,479 | Partial - exec/procmgr works, initfs/sysroot incomplete |
|
|
| common | `local/sources/base/drivers/common/` | ~995 | Partial - DMA/SGL works, dynamic sizing incomplete |
|
|
|
|
### Total LoC Audited: ~35,042
|
|
|
|
### Critical Gaps Blocking Phase 1+: 14
|
|
|
|
| Gap | Component | Severity | Time Estimate |
|
|
|-----|-----------|----------|---------------|
|
|
| ACPI GPE handling | acpid | Critical | 2 weeks |
|
|
| ACPI Notify handling | acpid | Critical | 2 weeks |
|
|
| ACPI Embedded Controller | acpid | Critical | 3 weeks |
|
|
| ACPI Thermal zones | acpid | High | 2 weeks |
|
|
| ACPI Battery (\_BST/\_BIF) | acpid | High | 2 weeks |
|
|
| SLP_TYPb (S5 partial) | acpid | Medium | 1 week |
|
|
| PCI multi-bus enumeration | pcid | Critical | 2 weeks |
|
|
| PCIe AER support | pcid | High | 3 weeks |
|
|
| MSI-X multi-vector allocation | pcid | Medium | 1 week |
|
|
| IOMMU interrupt remapping | kernel | High | 4 weeks |
|
|
| x2APIC validation | kernel | Medium | 1 week |
|
|
| Init service dependencies | init | High | 2 weeks |
|
|
| Init auto-restart on failure | init | High | 2 weeks |
|
|
| Init mount sysroot | init | Medium | 1 week |
|
|
|
|
### Estimated Total Fix Time: 28-31 weeks
|
|
|
|
---
|
|
|
|
## Per-Component Audit
|
|
|
|
### acpid (ACPI Interface Driver)
|
|
|
|
**Location:** `local/sources/base/drivers/acpid/`
|
|
**LoC:** ~2,965 (7 Rust files)
|
|
|
|
#### What's Implemented
|
|
|
|
| Feature | Status | Reference |
|
|
|---------|--------|-----------|
|
|
| RSDP parsing | ✅ Complete | `acpi.rs:157-201` |
|
|
| RSDT/XSDT parsing | ✅ Complete | `main.rs:48-70` |
|
|
| FADT parsing | ✅ Complete | `acpi.rs:740-894` |
|
|
| DSDT loading | ✅ Complete | `acpi.rs:879-893` |
|
|
| AML interpreter integration | ✅ Complete | `acpi.rs:262-278` |
|
|
| \_OSI interception | ✅ Complete | `acpi.rs:449-489` |
|
|
| \_S5 shutdown | ✅ Partial | `acpi.rs:652-737` |
|
|
| EC (Embedded Controller) | ⚠️ Stub | `ec.rs:193-254` |
|
|
| DMI parsing | ✅ Complete | `dmi.rs` |
|
|
| ACPI quirk system | ✅ Complete | `quirks.rs` |
|
|
|
|
#### What's Missing / Stubs Found
|
|
|
|
1. **GPE (General Purpose Events) handling** - Not found in scheme.rs
|
|
- Linux reference: `local/reference/linux-7.1/drivers/acpi/acpica/evgpe.c`
|
|
- `acpid/src/scheme.rs` only exposes `tables/`, `symbols/`, `dmi/`
|
|
- No `/scheme/acpi/gpe0` or similar GPE handler scheme
|
|
|
|
2. **ACPI Notify handling** - Not implemented
|
|
- Linux reference: `local/reference/linux-7.1/drivers/acpi/button.c`
|
|
- No `Notify` handler in `acpi.rs` or `aml_physmem.rs`
|
|
- Button devices (lid, power button) cannot notify acpid
|
|
|
|
3. **Embedded Controller (EC)** - Partial stub
|
|
- `ec.rs:193`: `self.read(offset as u8).ok_or(AmlError::MutexAcquireTimeout) // TODO proper error type`
|
|
- `ec.rs:203-254`: Multiple `// TODO proper error type` markers
|
|
- EC transactions may timeout silently
|
|
|
|
4. **Thermal zones** - Not implemented
|
|
- No `\_TMP`, `\_TC1`, `\_TC2`, `\_TSP` evaluation
|
|
- Linux reference: `local/reference/linux-7.1/drivers/acpi/thermal.c`
|
|
|
|
5. **Battery (\_BST, \_BIF)** - Not implemented
|
|
- No battery status/ info evaluation
|
|
- Linux reference: `local/reference/linux-7.1/drivers/acpi/battery.c`
|
|
|
|
6. **Wake/Sleep states** - Only S5 works
|
|
- `acpi.rs:723`: `// TODO: Handle SLP_TYPb`
|
|
- S3 (suspend) and S4 (hibernate) not implemented
|
|
|
|
7. **ACPI namespace traversal** - Partial
|
|
- `acpi.rs:268`: `//TODO: use these parsed tables for the rest of acpid`
|
|
- Tables are parsed but not used for device enumeration
|
|
|
|
#### Stub Citations (file:line)
|
|
|
|
| File | Line | Content |
|
|
|------|------|---------|
|
|
| `acpi.rs` | 80 | `// TODO: Make syscall::Error implement std::error::Error` |
|
|
| `acpi.rs` | 268 | `//TODO: use these parsed tables for the rest of acpid` |
|
|
| `acpi.rs` | 394 | `// TODO: The kernel ACPI code seemed to use load_table` |
|
|
| `acpi.rs` | 438 | `//TODO: check if this should panic` |
|
|
| `acpi.rs` | 723 | `// TODO: Handle SLP_TYPb` |
|
|
| `ec.rs` | 193 | `// TODO proper error type` |
|
|
| `ec.rs` | 203 | `// TODO proper error type` |
|
|
| `ec.rs` | 209 | `// TODO proper error type` |
|
|
| `ec.rs` | 215 | `// TODO proper error type` |
|
|
| `ec.rs` | 221 | `// TODO proper error type` |
|
|
| `ec.rs` | 232 | `// TODO proper error type` |
|
|
| `ec.rs` | 243 | `// TODO proper error type` |
|
|
| `ec.rs` | 254 | `// TODO proper error type` |
|
|
| `aml_physmem.rs` | 442 | `log::debug!("TODO: Handler::create_mutex")` |
|
|
| `aml_physmem.rs` | 447 | `log::debug!("TODO: Handler::acquire")` |
|
|
| `aml_physmem.rs` | 452 | `log::debug!("TODO: Handler::release")` |
|
|
|
|
#### Linux Reference Comparison
|
|
|
|
| ACPI Feature | Linux Implementation | Red Bear Status |
|
|
|-------------|---------------------|-----------------|
|
|
| RSDP | `acpi/pci_root.c`, `arch/x86/kernel/acpi/boot.c` | ✅ Implemented |
|
|
| RSDT/XSDT | `acpi/tables/tbutils.c` | ✅ Implemented |
|
|
| FADT | `acpi/tables/tbfadt.c` | ✅ Implemented |
|
|
| MADT | `acpi/tables/tbmadt.c` | Kernel-only, acpid uses RSDT |
|
|
| GPE | `drivers/acpi/acpica/evgpe.c` | ❌ Missing |
|
|
| Notify | `drivers/acpi/button.c`, `bus.c` | ❌ Missing |
|
|
| EC | `drivers/acpi/ec.c` | ⚠️ Stub |
|
|
| Thermal | `drivers/acpi/thermal.c` | ❌ Missing |
|
|
| Battery | `drivers/acpi/battery.c` | ❌ Missing |
|
|
| \_S5 | `drivers/acpi/sleep.c` | ⚠️ Partial |
|
|
|
|
#### Fix Plan
|
|
|
|
| Item | Effort | Priority |
|
|
|------|--------|----------|
|
|
| GPE handling | 2 weeks | P0 |
|
|
| Notify handling | 2 weeks | P0 |
|
|
| EC full implementation | 3 weeks | P1 |
|
|
| Thermal zones | 2 weeks | P1 |
|
|
| Battery support | 2 weeks | P2 |
|
|
| SLP_TYPb fix | 1 week | P1 |
|
|
| Multi-table usage | 2 weeks | P2 |
|
|
|
|
**Time Estimate:** 12-14 weeks
|
|
|
|
---
|
|
|
|
### pcid (PCI/PCIe Driver)
|
|
|
|
**Location:** `local/sources/base/drivers/pcid/`
|
|
**LoC:** ~3,626 (14 Rust files)
|
|
|
|
#### What's Implemented
|
|
|
|
| Feature | Status | Reference |
|
|
|---------|--------|-----------|
|
|
| PCI enumeration (bus 0) | ✅ Complete | `scheme.rs`, `driver_handler.rs` |
|
|
| PCIe extended config | ✅ Complete | `cfg_access/mod.rs` |
|
|
| MSI capability | ✅ Complete | `driver_interface/msi.rs` |
|
|
| MSI-X capability | ✅ Complete | `driver_interface/msi.rs:36-106` |
|
|
| MSI-X per-vector masking | ✅ Complete | `driver_interface/msi.rs:232-240` |
|
|
| INTx legacy interrupts | ✅ Complete | `driver_interface/irq_helpers.rs` |
|
|
| BAR handling | ✅ Complete | `driver_interface/bar.rs` |
|
|
| Capability parsing | ✅ Complete | `driver_interface/cap.rs` |
|
|
| Quirk system | ✅ Complete | `quirks.rs` |
|
|
|
|
#### What's Missing / Stubs Found
|
|
|
|
1. **Multi-bus PCI enumeration** - Only bus 0
|
|
- `main.rs:299`: `// FIXME Use full ACPI for enumerating the host bridges. MCFG only describes the first`
|
|
- Does not walk PCI buses beyond bus 0
|
|
- Linux reference: `drivers/pci/proc.c`, `drivers/pci/setup-bus.c`
|
|
|
|
2. **PCIe AER (Advanced Error Reporting)** - Not implemented
|
|
- No AER capability parsing
|
|
- No error injection/retore support
|
|
- Linux reference: `drivers/pci/pcie/aer.c`
|
|
|
|
3. **PCIe ASPM (Active State Power Management)** - Not implemented
|
|
- No ASPM capability parsing
|
|
- No L0s/L1 link state negotiation
|
|
- Linux reference: `drivers/pci/pcie/aspm.c`
|
|
|
|
4. **PCIe hotplug** - Not implemented
|
|
- No native hotplug support
|
|
- No hotplug interrupt handling
|
|
- Linux reference: `drivers/pci/hotplug/`
|
|
|
|
5. **SR-IOV (Virtual Functions)** - Not implemented
|
|
- No PF/VF capability handling
|
|
- Linux reference: `drivers/pci/iov.c`
|
|
|
|
6. **Resizable BAR** - Not implemented
|
|
- No reBAR capability parsing
|
|
- Linux reference: `drivers/pci/res.c`
|
|
|
|
7. **MSI multi-vector allocation** - Partial
|
|
- `irq_helpers.rs:254`: `// TODO: Allow allocation of up to 32 vectors`
|
|
- Current limit may be lower than spec allows
|
|
|
|
8. **Non-x86 MSI support** - Stub
|
|
- `irq_helpers.rs:428`: `// FIXME support MSI on non-x86 systems`
|
|
- Non-x86 falls back to legacy only
|
|
|
|
#### Stub Citations (file:line)
|
|
|
|
| File | Line | Content |
|
|
|------|------|---------|
|
|
| `main.rs` | 83 | `//TODO: submit to pci_types` |
|
|
| `main.rs` | 299 | `// FIXME Use full ACPI for enumerating the host bridges` |
|
|
| `cfg_access/mod.rs` | 157 | `// TODO: validate/print MCFG?` |
|
|
| `cfg_access/mod.rs` | 204 | `// TODO: Allow invalid bytes not divisible by PcieAlloc?` |
|
|
| `cfg_access/mod.rs` | 340 | `// TODO: A safer interface, using e.g. a VolatileCell` |
|
|
| `cfg_access/fallback.rs` | 89 | `todo!("Pci::CfgAccess::read on this architecture")` |
|
|
| `cfg_access/fallback.rs` | 94 | `todo!("Pci::CfgAccess::write on this architecture")` |
|
|
| `scheme.rs` | 39 | `// TODO: capability rather than root` |
|
|
| `scheme.rs` | 86 | `// TODO: Check flags are correct` |
|
|
| `scheme.rs` | 329 | `log::trace!("TODO: Support disabling device"` |
|
|
| `driver_interface/mod.rs` | 206 | `// TODO: Remove these "features"` |
|
|
| `driver_interface/irq_helpers.rs` | 42 | `// TODO: Perhaps read the MADT instead?` |
|
|
| `driver_interface/irq_helpers.rs` | 120 | `// TODO: fcntl F_SETLK on /scheme/irq/?` |
|
|
| `driver_interface/irq_helpers.rs` | 254 | `// TODO: Allow allocation of up to 32 vectors` |
|
|
| `driver_interface/irq_helpers.rs` | 308 | `// FIXME move MSI-X IRQ allocation to pcid` |
|
|
| `driver_interface/irq_helpers.rs` | 428 | `// FIXME support MSI on non-x86 systems` |
|
|
| `driver_interface/msi.rs` | 161 | `// TODO: should the reserved field be preserved?` |
|
|
|
|
#### Linux Reference Comparison
|
|
|
|
| PCI Feature | Linux Implementation | Red Bear Status |
|
|
|-------------|---------------------|-----------------|
|
|
| Bus enumeration | `drivers/pci/pci.c`, `drivers/pci/proc.c` | ⚠️ Bus 0 only |
|
|
| PCIe extended config | `drivers/pci/access.c` | ✅ Implemented |
|
|
| MSI/MSI-X | `drivers/pci/msi.c` | ✅ Implemented |
|
|
| INTx | `drivers/pci/intr.c` | ✅ Implemented |
|
|
| AER | `drivers/pci/pcie/aer.c` | ❌ Missing |
|
|
| ASPM | `drivers/pci/pcie/aspm.c` | ❌ Missing |
|
|
| Hotplug | `drivers/pci/hotplug/` | ❌ Missing |
|
|
| SR-IOV | `drivers/pci/iov.c` | ❌ Missing |
|
|
| Resizable BAR | `drivers/pci/res.c` | ❌ Missing |
|
|
|
|
#### Fix Plan
|
|
|
|
| Item | Effort | Priority |
|
|
|------|--------|----------|
|
|
| Multi-bus enumeration via ACPI | 2 weeks | P0 |
|
|
| MSI-X multi-vector (up to 32) | 1 week | P1 |
|
|
| AER support | 3 weeks | P1 |
|
|
| ASPM support | 2 weeks | P2 |
|
|
| PCIe hotplug | 3 weeks | P2 |
|
|
| SR-IOV | 2 weeks | P3 |
|
|
| Non-x86 MSI | 2 weeks | P2 |
|
|
|
|
**Time Estimate:** 13-15 weeks
|
|
|
|
---
|
|
|
|
### pcid-spawner (PCI Device Spawner)
|
|
|
|
**Location:** `local/sources/base/drivers/pcid-spawner/`
|
|
**LoC:** ~101 (1 Rust file: main.rs)
|
|
|
|
#### What's Implemented
|
|
|
|
| Feature | Status | Reference |
|
|
|---------|--------|-----------|
|
|
| PCI device detection | ✅ Basic | `main.rs` |
|
|
| Driver spawning | ✅ Basic | `main.rs` |
|
|
|
|
#### What's Missing / Stubs Found
|
|
|
|
1. **ACPI _HID/_CID matching** - Not implemented
|
|
- Only matches PCI ID (vendor/device/class)
|
|
- Does not check ACPI device IDs
|
|
- Linux reference: `drivers/acpi/scan.c`, `drivers/pci/pci-driver.c`
|
|
|
|
2. **Driver selection algorithm** - Minimal
|
|
- No priority-based driver selection
|
|
- No fallback driver mechanism
|
|
|
|
3. **Device property propagation** - Not implemented
|
|
- Does not pass ACPI device properties to drivers
|
|
- Linux reference: `drivers/acpi/property.c`
|
|
|
|
#### Stub Citations (file:line)
|
|
|
|
No TODO/FIXME stubs found in main.rs (101 lines total), but the file is minimal and incomplete.
|
|
|
|
#### Linux Reference Comparison
|
|
|
|
| Feature | Linux Implementation | Red Bear Status |
|
|
|---------|---------------------|-----------------|
|
|
| ACPI device matching | `drivers/acpi/scan.c` | ❌ Missing |
|
|
| PCI ID matching | `drivers/pci/pci-driver.c` | ✅ Basic |
|
|
| Driver priority | `drivers/base/dd.c` | ❌ Missing |
|
|
| Property propagation | `drivers/acpi/property.c` | ❌ Missing |
|
|
|
|
#### Fix Plan
|
|
|
|
| Item | Effort | Priority |
|
|
|------|--------|----------|
|
|
| ACPI _HID/_CID matching | 2 weeks | P1 |
|
|
| Driver priority system | 1 week | P2 |
|
|
| Property propagation | 2 weeks | P2 |
|
|
|
|
**Time Estimate:** 5 weeks
|
|
|
|
---
|
|
|
|
### amlserde (AML Serialization)
|
|
|
|
**Location:** `local/sources/base/drivers/amlserde/`
|
|
**LoC:** ~475 (1 Rust file: lib.rs)
|
|
|
|
#### What's Implemented
|
|
|
|
| Feature | Status | Reference |
|
|
|---------|--------|-----------|
|
|
| AML name serialization | ✅ Complete | `lib.rs` |
|
|
| AML object to/from AmlSerdeValue | ✅ Complete | `lib.rs` |
|
|
| Namespace traversal | ⚠️ Partial | `lib.rs:168` |
|
|
| Package handling | ⚠️ Partial | `lib.rs:263` |
|
|
|
|
#### What's Missing / Stubs Found
|
|
|
|
1. **Namespace.get reference** - `lib.rs:168`
|
|
- `//TODO: why does namespace.get not take a reference to aml_name`
|
|
|
|
2. **Method vs Field distinction** - `lib.rs:263`
|
|
- `//TODO: distinguish from Method?`
|
|
|
|
3. **Error handling** - Multiple TODOs
|
|
- `lib.rs:346`: Error value hidden in parent_device_path
|
|
- `lib.rs:383`: Unknown return None handling
|
|
- `lib.rs:384`: Bit pattern validation
|
|
- `lib.rs:391`: Native method handling
|
|
- `lib.rs:426`: Error ignored in serialization
|
|
|
|
#### Stub Citations (file:line)
|
|
|
|
| File | Line | Content |
|
|
|------|------|---------|
|
|
| `lib.rs` | 168 | `//TODO: why does namespace.get not take a reference to aml_name` |
|
|
| `lib.rs` | 263 | `//TODO: distinguish from Method?` |
|
|
| `lib.rs` | 346 | `// TODO: Error value hidden` |
|
|
| `lib.rs` | 383 | `code: (return None), //TODO figure out what to do here` |
|
|
| `lib.rs` | 384 | `//TODO check specs to see if all bit patterns are allowed` |
|
|
| `lib.rs` | 391 | `//TODO: handle native method?` |
|
|
| `lib.rs` | 426 | `// TODO: see if errors should be ignored here` |
|
|
|
|
#### Linux Reference Comparison
|
|
|
|
AML serde is Red Bear-specific; no direct Linux comparison. The `aml.tables` and `aml.objects` in Linux ACPICA are the reference.
|
|
|
|
#### Fix Plan
|
|
|
|
| Item | Effort | Priority |
|
|
|------|--------|----------|
|
|
| Error handling completeness | 1 week | P1 |
|
|
| Method vs Field distinction | 1 week | P2 |
|
|
| Native method handling | 2 weeks | P2 |
|
|
|
|
**Time Estimate:** 4 weeks
|
|
|
|
---
|
|
|
|
### kernel (Red Bear Kernel Fork)
|
|
|
|
**Location:** `local/sources/kernel/`
|
|
**LoC:** ~21,555 (100+ Rust files)
|
|
|
|
#### What's Implemented
|
|
|
|
| Feature | Status | Reference |
|
|
|---------|--------|-----------|
|
|
| RSDP parsing | ✅ Complete | `src/acpi/mod.rs` |
|
|
| RSDT/XSDT parsing | ✅ Complete | `src/acpi/mod.rs` |
|
|
| MADT parsing | ✅ Complete | `src/acpi/madt/mod.rs` |
|
|
| x2APIC support | ✅ Complete | `src/acpi/madt/arch/x86.rs` |
|
|
| HPET support | ⚠️ Partial | `src/acpi/hpet.rs` |
|
|
| ACPI scheme | ✅ Complete | `src/scheme/acpi.rs` |
|
|
| PCI scheme | ✅ Complete | `src/scheme/pci.rs` (if exists) |
|
|
| IRQ scheme | ✅ Complete | `src/scheme/irq.rs` |
|
|
| Memory scheme | ✅ Complete | `src/scheme/memory.rs` |
|
|
|
|
#### What's Missing / Stubs Found
|
|
|
|
1. **IOMMU interrupt remapping** - Not fully implemented
|
|
- AMD-Vi: partial command buffer, event log missing
|
|
- Intel VT-d: context tables not fully validated
|
|
- `src/acpi/mod.rs:134`: `// TODO: Don't touch ACPI tables in kernel?`
|
|
- `src/acpi/mod.rs:149`: `// TODO: Enumerate processors in userspace`
|
|
|
|
2. **ACPI table validation** - Multiple TODOs
|
|
- `src/acpi/spcr.rs:38`: `/*TODO: these fields are optional based on the table revision`
|
|
- `src/acpi/spcr.rs:86`: `//TODO: enable IRQ on more platforms`
|
|
- `src/acpi/gtdt.rs:26`: `/*TODO: we don't need these yet`
|
|
|
|
3. **Memory management** - 100+ TODOs in context/memory.rs alone
|
|
- `src/memory/mod.rs`: 20+ TODOs
|
|
- Some relate to OOM handling and page table management
|
|
|
|
4. **Page fault handling** - Incomplete
|
|
- `src/memory/mod.rs:1030`: `todo!("oom")`
|
|
- `src/memory/mod.rs:1032`: `todo!()`
|
|
|
|
5. **RMM (Realm Management Monitor)** - 15+ TODOs
|
|
- `rmm/src/arch/x86_64.rs:60`: `// TODO: 5-level paging`
|
|
- `rmm/src/arch/emulate.rs:289`: `unimplemented!("EmulateArch::invalidate not implemented")`
|
|
|
|
6. **Peripheral drivers** - Several unimplemented
|
|
- `src/arch/riscv64/device/cpu/mod.rs:4`: `unimplemented!()`
|
|
- `src/arch/riscv64/stop.rs:5`: `unimplemented!()`
|
|
- `src/arch/aarch64/device/irqchip/null.rs:30`: `unimplemented!()`
|
|
|
|
#### Stub Citations (file:line) - Selected Critical Ones
|
|
|
|
| File | Line | Content |
|
|
|------|------|---------|
|
|
| `src/acpi/mod.rs` | 134 | `// TODO: Don't touch ACPI tables in kernel?` |
|
|
| `src/acpi/mod.rs` | 149 | `// TODO: Enumerate processors in userspace` |
|
|
| `src/acpi/mod.rs` | 159 | `//TODO: support this on any arch` |
|
|
| `src/acpi/spcr.rs` | 38 | `/*TODO: these fields are optional` |
|
|
| `src/acpi/spcr.rs` | 86 | `//TODO: enable IRQ on more platforms` |
|
|
| `src/acpi/hpet.rs` | 56 | `//TODO: x86 use assumes only one HPET` |
|
|
| `src/memory/mod.rs` | 1030 | `todo!("oom")` |
|
|
| `src/memory/mod.rs` | 1032 | `todo!()` |
|
|
| `src/scheme/acpi.rs` | 77 | `// TODO: Context switch directly` |
|
|
| `src/scheme/irq.rs` | 1 | `// TODO: Rewrite this entire scheme` |
|
|
| `rmm/src/arch/emulate.rs` | 289 | `unimplemented!("EmulateArch::invalidate")` |
|
|
| `rmm/src/allocator/frame/bump.rs` | 68 | `unimplemented!("BumpAllocator::free not implemented")` |
|
|
| `src/arch/riscv64/device/cpu/mod.rs` | 4 | `unimplemented!()` |
|
|
| `src/arch/riscv64/stop.rs` | 5,9,14 | `unimplemented!()` |
|
|
| `src/arch/aarch64/device/irqchip/null.rs` | 30 | `unimplemented!()` |
|
|
|
|
Total TODOs in kernel: **393**
|
|
|
|
#### Linux Reference Comparison
|
|
|
|
| Kernel Feature | Linux Implementation | Red Bear Status |
|
|
|---------------|---------------------|-----------------|
|
|
| ACPI tables | `arch/x86/kernel/acpi/boot.c` | ✅ Implemented |
|
|
| x2APIC | `arch/x86/kernel/apic/x2apic.c` | ✅ Implemented |
|
|
| MADT parsing | `arch/x86/kernel/apic/apic.c` | ✅ Implemented |
|
|
| IOMMU/AMD-Vi | `drivers/iommu/amd_iommu.c` | ⚠️ Partial |
|
|
| IOMMU/VT-d | `drivers/iommu/intel-iommu.c` | ⚠️ Partial |
|
|
| Interrupt remapping | `drivers/iommu/irq_remapping.c` | ❌ Incomplete |
|
|
| HPET | `arch/x86/kernel/hpet.c` | ⚠️ Partial |
|
|
| SPCR | `drivers/tty/serial/acpi.c` | ⚠️ Partial |
|
|
|
|
#### Fix Plan
|
|
|
|
| Item | Effort | Priority |
|
|
|------|--------|----------|
|
|
| IOMMU interrupt remapping | 4 weeks | P1 |
|
|
| x2APIC validation | 1 week | P1 |
|
|
| HPET full support | 2 weeks | P2 |
|
|
| SPCR full support | 2 weeks | P2 |
|
|
| OOM handling in page fault | 1 week | P1 |
|
|
| 5-level paging (RMM) | 3 weeks | P3 |
|
|
| RISC-V/AArch64 stubs | 4 weeks | P2 |
|
|
|
|
**Time Estimate:** 15-17 weeks
|
|
|
|
---
|
|
|
|
### init (Init Service Manager)
|
|
|
|
**Location:** `local/sources/base/init/`
|
|
**LoC:** ~846 (4 Rust files)
|
|
|
|
#### What's Implemented
|
|
|
|
| Feature | Status | Reference |
|
|
|---------|--------|-----------|
|
|
| Service scheduling | ✅ Complete | `scheduler.rs` |
|
|
| Config-based startup | ✅ Complete | `main.rs` |
|
|
| Environment handling | ✅ Complete | `main.rs:66-112` |
|
|
| Service types (Notify, Scheme, Oneshot) | ✅ Complete | `service.rs` |
|
|
| Runtime target | ✅ Complete | `main.rs:135-137` |
|
|
| Logd integration | ✅ Complete | `main.rs:128-133` |
|
|
|
|
#### What's Missing / Stubs Found
|
|
|
|
1. **Service dependencies** - Not implemented
|
|
- No `After=`, `Before=`, `Requires=` ordering
|
|
- No dependency graph resolution
|
|
- `main.rs:150`: `// FIXME introduce multi-user.target unit`
|
|
|
|
2. **Auto-restart on failure** - Not implemented
|
|
- No `Restart=` directive
|
|
- No restart timer/backoff
|
|
- Linux reference: `systemd/src/core/service.c`
|
|
|
|
3. **Mount sysroot** - Incomplete
|
|
- `main.rs:126`: `// FIXME: replace with hwd reading from devicetree`
|
|
- Uses hardcoded paths
|
|
|
|
4. **Namespace operations** - Incomplete
|
|
- `service.rs:98`: `libredox::call::getns().expect("TODO")`
|
|
- `service.rs:100`: `.expect("TODO")` for register_scheme_to_ns
|
|
|
|
5. **Resource limits** - Not implemented
|
|
- No `LimitCPU=`, `LimitMemory=` etc.
|
|
- Linux reference: `systemd/src/core/rlimit.c`
|
|
|
|
6. **Cgroups** - Not implemented
|
|
- No cgroup v1/v2 support
|
|
- Linux reference: `systemd/src/core/cgroup.c`
|
|
|
|
#### Stub Citations (file:line)
|
|
|
|
| File | Line | Content |
|
|
|------|------|---------|
|
|
| `main.rs` | 150 | `// FIXME introduce multi-user.target unit` |
|
|
| `main.rs` | 126 | `// FIXME: replace with hwd reading from devicetree` |
|
|
| `unit.rs` | 126 | `// FIXME replace this with hwd reading from the devicetree` |
|
|
| `service.rs` | 98 | `libredox::call::getns().expect("TODO")` |
|
|
| `service.rs` | 100 | `.expect("TODO")` |
|
|
|
|
#### Linux Reference Comparison
|
|
|
|
| Init Feature | Linux (systemd) | Red Bear Status |
|
|
|--------------|-----------------|-----------------|
|
|
| Service dependencies | `src/core/unit-dependency.c` | ❌ Missing |
|
|
| Auto-restart | `src/core/service.c` (Restart=) | ❌ Missing |
|
|
| Resource limits | `src/core/rlimit.c` | ❌ Missing |
|
|
| Cgroups | `src/core/cgroup.c` | ❌ Missing |
|
|
| Namespace | `src/shared/ns.c` | ⚠️ Partial |
|
|
| Mount sysroot | `src/core/root.c` | ⚠️ Incomplete |
|
|
|
|
#### Fix Plan
|
|
|
|
| Item | Effort | Priority |
|
|
|------|--------|----------|
|
|
| Service dependencies (After=, Requires=) | 2 weeks | P1 |
|
|
| Auto-restart on failure | 2 weeks | P1 |
|
|
| Mount sysroot via hwd | 1 week | P1 |
|
|
| Namespace error handling | 1 week | P2 |
|
|
| Resource limits | 3 weeks | P2 |
|
|
| Cgroups v2 | 4 weeks | P3 |
|
|
|
|
**Time Estimate:** 11-13 weeks
|
|
|
|
---
|
|
|
|
### bootstrap (Kernel Bootstrap)
|
|
|
|
**Location:** `local/sources/base/bootstrap/`
|
|
**LoC:** ~4,479 (3 Rust files: exec.rs, procmgr.rs, initfs.rs)
|
|
|
|
#### What's Implemented
|
|
|
|
| Feature | Status | Reference |
|
|
|---------|--------|-----------|
|
|
| Process creation (fork/exec) | ✅ Complete | `exec.rs` |
|
|
| Process management | ✅ Complete | `procmgr.rs` |
|
|
| Initfs mounting | ✅ Partial | `initfs.rs` |
|
|
| Signal handling | ⚠️ Partial | `procmgr.rs` |
|
|
| Redox event handling | ✅ Complete | `procmgr.rs` |
|
|
|
|
#### What's Missing / Stubs Found
|
|
|
|
1. **Initfs symlink handling** - `initfs.rs:156`
|
|
- `// TODO: Support symlinks in other position than xopen target`
|
|
|
|
2. **Bootstrap restructuring** - `initfs.rs:432`
|
|
- `// TODO: Restructure bootstrap so it calls into relibc`
|
|
|
|
3. **Signal control** - Multiple TODOs in procmgr.rs
|
|
- `procmgr.rs:700`: `sig_ctrl: None, // TODO`
|
|
- `procmgr.rs:725`: `sig_pctl: None, // TODO`
|
|
|
|
4. **Event handling** - `procmgr.rs:196`
|
|
- `log::warn!("TODO: UNKNOWN EVENT {event:?}")`
|
|
|
|
5. **Process state cleanup** - `procmgr.rs:1684`
|
|
- `// TODO: Properly remove state`
|
|
|
|
#### Stub Citations (file:line)
|
|
|
|
| File | Line | Content |
|
|
|------|------|---------|
|
|
| `exec.rs` | 89 | `// TODO: Handle this, we can allocate as much as we want` |
|
|
| `procmgr.rs` | 44 | `// TODO: slab or something for better ID reuse` |
|
|
| `procmgr.rs` | 49 | `// TODO?` |
|
|
| `procmgr.rs` | 106 | `// TODO: multiple events?` |
|
|
| `procmgr.rs` | 148 | `// TODO(err)?` |
|
|
| `procmgr.rs` | 162 | `// TODO: translate arch-specific exception kind` |
|
|
| `procmgr.rs` | 163 | `// TODO: generate coredump` |
|
|
| `procmgr.rs` | 181 | `// TODO(opt)` |
|
|
| `procmgr.rs` | 196 | `log::warn!("TODO: UNKNOWN EVENT {event:?}")` |
|
|
| `procmgr.rs` | 229 | `// TODO: cleanup` |
|
|
| `procmgr.rs` | 241 | `// TODO: fill in useful path?` |
|
|
| `procmgr.rs` | 700 | `sig_ctrl: None, // TODO` |
|
|
| `procmgr.rs` | 725 | `sig_pctl: None, // TODO` |
|
|
| `procmgr.rs` | 1677 | `Response::ready_err(ESRCH, tag) // TODO?` |
|
|
| `procmgr.rs` | 1684 | `// TODO: Properly remove state` |
|
|
| `initfs.rs` | 48 | `// TODO: Any better way to implement fpath?` |
|
|
| `initfs.rs` | 156 | `// TODO: Support symlinks in other position` |
|
|
| `initfs.rs` | 183 | `// TODO: Maybe follow initfs-local symlinks` |
|
|
| `initfs.rs` | 268 | `// TODO: Add getter` |
|
|
| `initfs.rs` | 303 | `// TODO: Copy scheme part in kernel` |
|
|
| `initfs.rs` | 432 | `// TODO: Restructure bootstrap` |
|
|
|
|
**Total TODOs in bootstrap: 63**
|
|
|
|
#### Linux Reference Comparison
|
|
|
|
Bootstrap is Red Bear-specific. Linux uses systemd's `sd-boot` and kernel's `init` process. The comparison is not direct.
|
|
|
|
#### Fix Plan
|
|
|
|
| Item | Effort | Priority |
|
|
|------|--------|----------|
|
|
| Symlink support in initfs | 1 week | P2 |
|
|
| Bootstrap restructuring | 2 weeks | P2 |
|
|
| Signal control completion | 1 week | P2 |
|
|
| Event handling robustness | 1 week | P2 |
|
|
| Process state cleanup | 2 weeks | P2 |
|
|
|
|
**Time Estimate:** 7 weeks
|
|
|
|
---
|
|
|
|
### common (Shared Driver Library)
|
|
|
|
**Location:** `local/sources/base/drivers/common/`
|
|
**LoC:** ~995 (6 Rust files)
|
|
|
|
#### What's Implemented
|
|
|
|
| Feature | Status | Reference |
|
|
|---------|--------|-----------|
|
|
| DMA abstraction | ✅ Partial | `dma.rs` |
|
|
| SGL (Scatter-Gather List) | ✅ Partial | `sgl.rs` |
|
|
| Timeout utilities | ✅ Partial | `timeout.rs` |
|
|
| MMIO pointer | ✅ Partial | `io/mmio_ptr.rs` |
|
|
| I/O port access | ✅ x86 only | `io/pio.rs` |
|
|
| Logging setup | ✅ Complete | `lib.rs` |
|
|
|
|
#### What's Missing / Stubs Found
|
|
|
|
1. **Dynamic sizing** - `sgl.rs:50`
|
|
- `// TODO: Both PAGE_SIZE and MAX_ALLOC_SIZE should be dynamic`
|
|
|
|
2. **SGL context** - `sgl.rs:73`
|
|
- `// TODO: SglContext to avoid reopening these fds`
|
|
|
|
3. **Driver context struct** - `dma.rs:181`
|
|
- `// TODO: there should exist a "context" struct that drivers create at start`
|
|
|
|
4. **Spin timeout** - `timeout.rs:49`
|
|
- `//TODO: allow timeout that spins instead of yields`
|
|
|
|
5. **MMIO safety** - `io/mmio_ptr.rs:9`
|
|
- `//TODO: reads and writes are unsafe, not new`
|
|
|
|
#### Stub Citations (file:line)
|
|
|
|
| File | Line | Content |
|
|
|------|------|---------|
|
|
| `sgl.rs` | 50 | `// TODO: Both PAGE_SIZE and MAX_ALLOC_SIZE should be dynamic` |
|
|
| `sgl.rs` | 73 | `// TODO: SglContext to avoid reopening these fds` |
|
|
| `dma.rs` | 24 | `// FIXME check this out more` |
|
|
| `dma.rs` | 181 | `// TODO: there should exist a "context" struct` |
|
|
| `lib.rs` | 170 | `// TODO: arraystring?` |
|
|
| `timeout.rs` | 49 | `//TODO: allow timeout that spins instead of yields?` |
|
|
| `io/mmio_ptr.rs` | 9 | `//TODO: reads and writes are unsafe, not new` |
|
|
|
|
#### Fix Plan
|
|
|
|
| Item | Effort | Priority |
|
|
|------|--------|----------|
|
|
| Dynamic PAGE_SIZE/MAX_ALLOC_SIZE | 2 weeks | P2 |
|
|
| SGL context | 1 week | P2 |
|
|
| Driver context struct | 2 weeks | P2 |
|
|
| Spin timeout option | 1 week | P3 |
|
|
|
|
**Time Estimate:** 6 weeks
|
|
|
|
---
|
|
|
|
## Low-Level Infrastructure Coverage Matrix
|
|
|
|
| Component | Phase 1 Status | Phase 2+ Blocker? | Notes |
|
|
|-----------|---------------|-------------------|-------|
|
|
| **ACPI** | | | |
|
|
| MADT | ✅ Working | No | x2APIC verified on bare metal |
|
|
| FADT | ✅ Working | No | S5 via \_S5 works |
|
|
| RSDP/RSDT/XSDT | ✅ Working | No | Parsing complete |
|
|
| ACPI namespace | ⚠️ Partial | Yes | Tables parsed but not used for enumeration |
|
|
| ACPI Notify | ❌ Missing | Yes | Button/lid events not handled |
|
|
| ACPI GPE | ❌ Missing | Yes | GPE0 block not exposed |
|
|
| ACPI Embedded Controller | ⚠️ Stub | Yes | EC transactions may timeout |
|
|
| ACPI Power (S3/S4) | ❌ Missing | Yes | Only S5 implemented |
|
|
| ACPI Thermal | ❌ Missing | Yes | No \_TMP evaluation |
|
|
| ACPI Battery | ❌ Missing | No | Low priority for desktop |
|
|
| ACPI Wake | ❌ Missing | Yes | \_PRW not evaluated |
|
|
| **PCI** | | | |
|
|
| PCI enumeration (bus 0) | ✅ Working | No | |
|
|
| PCI multi-bus | ❌ Missing | Yes | Only bus 0 enumerated |
|
|
| PCIe extended config | ✅ Working | No | 4096 bytes accessible |
|
|
| MSI | ✅ Working | No | Single-vector MSI works |
|
|
| MSI-X | ✅ Working | No | Multi-vector MSI-X works |
|
|
| MSI-X per-vector masking | ✅ Working | No | Implemented in pcid |
|
|
| INTx | ✅ Working | No | Legacy interrupts work |
|
|
| PCIe AER | ❌ Missing | Yes | No error reporting |
|
|
| PCIe ASPM | ❌ Missing | No | L0s/L1 not negotiated |
|
|
| PCIe hotplug | ❌ Missing | Yes | No native hotplug |
|
|
| PCIe SR-IOV | ❌ Missing | No | VF not implemented |
|
|
| **IRQ** | | | |
|
|
| 8259 PIC | ⚠️ Legacy | No | x86 only, rarely used |
|
|
| I/O APIC | ✅ Working | No | Modern IRQ routing |
|
|
| Local APIC | ✅ Working | No | Per-CPU interrupts |
|
|
| x2APIC | ✅ Working | No | 32-bit APIC IDs verified |
|
|
| IRQ domains | ⚠️ Partial | No | /scheme/irq works |
|
|
| IRQ affinity | ⚠️ Partial | Yes | Per-CPU allocation exists |
|
|
| **IOMMU** | | | |
|
|
| AMD-Vi (AMD-Vi) | ⚠️ Partial | Yes | Command buffer partial |
|
|
| Intel VT-d | ⚠️ Partial | Yes | Context tables incomplete |
|
|
| DMA translation | ⚠️ Partial | Yes | Basic translation works |
|
|
| Interrupt remapping | ❌ Missing | Yes | Not fully validated |
|
|
| **APIC/x2APIC** | | | |
|
|
| xAPIC mode | ✅ Working | No | |
|
|
| x2APIC mode | ✅ Working | No | Verified on AMD hardware |
|
|
| IPI | ✅ Working | No | Multi-core bringup works |
|
|
| NMI | ✅ Working | No | NMI handling works |
|
|
| Timer interrupt | ✅ Working | No | Local APIC timer works |
|
|
| Spurious interrupt | ⚠️ Partial | No | Basic handling exists |
|
|
| **Boot** | | | |
|
|
| UEFI boot | ✅ Working | No | Bootloader handles |
|
|
| BIOS boot | ✅ Working | No | Legacy boot works |
|
|
| Multiboot | ✅ Working | No | |
|
|
| Bootstrap | ⚠️ Partial | No | exec/procmgr work |
|
|
| Initfs | ⚠️ Partial | No | Mounts but symlinks incomplete |
|
|
| **Init** | | | |
|
|
| Service lifecycle | ⚠️ Partial | No | Start/stop works |
|
|
| Dependency resolution | ❌ Missing | Yes | No After=/Requires= |
|
|
| Auto-restart on failure | ❌ Missing | Yes | No Restart= |
|
|
| Resource limits | ❌ Missing | No | Not critical for Phase 1 |
|
|
| Mount sysroot | ⚠️ Partial | No | Uses hardcoded paths |
|
|
| Console management | ✅ Working | No | getty/login work |
|
|
| Poweroff/reboot | ✅ Working | No | Via acpi:\_S5 |
|
|
|
|
---
|
|
|
|
## Cross-Cutting Issues
|
|
|
|
### MSI-X Completeness
|
|
|
|
**Issue:** MSI-X implementation exists but has gaps
|
|
|
|
**Current State:**
|
|
- `pcid/src/driver_interface/msi.rs`: Full MSI-X table entry structure with per-vector masking ✅
|
|
- `pcid/src/driver_interface/irq_helpers.rs`: MSI-X allocation with `pci_allocate_interrupt_vectors()` ✅
|
|
- `xhcid/src/xhci/irq_reactor.rs`: MSI-X event handling with polling fallback ⚠️
|
|
- `virtio-netd`: Uses MSI-X via pcid ✅
|
|
|
|
**Gaps:**
|
|
1. `irq_helpers.rs:254`: `// TODO: Allow allocation of up to 32 vectors` - current limit unclear
|
|
2. `irq_helpers.rs:308`: `// FIXME move MSI-X IRQ allocation to pcid` - split responsibility
|
|
3. `xhcid/src/xhci/irq_reactor.rs:536`: `error!("TODO: grow event ring")` - event ring cannot grow
|
|
4. Non-x86 MSI support is a stub (`irq_helpers.rs:428`)
|
|
|
|
**Linux Reference:**
|
|
- `local/reference/linux-7.1/drivers/pci/msi.c`
|
|
- `local/reference/linux-7.1/arch/x86/kernel/apic/msi.c`
|
|
|
|
**Fix Plan:** 1 week for MSI-X vector limit, 2 weeks for event ring growth
|
|
|
|
### ACPI Notify Handling
|
|
|
|
**Issue:** No mechanism to handle ACPI device notifications (button events, lid state, etc.)
|
|
|
|
**Current State:**
|
|
- `acpid/src/scheme.rs` exposes only `tables/`, `symbols/`, `dmi/` paths
|
|
- No `notify` or `gpe` scheme paths
|
|
- `acpid/src/main.rs` only listens on shutdown pipe and scheme socket
|
|
|
|
**Linux Reference:**
|
|
- `local/reference/linux-7.1/drivers/acpi/button.c` - Power button, lid
|
|
- `local/reference/linux-7.1/drivers/acpi/scan.c` - Device notify registration
|
|
|
|
**Required:**
|
|
1. GPE0/GPE1 block handler scheme path
|
|
2. Notify handler registration with AML interpreter
|
|
3. Event dispatch to registered handlers
|
|
|
|
**Fix Plan:** 2 weeks for GPE handling, 2 weeks for Notify
|
|
|
|
### GPE Handling
|
|
|
|
**Issue:** GPE (General Purpose Event) blocks not handled
|
|
|
|
**Current State:**
|
|
- FADT parsed (`acpi.rs:740-894`) with GPE0/GPE1 block addresses stored
|
|
- No GPE handler installed
|
|
- SCI (System Control Interrupt) not explicitly handled
|
|
|
|
**Linux Reference:**
|
|
- `local/reference/linux-7.1/drivers/acpi/acpica/evgpe.c` - GPE event handling
|
|
- `local/reference/linux-7.1/drivers/acpi/acpica/evgpeblk.c` - GPE block handlers
|
|
|
|
**Fix Plan:** 2 weeks for basic GPE dispatch, 3 weeks for full handler
|
|
|
|
### Embedded Controller
|
|
|
|
**Issue:** EC transactions may fail silently
|
|
|
|
**Current State:**
|
|
- `ec.rs` implements basic EC transaction protocol
|
|
- `aml_physmem.rs:74`: EC region handler installed
|
|
- Multiple `// TODO proper error type` markers in ec.rs
|
|
|
|
**Linux Reference:**
|
|
- `local/reference/linux-7.1/drivers/acpi/ec.c` - Full EC driver
|
|
|
|
**Fix Plan:** 3 weeks for robust EC handling
|
|
|
|
### Wake / Sleep
|
|
|
|
**Issue:** Only S5 (soft-off) implemented; S3 (suspend) and S4 (hibernate) missing
|
|
|
|
**Current State:**
|
|
- `acpi.rs:652-737`: `set_global_s_state(5)` works for shutdown
|
|
- `acpi.rs:723`: `// TODO: Handle SLP_TYPb` - S5 incomplete
|
|
- No suspend/resume path
|
|
|
|
**Linux Reference:**
|
|
- `local/reference/linux-7.1/drivers/acpi/sleep.c` - S0/S1/S3/S4/S5 handling
|
|
|
|
**Fix Plan:** 1 week for SLP_TYPb, 4 weeks for S3/S4
|
|
|
|
### PCIe AER
|
|
|
|
**Issue:** No Advanced Error Reporting capability
|
|
|
|
**Current State:**
|
|
- No AER capability parsing in `driver_interface/cap.rs`
|
|
- No error handler registration
|
|
- No error injection/retore support
|
|
|
|
**Linux Reference:**
|
|
- `local/reference/linux-7.1/drivers/pci/pcie/aer.c`
|
|
- `local/reference/linux-7.1/include/linux/aer.h`
|
|
|
|
**Fix Plan:** 3 weeks for basic AER
|
|
|
|
---
|
|
|
|
## Fix Roadmap
|
|
|
|
### Phase 1: MSI-X and ACPI Foundation (4-6 weeks)
|
|
|
|
| Item | Effort | Dependencies |
|
|
|------|--------|--------------|
|
|
| MSI-X vector allocation up to 32 | 1 week | None |
|
|
| xhcid event ring growth | 1 week | None |
|
|
| ACPI GPE handling | 2 weeks | FADT parsing |
|
|
| ACPI Notify handling | 2 weeks | GPE handling |
|
|
|
|
**Goal:** Reliable interrupt delivery for all Phase 1 devices (USB, network, storage)
|
|
|
|
### Phase 2: ACPI Completeness (6-8 weeks)
|
|
|
|
| Item | Effort | Dependencies |
|
|
|------|--------|--------------|
|
|
| Embedded Controller full impl | 3 weeks | AML interpreter |
|
|
| ACPI Thermal zones | 2 weeks | GPE handling |
|
|
| SLP_TYPb fix (S5 complete) | 1 week | FADT |
|
|
| ACPI Wake (\_PRW) | 2 weeks | GPE + Power |
|
|
|
|
**Goal:** Full ACPI power management for desktop path
|
|
|
|
### Phase 3: PCIe Extended (5-7 weeks)
|
|
|
|
| Item | Effort | Dependencies |
|
|
|------|--------|--------------|
|
|
| Multi-bus PCI enumeration | 2 weeks | ACPI MCFG |
|
|
| PCIe AER | 3 weeks | PCIe capabilities |
|
|
| PCIe ASPM | 2 weeks | PM capability |
|
|
| Non-x86 MSI support | 2 weeks | IRQ scheme |
|
|
|
|
**Goal:** PCIe feature parity for high-bandwidth devices
|
|
|
|
### Phase 4: IOMMU (4-6 weeks)
|
|
|
|
| Item | Effort | Dependencies |
|
|
|------|--------|--------------|
|
|
| AMD-Vi command buffer | 2 weeks | PCI enumeration |
|
|
| AMD-Vi event log | 1 week | AMD-Vi command buffer |
|
|
| Intel VT-d context tables | 2 weeks | PCI enumeration |
|
|
| Interrupt remapping | 2 weeks | IOMMU initialization |
|
|
|
|
**Goal:** DMA isolation and interrupt remapping for bare-metal
|
|
|
|
### Phase 5: Init Hardening (3-5 weeks)
|
|
|
|
| Item | Effort | Dependencies |
|
|
|------|--------|--------------|
|
|
| Service dependencies | 2 weeks | Unit system |
|
|
| Auto-restart on failure | 2 weeks | Service lifecycle |
|
|
| Mount sysroot via hwd | 1 week | hwd integration |
|
|
|
|
**Goal:** Reliable service management for desktop session
|
|
|
|
---
|
|
|
|
## Testing Strategy
|
|
|
|
### Unit Tests
|
|
|
|
| Component | Test Target | Priority |
|
|
|----------|------------|----------|
|
|
| acpi | RSDP/RSDT/XSDT/FADT parsing | P0 |
|
|
| pcid | PCI enumeration edge cases | P0 |
|
|
| amlserde | AML object round-trip | P1 |
|
|
| init | Service dependency resolution | P1 |
|
|
|
|
### Integration Tests
|
|
|
|
| Test | Target | Priority |
|
|
|------|--------|----------|
|
|
| QEMU ACPI tables | Synthesized RSDT/XSDT/MADT/FADT | P0 |
|
|
| PCI multi-bus | QEMU with PCIe switch | P1 |
|
|
| MSI-X multi-vector | xhcid with 32 vectors | P0 |
|
|
| GPE handling | Button notify via QEMU OVMF | P1 |
|
|
|
|
### Reference Cross-Check
|
|
|
|
| Check | Linux Expected | Red Bear Actual |
|
|
|-------|---------------|----------------|
|
|
| RSDP checksum | Valid | Valid |
|
|
| MADT CPU entries | Match APIC IDs | Match |
|
|
| FADT Pm1aControl | Non-zero | Non-zero |
|
|
| PCIe AER capability | Parseable | Not implemented |
|
|
|
|
### Bare Metal Smoke Tests
|
|
|
|
| Test | Hardware | Priority |
|
|
|------|----------|----------|
|
|
| AMD Threadripper boot | AMD Matisse | P0 |
|
|
| ACPI shutdown | All platforms | P0 |
|
|
| x2APIC CPU bringup | Multi-core | P0 |
|
|
| USB MSI-X | xhcid | P1 |
|
|
|
|
---
|
|
|
|
## Risk Assessment
|
|
|
|
### Shipping as-is (redbear-mini)
|
|
|
|
| Risk | Likelihood | Impact | Mitigation |
|
|
|------|------------|--------|------------|
|
|
| USB MSI-X fails | Medium | High | Use legacy INTx fallback |
|
|
| ACPI thermal events lost | Medium | Medium | polling fallback |
|
|
| Service restart fails | Low | Medium | manual restart |
|
|
|
|
**Risk Score:** 6/10 (acceptable for text-only mini)
|
|
|
|
### Minimum for Phase 1 (Runtime Substrate)
|
|
|
|
| Risk | Likelihood | Impact | Mitigation |
|
|
|------|------------|--------|------------|
|
|
| GPE handling missing | High | Critical | Must implement before Phase 1 |
|
|
| Notify handling missing | High | Critical | Must implement before Phase 1 |
|
|
| EC transactions timeout | Medium | High | Add error recovery |
|
|
| MSI-X vector limit | Medium | Medium | Increase to 32 |
|
|
|
|
**Risk Score:** 8/10 (GPE/Notify are blockers)
|
|
|
|
### Minimum for Phase 2-4 (Desktop Path)
|
|
|
|
| Risk | Likelihood | Impact | Mitigation |
|
|
|------|------------|--------|------------|
|
|
| Multi-bus PCI missing | High | Critical | Must implement for GPU |
|
|
| IOMMU incomplete | High | High | Use identity mapping fallback |
|
|
| AER missing | Medium | Medium | Error logging only |
|
|
|
|
**Risk Score:** 9/10 (PCI multi-bus is critical for GPU)
|
|
|
|
---
|
|
|
|
## Appendix A: Grep Results Summary
|
|
|
|
### acpid - TODO/FIXME/TODO! count: 20
|
|
|
|
Key stubs:
|
|
- `acpi.rs:268` - Tables not used
|
|
- `acpi.rs:723` - SLP_TYPb not handled
|
|
- `ec.rs:193-254` - 8x "TODO proper error type"
|
|
- `aml_physmem.rs:442-452` - Mutex handlers TODO
|
|
|
|
### pcid - TODO/FIXME/TODO! count: 23
|
|
|
|
Key stubs:
|
|
- `main.rs:299` - MCFG host bridge limitation
|
|
- `cfg_access/fallback.rs:89,94` - todo! for non-x86
|
|
- `irq_helpers.rs:254` - Vector limit 32
|
|
- `irq_helpers.rs:428` - Non-x86 MSI stub
|
|
|
|
### kernel - TODO/FIXME/TODO! count: 393
|
|
|
|
Key areas:
|
|
- `context/memory.rs`: 50+ TODOs (OOM, page tables)
|
|
- `rmm/`: 15+ TODOs (paging, emulate)
|
|
- `acpi/`: 20+ TODOs (tables, HPET, SPCR)
|
|
- `syscall/`: 30+ TODOs (various)
|
|
|
|
### bootstrap - TODO/FIXME/TODO! count: 63
|
|
|
|
Key areas:
|
|
- `procmgr.rs`: 50+ TODOs (events, signals, process state)
|
|
- `initfs.rs`: 6 TODOs (symlinks, bootstrap)
|
|
|
|
### init - TODO/FIXME/TODO! count: 4
|
|
|
|
- `main.rs:150` - multi-user.target TODO
|
|
- `service.rs:98,100` - namespace TODO
|
|
|
|
---
|
|
|
|
## Appendix B: File-by-file Line Counts
|
|
|
|
| Component | File | Lines |
|
|
|----------|------|-------|
|
|
| acpid | `src/acpi.rs` | 956 |
|
|
| acpid | `src/main.rs` | 187 |
|
|
| acpid | `src/scheme.rs` | 545 |
|
|
| acpid | `src/ec.rs` | 284 |
|
|
| acpid | `src/dmi.rs` | ~200 |
|
|
| acpid | `src/quirks.rs` | ~200 |
|
|
| acpid | `src/aml_physmem.rs` | ~500 |
|
|
| pcid | `src/main.rs` | ~400 |
|
|
| pcid | `src/scheme.rs` | ~500 |
|
|
| pcid | `src/driver_handler.rs` | ~600 |
|
|
| pcid | `src/driver_interface/mod.rs` | ~500 |
|
|
| pcid | `src/driver_interface/msi.rs` | 257 |
|
|
| pcid | `src/driver_interface/irq_helpers.rs` | 454 |
|
|
| pcid | `src/cfg_access/mod.rs` | ~400 |
|
|
| kernel | `src/acpi/mod.rs` | ~500 |
|
|
| kernel | `src/scheme/acpi.rs` | 336 |
|
|
| kernel | `src/memory/mod.rs` | ~2900 |
|
|
| kernel | `src/context/memory.rs` | ~3000 |
|
|
| init | `src/main.rs` | 184 |
|
|
| init | `src/service.rs` | 132 |
|
|
| init | `src/unit.rs` | ~300 |
|
|
| init | `src/scheduler.rs` | ~200 |
|
|
| bootstrap | `src/procmgr.rs` | ~2600 |
|
|
| bootstrap | `src/exec.rs` | ~800 |
|
|
| bootstrap | `src/initfs.rs` | ~1000 |
|
|
| common | `src/lib.rs` | ~200 |
|
|
| common | `src/dma.rs` | ~200 |
|
|
| common | `src/sgl.rs` | ~300 |
|
|
|
|
---
|
|
|
|
## Appendix C: Linux Reference File Mapping
|
|
|
|
| Linux File/Directory | Red Bear Equivalent | Completeness |
|
|
|----------------------|---------------------|--------------|
|
|
| `drivers/acpi/battery.c` | Not implemented | 0% |
|
|
| `drivers/acpi/button.c` | Not implemented | 0% |
|
|
| `drivers/acpi/ec.c` | `ec.rs` | 30% |
|
|
| `drivers/acpi/sleep.c` | `acpi.rs` (S5 only) | 20% |
|
|
| `drivers/acpi/thermal.c` | Not implemented | 0% |
|
|
| `drivers/acpi/acpica/evgpe.c` | Not implemented | 0% |
|
|
| `drivers/pci/msi.c` | `driver_interface/msi.rs`, `irq_helpers.rs` | 80% |
|
|
| `drivers/pci/pcie/aer.c` | Not implemented | 0% |
|
|
| `drivers/pci/pcie/aspm.c` | Not implemented | 0% |
|
|
| `drivers/pci/hotplug/` | Not implemented | 0% |
|
|
| `drivers/pci/iov.c` | Not implemented | 0% |
|
|
| `drivers/iommu/amd_iommu.c` | Partial in kernel | 40% |
|
|
| `drivers/iommu/intel-iommu.c` | Partial in kernel | 40% |
|
|
| `arch/x86/kernel/apic/x2apic.c` | `acpi/madt/arch/x86.rs` | 90% |
|
|
| `arch/x86/kernel/apic/apic.c` | `acpi/madt/arch/x86.rs` | 80% |
|
|
| `kernel/irq/` | `scheme/irq.rs` | 70% |
|
|
| `systemd/src/core/service.c` | `init/src/service.rs` | 40% |
|
|
| `systemd/src/core/unit-dependency.c` | Not implemented | 0% |
|
|
|
|
---
|
|
|
|
**End of Audit Document**
|