|
@@ -269,23 +269,13 @@ acpi_ps_get_next_namepath(struct acpi_walk_state *walk_state,
|
|
|
*/
|
|
|
if (ACPI_SUCCESS(status) &&
|
|
|
possible_method_call && (node->type == ACPI_TYPE_METHOD)) {
|
|
|
- if (walk_state->opcode == AML_UNLOAD_OP) {
|
|
|
- /*
|
|
|
- * acpi_ps_get_next_namestring has increased the AML pointer,
|
|
|
- * so we need to restore the saved AML pointer for method call.
|
|
|
- */
|
|
|
- walk_state->parser_state.aml = start;
|
|
|
- walk_state->arg_count = 1;
|
|
|
- acpi_ps_init_op(arg, AML_INT_METHODCALL_OP);
|
|
|
- return_ACPI_STATUS(AE_OK);
|
|
|
- }
|
|
|
|
|
|
/* This name is actually a control method invocation */
|
|
|
|
|
|
method_desc = acpi_ns_get_attached_object(node);
|
|
|
ACPI_DEBUG_PRINT((ACPI_DB_PARSE,
|
|
|
- "Control Method - %p Desc %p Path=%p\n", node,
|
|
|
- method_desc, path));
|
|
|
+ "Control Method invocation %4.4s - %p Desc %p Path=%p\n",
|
|
|
+ node->name.ascii, node, method_desc, path));
|
|
|
|
|
|
name_op = acpi_ps_alloc_op(AML_INT_NAMEPATH_OP, start);
|
|
|
if (!name_op) {
|
|
@@ -719,6 +709,10 @@ acpi_ps_get_next_arg(struct acpi_walk_state *walk_state,
|
|
|
|
|
|
ACPI_FUNCTION_TRACE_PTR(ps_get_next_arg, parser_state);
|
|
|
|
|
|
+ ACPI_DEBUG_PRINT((ACPI_DB_PARSE,
|
|
|
+ "Expected argument type ARGP: %s (%2.2X)\n",
|
|
|
+ acpi_ut_get_argument_type_name(arg_type), arg_type));
|
|
|
+
|
|
|
switch (arg_type) {
|
|
|
case ARGP_BYTEDATA:
|
|
|
case ARGP_WORDDATA:
|
|
@@ -796,11 +790,14 @@ acpi_ps_get_next_arg(struct acpi_walk_state *walk_state,
|
|
|
}
|
|
|
break;
|
|
|
|
|
|
- case ARGP_TARGET:
|
|
|
- case ARGP_SUPERNAME:
|
|
|
case ARGP_SIMPLENAME:
|
|
|
case ARGP_NAME_OR_REF:
|
|
|
|
|
|
+ ACPI_DEBUG_PRINT((ACPI_DB_PARSE,
|
|
|
+ "**** SimpleName/NameOrRef: %s (%2.2X)\n",
|
|
|
+ acpi_ut_get_argument_type_name(arg_type),
|
|
|
+ arg_type));
|
|
|
+
|
|
|
subop = acpi_ps_peek_opcode(parser_state);
|
|
|
if (subop == 0 ||
|
|
|
acpi_ps_is_leading_char(subop) ||
|
|
@@ -816,29 +813,41 @@ acpi_ps_get_next_arg(struct acpi_walk_state *walk_state,
|
|
|
return_ACPI_STATUS(AE_NO_MEMORY);
|
|
|
}
|
|
|
|
|
|
- /* To support super_name arg of Unload */
|
|
|
-
|
|
|
- if (walk_state->opcode == AML_UNLOAD_OP) {
|
|
|
- status =
|
|
|
- acpi_ps_get_next_namepath(walk_state,
|
|
|
- parser_state, arg,
|
|
|
- ACPI_POSSIBLE_METHOD_CALL);
|
|
|
-
|
|
|
- /*
|
|
|
- * If the super_name argument is a method call, we have
|
|
|
- * already restored the AML pointer, just free this Arg
|
|
|
- */
|
|
|
- if (arg->common.aml_opcode ==
|
|
|
- AML_INT_METHODCALL_OP) {
|
|
|
- acpi_ps_free_op(arg);
|
|
|
- arg = NULL;
|
|
|
- }
|
|
|
- } else {
|
|
|
- status =
|
|
|
- acpi_ps_get_next_namepath(walk_state,
|
|
|
- parser_state, arg,
|
|
|
- ACPI_NOT_METHOD_CALL);
|
|
|
+ status =
|
|
|
+ acpi_ps_get_next_namepath(walk_state, parser_state,
|
|
|
+ arg,
|
|
|
+ ACPI_NOT_METHOD_CALL);
|
|
|
+ } else {
|
|
|
+ /* Single complex argument, nothing returned */
|
|
|
+
|
|
|
+ walk_state->arg_count = 1;
|
|
|
+ }
|
|
|
+ break;
|
|
|
+
|
|
|
+ case ARGP_TARGET:
|
|
|
+ case ARGP_SUPERNAME:
|
|
|
+
|
|
|
+ ACPI_DEBUG_PRINT((ACPI_DB_PARSE,
|
|
|
+ "**** Target/Supername: %s (%2.2X)\n",
|
|
|
+ acpi_ut_get_argument_type_name(arg_type),
|
|
|
+ arg_type));
|
|
|
+
|
|
|
+ subop = acpi_ps_peek_opcode(parser_state);
|
|
|
+ if (subop == 0) {
|
|
|
+
|
|
|
+ /* NULL target (zero). Convert to a NULL namepath */
|
|
|
+
|
|
|
+ arg =
|
|
|
+ acpi_ps_alloc_op(AML_INT_NAMEPATH_OP,
|
|
|
+ parser_state->aml);
|
|
|
+ if (!arg) {
|
|
|
+ return_ACPI_STATUS(AE_NO_MEMORY);
|
|
|
}
|
|
|
+
|
|
|
+ status =
|
|
|
+ acpi_ps_get_next_namepath(walk_state, parser_state,
|
|
|
+ arg,
|
|
|
+ ACPI_POSSIBLE_METHOD_CALL);
|
|
|
} else {
|
|
|
/* Single complex argument, nothing returned */
|
|
|
|
|
@@ -849,6 +858,11 @@ acpi_ps_get_next_arg(struct acpi_walk_state *walk_state,
|
|
|
case ARGP_DATAOBJ:
|
|
|
case ARGP_TERMARG:
|
|
|
|
|
|
+ ACPI_DEBUG_PRINT((ACPI_DB_PARSE,
|
|
|
+ "**** TermArg/DataObj: %s (%2.2X)\n",
|
|
|
+ acpi_ut_get_argument_type_name(arg_type),
|
|
|
+ arg_type));
|
|
|
+
|
|
|
/* Single complex argument, nothing returned */
|
|
|
|
|
|
walk_state->arg_count = 1;
|