1a159c266SJung-uk Kim /****************************************************************************** 2a159c266SJung-uk Kim * 3a159c266SJung-uk Kim * Module Name: nsdump - table dumping routines for debug 4a159c266SJung-uk Kim * 5a159c266SJung-uk Kim *****************************************************************************/ 6a159c266SJung-uk Kim 70d84335fSJung-uk Kim /****************************************************************************** 80d84335fSJung-uk Kim * 90d84335fSJung-uk Kim * 1. Copyright Notice 100d84335fSJung-uk Kim * 11*804fe266SJung-uk Kim * Some or all of this work - Copyright (c) 1999 - 2024, Intel Corp. 12a159c266SJung-uk Kim * All rights reserved. 13a159c266SJung-uk Kim * 140d84335fSJung-uk Kim * 2. License 150d84335fSJung-uk Kim * 160d84335fSJung-uk Kim * 2.1. This is your license from Intel Corp. under its intellectual property 170d84335fSJung-uk Kim * rights. You may have additional license terms from the party that provided 180d84335fSJung-uk Kim * you this software, covering your right to use that party's intellectual 190d84335fSJung-uk Kim * property rights. 200d84335fSJung-uk Kim * 210d84335fSJung-uk Kim * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a 220d84335fSJung-uk Kim * copy of the source code appearing in this file ("Covered Code") an 230d84335fSJung-uk Kim * irrevocable, perpetual, worldwide license under Intel's copyrights in the 240d84335fSJung-uk Kim * base code distributed originally by Intel ("Original Intel Code") to copy, 250d84335fSJung-uk Kim 260d84335fSJung-uk Kim * make derivatives, distribute, use and display any portion of the Covered 270d84335fSJung-uk Kim * Code in any form, with the right to sublicense such rights; and 280d84335fSJung-uk Kim * 290d84335fSJung-uk Kim * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent 300d84335fSJung-uk Kim * license (with the right to sublicense), under only those claims of Intel 310d84335fSJung-uk Kim * patents that are infringed by the Original Intel Code, to make, use, sell, 320d84335fSJung-uk Kim * offer to sell, and import the Covered Code and derivative works thereof 330d84335fSJung-uk Kim * solely to the minimum extent necessary to exercise the above copyright 340d84335fSJung-uk Kim * license, and in no event shall the patent license extend to any additions 350d84335fSJung-uk Kim * to or modifications of the Original Intel Code. No other license or right 360d84335fSJung-uk Kim * is granted directly or by implication, estoppel or otherwise; 370d84335fSJung-uk Kim * 380d84335fSJung-uk Kim * The above copyright and patent license is granted only if the following 390d84335fSJung-uk Kim * conditions are met: 400d84335fSJung-uk Kim * 410d84335fSJung-uk Kim * 3. Conditions 420d84335fSJung-uk Kim * 430d84335fSJung-uk Kim * 3.1. Redistribution of Source with Rights to Further Distribute Source. 440d84335fSJung-uk Kim * Redistribution of source code of any substantial portion of the Covered 450d84335fSJung-uk Kim * Code or modification with rights to further distribute source must include 460d84335fSJung-uk Kim * the above Copyright Notice, the above License, this list of Conditions, 470d84335fSJung-uk Kim * and the following Disclaimer and Export Compliance provision. In addition, 480d84335fSJung-uk Kim * Licensee must cause all Covered Code to which Licensee contributes to 490d84335fSJung-uk Kim * contain a file documenting the changes Licensee made to create that Covered 500d84335fSJung-uk Kim * Code and the date of any change. Licensee must include in that file the 510d84335fSJung-uk Kim * documentation of any changes made by any predecessor Licensee. Licensee 520d84335fSJung-uk Kim * must include a prominent statement that the modification is derived, 530d84335fSJung-uk Kim * directly or indirectly, from Original Intel Code. 540d84335fSJung-uk Kim * 550d84335fSJung-uk Kim * 3.2. Redistribution of Source with no Rights to Further Distribute Source. 560d84335fSJung-uk Kim * Redistribution of source code of any substantial portion of the Covered 570d84335fSJung-uk Kim * Code or modification without rights to further distribute source must 580d84335fSJung-uk Kim * include the following Disclaimer and Export Compliance provision in the 590d84335fSJung-uk Kim * documentation and/or other materials provided with distribution. In 600d84335fSJung-uk Kim * addition, Licensee may not authorize further sublicense of source of any 610d84335fSJung-uk Kim * portion of the Covered Code, and must include terms to the effect that the 620d84335fSJung-uk Kim * license from Licensee to its licensee is limited to the intellectual 630d84335fSJung-uk Kim * property embodied in the software Licensee provides to its licensee, and 640d84335fSJung-uk Kim * not to intellectual property embodied in modifications its licensee may 650d84335fSJung-uk Kim * make. 660d84335fSJung-uk Kim * 670d84335fSJung-uk Kim * 3.3. Redistribution of Executable. Redistribution in executable form of any 680d84335fSJung-uk Kim * substantial portion of the Covered Code or modification must reproduce the 690d84335fSJung-uk Kim * above Copyright Notice, and the following Disclaimer and Export Compliance 700d84335fSJung-uk Kim * provision in the documentation and/or other materials provided with the 710d84335fSJung-uk Kim * distribution. 720d84335fSJung-uk Kim * 730d84335fSJung-uk Kim * 3.4. Intel retains all right, title, and interest in and to the Original 740d84335fSJung-uk Kim * Intel Code. 750d84335fSJung-uk Kim * 760d84335fSJung-uk Kim * 3.5. Neither the name Intel nor any other trademark owned or controlled by 770d84335fSJung-uk Kim * Intel shall be used in advertising or otherwise to promote the sale, use or 780d84335fSJung-uk Kim * other dealings in products derived from or relating to the Covered Code 790d84335fSJung-uk Kim * without prior written authorization from Intel. 800d84335fSJung-uk Kim * 810d84335fSJung-uk Kim * 4. Disclaimer and Export Compliance 820d84335fSJung-uk Kim * 830d84335fSJung-uk Kim * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED 840d84335fSJung-uk Kim * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE 850d84335fSJung-uk Kim * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, 860d84335fSJung-uk Kim * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY 870d84335fSJung-uk Kim * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY 880d84335fSJung-uk Kim * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A 890d84335fSJung-uk Kim * PARTICULAR PURPOSE. 900d84335fSJung-uk Kim * 910d84335fSJung-uk Kim * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES 920d84335fSJung-uk Kim * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR 930d84335fSJung-uk Kim * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, 940d84335fSJung-uk Kim * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY 950d84335fSJung-uk Kim * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL 960d84335fSJung-uk Kim * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS 970d84335fSJung-uk Kim * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY 980d84335fSJung-uk Kim * LIMITED REMEDY. 990d84335fSJung-uk Kim * 1000d84335fSJung-uk Kim * 4.3. Licensee shall not export, either directly or indirectly, any of this 1010d84335fSJung-uk Kim * software or system incorporating such software without first obtaining any 1020d84335fSJung-uk Kim * required license or other approval from the U. S. Department of Commerce or 1030d84335fSJung-uk Kim * any other agency or department of the United States Government. In the 1040d84335fSJung-uk Kim * event Licensee exports any such software from the United States or 1050d84335fSJung-uk Kim * re-exports any such software from a foreign destination, Licensee shall 1060d84335fSJung-uk Kim * ensure that the distribution and export/re-export of the software is in 1070d84335fSJung-uk Kim * compliance with all laws, regulations, orders, or other restrictions of the 1080d84335fSJung-uk Kim * U.S. Export Administration Regulations. Licensee agrees that neither it nor 1090d84335fSJung-uk Kim * any of its subsidiaries will export/re-export any technical data, process, 1100d84335fSJung-uk Kim * software, or service, directly or indirectly, to any country for which the 1110d84335fSJung-uk Kim * United States government or any agency thereof requires an export license, 1120d84335fSJung-uk Kim * other governmental approval, or letter of assurance, without first obtaining 1130d84335fSJung-uk Kim * such license, approval or letter. 1140d84335fSJung-uk Kim * 1150d84335fSJung-uk Kim ***************************************************************************** 1160d84335fSJung-uk Kim * 1170d84335fSJung-uk Kim * Alternatively, you may choose to be licensed under the terms of the 1180d84335fSJung-uk Kim * following license: 1190d84335fSJung-uk Kim * 120a159c266SJung-uk Kim * Redistribution and use in source and binary forms, with or without 121a159c266SJung-uk Kim * modification, are permitted provided that the following conditions 122a159c266SJung-uk Kim * are met: 123a159c266SJung-uk Kim * 1. Redistributions of source code must retain the above copyright 124a159c266SJung-uk Kim * notice, this list of conditions, and the following disclaimer, 125a159c266SJung-uk Kim * without modification. 126a159c266SJung-uk Kim * 2. Redistributions in binary form must reproduce at minimum a disclaimer 127a159c266SJung-uk Kim * substantially similar to the "NO WARRANTY" disclaimer below 128a159c266SJung-uk Kim * ("Disclaimer") and any redistribution must be conditioned upon 129a159c266SJung-uk Kim * including a substantially similar Disclaimer requirement for further 130a159c266SJung-uk Kim * binary redistribution. 131a159c266SJung-uk Kim * 3. Neither the names of the above-listed copyright holders nor the names 132a159c266SJung-uk Kim * of any contributors may be used to endorse or promote products derived 133a159c266SJung-uk Kim * from this software without specific prior written permission. 134a159c266SJung-uk Kim * 1350d84335fSJung-uk Kim * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 1360d84335fSJung-uk Kim * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 1370d84335fSJung-uk Kim * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 1380d84335fSJung-uk Kim * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 1390d84335fSJung-uk Kim * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 1400d84335fSJung-uk Kim * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 1410d84335fSJung-uk Kim * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 1420d84335fSJung-uk Kim * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 1430d84335fSJung-uk Kim * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 1440d84335fSJung-uk Kim * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 1450d84335fSJung-uk Kim * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 1460d84335fSJung-uk Kim * 1470d84335fSJung-uk Kim * Alternatively, you may choose to be licensed under the terms of the 148a159c266SJung-uk Kim * GNU General Public License ("GPL") version 2 as published by the Free 149a159c266SJung-uk Kim * Software Foundation. 150a159c266SJung-uk Kim * 1510d84335fSJung-uk Kim *****************************************************************************/ 152a159c266SJung-uk Kim 153a159c266SJung-uk Kim #include <contrib/dev/acpica/include/acpi.h> 154a159c266SJung-uk Kim #include <contrib/dev/acpica/include/accommon.h> 155a159c266SJung-uk Kim #include <contrib/dev/acpica/include/acnamesp.h> 156efcc2a30SJung-uk Kim #include <contrib/dev/acpica/include/acoutput.h> 157a159c266SJung-uk Kim 158a159c266SJung-uk Kim 159a159c266SJung-uk Kim #define _COMPONENT ACPI_NAMESPACE 160a159c266SJung-uk Kim ACPI_MODULE_NAME ("nsdump") 161a159c266SJung-uk Kim 162a159c266SJung-uk Kim /* Local prototypes */ 163a159c266SJung-uk Kim 164a159c266SJung-uk Kim #ifdef ACPI_OBSOLETE_FUNCTIONS 165a159c266SJung-uk Kim void 166a159c266SJung-uk Kim AcpiNsDumpRootDevices ( 167a159c266SJung-uk Kim void); 168a159c266SJung-uk Kim 169a159c266SJung-uk Kim static ACPI_STATUS 170a159c266SJung-uk Kim AcpiNsDumpOneDevice ( 171a159c266SJung-uk Kim ACPI_HANDLE ObjHandle, 172a159c266SJung-uk Kim UINT32 Level, 173a159c266SJung-uk Kim void *Context, 174a159c266SJung-uk Kim void **ReturnValue); 175a159c266SJung-uk Kim #endif 176a159c266SJung-uk Kim 177a159c266SJung-uk Kim 178a159c266SJung-uk Kim #if defined(ACPI_DEBUG_OUTPUT) || defined(ACPI_DEBUGGER) 17979c6d946SJung-uk Kim 18079c6d946SJung-uk Kim static ACPI_STATUS 18179c6d946SJung-uk Kim AcpiNsDumpOneObjectPath ( 18279c6d946SJung-uk Kim ACPI_HANDLE ObjHandle, 18379c6d946SJung-uk Kim UINT32 Level, 18479c6d946SJung-uk Kim void *Context, 18579c6d946SJung-uk Kim void **ReturnValue); 18679c6d946SJung-uk Kim 18779c6d946SJung-uk Kim static ACPI_STATUS 18879c6d946SJung-uk Kim AcpiNsGetMaxDepth ( 18979c6d946SJung-uk Kim ACPI_HANDLE ObjHandle, 19079c6d946SJung-uk Kim UINT32 Level, 19179c6d946SJung-uk Kim void *Context, 19279c6d946SJung-uk Kim void **ReturnValue); 19379c6d946SJung-uk Kim 19479c6d946SJung-uk Kim 195a159c266SJung-uk Kim /******************************************************************************* 196a159c266SJung-uk Kim * 197a159c266SJung-uk Kim * FUNCTION: AcpiNsPrintPathname 198a159c266SJung-uk Kim * 199a159c266SJung-uk Kim * PARAMETERS: NumSegments - Number of ACPI name segments 200a159c266SJung-uk Kim * Pathname - The compressed (internal) path 201a159c266SJung-uk Kim * 202a159c266SJung-uk Kim * RETURN: None 203a159c266SJung-uk Kim * 204a159c266SJung-uk Kim * DESCRIPTION: Print an object's full namespace pathname 205a159c266SJung-uk Kim * 206a159c266SJung-uk Kim ******************************************************************************/ 207a159c266SJung-uk Kim 208a159c266SJung-uk Kim void 209a159c266SJung-uk Kim AcpiNsPrintPathname ( 210a159c266SJung-uk Kim UINT32 NumSegments, 211f8146b88SJung-uk Kim const char *Pathname) 212a159c266SJung-uk Kim { 213a159c266SJung-uk Kim UINT32 i; 214a159c266SJung-uk Kim 215a159c266SJung-uk Kim 216a159c266SJung-uk Kim ACPI_FUNCTION_NAME (NsPrintPathname); 217a159c266SJung-uk Kim 218a159c266SJung-uk Kim 219efcc2a30SJung-uk Kim /* Check if debug output enabled */ 220efcc2a30SJung-uk Kim 221efcc2a30SJung-uk Kim if (!ACPI_IS_DEBUG_ENABLED (ACPI_LV_NAMES, ACPI_NAMESPACE)) 222a159c266SJung-uk Kim { 223a159c266SJung-uk Kim return; 224a159c266SJung-uk Kim } 225a159c266SJung-uk Kim 226a159c266SJung-uk Kim /* Print the entire name */ 227a159c266SJung-uk Kim 228a159c266SJung-uk Kim ACPI_DEBUG_PRINT ((ACPI_DB_NAMES, "[")); 229a159c266SJung-uk Kim 230a159c266SJung-uk Kim while (NumSegments) 231a159c266SJung-uk Kim { 232a159c266SJung-uk Kim for (i = 0; i < 4; i++) 233a159c266SJung-uk Kim { 2345ef50723SJung-uk Kim isprint ((int) Pathname[i]) ? 235a159c266SJung-uk Kim AcpiOsPrintf ("%c", Pathname[i]) : 236a159c266SJung-uk Kim AcpiOsPrintf ("?"); 237a159c266SJung-uk Kim } 238a159c266SJung-uk Kim 239278f0de6SJung-uk Kim Pathname += ACPI_NAMESEG_SIZE; 240a159c266SJung-uk Kim NumSegments--; 241a159c266SJung-uk Kim if (NumSegments) 242a159c266SJung-uk Kim { 243a159c266SJung-uk Kim AcpiOsPrintf ("."); 244a159c266SJung-uk Kim } 245a159c266SJung-uk Kim } 246a159c266SJung-uk Kim 247a159c266SJung-uk Kim AcpiOsPrintf ("]\n"); 248a159c266SJung-uk Kim } 249a159c266SJung-uk Kim 250a159c266SJung-uk Kim 251f8146b88SJung-uk Kim #ifdef ACPI_OBSOLETE_FUNCTIONS 252f8146b88SJung-uk Kim /* Not used at this time, perhaps later */ 253f8146b88SJung-uk Kim 254a159c266SJung-uk Kim /******************************************************************************* 255a159c266SJung-uk Kim * 256a159c266SJung-uk Kim * FUNCTION: AcpiNsDumpPathname 257a159c266SJung-uk Kim * 258a159c266SJung-uk Kim * PARAMETERS: Handle - Object 259a159c266SJung-uk Kim * Msg - Prefix message 260a159c266SJung-uk Kim * Level - Desired debug level 261a159c266SJung-uk Kim * Component - Caller's component ID 262a159c266SJung-uk Kim * 263a159c266SJung-uk Kim * RETURN: None 264a159c266SJung-uk Kim * 265a159c266SJung-uk Kim * DESCRIPTION: Print an object's full namespace pathname 266a159c266SJung-uk Kim * Manages allocation/freeing of a pathname buffer 267a159c266SJung-uk Kim * 268a159c266SJung-uk Kim ******************************************************************************/ 269a159c266SJung-uk Kim 270a159c266SJung-uk Kim void 271a159c266SJung-uk Kim AcpiNsDumpPathname ( 272a159c266SJung-uk Kim ACPI_HANDLE Handle, 273f8146b88SJung-uk Kim const char *Msg, 274a159c266SJung-uk Kim UINT32 Level, 275a159c266SJung-uk Kim UINT32 Component) 276a159c266SJung-uk Kim { 277a159c266SJung-uk Kim 278a159c266SJung-uk Kim ACPI_FUNCTION_TRACE (NsDumpPathname); 279a159c266SJung-uk Kim 280a159c266SJung-uk Kim 281a159c266SJung-uk Kim /* Do this only if the requested debug level and component are enabled */ 282a159c266SJung-uk Kim 283efcc2a30SJung-uk Kim if (!ACPI_IS_DEBUG_ENABLED (Level, Component)) 284a159c266SJung-uk Kim { 285a159c266SJung-uk Kim return_VOID; 286a159c266SJung-uk Kim } 287a159c266SJung-uk Kim 288a159c266SJung-uk Kim /* Convert handle to a full pathname and print it (with supplied message) */ 289a159c266SJung-uk Kim 290a159c266SJung-uk Kim AcpiNsPrintNodePathname (Handle, Msg); 291a159c266SJung-uk Kim AcpiOsPrintf ("\n"); 292a159c266SJung-uk Kim return_VOID; 293a159c266SJung-uk Kim } 294f8146b88SJung-uk Kim #endif 295a159c266SJung-uk Kim 2963d90091dSJung-uk Kim 297a159c266SJung-uk Kim /******************************************************************************* 298a159c266SJung-uk Kim * 299a159c266SJung-uk Kim * FUNCTION: AcpiNsDumpOneObject 300a159c266SJung-uk Kim * 301a159c266SJung-uk Kim * PARAMETERS: ObjHandle - Node to be dumped 302a159c266SJung-uk Kim * Level - Nesting level of the handle 303a159c266SJung-uk Kim * Context - Passed into WalkNamespace 304a159c266SJung-uk Kim * ReturnValue - Not used 305a159c266SJung-uk Kim * 306a159c266SJung-uk Kim * RETURN: Status 307a159c266SJung-uk Kim * 308a159c266SJung-uk Kim * DESCRIPTION: Dump a single Node 309a159c266SJung-uk Kim * This procedure is a UserFunction called by AcpiNsWalkNamespace. 310a159c266SJung-uk Kim * 311a159c266SJung-uk Kim ******************************************************************************/ 312a159c266SJung-uk Kim 313a159c266SJung-uk Kim ACPI_STATUS 314a159c266SJung-uk Kim AcpiNsDumpOneObject ( 315a159c266SJung-uk Kim ACPI_HANDLE ObjHandle, 316a159c266SJung-uk Kim UINT32 Level, 317a159c266SJung-uk Kim void *Context, 318a159c266SJung-uk Kim void **ReturnValue) 319a159c266SJung-uk Kim { 320a159c266SJung-uk Kim ACPI_WALK_INFO *Info = (ACPI_WALK_INFO *) Context; 321a159c266SJung-uk Kim ACPI_NAMESPACE_NODE *ThisNode; 322a159c266SJung-uk Kim ACPI_OPERAND_OBJECT *ObjDesc = NULL; 323a159c266SJung-uk Kim ACPI_OBJECT_TYPE ObjType; 324a159c266SJung-uk Kim ACPI_OBJECT_TYPE Type; 325a159c266SJung-uk Kim UINT32 BytesToDump; 326a159c266SJung-uk Kim UINT32 DbgLevel; 327a159c266SJung-uk Kim UINT32 i; 328a159c266SJung-uk Kim 329a159c266SJung-uk Kim 330a159c266SJung-uk Kim ACPI_FUNCTION_NAME (NsDumpOneObject); 331a159c266SJung-uk Kim 332a159c266SJung-uk Kim 333a159c266SJung-uk Kim /* Is output enabled? */ 334a159c266SJung-uk Kim 335a159c266SJung-uk Kim if (!(AcpiDbgLevel & Info->DebugLevel)) 336a159c266SJung-uk Kim { 337a159c266SJung-uk Kim return (AE_OK); 338a159c266SJung-uk Kim } 339a159c266SJung-uk Kim 340a159c266SJung-uk Kim if (!ObjHandle) 341a159c266SJung-uk Kim { 342a159c266SJung-uk Kim ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Null object handle\n")); 343a159c266SJung-uk Kim return (AE_OK); 344a159c266SJung-uk Kim } 345a159c266SJung-uk Kim 346a159c266SJung-uk Kim ThisNode = AcpiNsValidateHandle (ObjHandle); 347a159c266SJung-uk Kim if (!ThisNode) 348a159c266SJung-uk Kim { 349a159c266SJung-uk Kim ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Invalid object handle %p\n", 350a159c266SJung-uk Kim ObjHandle)); 351a159c266SJung-uk Kim return (AE_OK); 352a159c266SJung-uk Kim } 353a159c266SJung-uk Kim 354a159c266SJung-uk Kim Type = ThisNode->Type; 3553d90091dSJung-uk Kim Info->Count++; 356a159c266SJung-uk Kim 357a159c266SJung-uk Kim /* Check if the owner matches */ 358a159c266SJung-uk Kim 359a159c266SJung-uk Kim if ((Info->OwnerId != ACPI_OWNER_ID_MAX) && 360a159c266SJung-uk Kim (Info->OwnerId != ThisNode->OwnerId)) 361a159c266SJung-uk Kim { 362a159c266SJung-uk Kim return (AE_OK); 363a159c266SJung-uk Kim } 364a159c266SJung-uk Kim 365a159c266SJung-uk Kim if (!(Info->DisplayType & ACPI_DISPLAY_SHORT)) 366a159c266SJung-uk Kim { 367a159c266SJung-uk Kim /* Indent the object according to the level */ 368a159c266SJung-uk Kim 369a159c266SJung-uk Kim AcpiOsPrintf ("%2d%*s", (UINT32) Level - 1, (int) Level * 2, " "); 370a159c266SJung-uk Kim 371a159c266SJung-uk Kim /* Check the node type and name */ 372a159c266SJung-uk Kim 373a159c266SJung-uk Kim if (Type > ACPI_TYPE_LOCAL_MAX) 374a159c266SJung-uk Kim { 375f8146b88SJung-uk Kim ACPI_WARNING ((AE_INFO, 376f8146b88SJung-uk Kim "Invalid ACPI Object Type 0x%08X", Type)); 377a159c266SJung-uk Kim } 378a159c266SJung-uk Kim 379a159c266SJung-uk Kim AcpiOsPrintf ("%4.4s", AcpiUtGetNodeName (ThisNode)); 380a159c266SJung-uk Kim } 381a159c266SJung-uk Kim 382a159c266SJung-uk Kim /* Now we can print out the pertinent information */ 383a159c266SJung-uk Kim 384a009b7dcSJung-uk Kim AcpiOsPrintf (" %-12s %p %3.3X ", 385a159c266SJung-uk Kim AcpiUtGetTypeName (Type), ThisNode, ThisNode->OwnerId); 386a159c266SJung-uk Kim 387a159c266SJung-uk Kim DbgLevel = AcpiDbgLevel; 388a159c266SJung-uk Kim AcpiDbgLevel = 0; 389a159c266SJung-uk Kim ObjDesc = AcpiNsGetAttachedObject (ThisNode); 390a159c266SJung-uk Kim AcpiDbgLevel = DbgLevel; 391a159c266SJung-uk Kim 392a159c266SJung-uk Kim /* Temp nodes are those nodes created by a control method */ 393a159c266SJung-uk Kim 394a159c266SJung-uk Kim if (ThisNode->Flags & ANOBJ_TEMPORARY) 395a159c266SJung-uk Kim { 396a159c266SJung-uk Kim AcpiOsPrintf ("(T) "); 397a159c266SJung-uk Kim } 398a159c266SJung-uk Kim 399a159c266SJung-uk Kim switch (Info->DisplayType & ACPI_DISPLAY_MASK) 400a159c266SJung-uk Kim { 401a159c266SJung-uk Kim case ACPI_DISPLAY_SUMMARY: 402a159c266SJung-uk Kim 403a159c266SJung-uk Kim if (!ObjDesc) 404a159c266SJung-uk Kim { 4054c52cad2SJung-uk Kim /* No attached object. Some types should always have an object */ 4064c52cad2SJung-uk Kim 4074c52cad2SJung-uk Kim switch (Type) 4084c52cad2SJung-uk Kim { 4094c52cad2SJung-uk Kim case ACPI_TYPE_INTEGER: 4104c52cad2SJung-uk Kim case ACPI_TYPE_PACKAGE: 4114c52cad2SJung-uk Kim case ACPI_TYPE_BUFFER: 4124c52cad2SJung-uk Kim case ACPI_TYPE_STRING: 4134c52cad2SJung-uk Kim case ACPI_TYPE_METHOD: 414a9d8d09cSJung-uk Kim 4154c52cad2SJung-uk Kim AcpiOsPrintf ("<No attached object>"); 4164c52cad2SJung-uk Kim break; 4174c52cad2SJung-uk Kim 4184c52cad2SJung-uk Kim default: 419a9d8d09cSJung-uk Kim 4204c52cad2SJung-uk Kim break; 4214c52cad2SJung-uk Kim } 422a159c266SJung-uk Kim 423a159c266SJung-uk Kim AcpiOsPrintf ("\n"); 424a159c266SJung-uk Kim return (AE_OK); 425a159c266SJung-uk Kim } 426a159c266SJung-uk Kim 427a159c266SJung-uk Kim switch (Type) 428a159c266SJung-uk Kim { 429a159c266SJung-uk Kim case ACPI_TYPE_PROCESSOR: 430a159c266SJung-uk Kim 4317cf3e94aSJung-uk Kim AcpiOsPrintf ("ID %02X Len %02X Addr %8.8X%8.8X\n", 432a159c266SJung-uk Kim ObjDesc->Processor.ProcId, ObjDesc->Processor.Length, 4337cf3e94aSJung-uk Kim ACPI_FORMAT_UINT64 (ObjDesc->Processor.Address)); 434a159c266SJung-uk Kim break; 435a159c266SJung-uk Kim 436a159c266SJung-uk Kim case ACPI_TYPE_DEVICE: 437a159c266SJung-uk Kim 438a159c266SJung-uk Kim AcpiOsPrintf ("Notify Object: %p\n", ObjDesc); 439a159c266SJung-uk Kim break; 440a159c266SJung-uk Kim 441a159c266SJung-uk Kim case ACPI_TYPE_METHOD: 442a159c266SJung-uk Kim 443a159c266SJung-uk Kim AcpiOsPrintf ("Args %X Len %.4X Aml %p\n", 444a159c266SJung-uk Kim (UINT32) ObjDesc->Method.ParamCount, 445a159c266SJung-uk Kim ObjDesc->Method.AmlLength, ObjDesc->Method.AmlStart); 446a159c266SJung-uk Kim break; 447a159c266SJung-uk Kim 448a159c266SJung-uk Kim case ACPI_TYPE_INTEGER: 449a159c266SJung-uk Kim 450a159c266SJung-uk Kim AcpiOsPrintf ("= %8.8X%8.8X\n", 451a159c266SJung-uk Kim ACPI_FORMAT_UINT64 (ObjDesc->Integer.Value)); 452a159c266SJung-uk Kim break; 453a159c266SJung-uk Kim 454a159c266SJung-uk Kim case ACPI_TYPE_PACKAGE: 455a159c266SJung-uk Kim 456a159c266SJung-uk Kim if (ObjDesc->Common.Flags & AOPOBJ_DATA_VALID) 457a159c266SJung-uk Kim { 458a159c266SJung-uk Kim AcpiOsPrintf ("Elements %.2X\n", 459a159c266SJung-uk Kim ObjDesc->Package.Count); 460a159c266SJung-uk Kim } 461a159c266SJung-uk Kim else 462a159c266SJung-uk Kim { 463a159c266SJung-uk Kim AcpiOsPrintf ("[Length not yet evaluated]\n"); 464a159c266SJung-uk Kim } 465a159c266SJung-uk Kim break; 466a159c266SJung-uk Kim 467a159c266SJung-uk Kim case ACPI_TYPE_BUFFER: 468a159c266SJung-uk Kim 469a159c266SJung-uk Kim if (ObjDesc->Common.Flags & AOPOBJ_DATA_VALID) 470a159c266SJung-uk Kim { 471a159c266SJung-uk Kim AcpiOsPrintf ("Len %.2X", 472a159c266SJung-uk Kim ObjDesc->Buffer.Length); 473a159c266SJung-uk Kim 474a159c266SJung-uk Kim /* Dump some of the buffer */ 475a159c266SJung-uk Kim 476a159c266SJung-uk Kim if (ObjDesc->Buffer.Length > 0) 477a159c266SJung-uk Kim { 478a159c266SJung-uk Kim AcpiOsPrintf (" ="); 479a159c266SJung-uk Kim for (i = 0; (i < ObjDesc->Buffer.Length && i < 12); i++) 480a159c266SJung-uk Kim { 481a009b7dcSJung-uk Kim AcpiOsPrintf (" %2.2X", ObjDesc->Buffer.Pointer[i]); 482a159c266SJung-uk Kim } 483a159c266SJung-uk Kim } 484a159c266SJung-uk Kim AcpiOsPrintf ("\n"); 485a159c266SJung-uk Kim } 486a159c266SJung-uk Kim else 487a159c266SJung-uk Kim { 488a159c266SJung-uk Kim AcpiOsPrintf ("[Length not yet evaluated]\n"); 489a159c266SJung-uk Kim } 490a159c266SJung-uk Kim break; 491a159c266SJung-uk Kim 492a159c266SJung-uk Kim case ACPI_TYPE_STRING: 493a159c266SJung-uk Kim 494a159c266SJung-uk Kim AcpiOsPrintf ("Len %.2X ", ObjDesc->String.Length); 4953920312eSJung-uk Kim AcpiUtPrintString (ObjDesc->String.Pointer, 80); 496a159c266SJung-uk Kim AcpiOsPrintf ("\n"); 497a159c266SJung-uk Kim break; 498a159c266SJung-uk Kim 499a159c266SJung-uk Kim case ACPI_TYPE_REGION: 500a159c266SJung-uk Kim 501a159c266SJung-uk Kim AcpiOsPrintf ("[%s]", 502a159c266SJung-uk Kim AcpiUtGetRegionName (ObjDesc->Region.SpaceId)); 503a159c266SJung-uk Kim if (ObjDesc->Region.Flags & AOPOBJ_DATA_VALID) 504a159c266SJung-uk Kim { 505a159c266SJung-uk Kim AcpiOsPrintf (" Addr %8.8X%8.8X Len %.4X\n", 5067cf3e94aSJung-uk Kim ACPI_FORMAT_UINT64 (ObjDesc->Region.Address), 507a159c266SJung-uk Kim ObjDesc->Region.Length); 508a159c266SJung-uk Kim } 509a159c266SJung-uk Kim else 510a159c266SJung-uk Kim { 511a159c266SJung-uk Kim AcpiOsPrintf (" [Address/Length not yet evaluated]\n"); 512a159c266SJung-uk Kim } 513a159c266SJung-uk Kim break; 514a159c266SJung-uk Kim 515a159c266SJung-uk Kim case ACPI_TYPE_LOCAL_REFERENCE: 516a159c266SJung-uk Kim 517a159c266SJung-uk Kim AcpiOsPrintf ("[%s]\n", AcpiUtGetReferenceName (ObjDesc)); 518a159c266SJung-uk Kim break; 519a159c266SJung-uk Kim 520a159c266SJung-uk Kim case ACPI_TYPE_BUFFER_FIELD: 521a159c266SJung-uk Kim 522a159c266SJung-uk Kim if (ObjDesc->BufferField.BufferObj && 523a159c266SJung-uk Kim ObjDesc->BufferField.BufferObj->Buffer.Node) 524a159c266SJung-uk Kim { 525a159c266SJung-uk Kim AcpiOsPrintf ("Buf [%4.4s]", 526a159c266SJung-uk Kim AcpiUtGetNodeName ( 527a159c266SJung-uk Kim ObjDesc->BufferField.BufferObj->Buffer.Node)); 528a159c266SJung-uk Kim } 529a159c266SJung-uk Kim break; 530a159c266SJung-uk Kim 531a159c266SJung-uk Kim case ACPI_TYPE_LOCAL_REGION_FIELD: 532a159c266SJung-uk Kim 533a159c266SJung-uk Kim AcpiOsPrintf ("Rgn [%4.4s]", 534a159c266SJung-uk Kim AcpiUtGetNodeName ( 535a159c266SJung-uk Kim ObjDesc->CommonField.RegionObj->Region.Node)); 536a159c266SJung-uk Kim break; 537a159c266SJung-uk Kim 538a159c266SJung-uk Kim case ACPI_TYPE_LOCAL_BANK_FIELD: 539a159c266SJung-uk Kim 540a159c266SJung-uk Kim AcpiOsPrintf ("Rgn [%4.4s] Bnk [%4.4s]", 541a159c266SJung-uk Kim AcpiUtGetNodeName ( 542a159c266SJung-uk Kim ObjDesc->CommonField.RegionObj->Region.Node), 543a159c266SJung-uk Kim AcpiUtGetNodeName ( 544a159c266SJung-uk Kim ObjDesc->BankField.BankObj->CommonField.Node)); 545a159c266SJung-uk Kim break; 546a159c266SJung-uk Kim 547a159c266SJung-uk Kim case ACPI_TYPE_LOCAL_INDEX_FIELD: 548a159c266SJung-uk Kim 549a159c266SJung-uk Kim AcpiOsPrintf ("Idx [%4.4s] Dat [%4.4s]", 550a159c266SJung-uk Kim AcpiUtGetNodeName ( 551a159c266SJung-uk Kim ObjDesc->IndexField.IndexObj->CommonField.Node), 552a159c266SJung-uk Kim AcpiUtGetNodeName ( 553a159c266SJung-uk Kim ObjDesc->IndexField.DataObj->CommonField.Node)); 554a159c266SJung-uk Kim break; 555a159c266SJung-uk Kim 556a159c266SJung-uk Kim case ACPI_TYPE_LOCAL_ALIAS: 557a159c266SJung-uk Kim case ACPI_TYPE_LOCAL_METHOD_ALIAS: 558a159c266SJung-uk Kim 559a159c266SJung-uk Kim AcpiOsPrintf ("Target %4.4s (%p)\n", 560a159c266SJung-uk Kim AcpiUtGetNodeName (ObjDesc), ObjDesc); 561a159c266SJung-uk Kim break; 562a159c266SJung-uk Kim 563a159c266SJung-uk Kim default: 564a159c266SJung-uk Kim 565a159c266SJung-uk Kim AcpiOsPrintf ("Object %p\n", ObjDesc); 566a159c266SJung-uk Kim break; 567a159c266SJung-uk Kim } 568a159c266SJung-uk Kim 569a159c266SJung-uk Kim /* Common field handling */ 570a159c266SJung-uk Kim 571a159c266SJung-uk Kim switch (Type) 572a159c266SJung-uk Kim { 573a159c266SJung-uk Kim case ACPI_TYPE_BUFFER_FIELD: 574a159c266SJung-uk Kim case ACPI_TYPE_LOCAL_REGION_FIELD: 575a159c266SJung-uk Kim case ACPI_TYPE_LOCAL_BANK_FIELD: 576a159c266SJung-uk Kim case ACPI_TYPE_LOCAL_INDEX_FIELD: 577a159c266SJung-uk Kim 578a009b7dcSJung-uk Kim AcpiOsPrintf (" Off %.3X Len %.2X Acc %.2X\n", 579a159c266SJung-uk Kim (ObjDesc->CommonField.BaseByteOffset * 8) 580a159c266SJung-uk Kim + ObjDesc->CommonField.StartFieldBitOffset, 581a159c266SJung-uk Kim ObjDesc->CommonField.BitLength, 582a159c266SJung-uk Kim ObjDesc->CommonField.AccessByteWidth); 583a159c266SJung-uk Kim break; 584a159c266SJung-uk Kim 585a159c266SJung-uk Kim default: 586a9d8d09cSJung-uk Kim 587a159c266SJung-uk Kim break; 588a159c266SJung-uk Kim } 589a159c266SJung-uk Kim break; 590a159c266SJung-uk Kim 591a159c266SJung-uk Kim case ACPI_DISPLAY_OBJECTS: 592a159c266SJung-uk Kim 593a159c266SJung-uk Kim AcpiOsPrintf ("O:%p", ObjDesc); 594a159c266SJung-uk Kim if (!ObjDesc) 595a159c266SJung-uk Kim { 596a159c266SJung-uk Kim /* No attached object, we are done */ 597a159c266SJung-uk Kim 598a159c266SJung-uk Kim AcpiOsPrintf ("\n"); 599a159c266SJung-uk Kim return (AE_OK); 600a159c266SJung-uk Kim } 601a159c266SJung-uk Kim 602a159c266SJung-uk Kim AcpiOsPrintf ("(R%u)", ObjDesc->Common.ReferenceCount); 603a159c266SJung-uk Kim 604a159c266SJung-uk Kim switch (Type) 605a159c266SJung-uk Kim { 606a159c266SJung-uk Kim case ACPI_TYPE_METHOD: 607a159c266SJung-uk Kim 608a159c266SJung-uk Kim /* Name is a Method and its AML offset/length are set */ 609a159c266SJung-uk Kim 610a159c266SJung-uk Kim AcpiOsPrintf (" M:%p-%X\n", ObjDesc->Method.AmlStart, 611a159c266SJung-uk Kim ObjDesc->Method.AmlLength); 612a159c266SJung-uk Kim break; 613a159c266SJung-uk Kim 614a159c266SJung-uk Kim case ACPI_TYPE_INTEGER: 615a159c266SJung-uk Kim 616a159c266SJung-uk Kim AcpiOsPrintf (" I:%8.8X8.8%X\n", 617a159c266SJung-uk Kim ACPI_FORMAT_UINT64 (ObjDesc->Integer.Value)); 618a159c266SJung-uk Kim break; 619a159c266SJung-uk Kim 620a159c266SJung-uk Kim case ACPI_TYPE_STRING: 621a159c266SJung-uk Kim 622a159c266SJung-uk Kim AcpiOsPrintf (" S:%p-%X\n", ObjDesc->String.Pointer, 623a159c266SJung-uk Kim ObjDesc->String.Length); 624a159c266SJung-uk Kim break; 625a159c266SJung-uk Kim 626a159c266SJung-uk Kim case ACPI_TYPE_BUFFER: 627a159c266SJung-uk Kim 628a159c266SJung-uk Kim AcpiOsPrintf (" B:%p-%X\n", ObjDesc->Buffer.Pointer, 629a159c266SJung-uk Kim ObjDesc->Buffer.Length); 630a159c266SJung-uk Kim break; 631a159c266SJung-uk Kim 632a159c266SJung-uk Kim default: 633a159c266SJung-uk Kim 634a159c266SJung-uk Kim AcpiOsPrintf ("\n"); 635a159c266SJung-uk Kim break; 636a159c266SJung-uk Kim } 637a159c266SJung-uk Kim break; 638a159c266SJung-uk Kim 639a159c266SJung-uk Kim default: 640a159c266SJung-uk Kim AcpiOsPrintf ("\n"); 641a159c266SJung-uk Kim break; 642a159c266SJung-uk Kim } 643a159c266SJung-uk Kim 644a159c266SJung-uk Kim /* If debug turned off, done */ 645a159c266SJung-uk Kim 646a159c266SJung-uk Kim if (!(AcpiDbgLevel & ACPI_LV_VALUES)) 647a159c266SJung-uk Kim { 648a159c266SJung-uk Kim return (AE_OK); 649a159c266SJung-uk Kim } 650a159c266SJung-uk Kim 651a159c266SJung-uk Kim /* If there is an attached object, display it */ 652a159c266SJung-uk Kim 653a159c266SJung-uk Kim DbgLevel = AcpiDbgLevel; 654a159c266SJung-uk Kim AcpiDbgLevel = 0; 655a159c266SJung-uk Kim ObjDesc = AcpiNsGetAttachedObject (ThisNode); 656a159c266SJung-uk Kim AcpiDbgLevel = DbgLevel; 657a159c266SJung-uk Kim 658a159c266SJung-uk Kim /* Dump attached objects */ 659a159c266SJung-uk Kim 660a159c266SJung-uk Kim while (ObjDesc) 661a159c266SJung-uk Kim { 662a159c266SJung-uk Kim ObjType = ACPI_TYPE_INVALID; 663a159c266SJung-uk Kim AcpiOsPrintf ("Attached Object %p: ", ObjDesc); 664a159c266SJung-uk Kim 665a159c266SJung-uk Kim /* Decode the type of attached object and dump the contents */ 666a159c266SJung-uk Kim 667a159c266SJung-uk Kim switch (ACPI_GET_DESCRIPTOR_TYPE (ObjDesc)) 668a159c266SJung-uk Kim { 669a159c266SJung-uk Kim case ACPI_DESC_TYPE_NAMED: 670a159c266SJung-uk Kim 671a159c266SJung-uk Kim AcpiOsPrintf ("(Ptr to Node)\n"); 672a159c266SJung-uk Kim BytesToDump = sizeof (ACPI_NAMESPACE_NODE); 673a159c266SJung-uk Kim ACPI_DUMP_BUFFER (ObjDesc, BytesToDump); 674a159c266SJung-uk Kim break; 675a159c266SJung-uk Kim 676a159c266SJung-uk Kim case ACPI_DESC_TYPE_OPERAND: 677a159c266SJung-uk Kim 678a159c266SJung-uk Kim ObjType = ObjDesc->Common.Type; 679a159c266SJung-uk Kim 680a159c266SJung-uk Kim if (ObjType > ACPI_TYPE_LOCAL_MAX) 681a159c266SJung-uk Kim { 682f8146b88SJung-uk Kim AcpiOsPrintf ( 683f8146b88SJung-uk Kim "(Pointer to ACPI Object type %.2X [UNKNOWN])\n", 684a159c266SJung-uk Kim ObjType); 685f8146b88SJung-uk Kim 686a159c266SJung-uk Kim BytesToDump = 32; 687a159c266SJung-uk Kim } 688a159c266SJung-uk Kim else 689a159c266SJung-uk Kim { 690f8146b88SJung-uk Kim AcpiOsPrintf ( 691f8146b88SJung-uk Kim "(Pointer to ACPI Object type %.2X [%s])\n", 692a159c266SJung-uk Kim ObjType, AcpiUtGetTypeName (ObjType)); 693f8146b88SJung-uk Kim 694a159c266SJung-uk Kim BytesToDump = sizeof (ACPI_OPERAND_OBJECT); 695a159c266SJung-uk Kim } 696a159c266SJung-uk Kim 697a159c266SJung-uk Kim ACPI_DUMP_BUFFER (ObjDesc, BytesToDump); 698a159c266SJung-uk Kim break; 699a159c266SJung-uk Kim 700a159c266SJung-uk Kim default: 701a159c266SJung-uk Kim 702a159c266SJung-uk Kim break; 703a159c266SJung-uk Kim } 704a159c266SJung-uk Kim 705a159c266SJung-uk Kim /* If value is NOT an internal object, we are done */ 706a159c266SJung-uk Kim 707a159c266SJung-uk Kim if (ACPI_GET_DESCRIPTOR_TYPE (ObjDesc) != ACPI_DESC_TYPE_OPERAND) 708a159c266SJung-uk Kim { 709a159c266SJung-uk Kim goto Cleanup; 710a159c266SJung-uk Kim } 711a159c266SJung-uk Kim 712a159c266SJung-uk Kim /* Valid object, get the pointer to next level, if any */ 713a159c266SJung-uk Kim 714a159c266SJung-uk Kim switch (ObjType) 715a159c266SJung-uk Kim { 716a159c266SJung-uk Kim case ACPI_TYPE_BUFFER: 717a159c266SJung-uk Kim case ACPI_TYPE_STRING: 718a159c266SJung-uk Kim /* 719a159c266SJung-uk Kim * NOTE: takes advantage of common fields between string/buffer 720a159c266SJung-uk Kim */ 721a159c266SJung-uk Kim BytesToDump = ObjDesc->String.Length; 722a159c266SJung-uk Kim ObjDesc = (void *) ObjDesc->String.Pointer; 723f8146b88SJung-uk Kim 724a159c266SJung-uk Kim AcpiOsPrintf ("(Buffer/String pointer %p length %X)\n", 725a159c266SJung-uk Kim ObjDesc, BytesToDump); 726a159c266SJung-uk Kim ACPI_DUMP_BUFFER (ObjDesc, BytesToDump); 727a159c266SJung-uk Kim goto Cleanup; 728a159c266SJung-uk Kim 729a159c266SJung-uk Kim case ACPI_TYPE_BUFFER_FIELD: 730a9d8d09cSJung-uk Kim 731a159c266SJung-uk Kim ObjDesc = (ACPI_OPERAND_OBJECT *) ObjDesc->BufferField.BufferObj; 732a159c266SJung-uk Kim break; 733a159c266SJung-uk Kim 734a159c266SJung-uk Kim case ACPI_TYPE_PACKAGE: 735a9d8d09cSJung-uk Kim 736a159c266SJung-uk Kim ObjDesc = (void *) ObjDesc->Package.Elements; 737a159c266SJung-uk Kim break; 738a159c266SJung-uk Kim 739a159c266SJung-uk Kim case ACPI_TYPE_METHOD: 740a9d8d09cSJung-uk Kim 741a159c266SJung-uk Kim ObjDesc = (void *) ObjDesc->Method.AmlStart; 742a159c266SJung-uk Kim break; 743a159c266SJung-uk Kim 744a159c266SJung-uk Kim case ACPI_TYPE_LOCAL_REGION_FIELD: 745a9d8d09cSJung-uk Kim 746a159c266SJung-uk Kim ObjDesc = (void *) ObjDesc->Field.RegionObj; 747a159c266SJung-uk Kim break; 748a159c266SJung-uk Kim 749a159c266SJung-uk Kim case ACPI_TYPE_LOCAL_BANK_FIELD: 750a9d8d09cSJung-uk Kim 751a159c266SJung-uk Kim ObjDesc = (void *) ObjDesc->BankField.RegionObj; 752a159c266SJung-uk Kim break; 753a159c266SJung-uk Kim 754a159c266SJung-uk Kim case ACPI_TYPE_LOCAL_INDEX_FIELD: 755a9d8d09cSJung-uk Kim 756a159c266SJung-uk Kim ObjDesc = (void *) ObjDesc->IndexField.IndexObj; 757a159c266SJung-uk Kim break; 758a159c266SJung-uk Kim 759a159c266SJung-uk Kim default: 760a9d8d09cSJung-uk Kim 761a159c266SJung-uk Kim goto Cleanup; 762a159c266SJung-uk Kim } 763a159c266SJung-uk Kim } 764a159c266SJung-uk Kim 765a159c266SJung-uk Kim Cleanup: 766a159c266SJung-uk Kim AcpiOsPrintf ("\n"); 767a159c266SJung-uk Kim return (AE_OK); 768a159c266SJung-uk Kim } 769a159c266SJung-uk Kim 770a159c266SJung-uk Kim 771a159c266SJung-uk Kim /******************************************************************************* 772a159c266SJung-uk Kim * 773a159c266SJung-uk Kim * FUNCTION: AcpiNsDumpObjects 774a159c266SJung-uk Kim * 775a159c266SJung-uk Kim * PARAMETERS: Type - Object type to be dumped 776a159c266SJung-uk Kim * DisplayType - 0 or ACPI_DISPLAY_SUMMARY 777a159c266SJung-uk Kim * MaxDepth - Maximum depth of dump. Use ACPI_UINT32_MAX 778a159c266SJung-uk Kim * for an effectively unlimited depth. 779a159c266SJung-uk Kim * OwnerId - Dump only objects owned by this ID. Use 780a159c266SJung-uk Kim * ACPI_UINT32_MAX to match all owners. 781a159c266SJung-uk Kim * StartHandle - Where in namespace to start/end search 782a159c266SJung-uk Kim * 783a159c266SJung-uk Kim * RETURN: None 784a159c266SJung-uk Kim * 785a159c266SJung-uk Kim * DESCRIPTION: Dump typed objects within the loaded namespace. Uses 786a159c266SJung-uk Kim * AcpiNsWalkNamespace in conjunction with AcpiNsDumpOneObject. 787a159c266SJung-uk Kim * 788a159c266SJung-uk Kim ******************************************************************************/ 789a159c266SJung-uk Kim 790a159c266SJung-uk Kim void 791a159c266SJung-uk Kim AcpiNsDumpObjects ( 792a159c266SJung-uk Kim ACPI_OBJECT_TYPE Type, 793a159c266SJung-uk Kim UINT8 DisplayType, 794a159c266SJung-uk Kim UINT32 MaxDepth, 795a159c266SJung-uk Kim ACPI_OWNER_ID OwnerId, 796a159c266SJung-uk Kim ACPI_HANDLE StartHandle) 797a159c266SJung-uk Kim { 798a159c266SJung-uk Kim ACPI_WALK_INFO Info; 799a159c266SJung-uk Kim ACPI_STATUS Status; 800a159c266SJung-uk Kim 801a159c266SJung-uk Kim 802a159c266SJung-uk Kim ACPI_FUNCTION_ENTRY (); 803a159c266SJung-uk Kim 804a159c266SJung-uk Kim 805a159c266SJung-uk Kim /* 806a159c266SJung-uk Kim * Just lock the entire namespace for the duration of the dump. 807a159c266SJung-uk Kim * We don't want any changes to the namespace during this time, 808a159c266SJung-uk Kim * especially the temporary nodes since we are going to display 809a159c266SJung-uk Kim * them also. 810a159c266SJung-uk Kim */ 811a159c266SJung-uk Kim Status = AcpiUtAcquireMutex (ACPI_MTX_NAMESPACE); 812a159c266SJung-uk Kim if (ACPI_FAILURE (Status)) 813a159c266SJung-uk Kim { 814a159c266SJung-uk Kim AcpiOsPrintf ("Could not acquire namespace mutex\n"); 815a159c266SJung-uk Kim return; 816a159c266SJung-uk Kim } 817a159c266SJung-uk Kim 8183d90091dSJung-uk Kim Info.Count = 0; 819a159c266SJung-uk Kim Info.DebugLevel = ACPI_LV_TABLES; 820a159c266SJung-uk Kim Info.OwnerId = OwnerId; 821a159c266SJung-uk Kim Info.DisplayType = DisplayType; 822a159c266SJung-uk Kim 823a159c266SJung-uk Kim (void) AcpiNsWalkNamespace (Type, StartHandle, MaxDepth, 824a159c266SJung-uk Kim ACPI_NS_WALK_NO_UNLOCK | ACPI_NS_WALK_TEMP_NODES, 825a159c266SJung-uk Kim AcpiNsDumpOneObject, NULL, (void *) &Info, NULL); 826a159c266SJung-uk Kim 8273d90091dSJung-uk Kim AcpiOsPrintf ("\nNamespace node count: %u\n\n", Info.Count); 828a159c266SJung-uk Kim (void) AcpiUtReleaseMutex (ACPI_MTX_NAMESPACE); 829a159c266SJung-uk Kim } 830a159c266SJung-uk Kim 831a159c266SJung-uk Kim 832a159c266SJung-uk Kim /******************************************************************************* 833a159c266SJung-uk Kim * 83479c6d946SJung-uk Kim * FUNCTION: AcpiNsDumpOneObjectPath, AcpiNsGetMaxDepth 83579c6d946SJung-uk Kim * 83679c6d946SJung-uk Kim * PARAMETERS: ObjHandle - Node to be dumped 83779c6d946SJung-uk Kim * Level - Nesting level of the handle 83879c6d946SJung-uk Kim * Context - Passed into WalkNamespace 83979c6d946SJung-uk Kim * ReturnValue - Not used 84079c6d946SJung-uk Kim * 84179c6d946SJung-uk Kim * RETURN: Status 84279c6d946SJung-uk Kim * 84379c6d946SJung-uk Kim * DESCRIPTION: Dump the full pathname to a namespace object. AcpNsGetMaxDepth 84479c6d946SJung-uk Kim * computes the maximum nesting depth in the namespace tree, in 84579c6d946SJung-uk Kim * order to simplify formatting in AcpiNsDumpOneObjectPath. 84679c6d946SJung-uk Kim * These procedures are UserFunctions called by AcpiNsWalkNamespace. 84779c6d946SJung-uk Kim * 84879c6d946SJung-uk Kim ******************************************************************************/ 84979c6d946SJung-uk Kim 85079c6d946SJung-uk Kim static ACPI_STATUS 85179c6d946SJung-uk Kim AcpiNsDumpOneObjectPath ( 85279c6d946SJung-uk Kim ACPI_HANDLE ObjHandle, 85379c6d946SJung-uk Kim UINT32 Level, 85479c6d946SJung-uk Kim void *Context, 85579c6d946SJung-uk Kim void **ReturnValue) 85679c6d946SJung-uk Kim { 85779c6d946SJung-uk Kim UINT32 MaxLevel = *((UINT32 *) Context); 85879c6d946SJung-uk Kim char *Pathname; 85979c6d946SJung-uk Kim ACPI_NAMESPACE_NODE *Node; 86079c6d946SJung-uk Kim int PathIndent; 86179c6d946SJung-uk Kim 86279c6d946SJung-uk Kim 86379c6d946SJung-uk Kim if (!ObjHandle) 86479c6d946SJung-uk Kim { 86579c6d946SJung-uk Kim return (AE_OK); 86679c6d946SJung-uk Kim } 86779c6d946SJung-uk Kim 86879c6d946SJung-uk Kim Node = AcpiNsValidateHandle (ObjHandle); 869313a0c13SJung-uk Kim if (!Node) 870313a0c13SJung-uk Kim { 871313a0c13SJung-uk Kim /* Ignore bad node during namespace walk */ 872313a0c13SJung-uk Kim 873313a0c13SJung-uk Kim return (AE_OK); 874313a0c13SJung-uk Kim } 875313a0c13SJung-uk Kim 876f8146b88SJung-uk Kim Pathname = AcpiNsGetNormalizedPathname (Node, TRUE); 87779c6d946SJung-uk Kim 87879c6d946SJung-uk Kim PathIndent = 1; 87979c6d946SJung-uk Kim if (Level <= MaxLevel) 88079c6d946SJung-uk Kim { 88179c6d946SJung-uk Kim PathIndent = MaxLevel - Level + 1; 88279c6d946SJung-uk Kim } 88379c6d946SJung-uk Kim 88479c6d946SJung-uk Kim AcpiOsPrintf ("%2d%*s%-12s%*s", 88579c6d946SJung-uk Kim Level, Level, " ", AcpiUtGetTypeName (Node->Type), 88679c6d946SJung-uk Kim PathIndent, " "); 88779c6d946SJung-uk Kim 88879c6d946SJung-uk Kim AcpiOsPrintf ("%s\n", &Pathname[1]); 88979c6d946SJung-uk Kim ACPI_FREE (Pathname); 89079c6d946SJung-uk Kim return (AE_OK); 89179c6d946SJung-uk Kim } 89279c6d946SJung-uk Kim 89379c6d946SJung-uk Kim 89479c6d946SJung-uk Kim static ACPI_STATUS 89579c6d946SJung-uk Kim AcpiNsGetMaxDepth ( 89679c6d946SJung-uk Kim ACPI_HANDLE ObjHandle, 89779c6d946SJung-uk Kim UINT32 Level, 89879c6d946SJung-uk Kim void *Context, 89979c6d946SJung-uk Kim void **ReturnValue) 90079c6d946SJung-uk Kim { 90179c6d946SJung-uk Kim UINT32 *MaxLevel = (UINT32 *) Context; 90279c6d946SJung-uk Kim 90379c6d946SJung-uk Kim 90479c6d946SJung-uk Kim if (Level > *MaxLevel) 90579c6d946SJung-uk Kim { 90679c6d946SJung-uk Kim *MaxLevel = Level; 90779c6d946SJung-uk Kim } 90879c6d946SJung-uk Kim return (AE_OK); 90979c6d946SJung-uk Kim } 91079c6d946SJung-uk Kim 91179c6d946SJung-uk Kim 91279c6d946SJung-uk Kim /******************************************************************************* 91379c6d946SJung-uk Kim * 91479c6d946SJung-uk Kim * FUNCTION: AcpiNsDumpObjectPaths 91579c6d946SJung-uk Kim * 91679c6d946SJung-uk Kim * PARAMETERS: Type - Object type to be dumped 91779c6d946SJung-uk Kim * DisplayType - 0 or ACPI_DISPLAY_SUMMARY 91879c6d946SJung-uk Kim * MaxDepth - Maximum depth of dump. Use ACPI_UINT32_MAX 91979c6d946SJung-uk Kim * for an effectively unlimited depth. 92079c6d946SJung-uk Kim * OwnerId - Dump only objects owned by this ID. Use 92179c6d946SJung-uk Kim * ACPI_UINT32_MAX to match all owners. 92279c6d946SJung-uk Kim * StartHandle - Where in namespace to start/end search 92379c6d946SJung-uk Kim * 92479c6d946SJung-uk Kim * RETURN: None 92579c6d946SJung-uk Kim * 92679c6d946SJung-uk Kim * DESCRIPTION: Dump full object pathnames within the loaded namespace. Uses 92779c6d946SJung-uk Kim * AcpiNsWalkNamespace in conjunction with AcpiNsDumpOneObjectPath. 92879c6d946SJung-uk Kim * 92979c6d946SJung-uk Kim ******************************************************************************/ 93079c6d946SJung-uk Kim 93179c6d946SJung-uk Kim void 93279c6d946SJung-uk Kim AcpiNsDumpObjectPaths ( 93379c6d946SJung-uk Kim ACPI_OBJECT_TYPE Type, 93479c6d946SJung-uk Kim UINT8 DisplayType, 93579c6d946SJung-uk Kim UINT32 MaxDepth, 93679c6d946SJung-uk Kim ACPI_OWNER_ID OwnerId, 93779c6d946SJung-uk Kim ACPI_HANDLE StartHandle) 93879c6d946SJung-uk Kim { 93979c6d946SJung-uk Kim ACPI_STATUS Status; 94079c6d946SJung-uk Kim UINT32 MaxLevel = 0; 94179c6d946SJung-uk Kim 94279c6d946SJung-uk Kim 94379c6d946SJung-uk Kim ACPI_FUNCTION_ENTRY (); 94479c6d946SJung-uk Kim 94579c6d946SJung-uk Kim 94679c6d946SJung-uk Kim /* 94779c6d946SJung-uk Kim * Just lock the entire namespace for the duration of the dump. 94879c6d946SJung-uk Kim * We don't want any changes to the namespace during this time, 94979c6d946SJung-uk Kim * especially the temporary nodes since we are going to display 95079c6d946SJung-uk Kim * them also. 95179c6d946SJung-uk Kim */ 95279c6d946SJung-uk Kim Status = AcpiUtAcquireMutex (ACPI_MTX_NAMESPACE); 95379c6d946SJung-uk Kim if (ACPI_FAILURE (Status)) 95479c6d946SJung-uk Kim { 95579c6d946SJung-uk Kim AcpiOsPrintf ("Could not acquire namespace mutex\n"); 95679c6d946SJung-uk Kim return; 95779c6d946SJung-uk Kim } 95879c6d946SJung-uk Kim 95979c6d946SJung-uk Kim /* Get the max depth of the namespace tree, for formatting later */ 96079c6d946SJung-uk Kim 96179c6d946SJung-uk Kim (void) AcpiNsWalkNamespace (Type, StartHandle, MaxDepth, 96279c6d946SJung-uk Kim ACPI_NS_WALK_NO_UNLOCK | ACPI_NS_WALK_TEMP_NODES, 96379c6d946SJung-uk Kim AcpiNsGetMaxDepth, NULL, (void *) &MaxLevel, NULL); 96479c6d946SJung-uk Kim 96579c6d946SJung-uk Kim /* Now dump the entire namespace */ 96679c6d946SJung-uk Kim 96779c6d946SJung-uk Kim (void) AcpiNsWalkNamespace (Type, StartHandle, MaxDepth, 96879c6d946SJung-uk Kim ACPI_NS_WALK_NO_UNLOCK | ACPI_NS_WALK_TEMP_NODES, 96979c6d946SJung-uk Kim AcpiNsDumpOneObjectPath, NULL, (void *) &MaxLevel, NULL); 97079c6d946SJung-uk Kim 97179c6d946SJung-uk Kim (void) AcpiUtReleaseMutex (ACPI_MTX_NAMESPACE); 97279c6d946SJung-uk Kim } 97379c6d946SJung-uk Kim 97479c6d946SJung-uk Kim 97579c6d946SJung-uk Kim /******************************************************************************* 97679c6d946SJung-uk Kim * 977a159c266SJung-uk Kim * FUNCTION: AcpiNsDumpEntry 978a159c266SJung-uk Kim * 979a159c266SJung-uk Kim * PARAMETERS: Handle - Node to be dumped 980a159c266SJung-uk Kim * DebugLevel - Output level 981a159c266SJung-uk Kim * 982a159c266SJung-uk Kim * RETURN: None 983a159c266SJung-uk Kim * 984a159c266SJung-uk Kim * DESCRIPTION: Dump a single Node 985a159c266SJung-uk Kim * 986a159c266SJung-uk Kim ******************************************************************************/ 987a159c266SJung-uk Kim 988a159c266SJung-uk Kim void 989a159c266SJung-uk Kim AcpiNsDumpEntry ( 990a159c266SJung-uk Kim ACPI_HANDLE Handle, 991a159c266SJung-uk Kim UINT32 DebugLevel) 992a159c266SJung-uk Kim { 993a159c266SJung-uk Kim ACPI_WALK_INFO Info; 994a159c266SJung-uk Kim 995a159c266SJung-uk Kim 996a159c266SJung-uk Kim ACPI_FUNCTION_ENTRY (); 997a159c266SJung-uk Kim 998a159c266SJung-uk Kim 999a159c266SJung-uk Kim Info.DebugLevel = DebugLevel; 1000a159c266SJung-uk Kim Info.OwnerId = ACPI_OWNER_ID_MAX; 1001a159c266SJung-uk Kim Info.DisplayType = ACPI_DISPLAY_SUMMARY; 1002a159c266SJung-uk Kim 1003a159c266SJung-uk Kim (void) AcpiNsDumpOneObject (Handle, 1, &Info, NULL); 1004a159c266SJung-uk Kim } 1005a159c266SJung-uk Kim 1006a159c266SJung-uk Kim 1007a159c266SJung-uk Kim #ifdef ACPI_ASL_COMPILER 1008a159c266SJung-uk Kim /******************************************************************************* 1009a159c266SJung-uk Kim * 1010a159c266SJung-uk Kim * FUNCTION: AcpiNsDumpTables 1011a159c266SJung-uk Kim * 1012a159c266SJung-uk Kim * PARAMETERS: SearchBase - Root of subtree to be dumped, or 1013a159c266SJung-uk Kim * NS_ALL to dump the entire namespace 1014a159c266SJung-uk Kim * MaxDepth - Maximum depth of dump. Use INT_MAX 1015a159c266SJung-uk Kim * for an effectively unlimited depth. 1016a159c266SJung-uk Kim * 1017a159c266SJung-uk Kim * RETURN: None 1018a159c266SJung-uk Kim * 1019a159c266SJung-uk Kim * DESCRIPTION: Dump the name space, or a portion of it. 1020a159c266SJung-uk Kim * 1021a159c266SJung-uk Kim ******************************************************************************/ 1022a159c266SJung-uk Kim 1023a159c266SJung-uk Kim void 1024a159c266SJung-uk Kim AcpiNsDumpTables ( 1025a159c266SJung-uk Kim ACPI_HANDLE SearchBase, 1026a159c266SJung-uk Kim UINT32 MaxDepth) 1027a159c266SJung-uk Kim { 1028a159c266SJung-uk Kim ACPI_HANDLE SearchHandle = SearchBase; 1029a159c266SJung-uk Kim 1030a159c266SJung-uk Kim 1031a159c266SJung-uk Kim ACPI_FUNCTION_TRACE (NsDumpTables); 1032a159c266SJung-uk Kim 1033a159c266SJung-uk Kim 1034a159c266SJung-uk Kim if (!AcpiGbl_RootNode) 1035a159c266SJung-uk Kim { 1036a159c266SJung-uk Kim /* 1037a159c266SJung-uk Kim * If the name space has not been initialized, 1038a159c266SJung-uk Kim * there is nothing to dump. 1039a159c266SJung-uk Kim */ 1040f8146b88SJung-uk Kim ACPI_DEBUG_PRINT ((ACPI_DB_TABLES, 1041f8146b88SJung-uk Kim "namespace not initialized!\n")); 1042a159c266SJung-uk Kim return_VOID; 1043a159c266SJung-uk Kim } 1044a159c266SJung-uk Kim 1045a159c266SJung-uk Kim if (ACPI_NS_ALL == SearchBase) 1046a159c266SJung-uk Kim { 1047a159c266SJung-uk Kim /* Entire namespace */ 1048a159c266SJung-uk Kim 1049a159c266SJung-uk Kim SearchHandle = AcpiGbl_RootNode; 1050a159c266SJung-uk Kim ACPI_DEBUG_PRINT ((ACPI_DB_TABLES, "\\\n")); 1051a159c266SJung-uk Kim } 1052a159c266SJung-uk Kim 1053a159c266SJung-uk Kim AcpiNsDumpObjects (ACPI_TYPE_ANY, ACPI_DISPLAY_OBJECTS, MaxDepth, 1054a159c266SJung-uk Kim ACPI_OWNER_ID_MAX, SearchHandle); 1055a159c266SJung-uk Kim return_VOID; 1056a159c266SJung-uk Kim } 1057a159c266SJung-uk Kim #endif 1058a159c266SJung-uk Kim #endif 1059