1 /******************************************************************************
3 * Module Name: dswload - Dispatcher namespace load callbacks
5 *****************************************************************************/
8 * Copyright (C) 2000 - 2014, Intel Corp.
11 * Redistribution and use in source and binary forms, with or without
12 * modification, are permitted provided that the following conditions
14 * 1. Redistributions of source code must retain the above copyright
15 * notice, this list of conditions, and the following disclaimer,
16 * without modification.
17 * 2. Redistributions in binary form must reproduce at minimum a disclaimer
18 * substantially similar to the "NO WARRANTY" disclaimer below
19 * ("Disclaimer") and any redistribution must be conditioned upon
20 * including a substantially similar Disclaimer requirement for further
21 * binary redistribution.
22 * 3. Neither the names of the above-listed copyright holders nor the names
23 * of any contributors may be used to endorse or promote products derived
24 * from this software without specific prior written permission.
26 * Alternatively, this software may be distributed under the terms of the
27 * GNU General Public License ("GPL") version 2 as published by the Free
28 * Software Foundation.
31 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
32 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
33 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
34 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
35 * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
36 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
37 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
38 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
39 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
40 * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
41 * POSSIBILITY OF SUCH DAMAGES.
46 #include <contrib/dev/acpica/compiler/aslcompiler.h>
47 #include <contrib/dev/acpica/include/amlcode.h>
48 #include <contrib/dev/acpica/include/acdispat.h>
49 #include <contrib/dev/acpica/include/acnamesp.h>
51 #include "aslcompiler.y.h"
53 #define _COMPONENT ACPI_COMPILER
54 ACPI_MODULE_NAME ("aslload")
56 /* Local prototypes */
60 ACPI_PARSE_OBJECT *Op,
61 ACPI_WALK_STATE *WalkState);
64 LdLoadResourceElements (
65 ACPI_PARSE_OBJECT *Op,
66 ACPI_WALK_STATE *WalkState);
70 ACPI_PARSE_OBJECT *Op,
76 ACPI_PARSE_OBJECT *Op,
81 LdCommonNamespaceEnd (
82 ACPI_PARSE_OBJECT *Op,
87 /*******************************************************************************
89 * FUNCTION: LdLoadNamespace
91 * PARAMETERS: RootOp - Root of the parse tree
95 * DESCRIPTION: Perform a walk of the parse tree that in turn loads all of the
96 * named ASL/AML objects into the namespace. The namespace is
97 * constructed in order to resolve named references and references
98 * to named fields within resource templates/descriptors.
100 ******************************************************************************/
104 ACPI_PARSE_OBJECT *RootOp)
106 ACPI_WALK_STATE *WalkState;
109 DbgPrint (ASL_DEBUG_OUTPUT, "\nCreating namespace\n\n");
111 /* Create a new walk state */
113 WalkState = AcpiDsCreateWalkState (0, NULL, NULL, NULL);
116 return (AE_NO_MEMORY);
119 /* Walk the entire parse tree, first pass */
121 TrWalkParseTree (RootOp, ASL_WALK_VISIT_TWICE, LdNamespace1Begin,
122 LdCommonNamespaceEnd, WalkState);
124 /* Second pass to handle forward references */
126 TrWalkParseTree (RootOp, ASL_WALK_VISIT_TWICE, LdNamespace2Begin,
127 LdCommonNamespaceEnd, WalkState);
129 /* Dump the namespace if debug is enabled */
131 AcpiNsDumpTables (ACPI_NS_ALL, ACPI_UINT32_MAX);
132 ACPI_FREE (WalkState);
137 /*******************************************************************************
139 * FUNCTION: LdLoadFieldElements
141 * PARAMETERS: Op - Parent node (Field)
142 * WalkState - Current walk state
146 * DESCRIPTION: Enter the named elements of the field (children of the parent)
147 * into the namespace.
149 ******************************************************************************/
152 LdLoadFieldElements (
153 ACPI_PARSE_OBJECT *Op,
154 ACPI_WALK_STATE *WalkState)
156 ACPI_PARSE_OBJECT *Child = NULL;
157 ACPI_NAMESPACE_NODE *Node;
161 /* Get the first named field element */
163 switch (Op->Asl.AmlOpcode)
165 case AML_BANK_FIELD_OP:
167 Child = UtGetArg (Op, 6);
170 case AML_INDEX_FIELD_OP:
172 Child = UtGetArg (Op, 5);
177 Child = UtGetArg (Op, 4);
182 /* No other opcodes should arrive here */
184 return (AE_BAD_PARAMETER);
187 /* Enter all elements into the namespace */
191 switch (Child->Asl.AmlOpcode)
193 case AML_INT_RESERVEDFIELD_OP:
194 case AML_INT_ACCESSFIELD_OP:
195 case AML_INT_CONNECTION_OP:
200 Status = AcpiNsLookup (WalkState->ScopeInfo,
201 Child->Asl.Value.String,
202 ACPI_TYPE_LOCAL_REGION_FIELD,
203 ACPI_IMODE_LOAD_PASS1,
204 ACPI_NS_NO_UPSEARCH | ACPI_NS_DONT_OPEN_SCOPE |
205 ACPI_NS_ERROR_IF_FOUND,
207 if (ACPI_FAILURE (Status))
209 if (Status != AE_ALREADY_EXISTS)
211 AslError (ASL_ERROR, ASL_MSG_CORE_EXCEPTION, Child,
212 Child->Asl.Value.String);
217 * The name already exists in this scope
218 * But continue processing the elements
220 AslError (ASL_ERROR, ASL_MSG_NAME_EXISTS, Child,
221 Child->Asl.Value.String);
225 Child->Asl.Node = Node;
231 Child = Child->Asl.Next;
238 /*******************************************************************************
240 * FUNCTION: LdLoadResourceElements
242 * PARAMETERS: Op - Parent node (Resource Descriptor)
243 * WalkState - Current walk state
247 * DESCRIPTION: Enter the named elements of the resource descriptor (children
248 * of the parent) into the namespace.
250 * NOTE: In the real AML namespace, these named elements never exist. But
251 * we simply use the namespace here as a symbol table so we can look
252 * them up as they are referenced.
254 ******************************************************************************/
257 LdLoadResourceElements (
258 ACPI_PARSE_OBJECT *Op,
259 ACPI_WALK_STATE *WalkState)
261 ACPI_PARSE_OBJECT *InitializerOp = NULL;
262 ACPI_NAMESPACE_NODE *Node;
267 * Enter the resource name into the namespace. Name must not already exist.
268 * This opens a scope, so later field names are guaranteed to be new/unique.
270 Status = AcpiNsLookup (WalkState->ScopeInfo, Op->Asl.Namepath,
271 ACPI_TYPE_LOCAL_RESOURCE, ACPI_IMODE_LOAD_PASS1,
272 ACPI_NS_NO_UPSEARCH | ACPI_NS_ERROR_IF_FOUND,
274 if (ACPI_FAILURE (Status))
276 if (Status == AE_ALREADY_EXISTS)
278 /* Actual node causing the error was saved in ParentMethod */
280 AslError (ASL_ERROR, ASL_MSG_NAME_EXISTS,
281 (ACPI_PARSE_OBJECT *) Op->Asl.ParentMethod, Op->Asl.Namepath);
287 Node->Value = (UINT32) Op->Asl.Value.Integer;
292 * Now enter the predefined fields, for easy lookup when referenced
295 InitializerOp = ASL_GET_CHILD_NODE (Op);
296 while (InitializerOp)
298 if (InitializerOp->Asl.ExternalName)
300 Status = AcpiNsLookup (WalkState->ScopeInfo,
301 InitializerOp->Asl.ExternalName,
302 ACPI_TYPE_LOCAL_RESOURCE_FIELD,
303 ACPI_IMODE_LOAD_PASS1,
304 ACPI_NS_NO_UPSEARCH | ACPI_NS_DONT_OPEN_SCOPE,
306 if (ACPI_FAILURE (Status))
312 * Store the field offset and length in the namespace node
313 * so it can be used when the field is referenced
315 Node->Value = InitializerOp->Asl.Value.Tag.BitOffset;
316 Node->Length = InitializerOp->Asl.Value.Tag.BitLength;
317 InitializerOp->Asl.Node = Node;
318 Node->Op = InitializerOp;
321 InitializerOp = ASL_GET_PEER_NODE (InitializerOp);
328 /*******************************************************************************
330 * FUNCTION: LdNamespace1Begin
332 * PARAMETERS: ASL_WALK_CALLBACK
336 * DESCRIPTION: Descending callback used during the parse tree walk. If this
337 * is a named AML opcode, enter into the namespace
339 ******************************************************************************/
343 ACPI_PARSE_OBJECT *Op,
347 ACPI_WALK_STATE *WalkState = (ACPI_WALK_STATE *) Context;
348 ACPI_NAMESPACE_NODE *Node;
350 ACPI_OBJECT_TYPE ObjectType;
351 ACPI_OBJECT_TYPE ActualObjectType = ACPI_TYPE_ANY;
353 UINT32 Flags = ACPI_NS_NO_UPSEARCH;
354 ACPI_PARSE_OBJECT *Arg;
356 BOOLEAN ForceNewScope = FALSE;
359 ACPI_FUNCTION_NAME (LdNamespace1Begin);
360 ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, "Op %p [%s]\n",
361 Op, Op->Asl.ParseOpName));
364 * We are only interested in opcodes that have an associated name
365 * (or multiple names)
367 switch (Op->Asl.AmlOpcode)
369 case AML_BANK_FIELD_OP:
370 case AML_INDEX_FIELD_OP:
373 Status = LdLoadFieldElements (Op, WalkState);
376 case AML_INT_CONNECTION_OP:
379 if (Op->Asl.Child->Asl.AmlOpcode != AML_INT_NAMEPATH_OP)
385 Status = AcpiNsLookup (WalkState->ScopeInfo, Arg->Asl.ExternalName,
386 ACPI_TYPE_ANY, ACPI_IMODE_EXECUTE, ACPI_NS_SEARCH_PARENT,
388 if (ACPI_FAILURE (Status))
393 if (Node->Type == ACPI_TYPE_BUFFER)
395 Arg->Asl.Node = Node;
397 Arg = Node->Op->Asl.Child; /* Get namepath */
398 Arg = Arg->Asl.Next; /* Get actual buffer */
399 Arg = Arg->Asl.Child; /* Buffer length */
400 Arg = Arg->Asl.Next; /* RAW_DATA buffer */
406 /* All other opcodes go below */
411 /* Check if this object has already been installed in the namespace */
418 Path = Op->Asl.Namepath;
424 /* Map the raw opcode into an internal object type */
426 switch (Op->Asl.ParseOpcode)
430 Arg = Op->Asl.Child; /* Get the NameSeg/NameString node */
431 Arg = Arg->Asl.Next; /* First peer is the object to be associated with the name */
434 * If this name refers to a ResourceTemplate, we will need to open
435 * a new scope so that the resource subfield names can be entered into
436 * the namespace underneath this name
438 if (Op->Asl.CompileFlags & NODE_IS_RESOURCE_DESC)
440 ForceNewScope = TRUE;
443 /* Get the data type associated with the named object, not the name itself */
445 /* Log2 loop to convert from Btype (binary) to Etype (encoded) */
448 for (i = 1; i < Arg->Asl.AcpiBtype; i *= 2)
455 case PARSEOP_EXTERNAL:
457 * "External" simply enters a name and type into the namespace.
458 * We must be careful to not open a new scope, however, no matter
459 * what type the external name refers to (e.g., a method)
461 * first child is name, next child is ObjectType
463 ActualObjectType = (UINT8) Op->Asl.Child->Asl.Next->Asl.Value.Integer;
464 ObjectType = ACPI_TYPE_ANY;
467 * We will mark every new node along the path as "External". This
468 * allows some or all of the nodes to be created later in the ASL
469 * code. Handles cases like this:
471 * External (\_SB_.PCI0.ABCD, IntObj)
480 * Store (\_SB_.PCI0.ABCD, Local0)
483 Flags |= ACPI_NS_EXTERNAL;
486 case PARSEOP_DEFAULT_ARG:
488 if (Op->Asl.CompileFlags == NODE_IS_RESOURCE_DESC)
490 Status = LdLoadResourceElements (Op, WalkState);
491 return_ACPI_STATUS (Status);
494 ObjectType = AslMapNamedOpcodeToDataType (Op->Asl.AmlOpcode);
499 * The name referenced by Scope(Name) must already exist at this point.
500 * In other words, forward references for Scope() are not supported.
501 * The only real reason for this is that the MS interpreter cannot
502 * handle this case. Perhaps someday this case can go away.
504 Status = AcpiNsLookup (WalkState->ScopeInfo, Path, ACPI_TYPE_ANY,
505 ACPI_IMODE_EXECUTE, ACPI_NS_SEARCH_PARENT,
507 if (ACPI_FAILURE (Status))
509 if (Status == AE_NOT_FOUND)
511 /* The name was not found, go ahead and create it */
513 Status = AcpiNsLookup (WalkState->ScopeInfo, Path,
514 ACPI_TYPE_LOCAL_SCOPE,
515 ACPI_IMODE_LOAD_PASS1, Flags,
517 if (ACPI_FAILURE (Status))
519 return_ACPI_STATUS (Status);
523 * However, this is an error -- primarily because the MS
524 * interpreter can't handle a forward reference from the
527 AslError (ASL_ERROR, ASL_MSG_NOT_FOUND, Op,
528 Op->Asl.ExternalName);
529 AslError (ASL_ERROR, ASL_MSG_SCOPE_FWD_REF, Op,
530 Op->Asl.ExternalName);
534 AslCoreSubsystemError (Op, Status,
535 "Failure from namespace lookup", FALSE);
537 return_ACPI_STATUS (Status);
540 /* We found a node with this name, now check the type */
544 case ACPI_TYPE_LOCAL_SCOPE:
545 case ACPI_TYPE_DEVICE:
546 case ACPI_TYPE_POWER:
547 case ACPI_TYPE_PROCESSOR:
548 case ACPI_TYPE_THERMAL:
550 /* These are acceptable types - they all open a new scope */
553 case ACPI_TYPE_INTEGER:
554 case ACPI_TYPE_STRING:
555 case ACPI_TYPE_BUFFER:
557 * These types we will allow, but we will change the type.
558 * This enables some existing code of the form:
561 * Scope (DEB) { ... }
563 * Which is used to workaround the fact that the MS interpreter
564 * does not allow Scope() forward references.
566 sprintf (MsgBuffer, "%s [%s], changing type to [Scope]",
567 Op->Asl.ExternalName, AcpiUtGetTypeName (Node->Type));
568 AslError (ASL_REMARK, ASL_MSG_SCOPE_TYPE, Op, MsgBuffer);
570 /* Switch the type to scope, open the new scope */
572 Node->Type = ACPI_TYPE_LOCAL_SCOPE;
573 Status = AcpiDsScopeStackPush (Node, ACPI_TYPE_LOCAL_SCOPE,
575 if (ACPI_FAILURE (Status))
577 return_ACPI_STATUS (Status);
583 /* All other types are an error */
585 sprintf (MsgBuffer, "%s [%s]", Op->Asl.ExternalName,
586 AcpiUtGetTypeName (Node->Type));
587 AslError (ASL_ERROR, ASL_MSG_SCOPE_TYPE, Op, MsgBuffer);
590 * However, switch the type to be an actual scope so
591 * that compilation can continue without generating a whole
592 * cascade of additional errors. Open the new scope.
594 Node->Type = ACPI_TYPE_LOCAL_SCOPE;
595 Status = AcpiDsScopeStackPush (Node, ACPI_TYPE_LOCAL_SCOPE,
597 if (ACPI_FAILURE (Status))
599 return_ACPI_STATUS (Status);
610 ObjectType = AslMapNamedOpcodeToDataType (Op->Asl.AmlOpcode);
615 ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, "Loading name: %s, (%s)\n",
616 Op->Asl.ExternalName, AcpiUtGetTypeName (ObjectType)));
618 /* The name must not already exist */
620 Flags |= ACPI_NS_ERROR_IF_FOUND;
623 * Enter the named type into the internal namespace. We enter the name
624 * as we go downward in the parse tree. Any necessary subobjects that
625 * involve arguments to the opcode must be created as we go back up the
628 Status = AcpiNsLookup (WalkState->ScopeInfo, Path, ObjectType,
629 ACPI_IMODE_LOAD_PASS1, Flags, WalkState, &Node);
630 if (ACPI_FAILURE (Status))
632 if (Status == AE_ALREADY_EXISTS)
634 /* The name already exists in this scope */
636 if (Node->Type == ACPI_TYPE_LOCAL_SCOPE)
638 /* Allow multiple references to the same scope */
640 Node->Type = (UINT8) ObjectType;
643 else if ((Node->Flags & ANOBJ_IS_EXTERNAL) &&
644 (Op->Asl.ParseOpcode != PARSEOP_EXTERNAL))
647 * Allow one create on an object or segment that was
648 * previously declared External
650 Node->Flags &= ~ANOBJ_IS_EXTERNAL;
651 Node->Type = (UINT8) ObjectType;
653 /* Just retyped a node, probably will need to open a scope */
655 if (AcpiNsOpensScope (ObjectType))
657 Status = AcpiDsScopeStackPush (Node, ObjectType, WalkState);
658 if (ACPI_FAILURE (Status))
660 return_ACPI_STATUS (Status);
667 /* Valid error, object already exists */
669 AslError (ASL_ERROR, ASL_MSG_NAME_EXISTS, Op,
670 Op->Asl.ExternalName);
671 return_ACPI_STATUS (AE_OK);
676 AslCoreSubsystemError (Op, Status,
677 "Failure from namespace lookup", FALSE);
678 return_ACPI_STATUS (Status);
684 Status = AcpiDsScopeStackPush (Node, ObjectType, WalkState);
685 if (ACPI_FAILURE (Status))
687 return_ACPI_STATUS (Status);
693 * Point the parse node to the new namespace node, and point
694 * the Node back to the original Parse node
699 /* Set the actual data type if appropriate (EXTERNAL term only) */
701 if (ActualObjectType != ACPI_TYPE_ANY)
703 Node->Type = (UINT8) ActualObjectType;
704 Node->Value = ASL_EXTERNAL_METHOD;
707 if (Op->Asl.ParseOpcode == PARSEOP_METHOD)
710 * Get the method argument count from "Extra" and save
711 * it in the namespace node
713 Node->Value = (UINT32) Op->Asl.Extra;
716 return_ACPI_STATUS (Status);
720 /*******************************************************************************
722 * FUNCTION: LdNamespace2Begin
724 * PARAMETERS: ASL_WALK_CALLBACK
728 * DESCRIPTION: Descending callback used during the pass 2 parse tree walk.
729 * Second pass resolves some forward references.
732 * Currently only needs to handle the Alias operator.
733 * Could be used to allow forward references from the Scope() operator, but
734 * the MS interpreter does not allow this, so this compiler does not either.
736 ******************************************************************************/
740 ACPI_PARSE_OBJECT *Op,
744 ACPI_WALK_STATE *WalkState = (ACPI_WALK_STATE *) Context;
746 ACPI_NAMESPACE_NODE *Node;
747 ACPI_OBJECT_TYPE ObjectType;
748 BOOLEAN ForceNewScope = FALSE;
749 ACPI_PARSE_OBJECT *Arg;
751 ACPI_NAMESPACE_NODE *TargetNode;
754 ACPI_FUNCTION_NAME (LdNamespace2Begin);
755 ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, "Op %p [%s]\n",
756 Op, Op->Asl.ParseOpName));
759 /* Ignore Ops with no namespace node */
767 /* Get the type to determine if we should push the scope */
769 if ((Op->Asl.ParseOpcode == PARSEOP_DEFAULT_ARG) &&
770 (Op->Asl.CompileFlags == NODE_IS_RESOURCE_DESC))
772 ObjectType = ACPI_TYPE_LOCAL_RESOURCE;
776 ObjectType = AslMapNamedOpcodeToDataType (Op->Asl.AmlOpcode);
779 /* Push scope for Resource Templates */
781 if (Op->Asl.ParseOpcode == PARSEOP_NAME)
783 if (Op->Asl.CompileFlags & NODE_IS_RESOURCE_DESC)
785 ForceNewScope = TRUE;
789 /* Push the scope stack */
791 if (ForceNewScope || AcpiNsOpensScope (ObjectType))
793 Status = AcpiDsScopeStackPush (Node, ObjectType, WalkState);
794 if (ACPI_FAILURE (Status))
796 return_ACPI_STATUS (Status);
800 if (Op->Asl.ParseOpcode == PARSEOP_ALIAS)
802 /* Complete the alias node by getting and saving the target node */
804 /* First child is the alias target */
808 /* Get the target pathname */
810 Path = Arg->Asl.Namepath;
813 Status = UtInternalizeName (Arg->Asl.ExternalName, &Path);
814 if (ACPI_FAILURE (Status))
820 /* Get the NS node associated with the target. It must exist. */
822 Status = AcpiNsLookup (WalkState->ScopeInfo, Path, ACPI_TYPE_ANY,
823 ACPI_IMODE_EXECUTE, ACPI_NS_SEARCH_PARENT | ACPI_NS_DONT_OPEN_SCOPE,
824 WalkState, &TargetNode);
825 if (ACPI_FAILURE (Status))
827 if (Status == AE_NOT_FOUND)
829 AslError (ASL_ERROR, ASL_MSG_NOT_FOUND, Op,
830 Op->Asl.ExternalName);
833 * The name was not found, go ahead and create it.
834 * This prevents more errors later.
836 Status = AcpiNsLookup (WalkState->ScopeInfo, Path,
838 ACPI_IMODE_LOAD_PASS1, ACPI_NS_NO_UPSEARCH,
843 AslCoreSubsystemError (Op, Status,
844 "Failure from namespace lookup", FALSE);
848 /* Save the target node within the alias node */
850 Node->Object = ACPI_CAST_PTR (ACPI_OPERAND_OBJECT, TargetNode);
857 /*******************************************************************************
859 * FUNCTION: LdCommonNamespaceEnd
861 * PARAMETERS: ASL_WALK_CALLBACK
865 * DESCRIPTION: Ascending callback used during the loading of the namespace,
866 * We only need to worry about managing the scope stack here.
868 ******************************************************************************/
871 LdCommonNamespaceEnd (
872 ACPI_PARSE_OBJECT *Op,
876 ACPI_WALK_STATE *WalkState = (ACPI_WALK_STATE *) Context;
877 ACPI_OBJECT_TYPE ObjectType;
878 BOOLEAN ForceNewScope = FALSE;
881 ACPI_FUNCTION_NAME (LdCommonNamespaceEnd);
884 /* We are only interested in opcodes that have an associated name */
886 if (!Op->Asl.Namepath)
891 /* Get the type to determine if we should pop the scope */
893 if ((Op->Asl.ParseOpcode == PARSEOP_DEFAULT_ARG) &&
894 (Op->Asl.CompileFlags == NODE_IS_RESOURCE_DESC))
896 /* TBD: Merge into AcpiDsMapNamedOpcodeToDataType */
898 ObjectType = ACPI_TYPE_LOCAL_RESOURCE;
902 ObjectType = AslMapNamedOpcodeToDataType (Op->Asl.AmlOpcode);
905 /* Pop scope that was pushed for Resource Templates */
907 if (Op->Asl.ParseOpcode == PARSEOP_NAME)
909 if (Op->Asl.CompileFlags & NODE_IS_RESOURCE_DESC)
911 ForceNewScope = TRUE;
915 /* Pop the scope stack */
917 if (ForceNewScope || AcpiNsOpensScope (ObjectType))
919 ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH,
920 "(%s): Popping scope for Op [%s] %p\n",
921 AcpiUtGetTypeName (ObjectType), Op->Asl.ParseOpName, Op));
923 (void) AcpiDsScopeStackPop (WalkState);