MCPcopy Create free account
hub / github.com/CloverHackyColor/CloverBootloader / FixRenameByBridge2

Function FixRenameByBridge2

rEFIt_UEFI/Platform/FixBiosDsdt.cpp:1819–1881  ·  view source on GitHub ↗

new method. by goodwin_c

Source from the content-addressed store, hash-verified

1817
1818//new method. by goodwin_c
1819UINT32 FixRenameByBridge2 (UINT8* dsdt, UINT32 len, const XBuffer<UINT8>& TgtBrgName, const XBuffer<UINT8>& ToFind, const XBuffer<UINT8>& ToReplace)
1820{
1821 INT32 adr;
1822 BOOLEAN found = FALSE;
1823 UINT32 i, k;
1824 UINT32 BrdADR = 0, BridgeSize;
1825
1826 if ( ToFind.isEmpty() || ToReplace.isEmpty() ) {
1827 DBG(" invalid patches!\n");
1828 return len;
1829 }
1830
1831 if (ToFind.size() != ToReplace.size()) {
1832 DBG(" find/replace different size!\n");
1833 return len;
1834 }
1835
1836 DBG(" pattern %02hhX%02hhX%02hhX%02hhX,", ToFind[0], ToFind[1], ToFind[2], ToFind[3]);
1837 if ((ToFind.size() + sizeof(EFI_ACPI_DESCRIPTION_HEADER)) > len) {
1838 DBG(" the patch is too large!\n");
1839 return len;
1840 }
1841
1842 DBG("Start ByBridge Rename Fix\n");
1843 for (i=0x20; len >= 10 && i < len - 10; i++) {
1844 if (CmpDev(dsdt, i, TgtBrgName)) {
1845 BrdADR = devFind(dsdt, i);
1846 if (!BrdADR) {
1847 continue;
1848 }
1849 BridgeSize = get_size(dsdt, BrdADR);
1850 if(!BridgeSize) continue;
1851 if(BridgeSize <= ToFind.size()) continue;
1852
1853 k = 0;
1854 found = FALSE;
1855 while (k <= 100) {
1856 adr = FindBin(dsdt + BrdADR, BridgeSize, ToFind);
1857 if (adr < 0) {
1858 if (found) {
1859 DBG(" ]\n");
1860 } else {
1861 DBG(" bin not found / already patched!\n");
1862 }
1863 return len;
1864 }
1865
1866 if (!found) {
1867 DBG(" patched at: [");
1868 }
1869
1870 DBG(" (%X)", adr);
1871 found = TRUE;
1872 if ( ToReplace.notEmpty() ) {
1873 CopyMem(dsdt + BrdADR + adr, ToReplace.data(), ToReplace.size());
1874 }
1875 k++;
1876 }

Callers 2

FixBiosDsdtFunction · 0.85
PatchAllTablesFunction · 0.85

Calls 9

CmpDevFunction · 0.85
devFindFunction · 0.85
get_sizeFunction · 0.85
FindBinFunction · 0.85
CopyMemFunction · 0.50
isEmptyMethod · 0.45
sizeMethod · 0.45
notEmptyMethod · 0.45
dataMethod · 0.45

Tested by

no test coverage detected