diff --git a/AGENTS.md b/AGENTS.md index ba36796e..9a5e0e9c 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -1,6 +1,6 @@ # RED BEAR OS BUILD SYSTEM — PROJECT KNOWLEDGE BASE -**Generated:** 2026-04-11 (AMD-first reassessment) +**Generated:** 2026-04-12 (P1/P2 complete) **Toolchain:** Rust nightly-2025-10-03 (edition 2024) **Architecture:** Microkernel OS in Rust, ~38k files, ~294k LoC Rust **Target Hardware**: AMD64 bare metal, AMD GPU (RDNA2/RDNA3), then Intel @@ -62,6 +62,7 @@ redox-master/ | Cross-toolchain setup | `mk/prefix.mk`, `prefix/x86_64-unknown-redox/` | Downloads Clang/LLVM toolchain | | Display server | Orbital: `recipes/gui/orbital/` | Userspace scheme-based display server | | GPU/graphics stack | `recipes/libs/mesa/` | OSMesa + LLVMpipe (software only) | +| GPU hardware drivers | `local/recipes/gpu/redox-drm/source/` | AMD + Intel DRM/KMS via redox-driver-sys | | Boot config | `config/*.toml` | TOML hierarchy, include-based | ## BUILD COMMANDS @@ -222,15 +223,15 @@ See `local/docs/AMD-FIRST-INTEGRATION.md` for the full plan. | ACPI power | ✅ | `\_PS0`/`\_PS3`/`\_PPC` AML methods available | | x2APIC/SMP | ✅ | Multi-core works | | IOMMU | ❌ | No AMD-Vi support | -| AMD GPU | ❌ | Only VESA/GOP, no acceleration | +| AMD GPU | 🚧 | MMIO mapped, DC port compiles, MSI-X wired, no hardware validation yet | ### Phased Roadmap | Phase | Duration | Delivers | |-------|----------|----------| | ~~P0: Fix ACPI for AMD~~ | ~~4-6 weeks~~ | ✅ Complete — boots on modern AMD bare metal | -| P1: Driver infrastructure | 8-12 weeks | redox-driver-sys + linux-kpi + firmware-loader | -| P2: AMD GPU display | 12-16 weeks | redox-drm + AMD DC modesetting → scheme:drm | +| ~~P1: Driver infrastructure~~ | ~~8-12 weeks~~ | ✅ Complete — redox-driver-sys + linux-kpi + firmware-loader + pcid /config + MSI-X (compiles) | +| ~~P2: AMD GPU display~~ | ~~12-16 weeks~~ | ✅ Complete — redox-drm + AMD DC port + Intel driver (compiles, no HW validation) | | P3: POSIX + input | 4-8 weeks | relibc gaps + evdevd (parallel with P1/P2) | | P4: Wayland compositor | 4-6 weeks | Smithay Redox backends | | P5: Full amdgpu | 16-24 weeks | Complete GPU driver via LinuxKPI (parallel) | @@ -240,16 +241,17 @@ See `local/docs/AMD-FIRST-INTEGRATION.md` for the full plan. ### Critical Path ``` -P0 (ACPI boot) ✅ DONE → P1 (driver infra) → P2 (AMD display) → P4 (Wayland) → P6 (KDE) - P3 (POSIX+input) ──┘ - P5 (full amdgpu, parallel) +P0 (ACPI boot) ✅ DONE → P1 (driver infra) ✅ DONE → P2 (AMD display) ✅ DONE → P4 (Wayland) → P6 (KDE) + P3 (POSIX+input) ──────────────┘ + P5 (full amdgpu, parallel) ``` -### New Crates Needed -1. `redox-driver-sys` — Safe Rust wrappers for scheme:memory, scheme:irq, scheme:pci -2. `linux-kpi` — C headers translating Linux kernel APIs → redox-driver-sys -3. `redox-drm` — DRM scheme daemon (AMD DC port) -4. Firmware loader daemon — scheme:firmware for AMD GPU blobs +### Custom Crates (P1/P2) +1. `redox-driver-sys` — `local/recipes/drivers/redox-driver-sys/source/` — Safe Rust wrappers for scheme:memory, scheme:irq, scheme:pci +2. `linux-kpi` — `local/recipes/drivers/linux-kpi/source/` — C headers translating Linux kernel APIs → redox-driver-sys +3. `redox-drm` — `local/recipes/gpu/redox-drm/source/` — DRM scheme daemon (AMD + Intel drivers) +4. `firmware-loader` — `local/recipes/system/firmware-loader/source/` — scheme:firmware for GPU blobs +5. `amdgpu` — `local/recipes/gpu/amdgpu/source/` — AMD DC C port with linux-kpi compat All custom work goes in `local/` — see `local/AGENTS.md` for overlay usage. diff --git a/README.md b/README.md index 8e4f2c88..73a077b4 100644 --- a/README.md +++ b/README.md @@ -22,9 +22,10 @@ Red Bear OS is a derivative of [Redox OS](https://www.redox-os.org) — a genera | Component | Status | Detail | |-----------|--------|--------| -| AMD GPU driver (amdgpu) | 🚧 In progress | LinuxKPI compat layer + AMD DC modesetting | +| AMD GPU driver (amdgpu) | ✅ Compiles | LinuxKPI compat + AMD DC modesetting + MSI-X (no HW validation) | +| Intel GPU driver | ✅ Compiles | Display pipe modesetting + MSI-X (no HW validation) | | ext4 filesystem | ✅ Compiles | Read/write ext4 alongside RedoxFS | -| ACPI for AMD bare metal | ⚠️ Partial | x2APIC, DMAR, IVRS, MCFG parsing | +| ACPI for AMD bare metal | ✅ Complete | x2APIC, MADT, FADT shutdown/reboot, power methods | | Custom branding | ✅ | Boot identity, hostname, os-release | | POSIX gaps (relibc) | 🚧 In progress | eventfd, signalfd, timerfd, open_memstream | diff --git a/docs/_CUB_RBPKGBUILD_IMPL_PLAN.md b/docs/_CUB_RBPKGBUILD_IMPL_PLAN.md new file mode 100644 index 00000000..73f010c9 --- /dev/null +++ b/docs/_CUB_RBPKGBUILD_IMPL_PLAN.md @@ -0,0 +1,368 @@ +Red Bear OS Packaging System — Formal Spec v0.1 + +0. Guiding Principles +Native-first +All builds target: x86_64-unknown-redox +All install artifacts: pkgar packages +Cookbook is the build engine +RBPKGBUILD = thin wrapper over Cookbook recipe +PKGBUILD is input, not execution +Never execute arbitrary PKGBUILD on host +Always convert → RBPKGBUILD → Cookbook +Single tool +cub = one CLI binary with subcommands/flags +Deterministic builds +Controlled env +No implicit host dependencies +Security-first +Sandbox builds +Review BUR packages before install + +1. RBPKGBUILD Specification + +1.1 File Format +Format: TOML +Filename: RBPKGBUILD +Versioned schema +format = 1 + +1.2 Top-Level Sections +format = 1 + +[package] +[source] +[dependencies] +[build] +[install] +[patches] +[compat] +[policy] + +1.3 [package] +[package] +name = "ripgrep" +version = "14.1.0" +release = 1 +description = "Fast recursive search tool" +homepage = "https://github.com/BurntSushi/ripgrep" +license = ["MIT", "Unlicense"] +architectures = ["x86_64-unknown-redox"] +maintainers = ["name "] +Rules +name: lowercase, [a-z0-9-_]+ +version: upstream version +release: integer (Red Bear-specific revision) +architectures: must include x86_64-unknown-redox + +1.4 [source] +[source] +sources = [ + { type = "tar", url = "...", sha256 = "..." }, + { type = "git", url = "...", rev = "..." } +] +Supported types +tar +git +Rules +All sources must be verifiable (hash or commit) +No implicit downloads during build + +1.5 [dependencies] +[dependencies] +build = ["cargo", "rust"] +runtime = [] +check = [] +optional = [] +provides = [] +conflicts = [] +Rules +Names must resolve via system mapping +Must not reference Arch package names directly + +1.6 [build] + +Maps directly to Cookbook templates. + +[build] +template = "cargo" # or configure, cmake, meson, custom +Optional fields +cargo +[build] +template = "cargo" +release = true +features = [] +configure +[build] +template = "configure" +args = ["--prefix=/usr"] +cmake +[build] +template = "cmake" +build_dir = "build" +custom +[build] +template = "custom" + +prepare = [ + "patch -p1 < patches/fix.patch" +] + +build = [ + "make -j$CORES" +] + +check = [ + "make test" +] + +install = [ + "make DESTDIR=$DESTDIR install" +] + +1.7 [install] + +Declarative install mapping. + +[install] +bins = [ + { from = "target/.../rg", to = "/usr/bin/rg" } +] + +libs = [] +headers = [] +docs = ["README.md"] +man = [] +Rules +All paths relative to build output +Must install into staged root (DESTDIR) + +1.8 [patches] +[patches] +files = [ + "patches/0001-fix-redox.patch" +] + +1.9 [compat] + +Tracks conversion origin. + +[compat] +imported_from = "aur" +original_pkgbuild = "PKGBUILD" +conversion_status = "partial" # full | partial | manual +target = "x86_64-unknown-redox" + +1.10 [policy] +[policy] +allow_network = false +allow_tests = true +review_required = true + +2. .RBSRCINFO (Metadata Cache) +Purpose +Fast search/index +No recipe parsing needed +Format (INI-like) +pkgname = ripgrep +pkgver = 14.1.0 +pkgrel = 1 +pkgdesc = Fast recursive search tool +arch = x86_64-unknown-redox + +depends = +makedepends = cargo rust + +source = https://... +sha256sums = ... + +provides = +conflicts = + +3. BUR Repository Spec +Structure +ripgrep/ + RBPKGBUILD + .RBSRCINFO + patches/ + import/ + PKGBUILD + report.txt + +4. cub CLI Specification + +4.1 General +Single binary: cub +Rust implementation +Subcommands via flags (not separate tools) + +4.2 Core Commands +Search +cub -Ss +Install +cub -S + +Resolution order: + +official repo +BUR (RBPKGBUILD) +AUR import (optional flag) +Build local +cub -B . +Fetch recipe +cub -G +Inspect +cub -Pi +Update system +cub -Sua +Clean cache +cub -Sc +Convert AUR +cub --import-aur + +Outputs: + +RBPKGBUILD +patches/ +report.txt + +5. PKGBUILD → RBPKGBUILD Conversion + +5.1 Conversion Stages + +Stage 1 — Parse + +Extract: + +pkgname +pkgver +depends +source +functions + +Stage 2 — Normalize +Resolve arrays +Expand variables +Strip bash constructs + +Stage 3 — Map + +PKGBUILD RBPKGBUILD +pkgname package.name +pkgver package.version +depends dependencies.runtime +makedepends dependencies.build +source source.sources + +Stage 4 — Detect build system + +Patterns: + +Pattern Template +cargo build cargo +./configure configure +cmake cmake +meson meson +none custom + +Stage 5 — Generate RBPKGBUILD +Fill required fields +Insert detected template +Add compat section + +Stage 6 — Patch generation + +If: + +/usr/lib/systemd +/proc +systemctl + +→ generate: + +patch stub +warning entry +Stage 7 — Report + +report.txt + +Conversion: PARTIAL + +Warnings: +- Uses systemd +- Hardcoded /usr/lib + +Actions required: +- Patch install paths +- Remove systemctl usage + +5.2 Conversion Modes +Mode Description +full fully automated +partial needs patches +manual user intervention + +6. Build Execution +Environment +TARGET=x86_64-unknown-redox +GNU_TARGET=x86_64-redox + +DESTDIR=/build/stage +PREFIX=/usr + +CORES=8 +Sandbox Rules +No network after fetch +Isolated filesystem +No host writes +Controlled PATH +Execution Flow +cub + → parse RBPKGBUILD + → generate Cookbook recipe + → run build + → stage files + → create pkgar + → install + +7. Dependency Mapping +Mapping file +[mapping] +glibc = "relibc-compat" +base-devel = "build-base" + +8. Error Handling +Hard Fail +Missing source hash +Unknown build template +Unsupported architecture +Soft Fail (warn) +Linux-specific paths +missing tests +partial conversion + +9. Security Model +BUR = untrusted +Require review on first install +Signed packages preferred +Build sandbox enforced + +10. MVP Scope +MUST implement +RBPKGBUILD parser +Cookbook adapter +pkgar integration +cub CLI core commands +basic AUR conversion +dependency mapping +sandbox build +MUST NOT implement yet +full PKGBUILD shell compatibility +split packages +pacman compatibility +hook system + +11. Final Definition + +RBPKGBUILD is a declarative Red Bear build wrapper over Cookbook recipes. +cub is a Rust CLI tool that manages installation, building, and conversion from AUR PKGBUILD into RBPKGBUILD, using BUR as the community repository. +All builds target x86_64-unknown-redox and produce pkgar packages. diff --git a/local/AGENTS.md b/local/AGENTS.md index 5e8eba01..77c59afd 100644 --- a/local/AGENTS.md +++ b/local/AGENTS.md @@ -71,13 +71,13 @@ redox-master/ ← git pull updates mainline Redox │ │ ├── core/ ← ext4d (ext4 filesystem scheme daemon + mkfs tool) │ │ ├── branding/ ← redbear-release (os-release, hostname, motd) │ │ ├── drivers/ ← redox-driver-sys, linux-kpi -│ │ ├── gpu/ ← redox-drm (AMD + Intel display drivers) +│ │ ├── gpu/ ← redox-drm (AMD + Intel display drivers), amdgpu (C port) │ │ ├── system/ ← evdevd, udev-shim, firmware-loader, redbear-meta │ │ ├── wayland/ ← Wayland compositor (Phase 4) │ │ └── kde/ ← KDE Plasma (Phase 6) │ ├── patches/ │ │ ├── kernel/ ← Kernel patches (ACPI, x2APIC) -│ │ ├── base/ ← Base patches (acpid fixes, power methods) +│ │ ├── base/ ← Base patches (acpid fixes, power methods, pcid /config endpoint) │ │ ├── relibc/ ← relibc patches (POSIX: eventfd, signalfd, timerfd) │ │ ├── bootloader/ ← Bootloader patches │ │ └── installer/ ← Installer patches (ext4 filesystem support) @@ -224,7 +224,7 @@ local/Assets/ | loading background.png | Boot splash | Convert to framebuffer-compatible format, display before orbital starts | | loading background.png | Login screen | Set as orblogin/orbital background | -**Current status**: Assets are committed to git. Not yet integrated into the build — requires bootloader and display server changes (Phase 2+). +**Current status**: Assets are committed to git. Not yet integrated into the build — requires bootloader and display server integration (P2 hardware validation). ## ANTI-PATTERNS diff --git a/local/docs/ACPI-FIXES.md b/local/docs/ACPI-FIXES.md index 6f89dc75..5343dc6a 100644 --- a/local/docs/ACPI-FIXES.md +++ b/local/docs/ACPI-FIXES.md @@ -20,15 +20,15 @@ P0 ACPI work is **complete**. Kernel patch is 574 lines, base/acpid patch is 558 | DSDT (Differentiated System Description Table) | Parsed by `acpi` crate AML interpreter | Working | Platform-specific device config via AML bytecode | | SSDT (Secondary System Description Table) | Parsed by `acpi` crate AML interpreter | Working | Secondary AML tables (hotplug, etc.) | | FACP/FADT | ✅ Full parse in acpid | ✅ Done | PM registers, reset register, sleep states, `\_S5` | -| IVRS (AMD-Vi IOMMU) | Removed (broken stub) | Deferred to P2+ | Needs real AMD IOMMU implementation | -| MCFG (PCI Express config space) | Removed (broken stub) | Deferred to P2+ | Handled by pcid instead | +| IVRS (AMD-Vi IOMMU) | Removed (broken stub) | Deferred to P5+ | Needs real AMD IOMMU implementation | +| MCFG (PCI Express config space) | Removed (broken stub) | ✅ Handled by pcid | pcid /config endpoint provides direct PCI config space access | | DBG2 (Debug port) | Not implemented | Low | Serial debug port discovery | | BGRT (Boot graphics) | Not implemented | Low | Boot logo preservation | | FPDT (Firmware perf data) | Not implemented | Low | Boot performance metrics | -IVRS and MCFG were previously listed as "implemented" but the stubs were broken. They have -been removed from acpid. IVRS needs a real AMD IOMMU driver (P2+ scope). MCFG is better -handled by pcid discovering PCIe config space directly. +IVRS was previously listed as "implemented" but the stub was broken. It has been removed +from acpid. IVRS needs a real AMD IOMMU driver (P5+ scope). MCFG is now handled by +pcid's /config endpoint (P1 complete) which provides direct PCI config space access. ## Implemented ACPI Tables diff --git a/local/docs/AMD-FIRST-INTEGRATION.md b/local/docs/AMD-FIRST-INTEGRATION.md index 8ba1be5e..dfe30719 100644 --- a/local/docs/AMD-FIRST-INTEGRATION.md +++ b/local/docs/AMD-FIRST-INTEGRATION.md @@ -23,11 +23,11 @@ the LinuxKPI compatibility approach — a clean Rust rewrite would take 5+ years |-----------|--------|--------| | UEFI boot | ✅ Works | x86_64 UEFI bootloader functional | | AMD CPUs | ✅ Works | AMD 32/64-bit supported, Ryzen Threadripper verified | -| ACPI | ⚠️ Incomplete | Framework Laptop 16 crashes on unimplemented ACPI function | +| ACPI | ✅ Complete | RSDP/SDT checksums, MADT types 0x4/0x5/0x9/0xA, LVT NMI, FADT shutdown/reboot | | x2APIC | ✅ Works | Auto-detected via CPUID, APIC/SMP functional | | HPET | ✅ Works | Timer initialized from ACPI | | IOMMU | ❌ Missing | No VT-d or AMD-Vi support | -| AMD GPU | ❌ Missing | Only VESA/GOP framebuffer, no acceleration | +| AMD GPU | 🚧 In progress | MMIO mapped, DC port compiles, MSI-X wired, no hardware validation yet | | Wi-Fi/BT | ❌ Missing | No wireless support | | USB | ⚠️ Variable | Some USB controllers work, others don't | @@ -223,6 +223,57 @@ ONLY the display/modesetting portion first, using linux-kpi headers. --- +## P1/P2 IMPLEMENTATION STATUS (2026-04-12) + +### P1: Driver Infrastructure — COMPLETE (compiles) + +| Component | Status | Files | +|-----------|--------|-------| +| redox-driver-sys | ✅ | `local/recipes/drivers/redox-driver-sys/source/` — PCI, IRQ (MSI-X), MMIO, DMA | +| linux-kpi | ✅ | `local/recipes/drivers/linux-kpi/source/` — C compat headers + Rust shims | +| firmware-loader | ✅ | `local/recipes/system/firmware-loader/source/` — scheme:firmware daemon | +| pcid /config endpoint | ✅ | `local/patches/base/P0-pcid-config-endpoint.patch` — raw PCI config space via scheme:pci | +| MSI-X interrupt support | ✅ | `local/recipes/gpu/redox-drm/source/src/drivers/interrupt.rs` — shared MSI-X/legacy abstraction | +| Intel pcid-spawner config | ✅ | `local/config/pcid.d/intel_gpu.toml` — auto-detect Intel GPUs | + +### P2: AMD GPU Display — COMPLETE (compiles, no HW validation) + +| Component | Status | Files | +|-----------|--------|-------| +| redox-drm daemon | ✅ | `local/recipes/gpu/redox-drm/source/` — DRM scheme daemon | +| AMD driver (Rust) | ✅ | `local/recipes/gpu/redox-drm/source/src/drivers/amd/mod.rs` | +| AMD DisplayCore (FFI) | ✅ | `local/recipes/gpu/redox-drm/source/src/drivers/amd/display.rs` | +| AMD PCI stubs (dynamic) | ✅ | `local/recipes/gpu/amdgpu/source/redox_stubs.c` — populated from Rust via FFI | +| AMD DC init (C) | ✅ | `local/recipes/gpu/amdgpu/source/amdgpu_redox_main.c` — modesetting, connector detect | +| AMD glue headers | ✅ | `local/recipes/gpu/amdgpu/source/redox_glue.h` — Linux compat surface | +| GTT manager | ✅ | `local/recipes/gpu/redox-drm/source/src/drivers/amd/gtt.rs` | +| Ring buffer | ✅ | `local/recipes/gpu/redox-drm/source/src/drivers/amd/ring.rs` | +| GEM buffer mgmt | ✅ | `local/recipes/gpu/redox-drm/source/src/gem.rs` | +| DMA-BUF | ✅ | `local/recipes/gpu/redox-drm/source/src/dmabuf.rs` | +| Intel driver | ✅ | `local/recipes/gpu/redox-drm/source/src/drivers/intel/mod.rs` + `display.rs` | + +### Build Verification + +All crates compile with `cargo check` (0 errors): +- `redox-driver-sys` ✅ +- `linux-kpi` ✅ +- `redox-drm` ✅ +- `firmware-loader` ✅ +- `evdevd` ✅ +- `udev-shim` ✅ +- `ext4d` ✅ + +### Next Steps (P2 → P3) + +P2 code compiles but has NOT been validated on real hardware. Remaining: +1. Flash Red Bear OS image to USB, boot on AMD hardware with RDNA2/RDNA3 GPU +2. Verify pcid exposes `/scheme/pci/{addr}/config` and MSI-X vectors allocate +3. Verify redox-drm detects GPU, maps MMIO, initializes DC +4. Test connector detection and modesetting via scheme:drm +5. Begin P3 (POSIX gaps + evdevd) in parallel with hardware validation + +--- + ## PHASE 3: INPUT + POSIX (4-8 weeks, parallel with Phase 2) ### P3-1: relibc POSIX Gaps (2-4 weeks) diff --git a/local/docs/P2-AMD-GPU-DISPLAY.md b/local/docs/P2-AMD-GPU-DISPLAY.md index 10d669cd..b2fde849 100644 --- a/local/docs/P2-AMD-GPU-DISPLAY.md +++ b/local/docs/P2-AMD-GPU-DISPLAY.md @@ -25,7 +25,7 @@ DRM scheme daemon. Registers scheme:drm/card0. - GEM: buffer object create/mmap/close - Dispatches to AMD driver backend -### amdgpu source (local/recipes/gpu/amdgpu-source/) +### amdgpu C port (local/recipes/gpu/amdgpu/source/) AMD GPU driver source extracted from Linux 7.0-rc7: - drivers/gpu/drm/amd/ — full AMD driver (269k lines) - drivers/gpu/drm/ttm/ — TTM memory manager @@ -38,11 +38,10 @@ Compiles AMD DC display code against linux-kpi headers with -D__redox__: - redox_glue.h — type compatibility, function stubs, macro replacements - redox_stubs.c — C implementations of Linux kernel API stubs - amdgpu_redox_main.c — daemon entry point replacing module_init -- Makefile.redox — standalone build for development ## Build Integration -Config: local/config/my-amd-desktop.toml +Config: config/redbear-desktop.toml (includes desktop.toml + Red Bear GPU packages) - Includes redox-drm and amdgpu packages - filesystem_size = 8196 (8GB, needs space for firmware blobs) @@ -89,9 +88,12 @@ pcid: local/config/pcid.d/amd_gpu.toml |------|---------| | local/recipes/gpu/redox-drm/ | DRM scheme daemon | | local/recipes/gpu/amdgpu/ | Build recipe + integration glue | -| local/recipes/gpu/amdgpu-source/ | AMD driver source (from Linux 7.0-rc7) | -| local/config/my-amd-desktop.toml | Build config | -| local/config/pcid.d/amd_gpu.toml | PCI auto-detection | +| local/recipes/gpu/amdgpu/source/ | AMD driver C port source (from Linux 7.0-rc7) | +| config/redbear-desktop.toml | Build config | +| local/config/pcid.d/amd_gpu.toml | PCI auto-detection (AMD) | +| local/recipes/gpu/redox-drm/source/src/drivers/interrupt.rs | MSI-X/legacy interrupt abstraction | +| local/config/pcid.d/intel_gpu.toml | Intel GPU PCI auto-detection | +| local/patches/base/P0-pcid-config-endpoint.patch | pcid /config file endpoint | | local/scripts/build-amd.sh | Build wrapper | | local/scripts/test-amd-gpu.sh | Test script | @@ -102,3 +104,25 @@ pcid: local/config/pcid.d/amd_gpu.toml | redox-driver-sys | ✅ | MmioRegion, PciDevice, IrqHandle, DmaBuffer | | linux-kpi | ✅ | C headers, FFI stubs (kmalloc, mutex, spinlock...) | | firmware-loader | ✅ | scheme:firmware daemon | + +## P1/P2 Changes Since Initial Implementation + +### pcid /config endpoint (T1) +- Added `Config { addr: PciAddress }` handle to pcid scheme +- Routes `/scheme/pci/{addr}/config` to raw PCI config space read/write +- Enables redox-driver-sys PciDevice to access config space for MSI-X, BAR parsing + +### MSI-X interrupt support (T2-T4) +- Created shared `InterruptHandle` enum in `redox-drm/src/drivers/interrupt.rs` +- Tries MSI-X first (find capability → parse → map table → mask_all → enable → request_vector) +- Falls back to legacy IRQ if MSI-X unavailable +- Both AMD and Intel drivers use `InterruptHandle::setup()` + +### Dynamic PCI device info (T6) +- Replaced hardcoded `redox_pci_find_amd_gpu()` stub with `redox_pci_set_device_info()` +- Rust side passes real PciDeviceInfo (vendor, device, revision, IRQ, BAR0/BAR2) to C via FFI +- C layer validates the struct is populated before `amdgpu_redox_init()` uses it + +### Intel GPU support (T4-T5) +- Intel driver switched to shared `InterruptHandle` (MSI-X + legacy) +- Added `local/config/pcid.d/intel_gpu.toml` for auto-detection (vendor 0x8086, class 0x03)