| 2494 | UINT8 VenATI[] = {0x02, 0x10}; |
| 2495 | |
| 2496 | UINT32 FIXDisplay (UINT8 *dsdt, UINT32 len, INT32 VCard) |
| 2497 | { |
| 2498 | UINT32 i = 0, j, k; |
| 2499 | INT32 sizeoffset = 0; |
| 2500 | UINT32 PCIADR = 0, PCISIZE = 0, Size; |
| 2501 | CHAR8 *display; |
| 2502 | UINT32 devadr=0, devsize=0, devadr1=0, devsize1=0; |
| 2503 | BOOLEAN DISPLAYFIX = FALSE; |
| 2504 | BOOLEAN NonUsable = FALSE; |
| 2505 | BOOLEAN DsmFound = FALSE; |
| 2506 | BOOLEAN NeedHDMI = !!(gSettings.FixDsdt & FIX_HDMI); |
| 2507 | AML_CHUNK *root = NULL; |
| 2508 | AML_CHUNK *gfx0, *peg0; |
| 2509 | AML_CHUNK *met, *met2; |
| 2510 | AML_CHUNK *pack; |
| 2511 | UINT32 FakeID = 0; |
| 2512 | UINT32 FakeVen = 0; |
| 2513 | DisplayName1 = FALSE; |
| 2514 | |
| 2515 | if (!DisplayADR1[VCard]) return len; |
| 2516 | |
| 2517 | PCIADR = GetPciDevice(dsdt, len); |
| 2518 | if (PCIADR) { |
| 2519 | PCISIZE = get_size(dsdt, PCIADR); |
| 2520 | } |
| 2521 | if (!PCISIZE) return len; //what is the bad DSDT ?! |
| 2522 | |
| 2523 | MsgLog("Start Display%d Fix\n", VCard); |
| 2524 | root = aml_create_node(NULL); |
| 2525 | |
| 2526 | //search DisplayADR1[0] |
| 2527 | for (j=0x20; len >= 10 && j < len - 10; j++) { |
| 2528 | if (CmpAdr(dsdt, j, DisplayADR1[VCard])) { //for example 0x00020000=2,0 |
| 2529 | devadr = devFind(dsdt, j); //PEG0@2,0 |
| 2530 | if (!devadr) { |
| 2531 | continue; |
| 2532 | } |
| 2533 | devsize = get_size(dsdt, devadr); //sizeof PEG0 0x35 |
| 2534 | if (devsize) { |
| 2535 | DisplayName1 = TRUE; |
| 2536 | break; |
| 2537 | } |
| 2538 | } // End Display1 |
| 2539 | } |
| 2540 | |
| 2541 | //what if PEG0 is not found? |
| 2542 | if (devadr) { |
| 2543 | for (j=devadr; j<devadr+devsize; j++) { //search card inside PEG0@0 |
| 2544 | if (CmpAdr(dsdt, j, DisplayADR2[VCard])) { //else DISPLAYFIX==false |
| 2545 | devadr1 = devFind(dsdt, j); //found PEGP |
| 2546 | if (!devadr1) { |
| 2547 | continue; |
| 2548 | } |
| 2549 | devsize1 = get_size(dsdt, devadr1); |
| 2550 | if (devsize1) { |
| 2551 | MsgLog("Found internal video device %X @%X\n", DisplayADR2[VCard], devadr1); |
| 2552 | DISPLAYFIX = TRUE; |
| 2553 | break; |
no test coverage detected