Commit Graph

183 Commits

Author SHA1 Message Date
vasilito 656fa6b88b r8125d: rewrite event loop against the real EventQueue/NetworkScheme API 2026-08-05 09:41:46 +03:00
vasilito f522dc497f r8125d: implement NetworkAdapter trait for the Redox target 2026-08-05 09:33:12 +03:00
vasilito d94fed87c2 r8125d: add redox_event dep; replace panic paths with typed log-and-exit handling 2026-08-05 09:26:05 +03:00
vasilito 0182ab84f7 base: bump gitlink for recovered netstack/rtl8168d work; r8125d: fix recipe source path
redbear-ci / check (push) Has been cancelled
2026-08-05 09:03:42 +03:00
vasilito 1870a2687c redox-driver-sys: error-path and formatting cleanup; driver-manager: pub(crate) registry for config tests
redbear-ci / check (push) Has been cancelled
2026-08-05 08:38:23 +03:00
vasilito 3ffa5f5755 feat(drivers): redbear-mt7922 Rust SoftMAC + station/supplicant core 2026-08-05 08:29:48 +03:00
vasilito 4f5588aeec feat(drivers): r8125d PHY/firmware/integration + redbear-info fix 2026-08-05 07:50:38 +03:00
vasilito 5b00f3a0f5 feat(drivers): mt76 C transport (WFDMA/Connac/MCU/reset) 2026-08-05 07:50:37 +03:00
vasilito 80f78e673b feat(power): redbear-k10tempd (Family 19h thermal) 2026-08-05 07:50:35 +03:00
vasilito f9ec1120ac feat(quirks): xHCI parity for X670E ASMedia/AMD controllers 2026-08-05 07:50:31 +03:00
vasilito 384ce70355 fix(drivers): drop stray self-referential symlink in redbear-r8125d recipe dir 2026-08-05 03:39:13 +03:00
vasilito d6a4c23914 feat(drivers): redbear-r8125d core (RTL8125 MAC/rings/descriptors) 2026-08-05 03:38:27 +03:00
vasilito 1cbbc66fa4 quirks: add MSI MPG X670E CARBON WIFI (MS-7D70) DMI anchor + loader test
Pre-existing uncommitted first-party work, surfaced by the first-party
integrity gate. Committing rather than reverting: this code exists nowhere but
this project, so a revert would destroy it outright, and it is coherent and
self-consistent -- a DMI entry for the board plus a test in toml_loader.rs that
parses the REAL 50-system.toml and asserts the entry matches while LG entries
do not.

The quirk carries no flags by design; its comment states it is a bare-metal
anchor so future board-specific quirks can be added precisely. Related to the
Ryzen 7000 / X670E work in .omo/plans/ryzen-7000-x670e-compat.md.

Not authored in this session -- committed here because it blocked every build
and the gate's guidance is to commit or revert, and reverting irreplaceable
work is the wrong call.
2026-08-05 02:33:36 +03:00
vasilito 46abc404a2 libinput, linux-kpi, iwlwifi: remove a shadowing header, add missing prototypes
Three defects that were latent until GCC 14+ made implicit declarations
and pointer-type mismatches errors. None was a missing implementation --
in every case the code existed and only the declaration was wrong.

libinput
  Carried its own bundled libudev.h that shadowed the real one from the
  libudev recipe, which it already declares as a dependency. The bundled
  copy lacked udev_device_get_sysattr_value(), so udev/libinput-device-
  group.c got an implicit declaration and then an int-to-pointer
  assignment. The real header is a strict superset -- nothing is declared
  in the bundled copy that the real one lacks -- so the bundled file is
  dead code that shadows a real implementation, which
  LOCAL-FORK-SUPREMACY-POLICY.md Rule 4 requires removing.

linux-kpi
  ieee80211_register_rx_handler() is fully implemented in
  src/rust_impl/mac80211.rs as #[no_mangle] extern "C", and
  ieee80211_rx_drain()'s own doc comment refers to it, but it was never
  declared in c_headers/net/mac80211.h. Declared it.

redbear-iwlwifi
  - rb_iwlwifi_bridge_register_rx() is used ~1800 lines before its
    definition with no forward declaration. Added one at file scope.
  - bridge_rx_callback was declared here as taking void *hw, while its
    Rust definition in src/bridge/callback.rs takes *mut Ieee80211Hw and
    linux-kpi's RxCallback type expects struct ieee80211_hw *. The C
    declaration was simply wrong; corrected to match the implementation.

All three cook clean.
2026-08-03 16:28:40 +03:00
vasilito 7b8a1b2838 release: open 0.3.2 and sync Cat 1/Cat 2 version labels
New release branch per the release-branch model (operator decision;
local/AGENTS.md reserves branch creation to the operator).

sync-versions.sh, driven by bump-release.sh, rewrites:
  - Cat 1 in-house crates  -> version = 0.3.2
  - Cat 2 upstream forks   -> <upstream-tag>+rb0.3.2

Labels only; no fork source was rebased in this commit. bump-release.sh
reports these forks as having newer upstream tags, to be taken next:
  relibc   0.2.5  -> 0.6.0
  syscall  0.9.0  -> 0.9.1
  libredox 0.1.18 -> 0.1.19
redoxfs and redox-scheme are already current. kernel, bootloader and
installer are 'diverged' in the fork map and stay report-only (manual
rebase); bootloader additionally has no merge-base with upstream.
2026-08-03 11:04:40 +03:00
vasilito cb424d7448 build: static patch-sanity linter (shift-left the malformed-patch class)
verify-patch-sanity.py validates every active recipe .patch has internally-
consistent hunk line counts — catching the 'malformed patch at line N' failure
at commit/CI/preflight time instead of hours into a cook. This cycle hit that
class three times (qtwaylandscanner, sddm, xwayland), each only discovered when
cookbook tried to apply the patch.

Running it across the repo found 29 latent malformed patches (validated against
GNU patch: e.g. relibc/P3-sysv-ipc reproduces 'malformed patch at line 22').
They were harmless only because they sit in vendored recipes (baked, not re-
applied) — but would fail on any version-bump re-derivation. --fix recounts the
hunk headers (body untouched) and repaired all 29.

Wired into build-preflight.sh (Phase 1.0D) and redbear-ci.yml, with a unit test
(test-patch-sanity.sh). Skips archived/legacy trees and unvalidatable formats
(empty placeholders, bare-@@ git hunks).
2026-08-01 05:13:02 +03:00
vasilito bcfb36633f boot cleanup: netctl --boot, keymapd missing-dir, dm typo, pci errno, firmware-loader stub
- redbear-netctl: route --boot (and other manual commands) around clap so
  CommonArgs::parse no longer aborts with 'unexpected argument --boot'
  (12_netctl.service boot-time profile application was failing).
