| 2949 | //Network ------------------------------------------------------------- |
| 2950 | |
| 2951 | UINT32 FIXNetwork (UINT8 *dsdt, UINT32 len, UINT32 card) |
| 2952 | { |
| 2953 | UINT32 i, k; |
| 2954 | UINT32 NetworkADR = 0, BridgeSize, Size, BrdADR = 0; |
| 2955 | UINT32 PCIADR, PCISIZE = 0; |
| 2956 | INT32 sizeoffset; |
| 2957 | AML_CHUNK *met, *met2; |
| 2958 | AML_CHUNK *brd; |
| 2959 | AML_CHUNK *root; |
| 2960 | AML_CHUNK *pack; |
| 2961 | AML_CHUNK *dev; |
| 2962 | CHAR8 *network; |
| 2963 | UINT32 FakeID = 0; |
| 2964 | UINT32 FakeVen = 0; |
| 2965 | CHAR8 NameCard[32]; |
| 2966 | |
| 2967 | if (!NetworkADR1[card]) return len; |
| 2968 | DBG("Start NetWork %d Fix\n", card); |
| 2969 | |
| 2970 | if (gSettings.FakeLAN) { |
| 2971 | FakeID = gSettings.FakeLAN >> 16; |
| 2972 | FakeVen = gSettings.FakeLAN & 0xFFFF; |
| 2973 | snprintf(NameCard, 32, "pci%x,%x", FakeVen, FakeID); |
| 2974 | Netmodel[card] = get_net_model((FakeVen << 16) + FakeID); |
| 2975 | } |
| 2976 | |
| 2977 | PCIADR = GetPciDevice(dsdt, len); |
| 2978 | if (PCIADR) { |
| 2979 | PCISIZE = get_size(dsdt, PCIADR); |
| 2980 | } |
| 2981 | if (!PCISIZE) return len; //what is the bad DSDT ?! |
| 2982 | NetworkName = FALSE; |
| 2983 | // Network Address |
| 2984 | for (i = 0x24; len >=10 && i < len - 10; i++) { |
| 2985 | if (CmpAdr(dsdt, i, NetworkADR1[card])) { //0x001C0004 |
| 2986 | BrdADR = devFind(dsdt, i); |
| 2987 | if (!BrdADR) { |
| 2988 | continue; |
| 2989 | } |
| 2990 | |
| 2991 | BridgeSize = get_size(dsdt, BrdADR); |
| 2992 | if (!BridgeSize) { |
| 2993 | continue; |
| 2994 | } |
| 2995 | if (NetworkADR2[card] != 0xFFFE){ //0 |
| 2996 | for (k = BrdADR + 9; k < BrdADR + BridgeSize; k++) { |
| 2997 | if (CmpAdr(dsdt, k, NetworkADR2[card])) { |
| 2998 | NetworkADR = devFind(dsdt, k); |
| 2999 | if (!NetworkADR) { |
| 3000 | continue; |
| 3001 | } |
| 3002 | |
| 3003 | device_name[1] = (__typeof_am__(device_name[1]))AllocateZeroPool(5); |
| 3004 | CopyMem(device_name[1], dsdt+k, 4); |
| 3005 | DBG("found NetWork device [0x%08X:%X] at %X and Name is %s\n", |
| 3006 | NetworkADR1[card], NetworkADR2[card], NetworkADR, device_name[1]); |
| 3007 | //renaming disabled until better way will found |
| 3008 | // ReplaceName(dsdt + BrdADR, BridgeSize, device_name[1], "GIGE"); |
no test coverage detected