feat: intel wi-fi (AX211) driver with network scanning

This commit is contained in:
daniel committed 2026-08-06 08:36:10 +02:00
1 parent 75d92d560c
commit a01e63c717
21 files changed
+5649 -4

No files matched your search

+33 -3
View File
@@ -9,6 +9,7 @@
#include <Drivers/Graphics/IntelGPU.hpp>
#include <Drivers/Net/E1000.hpp>
#include <Drivers/Net/E1000E.hpp>
#include <Drivers/Net/Wifi/Wifi.hpp>
#include <Drivers/USB/Xhci.hpp>
#include <Drivers/Storage/Ahci.hpp>
#include <Drivers/Storage/Nvme.hpp>
@@ -43,6 +44,18 @@ namespace Drivers {
0x1A1F,
};
// Intel AX210-family Wi-Fi (CNVi and discrete). The driver additionally
// checks CSR_HW_RF_ID at probe time and only claims RF type GF (AX211),
// which is the firmware image shipped on the ramdisk.
static constexpr uint16_t g_intelWifiIds[] = {
0x2725, // AX210 (discrete)
0x2726, // AX211 (discrete, GF2)
0x51f0, 0x51f1, 0x54f0, // AlderLake CNVi
0x7a70, 0x7af0, // RaptorLake / AlderLake-P CNVi
0x7e40, // MeteorLake CNVi
0x7f70, // RaptorLake-S CNVi
};
// -------------------------------------------------------------------------
// Probe wrappers (adapt namespace::Probe to PciProbeFunc signature)
// -------------------------------------------------------------------------
@@ -63,6 +76,10 @@ namespace Drivers {
return Net::E1000E::Probe(dev);
}
static bool ProbeWifi(const Pci::PciDevice& dev) {
return Net::Wifi::Probe(dev);
}
static bool ProbeAhci(const Pci::PciDevice& dev) {
return Storage::Ahci::Probe(dev);
}
@@ -124,7 +141,20 @@ namespace Drivers {
Pci::ProbePhase::Normal,
ProbeE1000E,
},
// Order 5: AHCI — Normal phase, match class=0x01/0x06/0x01 (SATA AHCI)
// Order 5: Intel Wi-Fi — Normal phase, vendor=0x8086 + deviceIds list.
// These are the AX210-family (CNVi "So") parts; the probe
// rejects anything whose RF type is not GF, since only the
// AX211 firmware image is bundled.
{
"IntelWiFi",
0x8086,
0xFF, 0xFF, 0xFF,
g_intelWifiIds,
sizeof(g_intelWifiIds) / sizeof(g_intelWifiIds[0]),
Pci::ProbePhase::Normal,
ProbeWifi,
},
// Order 6: AHCI — Normal phase, match class=0x01/0x06/0x01 (SATA AHCI)
{
"AHCI",
0, // VendorId (any)
@@ -136,7 +166,7 @@ namespace Drivers {
Pci::ProbePhase::Normal,
ProbeAhci,
},
// Order 6: NVMe — Normal phase, match class=0x01/0x08/0x02 (NVM Express)
// Order 7: NVMe — Normal phase, match class=0x01/0x08/0x02 (NVM Express)
{
"NVMe",
0, // VendorId (any)
@@ -148,7 +178,7 @@ namespace Drivers {
Pci::ProbePhase::Normal,
ProbeNvme,
},
// Order 7: Intel HDA — Normal phase, match vendor=0x8086 + class=0x04 (Multimedia)
// Order 8: Intel HDA — Normal phase, match vendor=0x8086 + class=0x04 (Multimedia)
// SubClass 0x03 = "Audio device" (plain HD Audio controller).
// SubClass 0x01 = "Multimedia audio controller": on modern
// laptops this is the SAME HDA controller enumerated with the