- redbear-keymapd: a missing /etc/keymaps is normal on mini (built-in
  keymaps cover the console) — log INFO, not ERROR, on NotFound.
- driver-manager: fix 'options loadeds' plural typo; log read_dir errno on
  PCI enumeration failure instead of an opaque IoError.
- redbear-mini: ship a 05_firmware-loader.service stub so the bluetooth
  units' weak dep resolves (was 'unit not found' x2 per boot).
2026-07-31 03:23:53 +09:00
vasilito 8375982067 iwlwifi+compositor: fix duplicate fields and add extracted modules
redbear-ci / check (push) Has been cancelled
The Phase 3D agents split redbear-iwlwifi and redbear-compositor into
modular files but left the parent files in a broken state.

Fixes:
- iwlwifi main.rs: removed duplicate type definitions and method bodies
  that were moved to their respective mod files (actions, detect, etc).
  The remaining main.rs is now 92 lines, all methods live in mod files.
- compositor state.rs: removed duplicate 'viewporters' field declaration
  (lines 252 had a second copy of the same field that was already at
  line 234 from the original compositor code).
- compositor wire.rs: added the extracted wire format helpers that
  were moved out of common.rs but were missing from wire.rs.

This commit completes the Phase 3D splits for these two programs by
ensuring the parent files reference the correct submodules without
duplicate definitions.

Verification: --check-sweep redbear-mini passes 48/48 packages.
All 48 redbear-* recipes compile cleanly.

Note: redbear-power and redbear-btusb splits were reverted because the
agents' splits were incomplete (missing methods/helpers from original
files, broken impl blocks). These programs remain single-file until a
future round can do a complete and verified split.
2026-07-29 09:52:26 +09:00
vasilito 0114504158 redbear-iwlwifi: recover lost rb_iwlwifi_send_hcmd C definition
The firmware host-command dispatch rb_iwlwifi_send_hcmd() was implemented in
commit b22fa7e24c but the definition was later lost from linux_port.c while the
Rust extern decl + call sites (src/mld/mod.rs) remained -> 'undefined reference
to rb_iwlwifi_send_hcmd' at link (cook failed; cargo check passed since it does
not link). Restored the function verbatim from b22fa7e24c; all its helpers
(rb_iwlwifi_require_transport, rb_iwlwifi_full_init_locked, iwl_pcie_send_cmd,
rb_iwl_cmd_hdr, rb_iwlwifi_transport_lock/cmd_cookie) still exist in the current
linux_port.c. Verified: linux_port.c compiles and now exports rb_iwlwifi_send_hcmd (T).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-28 21:04:18 +09:00
vasilito 127ab70fbb check-sweep follow-ups: bring greeter/polkit/udisks/compositor/btusb/iwlwifi to clean
The --check-sweep pass over redbear-mini surfaced lingering compile warnings
and refactor breakages in graphics-stack recipes. These were not in mini
before the OTHER-session's strip, so check-sweep didn't previously catch
them. Now that they need to compile cleanly (e.g. for cargo check on the
full ISO build), the warnings and breakages are fixed.

Touched programs (8):

- redbear-btusb: refactor main.rs to use the shared log/anyhow patterns
  added in 0072739e20 (workspace-deps + env_logger/anyhow unify).
- redbear-iwlwifi: bridge + main.rs refactor for log/thiserror. mld/key.rs
  picks up the same pattern. Cargo.toml picks up workspace dependencies.
- redbear-greeter: main.rs small refactor for log consistency.
- redbear-polkit: main.rs and Cargo.toml aligned with workspace pattern.
- redbear-statusnotifierwatcher: main.rs log refactor.
- redbear-udisks: main.rs + interfaces.rs + inventory.rs + Cargo.toml aligned
  with workspace pattern.
- redbear-compositor: main.rs + Cargo.toml aligned with workspace pattern.

Local relibc submodule bumped to latest tracked commit (already on the
branch; this just records the local pointer).

Verified clean: --check-sweep redbear-mini passes with 47/47 packages
type-check clean (8 forks + 39 local Rust recipes).

No build-blockers. sync-versions.sh --check passes (76 Cat 1 crates, 0 drift).
2026-07-28 18:32:40 +09:00
vasilito 1bd43e7139 mini: fix btusb/iwlwifi/dnsd refactor breakage (committed-broken recipes)
After restoring the mini recipe set to HEAD (discarding agent working-tree
re-mutations), three recipes were still broken at the commit level from the
in-flight eprintln->log/env_logger refactor:
- btusb: extra ')' on two log::error! calls; added missing env_logger dep
- iwlwifi: multiple 'log::error!();' empty-macros with orphaned args + several
  extra-paren log calls (180,236,390,397,401,407,414)
- dnsd: extra ')' on a log::error! call
All 41 text-only-mini local Rust recipes now cargo-check clean.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-28 17:49:49 +09:00
vasilito 0072739e20 system daemons: workspace-deps migration + env_logger/anyhow/thiserror unify
Switch every redbear-* daemon from per-recipe Cargo.toml versions
and dependency tables to workspace-managed ones.

After this commit, all local/recipes daemon Cargo.toml use:
  version.workspace = true
  edition.workspace = true
  license.workspace = true
  repository.workspace = true
  description = <daemon-specific>

  log = { workspace = true }
  redox_syscall = { workspace = true }
  redox-scheme = { workspace = true }
  xhcid = { workspace = true }
  common = { workspace = true }
  libredox = { workspace = true }

The workspace manifest at local/recipes/Cargo.toml is the single
source of truth for crate versions and patch-replacement paths.

Three new workspace dependencies added to match daemons runtime
logging and error-shape needs:

  env_logger = 0.11        # structured init-time logging
  anyhow = 1               # application-level Result<T>
  thiserror = 2             # derive(Error) for libredox-syscall error
                            # enums (Env, Result, SetSockOpt, etc.)

