|
@@ -639,26 +639,42 @@ acpi_ds_load2_begin_op(struct acpi_walk_state *walk_state,
|
|
|
break;
|
|
|
|
|
|
case AML_SCOPE_OP:
|
|
|
- /*
|
|
|
- * The Path is an object reference to an existing object.
|
|
|
- * Don't enter the name into the namespace, but look it up
|
|
|
- * for use later.
|
|
|
- */
|
|
|
- status =
|
|
|
- acpi_ns_lookup(walk_state->scope_info, buffer_ptr,
|
|
|
- object_type, ACPI_IMODE_EXECUTE,
|
|
|
- ACPI_NS_SEARCH_PARENT, walk_state, &(node));
|
|
|
- if (ACPI_FAILURE(status)) {
|
|
|
-#ifdef ACPI_ASL_COMPILER
|
|
|
- if (status == AE_NOT_FOUND) {
|
|
|
- status = AE_OK;
|
|
|
- } else {
|
|
|
- ACPI_ERROR_NAMESPACE(buffer_ptr, status);
|
|
|
+
|
|
|
+ /* Special case for Scope(\) -> refers to the Root node */
|
|
|
+
|
|
|
+ if (op && (op->named.node == acpi_gbl_root_node)) {
|
|
|
+ node = op->named.node;
|
|
|
+
|
|
|
+ status =
|
|
|
+ acpi_ds_scope_stack_push(node, object_type,
|
|
|
+ walk_state);
|
|
|
+ if (ACPI_FAILURE(status)) {
|
|
|
+ return_ACPI_STATUS(status);
|
|
|
}
|
|
|
+ } else {
|
|
|
+ /*
|
|
|
+ * The Path is an object reference to an existing object.
|
|
|
+ * Don't enter the name into the namespace, but look it up
|
|
|
+ * for use later.
|
|
|
+ */
|
|
|
+ status =
|
|
|
+ acpi_ns_lookup(walk_state->scope_info, buffer_ptr,
|
|
|
+ object_type, ACPI_IMODE_EXECUTE,
|
|
|
+ ACPI_NS_SEARCH_PARENT, walk_state,
|
|
|
+ &(node));
|
|
|
+ if (ACPI_FAILURE(status)) {
|
|
|
+#ifdef ACPI_ASL_COMPILER
|
|
|
+ if (status == AE_NOT_FOUND) {
|
|
|
+ status = AE_OK;
|
|
|
+ } else {
|
|
|
+ ACPI_ERROR_NAMESPACE(buffer_ptr,
|
|
|
+ status);
|
|
|
+ }
|
|
|
#else
|
|
|
- ACPI_ERROR_NAMESPACE(buffer_ptr, status);
|
|
|
+ ACPI_ERROR_NAMESPACE(buffer_ptr, status);
|
|
|
#endif
|
|
|
- return_ACPI_STATUS(status);
|
|
|
+ return_ACPI_STATUS(status);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
/*
|