feat(wifi): add Apple80211 IOCTL handlers and explicit PCIe probe validation
This commit is contained in:
1 parent
5f28381754
commit
3b2ffcdf15
2 files changed
+94
-1
No files matched your search
+25
@@ -0,0 +1,25 @@
|
|||||||
|
# macOS
|
||||||
|
.DS_Store
|
||||||
|
*.swp
|
||||||
|
*~
|
||||||
|
|
||||||
|
# Xcode / Build artifacts
|
||||||
|
build/
|
||||||
|
DerivedData/
|
||||||
|
*.pbxuser
|
||||||
|
!default.pbxuser
|
||||||
|
*.mode1v3
|
||||||
|
!default.mode1v3
|
||||||
|
*.mode2v3
|
||||||
|
!default.mode2v3
|
||||||
|
*.perspectivev3
|
||||||
|
!default.perspectivev3
|
||||||
|
xcuserdata/
|
||||||
|
*.xccheckout
|
||||||
|
*.moved-aside
|
||||||
|
*.hmap
|
||||||
|
*.ipa
|
||||||
|
*.xcuserstate
|
||||||
|
|
||||||
|
# Compiled Kexts
|
||||||
|
*.kext/
|
||||||
@@ -37,7 +37,25 @@ void QualcommWifi::free(void) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
IOService *QualcommWifi::probe(IOService *provider, SInt32 *score) {
|
IOService *QualcommWifi::probe(IOService *provider, SInt32 *score) {
|
||||||
return super::probe(provider, score);
|
if (!super::probe(provider, score)) {
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
IOPCIDevice *pciDev = OSDynamicCast(IOPCIDevice, provider);
|
||||||
|
if (!pciDev) {
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
UInt16 vendorId = pciDev->configRead16(kIOPCIConfigVendorID);
|
||||||
|
UInt16 deviceId = pciDev->configRead16(kIOPCIConfigDeviceID);
|
||||||
|
|
||||||
|
if (vendorId == 0x17cb && deviceId == 0x1107) {
|
||||||
|
IOLog("QualcommWifi: Controleur Wi-Fi 7 Qualcomm WCN7850 detecte (0x%04x:0x%04x) !\n", vendorId, deviceId);
|
||||||
|
*score += 20000;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
UInt32 QualcommWifi::read32(UInt32 offset) {
|
UInt32 QualcommWifi::read32(UInt32 offset) {
|
||||||
@@ -858,6 +876,56 @@ SInt32 QualcommWifi::apple80211Request(unsigned int req_type, int req_val, IO802
|
|||||||
case APPLE80211_IOC_SCAN_RESULT: {
|
case APPLE80211_IOC_SCAN_RESULT: {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
case APPLE80211_IOC_POWER: {
|
||||||
|
apple80211_power_data *pwr = (apple80211_power_data *)req_data;
|
||||||
|
if (pwr) {
|
||||||
|
pwr->version = APPLE80211_VERSION;
|
||||||
|
pwr->num_radios = 1;
|
||||||
|
if (req_val == 0 || req_val == 1) {
|
||||||
|
fLinkActive = (req_val == 1);
|
||||||
|
IOLog("QualcommWifi: Bascule alimentation radio Wi-Fi demandee : %s\n", fLinkActive ? "ACTIVE" : "COUPEE");
|
||||||
|
}
|
||||||
|
pwr->power_state[0] = fLinkActive ? 1 : 0;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case APPLE80211_IOC_SCAN_REQ_MULTIPLE: {
|
||||||
|
IOLog("QualcommWifi: Requete de scan multi-SSID (SCAN_REQ_MULTIPLE) recue depuis airportd !\n");
|
||||||
|
fScanInProgress = true;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
case APPLE80211_IOC_COUNTRY_CODE: {
|
||||||
|
apple80211_country_code_data *cc = (apple80211_country_code_data *)req_data;
|
||||||
|
if (cc) {
|
||||||
|
cc->version = APPLE80211_VERSION;
|
||||||
|
cc->cc[0] = 'F';
|
||||||
|
cc->cc[1] = 'R';
|
||||||
|
cc->cc[2] = 0;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case APPLE80211_IOC_LOCALE: {
|
||||||
|
apple80211_locale_data *loc = (apple80211_locale_data *)req_data;
|
||||||
|
if (loc) {
|
||||||
|
loc->version = APPLE80211_VERSION;
|
||||||
|
loc->locale = APPLE80211_LOCALE_ETSI;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case APPLE80211_IOC_DRIVER_VERSION: {
|
||||||
|
apple80211_version_data *vd = (apple80211_version_data *)req_data;
|
||||||
|
if (vd) {
|
||||||
|
vd->version = APPLE80211_VERSION;
|
||||||
|
const char *verStr = "Qualcomm FastConnect 7800 Wi-Fi 7 (v1.0.2)";
|
||||||
|
vd->string_len = (u_int16_t)strlen(verStr);
|
||||||
|
strlcpy(vd->string, verStr, sizeof(vd->string));
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
case APPLE80211_IOC_ASSOCIATE: {
|
case APPLE80211_IOC_ASSOCIATE: {
|
||||||
apple80211_assoc_data *assoc = (apple80211_assoc_data *)req_data;
|
apple80211_assoc_data *assoc = (apple80211_assoc_data *)req_data;
|
||||||
if (assoc) {
|
if (assoc) {
|
||||||
|
|||||||
Reference in new issue
Block a user