mirror of
https://github.com/reactos/reactos.git
synced 2026-06-09 01:12:59 +08:00
[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:
@@ -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");
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user