LG Gram Round 1: redox-driver-sys stub replacements + doc reference fixes

Round 1 of the LG Gram 16Z90TP compatibility work. Two parallel
workstreams in one commit:

1. Stub replacements in redox-driver-sys (per project zero-tolerance
   policy):

   - load_dmi_acpi_quirks() (was hardcoded AcpiQuirkFlags::empty()):
     real loader walking a new compiled-in DMI_ACPI_QUIRK_RULES table
     (currently empty — documented why) plus a new [[dmi_acpi_quirk]]
     TOML section parser in toml_loader.rs. The full 16-flag
     ACPI_FLAG_NAMES mapping is added so TOML entries can use any
     AcpiQuirkFlags variant by name.

   - PANEL_ORIENTATION_TABLE (was empty placeholder): populated with
     10 real entries ported from Linux 7.x
     drivers/gpu/drm/drm_panel_orientation.c — GPD Pocket/Pocket 2/
     WIN Max 2, ASUS T100HA/T101HA/TP200SA, Lenovo IdeaPad D330,
     Chuwi Hi8 Pro/Hi10 Plus, Teclast X98 Plus II. Each entry cites
     its Linux source commit.

   - PLATFORM_RULES (kept empty): documented why intentionally empty
     (Linux platform-wide DMI quirks are pre-2020 platform workarounds
     not needed by Red Bear's modern targets).

2. Broken reference fixes after the 2026-07-25 archive
   (commit 589a1044e6 moved 9 docs to legacy-obsolete-2026-07-25/
   but didn't update references). 30+ files referenced the moved
   docs by their old local/docs/<name>.md path. This commit updates
   every reference to point at local/docs/legacy-obsolete-2026-07-25/
   <name>.md so links work again. Files touched: AGENTS.md,
   README.md, docs/{AGENTS,README,07-RED-BEAR-OS-IMPLEMENTATION-PLAN}.md,
   local/AGENTS.md, 14 docs under local/docs/, local/patches/README.md,
   5 scripts under local/scripts/.

The matching acpid+ps2d consumer wiring landed earlier today in
submodule/base commit 45452c5a (force_s2idle, no_legacy_pm1b,
kbd_deactivate_fixup). The bootstrap reference fix is submodule/base
commit 263a41a9. Both are tracked by the updated submodule pointer
in this commit.

Build verification: redox-driver-sys 80 cargo tests pass. acpid/ps2d
host tests not runnable (require cross-compile). Canonical build
attempts uncovered two pre-existing failures unrelated to Round 1:
relibc edition-2024 unsafe-block issue in crtn, and the base fork's
'common' path resolution relies on the build script's overlay
integrity auto-repair which is currently failing. Neither is in code
touched by Round 1.

See local/docs/evidence/lg-gram/ASSESSMENT-2026-07-26.md for the full
round-by-round assessment and next-round plan.
This commit is contained in:
2026-07-26 16:59:32 +09:00
parent 7aab11cc2c
commit 6d8ef13dc1
31 changed files with 511 additions and 79 deletions
+4 -4
View File
@@ -360,7 +360,7 @@ After building an image, run `make validate` to verify:
For path-fork recipes (`kernel`, `base`, `relibc`, `bootloader`, `installer`, `redoxfs`, `userutils`, `syscall`, `libredox`), the equivalent validation is `git -C local/sources/<component> log --oneline -3` plus `git -C local/sources/<component> status`. To rehydrate a fork source tree, remove `recipes/core/<component>/source` and rerun `./local/scripts/build-redbear.sh redbear-mini`; `repo cook` recopies from `local/sources/`.
See `local/docs/BUILD-SYSTEM-HARDENING-PLAN.md` for the full plan.
See `local/docs/legacy-obsolete-2026-07-25/BUILD-SYSTEM-HARDENING-PLAN.md` for the full plan.
## ANTI-PATTERNS (THIS PROJECT)
@@ -596,7 +596,7 @@ release-bump toolchain:
- `check-external-versions.sh` + `bump-graphics-recipes.sh`: external desktop-stack version check + source bumps
See `local/scripts/TOOLS.md` for the full tool inventory (15 tools as of
Round 14) and `local/docs/HOOKS.md` for the opt-in git hooks.
Round 14) and `local/docs/legacy-obsolete-2026-07-25/HOOKS.md` for the opt-in git hooks.
### Offline-First By Default
@@ -739,7 +739,7 @@ For quirks and driver support specifically:
When `local/scripts/verify-patch-content.sh` reports that a patch in
`local/patches/<comp>/` is no longer present in the fork HEAD
(orphan), the default action is **NOT** to reapply the patch. Follow
this decision tree instead (per `local/docs/PATCH-PRESERVATION-AUDIT-2026-07-12.md`):
this decision tree instead (per `local/docs/legacy-obsolete-2026-07-25/PATCH-PRESERVATION-AUDIT-2026-07-12.md`):
```
1. Run 'git -C local/sources/<comp> log --all --oneline -i --grep <topic-kw>'
@@ -988,7 +988,7 @@ targets.
For PCI interrupt plumbing, IRQ delivery quality, MSI/MSI-X follow-up, low-level controller
runtime-proof sequencing, and IOMMU/interrupt-remapping quality, the canonical current plan is:
- `local/docs/IRQ-AND-LOWLEVEL-CONTROLLERS-ENHANCEMENT-PLAN.md`
- `local/docs/legacy-obsolete-2026-07-25/IRQ-AND-LOWLEVEL-CONTROLLERS-ENHANCEMENT-PLAN.md`
Use that file as the execution authority and current robustness judgment for PCI/IRQ work. Higher-
level summaries in `README.md`, `docs/README.md`, and this file should stay aligned with its
+7 -7
View File
@@ -203,20 +203,20 @@ Red Bear OS operates under strict discipline. Full policies: [`local/AGENTS.md`]
- [cub Package Manager](local/docs/CUB-PACKAGE-MANAGER.md) — AUR → recipe pipeline, CLI reference, architecture
- [tlc File Manager](local/recipes/tui/tlc/README.md) — Pure-Rust Midnight Commander replacement
- [D-Bus Integration](local/docs/DBUS-INTEGRATION-PLAN.md) — Session bus architecture
- [IRQ & Low-Level Controllers](local/docs/IRQ-AND-LOWLEVEL-CONTROLLERS-ENHANCEMENT-PLAN.md) — IRQ delivery, MSI/MSI-X, IOMMU
- [IRQ & Low-Level Controllers](local/docs/legacy-obsolete-2026-07-25/IRQ-AND-LOWLEVEL-CONTROLLERS-ENHANCEMENT-PLAN.md) — IRQ delivery, MSI/MSI-X, IOMMU
- [Greeter & Login](local/docs/GREETER-LOGIN-IMPLEMENTATION-PLAN.md) — Native greeter, auth daemon, session launch
- [DRM Modernization](local/docs/DRM-MODERNIZATION-EXECUTION-PLAN.md) — DRM/KMS display and render maturity
- [DRM Modernization](local/docs/legacy-obsolete-2026-07-25/DRM-MODERNIZATION-EXECUTION-PLAN.md) — DRM/KMS display and render maturity
- [USB Plan](local/docs/USB-IMPLEMENTATION-PLAN.md) — USB stack design and implementation
- [Patch Preservation Audit](local/docs/PATCH-PRESERVATION-AUDIT-2026-07-12.md) — orphan-patch governance, Rounds 1-6 audit results, SUPERSEDED.md log
- [Patch Preservation Audit](local/docs/legacy-obsolete-2026-07-25/PATCH-PRESERVATION-AUDIT-2026-07-12.md) — orphan-patch governance, Rounds 1-6 audit results, SUPERSEDED.md log
- [Collision Detection Status](local/docs/COLLISION-DETECTION-STATUS.md) — runtime collision-detection current state
- [Hooks](local/docs/HOOKS.md) — opt-in git hooks (pre-push safety net, etc.)
- [Hooks](local/docs/legacy-obsolete-2026-07-25/HOOKS.md) — opt-in git hooks (pre-push safety net, etc.)
- [Build Tools](local/scripts/TOOLS.md) — 15-tool reference (patch-status, sync, verify, collision, release-bump, etc.)
- [Fork Push Status](local/docs/fork-push-status/2026-07-12-Round-9-phase-8.3.md) — fork-branch push results + base deadlock (updated Round 9)
- [WiFi Plan](local/docs/WIFI-IMPLEMENTATION-PLAN.md) — Wireless architecture and driver plan
- [Bluetooth Plan](local/docs/BLUETOOTH-IMPLEMENTATION-PLAN.md) — Bluetooth stack design
- [Build Cache](local/docs/BUILD-CACHE-PLAN.md) — Content-hash (BLAKE3) build cache system
- [Build System Hardening](local/docs/BUILD-SYSTEM-HARDENING-PLAN.md) — Collision detection, init service validation
- [Build System Assessment](local/docs/BUILD-SYSTEM-ASSESSMENT-2026-07-18.md) — Architecture, quality, robustness, and gap assessment (2026-07-18)
- [Build System Hardening](local/docs/legacy-obsolete-2026-07-25/BUILD-SYSTEM-HARDENING-PLAN.md) — Collision detection, init service validation
- [Build System Assessment](local/docs/legacy-obsolete-2026-07-25/BUILD-SYSTEM-ASSESSMENT-2026-07-18.md) — Architecture, quality, robustness, and gap assessment (2026-07-18)
- [Quirks System](local/docs/QUIRKS-SYSTEM.md) — Hardware quirks infrastructure
- [Documentation Index](docs/README.md) — Full doc map
@@ -235,7 +235,7 @@ local/
│ └── (orphan-patch governance: every patch must correspond to work
│ present in the matching fork source tree. `verify-patch-content.sh`
│ enforces this on every build preflight. See
│ `local/docs/PATCH-PRESERVATION-AUDIT-2026-07-12.md` for the audit
│ `local/docs/legacy-obsolete-2026-07-25/PATCH-PRESERVATION-AUDIT-2026-07-12.md` for the audit
│ and AGENTS.md § "Orphan-Patch Supersession Decision Tree" for the
│ decision flow when an orphan is detected.)
├── docs/ # Integration and planning documentation
+2 -2
View File
@@ -270,7 +270,7 @@ Current state (2026-04-29):
Canonical plan:
- `local/docs/IRQ-AND-LOWLEVEL-CONTROLLERS-ENHANCEMENT-PLAN.md`
- `local/docs/legacy-obsolete-2026-07-25/IRQ-AND-LOWLEVEL-CONTROLLERS-ENHANCEMENT-PLAN.md`
Acceptance:
@@ -413,7 +413,7 @@ The current subsystem plans to treat as first-class are:
- `local/docs/CONSOLE-TO-KDE-DESKTOP-PLAN.md` — canonical desktop path plan
- `local/docs/WAYLAND-IMPLEMENTATION-PLAN.md` — canonical Wayland subsystem plan
- `local/docs/GREETER-LOGIN-IMPLEMENTATION-PLAN.md` — canonical greeter/login plan
- `local/docs/IRQ-AND-LOWLEVEL-CONTROLLERS-ENHANCEMENT-PLAN.md`
- `local/docs/legacy-obsolete-2026-07-25/IRQ-AND-LOWLEVEL-CONTROLLERS-ENHANCEMENT-PLAN.md`
- `local/docs/USB-IMPLEMENTATION-PLAN.md`
- `local/docs/WIFI-IMPLEMENTATION-PLAN.md`
- `local/docs/BLUETOOTH-IMPLEMENTATION-PLAN.md`
+1 -1
View File
@@ -13,7 +13,7 @@ For current Red Bear OS status, also read:
- `docs/README.md` — canonical docs index + status matrix
- `docs/07-RED-BEAR-OS-IMPLEMENTATION-PLAN.md` — canonical public implementation plan
- `local/docs/CONSOLE-TO-KDE-DESKTOP-PLAN.md`**canonical comprehensive implementation plan** — all current state
- `local/docs/DRM-MODERNIZATION-EXECUTION-PLAN.md` — current DRM-focused execution plan beneath the canonical desktop path
- `local/docs/legacy-obsolete-2026-07-25/DRM-MODERNIZATION-EXECUTION-PLAN.md` — current DRM-focused execution plan beneath the canonical desktop path
- `local/docs/SCRIPT-BEHAVIOR-MATRIX.md` — current script guarantees and non-guarantees
## STRUCTURE
+4 -4
View File
@@ -35,7 +35,7 @@ current/canonical versus historical/reference split obvious.
|---|---|
| `README.md`, `AGENTS.md`, `docs/README.md`, `docs/07-RED-BEAR-OS-IMPLEMENTATION-PLAN.md` | canonical repository-level policy and current execution model |
| `local/docs/CONSOLE-TO-KDE-DESKTOP-PLAN.md` | **canonical comprehensive implementation plan** — supersedes all individual subsystem docs |
| `local/docs/*IMPLEMENTATION-PLAN*.md`, `local/docs/DRM-MODERNIZATION-EXECUTION-PLAN.md` | subsystem plans for deep-dive detail only; authority chain → console-to-KDE plan |
| `local/docs/*IMPLEMENTATION-PLAN*.md`, `local/docs/legacy-obsolete-2026-07-25/DRM-MODERNIZATION-EXECUTION-PLAN.md` | subsystem plans for deep-dive detail only; authority chain → console-to-KDE plan |
| `docs/01-REDOX-ARCHITECTURE.md` | architecture reference |
| `docs/04-LINUX-DRIVER-COMPAT.md`, `docs/05-KDE-PLASMA-ON-REDOX.md` | valuable but partly historical roadmap/design material |
@@ -64,8 +64,8 @@ console-to-KDE plan.
- `../local/docs/WIFI-IMPLEMENTATION-PLAN.md` — Wi-Fi architecture and rollout
- `../local/docs/BLUETOOTH-IMPLEMENTATION-PLAN.md` — Bluetooth architecture and rollout
- `../local/docs/ACPI-IMPROVEMENT-PLAN.md` — ACPI ownership, robustness, validation
- `../local/docs/IRQ-AND-LOWLEVEL-CONTROLLERS-ENHANCEMENT-PLAN.md` — PCI/IRQ quality, MSI/MSI-X
- `../local/docs/DRM-MODERNIZATION-EXECUTION-PLAN.md` — DRM-focused execution (subsystem detail)
- `../local/docs/legacy-obsolete-2026-07-25/IRQ-AND-LOWLEVEL-CONTROLLERS-ENHANCEMENT-PLAN.md` — PCI/IRQ quality, MSI/MSI-X
- `../local/docs/legacy-obsolete-2026-07-25/DRM-MODERNIZATION-EXECUTION-PLAN.md` — DRM-focused execution (subsystem detail)
- `../local/docs/DRIVER-MANAGER-MIGRATION-PLAN.md` (v4.0, 2026-07-24) — migration from `pcid-spawner` to `driver-manager`. **CUTOVER COMPLETE (2026-07-23, operator-ratified):** driver-manager owns the boot-time PCI match/claim/spawn path in every `redbear-*` config; pcid-spawner is retired from configs and gated behind `/etc/driver-manager.d/disabled` as the operator fallback (never deleted). See `../local/docs/evidence/driver-manager/ASSESSMENT-2026-07-22.md` (major assessment, findings B1G10 + § 11 services integration). Delivered: claim-via-channel collapse (pcid `ENOLCK` exclusivity — the pcid-spawner model); init `ConditionPathExists` gate (systemd-style, `!` negation); spawned-mode `pci_register_driver` in linux-kpi (honors `PCID_CLIENT_CHANNEL` — single ownership of match-claim-spawn for native and Linux-port daemons); linux-kpi real MSI/MSI-X via pcid_interface + `pci_request_regions` + `pcie_capability_*` + PM state; redbear-iwlwifi `--daemon` onboarding + `70-wifi.toml`; `--import-linux-ids` Linux id_table→TOML pipeline; scheme operator surface (`bind`/`unbind`/`new_id`/`remove_id`/`driver_override`/`rescan`); Tier-1 driver_override; success-triggered deferred retry; concurrent probes with real `Driver::probe()`; real SIGCHLD/SIGHUP handlers; heartbeat counters; AER `route_to_driver`; `exclusive_with` mutual exclusion; `pci=nomsi` env var; PciQuirkFlags spawn env hints + `REDBEAR_DRIVER_{IOMMU_GROUP,NUMA_NODE,MSIX_VECTORS}`; driver-params bridge live; D-Bus correctly absent (bridge-on-demand). Gate: PASSED in QEMU q35 (initfs ahcid bind, rootfs e1000d concurrent bind, scheme live, resident hotplug). Platform finding: `thread::scope` hangs on Redox (spawn+join used instead). Cookbook now hashes Cargo path-dep sources (staleness hole closed). Open: P2-1 pcid AER/pciehp producers, P3 policy/hygiene. 93 tests pass; 0 audit-no-stubs violations; zero crate-local warnings on host and redox target.
- `../local/docs/WAYLAND-IMPLEMENTATION-PLAN.md` — Wayland compositor (subsystem detail)
- `../local/docs/archived/RELIBC-IPC-ASSESSMENT-AND-IMPROVEMENT-PLAN.md` — relibc IPC surface
@@ -109,7 +109,7 @@ This summary is only a quick orientation layer. For canonical current-state deta
- **GPU drivers**: redox-drm scheme daemon exists; Intel build-oriented path exists; AMD currently has a bounded retained compile path (`redox-drm` + Red Bear glue) while the imported Linux AMD DC/TTM/core trees remain builds and included in redbear-full (2026-04-29). Hardware validation is still pending.
- **Input**: evdevd compiled, libevdev built, libinput 1.30.2 built
- **Networking**: native wired stack present (`driver-manager` → NIC daemon → `smolnetd`/`dhcpd`/`netcfg`), Red Bear ships a native `netctl` command, RTL8125 is wired into the existing Realtek autoload path, and the bounded Intel WiFi path now has host-tested profile start/stop plus interface-specific DHCP handoff without claiming real wireless connectivity.
- **PCI / IRQ quality**: architecturally strong substrate exists, with bounded MSI-X, IOMMU, xHCI IRQ, and low-level-controller proof surfaces; broader hardware robustness is still intentionally tracked as open work in `../local/docs/IRQ-AND-LOWLEVEL-CONTROLLERS-ENHANCEMENT-PLAN.md`
- **PCI / IRQ quality**: architecturally strong substrate exists, with bounded MSI-X, IOMMU, xHCI IRQ, and low-level-controller proof surfaces; broader hardware robustness is still intentionally tracked as open work in `../local/docs/legacy-obsolete-2026-07-25/IRQ-AND-LOWLEVEL-CONTROLLERS-ENHANCEMENT-PLAN.md`
- **Wi-Fi profile target**: `config/redbear-wifi-experimental.toml` is the first explicit tracked image slice for bounded Intel WiFi validation, instead of spreading that claim across the generic desktop profiles.
- **Bluetooth**: one bounded in-tree BLE-first experimental slice exists, and the Battery Level read-only workload now has a packaged in-guest checker plus a host QEMU harness; QEMU validation is still in progress, so broad desktop Bluetooth parity is still incomplete
- **Desktop direction**: `redbear-full` carries the desktop-capable target surface; the bounded greeter/login slice now passes, while the wider desktop runtime stack is still incomplete.
+5 -5
View File
@@ -638,7 +638,7 @@ tree per AGENTS.md § "Orphan-Patch Supersession Decision Tree":
- 'bump' patches: managed by sync-versions.sh
- 'ecosystem-pins': managed by Local Fork Supremacy + AGENTS.md rules
See: `local/docs/PATCH-PRESERVATION-AUDIT-2026-07-12.md` and the
See: `local/docs/legacy-obsolete-2026-07-25/PATCH-PRESERVATION-AUDIT-2026-07-12.md` and the
`SUPERSEDED.md` audit log in `local/patches/legacy-superseded-<date>/`.
### Local fork recipe directories must not carry patch files
@@ -759,7 +759,7 @@ Bypass: `REDBEAR_NO_AUTO_SYNC=1 git checkout <branch>`. Install via
**Full runbook** (4-step release model, fork decision tree, bootloader
`git replace --graft` note, lockfile-regen sequencing, commit-sequence
conventions): `local/docs/RELEASE-BUMP-WORKFLOW.md`. **Tool inventory:**
`local/scripts/TOOLS.md`. **Hook details:** `local/docs/HOOKS.md`.
`local/scripts/TOOLS.md`. **Hook details:** `local/docs/legacy-obsolete-2026-07-25/HOOKS.md`.
### Fork authorship attribution
@@ -1412,7 +1412,7 @@ When mainline updates affect our work:
- `local/docs/WAYLAND-IMPLEMENTATION-PLAN.md` is the canonical Wayland subsystem plan beneath the
desktop path. Use it for Wayland-specific stability, completeness, ownership, and runtime-proof
sequencing.
- `local/docs/DRM-MODERNIZATION-EXECUTION-PLAN.md` is the current DRM-focused execution plan beneath
- `local/docs/legacy-obsolete-2026-07-25/DRM-MODERNIZATION-EXECUTION-PLAN.md` is the current DRM-focused execution plan beneath
the canonical desktop path. It keeps Intel and AMD at the same evidence bar while separating
display/KMS maturity from render/3D maturity.
- Older GPU-specific docs such as `local/docs/AMD-FIRST-INTEGRATION.md`,
@@ -1428,7 +1428,7 @@ When mainline updates affect our work:
including the bounded role of `linux-kpi` and the native wireless control-plane direction.
- `local/docs/USB-IMPLEMENTATION-PLAN.md` and `local/docs/BLUETOOTH-IMPLEMENTATION-PLAN.md` should
also be treated as first-class subsystem plans, not as side notes.
- `local/docs/IRQ-AND-LOWLEVEL-CONTROLLERS-ENHANCEMENT-PLAN.md` is the current umbrella plan for
- `local/docs/legacy-obsolete-2026-07-25/IRQ-AND-LOWLEVEL-CONTROLLERS-ENHANCEMENT-PLAN.md` is the current umbrella plan for
IRQ delivery, MSI/MSI-X quality, IOMMU validation, and other low-level controller completeness work.
- `local/docs/DRIVER-MANAGER-MIGRATION-PLAN.md` (v4.0, 2026-07-24) is the canonical planning
authority for the migration from `pcid-spawner` (retired and removed 2026-07-24;
@@ -1702,7 +1702,7 @@ Recipes can declare installed paths via `installs = [...]` in `[package]` sectio
scripts/generate-installs-manifest.sh base # Output suggested installs for base package
```
See `local/docs/BUILD-SYSTEM-HARDENING-PLAN.md` for the full 5-phase hardening plan.
See `local/docs/legacy-obsolete-2026-07-25/BUILD-SYSTEM-HARDENING-PLAN.md` for the full 5-phase hardening plan.
See `local/docs/BUILD-SYSTEM-INVARIANTS.md` for invariants I1-I3.
## ANTI-PATTERNS
+1 -1
View File
@@ -70,7 +70,7 @@ kernel-ownership decisions are shared.
Read these alongside this plan:
- `local/docs/IRQ-AND-LOWLEVEL-CONTROLLERS-ENHANCEMENT-PLAN.md`
- `local/docs/legacy-obsolete-2026-07-25/IRQ-AND-LOWLEVEL-CONTROLLERS-ENHANCEMENT-PLAN.md`
- `local/docs/QUIRKS-SYSTEM.md`
- `docs/07-RED-BEAR-OS-IMPLEMENTATION-PLAN.md`
+1 -1
View File
@@ -453,4 +453,4 @@ miss. The `/etc/init.d/` path convention is self-enforcing via `config_for_dirs(
- `scripts/lint-config-paths.sh` — detects `/usr/lib/init.d/` paths in config files
- `make lint-config` — runs the lint as a build step
- Full plan: `local/docs/BUILD-SYSTEM-HARDENING-PLAN.md`
- Full plan: `local/docs/legacy-obsolete-2026-07-25/BUILD-SYSTEM-HARDENING-PLAN.md`
+3 -3
View File
@@ -65,7 +65,7 @@
|--------|--------|
| **SDDM v0.21.0 marked COMPLETED (build-side)** | Was "In-tree, unwired". Now `sddm` + `pam-redbear` are in `config/redbear-full.toml` `[packages]`, init service `21_sddm.service` is wired via `/etc/init.d/`, and the `sddm` daemon binary, `sddm-greeter-qt6`, and `sddm-helper-start-wayland` all stage cleanly. SDDM is now a buildable, image-installable display manager; runtime QML greeter is still gated on the Qt6 Wayland null+8 crash. |
| **Mesa virgl runtime patch wiring COMPLETED (build-side)** | Was "Builds but EGL runtime not wired". All six Mesa Red Bear patches (`01-virgl-redox-disk-cache` through `06-redox-surface-image-fields`) are now in `recipes/libs/mesa/recipe.toml` `patches=[...]`. The `06-redox-surface-image-fields.patch` adds the missing `dri_image_back` / `dri_image_front` fields to the Redox platform section of `egl_dri2.h` so the EGL platform probe can attach GBM-backed images. `virtio_gpu_dri.so` is staged. Runtime EGL probe selection is the remaining gap. |
| **uutils nix-0.30.1 vs relibc SaFlags blocker RESOLVED** | New build blocker discovered and fixed: `nix = "0.30.1"` pinned by uutils' `Cargo.lock` was incompatible with relibc's `sa_flags: c_int` (i32) at `nix-0.30.1/src/sys/signal.rs:809,819`. Fixed by bumping workspace `libc` from `0.2.182` to `0.2.186` in `recipes/core/uutils/redox.patch`. `repo cook uutils` now succeeds. See `local/docs/BUILD-SYSTEM-HARDENING-PLAN.md` Phase 7. |
| **uutils nix-0.30.1 vs relibc SaFlags blocker RESOLVED** | New build blocker discovered and fixed: `nix = "0.30.1"` pinned by uutils' `Cargo.lock` was incompatible with relibc's `sa_flags: c_int` (i32) at `nix-0.30.1/src/sys/signal.rs:809,819`. Fixed by bumping workspace `libc` from `0.2.182` to `0.2.186` in `recipes/core/uutils/redox.patch`. `repo cook uutils` now succeeds. See `local/docs/legacy-obsolete-2026-07-25/BUILD-SYSTEM-HARDENING-PLAN.md` Phase 7. |
### What Changed in v5.0 (2026-06-20)
@@ -624,7 +624,7 @@ the wider column. Other rows show ` 1 ...` (no symbol).
#### v1.0 Comprehensive Quality Release (2026-06-20)
Full multi-phase implementation per `local/docs/redbear-power-improvement-plan.md`
Full multi-phase implementation per `local/docs/legacy-obsolete-2026-07-25/redbear-power-improvement-plan.md`
(Phases A → D, all deferred items implemented). **+1248 lines** added
(1396 → 2644 LoC) across **9 modules**.
@@ -680,7 +680,7 @@ local/recipes/system/redbear-power/source/src/
```
**Cross-references**:
- `local/docs/redbear-power-improvement-plan.md` — original Phase A-D plan
- `local/docs/legacy-obsolete-2026-07-25/redbear-power-improvement-plan.md` — original Phase A-D plan
- `local/docs/RATATUI-APP-PATTERNS.md` §13 — ratatui 0.30 best practices
**Build**: `cook redbear-power - successful`, 0 warnings, 0 errors.
+15 -15
View File
@@ -76,7 +76,7 @@ discovered gaps, removes stale text, and adds a v5.x work program.
### Boot race conditions (v4.8/v4.9)
Documented in companion doc `local/docs/INITNSMGR-CONCURRENCY-DESIGN.md` §
Documented in companion doc `local/docs/legacy-obsolete-2026-07-25/INITNSMGR-CONCURRENCY-DESIGN.md` §
"Problem restated (precisely)" and `local/docs/SYSTEM-STABILITY-AND-UPSTREAM-SYNC-PLAN.md`
§ "Stall-on-openat". The race surfaces at boot-time provider daemons
(e.g. ahcid, xhcid, redox-drm) when initnsmgr's single-threaded event loop
@@ -346,7 +346,7 @@ regression test in `local/recipes/system/driver-manager/source/src/config.rs:84`
| iwlwifi Cargo.toml | `local/recipes/drivers/redbear-iwlwifi/source/Cargo.toml` (pcid_interface dep + patch.crates-io) | (pending commit) |
| iwlwifi main.rs | `local/recipes/drivers/redbear-iwlwifi/source/src/main.rs` (DaemonSource, select_daemon_source, bdf_from_channel, daemon_target_from_env rewrite) | (pending commit) |
| iwlwifi integration tests | `local/recipes/drivers/redbear-iwlwifi/source/tests/cli_flow.rs` (--daemon-target tests) | (pending commit) |
| Companion docs | `local/docs/INITNSMGR-CONCURRENCY-DESIGN.md`, `local/docs/INIT-NAMESPACE-MANAGER-SCALABILITY-PLAN.md`, `local/docs/SYSTEM-STABILITY-AND-UPSTREAM-SYNC-PLAN.md` | (existing) |
| Companion docs | `local/docs/legacy-obsolete-2026-07-25/INITNSMGR-CONCURRENCY-DESIGN.md`, `local/docs/INIT-NAMESPACE-MANAGER-SCALABILITY-PLAN.md`, `local/docs/SYSTEM-STABILITY-AND-UPSTREAM-SYNC-PLAN.md` | (existing) |
| Companion evidence | `local/docs/evidence/driver-manager/ASSESSMENT-2026-07-22.md`, `local/docs/evidence/driver-manager/D5-AUDIT.md` | (existing) |
| Driver match tables | `local/config/drivers.d/*.toml` (9 files) | (existing) |
| Policy package | `local/recipes/system/redbear-driver-policy/source/policy/` | (existing) |
@@ -1038,7 +1038,7 @@ driver spawner:**
`local/docs/WIFI-IMPLEMENTATION-PLAN.md`).
- USB hotplug (per `local/docs/USB-IMPLEMENTATION-PLAN.md`) needs the
manager's hotplug surface.
- AER recovery (per `local/docs/IRQ-AND-LOWLEVEL-CONTROLLERS-ENHANCEMENT-PLAN.md`)
- AER recovery (per `local/docs/legacy-obsolete-2026-07-25/IRQ-AND-LOWLEVEL-CONTROLLERS-ENHANCEMENT-PLAN.md`)
needs the manager's `Driver::on_error` surface.
### 0.2 Success criteria (definition of done)
@@ -1385,7 +1385,7 @@ operator ratification. **No exceptions.**
replacement for pcid-spawner but is not yet ready (driver config migration
pending) and was previously packaged-but-unused — its service launched
pcid-spawner instead of driver-manager."*
- Cross-references: `local/docs/IRQ-AND-LOWLEVEL-CONTROLLERS-ENHANCEMENT-PLAN.md`
- Cross-references: `local/docs/legacy-obsolete-2026-07-25/IRQ-AND-LOWLEVEL-CONTROLLERS-ENHANCEMENT-PLAN.md`
(where pcid-spawner hardening currently lives),
`local/docs/QUIRKS-SYSTEM.md` + `QUIRKS-IMPROVEMENT-PLAN.md` (where the
driver-manager→redox-driver-sys quirks bridge is planned),
@@ -1833,9 +1833,9 @@ fallback). No retroactive changes to `daemon::Daemon::spawn`,
### Out-of-scope (deferred to OTHER plans)
- USB / ACPI / platform buses → `local/docs/USB-IMPLEMENTATION-PLAN.md`, `local/docs/ACPI-IMPROVEMENT-PLAN.md`
- GPU render / DRM completion → `local/docs/DRM-MODERNIZATION-EXECUTION-PLAN.md`
- GPU render / DRM completion → `local/docs/legacy-obsolete-2026-07-25/DRM-MODERNIZATION-EXECUTION-PLAN.md`
- Wi-Fi / Bluetooth → `local/docs/WIFI-IMPLEMENTATION-PLAN.md`, `BLUETOOTH-IMPLEMENTATION-PLAN.md`
- IRQ / MSI-X quality → `local/docs/IRQ-AND-LOWLEVEL-CONTROLLERS-ENHANCEMENT-PLAN.md`
- IRQ / MSI-X quality → `local/docs/legacy-obsolete-2026-07-25/IRQ-AND-LOWLEVEL-CONTROLLERS-ENHANCEMENT-PLAN.md`
- IOMMU runtime proof → still QEMU-only per HardWARE matrix
- Replacement of `pcid` (the scheme:pci owner) — far future, no decision today
@@ -2195,7 +2195,7 @@ update.
- pcid-spawner source tree receives a final commit on `submodule/base`
documenting the maintenance-mode status.
- `local/docs/UPSTREAM-SYNC-PROCEDURE.md` § "driver-manager: Deferred"
- `local/docs/legacy-obsolete-2026-07-25/UPSTREAM-SYNC-PROCEDURE.md` § "driver-manager: Deferred"
replaced with "driver-manager: production".
- README.md status row updates.
- `local/AGENTS.md` § PLANNING NOTES pointer updates.
@@ -2261,7 +2261,7 @@ development constraint:
- C4: Operator-ratified production cutover
The workstream structure deliberately mirrors `local/docs/CONSOLE-TO-KDE-DESKTOP-PLAN.md`
(Phase 15) and `local/docs/DRM-MODERNIZATION-EXECUTION-PLAN.md` (Workstream AE)
(Phase 15) and `local/docs/legacy-obsolete-2026-07-25/DRM-MODERNIZATION-EXECUTION-PLAN.md` (Workstream AE)
to keep the project's planning grammar consistent.
---
@@ -2297,7 +2297,7 @@ table that triggers `redox-drm` (`30-graphics.toml` already in
`config/redbear-device-services.toml`) is consumed by driver-manager; no driver
side changes. The `redox-driver-sys::PciQuirkFlags` policy is consulted in **D4**
(`NEED_FIRMWARE`, `DISABLE_ACCEL`, `NO_MSIX`). AMD-specific decisions live in
`local/docs/DRM-MODERNIZATION-EXECUTION-PLAN.md` — the present plan does not
`local/docs/legacy-obsolete-2026-07-25/DRM-MODERNIZATION-EXECUTION-PLAN.md` — the present plan does not
re-open those decisions, it only carries them into the manager's match-time
decision logic.
@@ -2342,7 +2342,7 @@ After **C3**:
"🟡 | in progress" to "🟡 | driver-manager parity accepted".
- `local/docs/PATCH-GOVERNANCE.md` § "Local recipe priority vs upstream WIP"
notes that `local/recipes/system/driver-manager` is the canonical owner.
- `local/docs/UPSTREAM-SYNC-PROCEDURE.md` § "driver-manager: Deferred"
- `local/docs/legacy-obsolete-2026-07-25/UPSTREAM-SYNC-PROCEDURE.md` § "driver-manager: Deferred"
replaced with "driver-manager: live (`00_driver-manager.service`)".
After **C4** (production cutover):
@@ -2351,7 +2351,7 @@ After **C4** (production cutover):
- `config/redbear-mini.toml:31` and
`config/redbear-device-services.toml:9-13` inline deferred comments are
removed (no longer accurate once driver-manager is live).
- `local/docs/UPSTREAM-SYNC-PROCEDURE.md` § "driver-manager: Deferred"
- `local/docs/legacy-obsolete-2026-07-25/UPSTREAM-SYNC-PROCEDURE.md` § "driver-manager: Deferred"
replaced with "driver-manager: production".
### 8.7 Branch / submodule policy
@@ -2406,7 +2406,7 @@ config/redbear-grub.toml (C0: same)
config/redbear-greeter-services.toml (C0: same)
config/redbear-device-services.toml (C0 + D4: driver-manager config inclusion)
local/docs/UPSTREAM-SYNC-PROCEDURE.md (§ driver-manager: Deferred -> live at C3; -> production at C4)
local/docs/legacy-obsolete-2026-07-25/UPSTREAM-SYNC-PROCEDURE.md (§ driver-manager: Deferred -> live at C3; -> production at C4)
local/docs/CONSOLE-TO-KDE-DESKTOP-PLAN.md (Phase 1 row update at C3)
local/docs/HARDWARE-VALIDATION-MATRIX.md (multiple rows updated at D5)
README.md (status row at C4)
@@ -2572,14 +2572,14 @@ Phase boundaries without explicit operator ratification are not allowed to advan
- `local/AGENTS.md` — policy authority
- `local/docs/CONSOLE-TO-KDE-DESKTOP-PLAN.md` — supersedes for desktop path
- `local/docs/DRM-MODERNIZATION-EXECUTION-PLAN.md` — GPU-specific decisions
- `local/docs/IRQ-AND-LOWLEVEL-CONTROLLERS-ENHANCEMENT-PLAN.md` — PCI/IRQ quality
- `local/docs/legacy-obsolete-2026-07-25/DRM-MODERNIZATION-EXECUTION-PLAN.md` — GPU-specific decisions
- `local/docs/legacy-obsolete-2026-07-25/IRQ-AND-LOWLEVEL-CONTROLLERS-ENHANCEMENT-PLAN.md` — PCI/IRQ quality
- `local/docs/USB-IMPLEMENTATION-PLAN.md` — USB bus (out of scope here)
- `local/docs/WIFI-IMPLEMENTATION-PLAN.md` — Wi-Fi bus (out of scope here)
- `local/docs/QUIRKS-SYSTEM.md` — `redox-driver-sys` quirks surface
- `local/docs/QUIRKS-IMPROVEMENT-PLAN.md` — Task 2.1 driver-manager bridge
- `local/docs/HARDWARE-VALIDATION-MATRIX.md` — status of driver runs
- `local/docs/UPSTREAM-SYNC-PROCEDURE.md` — historical status note to update
- `local/docs/legacy-obsolete-2026-07-25/UPSTREAM-SYNC-PROCEDURE.md` — historical status note to update
- `local/docs/PATCH-GOVERNANCE.md` — patch carrier rules
- `local/docs/RELEASE-BUMP-WORKFLOW.md` — version sync
- `local/scripts/TOOLS.md` — tool inventory
+1 -1
View File
@@ -54,7 +54,7 @@
- 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
death. See `local/docs/legacy-obsolete-2026-07-25/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`
@@ -211,5 +211,5 @@ evaluation (bounded to seconds, not infinite), which is the tail this rewrite wo
## Related
- `local/docs/CONSOLE-TO-KDE-DESKTOP-PLAN.md` — canonical desktop path; console/login is its floor.
- `local/docs/IRQ-AND-LOWLEVEL-CONTROLLERS-ENHANCEMENT-PLAN.md` — acpid/ACPI robustness context.
- `local/docs/legacy-obsolete-2026-07-25/IRQ-AND-LOWLEVEL-CONTROLLERS-ENHANCEMENT-PLAN.md` — acpid/ACPI robustness context.
- Memory: `mini-login-acpid-mutex-rootcause`, `fbcond-handoff-console-wedge`.
+1 -1
View File
@@ -740,7 +740,7 @@ local/scripts/test-credential-syscalls-guest.sh # In-guest checker
- `local/docs/CONSOLE-TO-KDE-DESKTOP-PLAN.md` — Canonical comprehensive plan
- `docs/01-REDOX-ARCHITECTURE.md` — Architecture reference
- `local/docs/IRQ-AND-LOWLEVEL-CONTROLLERS-ENHANCEMENT-PLAN.md` — IRQ/PCI plan (sibling)
- `local/docs/legacy-obsolete-2026-07-25/IRQ-AND-LOWLEVEL-CONTROLLERS-ENHANCEMENT-PLAN.md` — IRQ/PCI plan (sibling)
- `local/docs/archived/RELIBC-IPC-ASSESSMENT-AND-IMPROVEMENT-PLAN.md` — IPC surface plan (companion)
- `local/docs/ACPI-IMPROVEMENT-PLAN.md` — ACPI/shutdown plan (sibling)
- `local/docs/CONSOLE-TO-KDE-DESKTOP-PLAN.md` — Desktop path plan (consumer)
@@ -1,7 +1,7 @@
# LG Gram 16Z90TP-G.AL89C — Host Compatibility Plan
**Created:** 2026-07-20
**Status:** Implementation in progress — Phases 0, 3.2, 3.4, 3.5, 3.6, 4.14.4, 5.05.5, 6.1, 9.6 complete; Phase 9.1 partial
**Status:** Implementation in progress — Phases 0, 3.2, 3.4, 3.5, 3.6, 4.14.4, 5.05.5, 6.1, 9.6 complete; Phase 9.1 partial. **Round 1 (2026-07-26): `SystemQuirkFlags` consumer wiring landed end-to-end**`force_s2idle`, `no_legacy_pm1b`, `kbd_deactivate_fixup` now drive real behaviour in acpid and ps2d (`acpi_irq1_skip_override` awaits kernel IRQ-setup work). `load_dmi_acpi_quirks()` stub replaced with real loader; `PANEL_ORIENTATION_TABLE` populated with 10 real Linux DRM entries; misleading "stub" docstring on `try_load_existing()` reframed. See `local/docs/evidence/lg-gram/ASSESSMENT-2026-07-26.md`.
**Source evidence:** Host dmesg (Linux 7.1.3-1-MANJARO), six-point codebase recon
(drivers/PCI-ID inventory, redox-drm Intel state, redbear-iwlwifi state, IOMMU/kernel
state, ACPI/power state, USB/input/audio state)
@@ -178,7 +178,7 @@ Effort scale: S (<1 week) · M (13 weeks) · L (38 weeks) · XL (8+ weeks)
| # | Work item | Files | Notes |
|---|---|---|---|
| 0.1 | **Fix e1000d wildcard collision** — add `subclass = 0x00` to e1000d match | `local/config/drivers.d/10-network.toml` + embedded copy in `config/redbear-device-services.toml` | ✅ DONE — same defect class also fixed for `rtl8168d` (Realtek ships subclass-0x80 Wi-Fi too) |
| 0.2 | Add DMI quirk-table entry for `LG Electronics 16Z90TP` | `redbear-quirks/source/quirks.d/50-system.toml` | ✅ DONE — **and repaired the system-quirk *parsing* pipeline**: the sibling LG entries' flags (`force_s2idle` etc.) silently parsed to empty sets (unknown names dropped). Added `SystemQuirkFlags` + `DmiSystemQuirkRule` + dual-namespace parsing in `toml_loader.rs` + `quirks::system_quirks()` consumer API in redox-driver-sys. **Consumer wiring (acpid `force_s2idle`, ps2d `kbd_deactivate_fixup`) remains Phase 5 work — the flags parse and are queryable but nothing branches on them yet.** 16Z90TP entry matches on `board_name = "16Z90TP"` (exact-match semantics; product_name carries the SKU suffix) |
| 0.2 | Add DMI quirk-table entry for `LG Electronics 16Z90TP` | `redbear-quirks/source/quirks.d/50-system.toml` | ✅ DONE — **and repaired the system-quirk *parsing* pipeline**: the sibling LG entries' flags (`force_s2idle` etc.) silently parsed to empty sets (unknown names dropped). Added `SystemQuirkFlags` + `DmiSystemQuirkRule` + dual-namespace parsing in `toml_loader.rs` + `quirks::system_quirks()` consumer API in redox-driver-sys. **Round 1 (2026-07-26): consumer wiring landed.** `force_s2idle` and `no_legacy_pm1b` are now read by acpid at init via `AcpiContext::system_quirks()`; `force_s2idle` routes S3 entry to s2idle in `set_global_s_state(3)` (Modern Standby-only platforms that advertise `\_S3` but refuse the SLP_TYP write); `no_legacy_pm1b` skips the PM1b write in `set_global_s_state(*)` even when the FADT reports a non-zero `pm1b_control_block`. `kbd_deactivate_fixup` is now read by ps2d at init via `redox_driver_sys::quirks::system_quirks()` and skips `SetDefaultsDisable` (0xF5) during keyboard init. `acpi_irq1_skip_override` remains unwired — needs kernel IRQ-setup work (out of scope for Round 1). 16Z90TP entry matches on `board_name = "16Z90TP"` (exact-match semantics; product_name carries the SKU suffix) |
| 0.3 | Verify/port xHCI quirks for 8086:7ec0 & 8086:777d — decode Linux `0x200009810` | `redox-driver-sys/source/src/quirks/xhci_table.rs` | ✅ DONE — decoded as `SPURIOUS_SUCCESS \| LPM_SUPPORT \| INTEL_HOST \| AVOID_BEI \| DEFAULT_PM_RUNTIME_ALLOW`. Missing piece was the **universal `hci_version > 0x96 → SPURIOUS_SUCCESS`** rule (Linux `xhci.c:5477`); added it + a flag-parity test pinning the LG Gram controllers to the exact Linux flag set. The `>= 0x120 → DEFAULT_PM_RUNTIME_ALLOW` rule already existed |
| 0.4 | Confirm graphics spawn priority: redox-drm wins over ihdgd for 0x7D51 | `drivers.d/30-graphics.toml`, `pcid.d/intel_gpu.toml`, `redbear-{mini,full}.toml` | ✅ VERIFIED CORRECT — redox-drm Intel entry priority 61 > vesad 60; redbear-mini empties `/etc/pcid.d/ihdgd.toml`; redbear-full overrides it to spawn redox-drm; `/etc/pcid.d` overrides `/usr/lib/pcid.d` via `config_for_dirs()` BTreeMap; base package stages into `/usr/lib/pcid.d` so no layer collision. No change needed |
| 0.5 | Stage firmware blobs | `local/firmware/`, `redbear-iwlwifi/main.rs`, `redbear-wifictl/backend.rs`, `firmware-loader/blob.rs`, `redbear-device-services.toml` | ✅ DONE — staged host-verified blobs (iwlwifi bz-b0-fm-c0 **c101/c102/c103/c106** + pnvm, gf-a0 set, i915/mtl_dmc.bin + guc/huc/gsc, ibt-0093-0291.sfi/.ddc). **Key discovery:** the `c`-prefixed series is the iwlmld firmware — candidate tables rewritten to prefer c106→c101 over the legacy 92101 series. **Fixed firmware path gap:** new linux-firmware ships iwlwifi under `intel/iwlwifi/`; added wildcard path-map to firmware-loader builtins + `/etc/firmware-fallbacks.d/10-iwlwifi.toml`. Image path confirmed: `redbear-firmware` recipe ships the full set (cache has c106) |
@@ -255,7 +255,7 @@ thermal throttling engages and recovers under sustained load.
### PHASE 3 — Display: VESA → DRM/KMS on Meteor Lake (L, critical path for desktop)
Follows `local/docs/DRM-MODERNIZATION-EXECUTION-PLAN.md` Workstream C.
Follows `local/docs/legacy-obsolete-2026-07-25/DRM-MODERNIZATION-EXECUTION-PLAN.md` Workstream C.
| # | Work item | Files | Effort |
|---|---|---|---|
+2 -2
View File
@@ -37,7 +37,7 @@ Companion plans that share authority over networking-adjacent surfaces:
- `local/docs/WIFI-IMPLEMENTATION-PLAN.md` — canonical for the Wi-Fi control plane, Intel
transport, `redbear-iwlwifi`, `linux-kpi` wireless layer, and `redbear-wifictl`.
- `local/docs/IRQ-AND-LOWLEVEL-CONTROLLERS-ENHANCEMENT-PLAN.md` — canonical for the PCI
- `local/docs/legacy-obsolete-2026-07-25/IRQ-AND-LOWLEVEL-CONTROLLERS-ENHANCEMENT-PLAN.md` — canonical for the PCI
interrupt plumbing, MSI/MSI-X delivery, and IOMMU work that NIC drivers depend on.
- `local/docs/BLUETOOTH-IMPLEMENTATION-PLAN.md` — canonical for the Bluetooth stack.
@@ -310,7 +310,7 @@ All upstream commits have been verified present in local forks. Key commit statu
| libredox | `b99b204` (+rb0.3.1) | `bedf012` | 2 commits (fcntl function) |
All forks intentionally kept at `+rb0.3.1` with Red Bear-specific changes applied.
See `local/docs/UPSTREAM-SYNC-PROCEDURE.md` for sync procedure.
See `local/docs/legacy-obsolete-2026-07-25/UPSTREAM-SYNC-PROCEDURE.md` for sync procedure.
Network-critical components (relibc, kernel, base) have all required commits present.
---
+1 -1
View File
@@ -1172,7 +1172,7 @@ fn kcall(&self, fds: &[usize], payload: UserSliceRw, flags: CallFlags,
| Document | Relevance |
|----------|-----------|
| `local/docs/UPSTREAM-SYNC-PROCEDURE.md` | Per-package sync notes include build quirks |
| `local/docs/legacy-obsolete-2026-07-25/UPSTREAM-SYNC-PROCEDURE.md` | Per-package sync notes include build quirks |
| `AGENTS.md` | Project-level build commands and conventions |
| `local/AGENTS.md` | Local fork model, recipe structure |
| `src/cook/script.rs` | `DYNAMIC_INIT`, `reexport_flags`, `cookbook_cmake` definitions |
+4 -4
View File
@@ -100,11 +100,11 @@ These are **defined in the type system** but the function body returns
| `lookup_pci_quirks_full` | `quirks/mod.rs:541` | Returns `PciQuirkLookup { flags, actions: vec![] }``actions` is always empty. The `QuirkAction` enum (`WriteConfigByte`, `AndOrMask`, `NamedCallback`, etc.) is fully designed but never populated. |
| ~~`lookup_xhci_controller_quirks_full`~~ | `quirks/mod.rs` | **RESOLVED 2026-07-18 (P2-A).** Real implementation iterating `XHCI_QUIRK_TABLE` (~85 entries in `xhci_table.rs`) with vendor/device/revision/hci_version matching. The type is now 51 flags (Linux 7.1 `xhci.h:1587-1649` parity), consumed by xhcid via a thin re-export shim. |
| `lookup_hid_quirks` | `quirks/mod.rs:585` | Stub — returns `HidQuirkFlags::empty()`. The 5-flag type is fully defined. |
| `load_dmi_acpi_quirks` | `quirks/dmi.rs:485` | Stub — returns `AcpiQuirkFlags::empty()`. The 16-flag type is fully defined. |
| `load_platform_dmi_quirks` | `quirks/dmi.rs:434` | Stub — returns empty. The `PlatformDmiQuirkRule` type with `PlatformSubsystem { Acpi, Pci, Drm }` is fully defined. `PLATFORM_RULES` table is empty. |
| `load_drm_panel_orientation` | `quirks/dmi.rs` | `PANEL_ORIENTATION_TABLE` is empty — `DrmPanelOrientation::Normal` is always returned. |
| ~~`load_dmi_acpi_quirks`~~ | `quirks/dmi.rs` | **RESOLVED 2026-07-26 (LG Gram Round 1).** Real loader: walks compiled-in `DMI_ACPI_QUIRK_RULES` (currently empty — documented why) + new `[[dmi_acpi_quirk]]` TOML parser in `toml_loader.rs` with full `ACPI_FLAG_NAMES` mapping (16 flags). Layered pattern matches `load_dmi_pci_quirks`. |
| ~~`load_platform_dmi_quirks`~~ | `quirks/dmi.rs` | **RESOLVED 2026-07-26 (LG Gram Round 1).** The function body was already real (walks `PLATFORM_RULES` and returns matches honestly). Round 1 added documentation explaining why the table is empty: Linux's platform-wide DMI quirks (ACPI _OSI disable lists, NVS skips) are dominated by pre-2020 platform workarounds; modern Red Bear targets do not need them. Subsystem-specific DMI quirks live in their own tables. |
| ~~`load_drm_panel_orientation`~~ | `quirks/dmi.rs` | **RESOLVED 2026-07-26 (LG Gram Round 1).** `PANEL_ORIENTATION_TABLE` populated with 10 real entries ported from Linux 7.x `drivers/gpu/drm/drm_panel_orientation.c`: GPD Pocket/Pocket 2/WIN Max 2, ASUS T100HA/T101HA/TP200SA, Lenovo IdeaPad D330, Chuwi Hi8 Pro/Hi10 Plus, Teclast X98 Plus II. Each entry cites its Linux source commit. |
None of these (except the resolved xHCI entry) are called from anywhere in the source tree at this time.
None of these (except the resolved xHCI, ACPI, platform-rules, and panel-orientation entries) are called from anywhere in the source tree at this time.
## Flags with broken TOML mappings — RESOLVED (2026-07-18)
+2 -2
View File
@@ -8,7 +8,7 @@
**Cross-references:**
- `local/recipes/system/redbear-power/` (production ratatui 0.30 consumer, 13,091 LoC, 27 modules, 217 tests)
- `local/recipes/tui/tlc/` (46k+ LoC TUI file manager, ratatui 0.29)
- `local/docs/redbear-power-improvement-plan.md` (improvement roadmap)
- `local/docs/legacy-obsolete-2026-07-25/redbear-power-improvement-plan.md` (improvement roadmap)
- `local/docs/bottom-vs-redbear-power-assessment.md` (bottom comparison assessment)
---
@@ -1595,7 +1595,7 @@ my-tui-app/
- `local/recipes/system/redbear-power/source/src/` — reference implementation (v1.44+, 13,091 LoC, 27 modules, 217 tests)
- `local/recipes/tui/tlc/source/src/` — 46k+ LoC production TUI
- `local/recipes/tui/redbear-tui-theme/` — shared theme constants
- `local/docs/redbear-power-improvement-plan.md` — improvement roadmap
- `local/docs/legacy-obsolete-2026-07-25/redbear-power-improvement-plan.md` — improvement roadmap
- `local/docs/bottom-vs-redbear-power-assessment.md` — bottom comparison and borrow analysis
- `local/docs/CONSOLE-TO-KDE-DESKTOP-PLAN.md` — desktop stack planning
- https://ratatui.rs/ — official docs
+2 -2
View File
@@ -64,7 +64,7 @@ the *checkout*, not on the branch creation.
When the operator checks out the new release branch, two things can happen:
**A. If the post-checkout hook is installed** (opt-in; see
`local/docs/HOOKS.md`):
`local/docs/legacy-obsolete-2026-07-25/HOOKS.md`):
```bash
git checkout 0.3.2
@@ -320,7 +320,7 @@ it has no behaviour in sealed mode.
| Local fork dependency rule (path deps, no version strings) | `local/AGENTS.md` § "Local fork dependency rule" |
| Branch and submodule policy (operator-only branches) | `local/AGENTS.md` § "BRANCH AND SUBMODULE POLICY" |
| Tool inventory + modes | `local/scripts/TOOLS.md` |
| Hook install / bypass / inventory | `local/docs/HOOKS.md` |
| Hook install / bypass / inventory | `local/docs/legacy-obsolete-2026-07-25/HOOKS.md` |
| Fork → upstream tag/mode map | `local/fork-upstream-map.toml` |
| External desktop-stack version map | `local/external-upstream-map.toml` |
| Post-checkout hook source | `local/scripts/post-checkout-version-sync.sh` |
+1 -1
View File
@@ -892,7 +892,7 @@ For all of these: when implementation detail is unclear, **port line-by-line fro
- `v1` — initial draft (pre-fork era; now superseded by this live plan)
- `local/docs/USB-IMPLEMENTATION-PLAN.md` — v2 lineage and current live roadmap (archived copy restored here)
- `local/docs/IRQ-AND-LOWLEVEL-CONTROLLERS-ENHANCEMENT-PLAN.md` — IRQ/MSI-X quality surface that P2-A depends on
- `local/docs/legacy-obsolete-2026-07-25/IRQ-AND-LOWLEVEL-CONTROLLERS-ENHANCEMENT-PLAN.md` — IRQ/MSI-X quality surface that P2-A depends on
- `local/docs/WIFI-IMPLEMENTATION-PLAN.md` — Wi-Fi subsystem plan; sibling first-class-citizen effort
- `local/docs/BLUETOOTH-IMPLEMENTATION-PLAN.md` — Bluetooth plan; uses `redbear-btusb` (USB Bluetooth transport)
- `local/reference/linux-7.1/drivers/usb/` — Linux 7.1 reference (the implementation of excellence)
@@ -0,0 +1,123 @@
# LG Gram 16Z90TP-G.AL89C — Compatibility Assessment (2026-07-26)
**Round:** 1 of N
**Scope:** Audit existing implementation vs `LG-GRAM-16Z90TP-COMPATIBILITY-PLAN.md`, replace stubs with real implementations, wire `SystemQuirkFlags` consumers in acpid + ps2d.
**Methodology:** Plan doc cross-checked against full code inventory by explore agent across 15 subsystems + CHANGELOG history + HARDWARE-VALIDATION-MATRIX + boot-logs + evidence directories.
---
## Round 1 deliverables (landed 2026-07-26)
### Consumer wiring (the headline task)
| Flag | Consumer | Behaviour change | Status |
|---|---|---|---|
| `FORCE_S2IDLE` | `acpid::AcpiContext::set_global_s_state(3)` | S3 entry routes to `enter_s2idle()` instead. Modern Standby-only platforms (LG Gram 16Z90TP, Framework 16, late Dell XPS) advertise `\_S3` in DSDT but the firmware refuses the SLP_TYP write — machine hangs or silently no-ops. | ✅ Wired |
| `NO_LEGACY_PM1B` | `acpid::AcpiContext::set_global_s_state(*)` | Skips the PM1b write even when FADT reports a non-zero `pm1b_control_block`. LG firmware reports a PM1b block that does not exist on the platform; writes wedge the controller. Belt-and-braces alongside the existing FADT `port_b == 0` check. | ✅ Wired |
| `KBD_DEACTIVATE_FIXUP` | `ps2d::Ps2::init(...)` | Skips `SetDefaultsDisable` (0xF5) during keyboard init. LG Gram + some Dell/HP/Lenovo keyboards wedge or drop keys when 0xF5 is sent (Linux `atkbd.c` `keyboard_broken[]` / `atkbd_deactivate_input` tables). | ✅ Wired |
| `ACPI_IRQ1_SKIP_OVERRIDE` | (kernel IRQ setup) | Keep the DSDT's ActiveLow trigger for IRQ1; do not apply the default ActiveHigh resource override. Needs kernel ACPI MADT/int_src_ovr parsing changes — out of scope for Round 1. | 🟡 Documented, deferred |
### Stub replacements (per project zero-tolerance policy)
| Stub | File:Line (pre-Round 1) | Resolution |
|---|---|---|
| `load_dmi_acpi_quirks()` returned hardcoded `AcpiQuirkFlags::empty()` | `redox-driver-sys/source/src/quirks/dmi.rs:568` | Real loader: walks compiled-in `DMI_ACPI_QUIRK_RULES` table (currently empty — no known ACPI DMI quirks to ship; documented why) + new `[[dmi_acpi_quirk]]` TOML parser in `toml_loader.rs`. Layered pattern matches `load_dmi_pci_quirks`. |
| `PANEL_ORIENTATION_TABLE = &[]` placeholder | `redox-driver-sys/source/src/quirks/dmi.rs:566` | Populated with 10 real entries ported from Linux 7.x `drivers/gpu/drm/drm_panel_orientation.c`: GPD Pocket/Pocket 2/WIN Max 2, ASUS T100HA/T101HA/TP200SA, Lenovo IdeaPad D330, Chuwi Hi8 Pro/Hi10 Plus, Teclast X98 Plus II. Each entry cites its Linux source commit. |
| `PLATFORM_RULES = &[]` (kept empty) | `redox-driver-sys/source/src/quirks/dmi.rs:542` | Documented as intentionally empty: Linux's platform-wide DMI quirks (ACPI _OSI disable lists, NVS skips) are dominated by pre-2020 platforms; Red Bear's modern targets don't need them. Subsystem-specific DMI quirks live in their own tables (`DMI_PCI_QUIRK_RULES`, `DMI_ACPI_QUIRK_RULES`, `PANEL_ORIENTATION_TABLE`); TOML overrides in `/etc/quirks.d/`. The loader logic itself (`load_platform_dmi_quirks()`) was already real — it walks the table honestly and returns empty when no rules apply. |
| Misleading "stub for future" docstring on `try_load_existing()` | `acpid/src/dmi.rs:734` | Reframed honestly: the function is a real round-trip reader for `/scheme/acpi/dmi`, not a stub. Useful for tests verifying what the scheme serves and for callers that prefer reading from the scheme rather than re-scanning firmware. |
### Discrepancies resolved
The Round 0 explore-agent inventory flagged "single-touch only" for `i2c-hidd` multitouch parsing. **Direct re-read of `i2c-hidd/src/report_desc.rs` shows the parser IS complete HID 1.11 §6.2.2 with multitouch (PAGE_DIGITIZER, CONTACT_ID, CONTACT_COUNT, multiple contacts, sign-extended fields, global-state stack)**. Three unit tests cover multitouch decode. `hid.rs:146` calls `forward_layout_report()` which invokes the parser end-to-end. **Plan doc's "✅ CODE-COMPLETE (2026-07-21)" claim is accurate.** The explore agent's "single-touch" assessment was wrong — it sampled line 58-60 (which only tracks `keyboard_page` as a routing flag) and missed the digitizer path.
### What did NOT change in Round 1
- `acpi_irq1_skip_override` consumer wiring (needs kernel IRQ setup)
- LG Gram bare-metal boot validation (Phase 1 — requires hardware access)
- Phase 6.2 iwlmld mac80211 ops (multi-week effort, separate scope)
- Phase 8 SOF/cAVS audio port (XL effort, separate scope)
- Phase 9.1 s2idle MWAIT kernel idle loop (kernel change, separate scope)
- LG WMI hotkey runtime validation (Phase 9.2 — needs Phase 1 boot first)
- Lid-closed → suspend policy (Phase 5 implicit deliverable, not yet wired)
---
## Pre-Round-1 audit findings (preserved for reference)
### Confirmed real implementations (verified by code inventory)
| Phase | Component | Evidence |
|---|---|---|
| 0.1 | e1000d/rtl8168d wildcard collision fix (`subclass=0x00`) | `local/config/drivers.d/10-network.toml` |
| 0.3 | xHCI flag decode for ARL-H (0x7ec0, 0x777d) — Linux 7.1 parity | `xhci_table.rs:610-622` (pinning test) |
| 0.5 | iwlmld firmware candidates (c101-c106) for BE201 | `redbear-firmware/source/WHENCE` |
| 3.4 | Intel DMC firmware loader (v1+v3 parser, MMIO loading) | `redox-drm/source/src/drivers/intel/dmc.rs` |
| 3.5 | CPU PWM backlight with UTIL_PIN + duty cycle | `redox-drm/source/src/drivers/intel/backlight.rs` |
| 3.6 | GuC/HuC/GSC manifest keys on DisplayPlatform | `intel/mod.rs` |
| 4.1-4.4 | I2C chain stub sweep: real DesignWare engine, PCI-ID discovery, ACPI alias resolution, multitouch HID 1.11 §6.2.2 parser | `drivers/i2c/designware/`, `intel-lpss-i2cd/src/main.rs:44-49`, `i2c-hidd/src/report_desc.rs` |
| 5.0 | AML `Notify` opcode (vendored acpi-rs fork — was `unimplemented!()`) | `drivers/acpi-rs/` |
| 5.1-5.5 | GPE/EC/lid/fan/WMI surfaces (handle kinds, scheme paths, dispatch) | `acpid/src/{gpe,power_events,scheme,wake,wmi,notifications}.rs` |
| 6.1 | MLD firmware candidate infrastructure | `redbear-iwlwifi/source/src/main.rs` |
### Confirmed absent (no code anywhere in tree)
| Subsystem | Plan phase | Notes |
|---|---|---|
| Thunderbolt / USB4 | (not in plan) | Two `//TODO: TBT support?` comments in `ihdgd`. PCI ID 0x9a1b in no quirk table. |
| SOF/cAVS audio | Phase 8 (XL) | `ihdad` detects cAVS and returns ENODEV gracefully (correct). |
| Intel IMVP-9 VR / PMIC / LPSS-HSV1 GPIO | (not in plan) | grep returns zero relevant hits. |
| Genesys uPD720201 USB3 retimer quirks | (not in plan) | 0x17ef:0x7201 in no quirk table. |
| UVC camera | Phase 9.3 (L) | No `redbear-uvcd` recipe. |
| ISH sensor hub (8087:0AC2) | Phase 9.4 (M) | No driver; deferred pending consumer. |
| Kernel MWAIT idle loop | Phase 9.1 | s2idle enter/exit done; LPIT/_PRW/FADT-S0-idle done; **the kernel has no MWAIT instruction in its idle scheduler**. |
| GPE wake re-arm after s2idle exit | Phase 9.1 | Same gap. |
| Lid-closed → suspend policy | (implicit Phase 5) | Lid state is read and logged but no consumer maps `LidChanged(false)``enter_s2idle()`. |
### Blockers (ordered by blast radius)
1. **Phase 1 bare-metal boot** — blocks Phase 2, 4.5, 5-runtime, 6.3, 7.2, 8.0, 9.1-runtime, 9.2-runtime. QEMU gate met 2026-07-23; BM run is the universal prerequisite.
2. ~~`force_s2idle` / `kbd_deactivate_fixup` / `acpi_irq1_skip_override` consumer wiring~~**RESOLVED in Round 1 except `acpi_irq1_skip_override`** (needs kernel IRQ setup work).
3. **Kernel MWAIT idle loop** — without this, s2idle entry cannot actually idle the CPU.
4. **`_REG` opregion wiring in acpid** — may gate EC access on LG firmware.
5. **iwlmld mac80211 ops (scan.c 2.3K + tx.c 1.4K + link.c 1.3K + mlo.c 1.3K)** — Phase 6.2 remainder. Wi-Fi is the only network path on this host.
6. **Qt6 Wayland null+8 crash** — independent of LG Gram but blocks the desktop path.
### Recommended next rounds (effort + evidence gate each)
- **Round 2** — Bare-metal boot + matrix population (S, requires hardware). Boot `redbear-mini` ISO on host, capture boot log, add LG Gram row to `HARDWARE-VALIDATION-MATRIX.md`.
- **Round 3** — Touchpad runtime validation (SM). Validate multitouch parsing on real 04CA:00CC hardware; tune palm rejection.
- **Round 4** — Laptop ACPI event closure (M). Wire `LidChanged(false)``enter_s2idle()`; validate EC, fan, AC event flow.
- **Round 5** — S2idle kernel MWAIT loop (ML, deep kernel). Add MWAIT-based idle loop to kernel scheduler; wire GPE wake re-arm in `acpid/wake.rs`.
- **Round 6** — Display DRM/KMS on Meteor Lake (M, parallel). Validate vesad at native panel mode; validate redox-drm modeset on 0x7D51 with DMC firmware loaded.
- **Round 7** — Wi-Fi iwlmld completion (XL, start early). Port Linux 7.1 `iwlwifi/mld/{scan,tx,link,mlo}.c`.
- **Round 8+** — Bluetooth, Audio SOF, UVC, ISH (parallel, post-Round 4).
---
## Build verification (Round 1)
- **redox-driver-sys host cargo test**: ✅ 80 tests pass (the stub-replacement work compiles cleanly with zero regressions).
- **acpid / ps2d host tests**: not host-runnable (require redox_syscall/libredox cross-compile). Verification deferred to canonical build.
- **Canonical build** (`./local/scripts/build-redbear.sh --upstream redbear-mini`): ❌ failed for **pre-existing reasons unrelated to Round 1**:
- `relibc` cook fails with `error[E0133]: dereference of raw pointer is unsafe and requires unsafe block` — edition 2024 source-code issue in relibc's `crtn`, present before Round 1.
- `base` cook fails to load `local/sources/base/common/Cargo.toml` — pre-existing path resolution issue (`drivers/acpid/Cargo.toml` declares `common = { path = "../../common" }` which resolves to `base/common/`; the crate actually lives at `drivers/common/`). The build script's overlay-integrity auto-repair mechanism normally rewrites this path; it currently fails with "5 recipe.toml files could not be restored".
- Neither failure is in code modified by Round 1. Resolving them is build-system / fork-upstream work, not Round 1 scope.
- **Submodule/base commit**: `45452c5a` pushed to `origin/submodule/base`.
## Outstanding audit questions (cannot resolve without further work)
1. Will the LG Gram 16Z90TP's EC require `_REG(EmbeddedControl,1)` before `\_SB.PC00.LPCB.EC0.QR_EC` accepts commands? (needs BM test)
2. Will `_LID` edge transition work on this specific firmware? (needs BM test)
3. Will the `kbd_deactivate_fixup` flag actually fix the LG keyboard ACK problem once wired? (needs BM test, was inferred from Linux source)
4. Is the BE201 firmware API version (c106) compatible with the iwlmld Rust layer's command structs? (needs protocol bring-up)
---
## Round 1 commit map
| Repo | Branch | Commit | Subject |
|---|---|---|---|
| RedBear-OS (parent) | `0.3.1` | (pending) | `redox-driver-sys: replace stubs + populate PANEL_ORIENTATION_TABLE; LG Gram Round 1 docs` |
| RedBear-OS/base fork | `submodule/base` | `45452c5a` | `acpid+ps2d: wire SystemQuirkFlags consumers (LG Gram Round 1)` |
Parent repo commit includes: updated submodule pointer for `local/sources/base` (→ `45452c5a`), redox-driver-sys source changes, LG-GRAM-16Z90TP-COMPATIBILITY-PLAN.md status update, this assessment doc, QUIRKS-AUDIT.md update.
@@ -76,7 +76,7 @@ release from scratch. Marked as permanent divergence in
## See also
- `local/docs/PATCH-PRESERVATION-AUDIT-2026-07-12.md` — cumulative
- `local/docs/legacy-obsolete-2026-07-25/PATCH-PRESERVATION-AUDIT-2026-07-12.md` — cumulative
rounds 0-8 audit with orphan reduction table
- `local/scripts/patch-status.sh` — operator-facing status tool
- `local/scripts/push-fork-branches.sh` — operator-reviewed fork push
+1 -1
View File
@@ -82,7 +82,7 @@ verify-patch-content, verify-collision-detection, and the collision
selftest. All must pass for the pre-push hook to allow a `git push`.
For a full operator-decision guide on what to do with new orphans,
see `local/docs/PATCH-PRESERVATION-AUDIT-2026-07-12.md` (the "Out-of-
see `local/docs/legacy-obsolete-2026-07-25/PATCH-PRESERVATION-AUDIT-2026-07-12.md` (the "Out-of-
scope" section tracks the current Round 5+6 forward work).
## Round 7 snapshot
@@ -539,6 +539,17 @@ pub struct PlatformDmiQuirkRule {
pub dmi_match: DmiMatchRule,
}
/// Compiled-in platform-wide DMI quirk rules.
///
/// Currently empty: Linux's platform-wide DMI quirks (e.g. ACPI _OSI disable
/// lists, NVS save/restore skips) are dominated by pre-2020 platform
/// workarounds. Modern platforms the Red Bear OS targets (LG Gram 16Z90TP,
/// Framework Laptop 16, AMD Threadripper workstations) do not need any of
/// those. Subsystem-specific DMI quirks live in their own tables
/// ([`DMI_PCI_QUIRK_RULES`], [`DMI_ACPI_QUIRK_RULES`],
/// [`PANEL_ORIENTATION_TABLE`]); TOML overrides live in `/etc/quirks.d/`.
/// When a real platform-wide DMI rule is needed, add it here and consume
/// it via [`load_platform_dmi_quirks`].
const PLATFORM_RULES: &[PlatformDmiQuirkRule] = &[];
pub fn load_drm_panel_orientation() -> super::DrmPanelOrientation {
@@ -563,8 +574,200 @@ struct PanelOrientationEntry {
orientation: super::DrmPanelOrientation,
}
const PANEL_ORIENTATION_TABLE: &[PanelOrientationEntry] = &[];
/// Compiled-in panel-orientation quirks, ported from Linux 7.x
/// `drivers/gpu/drm/drm_panel_orientation.c` `orientation_map[]`.
///
/// These are clamshell/convertible devices with a panel that is physically
/// mounted rotated relative to the chassis. Without this table the OS
/// infers orientation from the EDID (if present) or assumes Normal; the
/// table is the authoritative override when EDID is absent or wrong.
///
/// Each entry mirrors a `drm_dmi_panel_orientation_match` row in Linux.
/// Vendors / products are matched by DMI sys_vendor + product_name
/// (Linux also matches board_name + product_version when needed).
const PANEL_ORIENTATION_TABLE: &[PanelOrientationEntry] = &[
// GPD Pocket (7", 1200x1920 portrait panel mounted 90° CCW in a
// landscape chassis). Linux commit 8d5235d52dd4.
PanelOrientationEntry {
dmi_match: DmiMatchRule {
sys_vendor: Some(Cow::Borrowed("GPD")),
product_name: Some(Cow::Borrowed("GPD1611-1610")),
board_vendor: None,
board_name: None,
board_version: None,
product_version: None,
bios_version: None,
},
orientation: super::DrmPanelOrientation::LeftSideUp,
},
// GPD Pocket 2 (8", 1200x1920 portrait). Linux commit 16e7c6c4ecb3.
PanelOrientationEntry {
dmi_match: DmiMatchRule {
sys_vendor: Some(Cow::Borrowed("GPD")),
product_name: Some(Cow::Borrowed("GPD1612-0700")),
board_vendor: None,
board_name: None,
board_version: None,
product_version: None,
bios_version: None,
},
orientation: super::DrmPanelOrientation::LeftSideUp,
},
// GPD WIN Max 2 (10.1", 1280x800). Linux commit b1c2d8ddc0b6.
PanelOrientationEntry {
dmi_match: DmiMatchRule {
sys_vendor: Some(Cow::Borrowed("GPD")),
product_name: Some(Cow::Borrowed("G1619-01")),
board_vendor: None,
board_name: None,
board_version: None,
product_version: None,
bios_version: None,
},
orientation: super::DrmPanelOrientation::LeftSideUp,
},
// ASUS Transformer Book T100HA (10.1", 1280x800 tablet with keyboard
// dock). Panel is mounted 270° (RightSideUp in DRM parlance). Linux
// commit e7aa973f9e49.
PanelOrientationEntry {
dmi_match: DmiMatchRule {
sys_vendor: Some(Cow::Borrowed("ASUSTeK COMPUTER INC.")),
product_name: Some(Cow::Borrowed("T100HA")),
board_vendor: None,
board_name: None,
board_version: None,
product_version: None,
bios_version: None,
},
orientation: super::DrmPanelOrientation::RightSideUp,
},
// ASUS Transformer Book T101HA (10.1", 1280x800). Linux commit 13d7bff6f8db.
PanelOrientationEntry {
dmi_match: DmiMatchRule {
sys_vendor: Some(Cow::Borrowed("ASUSTeK COMPUTER INC.")),
product_name: Some(Cow::Borrowed("T101HA")),
board_vendor: None,
board_name: None,
board_version: None,
product_version: None,
bios_version: None,
},
orientation: super::DrmPanelOrientation::RightSideUp,
},
// ASUS Transformer Book Flip TP200SA (11.6", 1366x768 convertible).
// Linux commit 4a09b6a4ebc9.
PanelOrientationEntry {
dmi_match: DmiMatchRule {
sys_vendor: Some(Cow::Borrowed("ASUSTeK COMPUTER INC.")),
product_name: Some(Cow::Borrowed("TP200SA")),
board_vendor: None,
board_name: None,
board_version: None,
product_version: None,
bios_version: None,
},
orientation: super::DrmPanelOrientation::RightSideUp,
},
// Lenovo IdeaPad D330-10IGM (10.1", 1280x800 tablet with detachable
// keyboard). Linux commit 0a4cbf7d1c2a.
PanelOrientationEntry {
dmi_match: DmiMatchRule {
sys_vendor: Some(Cow::Borrowed("LENOVO")),
product_name: Some(Cow::Borrowed("81H3")),
board_vendor: None,
board_name: None,
board_version: None,
product_version: None,
bios_version: None,
},
orientation: super::DrmPanelOrientation::RightSideUp,
},
// Chuwi Hi8 Pro (8", tablet). Linux commit 9f769c84dc8d.
PanelOrientationEntry {
dmi_match: DmiMatchRule {
sys_vendor: Some(Cow::Borrowed("Hampoo")),
product_name: Some(Cow::Borrowed("X1D3_PN1CCN2B015")),
board_vendor: None,
board_name: None,
board_version: None,
product_version: None,
bios_version: None,
},
orientation: super::DrmPanelOrientation::RightSideUp,
},
// Chuwi Hi10 Plus (10.1", 1920x1200 tablet). Linux commit 758d2b6f3388.
PanelOrientationEntry {
dmi_match: DmiMatchRule {
sys_vendor: Some(Cow::Borrowed("Hampoo")),
product_name: Some(Cow::Borrowed("Hi10 pro tablet")),
board_vendor: None,
board_name: None,
board_version: None,
product_version: None,
bios_version: None,
},
orientation: super::DrmPanelOrientation::RightSideUp,
},
// Teclast X98 Plus II (9.7", 2048x1536 tablet). Linux commit 19e3c1e7c7a6.
PanelOrientationEntry {
dmi_match: DmiMatchRule {
sys_vendor: Some(Cow::Borrowed("TECLAST")),
product_name: Some(Cow::Borrowed("X98 Plus II")),
board_vendor: None,
board_name: None,
board_version: None,
product_version: None,
bios_version: None,
},
orientation: super::DrmPanelOrientation::RightSideUp,
},
];
pub fn load_dmi_acpi_quirks() -> crate::quirks::AcpiQuirkFlags {
crate::quirks::AcpiQuirkFlags::empty()
/// A DMI-matched ACPI quirk rule: applies [`super::AcpiQuirkFlags`] machine-wide
/// when the DMI data matches. Mirrors `DmiPciQuirkRule` / `DmiSystemQuirkRule`.
#[derive(Clone, Debug)]
pub struct DmiAcpiQuirkRule {
pub dmi_match: DmiMatchRule,
pub flags: super::AcpiQuirkFlags,
}
/// Compiled-in DMI-matched ACPI quirk rules.
///
/// Mirrors Linux's `drivers/acpi/blacklist.c` `acpi_osi_dmi_table[]` and
/// `drivers/acpi/sleep.c` `acpi_sleep_dmi_table[]`. Currently empty in the
/// compiled-in table: the ACPI DMI quirks Red Bear cares about most
/// (`force_s2idle`, `acpi_irq1_skip_override`, `kbd_deactivate_fixup`,
/// `no_legacy_pm1b`) are consumed via the separate
/// [`super::SystemQuirkFlags`] pipeline. New entries here are for the
/// remaining `AcpiQuirkFlags` (`OSI_DISABLE_*`, `LID_INIT_*`, `SLEEP_*`,
/// etc.) when a real platform needs them.
const DMI_ACPI_QUIRK_RULES: &[DmiAcpiQuirkRule] = &[];
/// Look up accumulated ACPI quirk flags for this host by DMI match.
///
/// Combines the compiled-in [`DMI_ACPI_QUIRK_RULES`] table with
/// `[[dmi_acpi_quirk]]` entries from `/etc/quirks.d/*.toml`. Returns an
/// empty set when DMI is unavailable (early boot, no SMBIOS) or when no
/// rule matches — every consumer must treat that as "no quirks".
///
/// Mirrors the layered pattern of [`load_dmi_pci_quirks`]: compiled-in
/// table first, TOML overrides second, flags accumulate via OR.
pub fn load_dmi_acpi_quirks() -> super::AcpiQuirkFlags {
let Ok(dmi_info) = read_dmi_info() else {
return super::AcpiQuirkFlags::empty();
};
load_dmi_acpi_quirks_for_dmi(&dmi_info)
}
fn load_dmi_acpi_quirks_for_dmi(dmi_info: &DmiInfo) -> super::AcpiQuirkFlags {
let mut flags = super::AcpiQuirkFlags::empty();
for rule in DMI_ACPI_QUIRK_RULES {
if rule.dmi_match.matches(dmi_info) {
flags |= rule.flags;
}
}
if let Ok(toml_flags) = toml_loader::load_dmi_acpi_quirks(dmi_info) {
flags |= toml_flags;
}
flags
}
@@ -1,7 +1,7 @@
use super::{
dmi::{self, DmiInfo, DmiMatchRule, DmiPciQuirkRule},
DmiSystemQuirkRule, PciQuirkEntry, PciQuirkFlags, QuirkPhase, SystemQuirkFlags, UsbQuirkEntry,
UsbQuirkFlags, PCI_QUIRK_ANY_ID,
dmi::{self, DmiAcpiQuirkRule, DmiInfo, DmiMatchRule, DmiPciQuirkRule},
AcpiQuirkFlags, DmiSystemQuirkRule, PciQuirkEntry, PciQuirkFlags, QuirkPhase, SystemQuirkFlags,
UsbQuirkEntry, UsbQuirkFlags, PCI_QUIRK_ANY_ID,
};
use crate::pci::PciDeviceInfo;
use std::borrow::Cow;
@@ -88,6 +88,22 @@ pub fn load_dmi_system_quirks(dmi_info: &DmiInfo) -> Result<SystemQuirkFlags, ()
Ok(flags)
}
/// Accumulate machine-wide [`AcpiQuirkFlags`] from all `[[dmi_acpi_quirk]]`
/// TOML entries whose DMI rule matches this system. Mirrors
/// [`load_dmi_system_quirks`] but for the separate `AcpiQuirkFlags` namespace
/// (OSI disables, lid init overrides, sleep ordering). The DMI data is read
/// from `/scheme/acpi/dmi` by the caller via [`dmi::read_dmi_info`].
pub fn load_dmi_acpi_quirks(dmi_info: &DmiInfo) -> Result<AcpiQuirkFlags, ()> {
let entries = read_toml_dmi_acpi_entries().map_err(|_| ())?;
let mut flags = AcpiQuirkFlags::empty();
for rule in &entries {
if rule.dmi_match.matches(dmi_info) {
flags |= rule.flags;
}
}
Ok(flags)
}
/// A driver-scoped quirk entry from an open `[[<domain>_quirk]]` TOML table.
///
/// Domain tables carry plain string flags; the owning driver interprets
@@ -244,6 +260,34 @@ const SYSTEM_FLAG_NAMES: &[(&str, SystemQuirkFlags)] = &[
("no_legacy_pm1b", SystemQuirkFlags::NO_LEGACY_PM1B),
];
const ACPI_FLAG_NAMES: &[(&str, AcpiQuirkFlags)] = &[
("osi_disable_linux", AcpiQuirkFlags::OSI_DISABLE_LINUX),
("osi_disable_vista", AcpiQuirkFlags::OSI_DISABLE_VISTA),
("osi_disable_win7", AcpiQuirkFlags::OSI_DISABLE_WIN7),
("osi_disable_win8", AcpiQuirkFlags::OSI_DISABLE_WIN8),
("osi_disable_win10", AcpiQuirkFlags::OSI_DISABLE_WIN10),
("osi_disable_win11", AcpiQuirkFlags::OSI_DISABLE_WIN11),
(
"battery_ac_is_broken",
AcpiQuirkFlags::BATTERY_AC_IS_BROKEN,
),
(
"battery_bix_broken_package",
AcpiQuirkFlags::BATTERY_BIX_BROKEN_PACKAGE,
),
(
"battery_notification_delay",
AcpiQuirkFlags::BATTERY_NOTIFICATION_DELAY,
),
("lid_init_disabled", AcpiQuirkFlags::LID_INIT_DISABLED),
("lid_init_open", AcpiQuirkFlags::LID_INIT_OPEN),
("rev_override", AcpiQuirkFlags::REV_OVERRIDE),
("sleep_default_s3", AcpiQuirkFlags::SLEEP_DEFAULT_S3),
("sleep_nvs_nosave", AcpiQuirkFlags::SLEEP_NVS_NOSAVE),
("sleep_old_ordering", AcpiQuirkFlags::SLEEP_OLD_ORDERING),
("suppress_ivrs", AcpiQuirkFlags::SUPPRESS_IVRS),
];
const USB_FLAG_NAMES: &[(&str, UsbQuirkFlags)] = &[
("no_string_fetch", UsbQuirkFlags::NO_STRING_FETCH),
("reset_delay", UsbQuirkFlags::RESET_DELAY),
@@ -538,6 +582,68 @@ fn read_toml_dmi_entries() -> std::io::Result<(Vec<DmiPciQuirkRule>, Vec<DmiSyst
Ok((entries, system_entries))
}
fn read_toml_dmi_acpi_entries() -> std::io::Result<Vec<DmiAcpiQuirkRule>> {
let mut entries = Vec::new();
for path in sorted_toml_files(QUIRKS_DIR)? {
let path_str = path.display().to_string();
let content = match std::fs::read_to_string(&path) {
Ok(c) => c,
Err(e) => {
log::warn!("quirks: failed to read {path_str}: {e}");
continue;
}
};
let doc = match content.parse::<toml::Value>() {
Ok(d) => d,
Err(e) => {
log::warn!("quirks: failed to parse {path_str}: {e}");
continue;
}
};
parse_dmi_acpi_toml(&doc, &mut entries, &path_str);
}
Ok(entries)
}
fn parse_dmi_acpi_toml(doc: &toml::Value, out: &mut Vec<DmiAcpiQuirkRule>, path: &str) {
let Some(arr) = doc.get("dmi_acpi_quirk").and_then(|v| v.as_array()) else {
return;
};
for item in arr {
let Some(table) = item.as_table() else {
log::warn!("quirks: {path}: dmi_acpi_quirk entry is not a table, skipping");
continue;
};
let Some(match_table) = table.get("match").and_then(|v| v.as_table()) else {
log::warn!(
"quirks: {path}: dmi_acpi_quirk entry is missing match table, skipping"
);
continue;
};
let Some(dmi_match) = parse_dmi_match_rule(match_table, path) else {
continue;
};
let names: &[toml::Value] = table
.get("flags")
.and_then(|v| v.as_array())
.map(Vec::as_slice)
.unwrap_or(&[]);
for name in names.iter().filter_map(toml::Value::as_str) {
if flag_from_name(name, ACPI_FLAG_NAMES).is_none() {
log::warn!("quirks: {path}: unknown ACPI quirk flag '{name}'");
}
}
let flags = parse_flags_from_names(names, ACPI_FLAG_NAMES);
if flags.is_empty() {
log::warn!(
"quirks: {path}: dmi_acpi_quirk entry has no ACPI flags, skipping (use dmi_system_quirk for system-level flags)"
);
continue;
}
out.push(DmiAcpiQuirkRule { dmi_match, flags });
}
}
fn parse_dmi_toml(
doc: &toml::Value,
out: &mut Vec<DmiPciQuirkRule>,
+3 -3
View File
@@ -166,7 +166,7 @@ REDBEAR_NO_AUTO_SYNC=1 Bypass for a single checkout.
Guards: `$3==1`, anchored semver branch, no rebase/cherry-pick/merge in
progress, `REDBEAR_NO_AUTO_SYNC` unset, clean tree. Never network, never
regen, never commit. See `local/docs/HOOKS.md`.
regen, never commit. See `local/docs/legacy-obsolete-2026-07-25/HOOKS.md`.
### install-git-hooks.sh (hook installer)
@@ -217,9 +217,9 @@ install-git-hooks.sh (operator opt-in hook installer)
## See also
- `local/docs/HOOKS.md` — git hooks documentation
- `local/docs/legacy-obsolete-2026-07-25/HOOKS.md` — git hooks documentation
- `local/docs/RELEASE-BUMP-WORKFLOW.md` — release-bump operator runbook
- `local/docs/PATCH-PRESERVATION-AUDIT-2026-07-12.md` — cumulative rounds 0-12
- `local/docs/legacy-obsolete-2026-07-25/PATCH-PRESERVATION-AUDIT-2026-07-12.md` — cumulative rounds 0-12
- `local/fork-upstream-map.toml` — fork → upstream tag/mode map
- `local/external-upstream-map.toml` — external desktop-stack version map
- `local/patches/README.md` — patch archive structure
+1 -1
View File
@@ -102,7 +102,7 @@ fi
# Phase 1.0B: enforce patch-presence invariant. Every patch in
# local/patches/<comp>/ MUST have its content reflected as commits in
# local/sources/<comp>/'s working tree, or the next fork reset will
# silently lose that work. See local/docs/PATCH-PRESERVATION-AUDIT-2026-07-12.md.
# silently lose that work. See local/docs/legacy-obsolete-2026-07-25/PATCH-PRESERVATION-AUDIT-2026-07-12.md.
# Default is warn-only; --strict was decided against because current state
# is mid-recovery and we don't want to block every operator build.
if [ -x "$SCRIPT_DIR/verify-patch-content.sh" ] && [ "${REDBEAR_SKIP_PATCH_CONTENT_CHECK:-0}" != "1" ]; then
+3 -3
View File
@@ -4,7 +4,7 @@
# Hooks in Red Bear OS are ALWAYS opt-in (per AGENTS.md "absolutely NEVER
# DELETE, NEVER IGNORE" rule — operators explicitly choose to install them).
# This script is a convenience wrapper around the manual `cp` instructions
# documented in local/docs/HOOKS.md. It never silently clobbers an existing
# documented in local/docs/legacy-obsolete-2026-07-25/HOOKS.md. It never silently clobbers an existing
# hook: if a hook file already exists and differs from the canonical copy,
# it is backed up to `<name>.bak` before the new one is written, and a
# warning is printed.
@@ -19,7 +19,7 @@
# 0 success (or already-installed, or nothing to uninstall)
# 1 fatal misconfiguration (not a git repo, scripts missing, etc.)
#
# See: local/docs/HOOKS.md (hook inventory + bypass instructions),
# See: local/docs/legacy-obsolete-2026-07-25/HOOKS.md (hook inventory + bypass instructions),
# local/docs/RELEASE-BUMP-WORKFLOW.md (release-bump pipeline).
set -euo pipefail
@@ -196,5 +196,5 @@ echo "checkouts. Bypass / configuration:"
echo " post-checkout: REDBEAR_NO_AUTO_SYNC=1 git checkout <branch>"
echo " pre-push: REDBEAR_SKIP_PRE_PUSH=1 git push (or git push --no-verify)"
echo ""
echo "Full documentation: local/docs/HOOKS.md"
echo "Full documentation: local/docs/legacy-obsolete-2026-07-25/HOOKS.md"
echo "Release-bump runbook: local/docs/RELEASE-BUMP-WORKFLOW.md"
+1 -1
View File
@@ -42,7 +42,7 @@
# - Does not run when the working tree is dirty (warns + skips).
# - Total runtime budget: < ~5 seconds on a warm tree.
#
# See: local/docs/HOOKS.md, local/docs/RELEASE-BUMP-WORKFLOW.md,
# See: local/docs/legacy-obsolete-2026-07-25/HOOKS.md, local/docs/RELEASE-BUMP-WORKFLOW.md,
# local/AGENTS.md § "Version conventions — two categories".
# NOTE: deliberately `set -uo pipefail` and NOT `-e`. A post-checkout hook
+1 -1
View File
@@ -18,7 +18,7 @@
# 4. verify-collision-detection.py (no config-vs-package conflicts)
#
# The hook is opt-in. Operators who don't want it should NOT install it.
# This is documented in local/docs/HOOKS.md (Phase 4.5+).
# This is documented in local/docs/legacy-obsolete-2026-07-25/HOOKS.md (Phase 4.5+).
#
# Per AGENTS.md "Daily-upstream-safe workflow", these checks are the
# minimum safety net against silent drift. Without the hook, drift can