| 3594 | UINT8 dataFW[] = {0x00,0x00,0x00,0x00}; |
| 3595 | |
| 3596 | UINT32 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 |
no test coverage detected