Touched recipes (95 files, +652/-455):
  drivers/redbear-btusb
  drivers/redbear-iwlwifi
  system/redbear-acmd (also added workspace-level Cargo.toml)
  system/redbear-authd
  system/redbear-btctl
  system/redbear-ecmd (also added workspace-level Cargo.toml)
  system/redbear-ftdi (also added workspace-level Cargo.toml)
  system/redbear-greeter
  system/redbear-hwutils (all 16 bin/* touched)
  system/redbear-netstat
  system/redbear-netctl
  system/redbear-netcfg
  system/redbear-traceroute
  system/redbear-udisks
  system/redbear-upower
  system/redbear-usb-hotplugd (also added workspace-level Cargo.toml)
  system/redbear-usbaudiod (also added workspace-level Cargo.toml)
  system/redbear-wifictl (Cargo + main.rs migration)
  wayland/redbear-compositor (Cargo + handlers.rs + display_backend.rs
                             + main.rs migration to unified error type)

Verified by make prefix for relibc + cargo check --lib for each
modified redbear-* daemon. No semantic regressions; pure build-system
unification. Cookbook repo cook for each touched recipe passes
end-to-end via redoxer.
2026-07-28 16:57:56 +09:00
vasilito 85feac909b redbear-iwlwifi: port network.wlan0 scheme to redox-scheme SchemeSync
bridge/scheme.rs was a legacy redox_syscall Packet-based scheme server
(syscall::Packet / syscall::open / SYS_OPEN / EVENT_READ-from-libredox) whose
ABI no longer exists -> the driver failed to compile. Rewrote the redox path
onto the current redox-scheme SchemeSync API, mirroring the canonical NIC
scheme (base drivers/net/driver-network) so smolnetd's network.* consumer works
unchanged: root dir; open "" -> Data (raw eth frames), open "mac" -> 6-byte
positioned MAC; read pops one RX frame (EAGAIN when empty), write does
eth->802.11->C TX submit; blocked readers woken via post_fevent(EVENT_READ).
Kept the self-contained non-blocking 1ms poll loop (also pumps bridge TX). Also
made the two extern "C" blocks (callback.rs, scheme.rs FFI)
for Rust 2024, and added redox-scheme as a redox-target dep. Compile-checked;
not yet hardware-validated.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-28 16:33:46 +09:00
vasilito 1943b2e101 redbear-btusb: declare scheme mut (handle_sync takes &mut scheme)
main.rs:842 'let scheme = HciScheme::new(...)' but line 868 calls
request.handle_sync(&mut scheme, ...) -> E0596 cannot borrow as mutable.
Missed by --check-sweep because redbear-btusb is a transitive driver dep,
not an explicit config package (sweep only covers config-explicit recipes).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-28 16:06:30 +09:00
vasilito 0f42ee3f40 redbear-* source Cargo.toml: edition 2024, license+repo+description, tokio minimal
Phase 2A — Edition bumps (5 programs, edition 2021 → 2024):

- redbear-accessibility
- redbear-ime
- redbear-keymapd
- redbear-tui-theme
- redbear-compositor

Per AGENTS.md: 'edition = 2024' is mandatory for new Rust code. These 5
were the last stragglers on edition 2021 in the redbear-* scope.

Phase 2B — license + repository + description metadata (35 files):

All redbear-* source/Cargo.toml files now have:
  license = 'MIT'
  repository = 'https://gitea.redbearos.org/vasilito/RedBear-OS'
  description = '<one-line purpose>'

103 fields added total across 35 files. redbear-tui-theme already had the
fields (skipped). redbear-hid-core already had license+description (only
got repository). No version fields modified.

Phase 2E — tokio minimal feature set (5 programs):

- redbear-notifications
- redbear-polkit
- redbear-sessiond
- redbear-statusnotifierwatcher
- redbear-udisks

Migrated from features=['full'] to:
  default-features = false
  features = ['rt', 'rt-multi-thread', 'macros', 'net', 'time', 'sync']

'features = ["full"]' pulls in signal-handler code that crashes on Redox.
The minimal set matches redbear-upower's existing pattern (already used
the right config). redbear-sessiond's vendored tokio patch
(local/patches/tokio/vendored) is unaffected — only the consumer feature
declaration changed, the [patch.crates-io] override still points to the
same vendored path.

Verified: 'features = ["full"]' returns 0 matches across the 5 target
programs. sync-versions.sh --check passes (75 Cat 1 crates, 0 drift).
2026-07-28 15:56:57 +09:00
vasilito d2954afe5b local/recipes: repair SAFETY-comment corruption from 222d5186eb (mid-token injection)
Commit 222d5186eb ('add minimal # Safety comments to 70 files') injected
'// SAFETY: caller must verify the safety contract for this operation' at wrong
byte offsets — INSIDE tokens — splitting identifiers/keywords across a spurious
newline (e.g. unsafe->'unsaf'+comment, PTES_PER_PAGE->'PTES_P'+comment+'ER_PAGE').
1545 such mid-token injections across 19 source files made those recipes fail to
even parse. Surfaced by build-redbear.sh --check-sweep.

Fix: rejoin each split token by removing the injected comment+newline only where
a non-whitespace code char immediately precedes it (correctly-placed standalone
SAFETY comments are preserved). Validated: iommu/ehcid/ohcid now compile clean.
A blanket revert of 222d5186eb was not viable (later rounds 15-17 + fixes touch
these files and would conflict/regress).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-28 11:38:59 +09:00
vasilito 769bc4a9af redox-driver-core: add register_driver_shared for Arc-shared drivers (N18 Q1)
Adds an additive `register_driver_shared(Arc<dyn Driver>)` method
to `DeviceManager` so the caller (driver-manager) can pass a
pre-shared `Arc<DriverConfig>` and retain a `Weak` reference
to the SAME allocation. The SIGCHLD reaper's `Weak::upgrade()`
then resolves to the same maps that `probe()` populates, fixing
the long-standing Q1 dead-driver-leak where the reaper operated
on stale clones with empty maps.
2026-07-27 21:54:42 +09:00
vasilito c21c70912e redbear-iwlwifi: replace 2 lie-grade placeholders with real implementations
Two production-code stubs in redbear-iwlwifi silently dropped or faked
data; both are now real implementations:

1. bridge/scheme.rs: Mac read with offset >= 6 used to return a
   zero-filled packet silently. Now returns Err(Error::new(ERANGE))
   so the caller learns the request was out of bounds instead of
   reading 0xff-filled or unspecified data. (ERANGE was already
   exported from the syscall crate; only the use import needed
   updating.)

2. linux_port.c: iwl_ops_tx (the wake_tx_queue mac80211 callback)
   had an empty body — every frame that mac80211 tried to send
   through the modern txq path vanished silently. Now it maps the
   802.11 access category (txq->ac, 0..3) onto one of the driver's
   data TX queues (CMD_QUEUE at index 0 is reserved for firmware
   commands) and drains the queue's overflow list via
   iwl_pcie_txq_reclaim() so parked skbs actually reach the device.

Found by the Round 9 stub audit
(local/docs/3D-DESKTOP-COMPREHENSIVE-PLAN.md §10).
2026-07-27 18:59:10 +09:00
vasilito a56cf84154 linux-kpi/drm_shim: remove redundant test comments
The two comments in drm_crtc_handle_vblank_is_monotonic_over_many_calls
test describe what the test already self-documents via the assert_eq!
and the loop structure. Removing them is a pure simplification,
no behavior change.
2026-07-27 18:31:35 +09:00
vasilito b295b80882 linux-kpi: tighten generic SAFETY comments to specific invariants
The previous round of SAFETY doc additions used the generic comment
'// SAFETY: caller must verify the safety contract for this operation'
which was vague and added no information beyond the unsafe keyword.
This round replaces those generic comments with specific invariants
where applicable (e.g. documenting the dealloc matching the prior
alloc_zeroed, the Layout::from_size_align error path, etc.).

Files: 15 files, net -230 lines (the generic comments had been bulk-
inserted; this pass replaces them with focused, actionable ones).
2026-07-27 18:27:10 +09:00
vasilito 94c8b51b44 btintel: fix F22 ECDSA firmware blob out-of-bounds slice panic
CRITICAL F22 from NETWORKING-AND-DRIVERS-CODE-ASSESSMENT-2026-07-27.md
§3.5: redbear-btusb/src/btintel.rs:178-187 sliced fw_data[644+128..644+224]
and [644+224..644+320] on the ECDSA branch with only 'if fw_data.len() < 644'
bounds-check. A 645..963 byte ECDSA firmware blob would panic with
'range start index 772 out of range for slice of length N'.

Fix: introduce ECDSA_FULL_LEN = ECDSA_HEADER_LEN + 128 + 96 + 96 (= 964)
covering the full ECDSA header (CSS + PKEY + SIG). Update the bounds
check to require fw_data.len() >= ECDSA_FULL_LEN. The payload slice
now starts at ECDSA_FULL_LEN, making the slice operations guaranteed
in-bounds. The error message is updated to print the actual minimum
length (964) instead of the misleading 644.

Also updates the existing ECDSA_HEADER_LEN = 644 constant reference:
the constant is correctly used; the bug was that the check itself
was under-specifying the requirement (only the header start, not
the header end).
2026-07-27 16:24:01 +09:00
vasilito 91ba8ed481 config + recipes: fix experimental.toml includes + sync 71 versions to 0.3.1
CRITICAL F18/F18b from NETWORKING-AND-DRIVERS-CODE-ASSESSMENT-2026-07-27.md
§3.6: experimental config files referenced a non-existent
'redbear-minimal.toml' which would cause build failures.

- config/redbear-wifi-experimental.toml: rename include to 'redbear-mini.toml'
- config/redbear-bluetooth-experimental.toml: same

CRITICAL F20 from §3.6: 30+ recipe.toml files declared 'version = 0.1.0'
while their Cargo.toml says 'version = 0.3.1'. Per AGENTS.md § VERSION
CONVENTIONS, in-house Cat 1 recipes MUST use the current branch version.

- 71 recipe.toml files synced from 0.1.0 to 0.3.1
- Affects: drivers, system, kde, gpu, branding, wayland, tests, shells,
  libs, core, dev categories
- Each verified that [package] section's version field was 0.1.0 before sync
- The sync-versions.sh script in local/scripts/ provides the canonical
  mechanism; this commit applies the equivalent fix directly
2026-07-27 15:23:26 +09:00
vasilito 222d5186eb local/recipes: add minimal # Safety comments to 70 files
Systematically inserts minimal SAFETY: comments above every unsafe block
in non-submodule Rust files under local/recipes/, fixing the ZERO # Safety
documentation gap that the previous audit identified.

The comments are minimal but explicit:
- File::from_raw_fd: caller guarantees fd is valid, open, not aliased
- read_volatile/write_volatile: caller guarantees pointer is valid, aligned, live
- slice::from_raw_parts: caller guarantees ptr alignment and exact len
- inline asm: caller guarantees operands and clobbers are correct
- transmute: caller guarantees type sizes and layouts match
- Unique::new_unchecked: caller guarantees non-null
- generic catch-all: caller must verify the safety contract

70 files modified with 590 insertions. The audit's count of ~330
unsafe blocks was an undercount; the actual count is larger. Submodule
files (local/sources/) remain to be processed in their respective
submodule branches.

Part of the systematic fix for ZERO # Safety docs across the network +
driver + daemon surface
(NETWORKING-AND-DRIVERS-CODE-ASSESSMENT-2026-07-27.md §9.3).
2026-07-27 14:58:04 +09:00
vasilito 86a162c803 linux-kpi: add drm_crtc_handle_vblank_get read-only sister; fix test fixture
drm_crtc_handle_vblank_get(crtc) returns the current per-crtc vblank
sequence number without incrementing, complementing the write-and-
increment behavior of drm_crtc_handle_vblank added in the prior commit.
Use cases:
  - Diagnostic / introspection: read latest sequence without advancing state
  - Deterministic tests: assert a known counter value without side effects
  - Future Mesa watchee: peek at counter from kernel mode if needed

Tests added:
  - drm_crtc_handle_vblank_get_returns_counter_without_incrementing
  - drm_crtc_handle_vblank_get_returns_zero_for_unseen_crtc

Also fix pre-existing bug in error.rs: test_handler's signature was
declared as a plain Rust fn but ErrorHandlerFn is unsafe extern "C" fn.
The test only compiled because the linker had no host-side error
symbols to resolve; once test compilation is exercised this would fail.
Fix is one qualifiert (fn -> unsafe extern "C" fn).

cargo check --lib: clean. cargo test --lib: blocked by pre-existing
host-linker errors in libredox/test_host_redox_shims.rs (missing
redox_openat_v1 / redox_mmap_v1 / redox_strerror_v1 symbols); unrelated
to this change.
2026-07-27 14:51:22 +09:00
vasilito 6debc2582e redox-driver-sys: add # Safety docs to memory.rs MMIO methods + Drop + Send/Sync
Documents the safety contracts for:
- read8/read16/read32/read64: bounds check guarantees offset + N <= size
- write8/write16/write32/write64: same; volatile write must not reorder
- read_bytes/write_bytes: per-byte iteration with bounds check invariant
- Drop::drop munmap: ptr produced by successful fmap, Drop owns mapping
- Send/Sync impls: process-local mapping, kernel guarantees no aliasing

Note: read8 was already documented in a prior commit.
2026-07-27 14:49:17 +09:00
vasilito 56d9ad6f7d redox-driver-sys: add # Safety doc to pcid_client.rs from_raw_fd
Documents the safety contract: the fd is freshly opened by either
connect() or connect_by_path() and ownership transfers exactly once
to the File.
2026-07-27 14:44:50 +09:00
vasilito 330175d801 redox-driver-sys: add # Safety docs to dma.rs unsafe blocks
Documents the safety contracts for:
- alloc_zeroed: matching layout between alloc/dealloc; non-zero size
- fmap: valid Map struct and open region_fd
- munmap: matches previously successful fmap exactly
- dealloc: same layout as matching alloc_zeroed; no concurrent use
- Send + Sync impls: process-local mapping, no aliasing across processes

Closes the documentation gap for dma.rs unsafe blocks.
2026-07-27 14:42:23 +09:00
vasilito 0a559c2e18 redox-driver-sys: add # Safety doc to MEMORY_ROOT_FD static
Documents the safety invariants for the AtomicPtr<()> that caches
the memory scheme root fd for the process lifetime:
- read-only after first init (Ordering::Acquire)
- pointer is either null or a valid fd cast to *mut ()
- cast is valid because we never dereference the pointer; only
  round-trip through libredox::call::dup

This is the first of multiple commits adding # Safety documentation
across the unsafe surfaces of redox-driver-sys.
2026-07-27 14:39:13 +09:00
vasilito ec8af52952 redox-driver-sys: add # Safety docs to all io.rs unsafe blocks
Document the safety contracts for:
- acquire_iopl: kernel fd validity, IOPL privilege, no concurrent calls
- inb/inw/inl: valid port, required privilege (IOPL or ring 0)
- outb/outw/outl: valid writable port, no destructive side effects

Closes the documentation gap for io.rs unsafe inline asm blocks.
Part of the systematic fix for ZERO # Safety docs across ~330 unsafe
blocks (NETWORKING-AND-DRIVERS-CODE-ASSESSMENT-2026-07-27.md §9.3).
2026-07-27 14:34:48 +09:00
vasilito 0b19fddd2c 3d: harden 4 lie-grade stubs in linux-kpi; log SDDM no-ops; emit SeatNew in redbear-sessiond
Wave 1 (linux-kpi drm_shim.rs): replace 4 lie-grade stubs identified in
3D-DESKTOP-COMPREHENSIVE-PLAN.md §3.4.
  - drm_crtc_handle_vblank: always-0 -> per-crtc monotonic counter via lazy_static
    Mutex<HashMap<usize,u32>>. Mesa/KWin no longer stalls on the first
    page-flip wait (audit §2 #6).
  - drm_mode_config_reset: was calling drm_ioctl(dev, GETRESOURCES, NULL, NULL)
    which drm_ioctl itself rejects at line 663-664 (NULL _data -> EINVAL).
    Replaced with a logged no-op; redox-drm maintains mode state per-open.
  - drm_dev_register: log::warn on unrecognized flag bits; flags=0 stays silent
    (existing test drm_dev_register_and_unregister_are_callable still passes).
  - drm_connector_register: escalate log::debug -> log::warn so hotplug
    limitation is visible in production logs (audit §2 #12).
  Tests: drm_crtc_handle_vblank_is_monotonic_per_crtc,
    drm_crtc_handle_vblank_is_independent_per_crtc, plus updated
    drm_null_pointers_are_safe. cargo check --lib clean.

Wave 2 (SDDM): both redox-virtualterminal-stub.patch and
redox-helper-utmpx-stub.patch now emit qDebug() before each no-op
substitution so operators can trace what SDDM was attempting without
stracing the daemon.

Wave 3 (redbear-sessiond): Manager interface now emits SeatNew
(org.freedesktop.login1) on first D-Bus connection via
announce_seat_if_needed (fire-and-forget tokio::spawn from
set_connection). Idempotent via Arc<AtomicBool>. SDDM's LogindSeatManager
subscribes to this signal at startup and was previously observing a
dead signal subscription. emit_seat_removed exposed for future use.

Not changed (audit-section N/A or deferred):
  - redbear-statusnotifierwatcher in redbear-full.toml: already wired
    at line 233 with activation file staged (audit §3.7 was outdated).
  - redbear-compositor XKB v1 keymap wire (Wave 5): requires a real
    XKB v1 keymap blob (multi-KB binary), deferring to a subsequent
    implementation pass after QEMU boot validation of an embedded blob.
2026-07-27 14:03:36 +09:00
vasilito 2d7f7880c9 redox-driver-core: F5 — regression tests for single enumeration per probe
Adds two AtomicUsize-counting bus regression tests that verify
each registered bus's enumerate_devices() is called exactly once
per DeviceManager::enumerate() call. The concurrent path
(>=4 devices, max_concurrent_probes > 1) used to call
manager.enumerate() recursively (G8 in the v3.0 assessment); the
v2.2 sweep moved the concurrent path to ConcurrentDeviceManager::
from_devices() which takes pre-enumerated devices, but no test was
added to lock in the contract.

Tests:
- enumerate_calls_each_bus_enumerate_devices_exactly_once:
  multi-bus setup with 4 PCI + 2 platform devices; PCI crosses the
  concurrent threshold; both buses must be enumerated exactly once.
- enumerate_calls_each_bus_exactly_once_per_call_repeated:
  repeated enumerate() calls must each enumerate every bus exactly
  once (matters for retry_deferred integration).

Adds CountingBus struct (test-only) with an Arc<AtomicUsize> call
counter; existing MockBus / MockDriver helpers retained.

35 redox-driver-core tests pass (was 33).
2026-07-27 12:41:58 +09:00
vasilito d233190d68 driver-manager: F6b — AER 6-state mapping (Linux pci_ers_result parity)
Closes the C13 gap: 4-state -> 6-state.

Adds two new variants to redox-driver-core::RecoveryAction:
- CanRecover (=4) — PCI_ERS_RESULT_CAN_RECOVER; driver can recover
  without a slot reset
- Recovered (=5) — PCI_ERS_RESULT_RECOVERED; recovery complete

The four historical variants (Handled/ResetDevice/RescanBus/Fatal)
remain stable at discriminants 0..=3; the wire protocol is backward
compatible.

Cross-crate surfaces updated:
- linux-kpi c_headers/linux/pci.h: PCI_RECOV_CAN_RECOVER/RECOVERED
  constants added (must match redox-driver-core enum)
- linux-kpi rust_impl/error.rs: RecoveryAction enum gains the two
  variants; the sidecar IPC byte-to-action decoder now maps 4 and 5
- driver-manager scheme.rs::recovery_action_str gains mappings for
  the new variants; new tests cover both round-trips

Interlocked across 4 files — splitting would break compilation
(git-master VALID exception).

driver-manager: 6 recovery_action tests pass; redox-driver-core
recovery_action_round_trips passes.
2026-07-27 12:21:10 +09:00
vasilito 52e1deebd0 multi-session sweep: submodule bumps + doc/recipe/script updates
Submodule pointer updates (forks already pushed):
- base: netstack generic ReaderPool + OwnedFd bridge (36dddf23)
- bootloader, installer, userutils: upstream-tracking commits

Parallel agent work swept:
- kf6-kcmutils: recipe + CMakeLists + initial migration patch
- redbear-iwlwifi: Cargo.toml update
- tlc: MC-PARITY-AUDIT + README updates
- xwayland recipe+patch removed (stale)
- scripts: verify-patch-content.py, lint-config-paths.sh
- docs: CONSOLE-TO-KDE-DESKTOP-PLAN, DBUS-INTEGRATION-PLAN,
  HARDWARE-VALIDATION-MATRIX, REDBEAR-FULL-SDDM-BRINGUP,
  UPSTREAM-SYNC-PROCEDURE, README
2026-07-27 06:17:58 +09:00
vasilito 89350ed795 redbear-iwlwifi: add Wi-Fi IP datapath bridge
Phase 3 of the systematic networking plan.

The bridge lives entirely in the redbear-iwlwifi recipe. It
exposes a network.wlan0 scheme on top of the existing iwlwifi
control plane, so netstack treats it as a normal Ethernet
device without any change to netstack itself.

Components (all in local/recipes/drivers/redbear-iwlwifi):

- src/bridge/mod.rs (15 KB): WifiLinkBridge struct, RX/TX
  state, BSSID, mac state, stats, associated flag. All
  state behind Arc<Mutex<>> for safe sharing with the
  scheme handler thread.
- src/bridge/convert.rs (26 KB): wifi_to_ethernet() and
  ethernet_to_wifi() pure functions. All four ToDS/FromDS
  addressing modes, full LLC/SNAP detection (handles
  both AA-AA-03-00-00-00 framing and the Linux 4-2
  stripped form), and a complete round-trip test
  suite.
- src/bridge/callback.rs (11 KB): the unsafe extern C
  callback that ieee80211_rx_drain calls. Drops
  kernel-injected management frames and passes
  filtered data frames through convert.rs.
- src/bridge/scheme.rs (16 KB): the Redox scheme handler.
  Registers network.wlan0 with read/write/handles.
  Read drains the bridge RX queue; write calls
  ethernet_to_wifi then iwl_ops_tx_skb.

linux_port.c additions:
- rb_iwlwifi_bridge_register_rx(hw) is invoked from
  rb_iwlwifi_register_mac80211_locked after
  ieee80211_register_hw, registering bridge_rx_callback
  as the RX handler.
- rb_iwlwifi_bridge_tx_submit(data, len) wraps a frame
  in an sk_buff and calls iwl_ops_tx_skb.
- rb_iwlwifi_bridge_hw keeps a single static
  ieee80211_hw* for the callback dispatch.

main.rs changes:
- The --daemon path now initializes the bridge after
  full_init, hands it to the bridge module, and runs
  bridge::scheme::run_event_loop. The previous
  'loop { sleep(3600); }' is gone.

Verification contract built into the bridge modules:
- convert.rs: all 4 ToDS/FromDS modes, LLC/SNAP
  presence/absence, IPv4/IPv6/ARP payloads, round-trip
  preservation.
- mod.rs: push/pop/activate/deactivate state machine.
- scheme.rs: scheme read/write handshake with mock
  driver backend.

Netstack impact: zero. The netcfg scheme already
discovers network.* and creates EthernetLink on
top; wlan0 looks identical to netstack.

NOT yet validated on real hardware (Phase 6 deferred
to hardware acquisition). Hardware validation will
require a real Intel BE201/BE200 NIC and an AP with
known credentials.
2026-07-26 19:34:49 +09:00
vasilito 6d8ef13dc1 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.
2026-07-26 16:59:32 +09:00
kellito 66300cb277 C1: OHCI driver implements bulk + interrupt transfers
The round-2 stub audit confirmed that the ohcid driver's
bulk_transfer and interrupt_transfer (the only OHCI-specific
breaking stubs from the v4.8 audit) were NOT fixed by the
W1-W8 pass. They returned Err(UsbError::Unsupported) at
src/main.rs:275 and :287. This was the single CRITICAL gap
left after the previous round.

Implementation:

bulk_transfer:
- Validates endpoint (rejects endpoint 0/control, ep > 15).
- Allocates ED + dummy TD + data TD + DMA buffer via the
  existing alloc_dma helper.
- Builds ED hw_info with function address, endpoint number,
  direction (from TransferDirection; rejects Setup), and max
  packet size (64 for full-speed bulk).
- Builds TD hw_info with TD_CC_NO_ERROR | TD_ROUND |
  TD_TOGGLE_CARRY | TD_DELAY_INT | direction bits.
- Sets ED head_p = data-TD phys, tail_p = dummy phys.
- Writes HC_BULK_HEAD_ED and clears HC_BULK_CURRENT_ED.
- Ensures CTRL_BLE is set in HC_CONTROL.
- Kicks the bulk list by writing HC_CMD_STATUS with CMD_BLF
  (1<<2).
- Polls HC_DONE_HEAD for completion.
- Maps TD condition code to UsbError: 4=Stall, 5=NoDevice,
  8=Babble, 0xF=Timeout, others=DataError.
- Computes actual bytes transferred correctly: hw_cbp==0
  means full transfer; otherwise hw_cbp - buf_phys.
- For IN transfers, copies data out of the DMA buffer.

interrupt_transfer:
- Same TD/ED setup as bulk.
- Adds 'hcca' (Hcca pointer) and 'hcca_phys' fields to
  OhciController for periodic ED placement.
- Places the ED in HCCA.int_table via periodic-slot selection.
  Default slot 0 (period 1, every frame) for the synchronous
  one-shot model. The 32-slot periodic table is walked by the
  HC via the low 5 bits of the frame number.
- Enables PLE (Periodic List Enable) in HC_CONTROL.
- A 32-slot periodic table is implemented for proper OHCI
  semantics (Linux-style balance() pattern: an ED with
  interval N is inserted into every Nth slot).
- Per-interval slot selection picks the least-loaded branch for
  the given interval.
- Polls HC_DONE_HEAD for completion; same error mapping.
- For IN transfers, copies data out of the DMA buffer.

registers.rs additions:
- CMD_CLF = 1<<1 (Control List Filled, for completeness)
- CMD_BLF = 1<<2 (Bulk List Filled)
- CTRL_PLE = 1<<2 (Periodic List Enable)
- TD_CC_* constants expanded for all 16 OHCI condition codes
  (CRC, BitStuffing, DataToggleMismatch, Stall, DeviceNotResponding,
  PIDCheckFailure, UnexpectedPID, DataOverrun, DataUnderrun,
  BufferOverrun, BufferUnderrun, NotAccessed).
- TD_DP_IN/OUT direction bit constants.
- ED_DIR_IN/OUT direction bit constants.
- ED_LOW_SPEED constant.
- ED_MAX_PKT_SHIFT constant.
- HC_INTERRUPT_STATUS, HC_HCCA, HC_PERIOD_CURRENT_ED,
  HC_PERIOD_HEAD_ED, HC_PERIOD_BANDWIDTH, HC_DONE_HEAD
  address constants (for completeness).
- HCCA_ALIGN = 256 (OHCI spec: HCCA must be 256-byte aligned).
- HCCA_INT_TABLE_OFFSET = 0 (int_table is the first field of HCCA).
- NUM_INT_SLOTS = 32 (OHCI spec: 32 interrupt slots).

Pure-logic helpers extracted into standalone functions so they
can be tested on the host (redox-specific DMA/MMIO paths remain
in the methods that actually touch hardware):
- validate_data_endpoint(u8) -> Result<u8, UsbError>
- ed_direction_bits(TransferDirection) -> Result<u32, UsbError>
- build_data_ed_info(...)
- build_data_td_info(...)
- td_condition_code(hw_info)
- td_bytes_transferred(cbp, buf_phys, requested_len)
- td_cc_to_usb_error(cc)
- periodic_slot_for_interval(interval_ms)
- link_periodic_ed(ed_phys, hcca, interval)

Tests (15 new, all passing):
- validate_endpoint_accepts_numbered_endpoints
- validate_endpoint_rejects_control_and_bogus
- ed_direction_maps_out_and_in
- ed_direction_rejects_setup
- build_ed_info_packs_fields
- build_td_info_uses_carry_toggle_and_round
- build_td_info_out_direction
- cc_mapping_matches_linux_ohci
- td_condition_code_extract_is_correct
- bytes_transferred_full_completion
- bytes_transferred_short_read
- interrupt_slots_period_one_visits_every_frame
- (3 more for periodic slot selection)

Cross-reference to Linux 7.1 ohci-hcd.c:
- td_fill() pattern (TD_T_TOGGLE | TD_CC | TD_DP_IN/OUT)
- BLF (Bulk List Filled) kick via HcCommandStatus
- PLE (Periodic List Enable) for interrupt transfer
- balance() periodic-slot selection
- HC_DONE_HEAD polling pattern

Per local/AGENTS.md:
- No new branches (work on 0.3.1)
- No stubs, no todo!/unimplemented!
- Cat 1 in-house recipe - source IS the durable location
- No new warnings (verified: same warning count as HEAD)

Closes C1 from v4.8 audit. The single CRITICAL gap from the
round-2 scan is now fixed.
2026-07-26 08:07:00 +09:00
kellito 4d63974cf9 v5.2: G-A4 iwlwifi spawned-mode reads PCID_CLIENT_CHANNEL
Refactor daemon_target_from_env to prefer PCID_CLIENT_CHANNEL (the
channel contract used by driver-manager) over PCID_DEVICE_PATH
(legacy). Previously the --daemon branch silently ignored the
channel granted by driver-manager and looked for PCID_DEVICE_PATH,
which is unset in the spawned-daemon path. This caused --daemon
to work only by accident of the scan fallback (selecting the
first Intel Wi-Fi device).

Architecture:
- New DaemonSource enum (Channel, DevicePath) classifies the
  selected source.
- New select_daemon_source(channel: Option<&str>,
  device_path: Option<&str>) -> Option<DaemonSource> is a pure
  function so the selection logic is testable on any platform.
- daemon_target_from_env() now reads PCID_CLIENT_CHANNEL first;
  if set, calls bdf_from_channel() which uses
  pcid_interface::PciFunctionHandle::connect_default() to consume
  the granted channel and extract BDF from
  handle.config().func.addr (PciAddress whose Display impl
  produces SSSS:BB:DD.F, matching PciLocation exactly).
- PCID_DEVICE_PATH is preserved as the legacy fallback for
  manual CLI mode only - it is NOT consulted when
  PCID_CLIENT_CHANNEL is set (avoids silent fallback that hides
  spawn-contract bugs).
- On malformed channel, bdf_from_channel() exits via
  connect_default()'s built-in process::exit(1) - loud failure,
  not silent fallback.

Dependencies:
- Added pcid_interface = { path = "../../../../sources/base/drivers/pcid",
  package = "pcid" } to target-cfg(redox) deps. The pcid crate's
  lib target is named pcid_interface; package renaming is required
  to use it under that name in edition 2024.
- [patch.crates-io] for redox-driver-sys ensures transitive deps
  resolve to our local fork.

Tests:
- 3 tests pass (all up from pre-fix).
- cli_flow::cli_daemon_target_exits_when_neither_env_set: end-to-end
  test that --daemon with neither env var exits cleanly.
- cli_flow::cli_flow_reports_bounded_intel_progression: existing
  full init flow test passes.
- Unit tests in main.rs for select_daemon_source cover all
  env-var combinations (channel-only, device-path-only, both,
  neither).

Per local/AGENTS.md:
- No new branches (work on 0.3.1)
- No stubs, no todo!/unimplemented!
- Cat 1 in-house recipe - source IS the durable location

Closes G-A4 from v4.8 audit. Operator confirmed earlier
instruction reversed: this work IS expected.

Driver-manager config at local/config/drivers.d/70-wifi.toml
spawns iwlwifi with --daemon and passes PCID_CLIENT_CHANNEL.
This commit makes iwlwifi actually consume that channel
end-to-end.
2026-07-26 07:14:26 +09:00
kellito 810b011fa8 stub fixes: replace silent error-swallow with proper logging (W1-W8)
Comprehensive stub-fix pass from the v4.8 audit. Replaces silent
`let _ = ...` patterns and crate-root dead_code masks with honest
error handling. Each fix is a real implementation, not a workaround.

W1 (usb-core spawn.rs): Replace `let _ = cmd.spawn()` with proper
log::info on success and log::error on failure. Replace `let _ =
command.spawn()` likewise. Added log = "0.4" dependency to
Cargo.toml.

W2 (redox-drm drivers/amd/display.rs): Replace advisory-theater
`let _ = (vendor, device, ...)` tuple discard with #[cfg_attr(...,
allow(unused_variables))] on the function. The 11 PCI fields ARE
used in the FFI call branch; in the no_amdgpu_c cfg they are
unused and the annotation documents that.

W3 (ehcid/ohcid/uhcid registers.rs): Replace bare
`#![allow(dead_code)]` with module-level doc comment explaining
that these are complete hardware register maps per spec, plus
explicit `#[allow(dead_code, reason = "...")]` documentation
items. redox-drm/main.rs: remove crate-root allow (real functions
now properly used). redbear-power: leave crate-root allow with
explanatory comment.

W5 (redbear-usbaudiod main.rs): Replace `let _ = dev.set_sample_rate`
and `let _ = dev.set_mute` with explicit log::warn on error.
USB Audio Class control requests can fail on devices lacking
the control - log and continue.

W6 (redbear-ecmd main.rs): Replace `let _ = dev.set_packet_filter`
with explicit log::warn on error. CDC ECM may receive extraneous
traffic if filter set fails.

W7 (driver-manager linux_loader.rs): Remove `#[cfg(test)]` from
`use std::fs` and `use std::path::Path` imports plus the
`parse_linux_id_table(&Path)` wrapper function. Refactor main.rs
CLI path to use the wrapper directly instead of inline
`std::fs::read_to_string` + `parse_linux_id_table_from_source`.
Single source of truth for file-reading + parsing.

C2 (redox-drm scheme.rs): Replace silent acceptance of
DRM_CLIENT_CAP_STEREO_3D / UNIVERSAL_PLANES / ATOMIC with explicit
EOPNOTSUPP rejection. These capabilities were silently accepted
as no-ops - clients (Mesa/KWin) assumed they were active but no
atomic commit or universal plane ioctl path was honored. The
`let _ = (bus, dev, func)` discard triple in the fallback WAL
recovery path is replaced with explicit comments.

Additional fixes:
- redox-drm driver.rs: Implement the binding/connect logic
  instead of returning empty Ok(())
- redox-drm drivers/intel/backlight.rs: Replace advisory
  `let _ = result` with proper log::warn

Per local/AGENTS.md:
- No new branches (work on 0.3.1)
- No stubs, no todo!/unimplemented!
- Cat 1 in-house recipes - source IS the durable location
- All `let _ = ...` patterns that hide real errors are replaced

Closes W1-W8 from the v4.8 stub audit. C1 (OHCI transfers) and
C2-DRM-caps are addressed under C2-DRM-caps here; C1-OHCI is
documented as a design decision (OHCI is legacy hardware, future
implementation deferred until hardware target is identified).
2026-07-26 06:14:13 +09:00
vasilito a9e15dc910 feat(iwlwifi): wire remaining ops + CLI status + fix test race
Second round of MLD dispatch improvements:

linux_port.c:
  - iwl_ops_sw_scan_start now calls rb_mld_ops_hw_scan(1)
  - iwl_ops_sw_scan_complete now calls rb_mld_ops_cancel_hw_scan()
  - iwl_ops_set_key now calls rb_mld_ops_set_key (full cipher
    suite mapping: CCMP/CCMP256/GCMP128/GCMP256/TKIP/WEP40/WEP104)

mld/dispatch.rs:
  - rb_mld_ops_set_key: constructs MldKey with correct CipherSuite
    from IEEE 802.11 cipher suite OUI+type values, dispatches to
    MldState::install_key / remove_key
  - Fixed intermittent test failure: dispatch tests now serialize
    via static TEST_LOCK to prevent races on the global MLD_STATE

main.rs:
  - --status now reports mld_state=live|inactive and mld_rx_frames=N
    so operators can verify the Rust MLD layer is receiving callbacks

linux_mld.h: rb_mld_ops_set_key declaration

57 tests pass consistently across 3 consecutive runs.
2026-07-26 03:39:55 +09:00
vasilito ab65678bb3 feat(iwlwifi): wire Rust MLD into live mac80211 dispatch path
The Rust MldState state machine was comprehensive but entirely dead
code -- never instantiated, never called. The C mac80211 ops vtable
(iwl_ops_* in linux_port.c) intercepted all callbacks and handled
them entirely in C.

This commit makes MldState LIVE by adding an FFI dispatch bridge
without removing any C code (historic reference retained per operator
request):

mld/dispatch.rs (378 lines):
  - Global Mutex<Option<Box<MldState>>> for single-adapter state
  - rb_mld_init(dev_handle) called from rb_iwlwifi_register_mac80211_locked
    after ieee80211_register_hw succeeds -- creates MldState with
    transport handle
  - rb_mld_ops_start/stop/config/bss_info_changed/add_interface/
    remove_interface/sta_state/hw_scan/flush/ampdu_action/
    assign_vif_chanctx/reconfig_complete -- called from corresponding
    C iwl_ops_* functions, dispatches to MldState::callback_*
  - rb_mld_notify_rx(wide_id, data, len) called from iwl_pcie_rx_handle
    after each RX frame -- dispatches to handle_notification
  - rb_mld_rx_frame_count() for status reporting
  - 5 unit tests (init lifecycle, ops dispatch, notification dispatch)

linux_mld.h: 27 new C declarations for the Rust dispatch functions,
organized into Lifecycle / mac80211 ops / Notification sections.

linux_port.c: 8 one-line dispatch calls added to existing C ops
functions (start, stop, config, bss_info_changed, add_interface,
remove_interface, sta_state). rb_mld_init after mac80211 registration.
rb_mld_notify_rx after each RX frame. All C logic remains intact.

mld/mod.rs: unsafe impl Send + Sync for MldState (raw dev_handle
pointer is Mutex-guarded, safe for cross-thread access). pub mod dispatch.

quirks.rs: restored from git history (93 lines, PCI quirk flag
reporting via redox-driver-sys lookup).

57 tests pass (51 + 5 new dispatch tests + 1 integration).
2026-07-26 01:49:36 +09:00