diff options
Diffstat (limited to 'source/tools/acpiexec/aetables.c')
-rw-r--r-- | source/tools/acpiexec/aetables.c | 75 |
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); } |