aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/acpi/acpica/exconfig.c
diff options
context:
space:
mode:
authorBob Moore <robert.moore@intel.com>2010-04-26 23:32:28 -0400
committerLen Brown <len.brown@intel.com>2010-05-06 03:05:54 -0400
commit186c307f008d2a53961cd970aaf7cb9c33e79cb1 (patch)
treed0f6af298f4012aafed58c27b8db498ddd9ed7ba /drivers/acpi/acpica/exconfig.c
parentb9ee2043096b02e5da8c62f9a8a8f2e172b3606b (diff)
ACPICA: Add GPE support for dynamically loaded ACPI tables
For all GPEs, including FADT-based and GPE Block Devices, execute any _PRW methods in the new table, and process any _Lxx/_Exx GPE methods in the new table. Any runtime GPE that is referred to by an _Lxx/_Exx method in the new table is immediately enabled. ACPICA BZ 833. http://www.acpica.org/bugzilla/show_bug.cgi?id=833 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>
Diffstat (limited to 'drivers/acpi/acpica/exconfig.c')
-rw-r--r--drivers/acpi/acpica/exconfig.c21
1 files changed, 15 insertions, 6 deletions
diff --git a/drivers/acpi/acpica/exconfig.c b/drivers/acpi/acpica/exconfig.c
index 7e8b3bedc376..008621c5ad85 100644
--- a/drivers/acpi/acpica/exconfig.c
+++ b/drivers/acpi/acpica/exconfig.c
@@ -82,8 +82,9 @@ acpi_ex_add_table(u32 table_index,
82 struct acpi_namespace_node *parent_node, 82 struct acpi_namespace_node *parent_node,
83 union acpi_operand_object **ddb_handle) 83 union acpi_operand_object **ddb_handle)
84{ 84{
85 acpi_status status;
86 union acpi_operand_object *obj_desc; 85 union acpi_operand_object *obj_desc;
86 acpi_status status;
87 acpi_owner_id owner_id;
87 88
88 ACPI_FUNCTION_TRACE(ex_add_table); 89 ACPI_FUNCTION_TRACE(ex_add_table);
89 90
@@ -119,7 +120,14 @@ acpi_ex_add_table(u32 table_index,
119 acpi_ns_exec_module_code_list(); 120 acpi_ns_exec_module_code_list();
120 acpi_ex_enter_interpreter(); 121 acpi_ex_enter_interpreter();
121 122
122 return_ACPI_STATUS(status); 123 /* Update GPEs for any new _PRW or _Lxx/_Exx methods. Ignore errors */
124
125 status = acpi_tb_get_owner_id(table_index, &owner_id);
126 if (ACPI_SUCCESS(status)) {
127 acpi_ev_update_gpes(owner_id);
128 }
129
130 return_ACPI_STATUS(AE_OK);
123} 131}
124 132
125/******************************************************************************* 133/*******************************************************************************
@@ -248,10 +256,8 @@ acpi_ex_load_table_op(struct acpi_walk_state *walk_state,
248 256
249 status = acpi_get_table_by_index(table_index, &table); 257 status = acpi_get_table_by_index(table_index, &table);
250 if (ACPI_SUCCESS(status)) { 258 if (ACPI_SUCCESS(status)) {
251 ACPI_INFO((AE_INFO, 259 ACPI_INFO((AE_INFO, "Dynamic OEM Table Load:"));
252 "Dynamic OEM Table Load - [%.4s] OemId [%.6s] OemTableId [%.8s]", 260 acpi_tb_print_table_header(0, table);
253 table->signature, table->oem_id,
254 table->oem_table_id));
255 } 261 }
256 262
257 /* Invoke table handler if present */ 263 /* Invoke table handler if present */
@@ -525,6 +531,9 @@ acpi_ex_load_op(union acpi_operand_object *obj_desc,
525 return_ACPI_STATUS(status); 531 return_ACPI_STATUS(status);
526 } 532 }
527 533
534 ACPI_INFO((AE_INFO, "Dynamic OEM Table Load:"));
535 acpi_tb_print_table_header(0, table_desc.pointer);
536
528 /* Remove the reference by added by acpi_ex_store above */ 537 /* Remove the reference by added by acpi_ex_store above */
529 538
530 acpi_ut_remove_reference(ddb_handle); 539 acpi_ut_remove_reference(ddb_handle);