8b872979ef
- udev-shim: replace .expect() with graceful errors (no more panic on Broken pipe) - P4-initfs: remove duplicate sessiond (conflicted with config) - accessibility/ime/keymapd: break instead of exit(1) on EBADF - P6 driver patches rebased - Docs: archive old reports, add implementation master plan
317 lines
15 KiB
Markdown
317 lines
15 KiB
Markdown
# Red Bear OS — Comprehensive Driver & Hardware Audit
|
|
|
|
**Date**: 2026-05-04
|
|
**Source of truth**: Linux kernel 7.0 (`local/reference/linux-7.0/`, 2.0 GB)
|
|
**Method**: Cross-reference every Red Bear daemon/driver/hardware-init component with its Linux counterpart. Prefer Linux as ground truth for correctness and completeness.
|
|
|
|
---
|
|
|
|
## 1. Size Comparison Summary
|
|
|
|
| Subsystem | Red Bear (lines) | Linux (lines) | Ratio | Existing Plan |
|
|
|-----------|-----------------|---------------|-------|---------------|
|
|
| ACPI (acpid + kernel) | 2,187 + 727 | ~60,000+ | ~20x | ACPI-IMPROVEMENT-PLAN.md |
|
|
| PCI | 1,192 | ~15,000+ | ~12x | IRQ-AND-LOWLEVEL-CONTROLLERS |
|
|
| AHCI storage | 109 | 2,173 (ahci.c only) | ~20x | **NONE — gap** |
|
|
| xHCI USB | ~1,100 | 12,188 (3 files) | ~11x | USB-IMPLEMENTATION-PLAN.md |
|
|
| Network (e1000+r8168) | 918 | 37,893 | ~41x | **NONE — gap** |
|
|
| Audio (HDA+AC97) | 610 | ~10,000+ | ~16x | **NONE — gap** |
|
|
| GPU/DRM | 8,427 | 1,284,210 (amd+i915) | ~152x | DRM-MODERNIZATION-EXECUTION |
|
|
| Kernel IRQ | 570 | ~10,000+ | ~17x | IRQ-AND-LOWLEVEL-CONTROLLERS |
|
|
| Input (PS/2 + USB HID) | ~500 | 38,000+ (i8042 + HID) | ~76x | Partial (USB-IMPLEMENTATION) |
|
|
|
|
**Note**: Size ratios reflect architectural differences (microkernel userspace drivers vs monolithic kernel). Red Bear targets a narrower hardware set. However, feature gaps are real and impactful.
|
|
|
|
---
|
|
|
|
## 2. Detailed Component Assessment
|
|
|
|
### 2.1 ACPI (Covered: ACPI-IMPROVEMENT-PLAN.md)
|
|
|
|
**Red Bear**: acpid daemon (2,187 lines) + kernel ACPI tables (727 lines)
|
|
**Linux**: drivers/acpi/ (~60K lines) + arch/x86/kernel/acpi/ + ACPICA interpreter
|
|
|
|
**What Red Bear has (verified)**:
|
|
- ✅ ACPI table parsing (RSDP, RSDT/XSDT, FADT, MADT, DSDT/SSDT)
|
|
- ✅ AML interpreter (bounded subset, v6.1.1)
|
|
- ✅ S5 shutdown via PM1a/PM1b + keyboard controller fallback
|
|
- ✅ Power methods (\_PS0, \_PS3, \_PPC)
|
|
- ✅ RSDP forwarding from bootloader
|
|
|
|
**What Linux has that Red Bear is missing**:
|
|
- ❌ S3 (suspend-to-RAM) / S4 (hibernate) — Linux: `arch/x86/kernel/acpi/sleep.c`
|
|
- ❌ Thermal zones — Linux: `drivers/acpi/thermal.c`
|
|
- ❌ Battery/AC status — Linux: `drivers/acpi/battery.c`, `ac.c`
|
|
- ❌ Fan control — Linux: `drivers/acpi/fan.c`
|
|
- ❌ Embedded Controller runtime — Linux: `drivers/acpi/ec.c` (62KB)
|
|
- ❌ Processor performance states (\_PSS) — Linux: `drivers/acpi/processor_perflib.c`
|
|
- ❌ C-states — Linux: `arch/x86/kernel/acpi/cstate.c`
|
|
- ❌ PCI IRQ routing overrides (\_PRT) — Linux: `drivers/acpi/pci_irq.c`
|
|
- ❌ ACPI Platform Error Interface (APEI) — Linux: `drivers/acpi/apei/`
|
|
|
|
**Priority**: S3/S4 sleep and thermal shutdown are critical for laptop/desktop use.
|
|
|
|
---
|
|
|
|
### 2.2 PCI / IRQ (Covered: IRQ-AND-LOWLEVEL-CONTROLLERS-ENHANCEMENT-PLAN.md)
|
|
|
|
**Red Bear**: pcid + pcid-spawner (1,192 lines)
|
|
**Linux**: drivers/pci/ (~15K lines) + drivers/pci/pcie/ + drivers/pci/msi/
|
|
|
|
**What Red Bear has**:
|
|
- ✅ PCI enumeration (bus/device/function scanning)
|
|
- ✅ Driver spawning via pcid-spawner
|
|
- ✅ Basic MSI/MSI-X enable/disable
|
|
- ✅ PCIe capability parsing
|
|
|
|
**What Linux has that Red Bear is missing**:
|
|
- ❌ AER (Advanced Error Reporting) — Linux: `drivers/pci/pcie/aer.c`
|
|
- ❌ ASPM (Active State Power Management) — Linux: `drivers/pci/pcie/aspm.c`
|
|
- ❌ PCIe hotplug — Linux: `drivers/pci/hotplug/`
|
|
- ❌ SR-IOV virtualization — Linux: `drivers/pci/iov.c`
|
|
- ❌ Access Control Services (ACS) — Linux: `drivers/pci/pcie/acs.c`
|
|
- ❌ Address Translation Services (ATS/PRI/PASID) — Linux: `drivers/pci/ats.c`
|
|
- ❌ DPC (Downstream Port Containment) — Linux: `drivers/pci/pcie/dpc.c`
|
|
|
|
**Priority**: AER is critical for hardware reliability. ASPM for power efficiency on laptops.
|
|
|
|
---
|
|
|
|
### 2.3 Storage — AHCI (No existing plan — CRITICAL GAP)
|
|
|
|
**Red Bear**: ahcid (109 lines — main.rs only)
|
|
**Linux**: `drivers/ata/ahci.c` (2,173 lines) + `libahci.c` (2,447 lines) + `libata-core.c` (5,296 lines)
|
|
|
|
**Red Bear current state**: Minimal — only basic SATA IDENTIFY and PIO/DMA read/write.
|
|
|
|
**What Linux has that Red Bear is missing** (cross-referenced from `drivers/ata/ahci.c` and `libata-core.c`):
|
|
- ❌ **NCQ** (Native Command Queuing) — 32-command depth, critical for SSD performance
|
|
- Linux: `libata-sata.c` — `ata_scsi_queuecmd()`, `ata_qc_issue()`
|
|
- Red Bear reference: `drivers/ata/libata-sata.c:35` — `sata_fsl_host_intr()` with NCQ error handling
|
|
- ❌ **FIS-based switching** (port multiplier support)
|
|
- Linux: `drivers/ata/ahci.c:1423` — `ahci_qc_prep()` handles FIS registers
|
|
- ❌ **TRIM/Discard** (SSD optimization)
|
|
- Linux: `drivers/ata/libata-scsi.c` — `ata_scsi_unmap_xlat()` maps DISCARD to DATA SET MANAGEMENT
|
|
- ❌ **Power management** (Partial/Slumber link states)
|
|
- Linux: `drivers/ata/libata-eh.c:3682` — `ata_eh_handle_port_suspend()`
|
|
- ❌ **Hotplug detection**
|
|
- Linux: `drivers/ata/libata-core.c:5465` — `ata_port_detect()` with PHY event polling
|
|
- ❌ **LED control** (activity/locate/fault LEDs)
|
|
- Linux: `drivers/ata/libata-core.c:4938` — `ata_led_*` functions
|
|
- ❌ **ATAPI (CD/DVD) support** — present in Linux at `drivers/ata/libata-scsi.c`
|
|
- ❌ **SMART passthrough** — Linux: `drivers/ata/libata-scsi.c` — `ata_scsi_pass_thru()`
|
|
- ❌ **Error recovery** — Linux has extensive EH (Error Handler) in `libata-eh.c` (3,915 lines)
|
|
|
|
**Priority**: NCQ alone can improve SSD throughput 3-5x. TRIM prevents SSD degradation. Power management critical for laptops.
|
|
|
|
---
|
|
|
|
### 2.4 Storage — NVMe (No existing plan)
|
|
|
|
**Red Bear**: nvmed (present but minimal)
|
|
**Linux**: `drivers/nvme/host/` — `core.c` + `pci.c` + `ioctl.c` + `fabrics.c` + `multipath.c` + `zns.c`
|
|
|
|
**What Linux has that Red Bear is missing**:
|
|
- ❌ Multiple I/O queues (NVMe supports up to 64K queues)
|
|
- ❌ Submission/completion queue management
|
|
- ❌ PRP/SGL scatter-gather lists
|
|
- ❌ Namespace management
|
|
- ❌ NVMe-MI (Management Interface)
|
|
- ❌ Fabrics (NVMe-oF) — Linux: `drivers/nvme/host/fabrics.c`
|
|
- ❌ ZNS (Zoned Namespaces) — Linux: `drivers/nvme/host/zns.c`
|
|
- ❌ Multipath I/O — Linux: `drivers/nvme/host/multipath.c`
|
|
|
|
**Priority**: Lower than AHCI — most VMs use SATA or virtio-blk.
|
|
|
|
---
|
|
|
|
### 2.5 Network — e1000 / r8168 (No existing plan — CRITICAL GAP)
|
|
|
|
**Red Bear**: e1000d (458 lines) + rtl8168d (460 lines) = 918 lines total
|
|
**Linux**: e1000e (30,203 lines) + r8169 (7,690 lines) = 37,893 lines total
|
|
|
|
**What Linux has that Red Bear is missing** (cross-referenced from `drivers/net/ethernet/intel/e1000e/` and `drivers/net/ethernet/realtek/r8169_main.c`):
|
|
|
|
**e1000/e1000e**:
|
|
- ❌ **Interrupt moderation** (ITR) — critical for throughput
|
|
- Linux: `e1000e/netdev.c:4200` — `e1000_configure_itr()`
|
|
- ❌ **Hardware checksum offload** (TCP/UDP checksum)
|
|
- Linux: `e1000e/netdev.c` — `e1000_tx_csum()`, `e1000_rx_checksum()`
|
|
- ❌ **TSO/GSO** (TCP Segmentation Offload)
|
|
- Linux: `e1000e/netdev.c:5305` — `e1000_tso()`
|
|
- ❌ **Jumbo frames** (>1500 MTU)
|
|
- ❌ **Wake-on-LAN** — Linux: `e1000e/netdev.c:5512` — `e1000e_set_wol()`
|
|
- ❌ **VLAN hardware acceleration**
|
|
- ❌ **EEE** (Energy Efficient Ethernet) — Linux: `e1000e/ethtool.c`
|
|
- ❌ **Multiple TX/RX queues** (MSI-X based)
|
|
|
|
**r8169**:
|
|
- ❌ **Hardware checksum offload**
|
|
- ❌ **TSO/GSO**
|
|
- ❌ **Jumbo frames** — Linux: `r8169_main.c:4352` — `rtl_jumbo_config()`
|
|
- ❌ **EEPROM/MDIO access** — Linux: `r8169_main.c` — `rtl_read_eeprom()`
|
|
- ❌ **Firmware loading** (some chips need firmware) — Linux: `r8169_firmware.c`
|
|
- ❌ **PHY configuration** (per-chip phy init sequences) — Linux: `r8169_phy_config.c` (1,354 lines)
|
|
- ❌ **Power management** / ASPM — Linux: `r8169_main.c:5073` — `rtl8169_runtime_suspend()`
|
|
|
|
**Priority**: Hardware offloads can improve throughput 3-10x. Interrupt moderation is essential for high packet rates.
|
|
|
|
---
|
|
|
|
### 2.6 Audio — HDA / AC97 (No existing plan — GAP)
|
|
|
|
**Red Bear**: ihdad (143 lines) + ac97d (467 lines) = 610 lines total
|
|
**Linux**: `sound/hda/` + `sound/pci/ac97/` (~10K lines)
|
|
|
|
**What Linux has that Red Bear is missing**:
|
|
- ❌ **HDA codec auto-detection** (Realtek, Conexant, IDT, VIA, etc.)
|
|
- Linux: `sound/hda/hda_codec.c` — `snd_hda_codec_new()`
|
|
- ❌ **HDA codec-specific initialization** (pin configs, EAPD, GPIO)
|
|
- Linux: `sound/hda/hda_generic.c` — generic parser
|
|
- ❌ **HDA power management** (codec power states, D0/D3)
|
|
- Linux: `sound/hda/hda_codec.c` — `snd_hda_codec_set_power_state()`
|
|
- ❌ **Mixer controls** (volume, mute, capture, jack sensing)
|
|
- Linux: `sound/hda/hda_generic.c` — `create_mute_volume_ctl()`
|
|
- ❌ **Jack detection** (headphone/mic plug/unplug)
|
|
- Linux: `sound/hda/hda_jack.c` — `snd_hda_jack_detect()`
|
|
- ❌ **HDMI/DP audio** (digital audio over display)
|
|
- Linux: `sound/hda/hda_eld.c` — ELD (EDID-Like Data) parsing
|
|
- ❌ **AC97 multiple codec support**
|
|
- Linux: `sound/pci/ac97/ac97_codec.c` (3,134 lines)
|
|
- ❌ **Sample rate conversion / format negotiation**
|
|
|
|
**Priority**: Codec auto-detection is the minimum needed for real hardware audio to work beyond basic beeps. Without it, audio works on zero real machines.
|
|
|
|
---
|
|
|
|
### 2.7 USB — xHCI (Covered: USB-IMPLEMENTATION-PLAN.md)
|
|
|
|
**Red Bear**: xhcid (~1,100 lines)
|
|
**Linux**: `drivers/usb/host/xhci.c` (5,705) + `xhci-ring.c` (4,488) + `xhci-hub.c` (1,995) = 12,188 lines
|
|
|
|
**What Red Bear has**:
|
|
- ✅ Basic control/bulk/interrupt/isochronous transfers
|
|
- ✅ Device enumeration (basic)
|
|
|
|
**What Linux has that Red Bear is missing** (cross-referenced):
|
|
- ❌ **Transfer ring management** (TRB dequeue, cycle bit tracking)
|
|
- Linux: `xhci-ring.c:253` — `inc_deq()` with cycle state handling
|
|
- ❌ **Stream support** (bulk streams for UAS)
|
|
- Linux: `xhci-ring.c:3500` — `xhci_queue_stream_transfer()`
|
|
- ❌ **USB 3.x SuperSpeed features** (U1/U2/U3 link states)
|
|
- Linux: `xhci.c:4560` — `xhci_set_link_state()`
|
|
- ❌ **Isochronous scheduling** (proper bandwidth calculation)
|
|
- Linux: `xhci-ring.c:3718` — `xhci_queue_isoc_tx()`
|
|
- ❌ **Command ring handling** (TRB abort, stop endpoint)
|
|
- Linux: `xhci-ring.c:173` — `xhci_abort_cmd_ring()`
|
|
- ❌ **Error recovery** (transfer event TRB error handling)
|
|
- Linux: `xhci-ring.c:2636` — `handle_tx_event()` with extensive error cases
|
|
- ❌ **Controller reset/recovery** (xHCI controller hang detection)
|
|
- Linux: `xhci.c:5173` — `xhci_handle_command_timeout()`
|
|
|
|
**Priority**: Referenced by USB-IMPLEMENTATION-PLAN.md.
|
|
|
|
---
|
|
|
|
### 2.8 GPU / DRM (Covered: DRM-MODERNIZATION-EXECUTION-PLAN.md)
|
|
|
|
Redox-drm (8,427 lines) vs Linux AMD+i915 (1,284,210 lines). Referenced by existing plan. Key gaps already documented.
|
|
|
|
---
|
|
|
|
### 2.9 Input — PS/2 + USB HID
|
|
|
|
**Red Bear**: ps2d + usbhidd (~500 lines)
|
|
**Linux**: `drivers/input/serio/i8042.c` (1,254 lines) + `drivers/hid/usbhid/` + `drivers/input/evdev.c`
|
|
|
|
**What Linux has that Red Bear is missing**:
|
|
- ❌ **i8042 controller detection and reset** — Linux: `i8042.c:522` — `i8042_controller_check()`
|
|
- ❌ **PS/2 hotplug** — Linux: `i8042.c` — `i8042_interrupt()` with AUX detection
|
|
- ❌ **LED feedback** — Red Bear has basic LED support (P3 patch)
|
|
- ❌ **Touchpad protocol detection** (Synaptics, ALPS, Elantech)
|
|
- ❌ **Multitouch support** (USB HID digitizer class)
|
|
- ❌ **Force feedback** (game controllers) — Linux: `drivers/hid/hid-pidff.c`
|
|
|
|
---
|
|
|
|
## 3. Prioritized Improvement Plan
|
|
|
|
### Tier 1 — CRITICAL (blocks real hardware use)
|
|
|
|
| # | Task | Subsystem | Effort | Reference |
|
|
|---|------|-----------|--------|-----------|
|
|
| 1 | ACPI S3/S4 sleep + thermal shutdown | ACPI | 2-3 weeks | `drivers/acpi/sleep.c`, `arch/x86/kernel/acpi/sleep.c` |
|
|
| 2 | NCQ support in AHCI | Storage | 1-2 weeks | `drivers/ata/libata-sata.c` — `ata_qc_issue()` |
|
|
| 3 | HDA codec auto-detection | Audio | 2-3 weeks | `sound/hda/hda_codec.c` — `snd_hda_codec_new()` |
|
|
| 4 | Network interrupt moderation + checksum offload | Network | 1-2 weeks | `e1000e/netdev.c` — `e1000_configure_itr()` |
|
|
|
|
### Tier 2 — HIGH (major quality improvements)
|
|
|
|
| # | Task | Subsystem | Effort | Reference |
|
|
|---|------|-----------|--------|-----------|
|
|
| 5 | TRIM/Discard for AHCI | Storage | 3-5 days | `drivers/ata/libata-scsi.c` — `ata_scsi_unmap_xlat()` |
|
|
| 6 | AHCI power management (Partial/Slumber) | Storage | 3-5 days | `drivers/ata/libata-eh.c` — suspend/resume |
|
|
| 7 | r8169 PHY configuration | Network | 1 week | `r8169_phy_config.c` (1,354 lines) |
|
|
| 8 | PCIe AER (Advanced Error Reporting) | PCI | 1 week | `drivers/pci/pcie/aer.c` |
|
|
| 9 | Jack detection + mixer controls for HDA | Audio | 1 week | `sound/hda/hda_jack.c`, `hda_generic.c` |
|
|
|
|
### Tier 3 — MEDIUM (polish and completeness)
|
|
|
|
| # | Task | Subsystem | Effort | Reference |
|
|
|---|------|-----------|--------|-----------|
|
|
| 10 | NVMe multiple I/O queues | Storage | 1-2 weeks | `drivers/nvme/host/pci.c` |
|
|
| 11 | PCIe ASPM | PCI | 3-5 days | `drivers/pci/pcie/aspm.c` |
|
|
| 12 | AHCI FIS-based switching | Storage | 1 week | `drivers/ata/ahci.c` — `ahci_qc_prep()` |
|
|
| 13 | HDMI/DP audio over HDA | Audio | 1 week | `sound/hda/hda_eld.c` |
|
|
| 14 | PS/2 touchpad protocols | Input | 1-2 weeks | `drivers/input/mouse/synaptics.c` |
|
|
| 15 | I/OMMU runtime validation (QEMU proof exists) | IOMMU | 1 week | `drivers/iommu/amd/` |
|
|
|
|
### Tier 4 — LOW (future work)
|
|
|
|
| # | Task | Subsystem | Effort | Reference |
|
|
|---|------|-----------|--------|-----------|
|
|
| 16 | SR-IOV virtualization | PCI | 2-3 weeks | `drivers/pci/iov.c` |
|
|
| 17 | Wake-on-LAN for e1000/r8169 | Network | 3-5 days | `e1000e/netdev.c` — `e1000e_set_wol()` |
|
|
| 18 | NVMe multipath + fabrics | Storage | 2-4 weeks | `drivers/nvme/host/multipath.c` |
|
|
| 19 | PCIe hotplug | PCI | 1-2 weeks | `drivers/pci/hotplug/` |
|
|
| 20 | Force feedback for game controllers | Input | 3-5 days | `drivers/hid/hid-pidff.c` |
|
|
|
|
---
|
|
|
|
## 4. Linux Cross-Reference Quick Reference
|
|
|
|
For each Red Bear daemon, here is the primary Linux source file(s) to consult:
|
|
|
|
| Red Bear Daemon | Linux Reference |
|
|
|----------------|-----------------|
|
|
| `acpid` | `drivers/acpi/bus.c` + `arch/x86/kernel/acpi/sleep.c` |
|
|
| `pcid` | `drivers/pci/probe.c` + `drivers/pci/pci.c` |
|
|
| `ahcid` | `drivers/ata/ahci.c` + `drivers/ata/libata-core.c` |
|
|
| `nvmed` | `drivers/nvme/host/pci.c` + `core.c` |
|
|
| `e1000d` | `drivers/net/ethernet/intel/e1000e/netdev.c` |
|
|
| `rtl8168d` | `drivers/net/ethernet/realtek/r8169_main.c` |
|
|
| `xhcid` | `drivers/usb/host/xhci.c` + `xhci-ring.c` |
|
|
| `ihdad` | `sound/hda/hda_codec.c` + `hda_generic.c` |
|
|
| `ac97d` | `sound/pci/ac97/ac97_codec.c` |
|
|
| `ps2d` | `drivers/input/serio/i8042.c` |
|
|
| `usbhidd` | `drivers/hid/usbhid/hid-core.c` |
|
|
| `vesad` | `drivers/video/fbdev/vesafb.c` |
|
|
| `virtio-netd` | `drivers/net/virtio_net.c` |
|
|
| `virtio-blkd` | `drivers/block/virtio_blk.c` |
|
|
| `virtio-gpud` | `drivers/gpu/drm/virtio/virtgpu*` |
|
|
| `iommu` | `drivers/iommu/amd/` or `intel/` |
|
|
| `redox-drm` | `drivers/gpu/drm/drm_ioctl.c` + `drm_framebuffer.c` |
|
|
|
|
---
|
|
|
|
## 5. Execution Priority
|
|
|
|
```
|
|
Tier 1 (weeks 1-6): ACPI sleep + AHCI NCQ + HDA codec detect + Network offload
|
|
Tier 2 (weeks 7-10): AHCI TRIM + AHCI PM + r8169 PHY + PCIe AER + HDA jack/mixer
|
|
Tier 3 (weeks 11-16): NVMe queues + PCIe ASPM + AHCI FIS + HDMI audio + Touchpad
|
|
Tier 4 (future): SR-IOV + WoL + NVMe fabrics + Hotplug + Force feedback
|
|
```
|
|
|
|
**Total estimated effort**: 10-16 weeks for Tiers 1-2 (minimum viable hardware support). 26-40 weeks for all 4 tiers.
|