5.1 KiB
5.1 KiB
Architecture de QualcommWireless
Ce document détaille l'architecture logicielle et matérielle du pilote unifié QualcommWireless pour les puces combinées Qualcomm FastConnect 7800 (SoC WCN7850) sous macOS Sequoia (15.x) et versions ultérieures.
1. Vue d'Ensemble du Matériel WCN7850
Le module sans fil Qualcomm FastConnect 7800 (WCN7850) utilise une architecture à double bus physique :
graph TD
subgraph Host["Système Hôte (macOS Sequoia - Darwin 24)"]
subgraph Kernel["Kernel Space (XNU / IOKit)"]
IO80211["com.apple.iokit.IO80211Family\n(IO80211Controller)"]
IOUSB["com.apple.iokit.IOUSBHostFamily\n(IOUSBHostDevice / Interface)"]
QWifi["QualcommWifi.kext\n(Driver Wi-Fi 7 Natif)"]
QBt["QualcommWireless.kext\n(Initialisation & Firmware BT)"]
end
subgraph Userland["Espace Utilisateur"]
AirportD["airportd / CoreWLAN / Control Center"]
BtD["bluetoothd / IOBluetoothFamily daemon"]
end
end
subgraph Hardware["Qualcomm FastConnect 7800 (WCN7850)"]
subgraph PCIeBus["Bus PCIe Gen3 x1 (VID 0x17cb, PID 0x1107)"]
BAR0["MMIO BAR0 (512 Ko)"]
Windowing["Registre Fenêtrage (0x310c)"]
BHI["Boot Host Interface (BHI/BHIe)"]
MHI["Modem Host Interface (MHI v1.0)"]
AMSS["Firmware Wi-Fi 7 (AMSS)"]
end
subgraph USBBus["Bus USB 2.0 (VID 0x0489, PID 0xe10d)"]
EP0["Contrôle EP0 (Requêtes Vendeur QCA)"]
EP2["Bulk OUT EP2 (DFU Firmware Upload)"]
EP1["Interrupt IN EP1 (Événements HCI)"]
ROM["ROM Qualcomm & Patch RAM"]
end
end
AirportD -->|Apple80211 IOCTL / Skywalk| IO80211
IO80211 --> QWifi
QWifi -->|BAR0 Windowing / MHI / Ring DMA| BAR0
BAR0 --> Windowing
Windowing --> BHI
BHI --> AMSS
BtD -->|UserClient / HCI Packets| IOUSB
IOUSB --> QBt
QBt -->|DFU Rampatch & NVM| EP2
QBt -->|HCI Reset| EP0
Caractéristiques Physiques
-
Partie Wi-Fi (PCIe) :
- Identifiant :
0x17cb:0x1107 - Protocole : 802.11a/b/g/n/ac/ax/be (Wi-Fi 7)
- Bandes de fréquence : 2.4 GHz, 5 GHz, 6 GHz
- Largeur de canal maximale : 320 MHz, modulation 4096-QAM
- Débit théorique : jusqu'à 5.8 Gbps
- Bus d'interface : PCI Express Gen3 x1
- Identifiant :
-
Partie Bluetooth (USB) :
- Identifiant :
0x0489:0xe10d(Foxconn / Hon Hai WCN7850 HCI) - Spécification : Bluetooth 5.4, LE Audio, Auracast
- Bus d'interface : USB 2.0 haute fidélité (connecté en interne sur port USB de la carte mère)
- Identifiant :
2. Découpage du Pilote Kernel
Le pilote est structuré en deux classes IOKit distinctes et complémentaires au sein du bundle :
2.1. QualcommWifi (IO80211Controller)
- Rôle : Pilote Wi-Fi natif.
- Classe parente :
IO80211Controller(decom.apple.iokit.IO80211Family). - Fournisseur (Provider) :
IOPCIDevice(pci17cb,1107). - Gestion MMIO & Fenêtrage :
- La mémoire de configuration et de contrôle du WCN7850 s'étend sur plusieurs mégaoctets de registres internes, mais le BAR0 PCIe n'expose qu'une fenêtre de 512 Ko.
- Le pilote implémente le fenêtrage dynamique Qualcomm via le registre
0x310c(ATH12K_PCI_WINDOW_REG_ADDRESS). Pour toute adresse au-delà de 512 Ko, l'offset de fenêtre est programmé à la volée.
- Cycle de vie du Firmware MHI / BHI :
- Reset global du SoC (
0x3008). - Lecture de la révision matérielle TCSR (
0x1B00000). - Allocation des descripteurs DMA 36-bit alignés sur 4 Ko (
ATH12K_DMA_MASK_36BIT_PAGE). - Initialisation du Boot Host Interface (BHI).
- Chargement en mémoire des firmwares
amss.bin,m3.bin, etboard-2.bin. - Transition de l'environnement d'exécution (Execution Environment) de
PBL(Primary Boot Loader) versAMSS. - Établissement des anneaux de commande, d'événements et de données MHI (M0 State).
- Reset global du SoC (
- Intégration macOS 802.11 :
- Traitement natif des commandes IOCTL
APPLE80211_IOC_*(SSID, scan passif/actif, BSSID list, RSSI, canal, association). - Fourniture d'une véritable interface sans fil reconnue par le Centre de Contrôle et
airportd.
- Traitement natif des commandes IOCTL
2.2. QualcommWireless (IOService)
- Rôle : Initialisation du contrôleur Bluetooth USB et téléversement du Rampatch & NVM.
- Classe parente :
IOService. - Fournisseur (Provider) :
IOUSBHostDevice(0x0489:0xe10d). - Protocole de démarrage :
- Interrogation de la version matérielle (
QCA_GET_TARGET_VERSION). - Vérification de l'état du microprogramme (
QCA_CHECK_STATUS). - Téléversement du RAMPATCH binaire (
rampatch_usb_00190200_bin) via le pipe Bulk OUT (EP2) avec header DFU de 40 octets. - Téléversement de la configuration NVRAM (
nvm_usb_00190200_bin) avec header DFU de 4 octets. - Envoi d'un
HCI_Reset(0x03, 0x0c, 0x00) via requête de contrôle USB. - Injection des métadonnées
IORegistry(USB Product Name,kUSBHostPortType=255, spoofingidVendor=0x0a12). - Fermeture propre des pipes et libération de l'accès exclusif afin que le daemon
bluetoothdprenne la main sans conflit.
- Interrogation de la version matérielle (