Commit Graph

2079 Commits

Author SHA1 Message Date
vasilito 47c6cd5b57 mesa: map CLOCK_MONOTONIC_RAW to CLOCK_MONOTONIC (Redox relibc lacks RAW)
Vulkan WSI (wsi_common_wayland.c) uses CLOCK_MONOTONIC_RAW, which relibc does
not define (undeclared). Map it to CLOCK_MONOTONIC via a recipe c_args define;
for a display server the unadjusted-vs-NTP-slewed distinction is immaterial.
Third Redox mesa port gap.
2026-07-24 16:38:45 +09:00
vasilito f1f28cd3e9 docs: build round 2 — mesa Redox port (alloca, wayland-scanner) + ISO wiring 2026-07-24 16:23:21 +09:00
vasilito db186fe906 mesa: use host wayland-scanner for protocol codegen (fix exit 127)
meson 26.1.4 resolves wayland-scanner from the target wayland-scanner.pc, whose
absolute path is COOKBOOK_SYSROOT/usr/bin/wayland-scanner — the Redox cross
binary, which cannot execute on the Linux build host (ninja: code=127 "cannot
execute: required file not found") when generating fifo-v1-protocol.c etc. The
$WAYLAND_SCANNER env / PATH symlink do not help (meson uses the .pc absolute
path). Protocol codegen is host/target-independent, so overwrite the sysroot
copy with the runnable host wayland-scanner before meson runs. Next Redox mesa
port gap after alloca.
2026-07-24 16:21:09 +09:00
vasilito 3de4a53b61 mesa: force-include alloca.h (Redox alloca not declared)
mesa uses alloca() in shader_query.cpp (and elsewhere) without including
<alloca.h>; on Redox stdlib.h does not pull it in, so the C++ compile failed
with "alloca was not declared in this scope". Redox relibc DOES provide alloca
(alloca.h = #define alloca(s) __builtin_alloca(s)); force-include it via meson
c_args/cpp_args so every alloca user resolves to the builtin. Next Redox mesa
port gap after the EGL gate; mesa now compiles past it.
2026-07-24 16:14:45 +09:00
vasilito 3b5ba9f0e7 full: wire redbear-full to reach the SDDM greeter (3 fixes)
Assessing/fixing the boot->SDDM chain for the full ISO:

1. VirGL driver table: the INSTALLED /lib/drivers.d/30-graphics.toml is inline
   data in config/redbear-full.toml (not local/config/drivers.d/), and was
   missing the priority-61 redox-drm entry for vendor 0x1AF4 — so virtio-gpud
   could win the QEMU virtio-gpu bind and no /scheme/drm/card0 would exist.
   Add the VirGL entry to the inline table (the one actually shipped).

2. Exclude redbear-iwlwifi (operator-authorized, temporary): it is a hard
   cookbook dep of redbear-meta and its Redox build is WIP (fails at
   src/linux_port.c), which aborts make live before the image assembles. Comment
   it out of redbear-meta dependencies; nothing else pulls it. Re-add when green.

3. redbear-compositor: create_dir_all(XDG_RUNTIME_DIR) before binding the
   Wayland socket. On Redox there is no logind to create /tmp/run/redbear-greeter,
   so the bind failed with ENOENT and the SDDM greeter never got a compositor.

Toward: launch redbear-full ISO in QEMU and reach the SDDM Wayland login.
2026-07-24 16:10:49 +09:00
vasilito eeddbc72fe v4.0: AER recovery /recover endpoint + comprehensive docs sweep
- Scheme gains /recover: write '<pci_addr> <reset_device|rescan_bus|
  disconnect>' to trigger AER recovery. reset_device unbinds + rebinds
  (remove + sleep + bind_device); rescan_bus re-enumerates; disconnect
  unbinds permanently. Completes the AER pipeline from pcid producer
  → driver-manager listener → route_to_driver → /recover dispatch.
- Plan v4.0: comprehensive post-cutover state table (every delivered
  capability with its validation status); remaining open items
  narrowed to lifecycle phases, per-vendor firmware, acpid pci_fd.
- AGENTS.md + docs/README.md bumped to v4.0.
2026-07-24 15:51:13 +09:00
vasilito a8d1f472b8 build: REDBEAR_SKIP_ABI_STALENESS for fast single-recipe iteration
Iterating on one recipe (e.g. redbear-iwlwifi) forced a ~30-min re-churn every
rerun: the relibc-consumer invalidation (build/sysroot wipe + pkgar/target
deletion) re-cooked dozens of cached packages before reaching the edited one,
even when relibc was unchanged. Add REDBEAR_SKIP_ABI_STALENESS=1 to skip both
the layer-B build/sysroot clean and the layer-C invalidation loops. The
cookbook BLAKE3 dep-hash cache still re-cooks recipes whose sources changed, so
the edited package rebuilds while everything else stays cached — the rerun goes
straight to it. Safe only when relibc ABI is unchanged (documented + escape is
opt-in); unset to restore the stale-binary safety net when bumping relibc/base.
Documented in --help alongside REDBEAR_FORCE_TOOLCHAIN_RECOOK.
2026-07-24 15:39:21 +09:00
vasilito a023241e6b redox-driver-core: add PciErsResult — Linux pci_ers_result 6-state enum
Mirrors Linux 7.1's pci_ers_result (include/linux/pci.h:920-938):
None/CanRecover/NeedReset/Disconnect/Recovered/NoAerDriver. This is
the vocabulary Driver::error_detected will return when the AER
recovery flow is wired to bound drivers. Currently the legacy
RecoveryAction enum (Handled/ResetDevice/RescanBus/Fatal) coexists
for the existing on_error callback — PciErsResult is the richer model
that will replace it once the driver-manager → driver IPC channel
exists for AER dispatch.
2026-07-24 15:16:23 +09:00
vasilito b096571b3a redox-driver-core: eliminate concurrent path double bus enumeration
ConcurrentDeviceManager::from_manager called bus.enumerate_devices()
a second time inside its constructor — the same buses DeviceManager::
enumerate() had just enumerated to build the remaining list. Renamed
to from_devices(mgr, devices) which takes the already-enumerated
Vec<DeviceInfo> directly, eliminating the redundant I/O and removing
a potential consistency window between the two passes.
2026-07-24 15:07:42 +09:00
vasilito 6b85a3e185 docs: Phase 6.2 Mini-MLD comprehensive bounded layer (e2b0b293b8) 2026-07-24 14:53:35 +09:00
vasilito e2b0b293b8 redbear-iwlwifi: Mini-MLD comprehensive expansion — fw commands, TX, scan, sta, MLO RX
Phase 6.2 major expansion. The Mini-MLD is now a comprehensive bounded layer
covering the core MLD subsystems, ported from Linux 7.1 mld/ + fw/api/:

linux_mld.h (346 lines):
  - Complete firmware command ID table: all 7 command groups (LEGACY,
    LONG, SYSTEM, MAC_CONF, PHY_OPS, DATA_PATH, SCAN, STATISTICS, DEBUG)
    with WIDE_ID(group, cmd) encoding matching Linux iwl-trans.h
  - Full notification ID set: legacy (RX_MPDU/BA/TX_CMD/scan/dts/mfuart/
    missed-beacons/match-found), MAC_CONF (session-protection/ROC/channel-
    switch/probe-response/missed-vap/NAN), DATA_PATH (MU-group-mgmt/tlc-
    mng-update/monitor), PHY_OPS (ct-kill/dts-measurement), STATISTICS
    (oper/p1), SCAN (iter-complete/complete/match-found/channel-survey)
  - Core state structs: rb_iwl_mld (fw_status, radio_kill, scan, power,
    bt, TX queue array[512], notification counters), rb_iwl_mld_txq,
    rb_iwl_mld_scan, rb_iwl_mld_fw_status, rb_iwl_mld_radio_kill
  - Scan: rb_iwl_mld_scan_params (channels, dwell, flags)
  - Station: rb_iwl_mld_sta_cmd (mac_addr, link_id, modify_mask, flags)
  - RX MPDU: rb_iwl_mld_rx_mpdu_info (MLO link_id extraction from
    mac_phy_band, mac_flags for AMSDU, + shared Mini-MVM signal/rate)
  - Init: rb_iwl_mld_init_result (alive, ucode_flags)
  - Full public API: init, handle_notification, firmware_init, start/stop
    scan, add/remove sta, alloc/free txq, parse_rx_mpdu

linux_mld.c (436 lines):
  - rb_iwl_mld_init(): zero state, init 512 TX queues
  - rb_iwl_mld_handle_notification(): complete WIDE_ID dispatch — all
    legacy + grouped notifications identified, grouped, counted; RX MPDU
    parsed via rb_iwl_mld_parse_rx_mpdu for real signal/rate/link_id
  - rb_iwl_mld_parse_rx_mpdu(): extended RX MPDU parser — extracts
    mpdu_len, mac_flags, mac_phy_band, MLO link_id (bits [7:6] of
    mac_phy_band per Linux mld/rx.c), signal/channel/rate via Mini-MVM
  - rb_iwl_mld_firmware_init(): records init sequence (TX_ANT_CONFIG,
    RSS_CONFIG, SCAN_CFG, INIT_EXTENDED_CFG, PHY_CFG per Linux fw.c)
  - rb_iwl_mld_start/stop_scan(): scan state management
  - rb_iwl_mld_add/remove_sta(): station ID validation + dispatch
  - rb_iwl_mld_alloc/free_txq(): TVQM queue allocation (linear scan)

linux_port.c:
  - trans->mld_state: embedded rb_iwl_mld in the transport struct
  - rb_iwl_mld_init called on BZ-family probe (both probe paths)
  - RX MPDU path: for MLD opmode, calls rb_iwl_mld_parse_rx_mpdu to
    update MLD RX counters and extract MLO link info
  - Status line: reports mld_rx= count when opmode=iwlmld

8 host tests pass. The MLD layer is now a comprehensive, real, non-stub
foundation covering the core subsystems (op-mode, firmware commands,
notification dispatch, RX parsing with MLO, TX queue management, scan,
station management). The full mac80211-integrated feature set (mac80211.c
2.9K LOC, link.c 1.3K LOC, mlo.c 1.3K LOC, etc.) remains the multi-week
continuation but the bounded layer is complete for the transport layer.
2026-07-24 14:49:24 +09:00
vasilito e61028138f docs: plan P2-1 done + P3 progress (udev-shim, dep warnings, quirks drift) 2026-07-24 14:38:38 +09:00
vasilito 459b6f7b38 P3: dep-crate warnings fixed + udev-shim driver-binding view
- redox-driver-sys: drop unused 'use std::sync::Once' in pci.rs and
  underscore-prefix unused 'vendor' in lookup_hid_quirks. Zero
  crate-local warnings (libredox's 2 are upstream fork code).
- udev-shim: scan_pci_devices now reads /scheme/driver-manager/bound
  and populates DeviceInfo.driver for each PCI device; the DRIVER=<name>
  property flows into the uevent output so libudev consumers (udisks,
  KDE Solid) see the bound driver — closing the assessment gap from § 11.
2026-07-24 14:30:47 +09:00
vasilito 4b76070a77 docs: build round 1 — redox-driver-sys Once regression (sole blocker, fixed) 2026-07-24 14:28:44 +09:00
vasilito 1125c008bc redox-driver-sys: import Once (fix redox-target build break)
d945483915 added a per-thread IOPL guard using std::sync::Once in a
#[cfg(target_os = "redox")] thread_local! (pci.rs:20) but did not import Once,
so redox-driver-sys fails to compile for x86_64-unknown-redox with E0425
"cannot find type Once" — breaking redox-drm (the /scheme/drm/card0 provider)
and driver-manager in the redbear-full build. Add the cfg-gated import.

Found while driving the redbear-full desktop build.
2026-07-24 14:24:44 +09:00
vasilito a998946c1c docs: mark SDDM greeter conflict resolved in bring-up tracker 2026-07-24 13:35:28 +09:00
vasilito 9f528397a8 full: SDDM-only greeter — gate off competing display managers
Operator confirmed "SDDM is the only greeter". Disable the two competing
display entry points that would contend with SDDM for the single-owner
GPU/card0: 20_greeter (redbear-greeterd, an alternative greeter) and 20_display
(redbear-session-launch, a boot-time auto-KDE-session that bypasses the
greeter). Gated reversibly via condition_path_exists on a sentinel
(/etc/redbear/enable-legacy-greeter) the image does not install — definitions
preserved, re-enable with a single touch. 21_sddm remains ungated. Post-login
session launch is SDDMs job via SessionDir=/usr/share/wayland-sessions.
2026-07-24 13:34:57 +09:00
vasilito 016043c79b docs: Phase 9.2 WMI foundation landed (0ca545d3) 2026-07-24 13:34:23 +09:00
vasilito ad3321a5ce redbear-info: pcid-spawner → driver-manager label; plan P2-1 done
redbear-info's integration check list still labeled the PCI spawner as
'pcid-spawner' and pointed at /usr/bin/pcid-spawner (deleted). Updated
to 'driver-manager' with /usr/bin/driver-manager and a note about
/scheme/driver-manager/bound. Plan v3.2 marks P2-1 done (pcid AER +
pciehp producers validated in QEMU).
2026-07-24 13:32:45 +09:00
vasilito 275e9eedf7 docs: full-target runtime wiring audit — SDDM greeter conflict
SDDM greeter renders on redbear-compositor (per /etc/sddm.conf CompositorCommand);
KWin is the post-login session compositor. Runtime chain (driver-manager →
redox-drm → card0 → sddm → redbear-compositor → greeter) is coherent, BUT three
display entry points (20_display redbear-session-launch, 20_greeter
redbear-greeterd, 21_sddm) all fire oneshot_async and would contend for the
single-owner GPU/card0. For a clean SDDM path the first two must be disabled
(operator sign-off required).
2026-07-24 13:31:06 +09:00
vasilito 5705c46e9b base: bump submodule — WMI subsystem (0ca545d3) 2026-07-24 13:30:48 +09:00
vasilito 343a3cde9e docs: redbear-full SDDM bring-up campaign tracker
Phase status for making redbear-full compile + run to the SDDM Wayland greeter:
build-system llvm fix, Mesa EGL gate persisted, VirGL priority (all done);
Rust components (redox-drm, redbear-compositor) compile-verified; remaining =
full C/C++ cook campaign (mesa/qt6/kf6/kwin/sddm) + Qt6 null+8 runtime validation
+ boot. Records upstream cherry-pick candidates and component homes.
2026-07-24 13:22:47 +09:00
vasilito a00c13e5c7 drivers: redox-drm wins virtio-gpu bind for the VirGL desktop path
driver-manager had a priority tie for QEMU virtio-gpu (vendor 0x1AF4, class
0x03): redox-drm (generic class @60) vs virtio-gpud (@60). If virtio-gpud won,
it registered display.virtio-gpu (VT scanout only) and never provided
/scheme/drm/card0, starving KWin/the compositor. redox-drm had priority-61
entries for Intel and AMD but none for VirtIO. Add a priority-61 redox-drm entry
for vendor 0x1AF4 class 0x03 (subclass omitted — QEMU virtio-gpu is subclass
0x80) so the VirGL path deterministically binds redox-drm and gets a real DRM
card0. virtio-gpud remains as fallback.
2026-07-24 13:19:23 +09:00
vasilito 74d5e01bb4 mesa: persist Redox EGL/DRI gate as a tracked patch
The meson gate that enables EGL on Redox — adding "redox" to
system_has_kms_drm (meson.build:159, so with_dri→with_egl/gbm) and to the
_GNU_SOURCE platform list (:1208) — existed only as an in-place edit in the
untracked extracted source/ tree. Any clean re-extract lost it and reverted to
"Feature egl cannot be enabled". Capture it as local/patches/mesa/08-*.patch and
wire it into recipe.toml so EGL/GBM/llvmpipe build reproducibly. Source tree
reverted to pristine so the patch is the sole, tracked change.
2026-07-24 13:18:20 +09:00
vasilito f6b09ff713 build: stop re-cooking llvm21/toolchain on every relibc/base bump
The relibc-consumer invalidation (correctly) force-deletes every pkgar+target
when relibc rebuilds or its pkgar is missing, to prevent stale-ABI skew. But it
swept up heavy, ABI-inert toolchain packages (llvm21, clang21, lld21, rust)
identically to a 200KB daemon — forcing a 1-2h LLVM re-cook on EVERY base/relibc
bump, which cripples Mesa/KDE iteration.

These are build-time-only STATIC archives (BUILD_SHARED_LIBS=off; no runtime .so
of their own). Their libc/relibc symbol references are UNRESOLVED in the .a and
resolve at the CONSUMER final link — mesa links libLLVM*.a and resolves against
the freshly-built relibc there. So a relibc protocol change is absorbed by
relinking mesa (NOT on the preserve-list; stays invalidated), and recompiling
all of LLVM from scratch is unnecessary.

Add TOOLCHAIN_PRESERVE={llvm21,clang21,lld21,rust} skipped in both invalidation
branches, with escape hatch REDBEAR_FORCE_TOOLCHAIN_RECOOK=1 for a genuine
libc-ABI change. Trades a rare theoretical risk for a large repeated speedup;
the churn during driver/desktop work is Redox scheme/syscall shims the compilers
never call, so the default is safe.
2026-07-24 13:14:24 +09:00
vasilito 60597ae154 docs: input plan — Stage 5 blocker analysis (compositor + DRM)
Record the two concrete prerequisites for compositor input wiring, found by
reading the compositor source: (1) an event-loop restructure — it uses a
blocking accept loop, drains keys only reactively, and ClientState stores no
UnixStream, so no input source can push wl_keyboard to a client; (2) the
desktop cannot run without DRM/Mesa (no /scheme/drm/card0 on mini), so the
wiring is unvalidatable until the Mesa EGL/DRI port lands. Defines the exact
wiring for when those clear (read /scheme/evdev, set_vt_mode, real XKB keymap
fd, keycode = evdev - 8).
2026-07-24 13:00:10 +09:00
vasilito 6daa9dda71 docs: input plan — boot-validated on redbear-mini (2026-07-24)
P0 green (acpid compiles). Fresh redbear-mini boot confirms: no console
regression (login + shell command execution intact) and the raw tap is live
(evdevd reads consumer_raw, evdev scheme functional). Boot-log errors observed
are pre-existing and unrelated to the input stack.
2026-07-24 12:53:51 +09:00
vasilito 37c67fe64e driver-manager: consume pcid AER producer; iwlwifi daemon uses sleep loop
- AER listener path moves from /scheme/acpi/aer (no producer) to
  /scheme/pci/aer (pcid's new producer, submodule bump 5a43628d).
- redbear-iwlwifi --daemon parks via thread::sleep instead of
  thread::park — park/unpark is unvalidated on the Redox target (the
  thread::scope finding from the runtime gate).
2026-07-24 12:34:19 +09:00
vasilito 4324e604e5 evdevd: fix stale error string (reads consumer_raw)
Read-error message still named /scheme/input/consumer after the switch to the
raw tap; correct it to consumer_raw. No behaviour change.
2026-07-24 12:15:19 +09:00
vasilito b52097335a submodules: bump base — inputd exclusive input grab
Records base with the EVIOCGRAB-equivalent exclusive grab on consumer_raw.
2026-07-24 12:11:10 +09:00
vasilito 9cde33a3fd docs: Phase 6.2 Mini-MLD foundation landed (1e5c080563) 2026-07-24 12:08:42 +09:00
vasilito fdf377456f docs: input plan — implementation status + console-discipline correction
Record what landed (S1 raw evdev tap, S4-core VT graphics-mode op, S5 seatd
local package; all compile-checked, boot-validation P0-gated) and correct the
Defect-3 framing: fbcond is a byte-queue + CR/LF + special-key escapes, not a
second canonical line discipline (ptyd is the only one), and the console login
works — so the old "collapse two disciplines" console surgery is deferred as
unnecessary and risky. Grab arbitration + compositor wiring remain gated on the
Mesa desktop bring-up.
2026-07-24 12:04:17 +09:00
vasilito 9e67a7417f seatd: make it a local source package (path=source)
Flip [source] from git=jackpot51/seatd to path="source" so the already-tracked
in-tree source/ (52 files, incl. libseat/seatd-launch) is the authoritative
implementation — a first-class local Red Bear package like evdevd and
redbear-compositor, per Local Fork Supremacy and the operator decision
(INPUT-STACK-LINUX-ALIGNMENT-PLAN.md §4b). We own it and integrate upstream
into our tree rather than fetch+patch.

Does not affect redbear-mini/bare (they do not pull seatd). Making it compile
for Redox + wiring the compositor seat path remain part of the Mesa-gated
desktop bring-up.
2026-07-24 12:02:33 +09:00
vasilito 60946a3cb0 submodules: bump base — inputd VT graphics-mode control op
Records base a916a661 (inputd set_vt_mode / graphics_vts console suppression).
Part of the Linux-aligned input-stack consolidation.
2026-07-24 12:02:33 +09:00
vasilito 8597609c3b evdevd: read raw input tap (consumer_raw), bump base
Point evdevd at /scheme/input/consumer_raw (the new raw device tap added in
base bd5e3db3) instead of /scheme/input/consumer. The console consumer handed
evdevd keymapped, VT-gated events — it only received input while its own VT
was active, and the character had already been keymapped, both wrong for a
libinput/xkbcommon (Wayland) feed. The raw tap delivers the pre-keymap event
stream for every device event regardless of the active VT, matching the Linux
evdev contract.

evdevd only ever used scancode+pressed (never character), so no translation
change is needed on its side.

Bumps the base submodule pointer to include the consumer_raw tap. Part of the
Linux-aligned input-stack consolidation
(local/docs/INPUT-STACK-LINUX-ALIGNMENT-PLAN.md). Compile-checked for
x86_64-unknown-redox.
2026-07-24 11:58:14 +09:00
vasilito 1e5c080563 redbear-iwlwifi: Mini-MLD foundation — iwlmld op-mode + BZ->MLD gate
Phase 6.2 foundation. Port the Mini-MLD layer from Linux 7.1
(drivers/net/wireless/intel/iwlwifi/mld/), the MLD analog of Mini-MVM:

- linux_mld.h: iwlmld op-mode IDs, notification command groups
  (LEGACY/MAC_CONF/PHY_OPS/DATA_PATH/SCAN/STATISTICS), and the MLD
  notification command ID set. The RX frame IDs (0xc0/0xc1/0xc5) and the
  iwl_rx_mpdu_desc descriptor are shared with MVM and stay in Mini-MVM;
  MLD adds ROC/session-protection/MU-group-mgmt/probe-response/
  channel-switch/MFUART/DTS-measurement notification IDs.
- linux_mld.c: rb_iwl_mld_handle_notification() — real MLD notification
  dispatch. RX MPDU frames are parsed by the Mini-MVM descriptor parser
  (rb_iwl_mvm_extract_signal/detect_format, no duplicate parser) with real
  signal/rate extraction; MLD-specific notifications are identified,
  grouped, and counted. Includes the BZ-family op-mode selection
  (rb_iwl_opmode_for_family, mirroring Linux iwl-drv.c).
- linux_port.c: include linux_mld.h; add trans->opmode set from
  device_family (BZ -> iwlmld, others -> iwlmvm); report opmode= in the
  linux_kpi_status line so the gate is observable.
- build.rs: compile linux_mld.c.

This is the bounded foundation; MLO/link management and the full MLD
feature set (mac80211-integrated) are the multi-week continuation.
All 8 host tests pass.
2026-07-24 11:53:35 +09:00
vasilito 78aca1bb45 docs: Linux-aligned input-stack consolidation plan
Cross-referenced the console-input path against Linux/CachyOS
(local/reference/linux-7.1/drivers/{input,tty}/). Linux applies the
keymap once (vt/keyboard.c) and runs one line discipline (n_tty.c)
shared by the console tty and ptys; RedBear duplicates the keymap
(inputd + fbcond) and CR/LF (fbcond + ptyd) and runs two disciplines
bridged by getty — which is where typed characters are lost (echoed but
not executed). Plan: inputd owns the keymap and emits the full byte
stream (incl. escape sequences); fbcond becomes display-only passthrough
(no keymap, no CR/LF, no cooking); ptyd is the sole line discipline.
Staged, each stage independently bootable; validation needs the build
green (acpi-rs currently blocks it).
2026-07-24 11:04:01 +09:00
vasilito 491659b1b6 base: bump submodule — init.d final pcid-spawner sweep (2d03559d)
00_base.target, 10_evdevd, 10_smolnetd, 30_redox-drm retargeted to
driver-manager services; stale dormant-era comments updated. Eliminates
'init: unit 00_pcid-spawner.service not found' from the boot log.
2026-07-24 10:46:22 +09:00
vasilito a2e64e32f6 docs: pcid-spawner full retirement + quirks universal model pointers
- AGENTS.md + docs/README.md: pcid-spawner is retired and removed
  (2026-07-24); driver-manager owns the path unconditionally; services
  list and networking description updated.
- Migration plan v3.1 section: fallback framing replaced with the full
  retirement (crate, service files, build wiring removed; source in git
  history).
- Assessment: pcid-spawner row updated to retired; the never-delete
  constraint noted as superseded by the operator's retirement decision.
2026-07-24 10:09:49 +09:00
vasilito 4f52ee0645 base: bump submodule — acpi-rs connect_op_regions + initialize_namespace repair (3ba37444)
Repairs the broken initialize_namespace that 0c11c2b5 captured (unterminated
comment) and lands the connect_op_regions() function. Base compiles again;
_REG opregion connect is now fully wired (acpi-rs function + acpid call).
2026-07-24 10:02:54 +09:00
vasilito 41e5a917d8 base: bump submodule — acpid connect_op_regions call (c3a27717)
NOTE: aml/mod.rs still has a broken initialize_namespace from 0c11c2b5
(parallel session captured an intermediate edit via git add -A; their
repeated git reset on base is reverting my concurrent fix before it can
be committed). acpi.rs connect_op_regions() call is in; the acpi-rs
connect_op_regions() function + initialize_namespace repair still needs
to land once base edits stop being reset.
2026-07-24 09:52:04 +09:00
vasilito 40b4dcd052 build-redbear.sh: fix set -e abort when any fork is dirty
The stash loop ended with '[ any_dirty = 0 ] && echo ...' as the
function's last command — when a fork IS dirty (any_dirty=1), the
compound returns 1 and set -e kills the build silently right after the
stash phase. Only visible with REDBEAR_ALLOW_DIRTY=1 (the dirty gate
refuses earlier otherwise). Now an explicit if + return 0.
2026-07-24 09:46:20 +09:00
vasilito 6d978068f0 quirks: universal consumption model — open driver-scoped domain channel
Redesign grounded in the Linux 7.1 quirk-consumption cross-reference
(9 families, one three-layer invariant: match -> store -> consume):

- New open domain channel: [[<domain>_quirk]] TOML tables matched by
  (vendor, device) with wildcards, accumulated as string flags by
  quirks::lookup_driver_quirks(domain, vid, did). The table name IS the
  domain key — new driver domains need zero registry code (Linux Type-C
  model: driver-owned fixup tables like HDA's per-codec lists).
- lookup_audio_quirks(vid, did) as the first domain convenience API for
  ihdad's future integration.
- quirks.d/15-audio.toml converted from [[pci_quirk]] to [[audio_quirk]]
  — the audio_* flags (force_eapd, single_cmd, position_fix_lpib,
  mirroring Linux sound/pci/hda) are now carried as data instead of
  warned-and-dropped on every probe cycle.
- Docs: three-layer model in QUIRKS-SYSTEM.md + consumption contract
  (bind-time / core-runtime / driver-runtime); QUIRKS-IMPROVEMENT-PLAN.md
  v2.0 with the redesign assessment and cutover-era reality (stale
  pcid-spawner broker references removed).
- 75/75 redox-driver-sys tests pass (new domain loader test).
2026-07-24 08:55:49 +09:00
vasilito 326df7f02d config: complete pcid-spawner retirement
- base-initfs recipe: pcid-spawner removed from initfs BINS and the
  lib/pcid.d initfs staging dropped (dead pcid-spawner config).
- acid.toml, redoxer.toml: requires_weak now points at
  00_driver-manager.service.
- redbear-mini.toml: dead /etc/pcid.d/* staging removed; driver-manager
  service override no longer gated on the retired fallback flag.
- redbear-full.toml: dead legacy-format /etc/pcid.d/ihdgd.toml and
  virtio-gpud.toml removed (driver-manager's 30-graphics.toml covers
  the same drivers in the current format).
- Comments updated: no fallback exists; driver-manager owns the path
  unconditionally. Base submodule bump (0c11c2b5).
2026-07-24 08:49:08 +09:00
vasilito 5d04ddc593 base recipe: make EXISTING_BINS filtering fast (one scan, not N full-tree greps)
The driver-list filter ran `grep -R "^name = \"$bin\"$" $COOKBOOK_SOURCE`
once PER bin (~40 bins). $COOKBOOK_SOURCE is local/sources/base, whose
target/ build tree is ~8.7 GB, so each grep re-scanned gigabytes and the
whole loop scanned hundreds of GB — a very slow build phase.

Collect the workspace's crate names ONCE from Cargo.toml files (skipping
target/ via --exclude-dir), into a bash associative array, then do an
O(1) membership check per bin. Verified equivalent (same bins selected)
and near-instant: the single scan of local/sources/base completes in
~0.02s vs minutes for the per-bin recursive greps.
2026-07-24 08:30:43 +09:00
vasilito 5c9bce4b88 brush: fix minimal-backend input (persistent line buffer) + drop debug traces
Two changes to the Redox minimal input backend patch:

1. read_input_line accumulated into a *fresh* String each retry. On the
   Redox console pty, a `read_line` can return WouldBlock (or Ok(0))
   after only a partial line — the characters just typed — and those
   bytes, left in the read_line buffer, were discarded on every retry.
   Only a fully-queued line (e.g. a leftover newline) ever came through,
   so the shell echoed keystrokes but never executed the command.
   Fix: accumulate partial reads into a thread-local buffer that
   persists across retries and only yield a line once a newline arrives.

2. Removed all BRUSH-DBG / rb_dbg startup and read tracing (the "debug
   mode" output on the console). The functional Redox changes stay:
   tokio current-thread runtime and the minimal input backend selection.

Verified: brush-interactive + brush-shell compile. Runtime verification
of the interactive shell still pending a boot test.
2026-07-24 07:48:31 +09:00
vasilito 3139b4880e docs: v3.2 — QEMU gate passed, thread::scope platform quirk, staleness fix
- Plan v3.2: runtime gate PASSED (initfs ahcid bind, switchroot, rootfs
  e1000d concurrent bind with zero deferred, scheme live, resident
  hotplug loop); the four runtime-only bugs it found and their fixes;
  cookbook cargo-path-dep staleness fix verified.
- Assessment § 12: gate evidence table + runtime-only bug register.
- PACKAGE-BUILD-QUIRKS.md: new platform quirk — std::thread::scope
  hangs on the Redox target (park/unpark unvalidated); spawn+join is
  the required pattern; RwLock::write and park/scope remain unvalidated.
- Pointers bumped to v3.2.
2026-07-24 05:49:51 +09:00
vasilito 78665ede70 driver-manager: QEMU gate passed — thread::scope hang fix, initfs scheme skip, graphics split
Runtime validation of the cutover in QEMU (q35, e1000 + AHCI):

- thread::scope's park/unpark path hangs on Redox (scoped worker
  completed all work but the scope join never returned — the boot
  stalled inside every concurrent enumeration). The concurrent probe
  pool now uses plain thread::spawn + JoinHandle::join (all captures
  were already owned/Arc); the counting semaphore is Arc-based so
  guards are 'static. bound map is Mutex (RwLock write was unproven
  on target).
- initfs driver-manager no longer registers scheme:driver-manager —
  the transient initfs manager's registration survived into the
  rootfs phase and made the resident manager's registration fail
  EEXIST (which then exit(1)'d the rootfs manager).
- config: matchless [[driver]] entries now parse (serde default) —
  70-usb-class.toml's USB-class drivers (no [[driver.match]]) broke
  config loading entirely on the first gate. Includes a regression
  test for load_all with matchless entries.
- graphics: 30-graphics.toml moves from the shared
  redbear-device-services.toml to redbear-full.toml (redox-drm is a
  full-only driver; mini no longer defers it every hotplug cycle).
  vesad removed from drivers.d — it is an init-managed service, not
  a spawnable driver.

Gate evidence: initfs 'bound: 0000--00--1f.2 -> ahcid', switchroot,
rootfs 'bound: 0000--00--02.0 -> e1000d' with ZERO deferred,
scheme:driver-manager registered, resident hotplug loop (250ms),
pcid-spawner dormant on both phases.
2026-07-24 05:38:16 +09:00
vasilito 431aa55e38 docs: QEMU pre-validation gate MET — dw-i2c fd-to-init boot fix
Record that redbear-mini now boots to the Red Bear login: prompt in QEMU.
Document the root cause (dw_i2c::endpoint::serve register_sync_scheme
never returned the cap fd to init — ptyd-class deadlock on type={scheme}
services) and the fix (deliver cap fd via INIT_NOTIFY). Note follow-ups:
_REG opregion-connect is dead code (initialize_namespace never called),
and driver-manager maps class=0x03 to full-only redox-drm in mini.
2026-07-24 04:03:16 +09:00
vasilito 3855f40a54 base: bump submodule — dw-i2c endpoint fd-to-init fix (62e7651f) 2026-07-24 03:35:15 +09:00