summaryrefslogtreecommitdiff
path: root/source/tools/acpiexec/aetables.c
diff options
context:
space:
mode:
Diffstat (limited to 'source/tools/acpiexec/aetables.c')
-rw-r--r--source/tools/acpiexec/aetables.c75
1 files changed, 44 insertions, 31 deletions
diff --git a/source/tools/acpiexec/aetables.c b/source/tools/acpiexec/aetables.c
index ebb6aeb0e8d6e..75dea6127327d 100644
--- a/source/tools/acpiexec/aetables.c
+++ b/source/tools/acpiexec/aetables.c
@@ -87,7 +87,6 @@ static ACPI_TABLE_XSDT *LocalXSDT;
#define BASE_XSDT_SIZE ((BASE_XSDT_TABLES) * sizeof (UINT64))
#define ACPI_MAX_INIT_TABLES (32)
-static ACPI_TABLE_DESC Tables[ACPI_MAX_INIT_TABLES];
/******************************************************************************
@@ -155,7 +154,13 @@ AeInitializeTableHeader (
strncpy (Header->OemId, "Intel", ACPI_OEM_ID_SIZE);
strncpy (Header->OemTableId, "AcpiExec", ACPI_OEM_TABLE_ID_SIZE);
strncpy (Header->AslCompilerId, "INTL", ACPI_NAME_SIZE);
- Header->AslCompilerRevision = 0x20131218;
+ Header->AslCompilerRevision = ACPI_CA_VERSION;
+
+ /* Set the checksum, must set to zero first */
+
+ Header->Checksum = 0;
+ Header->Checksum = (UINT8) -AcpiTbChecksum (
+ (void *) Header, Header->Length);
}
@@ -216,8 +221,6 @@ AeBuildLocalTables (
}
memset (LocalXSDT, 0, XsdtSize);
- AeInitializeTableHeader ((void *) LocalXSDT, ACPI_SIG_XSDT, XsdtSize);
-
LocalXSDT->TableOffsetEntry[0] = ACPI_PTR_TO_PHYSADDR (&LocalFADT);
NextIndex = 1;
@@ -307,9 +310,7 @@ AeBuildLocalTables (
/* Set checksums for both XSDT and RSDP */
- LocalXSDT->Header.Checksum = 0;
- LocalXSDT->Header.Checksum = (UINT8) -AcpiTbChecksum (
- (void *) LocalXSDT, LocalXSDT->Header.Length);
+ AeInitializeTableHeader ((void *) LocalXSDT, ACPI_SIG_XSDT, XsdtSize);
LocalRSDP.Checksum = 0;
LocalRSDP.Checksum = (UINT8) -AcpiTbChecksum (
@@ -334,8 +335,8 @@ AeBuildLocalTables (
if (ExternalFadt)
{
/*
- * Use the external FADT, but we must update the DSDT/FACS addresses
- * as well as the checksum
+ * Use the external FADT, but we must update the DSDT/FACS
+ * addresses as well as the checksum
*/
ExternalFadt->Dsdt = (UINT32) DsdtAddress;
if (!AcpiGbl_ReducedHardware)
@@ -343,19 +344,24 @@ AeBuildLocalTables (
ExternalFadt->Facs = ACPI_PTR_TO_PHYSADDR (&LocalFACS);
}
- /* Is there room in the FADT for the XDsdst and XFacs 64-bit pointers? */
-
- if (ExternalFadt->Header.Length > ACPI_PTR_DIFF (&ExternalFadt->XDsdt, ExternalFadt))
+ /*
+ * If there room in the FADT for the XDsdt and XFacs 64-bit
+ * pointers, use them.
+ */
+ if (ExternalFadt->Header.Length > ACPI_PTR_DIFF (
+ &ExternalFadt->XDsdt, ExternalFadt))
{
- ExternalFadt->XDsdt = DsdtAddress;
+ ExternalFadt->Dsdt = 0;
+ ExternalFadt->Facs = 0;
+ ExternalFadt->XDsdt = DsdtAddress;
if (!AcpiGbl_ReducedHardware)
{
ExternalFadt->XFacs = ACPI_PTR_TO_PHYSADDR (&LocalFACS);
}
}
- /* Complete the FADT with the checksum */
+ /* Complete the external FADT with the checksum */
ExternalFadt->Header.Checksum = 0;
ExternalFadt->Header.Checksum = (UINT8) -AcpiTbChecksum (
@@ -364,12 +370,8 @@ AeBuildLocalTables (
else if (AcpiGbl_UseHwReducedFadt)
{
memcpy (&LocalFADT, HwReducedFadtCode, ACPI_FADT_V5_SIZE);
- LocalFADT.Dsdt = (UINT32) DsdtAddress;
+ LocalFADT.Dsdt = 0;
LocalFADT.XDsdt = DsdtAddress;
-
- LocalFADT.Header.Checksum = 0;
- LocalFADT.Header.Checksum = (UINT8) -AcpiTbChecksum (
- (void *) &LocalFADT, LocalFADT.Header.Length);
}
else
{
@@ -377,7 +379,6 @@ AeBuildLocalTables (
* Build a local FADT so we can test the hardware/event init
*/
LocalFADT.Header.Revision = 5;
- AeInitializeTableHeader ((void *) &LocalFADT, ACPI_SIG_FADT, sizeof (ACPI_TABLE_FADT));
/* Setup FADT header and DSDT/FACS addresses */
@@ -413,15 +414,13 @@ AeBuildLocalTables (
LocalFADT.XPm1bEventBlock.SpaceId = ACPI_ADR_SPACE_SYSTEM_IO;
LocalFADT.XPm1bEventBlock.Address = LocalFADT.Pm1bEventBlock;
- LocalFADT.XPm1bEventBlock.BitWidth = (UINT8) ACPI_MUL_8 (LocalFADT.Pm1EventLength);
-
- /* Complete the FADT with the checksum */
-
- LocalFADT.Header.Checksum = 0;
- LocalFADT.Header.Checksum = (UINT8) -AcpiTbChecksum (
- (void *) &LocalFADT, LocalFADT.Header.Length);
+ LocalFADT.XPm1bEventBlock.BitWidth = (UINT8)
+ ACPI_MUL_8 (LocalFADT.Pm1EventLength);
}
+ AeInitializeTableHeader ((void *) &LocalFADT,
+ ACPI_SIG_FADT, sizeof (ACPI_TABLE_FADT));
+
/* Build a FACS */
memset (&LocalFACS, 0, sizeof (ACPI_TABLE_FACS));
@@ -443,6 +442,8 @@ AeBuildLocalTables (
LocalTEST.Revision = 1;
LocalTEST.Length = sizeof (ACPI_TABLE_HEADER);
+
+ LocalTEST.Checksum = 0;
LocalTEST.Checksum = (UINT8) -AcpiTbChecksum (
(void *) &LocalTEST, LocalTEST.Length);
@@ -455,6 +456,8 @@ AeBuildLocalTables (
LocalBADTABLE.Revision = 1;
LocalBADTABLE.Length = sizeof (ACPI_TABLE_HEADER);
+
+ LocalBADTABLE.Checksum = 0;
LocalBADTABLE.Checksum = (UINT8) -AcpiTbChecksum (
(void *) &LocalBADTABLE, LocalBADTABLE.Length);
}
@@ -482,14 +485,12 @@ AeInstallTables (
ACPI_STATUS Status;
ACPI_TABLE_HEADER Header;
ACPI_TABLE_HEADER *Table;
+ UINT32 i;
- Status = AcpiInitializeTables (Tables, ACPI_MAX_INIT_TABLES, TRUE);
+ Status = AcpiInitializeTables (NULL, ACPI_MAX_INIT_TABLES, TRUE);
AE_CHECK_OK (AcpiInitializeTables, Status);
- Status = AcpiReallocateRootTable ();
- AE_CHECK_OK (AcpiReallocateRootTable, Status);
-
Status = AcpiLoadTables ();
AE_CHECK_OK (AcpiLoadTables, Status);
@@ -536,6 +537,18 @@ AeInstallTables (
AE_CHECK_STATUS (AcpiGetTable, Status, AE_NOT_FOUND);
}
+ /* Check that we can get all of the ACPI tables */
+
+ for (i = 0; ; i++)
+ {
+ Status = AcpiGetTableByIndex (i, &Table);
+ if ((Status == AE_BAD_PARAMETER) || !Table)
+ {
+ break;
+ }
+ AE_CHECK_OK (AcpiGetTableByIndex, Status);
+ }
+
return (AE_OK);
}