diff options
Diffstat (limited to 'source/compiler/asltransform.c')
-rw-r--r-- | source/compiler/asltransform.c | 45 |
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++) { |