aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/acpi/dispatcher/dswload.c
diff options
context:
space:
mode:
authorLin Ming <ming.m.lin@intel.com>2008-04-10 11:06:41 -0400
committerLen Brown <len.brown@intel.com>2008-04-22 14:29:28 -0400
commit941f48bb465b0b291f8435b1e3de95b0975b84bc (patch)
tree42327b3d29fbaa55827abfe620a94320f86b6eb4 /drivers/acpi/dispatcher/dswload.c
parent9aa6169f471771324b476a90d9392daa06d63a2d (diff)
ACPICA: Implemented full support for deferred execution for the TermArg string arguments for DataTableRegion
This enables forward references and full operand resolution for the three string arguments. Similar to OperationRegion deferred argument execution.) http://www.acpica.org/bugzilla/show_bug.cgi?id=430 Signed-off-by: Lin Ming <ming.m.lin@intel.com> Signed-off-by: Bob Moore <robert.moore@intel.com> Signed-off-by: Alexey Starikovskiy <astarikovskiy@suse.de> Signed-off-by: Len Brown <len.brown@intel.com>
Diffstat (limited to 'drivers/acpi/dispatcher/dswload.c')
-rw-r--r--drivers/acpi/dispatcher/dswload.c29
1 files changed, 20 insertions, 9 deletions
diff --git a/drivers/acpi/dispatcher/dswload.c b/drivers/acpi/dispatcher/dswload.c
index 8ab9d1b29a4c..ec68c1df3932 100644
--- a/drivers/acpi/dispatcher/dswload.c
+++ b/drivers/acpi/dispatcher/dswload.c
@@ -443,6 +443,15 @@ acpi_status acpi_ds_load1_end_op(struct acpi_walk_state *walk_state)
443 if (ACPI_FAILURE(status)) { 443 if (ACPI_FAILURE(status)) {
444 return_ACPI_STATUS(status); 444 return_ACPI_STATUS(status);
445 } 445 }
446 } else if (op->common.aml_opcode == AML_DATA_REGION_OP) {
447 status =
448 acpi_ex_create_region(op->named.data,
449 op->named.length,
450 REGION_DATA_TABLE,
451 walk_state);
452 if (ACPI_FAILURE(status)) {
453 return_ACPI_STATUS(status);
454 }
446 } 455 }
447 } 456 }
448#endif 457#endif
@@ -823,6 +832,7 @@ acpi_status acpi_ds_load2_end_op(struct acpi_walk_state *walk_state)
823 struct acpi_namespace_node *new_node; 832 struct acpi_namespace_node *new_node;
824#ifndef ACPI_NO_METHOD_EXECUTION 833#ifndef ACPI_NO_METHOD_EXECUTION
825 u32 i; 834 u32 i;
835 u8 region_space;
826#endif 836#endif
827 837
828 ACPI_FUNCTION_TRACE(ds_load2_end_op); 838 ACPI_FUNCTION_TRACE(ds_load2_end_op);
@@ -1003,11 +1013,6 @@ acpi_status acpi_ds_load2_end_op(struct acpi_walk_state *walk_state)
1003 status = acpi_ex_create_event(walk_state); 1013 status = acpi_ex_create_event(walk_state);
1004 break; 1014 break;
1005 1015
1006 case AML_DATA_REGION_OP:
1007
1008 status = acpi_ex_create_table_region(walk_state);
1009 break;
1010
1011 case AML_ALIAS_OP: 1016 case AML_ALIAS_OP:
1012 1017
1013 status = acpi_ex_create_alias(walk_state); 1018 status = acpi_ex_create_alias(walk_state);
@@ -1035,6 +1040,15 @@ acpi_status acpi_ds_load2_end_op(struct acpi_walk_state *walk_state)
1035 switch (op->common.aml_opcode) { 1040 switch (op->common.aml_opcode) {
1036#ifndef ACPI_NO_METHOD_EXECUTION 1041#ifndef ACPI_NO_METHOD_EXECUTION
1037 case AML_REGION_OP: 1042 case AML_REGION_OP:
1043 case AML_DATA_REGION_OP:
1044
1045 if (op->common.aml_opcode == AML_REGION_OP) {
1046 region_space = (acpi_adr_space_type)
1047 ((op->common.value.arg)->common.value.
1048 integer);
1049 } else {
1050 region_space = REGION_DATA_TABLE;
1051 }
1038 1052
1039 /* 1053 /*
1040 * If we are executing a method, initialize the region 1054 * If we are executing a method, initialize the region
@@ -1043,10 +1057,7 @@ acpi_status acpi_ds_load2_end_op(struct acpi_walk_state *walk_state)
1043 status = 1057 status =
1044 acpi_ex_create_region(op->named.data, 1058 acpi_ex_create_region(op->named.data,
1045 op->named.length, 1059 op->named.length,
1046 (acpi_adr_space_type) 1060 region_space,
1047 ((op->common.value.
1048 arg)->common.value.
1049 integer),
1050 walk_state); 1061 walk_state);
1051 if (ACPI_FAILURE(status)) { 1062 if (ACPI_FAILURE(status)) {
1052 return (status); 1063 return (status);