|
@@ -47,6 +47,10 @@
|
|
#include "acnamesp.h"
|
|
#include "acnamesp.h"
|
|
#include "acdispat.h"
|
|
#include "acdispat.h"
|
|
|
|
|
|
|
|
+#ifdef ACPI_ASL_COMPILER
|
|
|
|
+#include "acdisasm.h"
|
|
|
|
+#endif
|
|
|
|
+
|
|
#define _COMPONENT ACPI_NAMESPACE
|
|
#define _COMPONENT ACPI_NAMESPACE
|
|
ACPI_MODULE_NAME("nsaccess")
|
|
ACPI_MODULE_NAME("nsaccess")
|
|
|
|
|
|
@@ -580,6 +584,29 @@ acpi_ns_lookup(union acpi_generic_state *scope_info,
|
|
(char *)¤t_node->name,
|
|
(char *)¤t_node->name,
|
|
current_node));
|
|
current_node));
|
|
}
|
|
}
|
|
|
|
+#ifdef ACPI_ASL_COMPILER
|
|
|
|
+ /*
|
|
|
|
+ * If this ACPI name already exists within the namespace as an
|
|
|
|
+ * external declaration, then mark the external as a conflicting
|
|
|
|
+ * declaration and proceed to process the current node as if it did
|
|
|
|
+ * not exist in the namespace. If this node is not processed as
|
|
|
|
+ * normal, then it could cause improper namespace resolution
|
|
|
|
+ * by failing to open a new scope.
|
|
|
|
+ */
|
|
|
|
+ if (acpi_gbl_disasm_flag &&
|
|
|
|
+ (status == AE_ALREADY_EXISTS) &&
|
|
|
|
+ ((this_node->flags & ANOBJ_IS_EXTERNAL) ||
|
|
|
|
+ (walk_state
|
|
|
|
+ && walk_state->opcode == AML_EXTERNAL_OP))) {
|
|
|
|
+ this_node->flags &= ~ANOBJ_IS_EXTERNAL;
|
|
|
|
+ this_node->type = (u8)this_search_type;
|
|
|
|
+ if (walk_state->opcode != AML_EXTERNAL_OP) {
|
|
|
|
+ acpi_dm_mark_external_conflict
|
|
|
|
+ (this_node);
|
|
|
|
+ }
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+#endif
|
|
|
|
|
|
*return_node = this_node;
|
|
*return_node = this_node;
|
|
return_ACPI_STATUS(status);
|
|
return_ACPI_STATUS(status);
|