diff options
| author | Bob Moore <robert.moore@intel.com> | 2009-02-03 14:43:04 +0800 | 
|---|---|---|
| committer | Len Brown <len.brown@intel.com> | 2009-03-26 16:38:20 -0400 | 
| commit | d3ccaff827cef5a5c5a0f3c97e1e2e6d99f618cb (patch) | |
| tree | c6c3d75d44f38d967a0f7333ed9eef4ab3d8999b | |
| parent | 97cbb7d196845ec9a6c0e3cc33ec20503f8c4e73 (diff) | |
| download | kernel_samsung_espresso10-d3ccaff827cef5a5c5a0f3c97e1e2e6d99f618cb.zip kernel_samsung_espresso10-d3ccaff827cef5a5c5a0f3c97e1e2e6d99f618cb.tar.gz kernel_samsung_espresso10-d3ccaff827cef5a5c5a0f3c97e1e2e6d99f618cb.tar.bz2  | |
ACPICA: Add override for dynamic tables
Add a call to acpi_os_table_override during the installation of a
dynamic table (loaded via the Load or LoadTable AML operators).
Signed-off-by: Bob Moore <robert.moore@intel.com>
Signed-off-by: Lin Ming <ming.m.lin@intel.com>
Signed-off-by: Len Brown <len.brown@intel.com>
| -rw-r--r-- | drivers/acpi/acpica/tbinstal.c | 28 | 
1 files changed, 27 insertions, 1 deletions
diff --git a/drivers/acpi/acpica/tbinstal.c b/drivers/acpi/acpica/tbinstal.c index 37374b2..ef269a2 100644 --- a/drivers/acpi/acpica/tbinstal.c +++ b/drivers/acpi/acpica/tbinstal.c @@ -103,7 +103,9 @@ acpi_status acpi_tb_verify_table(struct acpi_table_desc *table_desc)   *   * RETURN:      Status   * - * DESCRIPTION: This function is called to add the ACPI table + * DESCRIPTION: This function is called to add an ACPI table. It is used to + *              dynamically load tables via the Load and load_table AML + *              operators.   *   ******************************************************************************/ @@ -112,6 +114,7 @@ acpi_tb_add_table(struct acpi_table_desc *table_desc, u32 *table_index)  {  	u32 i;  	acpi_status status = AE_OK; +	struct acpi_table_header *override_table = NULL;  	ACPI_FUNCTION_TRACE(tb_add_table); @@ -201,6 +204,29 @@ acpi_tb_add_table(struct acpi_table_desc *table_desc, u32 *table_index)  		}  	} +	/* +	 * ACPI Table Override: +	 * Allow the host to override dynamically loaded tables. +	 */ +	status = acpi_os_table_override(table_desc->pointer, &override_table); +	if (ACPI_SUCCESS(status) && override_table) { +		ACPI_INFO((AE_INFO, +			   "%4.4s @ 0x%p Table override, replaced with:", +			   table_desc->pointer->signature, +			   ACPI_CAST_PTR(void, table_desc->address))); + +		/* We can delete the table that was passed as a parameter */ + +		acpi_tb_delete_table(table_desc); + +		/* Setup descriptor for the new table */ + +		table_desc->address = ACPI_PTR_TO_PHYSADDR(override_table); +		table_desc->pointer = override_table; +		table_desc->length = override_table->length; +		table_desc->flags = ACPI_TABLE_ORIGIN_OVERRIDE; +	} +  	/* Add the table to the global root table list */  	status = acpi_tb_store_table(table_desc->address, table_desc->pointer,  | 
