Files
QualcommWireless/QualcommWifi/Info.plist
T
Erwan 2dca4cd116 feat(wifi): implement macOS Tahoe WorkQueue and FaultReporter for IO80211Controller
### Breakthroughs & Rétro-ingénierie (macOS Tahoe 26.7.1 / IO80211Family 1200.13.1)
1. WorkQueue Invariants (Slots 395 & 397):
   - Analyse de `IO80211Controller::start(provider)` et `IONetworkController::start(provider)`.
   - `createWorkLoop()` appelle directement le slot 395 `createWorkQueue()` (offset 0xc58), dont la classe de base renvoie `false`.
   - `getWorkLoop()` appelle le slot 397 `getWorkQueue()` (offset 0xc68), dont la classe de base renvoie `nullptr`.
   - Si non surchargés, `start()` échoue immédiatement avant l'allocation du timer.
   - Broadcom (`AppleBCMWLANCore`) alloue `IO80211WorkQueue::workQueue()` (`__ZN16IO80211WorkQueue9workQueueEv`).
   - Implémenté dans QualcommWifi avec `fWorkQueue` dérivé de `IOWorkLoop`.

2. Prévention du Kernel Panic dans `findAndAttachToFaultReporter` (Slot 432):
   - `IO80211Controller::findAndAttachToFaultReporter` appelle le slot 432 `getFaultReporterFromDriver()` (offset 0xd80).
   - Si `getFaultReporterFromDriver()` renvoie `nullptr` et que `ivars->_faultReporter` (offset 0x58) est nul, le kernel déclenche `panic("\"No ivars->_faultReporter\" @IO80211Controller.cpp:2877")`.
   - Création de la classe `QualcommFaultReporter` (dérivée d'`OSObject`), instanciée et renvoyée par `getFaultReporterFromDriver()`, satisfaisant l'invariant sans panique.

### Modifications apportées
- `QualcommWireless/include/IOKit/80211/IO80211WorkQueue.h`:
  - Déclaration de `IO80211WorkQueue` (dérivée d'`IOWorkLoop`) avec sa méthode statique `workQueue()`.
- `QualcommWireless/include/IOKit/80211/IO80211Controller.h`:
  - Inclusion de `IO80211WorkQueue.h`.
- `QualcommWifi/QualcommWifi.hpp`:
  - Déclaration de `QualcommFaultReporter : public OSObject`.
  - Ajout des membres `fWorkQueue` et `fFaultReporter`.
  - Déclaration des overrides `createWorkQueue()`, `getWorkQueue()` et `getFaultReporterFromDriver()`.
- `QualcommWifi/QualcommWifi.cpp`:
  - Implémentation de `createWorkQueue()`, `getWorkQueue()` et `getFaultReporterFromDriver()`.
  - Initialisation dans `init()` et libération dans `free()`.
  - Sécurisation du prologue de `QualcommWifi::start()` avant `super::start(provider)`.
- `QualcommWifi/Info.plist`:
  - Déclaration propre du kext Wi-Fi PCIe (`0x110717cb`), probe score 20000, et dépendances `IO80211Family`, `IONetworkingFamily`, `IOPCIFamily`.
- `build_wifi.sh`:
  - Script automatisé de compilation, assemblage firmware radio WCN7850, linkage et validation `kmutil`.

### Validation
- Compilation réussie avec `clang++` (-target x86_64-apple-macos15.0).
- Validation `kmutil libraries` réussie à 100% avec code retour 0 contre `/System/Library/KernelCollections/BootKernelExtensions.kc`.
- Aucune régression sur le Bluetooth (`QualcommWireless.kext`), testé et validé via `xcodebuild`.
2026-10-16 09:50:54 +02:00

60 lines
1.7 KiB
Plaintext

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>en</string>
<key>CFBundleExecutable</key>
<string>QualcommWifi</string>
<key>CFBundleIdentifier</key>
<string>com.nawrhehe.QualcommWifi</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>QualcommWifi</string>
<key>CFBundlePackageType</key>
<string>KEXT</string>
<key>CFBundleShortVersionString</key>
<string>1.1.0</string>
<key>CFBundleVersion</key>
<string>1.1.0</string>
<key>IOKitPersonalities</key>
<dict>
<key>QualcommWifi_PCIe</key>
<dict>
<key>CFBundleIdentifier</key>
<string>com.nawrhehe.QualcommWifi</string>
<key>IOClass</key>
<string>QualcommWifi</string>
<key>IOMatchCategory</key>
<string>IODefaultMatchCategory</string>
<key>IOPCIPrimaryMatch</key>
<string>0x110717cb</string>
<key>IOProbeScore</key>
<integer>20000</integer>
<key>IOProviderClass</key>
<string>IOPCIDevice</string>
</dict>
</dict>
<key>OSBundleLibraries</key>
<dict>
<key>com.apple.iokit.IO80211Family</key>
<string>1200.0</string>
<key>com.apple.iokit.IONetworkingFamily</key>
<string>3.2</string>
<key>com.apple.iokit.IOPCIFamily</key>
<string>2.9</string>
<key>com.apple.kpi.bsd</key>
<string>15.0</string>
<key>com.apple.kpi.iokit</key>
<string>15.0</string>
<key>com.apple.kpi.libkern</key>
<string>15.0</string>
<key>com.apple.kpi.mach</key>
<string>15.0</string>
</dict>
<key>OSBundleRequired</key>
<string>Network-Root</string>
</dict>
</plist>