aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/acpi/parser/psloop.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/acpi/parser/psloop.c')
-rw-r--r--drivers/acpi/parser/psloop.c23
1 files changed, 21 insertions, 2 deletions
diff --git a/drivers/acpi/parser/psloop.c b/drivers/acpi/parser/psloop.c
index 266dd0c10218..4348b0530398 100644
--- a/drivers/acpi/parser/psloop.c
+++ b/drivers/acpi/parser/psloop.c
@@ -182,6 +182,7 @@ acpi_ps_build_named_op(struct acpi_walk_state *walk_state,
182 ACPI_FUNCTION_TRACE_PTR(ps_build_named_op, walk_state); 182 ACPI_FUNCTION_TRACE_PTR(ps_build_named_op, walk_state);
183 183
184 unnamed_op->common.value.arg = NULL; 184 unnamed_op->common.value.arg = NULL;
185 unnamed_op->common.arg_list_length = 0;
185 unnamed_op->common.aml_opcode = walk_state->opcode; 186 unnamed_op->common.aml_opcode = walk_state->opcode;
186 187
187 /* 188 /*
@@ -280,6 +281,9 @@ acpi_ps_create_op(struct acpi_walk_state *walk_state,
280 acpi_status status = AE_OK; 281 acpi_status status = AE_OK;
281 union acpi_parse_object *op; 282 union acpi_parse_object *op;
282 union acpi_parse_object *named_op = NULL; 283 union acpi_parse_object *named_op = NULL;
284 union acpi_parse_object *parent_scope;
285 u8 argument_count;
286 const struct acpi_opcode_info *op_info;
283 287
284 ACPI_FUNCTION_TRACE_PTR(ps_create_op, walk_state); 288 ACPI_FUNCTION_TRACE_PTR(ps_create_op, walk_state);
285 289
@@ -320,8 +324,23 @@ acpi_ps_create_op(struct acpi_walk_state *walk_state,
320 op->named.length = 0; 324 op->named.length = 0;
321 } 325 }
322 326
323 acpi_ps_append_arg(acpi_ps_get_parent_scope 327 parent_scope = acpi_ps_get_parent_scope(&(walk_state->parser_state));
324 (&(walk_state->parser_state)), op); 328 acpi_ps_append_arg(parent_scope, op);
329
330 if (parent_scope) {
331 op_info =
332 acpi_ps_get_opcode_info(parent_scope->common.aml_opcode);
333 if (op_info->flags & AML_HAS_TARGET) {
334 argument_count =
335 acpi_ps_get_argument_count(op_info->type);
336 if (parent_scope->common.arg_list_length >
337 argument_count) {
338 op->common.flags |= ACPI_PARSEOP_TARGET;
339 }
340 } else if (parent_scope->common.aml_opcode == AML_INCREMENT_OP) {
341 op->common.flags |= ACPI_PARSEOP_TARGET;
342 }
343 }
325 344
326 if (walk_state->descending_callback != NULL) { 345 if (walk_state->descending_callback != NULL) {
327 /* 346 /*