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

Function PatchACPI

rEFIt_UEFI/Platform/AcpiPatcher.cpp:1672–2267  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1670}
1671
1672EFI_STATUS PatchACPI(IN REFIT_VOLUME *Volume, const XString8& OSVersion)
1673{
1674 EFI_STATUS Status = EFI_SUCCESS;
1675 UINTN Index;
1676 EFI_ACPI_2_0_ROOT_SYSTEM_DESCRIPTION_POINTER *RsdPointer = NULL;
1677 EFI_ACPI_2_0_FIXED_ACPI_DESCRIPTION_TABLE *FadtPointer = NULL;
1678 EFI_ACPI_4_0_FIXED_ACPI_DESCRIPTION_TABLE *newFadt = NULL;
1679 // EFI_ACPI_HIGH_PRECISION_EVENT_TIMER_TABLE_HEADER *Hpet = NULL;
1680 EFI_ACPI_4_0_FIRMWARE_ACPI_CONTROL_STRUCTURE *Facs = NULL;
1681 EFI_PHYSICAL_ADDRESS dsdt = EFI_SYSTEM_TABLE_MAX_ADDRESS; //0xFE000000;
1682 EFI_PHYSICAL_ADDRESS BufferPtr;
1683 SSDT_TABLE *Ssdt = NULL;
1684 UINT8 *buffer = NULL;
1685 UINTN bufferLen = 0;
1686 constexpr LStringW PathPatched = L"\\EFI\\CLOVER\\ACPI\\patched";
1687 XStringW PathDsdt; // = L"\\DSDT.aml";
1688// CHAR16* PatchedAPIC = L"\\EFI\\CLOVER\\ACPI\\origin\\APIC-p.aml";
1689 UINT32* rf = NULL;
1690 UINT64* xf = NULL;
1691 UINT64 XDsdt; //save values if present
1692 UINT64 XFirmwareCtrl;
1693 EFI_FILE *RootDir;
1694 UINT32 eCntR; //, eCntX;
1695 UINT32 *pEntryR;
1696 CHAR8 *pEntry;
1697 EFI_ACPI_DESCRIPTION_HEADER *TableHeader;
1698 // -===== APIC =====-
1699 EFI_ACPI_DESCRIPTION_HEADER *ApicTable;
1700 // EFI_ACPI_2_0_MULTIPLE_APIC_DESCRIPTION_TABLE_HEADER *ApicHeader;
1701 EFI_ACPI_2_0_PROCESSOR_LOCAL_APIC_STRUCTURE *ProcLocalApic;
1702 EFI_ACPI_2_0_LOCAL_APIC_NMI_STRUCTURE *LocalApicNMI;
1703 // UINTN ApicLen;
1704 UINTN ApicCPUNum;
1705 UINT8 *SubTable;
1706 BOOLEAN DsdtLoaded = FALSE;
1707 BOOLEAN NeedUpdate = FALSE;
1708 OPER_REGION *tmpRegion;
1709 XStringW AcpiOemPath = SWPrintf("%ls\\ACPI\\patched", OEMPath.wc_str());
1710
1711 DbgHeader("PatchACPI");
1712
1713 PathDsdt = SWPrintf("\\%ls", gSettings.DsdtName.wc_str());
1714 //try to find in SystemTable
1715 for(Index = 0; Index < gST->NumberOfTableEntries; Index++) {
1716 if(CompareGuid (&gST->ConfigurationTable[Index].VendorGuid, &gEfiAcpi20TableGuid)) {
1717 // Acpi 2.0
1718 RsdPointer = (EFI_ACPI_2_0_ROOT_SYSTEM_DESCRIPTION_POINTER*)gST->ConfigurationTable[Index].VendorTable;
1719 break;
1720 }
1721 else if(CompareGuid (&gST->ConfigurationTable[Index].VendorGuid, &gEfiAcpi10TableGuid)) {
1722 // Acpi 1.0 - RSDT only
1723 RsdPointer = (EFI_ACPI_2_0_ROOT_SYSTEM_DESCRIPTION_POINTER*)gST->ConfigurationTable[Index].VendorTable;
1724 continue;
1725 }
1726 }
1727
1728 if (!RsdPointer) {
1729 return EFI_UNSUPPORTED;

Callers 1

StartLoaderMethod · 0.85

Calls 15

SWPrintfFunction · 0.85
DbgHeaderFunction · 0.85
ScanRSDTFunction · 0.85
ScanXSDTFunction · 0.85
Checksum8Function · 0.85
PatchTableHeaderFunction · 0.85
FixChecksumFunction · 0.85
GetBiosRegionsFunction · 0.85
FileExistsFunction · 0.85
egLoadFileFunction · 0.85
egSaveFileFunction · 0.85
FixBiosDsdtFunction · 0.85

Tested by

no test coverage detected