[HALX86] HalpSetupAcpiPhase0(): Fix ACPI version reporting (#8211)

Use the correct structure and fields.
Based on ACPI v1.0-v6.6 documentation at https://uefi.org/acpi/specs

Addendum to c21792df52 (r53831).
This commit is contained in:
Serge Gautherie
2025-07-05 00:48:36 +02:00
committed by GitHub
parent 0462ebf0d6
commit b0420ca511

View File

@@ -871,34 +871,85 @@ HalpSetupAcpiPhase0(IN PLOADER_PARAMETER_BLOCK LoaderBlock)
/* Setup the boot table */
HalpInitBootTable(LoaderBlock);
/* Debugging code */
/* Log some ACPI data */
{
PLIST_ENTRY ListHead, NextEntry;
PACPI_CACHED_TABLE CachedTable;
PLIST_ENTRY NextEntry;
PCSTR AcpiVersion = NULL;
/* Loop cached tables */
ListHead = &HalpAcpiTableCacheList;
NextEntry = ListHead->Flink;
while (NextEntry != ListHead)
/* Find the ACPI version (range) out */
// v1.0+: Revision is major version.
// v5.1+: minor_revision is minor version.
// v6.4+: errata bits are errata version.
switch (Fadt->Header.Revision)
{
/* Get the table */
CachedTable = CONTAINING_RECORD(NextEntry, ACPI_CACHED_TABLE, Links);
case 0: // Should not happen.
AcpiVersion = "Unknown_0";
break;
case 1:
AcpiVersion = "1.0-1.0b";
break;
case 2: // Should not happen.
AcpiVersion = "Unknown_2";
break;
case 3:
AcpiVersion = "1.5-2.0_C";
break;
case 4:
AcpiVersion = "3.0-4.0_A";
break;
case 5:
if (Fadt->minor_revision == 0)
AcpiVersion = "5.0-5.0_B";
else if (Fadt->minor_revision == 1)
AcpiVersion = "5.1-5.1_B";
break;
case 6:
if (Fadt->minor_revision == 0)
AcpiVersion = "6.0-6.0_A";
else if (Fadt->minor_revision == 1)
AcpiVersion = "6.1-6.1_A";
else if (Fadt->minor_revision == 2)
AcpiVersion = "6.2-6.2_B";
else if (Fadt->minor_revision == 3)
AcpiVersion = "6.3-6.3_A";
else if ((Fadt->minor_revision & 0x0F) == 0x04)
{
if ((Fadt->minor_revision & 0xF0) == 0x00)
AcpiVersion = "6.4";
else if ((Fadt->minor_revision & 0xF0) == 0x10)
AcpiVersion = "6.4_A";
}
else if (Fadt->minor_revision == 5) // v6.5_A too is documented as errata=0.
AcpiVersion = "6.5-6.6";
break;
}
/* Compare signatures */
if ((CachedTable->Header.Signature == RSDT_SIGNATURE) ||
(CachedTable->Header.Signature == XSDT_SIGNATURE))
{
DPRINT1("ACPI %u.0 Detected. Tables:", CachedTable->Header.Revision + 1);
}
/* Print the ACPI version */
DPRINT1("ACPI v");
if (AcpiVersion == NULL)
{
// Unknown past values, or newer than v6.6 (documented as 6.5).
DbgPrint("Unknown_%u_%u", Fadt->Header.Revision, Fadt->minor_revision);
}
else
{
DbgPrint("%s", AcpiVersion);
}
DbgPrint(" detected. Tables:");
/* List cached tables */
for (NextEntry = HalpAcpiTableCacheList.Flink;
NextEntry != &HalpAcpiTableCacheList;
NextEntry = NextEntry->Flink)
{
PACPI_CACHED_TABLE CachedTable = CONTAINING_RECORD(NextEntry, ACPI_CACHED_TABLE, Links);
/* Print the table signature */
DbgPrint(" [%c%c%c%c]",
CachedTable->Header.Signature & 0x000000FF,
(CachedTable->Header.Signature & 0x0000FF00) >> 8,
(CachedTable->Header.Signature & 0x00FF0000) >> 16,
(CachedTable->Header.Signature & 0xFF000000) >> 24);
/* Keep going */
NextEntry = NextEntry->Flink;
}
DbgPrint("\n");
}