nsdump.c revision 229989
167754Smsmith/****************************************************************************** 267754Smsmith * 367754Smsmith * Module Name: nsdump - table dumping routines for debug 467754Smsmith * 567754Smsmith *****************************************************************************/ 667754Smsmith 7217365Sjkim/* 8229989Sjkim * Copyright (C) 2000 - 2012, Intel Corp. 970243Smsmith * All rights reserved. 1067754Smsmith * 11217365Sjkim * Redistribution and use in source and binary forms, with or without 12217365Sjkim * modification, are permitted provided that the following conditions 13217365Sjkim * are met: 14217365Sjkim * 1. Redistributions of source code must retain the above copyright 15217365Sjkim * notice, this list of conditions, and the following disclaimer, 16217365Sjkim * without modification. 17217365Sjkim * 2. Redistributions in binary form must reproduce at minimum a disclaimer 18217365Sjkim * substantially similar to the "NO WARRANTY" disclaimer below 19217365Sjkim * ("Disclaimer") and any redistribution must be conditioned upon 20217365Sjkim * including a substantially similar Disclaimer requirement for further 21217365Sjkim * binary redistribution. 22217365Sjkim * 3. Neither the names of the above-listed copyright holders nor the names 23217365Sjkim * of any contributors may be used to endorse or promote products derived 24217365Sjkim * from this software without specific prior written permission. 2567754Smsmith * 26217365Sjkim * Alternatively, this software may be distributed under the terms of the 27217365Sjkim * GNU General Public License ("GPL") version 2 as published by the Free 28217365Sjkim * Software Foundation. 2967754Smsmith * 30217365Sjkim * NO WARRANTY 31217365Sjkim * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 32217365Sjkim * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 33217365Sjkim * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR 34217365Sjkim * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 35217365Sjkim * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 36217365Sjkim * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 37217365Sjkim * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 38217365Sjkim * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 39217365Sjkim * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING 40217365Sjkim * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 41217365Sjkim * POSSIBILITY OF SUCH DAMAGES. 42217365Sjkim */ 4367754Smsmith 4467754Smsmith#define __NSDUMP_C__ 4567754Smsmith 46193341Sjkim#include <contrib/dev/acpica/include/acpi.h> 47193341Sjkim#include <contrib/dev/acpica/include/accommon.h> 48193341Sjkim#include <contrib/dev/acpica/include/acnamesp.h> 4967754Smsmith 5067754Smsmith 5177424Smsmith#define _COMPONENT ACPI_NAMESPACE 5291116Smsmith ACPI_MODULE_NAME ("nsdump") 5367754Smsmith 54151937Sjkim/* Local prototypes */ 55123315Snjl 56151937Sjkim#ifdef ACPI_OBSOLETE_FUNCTIONS 57151937Sjkimvoid 58151937SjkimAcpiNsDumpRootDevices ( 59151937Sjkim void); 60151937Sjkim 61151937Sjkimstatic ACPI_STATUS 62151937SjkimAcpiNsDumpOneDevice ( 63151937Sjkim ACPI_HANDLE ObjHandle, 64151937Sjkim UINT32 Level, 65151937Sjkim void *Context, 66151937Sjkim void **ReturnValue); 67151937Sjkim#endif 68151937Sjkim 69151937Sjkim 70102550Siwasaki#if defined(ACPI_DEBUG_OUTPUT) || defined(ACPI_DEBUGGER) 7177424Smsmith/******************************************************************************* 7267754Smsmith * 7387031Smsmith * FUNCTION: AcpiNsPrintPathname 7487031Smsmith * 75151937Sjkim * PARAMETERS: NumSegments - Number of ACPI name segments 7687031Smsmith * Pathname - The compressed (internal) path 7787031Smsmith * 78151937Sjkim * RETURN: None 79151937Sjkim * 8087031Smsmith * DESCRIPTION: Print an object's full namespace pathname 8187031Smsmith * 8287031Smsmith ******************************************************************************/ 8387031Smsmith 8487031Smsmithvoid 8587031SmsmithAcpiNsPrintPathname ( 8687031Smsmith UINT32 NumSegments, 8787031Smsmith char *Pathname) 8887031Smsmith{ 89193267Sjkim UINT32 i; 90151937Sjkim 91151937Sjkim 92167802Sjkim ACPI_FUNCTION_NAME (NsPrintPathname); 9387031Smsmith 9487031Smsmith 9587031Smsmith if (!(AcpiDbgLevel & ACPI_LV_NAMES) || !(AcpiDbgLayer & ACPI_NAMESPACE)) 9687031Smsmith { 9787031Smsmith return; 9887031Smsmith } 9987031Smsmith 100123315Snjl /* Print the entire name */ 10187031Smsmith 10287031Smsmith ACPI_DEBUG_PRINT ((ACPI_DB_NAMES, "[")); 10387031Smsmith 10491116Smsmith while (NumSegments) 10587031Smsmith { 106151937Sjkim for (i = 0; i < 4; i++) 107151937Sjkim { 108151937Sjkim ACPI_IS_PRINT (Pathname[i]) ? 109151937Sjkim AcpiOsPrintf ("%c", Pathname[i]) : 110151937Sjkim AcpiOsPrintf ("?"); 111151937Sjkim } 112151937Sjkim 11391116Smsmith Pathname += ACPI_NAME_SIZE; 11491116Smsmith NumSegments--; 11591116Smsmith if (NumSegments) 11691116Smsmith { 11791116Smsmith AcpiOsPrintf ("."); 11891116Smsmith } 11987031Smsmith } 12087031Smsmith 12187031Smsmith AcpiOsPrintf ("]\n"); 12287031Smsmith} 12387031Smsmith 12487031Smsmith 12587031Smsmith/******************************************************************************* 12687031Smsmith * 12767754Smsmith * FUNCTION: AcpiNsDumpPathname 12867754Smsmith * 12967754Smsmith * PARAMETERS: Handle - Object 13067754Smsmith * Msg - Prefix message 13167754Smsmith * Level - Desired debug level 13267754Smsmith * Component - Caller's component ID 13367754Smsmith * 134151937Sjkim * RETURN: None 135151937Sjkim * 13667754Smsmith * DESCRIPTION: Print an object's full namespace pathname 13767754Smsmith * Manages allocation/freeing of a pathname buffer 13867754Smsmith * 13977424Smsmith ******************************************************************************/ 14067754Smsmith 141114237Snjlvoid 14267754SmsmithAcpiNsDumpPathname ( 14367754Smsmith ACPI_HANDLE Handle, 144114237Snjl char *Msg, 14567754Smsmith UINT32 Level, 14667754Smsmith UINT32 Component) 14767754Smsmith{ 14867754Smsmith 149167802Sjkim ACPI_FUNCTION_TRACE (NsDumpPathname); 15067754Smsmith 15183174Smsmith 15267754Smsmith /* Do this only if the requested debug level and component are enabled */ 15367754Smsmith 15467754Smsmith if (!(AcpiDbgLevel & Level) || !(AcpiDbgLayer & Component)) 15567754Smsmith { 156114237Snjl return_VOID; 15767754Smsmith } 15867754Smsmith 15967754Smsmith /* Convert handle to a full pathname and print it (with supplied message) */ 16067754Smsmith 161114237Snjl AcpiNsPrintNodePathname (Handle, Msg); 162114237Snjl AcpiOsPrintf ("\n"); 163114237Snjl return_VOID; 16467754Smsmith} 16567754Smsmith 16667754Smsmith 16777424Smsmith/******************************************************************************* 16867754Smsmith * 16967754Smsmith * FUNCTION: AcpiNsDumpOneObject 17067754Smsmith * 171151937Sjkim * PARAMETERS: ObjHandle - Node to be dumped 17267754Smsmith * Level - Nesting level of the handle 17367754Smsmith * Context - Passed into WalkNamespace 174151937Sjkim * ReturnValue - Not used 17567754Smsmith * 176151937Sjkim * RETURN: Status 177151937Sjkim * 17867754Smsmith * DESCRIPTION: Dump a single Node 17967754Smsmith * This procedure is a UserFunction called by AcpiNsWalkNamespace. 18067754Smsmith * 18177424Smsmith ******************************************************************************/ 18267754Smsmith 18367754SmsmithACPI_STATUS 18467754SmsmithAcpiNsDumpOneObject ( 18567754Smsmith ACPI_HANDLE ObjHandle, 18667754Smsmith UINT32 Level, 18767754Smsmith void *Context, 18867754Smsmith void **ReturnValue) 18967754Smsmith{ 19067754Smsmith ACPI_WALK_INFO *Info = (ACPI_WALK_INFO *) Context; 19167754Smsmith ACPI_NAMESPACE_NODE *ThisNode; 19267754Smsmith ACPI_OPERAND_OBJECT *ObjDesc = NULL; 19391116Smsmith ACPI_OBJECT_TYPE ObjType; 19491116Smsmith ACPI_OBJECT_TYPE Type; 19567754Smsmith UINT32 BytesToDump; 196107325Siwasaki UINT32 DbgLevel; 19785756Smsmith UINT32 i; 19867754Smsmith 19967754Smsmith 200167802Sjkim ACPI_FUNCTION_NAME (NsDumpOneObject); 20182367Smsmith 20282367Smsmith 203107325Siwasaki /* Is output enabled? */ 20467754Smsmith 20567754Smsmith if (!(AcpiDbgLevel & Info->DebugLevel)) 20667754Smsmith { 20767754Smsmith return (AE_OK); 20867754Smsmith } 20967754Smsmith 21067754Smsmith if (!ObjHandle) 21167754Smsmith { 21282367Smsmith ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Null object handle\n")); 21367754Smsmith return (AE_OK); 21467754Smsmith } 21567754Smsmith 216200553Sjkim ThisNode = AcpiNsValidateHandle (ObjHandle); 217193267Sjkim if (!ThisNode) 218193267Sjkim { 219193267Sjkim ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Invalid object handle %p\n", 220193267Sjkim ObjHandle)); 221193267Sjkim return (AE_OK); 222193267Sjkim } 223193267Sjkim 224107325Siwasaki Type = ThisNode->Type; 225107325Siwasaki 22667754Smsmith /* Check if the owner matches */ 22767754Smsmith 228151937Sjkim if ((Info->OwnerId != ACPI_OWNER_ID_MAX) && 22967754Smsmith (Info->OwnerId != ThisNode->OwnerId)) 23067754Smsmith { 23167754Smsmith return (AE_OK); 23267754Smsmith } 23367754Smsmith 234151937Sjkim if (!(Info->DisplayType & ACPI_DISPLAY_SHORT)) 235151937Sjkim { 236151937Sjkim /* Indent the object according to the level */ 23767754Smsmith 238151937Sjkim AcpiOsPrintf ("%2d%*s", (UINT32) Level - 1, (int) Level * 2, " "); 23967754Smsmith 240151937Sjkim /* Check the node type and name */ 24167754Smsmith 242151937Sjkim if (Type > ACPI_TYPE_LOCAL_MAX) 243151937Sjkim { 244204773Sjkim ACPI_WARNING ((AE_INFO, "Invalid ACPI Object Type 0x%08X", Type)); 245151937Sjkim } 24667754Smsmith 247151937Sjkim AcpiOsPrintf ("%4.4s", AcpiUtGetNodeName (ThisNode)); 24867754Smsmith } 24967754Smsmith 250193267Sjkim /* Now we can print out the pertinent information */ 251193267Sjkim 252167802Sjkim AcpiOsPrintf (" %-12s %p %2.2X ", 253167802Sjkim AcpiUtGetTypeName (Type), ThisNode, ThisNode->OwnerId); 25467754Smsmith 25591116Smsmith DbgLevel = AcpiDbgLevel; 25691116Smsmith AcpiDbgLevel = 0; 25787031Smsmith ObjDesc = AcpiNsGetAttachedObject (ThisNode); 25891116Smsmith AcpiDbgLevel = DbgLevel; 25967754Smsmith 260167802Sjkim /* Temp nodes are those nodes created by a control method */ 261167802Sjkim 262167802Sjkim if (ThisNode->Flags & ANOBJ_TEMPORARY) 263167802Sjkim { 264167802Sjkim AcpiOsPrintf ("(T) "); 265167802Sjkim } 266167802Sjkim 267151937Sjkim switch (Info->DisplayType & ACPI_DISPLAY_MASK) 26867754Smsmith { 26985756Smsmith case ACPI_DISPLAY_SUMMARY: 27067754Smsmith 27185756Smsmith if (!ObjDesc) 27285756Smsmith { 27385756Smsmith /* No attached object, we are done */ 27467754Smsmith 27587031Smsmith AcpiOsPrintf ("\n"); 27685756Smsmith return (AE_OK); 27785756Smsmith } 27867754Smsmith 27985756Smsmith switch (Type) 28085756Smsmith { 28185756Smsmith case ACPI_TYPE_PROCESSOR: 282102550Siwasaki 283107325Siwasaki AcpiOsPrintf ("ID %X Len %.4X Addr %p\n", 284138287Smarks ObjDesc->Processor.ProcId, ObjDesc->Processor.Length, 285193267Sjkim ACPI_CAST_PTR (void, ObjDesc->Processor.Address)); 28685756Smsmith break; 28767754Smsmith 28899146Siwasaki 28985756Smsmith case ACPI_TYPE_DEVICE: 290102550Siwasaki 291123315Snjl AcpiOsPrintf ("Notify Object: %p\n", ObjDesc); 29285756Smsmith break; 29367754Smsmith 29499146Siwasaki 29585756Smsmith case ACPI_TYPE_METHOD: 296102550Siwasaki 297107325Siwasaki AcpiOsPrintf ("Args %X Len %.4X Aml %p\n", 298138287Smarks (UINT32) ObjDesc->Method.ParamCount, 299138287Smarks ObjDesc->Method.AmlLength, ObjDesc->Method.AmlStart); 30085756Smsmith break; 30167754Smsmith 30299146Siwasaki 30385756Smsmith case ACPI_TYPE_INTEGER: 304102550Siwasaki 305107325Siwasaki AcpiOsPrintf ("= %8.8X%8.8X\n", 306138287Smarks ACPI_FORMAT_UINT64 (ObjDesc->Integer.Value)); 30785756Smsmith break; 30867754Smsmith 30999146Siwasaki 31085756Smsmith case ACPI_TYPE_PACKAGE: 31199146Siwasaki 31299146Siwasaki if (ObjDesc->Common.Flags & AOPOBJ_DATA_VALID) 31399146Siwasaki { 314107325Siwasaki AcpiOsPrintf ("Elements %.2X\n", 315138287Smarks ObjDesc->Package.Count); 31699146Siwasaki } 31799146Siwasaki else 31899146Siwasaki { 319107325Siwasaki AcpiOsPrintf ("[Length not yet evaluated]\n"); 32099146Siwasaki } 32185756Smsmith break; 32267754Smsmith 32399146Siwasaki 32485756Smsmith case ACPI_TYPE_BUFFER: 32567754Smsmith 32699146Siwasaki if (ObjDesc->Common.Flags & AOPOBJ_DATA_VALID) 32799146Siwasaki { 328107325Siwasaki AcpiOsPrintf ("Len %.2X", 32999146Siwasaki ObjDesc->Buffer.Length); 33067754Smsmith 33199146Siwasaki /* Dump some of the buffer */ 33299146Siwasaki 33399146Siwasaki if (ObjDesc->Buffer.Length > 0) 33485756Smsmith { 33599146Siwasaki AcpiOsPrintf (" ="); 33699146Siwasaki for (i = 0; (i < ObjDesc->Buffer.Length && i < 12); i++) 33799146Siwasaki { 33899679Siwasaki AcpiOsPrintf (" %.2hX", ObjDesc->Buffer.Pointer[i]); 33999146Siwasaki } 34085756Smsmith } 34199146Siwasaki AcpiOsPrintf ("\n"); 34285756Smsmith } 34399146Siwasaki else 34499146Siwasaki { 345107325Siwasaki AcpiOsPrintf ("[Length not yet evaluated]\n"); 34699146Siwasaki } 34785756Smsmith break; 34867754Smsmith 34999146Siwasaki 35085756Smsmith case ACPI_TYPE_STRING: 351102550Siwasaki 352107325Siwasaki AcpiOsPrintf ("Len %.2X ", ObjDesc->String.Length); 353107325Siwasaki AcpiUtPrintString (ObjDesc->String.Pointer, 32); 35487031Smsmith AcpiOsPrintf ("\n"); 35585756Smsmith break; 35667754Smsmith 35799146Siwasaki 35885756Smsmith case ACPI_TYPE_REGION: 359102550Siwasaki 360138287Smarks AcpiOsPrintf ("[%s]", 361138287Smarks AcpiUtGetRegionName (ObjDesc->Region.SpaceId)); 36285756Smsmith if (ObjDesc->Region.Flags & AOPOBJ_DATA_VALID) 36385756Smsmith { 36487031Smsmith AcpiOsPrintf (" Addr %8.8X%8.8X Len %.4X\n", 365193267Sjkim ACPI_FORMAT_NATIVE_UINT (ObjDesc->Region.Address), 366138287Smarks ObjDesc->Region.Length); 36785756Smsmith } 36885756Smsmith else 36985756Smsmith { 37099146Siwasaki AcpiOsPrintf (" [Address/Length not yet evaluated]\n"); 37185756Smsmith } 37285756Smsmith break; 37367754Smsmith 37499146Siwasaki 375107325Siwasaki case ACPI_TYPE_LOCAL_REFERENCE: 376102550Siwasaki 377193267Sjkim AcpiOsPrintf ("[%s]\n", AcpiUtGetReferenceName (ObjDesc)); 37885756Smsmith break; 37967754Smsmith 38099146Siwasaki 38185756Smsmith case ACPI_TYPE_BUFFER_FIELD: 382102550Siwasaki 38387031Smsmith if (ObjDesc->BufferField.BufferObj && 38487031Smsmith ObjDesc->BufferField.BufferObj->Buffer.Node) 38587031Smsmith { 386107325Siwasaki AcpiOsPrintf ("Buf [%4.4s]", 387193267Sjkim AcpiUtGetNodeName ( 388193267Sjkim ObjDesc->BufferField.BufferObj->Buffer.Node)); 38987031Smsmith } 39085756Smsmith break; 39185756Smsmith 39299146Siwasaki 393107325Siwasaki case ACPI_TYPE_LOCAL_REGION_FIELD: 394102550Siwasaki 395107325Siwasaki AcpiOsPrintf ("Rgn [%4.4s]", 396193267Sjkim AcpiUtGetNodeName ( 397193267Sjkim ObjDesc->CommonField.RegionObj->Region.Node)); 39885756Smsmith break; 39985756Smsmith 40099146Siwasaki 401107325Siwasaki case ACPI_TYPE_LOCAL_BANK_FIELD: 402102550Siwasaki 403107325Siwasaki AcpiOsPrintf ("Rgn [%4.4s] Bnk [%4.4s]", 404193267Sjkim AcpiUtGetNodeName ( 405193267Sjkim ObjDesc->CommonField.RegionObj->Region.Node), 406193267Sjkim AcpiUtGetNodeName ( 407193267Sjkim ObjDesc->BankField.BankObj->CommonField.Node)); 40885756Smsmith break; 40985756Smsmith 41099146Siwasaki 411107325Siwasaki case ACPI_TYPE_LOCAL_INDEX_FIELD: 412102550Siwasaki 413107325Siwasaki AcpiOsPrintf ("Idx [%4.4s] Dat [%4.4s]", 414193267Sjkim AcpiUtGetNodeName ( 415193267Sjkim ObjDesc->IndexField.IndexObj->CommonField.Node), 416193267Sjkim AcpiUtGetNodeName ( 417193267Sjkim ObjDesc->IndexField.DataObj->CommonField.Node)); 41885756Smsmith break; 41985756Smsmith 42099146Siwasaki 421107325Siwasaki case ACPI_TYPE_LOCAL_ALIAS: 422128212Snjl case ACPI_TYPE_LOCAL_METHOD_ALIAS: 423104470Siwasaki 424138287Smarks AcpiOsPrintf ("Target %4.4s (%p)\n", 425138287Smarks AcpiUtGetNodeName (ObjDesc), ObjDesc); 426104470Siwasaki break; 427104470Siwasaki 42885756Smsmith default: 429102550Siwasaki 430107325Siwasaki AcpiOsPrintf ("Object %p\n", ObjDesc); 43185756Smsmith break; 43285756Smsmith } 43385756Smsmith 43485756Smsmith /* Common field handling */ 43585756Smsmith 43685756Smsmith switch (Type) 43785756Smsmith { 43885756Smsmith case ACPI_TYPE_BUFFER_FIELD: 439107325Siwasaki case ACPI_TYPE_LOCAL_REGION_FIELD: 440107325Siwasaki case ACPI_TYPE_LOCAL_BANK_FIELD: 441107325Siwasaki case ACPI_TYPE_LOCAL_INDEX_FIELD: 442107325Siwasaki 443123315Snjl AcpiOsPrintf (" Off %.3X Len %.2X Acc %.2hd\n", 444138287Smarks (ObjDesc->CommonField.BaseByteOffset * 8) 445138287Smarks + ObjDesc->CommonField.StartFieldBitOffset, 446138287Smarks ObjDesc->CommonField.BitLength, 447138287Smarks ObjDesc->CommonField.AccessByteWidth); 44885756Smsmith break; 449102550Siwasaki 45099679Siwasaki default: 45199679Siwasaki break; 45285756Smsmith } 45367754Smsmith break; 45467754Smsmith 45567754Smsmith 45685756Smsmith case ACPI_DISPLAY_OBJECTS: 45767754Smsmith 458107325Siwasaki AcpiOsPrintf ("O:%p", ObjDesc); 45985756Smsmith if (!ObjDesc) 46085756Smsmith { 46185756Smsmith /* No attached object, we are done */ 46285756Smsmith 46387031Smsmith AcpiOsPrintf ("\n"); 46485756Smsmith return (AE_OK); 46585756Smsmith } 46685756Smsmith 467209746Sjkim AcpiOsPrintf ("(R%u)", ObjDesc->Common.ReferenceCount); 46885756Smsmith 46985756Smsmith switch (Type) 47085756Smsmith { 47185756Smsmith case ACPI_TYPE_METHOD: 47285756Smsmith 47385756Smsmith /* Name is a Method and its AML offset/length are set */ 47485756Smsmith 47587031Smsmith AcpiOsPrintf (" M:%p-%X\n", ObjDesc->Method.AmlStart, 476193267Sjkim ObjDesc->Method.AmlLength); 47785756Smsmith break; 47885756Smsmith 47985756Smsmith case ACPI_TYPE_INTEGER: 48085756Smsmith 481123315Snjl AcpiOsPrintf (" I:%8.8X8.8%X\n", 482193267Sjkim ACPI_FORMAT_UINT64 (ObjDesc->Integer.Value)); 48385756Smsmith break; 48485756Smsmith 48585756Smsmith case ACPI_TYPE_STRING: 48685756Smsmith 48787031Smsmith AcpiOsPrintf (" S:%p-%X\n", ObjDesc->String.Pointer, 488193267Sjkim ObjDesc->String.Length); 48985756Smsmith break; 49085756Smsmith 49185756Smsmith case ACPI_TYPE_BUFFER: 49285756Smsmith 49387031Smsmith AcpiOsPrintf (" B:%p-%X\n", ObjDesc->Buffer.Pointer, 494193267Sjkim ObjDesc->Buffer.Length); 49585756Smsmith break; 49685756Smsmith 49785756Smsmith default: 49885756Smsmith 49987031Smsmith AcpiOsPrintf ("\n"); 50085756Smsmith break; 50185756Smsmith } 50267754Smsmith break; 50387031Smsmith 50487031Smsmith 50587031Smsmith default: 50687031Smsmith AcpiOsPrintf ("\n"); 50787031Smsmith break; 50867754Smsmith } 50967754Smsmith 51067754Smsmith /* If debug turned off, done */ 51167754Smsmith 51282367Smsmith if (!(AcpiDbgLevel & ACPI_LV_VALUES)) 51367754Smsmith { 51467754Smsmith return (AE_OK); 51567754Smsmith } 51667754Smsmith 51767754Smsmith /* If there is an attached object, display it */ 51867754Smsmith 519104470Siwasaki DbgLevel = AcpiDbgLevel; 52091116Smsmith AcpiDbgLevel = 0; 521104470Siwasaki ObjDesc = AcpiNsGetAttachedObject (ThisNode); 52291116Smsmith AcpiDbgLevel = DbgLevel; 52367754Smsmith 52467754Smsmith /* Dump attached objects */ 52567754Smsmith 52685756Smsmith while (ObjDesc) 52767754Smsmith { 528107325Siwasaki ObjType = ACPI_TYPE_INVALID; 529151937Sjkim AcpiOsPrintf ("Attached Object %p: ", ObjDesc); 53067754Smsmith 53167754Smsmith /* Decode the type of attached object and dump the contents */ 53267754Smsmith 53391116Smsmith switch (ACPI_GET_DESCRIPTOR_TYPE (ObjDesc)) 53491116Smsmith { 53591116Smsmith case ACPI_DESC_TYPE_NAMED: 53667754Smsmith 53787031Smsmith AcpiOsPrintf ("(Ptr to Node)\n"); 53867754Smsmith BytesToDump = sizeof (ACPI_NAMESPACE_NODE); 539151937Sjkim ACPI_DUMP_BUFFER (ObjDesc, BytesToDump); 54091116Smsmith break; 54167754Smsmith 54299679Siwasaki case ACPI_DESC_TYPE_OPERAND: 54391116Smsmith 544193267Sjkim ObjType = ObjDesc->Common.Type; 54567754Smsmith 546107325Siwasaki if (ObjType > ACPI_TYPE_LOCAL_MAX) 54767754Smsmith { 548193267Sjkim AcpiOsPrintf ("(Pointer to ACPI Object type %.2X [UNKNOWN])\n", 549138287Smarks ObjType); 55067754Smsmith BytesToDump = 32; 55167754Smsmith } 55267754Smsmith else 55367754Smsmith { 554193267Sjkim AcpiOsPrintf ("(Pointer to ACPI Object type %.2X [%s])\n", 555151937Sjkim ObjType, AcpiUtGetTypeName (ObjType)); 55667754Smsmith BytesToDump = sizeof (ACPI_OPERAND_OBJECT); 55767754Smsmith } 558151937Sjkim 559151937Sjkim ACPI_DUMP_BUFFER (ObjDesc, BytesToDump); 56091116Smsmith break; 56191116Smsmith 56291116Smsmith default: 56391116Smsmith 56491116Smsmith break; 56567754Smsmith } 56667754Smsmith 56767754Smsmith /* If value is NOT an internal object, we are done */ 56867754Smsmith 56999679Siwasaki if (ACPI_GET_DESCRIPTOR_TYPE (ObjDesc) != ACPI_DESC_TYPE_OPERAND) 57067754Smsmith { 57167754Smsmith goto Cleanup; 57267754Smsmith } 57367754Smsmith 574193267Sjkim /* Valid object, get the pointer to next level, if any */ 575193267Sjkim 57667754Smsmith switch (ObjType) 57767754Smsmith { 578151937Sjkim case ACPI_TYPE_BUFFER: 57967754Smsmith case ACPI_TYPE_STRING: 580151937Sjkim /* 581151937Sjkim * NOTE: takes advantage of common fields between string/buffer 582151937Sjkim */ 583151937Sjkim BytesToDump = ObjDesc->String.Length; 58499679Siwasaki ObjDesc = (void *) ObjDesc->String.Pointer; 585151937Sjkim AcpiOsPrintf ( "(Buffer/String pointer %p length %X)\n", 586151937Sjkim ObjDesc, BytesToDump); 587151937Sjkim ACPI_DUMP_BUFFER (ObjDesc, BytesToDump); 588151937Sjkim goto Cleanup; 58967754Smsmith 59077424Smsmith case ACPI_TYPE_BUFFER_FIELD: 59185756Smsmith ObjDesc = (ACPI_OPERAND_OBJECT *) ObjDesc->BufferField.BufferObj; 59277424Smsmith break; 59377424Smsmith 59467754Smsmith case ACPI_TYPE_PACKAGE: 59599679Siwasaki ObjDesc = (void *) ObjDesc->Package.Elements; 59667754Smsmith break; 59767754Smsmith 59867754Smsmith case ACPI_TYPE_METHOD: 59999679Siwasaki ObjDesc = (void *) ObjDesc->Method.AmlStart; 60067754Smsmith break; 60167754Smsmith 602107325Siwasaki case ACPI_TYPE_LOCAL_REGION_FIELD: 60399679Siwasaki ObjDesc = (void *) ObjDesc->Field.RegionObj; 60467754Smsmith break; 60567754Smsmith 606107325Siwasaki case ACPI_TYPE_LOCAL_BANK_FIELD: 60799679Siwasaki ObjDesc = (void *) ObjDesc->BankField.RegionObj; 60867754Smsmith break; 60967754Smsmith 610107325Siwasaki case ACPI_TYPE_LOCAL_INDEX_FIELD: 61199679Siwasaki ObjDesc = (void *) ObjDesc->IndexField.IndexObj; 61267754Smsmith break; 61367754Smsmith 61499679Siwasaki default: 61567754Smsmith goto Cleanup; 61667754Smsmith } 61767754Smsmith 618107325Siwasaki ObjType = ACPI_TYPE_INVALID; /* Terminate loop after next pass */ 61967754Smsmith } 62067754Smsmith 62167754SmsmithCleanup: 62287031Smsmith AcpiOsPrintf ("\n"); 62367754Smsmith return (AE_OK); 62467754Smsmith} 62567754Smsmith 62667754Smsmith 62777424Smsmith/******************************************************************************* 62867754Smsmith * 62967754Smsmith * FUNCTION: AcpiNsDumpObjects 63067754Smsmith * 63167754Smsmith * PARAMETERS: Type - Object type to be dumped 632151937Sjkim * DisplayType - 0 or ACPI_DISPLAY_SUMMARY 633138287Smarks * MaxDepth - Maximum depth of dump. Use ACPI_UINT32_MAX 63467754Smsmith * for an effectively unlimited depth. 635193267Sjkim * OwnerId - Dump only objects owned by this ID. Use 63667754Smsmith * ACPI_UINT32_MAX to match all owners. 63767754Smsmith * StartHandle - Where in namespace to start/end search 63867754Smsmith * 639151937Sjkim * RETURN: None 640151937Sjkim * 641193267Sjkim * DESCRIPTION: Dump typed objects within the loaded namespace. Uses 642193267Sjkim * AcpiNsWalkNamespace in conjunction with AcpiNsDumpOneObject. 64367754Smsmith * 64477424Smsmith ******************************************************************************/ 64567754Smsmith 64667754Smsmithvoid 64767754SmsmithAcpiNsDumpObjects ( 64891116Smsmith ACPI_OBJECT_TYPE Type, 64985756Smsmith UINT8 DisplayType, 65067754Smsmith UINT32 MaxDepth, 651151937Sjkim ACPI_OWNER_ID OwnerId, 65267754Smsmith ACPI_HANDLE StartHandle) 65367754Smsmith{ 65467754Smsmith ACPI_WALK_INFO Info; 655217365Sjkim ACPI_STATUS Status; 65667754Smsmith 65767754Smsmith 65891116Smsmith ACPI_FUNCTION_ENTRY (); 65983174Smsmith 66083174Smsmith 661217365Sjkim /* 662217365Sjkim * Just lock the entire namespace for the duration of the dump. 663217365Sjkim * We don't want any changes to the namespace during this time, 664217365Sjkim * especially the temporary nodes since we are going to display 665217365Sjkim * them also. 666217365Sjkim */ 667217365Sjkim Status = AcpiUtAcquireMutex (ACPI_MTX_NAMESPACE); 668217365Sjkim if (ACPI_FAILURE (Status)) 669217365Sjkim { 670217365Sjkim AcpiOsPrintf ("Could not acquire namespace mutex\n"); 671217365Sjkim return; 672217365Sjkim } 673217365Sjkim 67482367Smsmith Info.DebugLevel = ACPI_LV_TABLES; 67567754Smsmith Info.OwnerId = OwnerId; 67685756Smsmith Info.DisplayType = DisplayType; 67767754Smsmith 678102550Siwasaki (void) AcpiNsWalkNamespace (Type, StartHandle, MaxDepth, 679167802Sjkim ACPI_NS_WALK_NO_UNLOCK | ACPI_NS_WALK_TEMP_NODES, 680199337Sjkim AcpiNsDumpOneObject, NULL, (void *) &Info, NULL); 681217365Sjkim 682217365Sjkim (void) AcpiUtReleaseMutex (ACPI_MTX_NAMESPACE); 68367754Smsmith} 68467754Smsmith 68567754Smsmith 68677424Smsmith/******************************************************************************* 68767754Smsmith * 688151937Sjkim * FUNCTION: AcpiNsDumpEntry 689151937Sjkim * 690151937Sjkim * PARAMETERS: Handle - Node to be dumped 691151937Sjkim * DebugLevel - Output level 692151937Sjkim * 693151937Sjkim * RETURN: None 694151937Sjkim * 695151937Sjkim * DESCRIPTION: Dump a single Node 696151937Sjkim * 697151937Sjkim ******************************************************************************/ 698151937Sjkim 699151937Sjkimvoid 700151937SjkimAcpiNsDumpEntry ( 701151937Sjkim ACPI_HANDLE Handle, 702151937Sjkim UINT32 DebugLevel) 703151937Sjkim{ 704151937Sjkim ACPI_WALK_INFO Info; 705151937Sjkim 706151937Sjkim 707151937Sjkim ACPI_FUNCTION_ENTRY (); 708151937Sjkim 709151937Sjkim 710151937Sjkim Info.DebugLevel = DebugLevel; 711151937Sjkim Info.OwnerId = ACPI_OWNER_ID_MAX; 712151937Sjkim Info.DisplayType = ACPI_DISPLAY_SUMMARY; 713151937Sjkim 714151937Sjkim (void) AcpiNsDumpOneObject (Handle, 1, &Info, NULL); 715151937Sjkim} 716151937Sjkim 717151937Sjkim 718151937Sjkim#ifdef ACPI_ASL_COMPILER 719151937Sjkim/******************************************************************************* 720151937Sjkim * 72167754Smsmith * FUNCTION: AcpiNsDumpTables 72267754Smsmith * 72367754Smsmith * PARAMETERS: SearchBase - Root of subtree to be dumped, or 72467754Smsmith * NS_ALL to dump the entire namespace 72567754Smsmith * MaxDepth - Maximum depth of dump. Use INT_MAX 72667754Smsmith * for an effectively unlimited depth. 72767754Smsmith * 728151937Sjkim * RETURN: None 729151937Sjkim * 73067754Smsmith * DESCRIPTION: Dump the name space, or a portion of it. 73167754Smsmith * 73277424Smsmith ******************************************************************************/ 73367754Smsmith 73467754Smsmithvoid 73567754SmsmithAcpiNsDumpTables ( 73667754Smsmith ACPI_HANDLE SearchBase, 73767754Smsmith UINT32 MaxDepth) 73867754Smsmith{ 73967754Smsmith ACPI_HANDLE SearchHandle = SearchBase; 74067754Smsmith 74167754Smsmith 742167802Sjkim ACPI_FUNCTION_TRACE (NsDumpTables); 74367754Smsmith 74467754Smsmith 74567754Smsmith if (!AcpiGbl_RootNode) 74667754Smsmith { 74767754Smsmith /* 74867754Smsmith * If the name space has not been initialized, 74967754Smsmith * there is nothing to dump. 75067754Smsmith */ 751104470Siwasaki ACPI_DEBUG_PRINT ((ACPI_DB_TABLES, "namespace not initialized!\n")); 75267754Smsmith return_VOID; 75367754Smsmith } 75467754Smsmith 75591116Smsmith if (ACPI_NS_ALL == SearchBase) 75667754Smsmith { 757151937Sjkim /* Entire namespace */ 75867754Smsmith 75967754Smsmith SearchHandle = AcpiGbl_RootNode; 76082367Smsmith ACPI_DEBUG_PRINT ((ACPI_DB_TABLES, "\\\n")); 76167754Smsmith } 76267754Smsmith 76387031Smsmith AcpiNsDumpObjects (ACPI_TYPE_ANY, ACPI_DISPLAY_OBJECTS, MaxDepth, 764151937Sjkim ACPI_OWNER_ID_MAX, SearchHandle); 76567754Smsmith return_VOID; 76667754Smsmith} 76767754Smsmith#endif 768151937Sjkim#endif 76967754Smsmith 770