feat(wifi): align IO80211Controller vtable to 466 slots and resolve kernel symbols for native Wi-Fi
- Breakthroughs & Rétro-ingénierie : * Analyse binaire approfondie de BootKernelExtensions.kc (__ZTV17IO80211Controller à 0xffffff8002461148, 466 slots). * Résolution de la cause racine de la boucle de démarrage (boot loop) : décalage de 16 octets (2 slots 394 & 395) causé par _RESERVEDIOEthernetController30 et 31, provoquant un appel dans une zone mémoire non mappée dans IO80211Controller::start(). * Analyse de findAndAttachToFaultReporter : Apple gère proprement un retour nullptr pour getFaultReporterFromDriver() sans nécessiter d'implémentation factice instable. * Analyse des symboles non résolus contre BootKernelExtensions.kc : identification de 11 symboles manquants (createInterface, configureInterface, getOutputQueue, _RESERVEDIONetworkController2..7) résolus via corps inline de délégation et stubs locaux, atteignant 0 symbole manquant (470/470 résolus). * Découplage de start() : élimination de l'attente synchrone du firmware BHI (qui déclenchait le watchdog macOS) en la différant à enable(). - Modifications apportées : * QualcommWireless/include/IOKit/80211/IO80211Controller.h : alignement exact des 466 slots avec les réservations tahoe0/tahoe1 inline, et délégation directe vers IOEthernetController pour createInterface, configureInterface et getOutputQueue. * QualcommWifi/QualcommWifi.hpp : héritage direct de IO80211Controller, implémentation des prototypes Skywalk et airportd, ajout de fNetif. * QualcommWifi/QualcommWifi.cpp : stubs locaux pour les réservations IONetworkController, publication des médiums IEEE 802.11, attachement de l'interface réseau BSD via IONetworkController::attachInterface(), et gestionnaire de requêtes airportd/Skywalk complet. * QualcommWifi/Info.plist : déclaration de la dépendance com.apple.iokit.IO80211Family (1200.0) et OSBundleRequired = Root. * build_wifi.sh : ciblage macOS 26.5 avec -D__IO80211_TARGET=260000. - Validation : * Compilation 100% sans erreur ni avertissement. * Vérification de vtable : correspondance parfaite 466 slots (0xe90 octets). * Vérification des symboles contre BootKernelExtensions.kc : 0 symbole manquant (100% de concordance). * Déploiement direct dans /Volumes/EFI/EFI/OC/Kexts/QualcommWifi.kext validé (SHA256 identique).
This commit is contained in:
1 parent
399b09dade
commit
d6bce8f360
5 files changed
+366
-82
No files matched your search
@@ -13,6 +13,12 @@
|
||||
#include <IOKit/network/IOEthernetInterface.h>
|
||||
#include <IOKit/network/IOOutputQueue.h>
|
||||
#include <IOKit/network/IONetworkMedium.h>
|
||||
|
||||
#include <IOKit/80211/apple80211_var.h>
|
||||
#include <IOKit/80211/apple80211_ioctl.h>
|
||||
#include <IOKit/80211/IO80211Controller.h>
|
||||
#include <IOKit/80211/IO80211SkywalkInterface.h>
|
||||
#include <IOKit/80211/IO80211WorkQueue.h>
|
||||
#include "Firmware_WCN7850_Wifi.h"
|
||||
|
||||
// Registres PCIe et constantes de fenêtrage (ath12k/pci.h)
|
||||
@@ -169,7 +175,7 @@ struct mhi_ring_element {
|
||||
#define MHI_TRE_GET_EV_STATE(tre) (((tre)->dword[0] >> 24) & 0xFF)
|
||||
#define MHI_TRE_GET_EV_EXECENV(tre) (((tre)->dword[0] >> 24) & 0xFF)
|
||||
|
||||
class QualcommWifi : public IOEthernetController {
|
||||
class QualcommWifi : public IO80211Controller {
|
||||
OSDeclareDefaultStructors(QualcommWifi)
|
||||
|
||||
private:
|
||||
@@ -179,13 +185,17 @@ private:
|
||||
UInt32 fCurrWindow;
|
||||
|
||||
IOInterruptEventSource *fInterruptSource;
|
||||
IOEthernetInterface *fNetif;
|
||||
IONetworkInterface *fNetif;
|
||||
IOEthernetAddress fMacAddress;
|
||||
|
||||
// État réseau
|
||||
// État réseau Wi-Fi
|
||||
bool fLinkActive;
|
||||
UInt16 fCurrentChannel;
|
||||
SInt32 fLastRssi;
|
||||
UInt8 fSsid[APPLE80211_MAX_SSID_LEN];
|
||||
UInt32 fSsidLen;
|
||||
UInt8 fBssid[6];
|
||||
bool fScanInProgress;
|
||||
|
||||
// Tampon DMA physiquement contigu
|
||||
IOBufferMemoryDescriptor *fDmaBuf;
|
||||
@@ -220,6 +230,27 @@ public:
|
||||
virtual IOReturn enable(IONetworkInterface *netif) override;
|
||||
virtual IOReturn disable(IONetworkInterface *netif) override;
|
||||
virtual UInt32 outputPacket(mbuf_t m, void *param) override;
|
||||
|
||||
// macOS Tahoe 26.x (Darwin 25) IO80211Controller Skywalk overrides
|
||||
virtual bool isCommandProhibited(int command) override { return false; }
|
||||
virtual IOReturn handleCardSpecific(IO80211SkywalkInterface *iface, unsigned long req_type, void *req_data, bool isSet) override;
|
||||
virtual UInt32 hardwareOutputQueueDepth(void) override { return 0; }
|
||||
virtual SInt32 performCountryCodeOperation(IO80211CountryCodeOp op) override { return 0; }
|
||||
virtual void dataLinkLayerAttachComplete(void) override;
|
||||
virtual SInt32 enableFeature(IO80211FeatureCode code, void *arg) override { return 0; }
|
||||
virtual IOReturn getDRIVER_VERSION(IO80211SkywalkInterface *iface, apple80211_version_data *vd) override;
|
||||
virtual IOReturn getHARDWARE_VERSION(IO80211SkywalkInterface *iface, apple80211_version_data *vd) override;
|
||||
virtual IOReturn getCARD_CAPABILITIES(IO80211SkywalkInterface *iface, apple80211_capability_data *cap) override;
|
||||
virtual IOReturn getPOWER(IO80211SkywalkInterface *iface, apple80211_power_data *pwr) override;
|
||||
virtual IOReturn setPOWER(IO80211SkywalkInterface *iface, apple80211_power_data *pwr) override;
|
||||
virtual IOReturn getCOUNTRY_CODE(IO80211SkywalkInterface *iface, apple80211_country_code_data *cc) override;
|
||||
virtual IOReturn setCOUNTRY_CODE(IO80211SkywalkInterface *iface, apple80211_country_code_data *cc) override { return kIOReturnSuccess; }
|
||||
virtual IOReturn setGET_DEBUG_INFO(IO80211SkywalkInterface *iface, apple80211_debug_command *dbg) override { return kIOReturnSuccess; }
|
||||
virtual void* getLogger(void) const override { return nullptr; }
|
||||
virtual void* getFaultReporterFromDriver(void) override { return nullptr; }
|
||||
|
||||
// Dispatcher de requêtes Apple80211 / airportd
|
||||
SInt32 handleApple80211Request(unsigned int req_type, int req_val, void* req_data);
|
||||
};
|
||||
|
||||
#endif
|
||||
Reference in new issue
Block a user