diff options
author | Lv Zheng <lv.zheng@intel.com> | 2014-03-05 14:14:14 +0800 |
---|---|---|
committer | Lv Zheng <lv.zheng@intel.com> | 2014-03-19 10:37:22 +0800 |
commit | 32ae0eae7e79a6e82d687bf466276fbaae1f1d8c (patch) | |
tree | 2db978027f4b7e1aea42edf33990255d79d8cfd0 /source/components/tables | |
parent | c5dfd64025430af1ddd6c5b083f46e0d269f64fc (diff) | |
download | acpica-32ae0eae7e79a6e82d687bf466276fbaae1f1d8c.tar.gz |
Tables: Add AcpiInstallTable() API to be invoked by OSPM early table installation.
This patch adds a new API - AcpiInstallTable(). OSPMs can use this API
to install tables during early boot stage. Lv Zheng.
Signed-off-by: Lv Zheng <lv.zheng@intel.com>
Diffstat (limited to 'source/components/tables')
-rw-r--r-- | source/components/tables/tbinstal.c | 15 | ||||
-rw-r--r-- | source/components/tables/tbutils.c | 2 | ||||
-rw-r--r-- | source/components/tables/tbxfload.c | 49 |
3 files changed, 60 insertions, 6 deletions
diff --git a/source/components/tables/tbinstal.c b/source/components/tables/tbinstal.c index 56b001fd5..a3720c1a0 100644 --- a/source/components/tables/tbinstal.c +++ b/source/components/tables/tbinstal.c @@ -514,6 +514,7 @@ AcpiTbReleaseTemporalTable ( * * PARAMETERS: TableIndex - Index into root table array * NewTableDesc - New table descriptor to install + * Override - Whether override should be performed * * RETURN: None * @@ -527,7 +528,8 @@ AcpiTbReleaseTemporalTable ( void AcpiTbInstallAndOverrideTable ( UINT32 TableIndex, - ACPI_TABLE_DESC *NewTableDesc) + ACPI_TABLE_DESC *NewTableDesc, + BOOLEAN Override) { if (TableIndex >= AcpiGbl_RootTableList.CurrentTableCount) { @@ -541,7 +543,10 @@ AcpiTbInstallAndOverrideTable ( * one if desired. Any table within the RSDT/XSDT can be replaced, * including the DSDT which is pointed to by the FADT. */ - AcpiTbOverrideTable (NewTableDesc); + if (Override) + { + AcpiTbOverrideTable (NewTableDesc); + } AcpiTbInstallTable (&AcpiGbl_RootTableList.Tables[TableIndex], NewTableDesc->Address, NewTableDesc->Flags, NewTableDesc->Pointer); @@ -612,7 +617,7 @@ AcpiTbInstallFixedTable ( goto ReleaseAndExit; } - AcpiTbInstallAndOverrideTable (TableIndex, &NewTableDesc); + AcpiTbInstallAndOverrideTable (TableIndex, &NewTableDesc, TRUE); ReleaseAndExit: @@ -680,6 +685,7 @@ AcpiTbIsEquivalentTable ( * address depending on the TableFlags) * Flags - Flags for the table * Reload - Whether reload should be performed + * Override - Whether override should be performed * TableIndex - Where the table index is returned * * RETURN: Status @@ -698,6 +704,7 @@ AcpiTbInstallNonFixedTable ( ACPI_PHYSICAL_ADDRESS Address, UINT8 Flags, BOOLEAN Reload, + BOOLEAN Override, UINT32 *TableIndex) { UINT32 i; @@ -826,7 +833,7 @@ AcpiTbInstallNonFixedTable ( goto ReleaseAndExit; } *TableIndex = i; - AcpiTbInstallAndOverrideTable (i, &NewTableDesc); + AcpiTbInstallAndOverrideTable (i, &NewTableDesc, Override); ReleaseAndExit: diff --git a/source/components/tables/tbutils.c b/source/components/tables/tbutils.c index 5537a00f8..6735f7894 100644 --- a/source/components/tables/tbutils.c +++ b/source/components/tables/tbutils.c @@ -584,7 +584,7 @@ AcpiTbParseRootTable ( Status = AcpiTbInstallNonFixedTable ( AcpiTbGetRootTableEntry (TableEntry, TableEntrySize), - ACPI_TABLE_ORIGIN_INTERN_PHYSICAL, FALSE, &TableIndex); + ACPI_TABLE_ORIGIN_INTERN_PHYSICAL, FALSE, TRUE, &TableIndex); if (ACPI_SUCCESS (Status) && ACPI_COMPARE_NAME (&AcpiGbl_RootTableList.Tables[TableIndex].Signature, diff --git a/source/components/tables/tbxfload.c b/source/components/tables/tbxfload.c index 700636198..431cf80ab 100644 --- a/source/components/tables/tbxfload.c +++ b/source/components/tables/tbxfload.c @@ -282,6 +282,53 @@ UnlockAndExit: /******************************************************************************* * + * FUNCTION: AcpiInstallTable + * + * PARAMETERS: Address - Address of the ACPI table to be installed. + * Physical - Whether the address is a physical table + * address or not + * + * RETURN: Status + * + * DESCRIPTION: Dynamically install an ACPI table. + * Note: This function should only be invoked after + * AcpiInitializeTables() and before AcpiLoadTables(). + * + ******************************************************************************/ + +ACPI_STATUS +AcpiInstallTable ( + ACPI_PHYSICAL_ADDRESS Address, + BOOLEAN Physical) +{ + ACPI_STATUS Status; + UINT8 Flags; + UINT32 TableIndex; + + + ACPI_FUNCTION_TRACE (AcpiInstallTable); + + + if (Physical) + { + Flags = ACPI_TABLE_ORIGIN_EXTERN_VIRTUAL; + } + else + { + Flags = ACPI_TABLE_ORIGIN_INTERN_PHYSICAL; + } + + Status = AcpiTbInstallNonFixedTable (Address, Flags, + FALSE, FALSE, &TableIndex); + + return_ACPI_STATUS (Status); +} + +ACPI_EXPORT_SYMBOL_INIT (AcpiInstallTable) + + +/******************************************************************************* + * * FUNCTION: AcpiLoadTable * * PARAMETERS: Table - Pointer to a buffer containing the ACPI @@ -328,7 +375,7 @@ AcpiLoadTable ( ACPI_INFO ((AE_INFO, "Host-directed Dynamic ACPI Table Load:")); (void) AcpiUtAcquireMutex (ACPI_MTX_TABLES); Status = AcpiTbInstallNonFixedTable (ACPI_PTR_TO_PHYSADDR (Table), - ACPI_TABLE_ORIGIN_EXTERN_VIRTUAL, TRUE, &TableIndex); + ACPI_TABLE_ORIGIN_EXTERN_VIRTUAL, TRUE, FALSE, &TableIndex); (void) AcpiUtReleaseMutex (ACPI_MTX_TABLES); if (ACPI_FAILURE (Status)) { |