diff options
Diffstat (limited to 'parser')
| -rw-r--r-- | parser/psloop.c | 24 | ||||
| -rw-r--r-- | parser/psparse.c | 4 | ||||
| -rw-r--r-- | parser/psxface.c | 4 |
3 files changed, 24 insertions, 8 deletions
diff --git a/parser/psloop.c b/parser/psloop.c index fe9b7311a27a..4171e0dc6de0 100644 --- a/parser/psloop.c +++ b/parser/psloop.c @@ -173,6 +173,7 @@ AcpiPsCompleteFinalOp ( static void AcpiPsLinkModuleCode ( + ACPI_PARSE_OBJECT *ParentOp, UINT8 *AmlStart, UINT32 AmlLength, ACPI_OWNER_ID OwnerId); @@ -593,7 +594,7 @@ AcpiPsGetArguments ( */ if (WalkState->PassNumber == ACPI_IMODE_LOAD_PASS1) { - AcpiPsLinkModuleCode (AmlOpStart, + AcpiPsLinkModuleCode (Op->Common.Parent, AmlOpStart, (UINT32) (WalkState->ParserState.PkgEnd - AmlOpStart), WalkState->OwnerId); } @@ -704,7 +705,8 @@ AcpiPsGetArguments ( * * FUNCTION: AcpiPsLinkModuleCode * - * PARAMETERS: AmlStart - Pointer to the AML + * PARAMETERS: ParentOp - Parent parser op + * AmlStart - Pointer to the AML * AmlLength - Length of executable AML * OwnerId - OwnerId of module level code * @@ -718,6 +720,7 @@ AcpiPsGetArguments ( static void AcpiPsLinkModuleCode ( + ACPI_PARSE_OBJECT *ParentOp, UINT8 *AmlStart, UINT32 AmlLength, ACPI_OWNER_ID OwnerId) @@ -725,6 +728,7 @@ AcpiPsLinkModuleCode ( ACPI_OPERAND_OBJECT *Prev; ACPI_OPERAND_OBJECT *Next; ACPI_OPERAND_OBJECT *MethodObj; + ACPI_NAMESPACE_NODE *ParentNode; /* Get the tail of the list */ @@ -751,11 +755,27 @@ AcpiPsLinkModuleCode ( return; } + if (ParentOp->Common.Node) + { + ParentNode = ParentOp->Common.Node; + } + else + { + ParentNode = AcpiGbl_RootNode; + } + MethodObj->Method.AmlStart = AmlStart; MethodObj->Method.AmlLength = AmlLength; MethodObj->Method.OwnerId = OwnerId; MethodObj->Method.Flags |= AOPOBJ_MODULE_LEVEL; + /* + * Save the parent node in NextObject. This is cheating, but we + * don't want to expand the method object. + */ + MethodObj->Method.NextObject = + ACPI_CAST_PTR (ACPI_OPERAND_OBJECT, ParentNode); + if (!Prev) { AcpiGbl_ModuleCodeList = MethodObj; diff --git a/parser/psparse.c b/parser/psparse.c index d9d6a2944bb5..820f54bd0ca9 100644 --- a/parser/psparse.c +++ b/parser/psparse.c @@ -705,13 +705,11 @@ AcpiPsParseAml ( !PreviousWalkState->ImplicitReturnObj) { PreviousWalkState->ImplicitReturnObj = - AcpiUtCreateInternalObject (ACPI_TYPE_INTEGER); + AcpiUtCreateIntegerObject ((UINT64) 0); if (!PreviousWalkState->ImplicitReturnObj) { return_ACPI_STATUS (AE_NO_MEMORY); } - - PreviousWalkState->ImplicitReturnObj->Integer.Value = 0; } /* Restart the calling control method */ diff --git a/parser/psxface.c b/parser/psxface.c index 1859b6921438..5f6f663d8d7f 100644 --- a/parser/psxface.c +++ b/parser/psxface.c @@ -422,15 +422,13 @@ AcpiPsExecuteMethod ( if (AcpiGbl_EnableInterpreterSlack) { WalkState->ImplicitReturnObj = - AcpiUtCreateInternalObject (ACPI_TYPE_INTEGER); + AcpiUtCreateIntegerObject ((UINT64) 0); if (!WalkState->ImplicitReturnObj) { Status = AE_NO_MEMORY; AcpiDsDeleteWalkState (WalkState); goto Cleanup; } - - WalkState->ImplicitReturnObj->Integer.Value = 0; } /* Parse the AML */ |
