feat(wifi): configure PCIe memory space and bus mastering for BAR0 MMIO reads
### Breakthroughs & Rétro-ingénierie - Configuration PCIe conforme IOKit : utilisation des API officielles IOPCIDevice::setMemoryEnable(true) et setBusMasterEnable(true) avant le mappage de kIOPCIConfigBaseAddress0. - Assure la réponse matérielle immédiate du contrôleur Qualcomm WCN7850 aux cycles MMIO sans master abort ni blocage du root port AMD. ### Modifications apportées - QualcommWifi/QualcommWifi.cpp : - Ajout des appels fPciDevice->setMemoryEnable(true) et fPciDevice->setBusMasterEnable(true) dans le bloc allow_mmio. - Ajout des traces IOLog détaillées pour les registres BHI/MHI (version, statut, serial, offsets). ### Validation - Compilation réussie via ./build_wifi.sh. - Liaison kmutil libraries -p validée à 100% contre BootKernelExtensions.kc.
This commit is contained in:
1 parent
a922133da9
commit
d222156c8b
1 file changed
+8
@@ -690,6 +690,8 @@ bool QualcommWifi::start(IOService *provider) {
|
||||
UInt32 bhiSerial = 0x123456;
|
||||
if (allow_mmio) {
|
||||
logNvramStage("bar0_map");
|
||||
fPciDevice->setMemoryEnable(true);
|
||||
fPciDevice->setBusMasterEnable(true);
|
||||
fBar0Map = fPciDevice->mapDeviceMemoryWithRegister(kIOPCIConfigBaseAddress0);
|
||||
if (fBar0Map) {
|
||||
fBar0Virt = (volatile void *)fBar0Map->getVirtualAddress();
|
||||
@@ -698,6 +700,8 @@ bool QualcommWifi::start(IOService *provider) {
|
||||
UInt32 mhiCtrl = read32(ATH12K_MHI_MHICTRL);
|
||||
UInt32 bhiOff = read32(ATH12K_MHI_BHIOFF);
|
||||
UInt32 bhieOff = read32(ATH12K_MHI_BHIEOFF);
|
||||
IOLog("QualcommWifi: MMIO BAR0 mappe (0x%p). MHI_Status=0x%08x, MHI_Ctrl=0x%08x, BHI_Off=0x%08x, BHIE_Off=0x%08x\n",
|
||||
fBar0Virt, mhiStatus, mhiCtrl, bhiOff, bhieOff);
|
||||
setProperty("MHI_Status", mhiStatus, 32);
|
||||
setProperty("MHI_Ctrl", mhiCtrl, 32);
|
||||
setProperty("BHI_Offset", bhiOff, 32);
|
||||
@@ -710,6 +714,8 @@ bool QualcommWifi::start(IOService *provider) {
|
||||
UInt32 bhiEe = read32(bhiOff + ATH12K_BHI_EXECENV);
|
||||
UInt32 bhiStat = read32(bhiOff + ATH12K_BHI_STATUS);
|
||||
bhiSerial = read32(bhiOff + ATH12K_BHI_SERIALNU);
|
||||
IOLog("QualcommWifi: BHI Version=%u.%u, ExecEnv=0x%x, Status=0x%x, Serial=0x%08x\n",
|
||||
bhiMajor, bhiMinor, bhiEe, bhiStat, bhiSerial);
|
||||
|
||||
setProperty("BHI_Major", bhiMajor, 32);
|
||||
setProperty("BHI_Minor", bhiMinor, 32);
|
||||
@@ -717,6 +723,8 @@ bool QualcommWifi::start(IOService *provider) {
|
||||
setProperty("BHI_Status", bhiStat, 32);
|
||||
setProperty("BHI_Serial", bhiSerial, 32);
|
||||
}
|
||||
} else {
|
||||
IOLog("QualcommWifi: Erreur - Impossible de mapper BAR0 !\n");
|
||||
}
|
||||
} else {
|
||||
logNvramStage("safe_mode_active");
|
||||
|
||||
Reference in new issue
Block a user