| 2789 | } |
| 2790 | |
| 2791 | UINT32 AddHDMI (UINT8 *dsdt, UINT32 len) |
| 2792 | { |
| 2793 | UINT32 i, j, k; |
| 2794 | INT32 sizeoffset = 0; |
| 2795 | UINT32 PCIADR = 0, PCISIZE = 0, Size; |
| 2796 | CHAR8 *hdmi = NULL; |
| 2797 | UINT32 devadr=0, BridgeSize=0, devadr1=0; //, devsize1=0; |
| 2798 | BOOLEAN BridgeFound = FALSE; |
| 2799 | BOOLEAN HdauFound = FALSE; |
| 2800 | AML_CHUNK* brd = NULL; |
| 2801 | AML_CHUNK *root = NULL; |
| 2802 | AML_CHUNK *met, *met2; |
| 2803 | AML_CHUNK *pack; |
| 2804 | |
| 2805 | if (!HDMIADR1) return len; |
| 2806 | |
| 2807 | PCIADR = GetPciDevice(dsdt, len); |
| 2808 | if (PCIADR) { |
| 2809 | PCISIZE = get_size(dsdt, PCIADR); |
| 2810 | } |
| 2811 | if (!PCISIZE) return len; //what is the bad DSDT ?! |
| 2812 | |
| 2813 | DBG("Start HDMI Fix\n"); |
| 2814 | // Device Address |
| 2815 | for (i=0x20; len >= 10 && i < len - 10; i++) { |
| 2816 | if (CmpAdr(dsdt, i, HDMIADR1)) { |
| 2817 | devadr = devFind(dsdt, i); |
| 2818 | if (!devadr) { |
| 2819 | continue; |
| 2820 | } |
| 2821 | BridgeSize = get_size(dsdt, devadr); |
| 2822 | if (!BridgeSize) { |
| 2823 | continue; |
| 2824 | } |
| 2825 | BridgeFound = TRUE; |
| 2826 | if (HDMIADR2 != 0xFFFE){ |
| 2827 | for (k = devadr + 9; k < devadr + BridgeSize; k++) { |
| 2828 | if (CmpAdr(dsdt, k, HDMIADR2)) |
| 2829 | { |
| 2830 | devadr1 = devFind(dsdt, k); |
| 2831 | if (!devadr1) { |
| 2832 | continue; |
| 2833 | } |
| 2834 | device_name[11] = (__typeof_am__(device_name[11]))AllocateZeroPool(5); |
| 2835 | CopyMem(device_name[11], dsdt+k, 4); |
| 2836 | DBG("found HDMI device [0x%08X:%X] at %X and Name is %s\n", |
| 2837 | HDMIADR1, HDMIADR2, devadr1, device_name[11]); |
| 2838 | ReplaceName(dsdt + devadr, BridgeSize, device_name[11], "HDAU"); |
| 2839 | HdauFound = TRUE; |
| 2840 | break; |
| 2841 | } |
| 2842 | } |
| 2843 | if (!HdauFound) { |
| 2844 | DBG("have no HDMI device while HDMIADR2=%X\n", HDMIADR2); |
| 2845 | devadr1 = devadr; |
| 2846 | } |
| 2847 | } else { |
| 2848 | devadr1 = devadr; |
no test coverage detected