fix: boot failure on VirtualBox legacy-BIOS VMs (AC'97 probed as HDA)

VirtualBox default VMs expose an AC'97 audio controller (8086:2415,
class 04/subclass 01) whose BAR0 is an I/O-space BAR. The IntelHDA
driver matched any Intel multimedia subclass, and ReadBar0 masked the
I/O BAR's port number into a bogus 'physical address' that MapMMIO
panicked on (non-page-aligned), halting boot.

Two fixes:
- IntelHDA now matches only subclass 0x03 (HD Audio); AC'97 (0x01) is
  a different programming model and is not claimed.
- ReadBar0 returns 0 (no usable MMIO BAR) for I/O-space BARs instead
  of handing a port number to MapMMIO.

Co-Authored-By: Claude Fable 5 <[email protected]>
This commit is contained in:
danielandClaude Fable 5 committed 2026-07-08 16:33:54 +02:00
1 parent e930c078a9
commit e0c02f76d3
2 files changed
+13 -3

No files matched your search

+5 -3
View File
@@ -149,13 +149,15 @@ namespace Drivers {
ProbeNvme,
},
// Order 7: Intel HDA — Normal phase, match vendor=0x8086 + class=0x04 (Multimedia)
// SubClass 0x01 = "Multimedia audio controller" (most Intel HDA)
// SubClass 0x03 = "Audio device" (HDA-compatible)
// SubClass 0x03 = "Audio device" = HD Audio controller.
// SubClass 0x01 = "Multimedia audio controller" = legacy AC'97
// (e.g. VirtualBox 8086:2415), which is NOT HDA and has an I/O
// BAR, not an MMIO BAR — do NOT match it here.
{
"IntelHDA",
0x8086, // VendorId (Intel)
0x04, // ClassCode (Multimedia)
0xFF, // SubClass (any — covers both 0x01 and 0x03)
0x03, // SubClass (0x03 = HD Audio; excludes AC'97 0x01)
0xFF, // ProgIf (any)
nullptr,
0,