diff options
Diffstat (limited to 'drivers/acpi/parser/psloop.c')
-rw-r--r-- | drivers/acpi/parser/psloop.c | 23 |
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 | /* |