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

Function FIXFirewire

rEFIt_UEFI/Platform/FixBiosDsdt.cpp:3596–3742  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

3594UINT8 dataFW[] = {0x00,0x00,0x00,0x00};
3595
3596UINT32 FIXFirewire (UINT8 *dsdt, UINT32 len)
3597{
3598 UINT32 i, k;
3599 UINT32 FirewireADR = 0, BrdADR = 0, BridgeSize, Size;
3600 INT32 sizeoffset;
3601 UINT32 PCIADR, PCISIZE = 0;
3602 AML_CHUNK *met;
3603 AML_CHUNK *root;
3604 AML_CHUNK *stro;
3605 AML_CHUNK *pack;
3606 CHAR8 *firewire;
3607 AML_CHUNK* device;
3608
3609 PCIADR = GetPciDevice(dsdt, len);
3610 if (PCIADR) {
3611 PCISIZE = get_size(dsdt, PCIADR);
3612 }
3613 if (!PCISIZE) {
3614 DBG("wrong PCI0 address, patch FRWR will not be applied\n");
3615 return len;
3616 }
3617
3618 // Firewire Address
3619 for (i = 0x20; len >=10 && i < len - 10; i++) {
3620 if (FirewireADR1 != 0x00000000 &&
3621 CmpAdr(dsdt, i, FirewireADR1)) {
3622 BrdADR = devFind(dsdt, i);
3623 if (!BrdADR) {
3624 continue;
3625 }
3626
3627 BridgeSize = get_size(dsdt, BrdADR);
3628 if (FirewireADR2 != 0xFFFE ){
3629 for (k = BrdADR + 9; k < BrdADR + BridgeSize; k++) {
3630 if (CmpAdr(dsdt, k, FirewireADR2)) {
3631 FirewireADR = devFind(dsdt, k);
3632 if (!FirewireADR) {
3633 continue;
3634 }
3635
3636 device_name[2] = (__typeof_am__(device_name[2]))AllocateZeroPool(5);
3637 CopyMem(device_name[2], dsdt+k, 4);
3638 DBG("found Firewire device NAME(_ADR,0x%08X) at %X And Name is %s\n",
3639 FirewireADR2, k, device_name[2]);
3640 ReplaceName(dsdt + BrdADR, BridgeSize, device_name[2], "FRWR");
3641 FirewireName = TRUE;
3642 break;
3643 }
3644 }
3645 }
3646 break;
3647 } // End Firewire
3648 }
3649 if (!BrdADR) {
3650 DBG("Bridge for FRWR is not found\n");
3651 return len;
3652 }
3653 //safe for twice fix: if _DSM already present then cancel fix

Callers 1

FixBiosDsdtFunction · 0.85

Calls 15

GetPciDeviceFunction · 0.85
get_sizeFunction · 0.85
CmpAdrFunction · 0.85
devFindFunction · 0.85
ReplaceNameFunction · 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
aml_add_byteFunction · 0.85

Tested by

no test coverage detected