mirror of
https://github.com/acidanthera/OpenCorePkg.git
synced 2025-12-08 19:25:01 +00:00
OpenDuet: Fix handoff of ACPI v1.0 (#585)
This is long-standing bug, going back to the transition from EFI to UEFI (tianore/edk to tianocore/edk2). The default ACPI level was changed from 1.0 to 2.0, but this code in Duet was not changed to match. Signed-off-by: Mike Beaton <mjsbeaton@gmail.com>
This commit is contained in:
parent
6e20078ec5
commit
ec2713af48
@ -280,7 +280,7 @@ HOB_TEMPLATE gHobTemplate = {
|
||||
sizeof (TABLE_HOB), // Hob size
|
||||
0 // reserved
|
||||
},
|
||||
EFI_ACPI_TABLE_GUID
|
||||
ACPI_10_TABLE_GUID
|
||||
},
|
||||
0
|
||||
},
|
||||
|
||||
@ -199,7 +199,7 @@ FindAcpiPtr (
|
||||
//
|
||||
// Check ACPI2.0 table
|
||||
//
|
||||
if ((int)Hob->Acpi20.Table != -1) {
|
||||
if ((int)Hob->Acpi20.Table != 0) {
|
||||
Rsdp = (EFI_ACPI_3_0_ROOT_SYSTEM_DESCRIPTION_POINTER *)(UINTN)Hob->Acpi20.Table;
|
||||
Rsdt = (RSDT_TABLE *)(UINTN)Rsdp->RsdtAddress;
|
||||
Xsdt = NULL;
|
||||
@ -225,7 +225,7 @@ FindAcpiPtr (
|
||||
//
|
||||
// Check ACPI1.0 table
|
||||
//
|
||||
if ((AcpiTable == NULL) && ((int)Hob->Acpi.Table != -1)) {
|
||||
if ((AcpiTable == NULL) && ((int)Hob->Acpi.Table != 0)) {
|
||||
Rsdp = (EFI_ACPI_3_0_ROOT_SYSTEM_DESCRIPTION_POINTER *)(UINTN)Hob->Acpi.Table;
|
||||
Rsdt = (RSDT_TABLE *)(UINTN)Rsdp->RsdtAddress;
|
||||
//
|
||||
@ -435,8 +435,16 @@ PrepareHobLegacyTable (
|
||||
IN HOB_TEMPLATE *Hob
|
||||
)
|
||||
{
|
||||
Hob->Acpi.Table = (EFI_PHYSICAL_ADDRESS)(UINTN)FindAcpiRsdPtr ();
|
||||
Hob->Acpi20.Table = (EFI_PHYSICAL_ADDRESS)(UINTN)FindAcpiRsdPtr ();
|
||||
EFI_ACPI_3_0_ROOT_SYSTEM_DESCRIPTION_POINTER *AcpiRsdPtr;
|
||||
|
||||
AcpiRsdPtr = FindAcpiRsdPtr ();
|
||||
Hob->Acpi.Table = (EFI_PHYSICAL_ADDRESS)(UINTN)AcpiRsdPtr;
|
||||
if ((AcpiRsdPtr != NULL) && (AcpiRsdPtr->Revision >= 2)) {
|
||||
Hob->Acpi20.Table = (EFI_PHYSICAL_ADDRESS)(UINTN)AcpiRsdPtr;
|
||||
} else {
|
||||
Hob->Acpi20.Table = (EFI_PHYSICAL_ADDRESS)(UINTN)NULL;
|
||||
}
|
||||
|
||||
Hob->Smbios.Table = (EFI_PHYSICAL_ADDRESS)(UINTN)FindSMBIOSPtr ();
|
||||
Hob->Mps.Table = (EFI_PHYSICAL_ADDRESS)(UINTN)FindMPSPtr ();
|
||||
|
||||
|
||||
@ -42,7 +42,7 @@ Abstract:
|
||||
|
||||
EFI_GUID *gTableGuidArray[] = {
|
||||
&gEfiAcpi10TableGuid,
|
||||
&gEfiAcpiTableGuid,
|
||||
&gEfiAcpi20TableGuid,
|
||||
&gEfiSmbiosTableGuid,
|
||||
&gEfiSmbios3TableGuid
|
||||
};
|
||||
@ -239,7 +239,7 @@ Returns:
|
||||
//
|
||||
AcpiHeader = (VOID *)(UINTN)(*(UINT64 *)(*Table));
|
||||
|
||||
if (CompareGuid (TableGuid, &gEfiAcpiTableGuid) || CompareGuid (TableGuid, &gEfiAcpi20TableGuid)) {
|
||||
if (CompareGuid (TableGuid, &gEfiAcpi10TableGuid) || CompareGuid (TableGuid, &gEfiAcpi20TableGuid)) {
|
||||
if (((EFI_ACPI_1_0_ROOT_SYSTEM_DESCRIPTION_POINTER *)AcpiHeader)->Reserved == 0x00) {
|
||||
//
|
||||
// If Acpi 1.0 Table, then RSDP structure doesn't contain Length field, use structure size
|
||||
|
||||
@ -63,7 +63,6 @@
|
||||
gEfiAcpi20TableGuid
|
||||
gEfiSmbiosTableGuid
|
||||
gEfiSmbios3TableGuid
|
||||
gEfiAcpiTableGuid
|
||||
gLdrMemoryDescriptorGuid
|
||||
|
||||
[Protocols]
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user