Files
QualcommWireless/QualcommWifi
Erwan 399b09dade refactor(wifi): transition to IOEthernetController architecture to eliminate boot loop
Breakthroughs & Rétro-ingénierie :
- Diagnostic de la boucle de redémarrage (boot loop / reset instantané sur logo Apple) :
  1. Incompatibilité vtable IO80211Controller : le désassemblage du BootKernelExtensions.kc de macOS Tahoe 26.x a mis en évidence un appel virtuel slot 107 (attachToParent) et slot 35 sur le FaultReporter retourné. Nos en-têtes reconstitués présentaient un décalage de slots virtuels menant à un saut sur pointeur nul (0x0) en Ring 0, déclenchant un triple fault CPU.
  2. Blocage synchrone du thread IOKit de démarrage : le transfert BHI de 6 Mo et les boucles IODelay (>15-20s) dans start() faisaient déclencher le watchdog boot du kernel macOS ou le MCE PCIe/IOMMU AMD Ryzen.
  3. Saturation du segment __TEXT exécutable : les 8.4 Mo de firmware assemblés en code exécutable violaient les quotas mémoire de pré-démarrage du kernel boot.efi.
- Solution architecturale : adoption de IOEthernetController (com.apple.iokit.IONetworkingFamily), approche éprouvée (similaire à itlwm) avec ABI publique pérenne (31 méthodes virtuelles stables), éliminant entièrement les classes instables privées IO80211WorkQueue et CCFaultReporter.
- Déplacement des blobs firmware vers la section __DATA,__const, réduisant le segment exécutable __TEXT de 8.8 Mo à seulement 16 Ko.
- start() ultraléger (< 2 ms) déportant le chargement BHI/MHI vers la méthode enable() appelée de façon asynchrone par la pile réseau de macOS.

Modifications apportées :
- QualcommWifi/Firmware_WCN7850_Wifi.s : relocalisation des sections d'assemblage en __DATA,__const au lieu de __TEXT,__const.
- QualcommWifi/QualcommWifi.hpp : héritage direct depuis IOEthernetController, suppression des dépendances et stubs IO80211, déclarations des méthodes getHardwareAddress, enable, disable, outputPacket.
- QualcommWifi/QualcommWifi.cpp : refonte complète en sous-classe IOEthernetController, start() sans blocage pour initialisation immédiate des BAR/IDs et publication de l'interface réseau, BHI firmware différé à enable().
- QualcommWifi/Info.plist : suppression de la dépendance com.apple.iokit.IO80211Family, conservation de IONetworkingFamily et IOPCIFamily, OSBundleRequired fixé à Root.
- build_wifi.sh : alignement de la cible de compilation sur macos26.5 et résolution des chemins SDK.

Validation :
- Compilation sans aucun avertissement ni erreur via Clang/Clang++ 26.
- Validation des symboles et dépendances réussie à 100% avec kmutil libraries contre BootKernelExtensions.kc.
- Déploiement de QualcommWifi.kext dans /Volumes/EFI/EFI/OC/Kexts/.
- Réactivation validée dans config.plist (Kernel.Add.14.Enabled = True).
- QualcommWireless.kext (Bluetooth) préservé intact et 100% opérationnel.
2026-10-16 10:56:55 +02:00
..