Files
QualcommWireless/QualcommWifi
Erwan 1a6562c229 feat(wifi): implement NVRAM stage logging and safe crash-proof mode for WCN7850
### Breakthroughs & Rétro-ingénierie
- **Analyse des réinitialisations matérielles instantanées sur AMD Ryzen** :
  L'arrêt brutal (coupure d'alimentation instantanée de 5 secondes au boot) sur plateforme AMD Ryzen/AM4 provient d'un Machine Check / PCIe Unsupported Request / AER déclenché lors d'accès MMIO (BAR0) lorsque la carte WCN7850 est en état basse consommation D3hot (CurrentPowerState=2 dans IORegistry).
- **Traces persistantes dans la NVRAM matérielle (AppleEFINVRAM)** :
  Comme un reset matériel coupe l'alimentation avant l'écriture des journaux sur disque ou la génération d'un Kernel Panic (pas de /Library/Logs/DiagnosticReports), la fonction logNvramStage() écrit directement chaque jalon franchi dans l'entrée '/options' du plan d'arbre de périphériques gIODTPlane. Cette trace survit aux redémarrages et est consultable via 'nvram -p | grep qcom_wifi_log'.
- **Mode Safe / Diagnostic sans crash** :
  Introduction d'une barrière d'accès MMIO pilotée par l'argument de démarrage 'qcom_mmio'. Sans cet argument, le pilote active le contrôleur PCIe en D0 sans toucher aux registres MMIO sensibles, publiant les interfaces et services IO80211Controller pour validation visuelle sans aucun risque de boot loop.

### Modifications apportées
- **QualcommWifi/QualcommWifi.cpp** :
  - Ajout de l'include <IOKit/IODeviceTreeSupport.h> et implémentation de logNvramStage().
  - Instrumentation des méthodes init(), probe(), start(), createWorkQueue(), getHardwareAddress(), enable(), disable(), dataLinkLayerAttachComplete(), setPOWER() et handleApple80211Request().
  - Ajout du réveil formel en D0 via fPciDevice->enablePCIPowerManagement(kPCIPMCSPowerStateD0).
  - Conditionnement de l'accès BAR0/MHI/BHI sous PE_parse_boot_argn("qcom_mmio").
  - Suppression des reliquats de détachement d'interface ethernet.

### Validation
- Compilation réussie avec clang 17 et SDK macOS Tahoe 26.x.
- Validation des dépendances et symboles à 100% via kmutil libraries contre BootKernelExtensions.kc.
- Déploiement du kext sur /Volumes/EFI/EFI/OC/Kexts/ et activation dans config.plist.
2026-10-16 16:53:58 +02:00
..