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:
1 parent
e930c078a9
commit
e0c02f76d3
2 files changed
+13
-3
No files matched your search
@@ -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,
|
||||
|
||||
Reference in new issue
Block a user