summaryrefslogtreecommitdiffstats
path: root/drivers/acpi/acpica/tbinstal.c
diff options
context:
space:
mode:
authorLv Zheng <lv.zheng@intel.com>2014-04-04 06:39:18 +0200
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>2014-04-20 22:59:39 +0200
commitcaf4a15c5f930aae41951b4916289e3e59dda8eb (patch)
treee7906f367abc62597b0075af93306571d362598c /drivers/acpi/acpica/tbinstal.c
parentACPICA: Tables: Avoid SSDT installation with acpi_gbl_disable_ssdt_table_load. (diff)
downloadlinux-caf4a15c5f930aae41951b4916289e3e59dda8eb.tar.xz
linux-caf4a15c5f930aae41951b4916289e3e59dda8eb.zip
ACPICA: Tables: Add acpi_install_table() API for early table installation.
This patch adds a new API - acpi_install_table(). OSPMs can use this API to install tables during early boot stage. Lv Zheng. References: https://lkml.org/lkml/2014/2/28/372 Cc: Thomas Renninger <trenn@suse.de> Signed-off-by: Lv Zheng <lv.zheng@intel.com> Signed-off-by: Bob Moore <robert.moore@intel.com> [rjw: Subject] Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Diffstat (limited to 'drivers/acpi/acpica/tbinstal.c')
-rw-r--r--drivers/acpi/acpica/tbinstal.c16
1 files changed, 11 insertions, 5 deletions
diff --git a/drivers/acpi/acpica/tbinstal.c b/drivers/acpi/acpica/tbinstal.c
index de10d3245d9c..9835213269e6 100644
--- a/drivers/acpi/acpica/tbinstal.c
+++ b/drivers/acpi/acpica/tbinstal.c
@@ -394,6 +394,7 @@ static void acpi_tb_release_temporal_table(struct acpi_table_desc *table_desc)
*
* PARAMETERS: table_index - Index into root table array
* new_table_desc - New table descriptor to install
+ * override - Whether override should be performed
*
* RETURN: None
*
@@ -406,7 +407,8 @@ static void acpi_tb_release_temporal_table(struct acpi_table_desc *table_desc)
void
acpi_tb_install_and_override_table(u32 table_index,
- struct acpi_table_desc *new_table_desc)
+ struct acpi_table_desc *new_table_desc,
+ u8 override)
{
if (table_index >= acpi_gbl_root_table_list.current_table_count) {
return;
@@ -419,7 +421,9 @@ acpi_tb_install_and_override_table(u32 table_index,
* one if desired. Any table within the RSDT/XSDT can be replaced,
* including the DSDT which is pointed to by the FADT.
*/
- acpi_tb_override_table(new_table_desc);
+ if (override) {
+ acpi_tb_override_table(new_table_desc);
+ }
acpi_tb_install_table(&acpi_gbl_root_table_list.tables[table_index],
new_table_desc->address, new_table_desc->flags,
@@ -484,7 +488,7 @@ acpi_tb_install_fixed_table(acpi_physical_address address,
goto release_and_exit;
}
- acpi_tb_install_and_override_table(table_index, &new_table_desc);
+ acpi_tb_install_and_override_table(table_index, &new_table_desc, TRUE);
release_and_exit:
@@ -547,6 +551,7 @@ acpi_tb_is_equivalent_table(struct acpi_table_desc *table_desc, u32 table_index)
* address depending on the table_flags)
* flags - Flags for the table
* reload - Whether reload should be performed
+ * override - Whether override should be performed
* table_index - Where the table index is returned
*
* RETURN: Status
@@ -562,7 +567,8 @@ acpi_tb_is_equivalent_table(struct acpi_table_desc *table_desc, u32 table_index)
acpi_status
acpi_tb_install_non_fixed_table(acpi_physical_address address,
- u8 flags, u8 reload, u32 *table_index)
+ u8 flags,
+ u8 reload, u8 override, u32 *table_index)
{
u32 i;
acpi_status status = AE_OK;
@@ -687,7 +693,7 @@ acpi_tb_install_non_fixed_table(acpi_physical_address address,
goto release_and_exit;
}
*table_index = i;
- acpi_tb_install_and_override_table(i, &new_table_desc);
+ acpi_tb_install_and_override_table(i, &new_table_desc, override);
release_and_exit: