Merge pull request #194 from stevezhengshiqi/master

Add missing TgtBridge check in AcpiPatcher::PatchAllTables()
This commit is contained in:
Sergey 2020-07-03 09:51:15 +03:00 committed by GitHub
commit d1fbcb92bf
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 27 additions and 16 deletions

View File

@ -456,10 +456,18 @@ VOID PatchAllTables()
DBG(" disabled\n"); DBG(" disabled\n");
continue; continue;
} }
Len = FixAny((UINT8*)NewTable, Len, if (!gSettings.PatchDsdtTgt[i]) {
(const UINT8*)gSettings.PatchDsdtFind[i], gSettings.LenToFind[i], Len = FixAny((UINT8*)NewTable, Len,
(const UINT8*)gSettings.PatchDsdtReplace[i], gSettings.LenToReplace[i]); (const UINT8*)gSettings.PatchDsdtFind[i], gSettings.LenToFind[i],
//DBG(" OK\n"); (const UINT8*)gSettings.PatchDsdtReplace[i], gSettings.LenToReplace[i]);
//DBG(" OK\n");
}else{
//DBG("Patching: renaming in bridge\n");
Len = FixRenameByBridge2((UINT8*)NewTable, Len,
gSettings.PatchDsdtTgt[i],
(const UINT8*)gSettings.PatchDsdtFind[i], gSettings.LenToFind[i],
(const UINT8*)gSettings.PatchDsdtReplace[i], gSettings.LenToReplace[i]);
}
} }
} }
// fixup length and checksum // fixup length and checksum

View File

@ -1790,13 +1790,12 @@ UINT32 FixAny (UINT8* dsdt, UINT32 len, const UINT8* ToFind, UINT32 LenTF, const
} }
//new method. by goodwin_c //new method. by goodwin_c
UINT32 FixRenameByBridge2 (UINT8* dsdt, UINT32 len, CHAR8* TgtBrgName, const UINT8* ToFind, UINT32 LenTF, UINT8* ToReplace, UINT32 LenTR) UINT32 FixRenameByBridge2 (UINT8* dsdt, UINT32 len, CHAR8* TgtBrgName, const UINT8* ToFind, UINT32 LenTF, const UINT8* ToReplace, UINT32 LenTR)
{ {
INT32 adr; INT32 adr;
BOOLEAN found = FALSE; BOOLEAN found = FALSE;
UINT32 i, k; UINT32 i, k;
UINT32 BrdADR = 0, BridgeSize; UINT32 BrdADR = 0, BridgeSize;
UINT32 PCIADR, PCISIZE = 0;
if (!ToFind || !LenTF || !LenTR) { if (!ToFind || !LenTF || !LenTR) {
DBG(" invalid patches!\n"); DBG(" invalid patches!\n");
@ -1814,12 +1813,6 @@ UINT32 FixRenameByBridge2 (UINT8* dsdt, UINT32 len, CHAR8* TgtBrgName, const UIN
return len; return len;
} }
PCIADR = GetPciDevice(dsdt, len);
if (PCIADR) {
PCISIZE = get_size(dsdt, PCIADR);
}
if (!PCISIZE) return len; //what is the bad DSDT ?!
DBG("Start ByBridge Rename Fix\n"); DBG("Start ByBridge Rename Fix\n");
for (i=0x20; len >= 10 && i < len - 10; i++) { for (i=0x20; len >= 10 && i < len - 10; i++) {
if (CmpDev(dsdt, i, (UINT8*)TgtBrgName)) { if (CmpDev(dsdt, i, (UINT8*)TgtBrgName)) {
@ -5352,10 +5345,8 @@ VOID FixBiosDsdt(UINT8* temp, EFI_ACPI_2_0_FIXED_ACPI_DESCRIPTION_TABLE* fadt, C
// DBG("Patching: renaming in bridge\n"); // DBG("Patching: renaming in bridge\n");
DsdtLen = FixRenameByBridge2(temp, DsdtLen, DsdtLen = FixRenameByBridge2(temp, DsdtLen,
gSettings.PatchDsdtTgt[i], gSettings.PatchDsdtTgt[i],
(const UINT8*)gSettings.PatchDsdtFind[i], (const UINT8*)gSettings.PatchDsdtFind[i], gSettings.LenToFind[i],
gSettings.LenToFind[i], (const UINT8*)gSettings.PatchDsdtReplace[i], gSettings.LenToReplace[i]);
gSettings.PatchDsdtReplace[i],
gSettings.LenToReplace[i]);
} }
} else { } else {

View File

@ -92,5 +92,17 @@ FixAny (
); );
UINT32
FixRenameByBridge2 (
UINT8* dsdt,
UINT32 len,
CHAR8* TgtBrgName,
const UINT8* ToFind,
UINT32 LenTF,
const UINT8* ToReplace,
UINT32 LenTR
);
#endif /* PLATFORM_FIXBIOSDSDT_H_ */ #endif /* PLATFORM_FIXBIOSDSDT_H_ */