summaryrefslogtreecommitdiff
path: root/source/components/tables
diff options
context:
space:
mode:
authorLv Zheng <lv.zheng@intel.com>2014-03-05 14:14:14 +0800
committerLv Zheng <lv.zheng@intel.com>2014-03-19 10:37:22 +0800
commit32ae0eae7e79a6e82d687bf466276fbaae1f1d8c (patch)
tree2db978027f4b7e1aea42edf33990255d79d8cfd0 /source/components/tables
parentc5dfd64025430af1ddd6c5b083f46e0d269f64fc (diff)
downloadacpica-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.c15
-rw-r--r--source/components/tables/tbutils.c2
-rw-r--r--source/components/tables/tbxfload.c49
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))
{