summaryrefslogtreecommitdiff
path: root/source/compiler/asltransform.c
diff options
context:
space:
mode:
Diffstat (limited to 'source/compiler/asltransform.c')
-rw-r--r--source/compiler/asltransform.c45
1 files changed, 43 insertions, 2 deletions
diff --git a/source/compiler/asltransform.c b/source/compiler/asltransform.c
index 607b1bbbb8630..8de5ba18c30c0 100644
--- a/source/compiler/asltransform.c
+++ b/source/compiler/asltransform.c
@@ -249,7 +249,7 @@ TrAmlInsertPeer (
/*******************************************************************************
*
- * FUNCTION: TrAmlTransformWalk
+ * FUNCTION: TrAmlTransformWalkBegin
*
* PARAMETERS: ASL_WALK_CALLBACK
*
@@ -261,7 +261,7 @@ TrAmlInsertPeer (
******************************************************************************/
ACPI_STATUS
-TrAmlTransformWalk (
+TrAmlTransformWalkBegin (
ACPI_PARSE_OBJECT *Op,
UINT32 Level,
void *Context)
@@ -274,6 +274,38 @@ TrAmlTransformWalk (
/*******************************************************************************
*
+ * FUNCTION: TrAmlTransformWalkEnd
+ *
+ * PARAMETERS: ASL_WALK_CALLBACK
+ *
+ * RETURN: None
+ *
+ * DESCRIPTION: Parse tree walk to generate both the AML opcodes and the AML
+ * operands.
+ *
+ ******************************************************************************/
+
+ACPI_STATUS
+TrAmlTransformWalkEnd (
+ ACPI_PARSE_OBJECT *Op,
+ UINT32 Level,
+ void *Context)
+{
+
+ /* Save possible Externals list in the DefintionBlock Op */
+
+ if (Op->Asl.ParseOpcode == PARSEOP_DEFINITION_BLOCK)
+ {
+ Op->Asl.Value.Arg = Gbl_ExternalsListHead;
+ Gbl_ExternalsListHead = NULL;
+ }
+
+ return (AE_OK);
+}
+
+
+/*******************************************************************************
+ *
* FUNCTION: TrTransformSubtree
*
* PARAMETERS: Op - The parent parse node
@@ -316,6 +348,11 @@ TrTransformSubtree (
Gbl_TempCount = 0;
break;
+ case PARSEOP_EXTERNAL:
+
+ ExDoExternal (Op);
+ break;
+
default:
/* Nothing to do here for other opcodes */
@@ -347,6 +384,10 @@ TrDoDefinitionBlock (
UINT32 i;
+ /* Reset external list when starting a definition block */
+
+ Gbl_ExternalsListHead = NULL;
+
Next = Op->Asl.Child;
for (i = 0; i < 5; i++)
{