MCPcopy Create free account
hub / github.com/CloverHackyColor/CloverBootloader / FIXAirport

Function FIXAirport

rEFIt_UEFI/Platform/FixBiosDsdt.cpp:3149–3334  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

3147//CHAR8 data3ATH[] = {0x6B, 0x10, 0x00, 0x00};
3148
3149UINT32 FIXAirport (UINT8 *dsdt, UINT32 len)
3150{
3151 UINT32 i, k;
3152 UINT32 ArptADR = 0, BridgeSize, Size, BrdADR = 0;
3153 UINT32 PCIADR, PCISIZE = 0;
3154 INT32 sizeoffset;
3155 AML_CHUNK *met, *met2;
3156 AML_CHUNK* brd;
3157 AML_CHUNK* root;
3158 AML_CHUNK* pack;
3159 AML_CHUNK* dev;
3160 CHAR8 *network;
3161 UINT32 FakeID = 0;
3162 UINT32 FakeVen = 0;
3163 CHAR8 NameCard[32];
3164
3165 if (!ArptADR1) return len; // no device - no patch
3166 if ( gSettings.AirportBridgeDeviceName.notEmpty() && gSettings.AirportBridgeDeviceName.length() != 4 ) {
3167 MsgLog("AirportBridgeDeviceName must be 4 char long : ignored");
3168 gSettings.AirportBridgeDeviceName.setEmpty();
3169 }
3170
3171 if (gSettings.FakeWIFI) {
3172 FakeID = gSettings.FakeWIFI >> 16;
3173 FakeVen = gSettings.FakeWIFI & 0xFFFF;
3174 snprintf(NameCard, 32, "pci%x,%x", FakeVen, FakeID);
3175 }
3176
3177 PCIADR = GetPciDevice(dsdt, len);
3178 if (PCIADR) {
3179 PCISIZE = get_size(dsdt, PCIADR);
3180 }
3181 if (!PCISIZE) return len; //what is the bad DSDT ?!
3182
3183 DBG("Start Airport Fix\n");
3184 ArptName = FALSE;
3185 for (i=0x20; len >= 10 && i < len - 10; i++) {
3186 // AirPort Address
3187 if ( CmpAdr(dsdt, i, ArptADR1) || (gSettings.AirportBridgeDeviceName.notEmpty() && CmpDev(dsdt, i, gSettings.AirportBridgeDeviceName)) ) {
3188 BrdADR = devFind(dsdt, i);
3189 if (!BrdADR) {
3190 continue;
3191 }
3192 BridgeSize = get_size(dsdt, BrdADR);
3193 if(!BridgeSize) continue;
3194 if (ArptADR2 != 0xFFFE){
3195 for (k = BrdADR + 9; k < BrdADR + BridgeSize; k++) {
3196 if (CmpAdr(dsdt, k, ArptADR2)) {
3197 ArptADR = devFind(dsdt, k);
3198 if (!ArptADR) {
3199 continue;
3200 }
3201 device_name[9] = (__typeof_am__(device_name[9]))AllocateZeroPool(5);
3202 CopyMem(device_name[9], dsdt+k, 4);
3203 DBG("found Airport device [%08X:%X] at %X And Name is %s\n",
3204 ArptADR1, ArptADR2, ArptADR, device_name[9]);
3205 // ReplaceName(dsdt + BrdADR, BridgeSize, device_name[9], "ARPT"); //sometimes dangeous
3206 ArptName = TRUE;

Callers 1

FixBiosDsdtFunction · 0.85

Calls 15

snprintfFunction · 0.85
GetPciDeviceFunction · 0.85
get_sizeFunction · 0.85
CmpAdrFunction · 0.85
CmpDevFunction · 0.85
devFindFunction · 0.85
FindMethodFunction · 0.85
move_dataFunction · 0.85
CorrectOutersFunction · 0.85
aml_create_nodeFunction · 0.85
aml_add_deviceFunction · 0.85
aml_add_nameFunction · 0.85

Tested by

no test coverage detected