153289f6aSNate Lawson /****************************************************************************** 253289f6aSNate Lawson * 353289f6aSNate Lawson * Module Name: asllookup- Namespace lookup 4fba7fc7eSJung-uk Kim * $Revision: 1.95 $ 553289f6aSNate Lawson * 653289f6aSNate Lawson *****************************************************************************/ 753289f6aSNate Lawson 853289f6aSNate Lawson /****************************************************************************** 953289f6aSNate Lawson * 1053289f6aSNate Lawson * 1. Copyright Notice 1153289f6aSNate Lawson * 12fba7fc7eSJung-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 118fba7fc7eSJung-uk Kim #include <contrib/dev/acpica/compiler/aslcompiler.h> 11953289f6aSNate Lawson #include "aslcompiler.y.h" 12053289f6aSNate Lawson 121fba7fc7eSJung-uk Kim #include <contrib/dev/acpica/acparser.h> 122fba7fc7eSJung-uk Kim #include <contrib/dev/acpica/amlcode.h> 123fba7fc7eSJung-uk Kim #include <contrib/dev/acpica/acnamesp.h> 124fba7fc7eSJung-uk Kim #include <contrib/dev/acpica/acdispat.h> 12553289f6aSNate Lawson 12653289f6aSNate Lawson 12753289f6aSNate Lawson #define _COMPONENT ACPI_COMPILER 12853289f6aSNate Lawson ACPI_MODULE_NAME ("asllookup") 12953289f6aSNate Lawson 130fba7fc7eSJung-uk Kim /* Local prototypes */ 131fba7fc7eSJung-uk Kim 132fba7fc7eSJung-uk Kim static ACPI_STATUS 133fba7fc7eSJung-uk Kim LsCompareOneNamespaceObject ( 134fba7fc7eSJung-uk Kim ACPI_HANDLE ObjHandle, 135fba7fc7eSJung-uk Kim UINT32 Level, 136fba7fc7eSJung-uk Kim void *Context, 137fba7fc7eSJung-uk Kim void **ReturnValue); 138fba7fc7eSJung-uk Kim 139fba7fc7eSJung-uk Kim static ACPI_STATUS 140fba7fc7eSJung-uk Kim LsDoOneNamespaceObject ( 141fba7fc7eSJung-uk Kim ACPI_HANDLE ObjHandle, 142fba7fc7eSJung-uk Kim UINT32 Level, 143fba7fc7eSJung-uk Kim void *Context, 144fba7fc7eSJung-uk Kim void **ReturnValue); 145fba7fc7eSJung-uk Kim 146fba7fc7eSJung-uk Kim static BOOLEAN 147fba7fc7eSJung-uk Kim LkObjectExists ( 148fba7fc7eSJung-uk Kim char *Name); 149fba7fc7eSJung-uk Kim 150fba7fc7eSJung-uk Kim static void 151fba7fc7eSJung-uk Kim LkCheckFieldRange ( 152fba7fc7eSJung-uk Kim ACPI_PARSE_OBJECT *Op, 153fba7fc7eSJung-uk Kim UINT32 RegionBitLength, 154fba7fc7eSJung-uk Kim UINT32 FieldBitOffset, 155fba7fc7eSJung-uk Kim UINT32 FieldBitLength, 156fba7fc7eSJung-uk Kim UINT32 AccessBitWidth); 157fba7fc7eSJung-uk Kim 158fba7fc7eSJung-uk Kim static ACPI_STATUS 159fba7fc7eSJung-uk Kim LkNamespaceLocateBegin ( 160fba7fc7eSJung-uk Kim ACPI_PARSE_OBJECT *Op, 161fba7fc7eSJung-uk Kim UINT32 Level, 162fba7fc7eSJung-uk Kim void *Context); 163fba7fc7eSJung-uk Kim 164fba7fc7eSJung-uk Kim static ACPI_STATUS 165fba7fc7eSJung-uk Kim LkNamespaceLocateEnd ( 166fba7fc7eSJung-uk Kim ACPI_PARSE_OBJECT *Op, 167fba7fc7eSJung-uk Kim UINT32 Level, 168fba7fc7eSJung-uk Kim void *Context); 169fba7fc7eSJung-uk Kim 17053289f6aSNate Lawson 17153289f6aSNate Lawson /******************************************************************************* 17253289f6aSNate Lawson * 17353289f6aSNate Lawson * FUNCTION: LsDoOneNamespaceObject 17453289f6aSNate Lawson * 17553289f6aSNate Lawson * PARAMETERS: ACPI_WALK_CALLBACK 17653289f6aSNate Lawson * 17753289f6aSNate Lawson * RETURN: Status 17853289f6aSNate Lawson * 17953289f6aSNate Lawson * DESCRIPTION: Dump a namespace object to the namespace output file. 18053289f6aSNate Lawson * Called during the walk of the namespace to dump all objects. 18153289f6aSNate Lawson * 18253289f6aSNate Lawson ******************************************************************************/ 18353289f6aSNate Lawson 184fba7fc7eSJung-uk Kim static ACPI_STATUS 18553289f6aSNate Lawson LsDoOneNamespaceObject ( 18653289f6aSNate Lawson ACPI_HANDLE ObjHandle, 18753289f6aSNate Lawson UINT32 Level, 18853289f6aSNate Lawson void *Context, 18953289f6aSNate Lawson void **ReturnValue) 19053289f6aSNate Lawson { 19153289f6aSNate Lawson ACPI_NAMESPACE_NODE *Node = (ACPI_NAMESPACE_NODE *) ObjHandle; 192fba7fc7eSJung-uk Kim ACPI_OPERAND_OBJECT *ObjDesc; 19353289f6aSNate Lawson ACPI_PARSE_OBJECT *Op; 19453289f6aSNate Lawson 19553289f6aSNate Lawson 19653289f6aSNate Lawson Gbl_NumNamespaceObjects++; 19753289f6aSNate Lawson 19853289f6aSNate Lawson FlPrintFile (ASL_FILE_NAMESPACE_OUTPUT, "%5d [%d] %*s %4.4s - %s", 19953289f6aSNate Lawson Gbl_NumNamespaceObjects, Level, (Level * 3), " ", 20053289f6aSNate Lawson &Node->Name, 20153289f6aSNate Lawson AcpiUtGetTypeName (Node->Type)); 20253289f6aSNate Lawson 203fba7fc7eSJung-uk Kim Op = Node->Op; 204fba7fc7eSJung-uk Kim ObjDesc = ACPI_CAST_PTR (ACPI_OPERAND_OBJECT, Node->Object); 20553289f6aSNate Lawson 206fba7fc7eSJung-uk Kim if (!Op) 20753289f6aSNate Lawson { 208fba7fc7eSJung-uk Kim FlPrintFile (ASL_FILE_NAMESPACE_OUTPUT, "\n"); 209fba7fc7eSJung-uk Kim return (AE_OK); 21053289f6aSNate Lawson } 21153289f6aSNate Lawson 212fba7fc7eSJung-uk Kim 213fba7fc7eSJung-uk Kim if ((ObjDesc) && 214fba7fc7eSJung-uk Kim (ObjDesc->Common.Descriptor == ACPI_DESC_TYPE_OPERAND)) 215fba7fc7eSJung-uk Kim { 21653289f6aSNate Lawson switch (Node->Type) 21753289f6aSNate Lawson { 21853289f6aSNate Lawson case ACPI_TYPE_INTEGER: 21953289f6aSNate Lawson 220fba7fc7eSJung-uk Kim FlPrintFile (ASL_FILE_NAMESPACE_OUTPUT, 221fba7fc7eSJung-uk Kim " [Initial Value 0x%8.8X%8.8X]", 222fba7fc7eSJung-uk Kim ACPI_FORMAT_UINT64 (ObjDesc->Integer.Value)); 22353289f6aSNate Lawson break; 22453289f6aSNate Lawson 22553289f6aSNate Lawson 22653289f6aSNate Lawson case ACPI_TYPE_STRING: 22753289f6aSNate Lawson 228fba7fc7eSJung-uk Kim FlPrintFile (ASL_FILE_NAMESPACE_OUTPUT, 229fba7fc7eSJung-uk Kim " [Initial Value \"%s\"]", 230fba7fc7eSJung-uk Kim ObjDesc->String.Pointer); 231fba7fc7eSJung-uk Kim break; 232fba7fc7eSJung-uk Kim 233fba7fc7eSJung-uk Kim default: 234fba7fc7eSJung-uk Kim /* Nothing to do for other types */ 235fba7fc7eSJung-uk Kim break; 236fba7fc7eSJung-uk Kim } 237fba7fc7eSJung-uk Kim 238fba7fc7eSJung-uk Kim } 239fba7fc7eSJung-uk Kim else 240fba7fc7eSJung-uk Kim { 241fba7fc7eSJung-uk Kim switch (Node->Type) 242fba7fc7eSJung-uk Kim { 243fba7fc7eSJung-uk Kim case ACPI_TYPE_INTEGER: 244fba7fc7eSJung-uk Kim 245fba7fc7eSJung-uk Kim if (Op->Asl.ParseOpcode == PARSEOP_NAME) 246fba7fc7eSJung-uk Kim { 247fba7fc7eSJung-uk Kim Op = Op->Asl.Child; 248fba7fc7eSJung-uk Kim } 24953289f6aSNate Lawson if ((Op->Asl.ParseOpcode == PARSEOP_NAMESEG) || 25053289f6aSNate Lawson (Op->Asl.ParseOpcode == PARSEOP_NAMESTRING)) 25153289f6aSNate Lawson { 25253289f6aSNate Lawson Op = Op->Asl.Next; 25353289f6aSNate Lawson } 254fba7fc7eSJung-uk Kim FlPrintFile (ASL_FILE_NAMESPACE_OUTPUT, 255fba7fc7eSJung-uk Kim " [Initial Value 0x%8.8X%8.8X]", 256fba7fc7eSJung-uk Kim ACPI_FORMAT_UINT64 (Op->Asl.Value.Integer)); 257fba7fc7eSJung-uk Kim break; 25853289f6aSNate Lawson 259fba7fc7eSJung-uk Kim 260fba7fc7eSJung-uk Kim case ACPI_TYPE_STRING: 261fba7fc7eSJung-uk Kim 262fba7fc7eSJung-uk Kim if (Op->Asl.ParseOpcode == PARSEOP_NAME) 263fba7fc7eSJung-uk Kim { 264fba7fc7eSJung-uk Kim Op = Op->Asl.Child; 265fba7fc7eSJung-uk Kim } 266fba7fc7eSJung-uk Kim if ((Op->Asl.ParseOpcode == PARSEOP_NAMESEG) || 267fba7fc7eSJung-uk Kim (Op->Asl.ParseOpcode == PARSEOP_NAMESTRING)) 268fba7fc7eSJung-uk Kim { 269fba7fc7eSJung-uk Kim Op = Op->Asl.Next; 270fba7fc7eSJung-uk Kim } 271fba7fc7eSJung-uk Kim FlPrintFile (ASL_FILE_NAMESPACE_OUTPUT, 272fba7fc7eSJung-uk Kim " [Initial Value \"%s\"]", 27353289f6aSNate Lawson Op->Asl.Value.String); 27453289f6aSNate Lawson break; 27553289f6aSNate Lawson 27653289f6aSNate Lawson 27753289f6aSNate Lawson case ACPI_TYPE_LOCAL_REGION_FIELD: 27853289f6aSNate Lawson 27953289f6aSNate Lawson if ((Op->Asl.ParseOpcode == PARSEOP_NAMESEG) || 28053289f6aSNate Lawson (Op->Asl.ParseOpcode == PARSEOP_NAMESTRING)) 28153289f6aSNate Lawson { 28253289f6aSNate Lawson Op = Op->Asl.Child; 28353289f6aSNate Lawson } 284fba7fc7eSJung-uk Kim FlPrintFile (ASL_FILE_NAMESPACE_OUTPUT, 285fba7fc7eSJung-uk Kim " [Offset 0x%04X Length 0x%04X bits]", 28653289f6aSNate Lawson Op->Asl.Parent->Asl.ExtraValue, (UINT32) Op->Asl.Value.Integer); 28753289f6aSNate Lawson break; 28853289f6aSNate Lawson 28953289f6aSNate Lawson 290fba7fc7eSJung-uk Kim case ACPI_TYPE_BUFFER_FIELD: 291fba7fc7eSJung-uk Kim 292fba7fc7eSJung-uk Kim switch (Op->Asl.ParseOpcode) 293fba7fc7eSJung-uk Kim { 294fba7fc7eSJung-uk Kim case PARSEOP_CREATEBYTEFIELD: 295fba7fc7eSJung-uk Kim FlPrintFile (ASL_FILE_NAMESPACE_OUTPUT, " [BYTE ( 8 bit)]"); 296fba7fc7eSJung-uk Kim break; 297fba7fc7eSJung-uk Kim 298fba7fc7eSJung-uk Kim case PARSEOP_CREATEDWORDFIELD: 299fba7fc7eSJung-uk Kim FlPrintFile (ASL_FILE_NAMESPACE_OUTPUT, " [DWORD (32 bit)]"); 300fba7fc7eSJung-uk Kim break; 301fba7fc7eSJung-uk Kim 302fba7fc7eSJung-uk Kim case PARSEOP_CREATEQWORDFIELD: 303fba7fc7eSJung-uk Kim FlPrintFile (ASL_FILE_NAMESPACE_OUTPUT, " [QWORD (64 bit)]"); 304fba7fc7eSJung-uk Kim break; 305fba7fc7eSJung-uk Kim 306fba7fc7eSJung-uk Kim case PARSEOP_CREATEWORDFIELD: 307fba7fc7eSJung-uk Kim FlPrintFile (ASL_FILE_NAMESPACE_OUTPUT, " [WORD (16 bit)]"); 308fba7fc7eSJung-uk Kim break; 309fba7fc7eSJung-uk Kim 310fba7fc7eSJung-uk Kim case PARSEOP_CREATEBITFIELD: 311fba7fc7eSJung-uk Kim FlPrintFile (ASL_FILE_NAMESPACE_OUTPUT, " [BIT ( 1 bit)]"); 312fba7fc7eSJung-uk Kim break; 313fba7fc7eSJung-uk Kim 314fba7fc7eSJung-uk Kim case PARSEOP_CREATEFIELD: 315fba7fc7eSJung-uk Kim FlPrintFile (ASL_FILE_NAMESPACE_OUTPUT, " [Arbitrary Bit Field]"); 316fba7fc7eSJung-uk Kim break; 317fba7fc7eSJung-uk Kim 318fba7fc7eSJung-uk Kim default: 319fba7fc7eSJung-uk Kim break; 320fba7fc7eSJung-uk Kim 321fba7fc7eSJung-uk Kim } 322fba7fc7eSJung-uk Kim break; 323fba7fc7eSJung-uk Kim 324fba7fc7eSJung-uk Kim 325fba7fc7eSJung-uk Kim case ACPI_TYPE_PACKAGE: 326fba7fc7eSJung-uk Kim 327fba7fc7eSJung-uk Kim if (Op->Asl.ParseOpcode == PARSEOP_NAME) 328fba7fc7eSJung-uk Kim { 329fba7fc7eSJung-uk Kim Op = Op->Asl.Child; 330fba7fc7eSJung-uk Kim } 331fba7fc7eSJung-uk Kim if ((Op->Asl.ParseOpcode == PARSEOP_NAMESEG) || 332fba7fc7eSJung-uk Kim (Op->Asl.ParseOpcode == PARSEOP_NAMESTRING)) 333fba7fc7eSJung-uk Kim { 334fba7fc7eSJung-uk Kim Op = Op->Asl.Next; 335fba7fc7eSJung-uk Kim } 336fba7fc7eSJung-uk Kim Op = Op->Asl.Child; 337fba7fc7eSJung-uk Kim 338fba7fc7eSJung-uk Kim if ((Op->Asl.ParseOpcode == PARSEOP_BYTECONST) || 339fba7fc7eSJung-uk Kim (Op->Asl.ParseOpcode == PARSEOP_RAW_DATA)) 340fba7fc7eSJung-uk Kim { 341fba7fc7eSJung-uk Kim FlPrintFile (ASL_FILE_NAMESPACE_OUTPUT, 342fba7fc7eSJung-uk Kim " [Initial Length 0x%.2X elements]", 343fba7fc7eSJung-uk Kim Op->Asl.Value.Integer); 344fba7fc7eSJung-uk Kim } 345fba7fc7eSJung-uk Kim break; 346fba7fc7eSJung-uk Kim 347fba7fc7eSJung-uk Kim 348fba7fc7eSJung-uk Kim case ACPI_TYPE_BUFFER: 349fba7fc7eSJung-uk Kim 350fba7fc7eSJung-uk Kim if (Op->Asl.ParseOpcode == PARSEOP_NAME) 351fba7fc7eSJung-uk Kim { 352fba7fc7eSJung-uk Kim Op = Op->Asl.Child; 353fba7fc7eSJung-uk Kim } 354fba7fc7eSJung-uk Kim if ((Op->Asl.ParseOpcode == PARSEOP_NAMESEG) || 355fba7fc7eSJung-uk Kim (Op->Asl.ParseOpcode == PARSEOP_NAMESTRING)) 356fba7fc7eSJung-uk Kim { 357fba7fc7eSJung-uk Kim Op = Op->Asl.Next; 358fba7fc7eSJung-uk Kim } 359fba7fc7eSJung-uk Kim Op = Op->Asl.Child; 360fba7fc7eSJung-uk Kim 361fba7fc7eSJung-uk Kim if (Op->Asl.ParseOpcode == PARSEOP_INTEGER) 362fba7fc7eSJung-uk Kim { 363fba7fc7eSJung-uk Kim FlPrintFile (ASL_FILE_NAMESPACE_OUTPUT, 364fba7fc7eSJung-uk Kim " [Initial Length 0x%.2X bytes]", 365fba7fc7eSJung-uk Kim Op->Asl.Value.Integer); 366fba7fc7eSJung-uk Kim } 367fba7fc7eSJung-uk Kim break; 368fba7fc7eSJung-uk Kim 369fba7fc7eSJung-uk Kim 370fba7fc7eSJung-uk Kim case ACPI_TYPE_METHOD: 371fba7fc7eSJung-uk Kim 372fba7fc7eSJung-uk Kim FlPrintFile (ASL_FILE_NAMESPACE_OUTPUT, 373fba7fc7eSJung-uk Kim " [Code Length 0x%.4X bytes]", 374fba7fc7eSJung-uk Kim Op->Asl.AmlSubtreeLength); 375fba7fc7eSJung-uk Kim break; 376fba7fc7eSJung-uk Kim 377fba7fc7eSJung-uk Kim 37853289f6aSNate Lawson default: 37953289f6aSNate Lawson /* Nothing to do for other types */ 38053289f6aSNate Lawson break; 38153289f6aSNate Lawson } 38253289f6aSNate Lawson } 38353289f6aSNate Lawson 38453289f6aSNate Lawson FlPrintFile (ASL_FILE_NAMESPACE_OUTPUT, "\n"); 38553289f6aSNate Lawson return (AE_OK); 38653289f6aSNate Lawson } 38753289f6aSNate Lawson 38853289f6aSNate Lawson 38953289f6aSNate Lawson /******************************************************************************* 39053289f6aSNate Lawson * 39153289f6aSNate Lawson * FUNCTION: LsDisplayNamespace 39253289f6aSNate Lawson * 39353289f6aSNate Lawson * PARAMETERS: None 39453289f6aSNate Lawson * 395fba7fc7eSJung-uk Kim * RETURN: Status 39653289f6aSNate Lawson * 39753289f6aSNate Lawson * DESCRIPTION: Walk the namespace an display information about each node 39853289f6aSNate Lawson * in the tree. Information is written to the optional 39953289f6aSNate Lawson * namespace output file. 40053289f6aSNate Lawson * 40153289f6aSNate Lawson ******************************************************************************/ 40253289f6aSNate Lawson 40353289f6aSNate Lawson ACPI_STATUS 40453289f6aSNate Lawson LsDisplayNamespace ( 40553289f6aSNate Lawson void) 40653289f6aSNate Lawson { 40753289f6aSNate Lawson ACPI_STATUS Status; 40853289f6aSNate Lawson 40953289f6aSNate Lawson 41053289f6aSNate Lawson if (!Gbl_NsOutputFlag) 41153289f6aSNate Lawson { 41253289f6aSNate Lawson return (AE_OK); 41353289f6aSNate Lawson } 41453289f6aSNate Lawson 41553289f6aSNate Lawson /* File header */ 41653289f6aSNate Lawson 41753289f6aSNate Lawson FlPrintFile (ASL_FILE_NAMESPACE_OUTPUT, "Contents of ACPI Namespace\n\n"); 41853289f6aSNate Lawson FlPrintFile (ASL_FILE_NAMESPACE_OUTPUT, "Count Depth Name - Type\n\n"); 41953289f6aSNate Lawson 42053289f6aSNate Lawson /* Walk entire namespace from the root */ 42153289f6aSNate Lawson 42253289f6aSNate Lawson Status = AcpiNsWalkNamespace (ACPI_TYPE_ANY, ACPI_ROOT_OBJECT, 42353289f6aSNate Lawson ACPI_UINT32_MAX, FALSE, LsDoOneNamespaceObject, 42453289f6aSNate Lawson NULL, NULL); 42553289f6aSNate Lawson return (Status); 42653289f6aSNate Lawson } 42753289f6aSNate Lawson 42853289f6aSNate Lawson 42953289f6aSNate Lawson /******************************************************************************* 43053289f6aSNate Lawson * 43153289f6aSNate Lawson * FUNCTION: LsCompareOneNamespaceObject 43253289f6aSNate Lawson * 43353289f6aSNate Lawson * PARAMETERS: ACPI_WALK_CALLBACK 43453289f6aSNate Lawson * 43553289f6aSNate Lawson * RETURN: Status 43653289f6aSNate Lawson * 43753289f6aSNate Lawson * DESCRIPTION: Compare name of one object. 43853289f6aSNate Lawson * 43953289f6aSNate Lawson ******************************************************************************/ 44053289f6aSNate Lawson 441fba7fc7eSJung-uk Kim static ACPI_STATUS 44253289f6aSNate Lawson LsCompareOneNamespaceObject ( 44353289f6aSNate Lawson ACPI_HANDLE ObjHandle, 44453289f6aSNate Lawson UINT32 Level, 44553289f6aSNate Lawson void *Context, 44653289f6aSNate Lawson void **ReturnValue) 44753289f6aSNate Lawson { 44853289f6aSNate Lawson ACPI_NAMESPACE_NODE *Node = (ACPI_NAMESPACE_NODE *) ObjHandle; 44953289f6aSNate Lawson 45053289f6aSNate Lawson 45153289f6aSNate Lawson /* Simply check the name */ 45253289f6aSNate Lawson 45353289f6aSNate Lawson if (*((UINT32 *) (Context)) == Node->Name.Integer) 45453289f6aSNate Lawson { 45553289f6aSNate Lawson /* Abort walk if we found one instance */ 45653289f6aSNate Lawson 45753289f6aSNate Lawson return (AE_CTRL_TRUE); 45853289f6aSNate Lawson } 45953289f6aSNate Lawson 46053289f6aSNate Lawson return (AE_OK); 46153289f6aSNate Lawson } 46253289f6aSNate Lawson 46353289f6aSNate Lawson 46453289f6aSNate Lawson /******************************************************************************* 46553289f6aSNate Lawson * 46653289f6aSNate Lawson * FUNCTION: LkObjectExists 46753289f6aSNate Lawson * 46853289f6aSNate Lawson * PARAMETERS: Name - 4 char ACPI name 46953289f6aSNate Lawson * 47053289f6aSNate Lawson * RETURN: TRUE if name exists in namespace 47153289f6aSNate Lawson * 47253289f6aSNate Lawson * DESCRIPTION: Walk the namespace to find an object 47353289f6aSNate Lawson * 47453289f6aSNate Lawson ******************************************************************************/ 47553289f6aSNate Lawson 476fba7fc7eSJung-uk Kim static BOOLEAN 47753289f6aSNate Lawson LkObjectExists ( 47853289f6aSNate Lawson char *Name) 47953289f6aSNate Lawson { 48053289f6aSNate Lawson ACPI_STATUS Status; 48153289f6aSNate Lawson 48253289f6aSNate Lawson 48353289f6aSNate Lawson /* Walk entire namespace from the supplied root */ 48453289f6aSNate Lawson 48553289f6aSNate Lawson Status = AcpiNsWalkNamespace (ACPI_TYPE_ANY, ACPI_ROOT_OBJECT, 48653289f6aSNate Lawson ACPI_UINT32_MAX, FALSE, LsCompareOneNamespaceObject, 48753289f6aSNate Lawson Name, NULL); 48853289f6aSNate Lawson if (Status == AE_CTRL_TRUE) 48953289f6aSNate Lawson { 49053289f6aSNate Lawson /* At least one instance of the name was found */ 49153289f6aSNate Lawson 49253289f6aSNate Lawson return (TRUE); 49353289f6aSNate Lawson } 49453289f6aSNate Lawson 49553289f6aSNate Lawson return (FALSE); 49653289f6aSNate Lawson } 49753289f6aSNate Lawson 49853289f6aSNate Lawson 49953289f6aSNate Lawson /******************************************************************************* 50053289f6aSNate Lawson * 50153289f6aSNate Lawson * FUNCTION: LkCrossReferenceNamespace 50253289f6aSNate Lawson * 50353289f6aSNate Lawson * PARAMETERS: None 50453289f6aSNate Lawson * 50553289f6aSNate Lawson * RETURN: Status 50653289f6aSNate Lawson * 50753289f6aSNate Lawson * DESCRIPTION: Perform a cross reference check of the parse tree against the 50853289f6aSNate Lawson * namespace. Every named referenced within the parse tree 50953289f6aSNate Lawson * should be get resolved with a namespace lookup. If not, the 51053289f6aSNate Lawson * original reference in the ASL code is invalid -- i.e., refers 51153289f6aSNate Lawson * to a non-existent object. 51253289f6aSNate Lawson * 51353289f6aSNate Lawson * NOTE: The ASL "External" operator causes the name to be inserted into the 51453289f6aSNate Lawson * namespace so that references to the external name will be resolved 51553289f6aSNate Lawson * correctly here. 51653289f6aSNate Lawson * 51753289f6aSNate Lawson ******************************************************************************/ 51853289f6aSNate Lawson 51953289f6aSNate Lawson ACPI_STATUS 52053289f6aSNate Lawson LkCrossReferenceNamespace ( 52153289f6aSNate Lawson void) 52253289f6aSNate Lawson { 52353289f6aSNate Lawson ACPI_WALK_STATE *WalkState; 52453289f6aSNate Lawson 52553289f6aSNate Lawson 52653289f6aSNate Lawson DbgPrint (ASL_DEBUG_OUTPUT, "\nCross referencing namespace\n\n"); 52753289f6aSNate Lawson 52853289f6aSNate Lawson /* 52953289f6aSNate Lawson * Create a new walk state for use when looking up names 53053289f6aSNate Lawson * within the namespace (Passed as context to the callbacks) 53153289f6aSNate Lawson */ 53253289f6aSNate Lawson WalkState = AcpiDsCreateWalkState (0, NULL, NULL, NULL); 53353289f6aSNate Lawson if (!WalkState) 53453289f6aSNate Lawson { 53553289f6aSNate Lawson return AE_NO_MEMORY; 53653289f6aSNate Lawson } 53753289f6aSNate Lawson 53853289f6aSNate Lawson /* Walk the entire parse tree */ 53953289f6aSNate Lawson 54053289f6aSNate Lawson TrWalkParseTree (RootNode, ASL_WALK_VISIT_TWICE, LkNamespaceLocateBegin, 54153289f6aSNate Lawson LkNamespaceLocateEnd, WalkState); 54253289f6aSNate Lawson return AE_OK; 54353289f6aSNate Lawson } 54453289f6aSNate Lawson 54553289f6aSNate Lawson 54653289f6aSNate Lawson /******************************************************************************* 54753289f6aSNate Lawson * 54853289f6aSNate Lawson * FUNCTION: LkCheckFieldRange 54953289f6aSNate Lawson * 55053289f6aSNate Lawson * PARAMETERS: RegionBitLength - Length of entire parent region 55153289f6aSNate Lawson * FieldBitOffset - Start of the field unit (within region) 55253289f6aSNate Lawson * FieldBitLength - Entire length of field unit 55353289f6aSNate Lawson * AccessBitWidth - Access width of the field unit 55453289f6aSNate Lawson * 55553289f6aSNate Lawson * RETURN: None 55653289f6aSNate Lawson * 55753289f6aSNate Lawson * DESCRIPTION: Check one field unit to make sure it fits in the parent 55853289f6aSNate Lawson * op region. 55953289f6aSNate Lawson * 56053289f6aSNate Lawson * Note: AccessBitWidth must be either 8,16,32, or 64 56153289f6aSNate Lawson * 56253289f6aSNate Lawson ******************************************************************************/ 56353289f6aSNate Lawson 564fba7fc7eSJung-uk Kim static void 56553289f6aSNate Lawson LkCheckFieldRange ( 56653289f6aSNate Lawson ACPI_PARSE_OBJECT *Op, 56753289f6aSNate Lawson UINT32 RegionBitLength, 56853289f6aSNate Lawson UINT32 FieldBitOffset, 56953289f6aSNate Lawson UINT32 FieldBitLength, 57053289f6aSNate Lawson UINT32 AccessBitWidth) 57153289f6aSNate Lawson { 57253289f6aSNate Lawson UINT32 FieldEndBitOffset; 57353289f6aSNate Lawson 574fba7fc7eSJung-uk Kim 57553289f6aSNate Lawson /* 57653289f6aSNate Lawson * Check each field unit against the region size. The entire 57753289f6aSNate Lawson * field unit (start offset plus length) must fit within the 57853289f6aSNate Lawson * region. 57953289f6aSNate Lawson */ 58053289f6aSNate Lawson FieldEndBitOffset = FieldBitOffset + FieldBitLength; 58153289f6aSNate Lawson 58253289f6aSNate Lawson if (FieldEndBitOffset > RegionBitLength) 58353289f6aSNate Lawson { 58453289f6aSNate Lawson /* Field definition itself is beyond the end-of-region */ 58553289f6aSNate Lawson 58653289f6aSNate Lawson AslError (ASL_ERROR, ASL_MSG_FIELD_UNIT_OFFSET, Op, NULL); 58753289f6aSNate Lawson return; 58853289f6aSNate Lawson } 58953289f6aSNate Lawson 59053289f6aSNate Lawson /* 59153289f6aSNate Lawson * Now check that the field plus AccessWidth doesn't go beyond 59253289f6aSNate Lawson * the end-of-region. Assumes AccessBitWidth is a power of 2 59353289f6aSNate Lawson */ 59453289f6aSNate Lawson FieldEndBitOffset = ACPI_ROUND_UP (FieldEndBitOffset, AccessBitWidth); 59553289f6aSNate Lawson 59653289f6aSNate Lawson if (FieldEndBitOffset > RegionBitLength) 59753289f6aSNate Lawson { 59853289f6aSNate Lawson /* Field definition combined with the access is beyond EOR */ 59953289f6aSNate Lawson 60053289f6aSNate Lawson AslError (ASL_ERROR, ASL_MSG_FIELD_UNIT_ACCESS_WIDTH, Op, NULL); 60153289f6aSNate Lawson } 60253289f6aSNate Lawson } 60353289f6aSNate Lawson 60453289f6aSNate Lawson /******************************************************************************* 60553289f6aSNate Lawson * 60653289f6aSNate Lawson * FUNCTION: LkNamespaceLocateBegin 60753289f6aSNate Lawson * 60853289f6aSNate Lawson * PARAMETERS: ASL_WALK_CALLBACK 60953289f6aSNate Lawson * 61053289f6aSNate Lawson * RETURN: Status 61153289f6aSNate Lawson * 61253289f6aSNate Lawson * DESCRIPTION: Descending callback used during cross-reference. For named 61353289f6aSNate Lawson * object references, attempt to locate the name in the 61453289f6aSNate Lawson * namespace. 61553289f6aSNate Lawson * 61653289f6aSNate Lawson * NOTE: ASL references to named fields within resource descriptors are 61753289f6aSNate Lawson * resolved to integer values here. Therefore, this step is an 61853289f6aSNate Lawson * important part of the code generation. We don't know that the 61953289f6aSNate Lawson * name refers to a resource descriptor until now. 62053289f6aSNate Lawson * 62153289f6aSNate Lawson ******************************************************************************/ 62253289f6aSNate Lawson 623fba7fc7eSJung-uk Kim static ACPI_STATUS 62453289f6aSNate Lawson LkNamespaceLocateBegin ( 62553289f6aSNate Lawson ACPI_PARSE_OBJECT *Op, 62653289f6aSNate Lawson UINT32 Level, 62753289f6aSNate Lawson void *Context) 62853289f6aSNate Lawson { 62953289f6aSNate Lawson ACPI_WALK_STATE *WalkState = (ACPI_WALK_STATE *) Context; 63053289f6aSNate Lawson ACPI_NAMESPACE_NODE *Node; 63153289f6aSNate Lawson ACPI_STATUS Status; 63253289f6aSNate Lawson ACPI_OBJECT_TYPE ObjectType; 63353289f6aSNate Lawson char *Path; 63453289f6aSNate Lawson UINT8 PassedArgs; 63553289f6aSNate Lawson ACPI_PARSE_OBJECT *NextOp; 63653289f6aSNate Lawson ACPI_PARSE_OBJECT *OwningOp; 63753289f6aSNate Lawson ACPI_PARSE_OBJECT *SpaceIdOp; 63853289f6aSNate Lawson UINT32 MinimumLength; 63953289f6aSNate Lawson UINT32 Temp; 64053289f6aSNate Lawson const ACPI_OPCODE_INFO *OpInfo; 64153289f6aSNate Lawson UINT32 Flags; 64253289f6aSNate Lawson 64353289f6aSNate Lawson 64453289f6aSNate Lawson ACPI_FUNCTION_TRACE_PTR ("LkNamespaceLocateBegin", Op); 64553289f6aSNate Lawson 64653289f6aSNate Lawson /* 64753289f6aSNate Lawson * If this node is the actual declaration of a name 64853289f6aSNate Lawson * [such as the XXXX name in "Method (XXXX)"], 64953289f6aSNate Lawson * we are not interested in it here. We only care about names that are 65053289f6aSNate Lawson * references to other objects within the namespace and the parent objects 65153289f6aSNate Lawson * of name declarations 65253289f6aSNate Lawson */ 65353289f6aSNate Lawson if (Op->Asl.CompileFlags & NODE_IS_NAME_DECLARATION) 65453289f6aSNate Lawson { 65553289f6aSNate Lawson return (AE_OK); 65653289f6aSNate Lawson } 65753289f6aSNate Lawson 65853289f6aSNate Lawson /* We are only interested in opcodes that have an associated name */ 65953289f6aSNate Lawson 66053289f6aSNate Lawson OpInfo = AcpiPsGetOpcodeInfo (Op->Asl.AmlOpcode); 66153289f6aSNate Lawson 66253289f6aSNate Lawson if ((!(OpInfo->Flags & AML_NAMED)) && 66353289f6aSNate Lawson (!(OpInfo->Flags & AML_CREATE)) && 66453289f6aSNate Lawson (Op->Asl.ParseOpcode != PARSEOP_NAMESTRING) && 66553289f6aSNate Lawson (Op->Asl.ParseOpcode != PARSEOP_NAMESEG) && 66653289f6aSNate Lawson (Op->Asl.ParseOpcode != PARSEOP_METHODCALL)) 66753289f6aSNate Lawson { 66853289f6aSNate Lawson return (AE_OK); 66953289f6aSNate Lawson } 67053289f6aSNate Lawson 67153289f6aSNate Lawson /* 67253289f6aSNate Lawson * We must enable the "search-to-root" for single NameSegs, but 67353289f6aSNate Lawson * we have to be very careful about opening up scopes 67453289f6aSNate Lawson */ 67553289f6aSNate Lawson Flags = ACPI_NS_SEARCH_PARENT; 67653289f6aSNate Lawson if ((Op->Asl.ParseOpcode == PARSEOP_NAMESTRING) || 67753289f6aSNate Lawson (Op->Asl.ParseOpcode == PARSEOP_NAMESEG) || 67853289f6aSNate Lawson (Op->Asl.ParseOpcode == PARSEOP_METHODCALL)) 67953289f6aSNate Lawson { 68053289f6aSNate Lawson /* 68153289f6aSNate Lawson * These are name references, do not push the scope stack 68253289f6aSNate Lawson * for them. 68353289f6aSNate Lawson */ 68453289f6aSNate Lawson Flags |= ACPI_NS_DONT_OPEN_SCOPE; 68553289f6aSNate Lawson } 68653289f6aSNate Lawson 68753289f6aSNate Lawson /* Get the NamePath from the appropriate place */ 68853289f6aSNate Lawson 68953289f6aSNate Lawson if (OpInfo->Flags & AML_NAMED) 69053289f6aSNate Lawson { 69153289f6aSNate Lawson /* For all NAMED operators, the name reference is the first child */ 69253289f6aSNate Lawson 69353289f6aSNate Lawson Path = Op->Asl.Child->Asl.Value.String; 69453289f6aSNate Lawson if (Op->Asl.AmlOpcode == AML_ALIAS_OP) 69553289f6aSNate Lawson { 69653289f6aSNate Lawson /* 69753289f6aSNate Lawson * ALIAS is the only oddball opcode, the name declaration 69853289f6aSNate Lawson * (alias name) is the second operand 69953289f6aSNate Lawson */ 70053289f6aSNate Lawson Path = Op->Asl.Child->Asl.Next->Asl.Value.String; 70153289f6aSNate Lawson } 70253289f6aSNate Lawson } 70353289f6aSNate Lawson else if (OpInfo->Flags & AML_CREATE) 70453289f6aSNate Lawson { 70553289f6aSNate Lawson /* Name must appear as the last parameter */ 70653289f6aSNate Lawson 70753289f6aSNate Lawson NextOp = Op->Asl.Child; 70853289f6aSNate Lawson while (!(NextOp->Asl.CompileFlags & NODE_IS_NAME_DECLARATION)) 70953289f6aSNate Lawson { 71053289f6aSNate Lawson NextOp = NextOp->Asl.Next; 71153289f6aSNate Lawson } 71253289f6aSNate Lawson Path = NextOp->Asl.Value.String; 71353289f6aSNate Lawson } 71453289f6aSNate Lawson else 71553289f6aSNate Lawson { 71653289f6aSNate Lawson Path = Op->Asl.Value.String; 71753289f6aSNate Lawson } 71853289f6aSNate Lawson 71953289f6aSNate Lawson ObjectType = AslMapNamedOpcodeToDataType (Op->Asl.AmlOpcode); 720fba7fc7eSJung-uk Kim ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, 721fba7fc7eSJung-uk Kim "Type=%s\n", AcpiUtGetTypeName (ObjectType))); 72253289f6aSNate Lawson 72353289f6aSNate Lawson /* 72453289f6aSNate Lawson * Lookup the name in the namespace. Name must exist at this point, or it 72553289f6aSNate Lawson * is an invalid reference. 72653289f6aSNate Lawson * 72753289f6aSNate Lawson * The namespace is also used as a lookup table for references to resource 72853289f6aSNate Lawson * descriptors and the fields within them. 72953289f6aSNate Lawson */ 73053289f6aSNate Lawson Gbl_NsLookupCount++; 73153289f6aSNate Lawson 73253289f6aSNate Lawson Status = AcpiNsLookup (WalkState->ScopeInfo, Path, ObjectType, 73353289f6aSNate Lawson ACPI_IMODE_EXECUTE, Flags, WalkState, &(Node)); 73453289f6aSNate Lawson if (ACPI_FAILURE (Status)) 73553289f6aSNate Lawson { 73653289f6aSNate Lawson if (Status == AE_NOT_FOUND) 73753289f6aSNate Lawson { 73853289f6aSNate Lawson /* 73953289f6aSNate Lawson * We didn't find the name reference by path -- we can qualify this 74053289f6aSNate Lawson * a little better before we print an error message 74153289f6aSNate Lawson */ 74253289f6aSNate Lawson if (strlen (Path) == ACPI_NAME_SIZE) 74353289f6aSNate Lawson { 74453289f6aSNate Lawson /* A simple, one-segment ACPI name */ 74553289f6aSNate Lawson 74653289f6aSNate Lawson if (LkObjectExists (Path)) 74753289f6aSNate Lawson { 748fba7fc7eSJung-uk Kim /* 749fba7fc7eSJung-uk Kim * There exists such a name, but we couldn't get to it 750fba7fc7eSJung-uk Kim * from this scope 751fba7fc7eSJung-uk Kim */ 752fba7fc7eSJung-uk Kim AslError (ASL_ERROR, ASL_MSG_NOT_REACHABLE, Op, 753fba7fc7eSJung-uk Kim Op->Asl.ExternalName); 75453289f6aSNate Lawson } 75553289f6aSNate Lawson else 75653289f6aSNate Lawson { 75753289f6aSNate Lawson /* The name doesn't exist, period */ 75853289f6aSNate Lawson 759fba7fc7eSJung-uk Kim if ((Op->Asl.Parent) && 760fba7fc7eSJung-uk Kim (Op->Asl.Parent->Asl.ParseOpcode == PARSEOP_CONDREFOF)) 761fba7fc7eSJung-uk Kim { 762fba7fc7eSJung-uk Kim /* Ignore not found if parent is CondRefOf */ 763fba7fc7eSJung-uk Kim 764fba7fc7eSJung-uk Kim return (AE_OK); 765fba7fc7eSJung-uk Kim } 766fba7fc7eSJung-uk Kim 767fba7fc7eSJung-uk Kim AslError (ASL_ERROR, ASL_MSG_NOT_EXIST, 768fba7fc7eSJung-uk Kim Op, Op->Asl.ExternalName); 76953289f6aSNate Lawson } 77053289f6aSNate Lawson } 77153289f6aSNate Lawson else 77253289f6aSNate Lawson { 77353289f6aSNate Lawson /* Check for a fully qualified path */ 77453289f6aSNate Lawson 77553289f6aSNate Lawson if (Path[0] == AML_ROOT_PREFIX) 77653289f6aSNate Lawson { 77753289f6aSNate Lawson /* Gave full path, the object does not exist */ 77853289f6aSNate Lawson 779fba7fc7eSJung-uk Kim if ((Op->Asl.Parent) && 780fba7fc7eSJung-uk Kim (Op->Asl.Parent->Asl.ParseOpcode == PARSEOP_CONDREFOF)) 781fba7fc7eSJung-uk Kim { 782fba7fc7eSJung-uk Kim /* Ignore not found if parent is CondRefOf */ 783fba7fc7eSJung-uk Kim 784fba7fc7eSJung-uk Kim return (AE_OK); 785fba7fc7eSJung-uk Kim } 786fba7fc7eSJung-uk Kim 787fba7fc7eSJung-uk Kim AslError (ASL_ERROR, ASL_MSG_NOT_EXIST, Op, 788fba7fc7eSJung-uk Kim Op->Asl.ExternalName); 78953289f6aSNate Lawson } 79053289f6aSNate Lawson else 79153289f6aSNate Lawson { 792fba7fc7eSJung-uk Kim /* 793fba7fc7eSJung-uk Kim * We can't tell whether it doesn't exist or just 794fba7fc7eSJung-uk Kim * can't be reached. 795fba7fc7eSJung-uk Kim */ 796fba7fc7eSJung-uk Kim AslError (ASL_ERROR, ASL_MSG_NOT_FOUND, Op, 797fba7fc7eSJung-uk Kim Op->Asl.ExternalName); 79853289f6aSNate Lawson } 79953289f6aSNate Lawson } 80053289f6aSNate Lawson 80153289f6aSNate Lawson Status = AE_OK; 80253289f6aSNate Lawson } 80353289f6aSNate Lawson return (Status); 80453289f6aSNate Lawson } 80553289f6aSNate Lawson 80653289f6aSNate Lawson /* Attempt to optimize the NamePath */ 80753289f6aSNate Lawson 80853289f6aSNate Lawson OptOptimizeNamePath (Op, OpInfo->Flags, WalkState, Path, Node); 80953289f6aSNate Lawson 81053289f6aSNate Lawson /* 81153289f6aSNate Lawson * Dereference an alias. (A name reference that is an alias.) 81253289f6aSNate Lawson * Aliases are not nested; The alias always points to the final object 81353289f6aSNate Lawson */ 814fba7fc7eSJung-uk Kim if ((Op->Asl.ParseOpcode != PARSEOP_ALIAS) && 815fba7fc7eSJung-uk Kim (Node->Type == ACPI_TYPE_LOCAL_ALIAS)) 81653289f6aSNate Lawson { 81753289f6aSNate Lawson /* This node points back to the original PARSEOP_ALIAS */ 81853289f6aSNate Lawson 819fba7fc7eSJung-uk Kim NextOp = Node->Op; 82053289f6aSNate Lawson 82153289f6aSNate Lawson /* The first child is the alias target op */ 82253289f6aSNate Lawson 82353289f6aSNate Lawson NextOp = NextOp->Asl.Child; 82453289f6aSNate Lawson 82553289f6aSNate Lawson /* Who in turn points back to original target alias node */ 82653289f6aSNate Lawson 82753289f6aSNate Lawson if (NextOp->Asl.Node) 82853289f6aSNate Lawson { 82953289f6aSNate Lawson Node = NextOp->Asl.Node; 83053289f6aSNate Lawson } 83153289f6aSNate Lawson else 83253289f6aSNate Lawson { 833fba7fc7eSJung-uk Kim AslError (ASL_ERROR, ASL_MSG_COMPILER_INTERNAL, Op, 834fba7fc7eSJung-uk Kim "Missing alias link"); 83553289f6aSNate Lawson } 83653289f6aSNate Lawson } 83753289f6aSNate Lawson 83853289f6aSNate Lawson /* 1) Check for a reference to a resource descriptor */ 83953289f6aSNate Lawson 84053289f6aSNate Lawson else if ((Node->Type == ACPI_TYPE_LOCAL_RESOURCE_FIELD) || 84153289f6aSNate Lawson (Node->Type == ACPI_TYPE_LOCAL_RESOURCE)) 84253289f6aSNate Lawson { 84353289f6aSNate Lawson /* 84453289f6aSNate Lawson * This was a reference to a field within a resource descriptor. Extract 84553289f6aSNate Lawson * the associated field offset (either a bit or byte offset depending on 84653289f6aSNate Lawson * the field type) and change the named reference into an integer for 84753289f6aSNate Lawson * AML code generation 84853289f6aSNate Lawson */ 849fba7fc7eSJung-uk Kim Temp = Node->Value; 85053289f6aSNate Lawson if (Node->Flags & ANOBJ_IS_BIT_OFFSET) 85153289f6aSNate Lawson { 85253289f6aSNate Lawson Op->Asl.CompileFlags |= NODE_IS_BIT_OFFSET; 85353289f6aSNate Lawson } 85453289f6aSNate Lawson 85553289f6aSNate Lawson /* Perform BitOffset <--> ByteOffset conversion if necessary */ 85653289f6aSNate Lawson 85753289f6aSNate Lawson switch (Op->Asl.Parent->Asl.AmlOpcode) 85853289f6aSNate Lawson { 85953289f6aSNate Lawson case AML_CREATE_FIELD_OP: 86053289f6aSNate Lawson 86153289f6aSNate Lawson /* We allow a Byte offset to Bit Offset conversion for this op */ 86253289f6aSNate Lawson 86353289f6aSNate Lawson if (!(Op->Asl.CompileFlags & NODE_IS_BIT_OFFSET)) 86453289f6aSNate Lawson { 86553289f6aSNate Lawson /* Simply multiply byte offset times 8 to get bit offset */ 86653289f6aSNate Lawson 86753289f6aSNate Lawson Temp = ACPI_MUL_8 (Temp); 86853289f6aSNate Lawson } 86953289f6aSNate Lawson break; 87053289f6aSNate Lawson 87153289f6aSNate Lawson 87253289f6aSNate Lawson case AML_CREATE_BIT_FIELD_OP: 87353289f6aSNate Lawson 87453289f6aSNate Lawson /* This op requires a Bit Offset */ 87553289f6aSNate Lawson 87653289f6aSNate Lawson if (!(Op->Asl.CompileFlags & NODE_IS_BIT_OFFSET)) 87753289f6aSNate Lawson { 87853289f6aSNate Lawson AslError (ASL_ERROR, ASL_MSG_BYTES_TO_BITS, Op, NULL); 87953289f6aSNate Lawson } 88053289f6aSNate Lawson break; 88153289f6aSNate Lawson 88253289f6aSNate Lawson 88353289f6aSNate Lawson case AML_CREATE_BYTE_FIELD_OP: 88453289f6aSNate Lawson case AML_CREATE_WORD_FIELD_OP: 88553289f6aSNate Lawson case AML_CREATE_DWORD_FIELD_OP: 88653289f6aSNate Lawson case AML_CREATE_QWORD_FIELD_OP: 88753289f6aSNate Lawson case AML_INDEX_OP: 88853289f6aSNate Lawson 88953289f6aSNate Lawson /* These Ops require Byte offsets */ 89053289f6aSNate Lawson 89153289f6aSNate Lawson if (Op->Asl.CompileFlags & NODE_IS_BIT_OFFSET) 89253289f6aSNate Lawson { 89353289f6aSNate Lawson AslError (ASL_ERROR, ASL_MSG_BITS_TO_BYTES, Op, NULL); 89453289f6aSNate Lawson } 89553289f6aSNate Lawson break; 89653289f6aSNate Lawson 89753289f6aSNate Lawson 89853289f6aSNate Lawson default: 89953289f6aSNate Lawson /* Nothing to do for other opcodes */ 90053289f6aSNate Lawson break; 90153289f6aSNate Lawson } 90253289f6aSNate Lawson 90353289f6aSNate Lawson /* Now convert this node to an integer whose value is the field offset */ 90453289f6aSNate Lawson 905fba7fc7eSJung-uk Kim Op->Asl.AmlLength = 0; 90653289f6aSNate Lawson Op->Asl.ParseOpcode = PARSEOP_INTEGER; 90753289f6aSNate Lawson Op->Asl.Value.Integer = (UINT64) Temp; 90853289f6aSNate Lawson Op->Asl.CompileFlags |= NODE_IS_RESOURCE_FIELD; 90953289f6aSNate Lawson 91053289f6aSNate Lawson OpcGenerateAmlOpcode (Op); 91153289f6aSNate Lawson } 91253289f6aSNate Lawson 91353289f6aSNate Lawson /* 2) Check for a method invocation */ 91453289f6aSNate Lawson 91553289f6aSNate Lawson else if ((((Op->Asl.ParseOpcode == PARSEOP_NAMESTRING) || (Op->Asl.ParseOpcode == PARSEOP_NAMESEG)) && 91653289f6aSNate Lawson (Node->Type == ACPI_TYPE_METHOD) && 91753289f6aSNate Lawson (Op->Asl.Parent) && 91853289f6aSNate Lawson (Op->Asl.Parent->Asl.ParseOpcode != PARSEOP_METHOD)) || 91953289f6aSNate Lawson 92053289f6aSNate Lawson (Op->Asl.ParseOpcode == PARSEOP_METHODCALL)) 92153289f6aSNate Lawson { 92253289f6aSNate Lawson 92353289f6aSNate Lawson /* 924fba7fc7eSJung-uk Kim * A reference to a method within one of these opcodes is not an 925fba7fc7eSJung-uk Kim * invocation of the method, it is simply a reference to the method. 926fba7fc7eSJung-uk Kim */ 927fba7fc7eSJung-uk Kim if ((Op->Asl.Parent) && 928fba7fc7eSJung-uk Kim ((Op->Asl.Parent->Asl.ParseOpcode == PARSEOP_REFOF) || 929fba7fc7eSJung-uk Kim (Op->Asl.Parent->Asl.ParseOpcode == PARSEOP_DEREFOF) || 930fba7fc7eSJung-uk Kim (Op->Asl.Parent->Asl.ParseOpcode == PARSEOP_OBJECTTYPE))) 931fba7fc7eSJung-uk Kim { 932fba7fc7eSJung-uk Kim return (AE_OK); 933fba7fc7eSJung-uk Kim } 934fba7fc7eSJung-uk Kim /* 93553289f6aSNate Lawson * There are two types of method invocation: 936fba7fc7eSJung-uk Kim * 1) Invocation with arguments -- the parser recognizes this 937fba7fc7eSJung-uk Kim * as a METHODCALL. 938fba7fc7eSJung-uk Kim * 2) Invocation with no arguments --the parser cannot determine that 939fba7fc7eSJung-uk Kim * this is a method invocation, therefore we have to figure it out 940fba7fc7eSJung-uk Kim * here. 94153289f6aSNate Lawson */ 94253289f6aSNate Lawson if (Node->Type != ACPI_TYPE_METHOD) 94353289f6aSNate Lawson { 944fba7fc7eSJung-uk Kim sprintf (MsgBuffer, "%s is a %s", 945fba7fc7eSJung-uk Kim Op->Asl.ExternalName, AcpiUtGetTypeName (Node->Type)); 94653289f6aSNate Lawson 94753289f6aSNate Lawson AslError (ASL_ERROR, ASL_MSG_NOT_METHOD, Op, MsgBuffer); 94853289f6aSNate Lawson return (AE_OK); 94953289f6aSNate Lawson } 95053289f6aSNate Lawson 95153289f6aSNate Lawson /* Save the method node in the caller's op */ 95253289f6aSNate Lawson 95353289f6aSNate Lawson Op->Asl.Node = Node; 95453289f6aSNate Lawson if (Op->Asl.Parent->Asl.ParseOpcode == PARSEOP_CONDREFOF) 95553289f6aSNate Lawson { 95653289f6aSNate Lawson return (AE_OK); 95753289f6aSNate Lawson } 95853289f6aSNate Lawson 95953289f6aSNate Lawson /* 96053289f6aSNate Lawson * This is a method invocation, with or without arguments. 96153289f6aSNate Lawson * Count the number of arguments, each appears as a child 96253289f6aSNate Lawson * under the parent node 96353289f6aSNate Lawson */ 96453289f6aSNate Lawson Op->Asl.ParseOpcode = PARSEOP_METHODCALL; 96553289f6aSNate Lawson UtSetParseOpName (Op); 96653289f6aSNate Lawson 96753289f6aSNate Lawson PassedArgs = 0; 96853289f6aSNate Lawson NextOp = Op->Asl.Child; 96953289f6aSNate Lawson 97053289f6aSNate Lawson while (NextOp) 97153289f6aSNate Lawson { 97253289f6aSNate Lawson PassedArgs++; 97353289f6aSNate Lawson NextOp = NextOp->Asl.Next; 97453289f6aSNate Lawson } 97553289f6aSNate Lawson 976fba7fc7eSJung-uk Kim if (Node->Value != ASL_EXTERNAL_METHOD) 97753289f6aSNate Lawson { 97853289f6aSNate Lawson /* 97953289f6aSNate Lawson * Check the parsed arguments with the number expected by the 98053289f6aSNate Lawson * method declaration itself 98153289f6aSNate Lawson */ 982fba7fc7eSJung-uk Kim if (PassedArgs != Node->Value) 98353289f6aSNate Lawson { 98453289f6aSNate Lawson sprintf (MsgBuffer, "%s requires %d", Op->Asl.ExternalName, 985fba7fc7eSJung-uk Kim Node->Value); 98653289f6aSNate Lawson 987fba7fc7eSJung-uk Kim if (PassedArgs < Node->Value) 98853289f6aSNate Lawson { 98953289f6aSNate Lawson AslError (ASL_ERROR, ASL_MSG_ARG_COUNT_LO, Op, MsgBuffer); 99053289f6aSNate Lawson } 99153289f6aSNate Lawson else 99253289f6aSNate Lawson { 99353289f6aSNate Lawson AslError (ASL_ERROR, ASL_MSG_ARG_COUNT_HI, Op, MsgBuffer); 99453289f6aSNate Lawson } 99553289f6aSNate Lawson } 99653289f6aSNate Lawson } 99753289f6aSNate Lawson } 99853289f6aSNate Lawson 999fba7fc7eSJung-uk Kim /* 3) Check for an ASL Field definition */ 1000fba7fc7eSJung-uk Kim 100153289f6aSNate Lawson else if ((Op->Asl.Parent) && 100253289f6aSNate Lawson ((Op->Asl.Parent->Asl.ParseOpcode == PARSEOP_FIELD) || 100353289f6aSNate Lawson (Op->Asl.Parent->Asl.ParseOpcode == PARSEOP_BANKFIELD))) 100453289f6aSNate Lawson { 100553289f6aSNate Lawson /* 100653289f6aSNate Lawson * Offset checking for fields. If the parent operation region has a 100753289f6aSNate Lawson * constant length (known at compile time), we can check fields 100853289f6aSNate Lawson * defined in that region against the region length. This will catch 100953289f6aSNate Lawson * fields and field units that cannot possibly fit within the region. 101053289f6aSNate Lawson * 101153289f6aSNate Lawson * Note: Index fields do not directly reference an operation region, 101253289f6aSNate Lawson * thus they are not included in this check. 101353289f6aSNate Lawson */ 101453289f6aSNate Lawson if (Op == Op->Asl.Parent->Asl.Child) 101553289f6aSNate Lawson { 101653289f6aSNate Lawson /* 101753289f6aSNate Lawson * This is the first child of the field node, which is 101853289f6aSNate Lawson * the name of the region. Get the parse node for the 101953289f6aSNate Lawson * region -- which contains the length of the region. 102053289f6aSNate Lawson */ 1021fba7fc7eSJung-uk Kim OwningOp = Node->Op; 1022fba7fc7eSJung-uk Kim Op->Asl.Parent->Asl.ExtraValue = 1023fba7fc7eSJung-uk Kim ACPI_MUL_8 ((UINT32) OwningOp->Asl.Value.Integer); 102453289f6aSNate Lawson 102553289f6aSNate Lawson /* Examine the field access width */ 102653289f6aSNate Lawson 102753289f6aSNate Lawson switch ((UINT8) Op->Asl.Parent->Asl.Value.Integer) 102853289f6aSNate Lawson { 102953289f6aSNate Lawson case AML_FIELD_ACCESS_ANY: 103053289f6aSNate Lawson case AML_FIELD_ACCESS_BYTE: 103153289f6aSNate Lawson case AML_FIELD_ACCESS_BUFFER: 103253289f6aSNate Lawson default: 103353289f6aSNate Lawson MinimumLength = 1; 103453289f6aSNate Lawson break; 103553289f6aSNate Lawson 103653289f6aSNate Lawson case AML_FIELD_ACCESS_WORD: 103753289f6aSNate Lawson MinimumLength = 2; 103853289f6aSNate Lawson break; 103953289f6aSNate Lawson 104053289f6aSNate Lawson case AML_FIELD_ACCESS_DWORD: 104153289f6aSNate Lawson MinimumLength = 4; 104253289f6aSNate Lawson break; 104353289f6aSNate Lawson 104453289f6aSNate Lawson case AML_FIELD_ACCESS_QWORD: 104553289f6aSNate Lawson MinimumLength = 8; 104653289f6aSNate Lawson break; 104753289f6aSNate Lawson } 104853289f6aSNate Lawson 104953289f6aSNate Lawson /* 105053289f6aSNate Lawson * Is the region at least as big as the access width? 105153289f6aSNate Lawson * Note: DataTableRegions have 0 length 105253289f6aSNate Lawson */ 105353289f6aSNate Lawson if (((UINT32) OwningOp->Asl.Value.Integer) && 105453289f6aSNate Lawson ((UINT32) OwningOp->Asl.Value.Integer < MinimumLength)) 105553289f6aSNate Lawson { 105653289f6aSNate Lawson AslError (ASL_ERROR, ASL_MSG_FIELD_ACCESS_WIDTH, Op, NULL); 105753289f6aSNate Lawson } 105853289f6aSNate Lawson 105953289f6aSNate Lawson /* 106053289f6aSNate Lawson * Check EC/CMOS/SMBUS fields to make sure that the correct 106153289f6aSNate Lawson * access type is used (BYTE for EC/CMOS, BUFFER for SMBUS) 106253289f6aSNate Lawson */ 106353289f6aSNate Lawson SpaceIdOp = OwningOp->Asl.Child->Asl.Next; 106453289f6aSNate Lawson switch ((UINT32) SpaceIdOp->Asl.Value.Integer) 106553289f6aSNate Lawson { 106653289f6aSNate Lawson case REGION_EC: 106753289f6aSNate Lawson case REGION_CMOS: 106853289f6aSNate Lawson 106953289f6aSNate Lawson if ((UINT8) Op->Asl.Parent->Asl.Value.Integer != AML_FIELD_ACCESS_BYTE) 107053289f6aSNate Lawson { 107153289f6aSNate Lawson AslError (ASL_ERROR, ASL_MSG_REGION_BYTE_ACCESS, Op, NULL); 107253289f6aSNate Lawson } 107353289f6aSNate Lawson break; 107453289f6aSNate Lawson 107553289f6aSNate Lawson case REGION_SMBUS: 107653289f6aSNate Lawson 107753289f6aSNate Lawson if ((UINT8) Op->Asl.Parent->Asl.Value.Integer != AML_FIELD_ACCESS_BUFFER) 107853289f6aSNate Lawson { 107953289f6aSNate Lawson AslError (ASL_ERROR, ASL_MSG_REGION_BUFFER_ACCESS, Op, NULL); 108053289f6aSNate Lawson } 108153289f6aSNate Lawson break; 108253289f6aSNate Lawson 108353289f6aSNate Lawson default: 108453289f6aSNate Lawson 108553289f6aSNate Lawson /* Nothing to do for other address spaces */ 108653289f6aSNate Lawson break; 108753289f6aSNate Lawson } 108853289f6aSNate Lawson } 108953289f6aSNate Lawson else 109053289f6aSNate Lawson { 109153289f6aSNate Lawson /* 109253289f6aSNate Lawson * This is one element of the field list. Check to make sure 109353289f6aSNate Lawson * that it does not go beyond the end of the parent operation region. 109453289f6aSNate Lawson * 109553289f6aSNate Lawson * In the code below: 109653289f6aSNate Lawson * Op->Asl.Parent->Asl.ExtraValue - Region Length (bits) 109753289f6aSNate Lawson * Op->Asl.ExtraValue - Field start offset (bits) 109853289f6aSNate Lawson * Op->Asl.Child->Asl.Value.Integer32 - Field length (bits) 109953289f6aSNate Lawson * Op->Asl.Child->Asl.ExtraValue - Field access width (bits) 110053289f6aSNate Lawson */ 110153289f6aSNate Lawson if (Op->Asl.Parent->Asl.ExtraValue && Op->Asl.Child) 110253289f6aSNate Lawson { 110353289f6aSNate Lawson LkCheckFieldRange (Op, 110453289f6aSNate Lawson Op->Asl.Parent->Asl.ExtraValue, 110553289f6aSNate Lawson Op->Asl.ExtraValue, 110653289f6aSNate Lawson (UINT32) Op->Asl.Child->Asl.Value.Integer, 110753289f6aSNate Lawson Op->Asl.Child->Asl.ExtraValue); 110853289f6aSNate Lawson } 110953289f6aSNate Lawson } 111053289f6aSNate Lawson } 111153289f6aSNate Lawson 111253289f6aSNate Lawson Op->Asl.Node = Node; 111353289f6aSNate Lawson return (Status); 111453289f6aSNate Lawson } 111553289f6aSNate Lawson 111653289f6aSNate Lawson 111753289f6aSNate Lawson /******************************************************************************* 111853289f6aSNate Lawson * 111953289f6aSNate Lawson * FUNCTION: LkNamespaceLocateEnd 112053289f6aSNate Lawson * 112153289f6aSNate Lawson * PARAMETERS: ASL_WALK_CALLBACK 112253289f6aSNate Lawson * 112353289f6aSNate Lawson * RETURN: Status 112453289f6aSNate Lawson * 112553289f6aSNate Lawson * DESCRIPTION: Ascending callback used during cross reference. We only 112653289f6aSNate Lawson * need to worry about scope management here. 112753289f6aSNate Lawson * 112853289f6aSNate Lawson ******************************************************************************/ 112953289f6aSNate Lawson 1130fba7fc7eSJung-uk Kim static ACPI_STATUS 113153289f6aSNate Lawson LkNamespaceLocateEnd ( 113253289f6aSNate Lawson ACPI_PARSE_OBJECT *Op, 113353289f6aSNate Lawson UINT32 Level, 113453289f6aSNate Lawson void *Context) 113553289f6aSNate Lawson { 113653289f6aSNate Lawson ACPI_WALK_STATE *WalkState = (ACPI_WALK_STATE *) Context; 113753289f6aSNate Lawson const ACPI_OPCODE_INFO *OpInfo; 113853289f6aSNate Lawson 113953289f6aSNate Lawson 114053289f6aSNate Lawson ACPI_FUNCTION_TRACE ("LkNamespaceLocateEnd"); 114153289f6aSNate Lawson 114253289f6aSNate Lawson 114353289f6aSNate Lawson /* We are only interested in opcodes that have an associated name */ 114453289f6aSNate Lawson 114553289f6aSNate Lawson OpInfo = AcpiPsGetOpcodeInfo (Op->Asl.AmlOpcode); 114653289f6aSNate Lawson if (!(OpInfo->Flags & AML_NAMED)) 114753289f6aSNate Lawson { 114853289f6aSNate Lawson return (AE_OK); 114953289f6aSNate Lawson } 115053289f6aSNate Lawson 115153289f6aSNate Lawson /* Not interested in name references, we did not open a scope for them */ 115253289f6aSNate Lawson 115353289f6aSNate Lawson if ((Op->Asl.ParseOpcode == PARSEOP_NAMESTRING) || 115453289f6aSNate Lawson (Op->Asl.ParseOpcode == PARSEOP_NAMESEG) || 115553289f6aSNate Lawson (Op->Asl.ParseOpcode == PARSEOP_METHODCALL)) 115653289f6aSNate Lawson { 115753289f6aSNate Lawson return (AE_OK); 115853289f6aSNate Lawson } 115953289f6aSNate Lawson 116053289f6aSNate Lawson /* Pop the scope stack if necessary */ 116153289f6aSNate Lawson 116253289f6aSNate Lawson if (AcpiNsOpensScope (AslMapNamedOpcodeToDataType (Op->Asl.AmlOpcode))) 116353289f6aSNate Lawson { 116453289f6aSNate Lawson 116553289f6aSNate Lawson ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, 116653289f6aSNate Lawson "%s: Popping scope for Op %p\n", 116753289f6aSNate Lawson AcpiUtGetTypeName (OpInfo->ObjectType), Op)); 116853289f6aSNate Lawson 1169fba7fc7eSJung-uk Kim (void) AcpiDsScopeStackPop (WalkState); 117053289f6aSNate Lawson } 117153289f6aSNate Lawson 117253289f6aSNate Lawson return (AE_OK); 117353289f6aSNate Lawson } 117453289f6aSNate Lawson 117553289f6aSNate Lawson 1176