- Breakthroughs & Rétro-ingénierie :
* Analyse de la cause racine du boot loop survenu lors du démarrage :
1. Dans le commit précédent, IO80211Controller::start a réussi pour la première fois grâce à l allocation de IO80211WorkQueue.
2. Cela a déclenché l exécution de QualcommWifi::start jusqu à l appel IOEthernetController::attachInterface((IONetworkInterface **)&fNetif, true) et registerService().
3. L attachement BSD d une interface Ethernet avec attach=true a provoqué l appel immédiat et synchrone de QualcommWifi::enable(netif) au tout début du boot XNU.
4. QualcommWifi::enable invoquait directement loadBhiFirmware(), qui contenait 5 boucles de spin IODelay(1000) cumulant jusqu à 20 000 ms (20 secondes) de blocage CPU ininterrompu dans le contexte noyau !
5. Dans XNU, toute attente active par IODelay dépassant le seuil de 5 à 10 secondes déclenche inévitablement le Watchdog Kernel matériel (IOWatchdogx86 / thread_call watchdog), entraînant un hard reboot immédiat sans écriture de panic log (d où la boucle de redémarrage infinie).
6. Par ailleurs, la rétro-ingénierie du désassemblage de IO80211Controller::attachInterface (0xffffff8002295fce) a confirmé qu en macOS Tahoe (architecture Skywalk), IO80211Controller n utilise pas IOEthernetInterface mais attend IO80211SkywalkInterface (signalant 'invalid skywalk interface' en cas de cast invalide). L attachement forcé d une interface Ethernet au niveau du contrôleur Wi-Fi corrompait la hiérarchie Skywalk attendue par airportd.
- Modifications apportées :
* QualcommWifi/QualcommWifi.cpp :
- Suppression de l appel à IOEthernetController::attachInterface dans QualcommWifi::start() pour laisser le contrôleur s enregistrer proprement auprès d IOKit sans créer d interface Ethernet concurrente ni déclencher enable() prématurément.
- Réduction de tous les délais dans loadBhiFirmware() à des valeurs sécurisées de 100 µs (50 itérations max par phase, soit 30 ms au total), totalement transparentes pour le watchdog noyau.
- Découplage de loadBhiFirmware() du chemin critique de boot enable() : l initialisation radio et l allocation DMA sont désormais déclenchées sur demande d alimentation Wi-Fi (setPOWER) lorsque le système ou l utilisateur active le composant.
- Maintien du Bluetooth (QualcommWireless.kext) strictement intact et fonctionnel.
- Validation :
* Compilation sans erreur via ./build_wifi.sh.
* Validation kmutil libraries -p QualcommWifi.kext réussie à 100% contre BootKernelExtensions.kc.
* Alignement strict de la vtable confirmé : 464 slots (3728 octets), correspondant exactement à __ZTV17IO80211Controller.
* Kext déployé dans /Volumes/EFI/EFI/OC/Kexts/QualcommWifi.kext.
* Réactivation de QualcommWifi.kext dans /Volumes/EFI/EFI/OC/config.plist (<Enabled><true/>).