xref: /freebsd-src/sys/contrib/dev/acpica/compiler/aslload.c (revision fba7fc7e34e95963b681b882698b951b35d1ba48)
153289f6aSNate Lawson /******************************************************************************
253289f6aSNate Lawson  *
353289f6aSNate Lawson  * Module Name: dswload - Dispatcher namespace load callbacks
4*fba7fc7eSJung-uk Kim  *              $Revision: 1.71 $
553289f6aSNate Lawson  *
653289f6aSNate Lawson  *****************************************************************************/
753289f6aSNate Lawson 
853289f6aSNate Lawson /******************************************************************************
953289f6aSNate Lawson  *
1053289f6aSNate Lawson  * 1. Copyright Notice
1153289f6aSNate Lawson  *
12*fba7fc7eSJung-uk Kim  * Some or all of this work - Copyright (c) 1999 - 2005, Intel Corp.
1353289f6aSNate Lawson  * All rights reserved.
1453289f6aSNate Lawson  *
1553289f6aSNate Lawson  * 2. License
1653289f6aSNate Lawson  *
1753289f6aSNate Lawson  * 2.1. This is your license from Intel Corp. under its intellectual property
1853289f6aSNate Lawson  * rights.  You may have additional license terms from the party that provided
1953289f6aSNate Lawson  * you this software, covering your right to use that party's intellectual
2053289f6aSNate Lawson  * property rights.
2153289f6aSNate Lawson  *
2253289f6aSNate Lawson  * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a
2353289f6aSNate Lawson  * copy of the source code appearing in this file ("Covered Code") an
2453289f6aSNate Lawson  * irrevocable, perpetual, worldwide license under Intel's copyrights in the
2553289f6aSNate Lawson  * base code distributed originally by Intel ("Original Intel Code") to copy,
2653289f6aSNate Lawson  * make derivatives, distribute, use and display any portion of the Covered
2753289f6aSNate Lawson  * Code in any form, with the right to sublicense such rights; and
2853289f6aSNate Lawson  *
2953289f6aSNate Lawson  * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent
3053289f6aSNate Lawson  * license (with the right to sublicense), under only those claims of Intel
3153289f6aSNate Lawson  * patents that are infringed by the Original Intel Code, to make, use, sell,
3253289f6aSNate Lawson  * offer to sell, and import the Covered Code and derivative works thereof
3353289f6aSNate Lawson  * solely to the minimum extent necessary to exercise the above copyright
3453289f6aSNate Lawson  * license, and in no event shall the patent license extend to any additions
3553289f6aSNate Lawson  * to or modifications of the Original Intel Code.  No other license or right
3653289f6aSNate Lawson  * is granted directly or by implication, estoppel or otherwise;
3753289f6aSNate Lawson  *
3853289f6aSNate Lawson  * The above copyright and patent license is granted only if the following
3953289f6aSNate Lawson  * conditions are met:
4053289f6aSNate Lawson  *
4153289f6aSNate Lawson  * 3. Conditions
4253289f6aSNate Lawson  *
4353289f6aSNate Lawson  * 3.1. Redistribution of Source with Rights to Further Distribute Source.
4453289f6aSNate Lawson  * Redistribution of source code of any substantial portion of the Covered
4553289f6aSNate Lawson  * Code or modification with rights to further distribute source must include
4653289f6aSNate Lawson  * the above Copyright Notice, the above License, this list of Conditions,
4753289f6aSNate Lawson  * and the following Disclaimer and Export Compliance provision.  In addition,
4853289f6aSNate Lawson  * Licensee must cause all Covered Code to which Licensee contributes to
4953289f6aSNate Lawson  * contain a file documenting the changes Licensee made to create that Covered
5053289f6aSNate Lawson  * Code and the date of any change.  Licensee must include in that file the
5153289f6aSNate Lawson  * documentation of any changes made by any predecessor Licensee.  Licensee
5253289f6aSNate Lawson  * must include a prominent statement that the modification is derived,
5353289f6aSNate Lawson  * directly or indirectly, from Original Intel Code.
5453289f6aSNate Lawson  *
5553289f6aSNate Lawson  * 3.2. Redistribution of Source with no Rights to Further Distribute Source.
5653289f6aSNate Lawson  * Redistribution of source code of any substantial portion of the Covered
5753289f6aSNate Lawson  * Code or modification without rights to further distribute source must
5853289f6aSNate Lawson  * include the following Disclaimer and Export Compliance provision in the
5953289f6aSNate Lawson  * documentation and/or other materials provided with distribution.  In
6053289f6aSNate Lawson  * addition, Licensee may not authorize further sublicense of source of any
6153289f6aSNate Lawson  * portion of the Covered Code, and must include terms to the effect that the
6253289f6aSNate Lawson  * license from Licensee to its licensee is limited to the intellectual
6353289f6aSNate Lawson  * property embodied in the software Licensee provides to its licensee, and
6453289f6aSNate Lawson  * not to intellectual property embodied in modifications its licensee may
6553289f6aSNate Lawson  * make.
6653289f6aSNate Lawson  *
6753289f6aSNate Lawson  * 3.3. Redistribution of Executable. Redistribution in executable form of any
6853289f6aSNate Lawson  * substantial portion of the Covered Code or modification must reproduce the
6953289f6aSNate Lawson  * above Copyright Notice, and the following Disclaimer and Export Compliance
7053289f6aSNate Lawson  * provision in the documentation and/or other materials provided with the
7153289f6aSNate Lawson  * distribution.
7253289f6aSNate Lawson  *
7353289f6aSNate Lawson  * 3.4. Intel retains all right, title, and interest in and to the Original
7453289f6aSNate Lawson  * Intel Code.
7553289f6aSNate Lawson  *
7653289f6aSNate Lawson  * 3.5. Neither the name Intel nor any other trademark owned or controlled by
7753289f6aSNate Lawson  * Intel shall be used in advertising or otherwise to promote the sale, use or
7853289f6aSNate Lawson  * other dealings in products derived from or relating to the Covered Code
7953289f6aSNate Lawson  * without prior written authorization from Intel.
8053289f6aSNate Lawson  *
8153289f6aSNate Lawson  * 4. Disclaimer and Export Compliance
8253289f6aSNate Lawson  *
8353289f6aSNate Lawson  * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED
8453289f6aSNate Lawson  * HERE.  ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE
8553289f6aSNate Lawson  * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT,  ASSISTANCE,
8653289f6aSNate Lawson  * INSTALLATION, TRAINING OR OTHER SERVICES.  INTEL WILL NOT PROVIDE ANY
8753289f6aSNate Lawson  * UPDATES, ENHANCEMENTS OR EXTENSIONS.  INTEL SPECIFICALLY DISCLAIMS ANY
8853289f6aSNate Lawson  * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A
8953289f6aSNate Lawson  * PARTICULAR PURPOSE.
9053289f6aSNate Lawson  *
9153289f6aSNate Lawson  * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES
9253289f6aSNate Lawson  * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR
9353289f6aSNate Lawson  * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT,
9453289f6aSNate Lawson  * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY
9553289f6aSNate Lawson  * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL
9653289f6aSNate Lawson  * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.  THESE LIMITATIONS
9753289f6aSNate Lawson  * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY
9853289f6aSNate Lawson  * LIMITED REMEDY.
9953289f6aSNate Lawson  *
10053289f6aSNate Lawson  * 4.3. Licensee shall not export, either directly or indirectly, any of this
10153289f6aSNate Lawson  * software or system incorporating such software without first obtaining any
10253289f6aSNate Lawson  * required license or other approval from the U. S. Department of Commerce or
10353289f6aSNate Lawson  * any other agency or department of the United States Government.  In the
10453289f6aSNate Lawson  * event Licensee exports any such software from the United States or
10553289f6aSNate Lawson  * re-exports any such software from a foreign destination, Licensee shall
10653289f6aSNate Lawson  * ensure that the distribution and export/re-export of the software is in
10753289f6aSNate Lawson  * compliance with all laws, regulations, orders, or other restrictions of the
10853289f6aSNate Lawson  * U.S. Export Administration Regulations. Licensee agrees that neither it nor
10953289f6aSNate Lawson  * any of its subsidiaries will export/re-export any technical data, process,
11053289f6aSNate Lawson  * software, or service, directly or indirectly, to any country for which the
11153289f6aSNate Lawson  * United States government or any agency thereof requires an export license,
11253289f6aSNate Lawson  * other governmental approval, or letter of assurance, without first obtaining
11353289f6aSNate Lawson  * such license, approval or letter.
11453289f6aSNate Lawson  *
11553289f6aSNate Lawson  *****************************************************************************/
11653289f6aSNate Lawson 
11753289f6aSNate Lawson #define __ASLLOAD_C__
11853289f6aSNate Lawson 
119*fba7fc7eSJung-uk Kim #include <contrib/dev/acpica/compiler/aslcompiler.h>
120*fba7fc7eSJung-uk Kim #include <contrib/dev/acpica/amlcode.h>
121*fba7fc7eSJung-uk Kim #include <contrib/dev/acpica/acdispat.h>
122*fba7fc7eSJung-uk Kim #include <contrib/dev/acpica/acnamesp.h>
12353289f6aSNate Lawson 
12453289f6aSNate Lawson #include "aslcompiler.y.h"
12553289f6aSNate Lawson 
12653289f6aSNate Lawson #define _COMPONENT          ACPI_COMPILER
12753289f6aSNate Lawson         ACPI_MODULE_NAME    ("aslload")
12853289f6aSNate Lawson 
129*fba7fc7eSJung-uk Kim /* Local prototypes */
130*fba7fc7eSJung-uk Kim 
131*fba7fc7eSJung-uk Kim static ACPI_STATUS
132*fba7fc7eSJung-uk Kim LdLoadFieldElements (
133*fba7fc7eSJung-uk Kim     ACPI_PARSE_OBJECT       *Op,
134*fba7fc7eSJung-uk Kim     ACPI_WALK_STATE         *WalkState);
135*fba7fc7eSJung-uk Kim 
136*fba7fc7eSJung-uk Kim static ACPI_STATUS
137*fba7fc7eSJung-uk Kim LdLoadResourceElements (
138*fba7fc7eSJung-uk Kim     ACPI_PARSE_OBJECT       *Op,
139*fba7fc7eSJung-uk Kim     ACPI_WALK_STATE         *WalkState);
140*fba7fc7eSJung-uk Kim 
141*fba7fc7eSJung-uk Kim static ACPI_STATUS
142*fba7fc7eSJung-uk Kim LdNamespace1Begin (
143*fba7fc7eSJung-uk Kim     ACPI_PARSE_OBJECT       *Op,
144*fba7fc7eSJung-uk Kim     UINT32                  Level,
145*fba7fc7eSJung-uk Kim     void                    *Context);
146*fba7fc7eSJung-uk Kim 
147*fba7fc7eSJung-uk Kim static ACPI_STATUS
148*fba7fc7eSJung-uk Kim LdNamespace1End (
149*fba7fc7eSJung-uk Kim     ACPI_PARSE_OBJECT       *Op,
150*fba7fc7eSJung-uk Kim     UINT32                  Level,
151*fba7fc7eSJung-uk Kim     void                    *Context);
152*fba7fc7eSJung-uk Kim 
15353289f6aSNate Lawson 
15453289f6aSNate Lawson /*******************************************************************************
15553289f6aSNate Lawson  *
15653289f6aSNate Lawson  * FUNCTION:    LdLoadNamespace
15753289f6aSNate Lawson  *
158*fba7fc7eSJung-uk Kim  * PARAMETERS:  RootOp      - Root of the parse tree
15953289f6aSNate Lawson  *
16053289f6aSNate Lawson  * RETURN:      Status
16153289f6aSNate Lawson  *
16253289f6aSNate Lawson  * DESCRIPTION: Perform a walk of the parse tree that in turn loads all of the
16353289f6aSNate Lawson  *              named ASL/AML objects into the namespace.  The namespace is
16453289f6aSNate Lawson  *              constructed in order to resolve named references and references
16553289f6aSNate Lawson  *              to named fields within resource templates/descriptors.
16653289f6aSNate Lawson  *
16753289f6aSNate Lawson  ******************************************************************************/
16853289f6aSNate Lawson 
16953289f6aSNate Lawson ACPI_STATUS
17053289f6aSNate Lawson LdLoadNamespace (
17153289f6aSNate Lawson     ACPI_PARSE_OBJECT       *RootOp)
17253289f6aSNate Lawson {
17353289f6aSNate Lawson     ACPI_WALK_STATE         *WalkState;
17453289f6aSNate Lawson 
17553289f6aSNate Lawson 
17653289f6aSNate Lawson     DbgPrint (ASL_DEBUG_OUTPUT, "\nCreating namespace\n\n");
17753289f6aSNate Lawson 
17853289f6aSNate Lawson     /* Create a new walk state */
17953289f6aSNate Lawson 
18053289f6aSNate Lawson     WalkState = AcpiDsCreateWalkState (0, NULL, NULL, NULL);
18153289f6aSNate Lawson     if (!WalkState)
18253289f6aSNate Lawson     {
18353289f6aSNate Lawson         return AE_NO_MEMORY;
18453289f6aSNate Lawson     }
18553289f6aSNate Lawson 
18653289f6aSNate Lawson     /* Perform the walk of the parse tree */
18753289f6aSNate Lawson 
18853289f6aSNate Lawson     TrWalkParseTree (RootOp, ASL_WALK_VISIT_TWICE, LdNamespace1Begin,
18953289f6aSNate Lawson         LdNamespace1End, WalkState);
19053289f6aSNate Lawson 
19153289f6aSNate Lawson     /* Dump the namespace if debug is enabled */
19253289f6aSNate Lawson 
19353289f6aSNate Lawson     AcpiNsDumpTables (ACPI_NS_ALL, ACPI_UINT32_MAX);
19453289f6aSNate Lawson     return AE_OK;
19553289f6aSNate Lawson }
19653289f6aSNate Lawson 
19753289f6aSNate Lawson 
19853289f6aSNate Lawson /*******************************************************************************
19953289f6aSNate Lawson  *
20053289f6aSNate Lawson  * FUNCTION:    LdLoadFieldElements
20153289f6aSNate Lawson  *
20253289f6aSNate Lawson  * PARAMETERS:  Op              - Parent node (Field)
20353289f6aSNate Lawson  *              WalkState       - Current walk state
20453289f6aSNate Lawson  *
20553289f6aSNate Lawson  * RETURN:      Status
20653289f6aSNate Lawson  *
20753289f6aSNate Lawson  * DESCRIPTION: Enter the named elements of the field (children of the parent)
20853289f6aSNate Lawson  *              into the namespace.
20953289f6aSNate Lawson  *
21053289f6aSNate Lawson  ******************************************************************************/
21153289f6aSNate Lawson 
212*fba7fc7eSJung-uk Kim static ACPI_STATUS
21353289f6aSNate Lawson LdLoadFieldElements (
21453289f6aSNate Lawson     ACPI_PARSE_OBJECT       *Op,
21553289f6aSNate Lawson     ACPI_WALK_STATE         *WalkState)
21653289f6aSNate Lawson {
21753289f6aSNate Lawson     ACPI_PARSE_OBJECT       *Child = NULL;
21853289f6aSNate Lawson     ACPI_NAMESPACE_NODE     *Node;
21953289f6aSNate Lawson     ACPI_STATUS             Status;
22053289f6aSNate Lawson 
22153289f6aSNate Lawson 
22253289f6aSNate Lawson     /* Get the first named field element */
22353289f6aSNate Lawson 
22453289f6aSNate Lawson     switch (Op->Asl.AmlOpcode)
22553289f6aSNate Lawson     {
22653289f6aSNate Lawson     case AML_BANK_FIELD_OP:
22753289f6aSNate Lawson 
22853289f6aSNate Lawson         Child = UtGetArg (Op, 6);
22953289f6aSNate Lawson         break;
23053289f6aSNate Lawson 
23153289f6aSNate Lawson     case AML_INDEX_FIELD_OP:
23253289f6aSNate Lawson 
23353289f6aSNate Lawson         Child = UtGetArg (Op, 5);
23453289f6aSNate Lawson         break;
23553289f6aSNate Lawson 
23653289f6aSNate Lawson     case AML_FIELD_OP:
23753289f6aSNate Lawson 
23853289f6aSNate Lawson         Child = UtGetArg (Op, 4);
23953289f6aSNate Lawson         break;
24053289f6aSNate Lawson 
24153289f6aSNate Lawson     default:
24253289f6aSNate Lawson         /* No other opcodes should arrive here */
24353289f6aSNate Lawson         return (AE_BAD_PARAMETER);
24453289f6aSNate Lawson     }
24553289f6aSNate Lawson 
24653289f6aSNate Lawson     /* Enter all elements into the namespace */
24753289f6aSNate Lawson 
24853289f6aSNate Lawson     while (Child)
24953289f6aSNate Lawson     {
25053289f6aSNate Lawson         switch (Child->Asl.AmlOpcode)
25153289f6aSNate Lawson         {
25253289f6aSNate Lawson         case AML_INT_RESERVEDFIELD_OP:
25353289f6aSNate Lawson         case AML_INT_ACCESSFIELD_OP:
25453289f6aSNate Lawson 
25553289f6aSNate Lawson             break;
25653289f6aSNate Lawson 
25753289f6aSNate Lawson         default:
25853289f6aSNate Lawson 
259*fba7fc7eSJung-uk Kim             Status = AcpiNsLookup (WalkState->ScopeInfo,
260*fba7fc7eSJung-uk Kim                         Child->Asl.Value.String,
261*fba7fc7eSJung-uk Kim                         ACPI_TYPE_LOCAL_REGION_FIELD,
262*fba7fc7eSJung-uk Kim                         ACPI_IMODE_LOAD_PASS1,
263*fba7fc7eSJung-uk Kim                         ACPI_NS_NO_UPSEARCH | ACPI_NS_DONT_OPEN_SCOPE |
264*fba7fc7eSJung-uk Kim                             ACPI_NS_ERROR_IF_FOUND,
26553289f6aSNate Lawson                         NULL, &Node);
26653289f6aSNate Lawson             if (ACPI_FAILURE (Status))
26753289f6aSNate Lawson             {
26853289f6aSNate Lawson                 if (Status != AE_ALREADY_EXISTS)
26953289f6aSNate Lawson                 {
270*fba7fc7eSJung-uk Kim                     AslError (ASL_ERROR, ASL_MSG_CORE_EXCEPTION, Child,
271*fba7fc7eSJung-uk Kim                         Child->Asl.Value.String);
27253289f6aSNate Lawson                     return (Status);
27353289f6aSNate Lawson                 }
27453289f6aSNate Lawson 
27553289f6aSNate Lawson                 /*
27653289f6aSNate Lawson                  * The name already exists in this scope
27753289f6aSNate Lawson                  * But continue processing the elements
27853289f6aSNate Lawson                  */
279*fba7fc7eSJung-uk Kim                 AslError (ASL_ERROR, ASL_MSG_NAME_EXISTS, Child,
280*fba7fc7eSJung-uk Kim                     Child->Asl.Value.String);
28153289f6aSNate Lawson             }
28253289f6aSNate Lawson             else
28353289f6aSNate Lawson             {
28453289f6aSNate Lawson                 Child->Asl.Node = Node;
285*fba7fc7eSJung-uk Kim                 Node->Op = Child;
28653289f6aSNate Lawson             }
28753289f6aSNate Lawson             break;
28853289f6aSNate Lawson         }
28953289f6aSNate Lawson         Child = Child->Asl.Next;
29053289f6aSNate Lawson     }
29153289f6aSNate Lawson     return (AE_OK);
29253289f6aSNate Lawson }
29353289f6aSNate Lawson 
29453289f6aSNate Lawson 
29553289f6aSNate Lawson /*******************************************************************************
29653289f6aSNate Lawson  *
29753289f6aSNate Lawson  * FUNCTION:    LdLoadResourceElements
29853289f6aSNate Lawson  *
29953289f6aSNate Lawson  * PARAMETERS:  Op              - Parent node (Resource Descriptor)
30053289f6aSNate Lawson  *              WalkState       - Current walk state
30153289f6aSNate Lawson  *
30253289f6aSNate Lawson  * RETURN:      Status
30353289f6aSNate Lawson  *
30453289f6aSNate Lawson  * DESCRIPTION: Enter the named elements of the resource descriptor (children
30553289f6aSNate Lawson  *              of the parent) into the namespace.
30653289f6aSNate Lawson  *
30753289f6aSNate Lawson  * NOTE: In the real AML namespace, these named elements never exist.  But
30853289f6aSNate Lawson  *       we simply use the namespace here as a symbol table so we can look
30953289f6aSNate Lawson  *       them up as they are referenced.
31053289f6aSNate Lawson  *
31153289f6aSNate Lawson  ******************************************************************************/
31253289f6aSNate Lawson 
313*fba7fc7eSJung-uk Kim static ACPI_STATUS
31453289f6aSNate Lawson LdLoadResourceElements (
31553289f6aSNate Lawson     ACPI_PARSE_OBJECT       *Op,
31653289f6aSNate Lawson     ACPI_WALK_STATE         *WalkState)
31753289f6aSNate Lawson {
31853289f6aSNate Lawson     ACPI_PARSE_OBJECT       *InitializerOp = NULL;
31953289f6aSNate Lawson     ACPI_NAMESPACE_NODE     *Node;
32053289f6aSNate Lawson     ACPI_STATUS             Status;
32153289f6aSNate Lawson 
32253289f6aSNate Lawson 
32353289f6aSNate Lawson     /*
324*fba7fc7eSJung-uk Kim      * Enter the resource name into the namespace. Name must not already exist.
325*fba7fc7eSJung-uk Kim      * This opens a scope, so later field names are guaranteed to be new/unique.
32653289f6aSNate Lawson      */
32753289f6aSNate Lawson     Status = AcpiNsLookup (WalkState->ScopeInfo, Op->Asl.Namepath,
328*fba7fc7eSJung-uk Kim                 ACPI_TYPE_LOCAL_RESOURCE, ACPI_IMODE_LOAD_PASS1,
329*fba7fc7eSJung-uk Kim                 ACPI_NS_NO_UPSEARCH | ACPI_NS_ERROR_IF_FOUND,
33053289f6aSNate Lawson                 WalkState, &Node);
33153289f6aSNate Lawson     if (ACPI_FAILURE (Status))
33253289f6aSNate Lawson     {
333*fba7fc7eSJung-uk Kim         if (Status == AE_ALREADY_EXISTS)
334*fba7fc7eSJung-uk Kim         {
335*fba7fc7eSJung-uk Kim             /* Actual node causing the error was saved in ParentMethod */
336*fba7fc7eSJung-uk Kim 
337*fba7fc7eSJung-uk Kim             AslError (ASL_ERROR, ASL_MSG_NAME_EXISTS,
338*fba7fc7eSJung-uk Kim                 (ACPI_PARSE_OBJECT *) Op->Asl.ParentMethod, Op->Asl.Namepath);
339*fba7fc7eSJung-uk Kim             return (AE_OK);
340*fba7fc7eSJung-uk Kim         }
34153289f6aSNate Lawson         return (Status);
34253289f6aSNate Lawson     }
34353289f6aSNate Lawson 
34453289f6aSNate Lawson     /*
34553289f6aSNate Lawson      * Now enter the predefined fields, for easy lookup when referenced
34653289f6aSNate Lawson      * by the source ASL
34753289f6aSNate Lawson      */
34853289f6aSNate Lawson     InitializerOp = ASL_GET_CHILD_NODE (Op);
34953289f6aSNate Lawson     while (InitializerOp)
35053289f6aSNate Lawson     {
35153289f6aSNate Lawson 
35253289f6aSNate Lawson         if (InitializerOp->Asl.ExternalName)
35353289f6aSNate Lawson         {
35453289f6aSNate Lawson             Status = AcpiNsLookup (WalkState->ScopeInfo,
35553289f6aSNate Lawson                         InitializerOp->Asl.ExternalName,
35653289f6aSNate Lawson                         ACPI_TYPE_LOCAL_RESOURCE_FIELD,
357*fba7fc7eSJung-uk Kim                         ACPI_IMODE_LOAD_PASS1,
358*fba7fc7eSJung-uk Kim                         ACPI_NS_NO_UPSEARCH | ACPI_NS_DONT_OPEN_SCOPE,
35953289f6aSNate Lawson                         NULL, &Node);
36053289f6aSNate Lawson             if (ACPI_FAILURE (Status))
36153289f6aSNate Lawson             {
36253289f6aSNate Lawson                 return (Status);
36353289f6aSNate Lawson             }
36453289f6aSNate Lawson 
36553289f6aSNate Lawson             /*
36653289f6aSNate Lawson              * Store the field offset in the namespace node so it
36753289f6aSNate Lawson              * can be used when the field is referenced
36853289f6aSNate Lawson              */
369*fba7fc7eSJung-uk Kim             Node->Value = (UINT32) InitializerOp->Asl.Value.Integer;
37053289f6aSNate Lawson             InitializerOp->Asl.Node = Node;
371*fba7fc7eSJung-uk Kim             Node->Op = InitializerOp;
37253289f6aSNate Lawson 
37353289f6aSNate Lawson             /* Pass thru the field type (Bitfield or Bytefield) */
37453289f6aSNate Lawson 
37553289f6aSNate Lawson             if (InitializerOp->Asl.CompileFlags & NODE_IS_BIT_OFFSET)
37653289f6aSNate Lawson             {
37753289f6aSNate Lawson                 Node->Flags |= ANOBJ_IS_BIT_OFFSET;
37853289f6aSNate Lawson             }
37953289f6aSNate Lawson         }
38053289f6aSNate Lawson         InitializerOp = ASL_GET_PEER_NODE (InitializerOp);
38153289f6aSNate Lawson     }
38253289f6aSNate Lawson 
38353289f6aSNate Lawson     return (AE_OK);
38453289f6aSNate Lawson }
38553289f6aSNate Lawson 
38653289f6aSNate Lawson 
38753289f6aSNate Lawson /*******************************************************************************
38853289f6aSNate Lawson  *
38953289f6aSNate Lawson  * FUNCTION:    LdNamespace1Begin
39053289f6aSNate Lawson  *
39153289f6aSNate Lawson  * PARAMETERS:  ASL_WALK_CALLBACK
39253289f6aSNate Lawson  *
39353289f6aSNate Lawson  * RETURN:      Status
39453289f6aSNate Lawson  *
39553289f6aSNate Lawson  * DESCRIPTION: Descending callback used during the parse tree walk.  If this
39653289f6aSNate Lawson  *              is a named AML opcode, enter into the namespace
39753289f6aSNate Lawson  *
39853289f6aSNate Lawson  ******************************************************************************/
39953289f6aSNate Lawson 
400*fba7fc7eSJung-uk Kim static ACPI_STATUS
40153289f6aSNate Lawson LdNamespace1Begin (
40253289f6aSNate Lawson     ACPI_PARSE_OBJECT       *Op,
40353289f6aSNate Lawson     UINT32                  Level,
40453289f6aSNate Lawson     void                    *Context)
40553289f6aSNate Lawson {
40653289f6aSNate Lawson     ACPI_WALK_STATE         *WalkState = (ACPI_WALK_STATE *) Context;
40753289f6aSNate Lawson     ACPI_NAMESPACE_NODE     *Node;
40853289f6aSNate Lawson     ACPI_STATUS             Status;
40953289f6aSNate Lawson     ACPI_OBJECT_TYPE        ObjectType;
41053289f6aSNate Lawson     ACPI_OBJECT_TYPE        ActualObjectType = ACPI_TYPE_ANY;
41153289f6aSNate Lawson     char                    *Path;
41253289f6aSNate Lawson     UINT32                  Flags = ACPI_NS_NO_UPSEARCH;
41353289f6aSNate Lawson     ACPI_PARSE_OBJECT       *Arg;
41453289f6aSNate Lawson     UINT32                  i;
41553289f6aSNate Lawson 
41653289f6aSNate Lawson 
41753289f6aSNate Lawson     ACPI_FUNCTION_NAME ("LdNamespace1Begin");
41853289f6aSNate Lawson     ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, "Op %p [%s]\n",
41953289f6aSNate Lawson         Op, Op->Asl.ParseOpName));
42053289f6aSNate Lawson 
42153289f6aSNate Lawson 
42253289f6aSNate Lawson     /*
42353289f6aSNate Lawson      * We are only interested in opcodes that have an associated name
42453289f6aSNate Lawson      * (or multiple names)
42553289f6aSNate Lawson      */
42653289f6aSNate Lawson     switch (Op->Asl.AmlOpcode)
42753289f6aSNate Lawson     {
42853289f6aSNate Lawson     case AML_BANK_FIELD_OP:
42953289f6aSNate Lawson     case AML_INDEX_FIELD_OP:
43053289f6aSNate Lawson     case AML_FIELD_OP:
43153289f6aSNate Lawson 
43253289f6aSNate Lawson         Status = LdLoadFieldElements (Op, WalkState);
43353289f6aSNate Lawson         return (Status);
43453289f6aSNate Lawson 
43553289f6aSNate Lawson     default:
43653289f6aSNate Lawson 
43753289f6aSNate Lawson         /* All other opcodes go below */
43853289f6aSNate Lawson         break;
43953289f6aSNate Lawson     }
44053289f6aSNate Lawson 
44153289f6aSNate Lawson     /* Check if this object has already been installed in the namespace */
44253289f6aSNate Lawson 
44353289f6aSNate Lawson     if (Op->Asl.Node)
44453289f6aSNate Lawson     {
44553289f6aSNate Lawson         return (AE_OK);
44653289f6aSNate Lawson     }
44753289f6aSNate Lawson 
44853289f6aSNate Lawson     Path = Op->Asl.Namepath;
44953289f6aSNate Lawson     if (!Path)
45053289f6aSNate Lawson     {
45153289f6aSNate Lawson         return (AE_OK);
45253289f6aSNate Lawson     }
45353289f6aSNate Lawson 
45453289f6aSNate Lawson     /* Map the raw opcode into an internal object type */
45553289f6aSNate Lawson 
45653289f6aSNate Lawson     switch (Op->Asl.ParseOpcode)
45753289f6aSNate Lawson     {
45853289f6aSNate Lawson     case PARSEOP_NAME:
45953289f6aSNate Lawson 
46053289f6aSNate Lawson         Arg = Op->Asl.Child;  /* Get the NameSeg/NameString node */
46153289f6aSNate Lawson         Arg = Arg->Asl.Next;  /* First peer is the object to be associated with the name */
46253289f6aSNate Lawson 
46353289f6aSNate Lawson         /* Get the data type associated with the named object, not the name itself */
46453289f6aSNate Lawson 
46553289f6aSNate Lawson         /* Log2 loop to convert from Btype (binary) to Etype (encoded) */
46653289f6aSNate Lawson 
46753289f6aSNate Lawson         ObjectType = 1;
46853289f6aSNate Lawson         for (i = 1; i < Arg->Asl.AcpiBtype; i *= 2)
46953289f6aSNate Lawson         {
47053289f6aSNate Lawson             ObjectType++;
47153289f6aSNate Lawson         }
47253289f6aSNate Lawson         break;
47353289f6aSNate Lawson 
47453289f6aSNate Lawson 
47553289f6aSNate Lawson     case PARSEOP_EXTERNAL:
47653289f6aSNate Lawson 
47753289f6aSNate Lawson         /*
47853289f6aSNate Lawson          * "External" simply enters a name and type into the namespace.
47953289f6aSNate Lawson          * We must be careful to not open a new scope, however, no matter
48053289f6aSNate Lawson          * what type the external name refers to (e.g., a method)
48153289f6aSNate Lawson          *
48253289f6aSNate Lawson          * first child is name, next child is ObjectType
48353289f6aSNate Lawson          */
48453289f6aSNate Lawson         ActualObjectType = (UINT8) Op->Asl.Child->Asl.Next->Asl.Value.Integer;
48553289f6aSNate Lawson         ObjectType = ACPI_TYPE_ANY;
48653289f6aSNate Lawson         break;
48753289f6aSNate Lawson 
48853289f6aSNate Lawson 
48953289f6aSNate Lawson     case PARSEOP_DEFAULT_ARG:
49053289f6aSNate Lawson 
49153289f6aSNate Lawson         if(Op->Asl.CompileFlags == NODE_IS_RESOURCE_DESC)
49253289f6aSNate Lawson         {
49353289f6aSNate Lawson             Status = LdLoadResourceElements (Op, WalkState);
49453289f6aSNate Lawson             goto Exit;
49553289f6aSNate Lawson         }
49653289f6aSNate Lawson 
49753289f6aSNate Lawson         ObjectType = AslMapNamedOpcodeToDataType (Op->Asl.AmlOpcode);
49853289f6aSNate Lawson         break;
49953289f6aSNate Lawson 
50053289f6aSNate Lawson 
50153289f6aSNate Lawson     case PARSEOP_SCOPE:
50253289f6aSNate Lawson 
50353289f6aSNate Lawson         /*
50453289f6aSNate Lawson          * The name referenced by Scope(Name) must already exist at this point.
50553289f6aSNate Lawson          * In other words, forward references for Scope() are not supported.
50653289f6aSNate Lawson          * The only real reason for this is that the MS interpreter cannot
50753289f6aSNate Lawson          * handle this case.  Perhaps someday this case can go away.
50853289f6aSNate Lawson          */
50953289f6aSNate Lawson         Status = AcpiNsLookup (WalkState->ScopeInfo, Path, ACPI_TYPE_ANY,
510*fba7fc7eSJung-uk Kim                     ACPI_IMODE_EXECUTE, ACPI_NS_SEARCH_PARENT,
511*fba7fc7eSJung-uk Kim                     WalkState, &(Node));
51253289f6aSNate Lawson         if (ACPI_FAILURE (Status))
51353289f6aSNate Lawson         {
51453289f6aSNate Lawson             if (Status == AE_NOT_FOUND)
51553289f6aSNate Lawson             {
51653289f6aSNate Lawson                 /* The name was not found, go ahead and create it */
51753289f6aSNate Lawson 
518*fba7fc7eSJung-uk Kim                 Status = AcpiNsLookup (WalkState->ScopeInfo, Path,
519*fba7fc7eSJung-uk Kim                             ACPI_TYPE_LOCAL_SCOPE,
520*fba7fc7eSJung-uk Kim                             ACPI_IMODE_LOAD_PASS1, Flags,
521*fba7fc7eSJung-uk Kim                             WalkState, &(Node));
52253289f6aSNate Lawson 
52353289f6aSNate Lawson                 /*
52453289f6aSNate Lawson                  * However, this is an error -- primarily because the MS
52553289f6aSNate Lawson                  * interpreter can't handle a forward reference from the
52653289f6aSNate Lawson                  * Scope() operator.
52753289f6aSNate Lawson                  */
528*fba7fc7eSJung-uk Kim                 AslError (ASL_ERROR, ASL_MSG_NOT_FOUND, Op,
529*fba7fc7eSJung-uk Kim                     Op->Asl.ExternalName);
530*fba7fc7eSJung-uk Kim                 AslError (ASL_ERROR, ASL_MSG_SCOPE_FWD_REF, Op,
531*fba7fc7eSJung-uk Kim                     Op->Asl.ExternalName);
53253289f6aSNate Lawson                 goto FinishNode;
53353289f6aSNate Lawson             }
53453289f6aSNate Lawson 
53553289f6aSNate Lawson             AslCoreSubsystemError (Op, Status, "Failure from lookup\n", FALSE);
53653289f6aSNate Lawson             goto Exit;
53753289f6aSNate Lawson         }
53853289f6aSNate Lawson 
53953289f6aSNate Lawson         /* We found a node with this name, now check the type */
54053289f6aSNate Lawson 
54153289f6aSNate Lawson         switch (Node->Type)
54253289f6aSNate Lawson         {
54353289f6aSNate Lawson         case ACPI_TYPE_LOCAL_SCOPE:
54453289f6aSNate Lawson         case ACPI_TYPE_DEVICE:
54553289f6aSNate Lawson         case ACPI_TYPE_POWER:
54653289f6aSNate Lawson         case ACPI_TYPE_PROCESSOR:
54753289f6aSNate Lawson         case ACPI_TYPE_THERMAL:
54853289f6aSNate Lawson 
54953289f6aSNate Lawson             /* These are acceptable types - they all open a new scope */
55053289f6aSNate Lawson             break;
55153289f6aSNate Lawson 
55253289f6aSNate Lawson         case ACPI_TYPE_INTEGER:
55353289f6aSNate Lawson         case ACPI_TYPE_STRING:
55453289f6aSNate Lawson         case ACPI_TYPE_BUFFER:
55553289f6aSNate Lawson 
55653289f6aSNate Lawson             /*
557*fba7fc7eSJung-uk Kim              * These types we will allow, but we will change the type.
558*fba7fc7eSJung-uk Kim              * This enables some existing code of the form:
55953289f6aSNate Lawson              *
56053289f6aSNate Lawson              *  Name (DEB, 0)
56153289f6aSNate Lawson              *  Scope (DEB) { ... }
56253289f6aSNate Lawson              *
56353289f6aSNate Lawson              * Which is used to workaround the fact that the MS interpreter
56453289f6aSNate Lawson              * does not allow Scope() forward references.
56553289f6aSNate Lawson              */
566e0ef747bSNate Lawson             sprintf (MsgBuffer, "%s [%s], changing type to [Scope]",
56753289f6aSNate Lawson                 Op->Asl.ExternalName, AcpiUtGetTypeName (Node->Type));
56853289f6aSNate Lawson             AslError (ASL_REMARK, ASL_MSG_SCOPE_TYPE, Op, MsgBuffer);
56953289f6aSNate Lawson 
570*fba7fc7eSJung-uk Kim             /* Switch the type to scope, open the new scope */
571*fba7fc7eSJung-uk Kim 
572e0ef747bSNate Lawson             Node->Type = ACPI_TYPE_LOCAL_SCOPE;
573*fba7fc7eSJung-uk Kim             Status = AcpiDsScopeStackPush (Node, ACPI_TYPE_LOCAL_SCOPE,
574*fba7fc7eSJung-uk Kim                         WalkState);
575e0ef747bSNate Lawson             if (ACPI_FAILURE (Status))
576e0ef747bSNate Lawson             {
577e0ef747bSNate Lawson                 return_ACPI_STATUS (Status);
578e0ef747bSNate Lawson             }
57953289f6aSNate Lawson             break;
58053289f6aSNate Lawson 
58153289f6aSNate Lawson         default:
58253289f6aSNate Lawson 
583*fba7fc7eSJung-uk Kim             /* All other types are an error */
584*fba7fc7eSJung-uk Kim 
585*fba7fc7eSJung-uk Kim             sprintf (MsgBuffer, "%s [%s]", Op->Asl.ExternalName,
586*fba7fc7eSJung-uk Kim                 AcpiUtGetTypeName (Node->Type));
58753289f6aSNate Lawson             AslError (ASL_ERROR, ASL_MSG_SCOPE_TYPE, Op, MsgBuffer);
58853289f6aSNate Lawson 
58953289f6aSNate Lawson             /*
59053289f6aSNate Lawson              * However, switch the type to be an actual scope so
59153289f6aSNate Lawson              * that compilation can continue without generating a whole
592e0ef747bSNate Lawson              * cascade of additional errors.  Open the new scope.
59353289f6aSNate Lawson              */
594e0ef747bSNate Lawson             Node->Type = ACPI_TYPE_LOCAL_SCOPE;
595*fba7fc7eSJung-uk Kim             Status = AcpiDsScopeStackPush (Node, ACPI_TYPE_LOCAL_SCOPE,
596*fba7fc7eSJung-uk Kim                         WalkState);
597e0ef747bSNate Lawson             if (ACPI_FAILURE (Status))
598e0ef747bSNate Lawson             {
599e0ef747bSNate Lawson                 return_ACPI_STATUS (Status);
600e0ef747bSNate Lawson             }
60153289f6aSNate Lawson             break;
60253289f6aSNate Lawson         }
60353289f6aSNate Lawson 
60453289f6aSNate Lawson         Status = AE_OK;
60553289f6aSNate Lawson         goto FinishNode;
60653289f6aSNate Lawson 
60753289f6aSNate Lawson 
60853289f6aSNate Lawson     default:
60953289f6aSNate Lawson 
61053289f6aSNate Lawson         ObjectType = AslMapNamedOpcodeToDataType (Op->Asl.AmlOpcode);
61153289f6aSNate Lawson         break;
61253289f6aSNate Lawson     }
61353289f6aSNate Lawson 
61453289f6aSNate Lawson 
61553289f6aSNate Lawson     ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, "Loading name: %s, (%s)\n",
61653289f6aSNate Lawson             Op->Asl.ExternalName, AcpiUtGetTypeName (ObjectType)));
61753289f6aSNate Lawson 
61853289f6aSNate Lawson     /* The name must not already exist */
61953289f6aSNate Lawson 
62053289f6aSNate Lawson     Flags |= ACPI_NS_ERROR_IF_FOUND;
62153289f6aSNate Lawson 
62253289f6aSNate Lawson     /*
62353289f6aSNate Lawson      * Enter the named type into the internal namespace.  We enter the name
624*fba7fc7eSJung-uk Kim      * as we go downward in the parse tree.  Any necessary subobjects that
625*fba7fc7eSJung-uk Kim      * involve arguments to the opcode must be created as we go back up the
626*fba7fc7eSJung-uk Kim      * parse tree later.
62753289f6aSNate Lawson      */
62853289f6aSNate Lawson     Status = AcpiNsLookup (WalkState->ScopeInfo, Path, ObjectType,
62953289f6aSNate Lawson                     ACPI_IMODE_LOAD_PASS1, Flags, WalkState, &(Node));
63053289f6aSNate Lawson     if (ACPI_FAILURE (Status))
63153289f6aSNate Lawson     {
63253289f6aSNate Lawson         if (Status == AE_ALREADY_EXISTS)
63353289f6aSNate Lawson         {
63453289f6aSNate Lawson             /* The name already exists in this scope */
63553289f6aSNate Lawson 
63653289f6aSNate Lawson             if (Node->Type == ACPI_TYPE_LOCAL_SCOPE)
63753289f6aSNate Lawson             {
63853289f6aSNate Lawson                 Node->Type = (UINT8) ObjectType;
63953289f6aSNate Lawson                 Status = AE_OK;
64053289f6aSNate Lawson             }
64153289f6aSNate Lawson             else
64253289f6aSNate Lawson             {
643*fba7fc7eSJung-uk Kim                 AslError (ASL_ERROR, ASL_MSG_NAME_EXISTS, Op,
644*fba7fc7eSJung-uk Kim                     Op->Asl.ExternalName);
64553289f6aSNate Lawson                 Status = AE_OK;
64653289f6aSNate Lawson                 goto Exit;
64753289f6aSNate Lawson             }
64853289f6aSNate Lawson         }
64953289f6aSNate Lawson         else
65053289f6aSNate Lawson         {
651*fba7fc7eSJung-uk Kim             AslCoreSubsystemError (Op, Status,
652*fba7fc7eSJung-uk Kim                 "Failure from lookup %s\n", FALSE);
65353289f6aSNate Lawson             goto Exit;
65453289f6aSNate Lawson         }
65553289f6aSNate Lawson     }
65653289f6aSNate Lawson 
65753289f6aSNate Lawson 
65853289f6aSNate Lawson FinishNode:
65953289f6aSNate Lawson     /*
66053289f6aSNate Lawson      * Point the parse node to the new namespace node, and point
66153289f6aSNate Lawson      * the Node back to the original Parse node
66253289f6aSNate Lawson      */
66353289f6aSNate Lawson     Op->Asl.Node = Node;
664*fba7fc7eSJung-uk Kim     Node->Op = Op;
66553289f6aSNate Lawson 
66653289f6aSNate Lawson     /* Set the actual data type if appropriate (EXTERNAL term only) */
66753289f6aSNate Lawson 
66853289f6aSNate Lawson     if (ActualObjectType != ACPI_TYPE_ANY)
66953289f6aSNate Lawson     {
67053289f6aSNate Lawson         Node->Type = (UINT8) ActualObjectType;
671*fba7fc7eSJung-uk Kim         Node->Value = ASL_EXTERNAL_METHOD;
67253289f6aSNate Lawson     }
67353289f6aSNate Lawson 
67453289f6aSNate Lawson     if (Op->Asl.ParseOpcode == PARSEOP_METHOD)
67553289f6aSNate Lawson     {
67653289f6aSNate Lawson         /*
677*fba7fc7eSJung-uk Kim          * Get the method argument count from "Extra" and save
678*fba7fc7eSJung-uk Kim          * it in the namespace node
67953289f6aSNate Lawson          */
680*fba7fc7eSJung-uk Kim         Node->Value = (UINT32) Op->Asl.Extra;
68153289f6aSNate Lawson     }
68253289f6aSNate Lawson 
68353289f6aSNate Lawson Exit:
68453289f6aSNate Lawson     return (Status);
68553289f6aSNate Lawson }
68653289f6aSNate Lawson 
68753289f6aSNate Lawson 
68853289f6aSNate Lawson /*******************************************************************************
68953289f6aSNate Lawson  *
69053289f6aSNate Lawson  * FUNCTION:    LdNamespace1End
69153289f6aSNate Lawson  *
69253289f6aSNate Lawson  * PARAMETERS:  ASL_WALK_CALLBACK
69353289f6aSNate Lawson  *
69453289f6aSNate Lawson  * RETURN:      Status
69553289f6aSNate Lawson  *
69653289f6aSNate Lawson  * DESCRIPTION: Ascending callback used during the loading of the namespace,
69753289f6aSNate Lawson  *              We only need to worry about managing the scope stack here.
69853289f6aSNate Lawson  *
69953289f6aSNate Lawson  ******************************************************************************/
70053289f6aSNate Lawson 
701*fba7fc7eSJung-uk Kim static ACPI_STATUS
70253289f6aSNate Lawson LdNamespace1End (
70353289f6aSNate Lawson     ACPI_PARSE_OBJECT       *Op,
70453289f6aSNate Lawson     UINT32                  Level,
70553289f6aSNate Lawson     void                    *Context)
70653289f6aSNate Lawson {
70753289f6aSNate Lawson     ACPI_WALK_STATE         *WalkState = (ACPI_WALK_STATE *) Context;
70853289f6aSNate Lawson     ACPI_OBJECT_TYPE        ObjectType;
70953289f6aSNate Lawson 
71053289f6aSNate Lawson 
71153289f6aSNate Lawson     ACPI_FUNCTION_NAME ("LdNamespace1End");
71253289f6aSNate Lawson 
71353289f6aSNate Lawson 
71453289f6aSNate Lawson     /* We are only interested in opcodes that have an associated name */
71553289f6aSNate Lawson 
71653289f6aSNate Lawson     if (!Op->Asl.Namepath)
71753289f6aSNate Lawson     {
71853289f6aSNate Lawson         return (AE_OK);
71953289f6aSNate Lawson     }
72053289f6aSNate Lawson 
72153289f6aSNate Lawson     /* Get the type to determine if we should pop the scope */
72253289f6aSNate Lawson 
72353289f6aSNate Lawson     if ((Op->Asl.ParseOpcode == PARSEOP_DEFAULT_ARG) &&
72453289f6aSNate Lawson         (Op->Asl.CompileFlags == NODE_IS_RESOURCE_DESC))
72553289f6aSNate Lawson     {
72653289f6aSNate Lawson         /* TBD: Merge into AcpiDsMapNamedOpcodeToDataType */
72753289f6aSNate Lawson 
72853289f6aSNate Lawson         ObjectType = ACPI_TYPE_LOCAL_RESOURCE;
72953289f6aSNate Lawson     }
73053289f6aSNate Lawson     else
73153289f6aSNate Lawson     {
73253289f6aSNate Lawson         ObjectType = AslMapNamedOpcodeToDataType (Op->Asl.AmlOpcode);
73353289f6aSNate Lawson     }
73453289f6aSNate Lawson 
73553289f6aSNate Lawson     /* Pop the scope stack */
73653289f6aSNate Lawson 
73753289f6aSNate Lawson     if (AcpiNsOpensScope (ObjectType))
73853289f6aSNate Lawson     {
73953289f6aSNate Lawson 
74053289f6aSNate Lawson         ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH,
74153289f6aSNate Lawson             "(%s): Popping scope for Op [%s] %p\n",
74253289f6aSNate Lawson             AcpiUtGetTypeName (ObjectType), Op->Asl.ParseOpName, Op));
74353289f6aSNate Lawson 
744*fba7fc7eSJung-uk Kim         (void) AcpiDsScopeStackPop (WalkState);
74553289f6aSNate Lawson     }
74653289f6aSNate Lawson 
74753289f6aSNate Lawson     return (AE_OK);
74853289f6aSNate Lawson }
74953289f6aSNate Lawson 
75053289f6aSNate Lawson 
751