nsdump.c revision 252279
167754Smsmith/****************************************************************************** 267754Smsmith * 367754Smsmith * Module Name: nsdump - table dumping routines for debug 467754Smsmith * 567754Smsmith *****************************************************************************/ 667754Smsmith 7217365Sjkim/* 8245582Sjkim * Copyright (C) 2000 - 2013, 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> 49245582Sjkim#include <contrib/dev/acpica/include/acoutput.h> 5067754Smsmith 5167754Smsmith 5277424Smsmith#define _COMPONENT ACPI_NAMESPACE 5391116Smsmith ACPI_MODULE_NAME ("nsdump") 5467754Smsmith 55151937Sjkim/* Local prototypes */ 56123315Snjl 57151937Sjkim#ifdef ACPI_OBSOLETE_FUNCTIONS 58151937Sjkimvoid 59151937SjkimAcpiNsDumpRootDevices ( 60151937Sjkim void); 61151937Sjkim 62151937Sjkimstatic ACPI_STATUS 63151937SjkimAcpiNsDumpOneDevice ( 64151937Sjkim ACPI_HANDLE ObjHandle, 65151937Sjkim UINT32 Level, 66151937Sjkim void *Context, 67151937Sjkim void **ReturnValue); 68151937Sjkim#endif 69151937Sjkim 70151937Sjkim 71102550Siwasaki#if defined(ACPI_DEBUG_OUTPUT) || defined(ACPI_DEBUGGER) 7277424Smsmith/******************************************************************************* 7367754Smsmith * 7487031Smsmith * FUNCTION: AcpiNsPrintPathname 7587031Smsmith * 76151937Sjkim * PARAMETERS: NumSegments - Number of ACPI name segments 7787031Smsmith * Pathname - The compressed (internal) path 7887031Smsmith * 79151937Sjkim * RETURN: None 80151937Sjkim * 8187031Smsmith * DESCRIPTION: Print an object's full namespace pathname 8287031Smsmith * 8387031Smsmith ******************************************************************************/ 8487031Smsmith 8587031Smsmithvoid 8687031SmsmithAcpiNsPrintPathname ( 8787031Smsmith UINT32 NumSegments, 8887031Smsmith char *Pathname) 8987031Smsmith{ 90193267Sjkim UINT32 i; 91151937Sjkim 92151937Sjkim 93167802Sjkim ACPI_FUNCTION_NAME (NsPrintPathname); 9487031Smsmith 9587031Smsmith 96245582Sjkim /* Check if debug output enabled */ 97245582Sjkim 98245582Sjkim if (!ACPI_IS_DEBUG_ENABLED (ACPI_LV_NAMES, ACPI_NAMESPACE)) 9987031Smsmith { 10087031Smsmith return; 10187031Smsmith } 10287031Smsmith 103123315Snjl /* Print the entire name */ 10487031Smsmith 10587031Smsmith ACPI_DEBUG_PRINT ((ACPI_DB_NAMES, "[")); 10687031Smsmith 10791116Smsmith while (NumSegments) 10887031Smsmith { 109151937Sjkim for (i = 0; i < 4; i++) 110151937Sjkim { 111151937Sjkim ACPI_IS_PRINT (Pathname[i]) ? 112151937Sjkim AcpiOsPrintf ("%c", Pathname[i]) : 113151937Sjkim AcpiOsPrintf ("?"); 114151937Sjkim } 115151937Sjkim 11691116Smsmith Pathname += ACPI_NAME_SIZE; 11791116Smsmith NumSegments--; 11891116Smsmith if (NumSegments) 11991116Smsmith { 12091116Smsmith AcpiOsPrintf ("."); 12191116Smsmith } 12287031Smsmith } 12387031Smsmith 12487031Smsmith AcpiOsPrintf ("]\n"); 12587031Smsmith} 12687031Smsmith 12787031Smsmith 12887031Smsmith/******************************************************************************* 12987031Smsmith * 13067754Smsmith * FUNCTION: AcpiNsDumpPathname 13167754Smsmith * 13267754Smsmith * PARAMETERS: Handle - Object 13367754Smsmith * Msg - Prefix message 13467754Smsmith * Level - Desired debug level 13567754Smsmith * Component - Caller's component ID 13667754Smsmith * 137151937Sjkim * RETURN: None 138151937Sjkim * 13967754Smsmith * DESCRIPTION: Print an object's full namespace pathname 14067754Smsmith * Manages allocation/freeing of a pathname buffer 14167754Smsmith * 14277424Smsmith ******************************************************************************/ 14367754Smsmith 144114237Snjlvoid 14567754SmsmithAcpiNsDumpPathname ( 14667754Smsmith ACPI_HANDLE Handle, 147114237Snjl char *Msg, 14867754Smsmith UINT32 Level, 14967754Smsmith UINT32 Component) 15067754Smsmith{ 15167754Smsmith 152167802Sjkim ACPI_FUNCTION_TRACE (NsDumpPathname); 15367754Smsmith 15483174Smsmith 15567754Smsmith /* Do this only if the requested debug level and component are enabled */ 15667754Smsmith 157245582Sjkim if (!ACPI_IS_DEBUG_ENABLED (Level, Component)) 15867754Smsmith { 159114237Snjl return_VOID; 16067754Smsmith } 16167754Smsmith 16267754Smsmith /* Convert handle to a full pathname and print it (with supplied message) */ 16367754Smsmith 164114237Snjl AcpiNsPrintNodePathname (Handle, Msg); 165114237Snjl AcpiOsPrintf ("\n"); 166114237Snjl return_VOID; 16767754Smsmith} 16867754Smsmith 16967754Smsmith 17077424Smsmith/******************************************************************************* 17167754Smsmith * 17267754Smsmith * FUNCTION: AcpiNsDumpOneObject 17367754Smsmith * 174151937Sjkim * PARAMETERS: ObjHandle - Node to be dumped 17567754Smsmith * Level - Nesting level of the handle 17667754Smsmith * Context - Passed into WalkNamespace 177151937Sjkim * ReturnValue - Not used 17867754Smsmith * 179151937Sjkim * RETURN: Status 180151937Sjkim * 18167754Smsmith * DESCRIPTION: Dump a single Node 18267754Smsmith * This procedure is a UserFunction called by AcpiNsWalkNamespace. 18367754Smsmith * 18477424Smsmith ******************************************************************************/ 18567754Smsmith 18667754SmsmithACPI_STATUS 18767754SmsmithAcpiNsDumpOneObject ( 18867754Smsmith ACPI_HANDLE ObjHandle, 18967754Smsmith UINT32 Level, 19067754Smsmith void *Context, 19167754Smsmith void **ReturnValue) 19267754Smsmith{ 19367754Smsmith ACPI_WALK_INFO *Info = (ACPI_WALK_INFO *) Context; 19467754Smsmith ACPI_NAMESPACE_NODE *ThisNode; 19567754Smsmith ACPI_OPERAND_OBJECT *ObjDesc = NULL; 19691116Smsmith ACPI_OBJECT_TYPE ObjType; 19791116Smsmith ACPI_OBJECT_TYPE Type; 19867754Smsmith UINT32 BytesToDump; 199107325Siwasaki UINT32 DbgLevel; 20085756Smsmith UINT32 i; 20167754Smsmith 20267754Smsmith 203167802Sjkim ACPI_FUNCTION_NAME (NsDumpOneObject); 20482367Smsmith 20582367Smsmith 206107325Siwasaki /* Is output enabled? */ 20767754Smsmith 20867754Smsmith if (!(AcpiDbgLevel & Info->DebugLevel)) 20967754Smsmith { 21067754Smsmith return (AE_OK); 21167754Smsmith } 21267754Smsmith 21367754Smsmith if (!ObjHandle) 21467754Smsmith { 21582367Smsmith ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Null object handle\n")); 21667754Smsmith return (AE_OK); 21767754Smsmith } 21867754Smsmith 219200553Sjkim ThisNode = AcpiNsValidateHandle (ObjHandle); 220193267Sjkim if (!ThisNode) 221193267Sjkim { 222193267Sjkim ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Invalid object handle %p\n", 223193267Sjkim ObjHandle)); 224193267Sjkim return (AE_OK); 225193267Sjkim } 226193267Sjkim 227107325Siwasaki Type = ThisNode->Type; 228107325Siwasaki 22967754Smsmith /* Check if the owner matches */ 23067754Smsmith 231151937Sjkim if ((Info->OwnerId != ACPI_OWNER_ID_MAX) && 23267754Smsmith (Info->OwnerId != ThisNode->OwnerId)) 23367754Smsmith { 23467754Smsmith return (AE_OK); 23567754Smsmith } 23667754Smsmith 237151937Sjkim if (!(Info->DisplayType & ACPI_DISPLAY_SHORT)) 238151937Sjkim { 239151937Sjkim /* Indent the object according to the level */ 24067754Smsmith 241151937Sjkim AcpiOsPrintf ("%2d%*s", (UINT32) Level - 1, (int) Level * 2, " "); 24267754Smsmith 243151937Sjkim /* Check the node type and name */ 24467754Smsmith 245151937Sjkim if (Type > ACPI_TYPE_LOCAL_MAX) 246151937Sjkim { 247204773Sjkim ACPI_WARNING ((AE_INFO, "Invalid ACPI Object Type 0x%08X", Type)); 248151937Sjkim } 24967754Smsmith 250151937Sjkim AcpiOsPrintf ("%4.4s", AcpiUtGetNodeName (ThisNode)); 25167754Smsmith } 25267754Smsmith 253193267Sjkim /* Now we can print out the pertinent information */ 254193267Sjkim 255167802Sjkim AcpiOsPrintf (" %-12s %p %2.2X ", 256167802Sjkim AcpiUtGetTypeName (Type), ThisNode, ThisNode->OwnerId); 25767754Smsmith 25891116Smsmith DbgLevel = AcpiDbgLevel; 25991116Smsmith AcpiDbgLevel = 0; 26087031Smsmith ObjDesc = AcpiNsGetAttachedObject (ThisNode); 26191116Smsmith AcpiDbgLevel = DbgLevel; 26267754Smsmith 263167802Sjkim /* Temp nodes are those nodes created by a control method */ 264167802Sjkim 265167802Sjkim if (ThisNode->Flags & ANOBJ_TEMPORARY) 266167802Sjkim { 267167802Sjkim AcpiOsPrintf ("(T) "); 268167802Sjkim } 269167802Sjkim 270151937Sjkim switch (Info->DisplayType & ACPI_DISPLAY_MASK) 27167754Smsmith { 27285756Smsmith case ACPI_DISPLAY_SUMMARY: 27367754Smsmith 27485756Smsmith if (!ObjDesc) 27585756Smsmith { 276233250Sjkim /* No attached object. Some types should always have an object */ 27767754Smsmith 278233250Sjkim switch (Type) 279233250Sjkim { 280233250Sjkim case ACPI_TYPE_INTEGER: 281233250Sjkim case ACPI_TYPE_PACKAGE: 282233250Sjkim case ACPI_TYPE_BUFFER: 283233250Sjkim case ACPI_TYPE_STRING: 284233250Sjkim case ACPI_TYPE_METHOD: 285250838Sjkim 286233250Sjkim AcpiOsPrintf ("<No attached object>"); 287233250Sjkim break; 288233250Sjkim 289233250Sjkim default: 290250838Sjkim 291233250Sjkim break; 292233250Sjkim } 293233250Sjkim 29487031Smsmith AcpiOsPrintf ("\n"); 29585756Smsmith return (AE_OK); 29685756Smsmith } 29767754Smsmith 29885756Smsmith switch (Type) 29985756Smsmith { 30085756Smsmith case ACPI_TYPE_PROCESSOR: 301102550Siwasaki 302239340Sjkim AcpiOsPrintf ("ID %02X Len %02X Addr %p\n", 303138287Smarks ObjDesc->Processor.ProcId, ObjDesc->Processor.Length, 304193267Sjkim ACPI_CAST_PTR (void, ObjDesc->Processor.Address)); 30585756Smsmith break; 30667754Smsmith 30785756Smsmith case ACPI_TYPE_DEVICE: 308102550Siwasaki 309123315Snjl AcpiOsPrintf ("Notify Object: %p\n", ObjDesc); 31085756Smsmith break; 31167754Smsmith 31285756Smsmith case ACPI_TYPE_METHOD: 313102550Siwasaki 314107325Siwasaki AcpiOsPrintf ("Args %X Len %.4X Aml %p\n", 315138287Smarks (UINT32) ObjDesc->Method.ParamCount, 316138287Smarks ObjDesc->Method.AmlLength, ObjDesc->Method.AmlStart); 31785756Smsmith break; 31867754Smsmith 31985756Smsmith case ACPI_TYPE_INTEGER: 320102550Siwasaki 321107325Siwasaki AcpiOsPrintf ("= %8.8X%8.8X\n", 322138287Smarks ACPI_FORMAT_UINT64 (ObjDesc->Integer.Value)); 32385756Smsmith break; 32467754Smsmith 32585756Smsmith case ACPI_TYPE_PACKAGE: 32699146Siwasaki 32799146Siwasaki if (ObjDesc->Common.Flags & AOPOBJ_DATA_VALID) 32899146Siwasaki { 329107325Siwasaki AcpiOsPrintf ("Elements %.2X\n", 330138287Smarks ObjDesc->Package.Count); 33199146Siwasaki } 33299146Siwasaki else 33399146Siwasaki { 334107325Siwasaki AcpiOsPrintf ("[Length not yet evaluated]\n"); 33599146Siwasaki } 33685756Smsmith break; 33767754Smsmith 33885756Smsmith case ACPI_TYPE_BUFFER: 33967754Smsmith 34099146Siwasaki if (ObjDesc->Common.Flags & AOPOBJ_DATA_VALID) 34199146Siwasaki { 342107325Siwasaki AcpiOsPrintf ("Len %.2X", 34399146Siwasaki ObjDesc->Buffer.Length); 34467754Smsmith 34599146Siwasaki /* Dump some of the buffer */ 34699146Siwasaki 34799146Siwasaki if (ObjDesc->Buffer.Length > 0) 34885756Smsmith { 34999146Siwasaki AcpiOsPrintf (" ="); 35099146Siwasaki for (i = 0; (i < ObjDesc->Buffer.Length && i < 12); i++) 35199146Siwasaki { 35299679Siwasaki AcpiOsPrintf (" %.2hX", ObjDesc->Buffer.Pointer[i]); 35399146Siwasaki } 35485756Smsmith } 35599146Siwasaki AcpiOsPrintf ("\n"); 35685756Smsmith } 35799146Siwasaki else 35899146Siwasaki { 359107325Siwasaki AcpiOsPrintf ("[Length not yet evaluated]\n"); 36099146Siwasaki } 36185756Smsmith break; 36267754Smsmith 36385756Smsmith case ACPI_TYPE_STRING: 364102550Siwasaki 365107325Siwasaki AcpiOsPrintf ("Len %.2X ", ObjDesc->String.Length); 366107325Siwasaki AcpiUtPrintString (ObjDesc->String.Pointer, 32); 36787031Smsmith AcpiOsPrintf ("\n"); 36885756Smsmith break; 36967754Smsmith 37085756Smsmith case ACPI_TYPE_REGION: 371102550Siwasaki 372138287Smarks AcpiOsPrintf ("[%s]", 373138287Smarks AcpiUtGetRegionName (ObjDesc->Region.SpaceId)); 37485756Smsmith if (ObjDesc->Region.Flags & AOPOBJ_DATA_VALID) 37585756Smsmith { 37687031Smsmith AcpiOsPrintf (" Addr %8.8X%8.8X Len %.4X\n", 377193267Sjkim ACPI_FORMAT_NATIVE_UINT (ObjDesc->Region.Address), 378138287Smarks ObjDesc->Region.Length); 37985756Smsmith } 38085756Smsmith else 38185756Smsmith { 38299146Siwasaki AcpiOsPrintf (" [Address/Length not yet evaluated]\n"); 38385756Smsmith } 38485756Smsmith break; 38567754Smsmith 386107325Siwasaki case ACPI_TYPE_LOCAL_REFERENCE: 387102550Siwasaki 388193267Sjkim AcpiOsPrintf ("[%s]\n", AcpiUtGetReferenceName (ObjDesc)); 38985756Smsmith break; 39067754Smsmith 39185756Smsmith case ACPI_TYPE_BUFFER_FIELD: 392102550Siwasaki 39387031Smsmith if (ObjDesc->BufferField.BufferObj && 39487031Smsmith ObjDesc->BufferField.BufferObj->Buffer.Node) 39587031Smsmith { 396107325Siwasaki AcpiOsPrintf ("Buf [%4.4s]", 397193267Sjkim AcpiUtGetNodeName ( 398193267Sjkim ObjDesc->BufferField.BufferObj->Buffer.Node)); 39987031Smsmith } 40085756Smsmith break; 40185756Smsmith 402107325Siwasaki case ACPI_TYPE_LOCAL_REGION_FIELD: 403102550Siwasaki 404107325Siwasaki AcpiOsPrintf ("Rgn [%4.4s]", 405193267Sjkim AcpiUtGetNodeName ( 406193267Sjkim ObjDesc->CommonField.RegionObj->Region.Node)); 40785756Smsmith break; 40885756Smsmith 409107325Siwasaki case ACPI_TYPE_LOCAL_BANK_FIELD: 410102550Siwasaki 411107325Siwasaki AcpiOsPrintf ("Rgn [%4.4s] Bnk [%4.4s]", 412193267Sjkim AcpiUtGetNodeName ( 413193267Sjkim ObjDesc->CommonField.RegionObj->Region.Node), 414193267Sjkim AcpiUtGetNodeName ( 415193267Sjkim ObjDesc->BankField.BankObj->CommonField.Node)); 41685756Smsmith break; 41785756Smsmith 418107325Siwasaki case ACPI_TYPE_LOCAL_INDEX_FIELD: 419102550Siwasaki 420107325Siwasaki AcpiOsPrintf ("Idx [%4.4s] Dat [%4.4s]", 421193267Sjkim AcpiUtGetNodeName ( 422193267Sjkim ObjDesc->IndexField.IndexObj->CommonField.Node), 423193267Sjkim AcpiUtGetNodeName ( 424193267Sjkim ObjDesc->IndexField.DataObj->CommonField.Node)); 42585756Smsmith break; 42685756Smsmith 427107325Siwasaki case ACPI_TYPE_LOCAL_ALIAS: 428128212Snjl case ACPI_TYPE_LOCAL_METHOD_ALIAS: 429104470Siwasaki 430138287Smarks AcpiOsPrintf ("Target %4.4s (%p)\n", 431138287Smarks AcpiUtGetNodeName (ObjDesc), ObjDesc); 432104470Siwasaki break; 433104470Siwasaki 43485756Smsmith default: 435102550Siwasaki 436107325Siwasaki AcpiOsPrintf ("Object %p\n", ObjDesc); 43785756Smsmith break; 43885756Smsmith } 43985756Smsmith 44085756Smsmith /* Common field handling */ 44185756Smsmith 44285756Smsmith switch (Type) 44385756Smsmith { 44485756Smsmith case ACPI_TYPE_BUFFER_FIELD: 445107325Siwasaki case ACPI_TYPE_LOCAL_REGION_FIELD: 446107325Siwasaki case ACPI_TYPE_LOCAL_BANK_FIELD: 447107325Siwasaki case ACPI_TYPE_LOCAL_INDEX_FIELD: 448107325Siwasaki 449123315Snjl AcpiOsPrintf (" Off %.3X Len %.2X Acc %.2hd\n", 450138287Smarks (ObjDesc->CommonField.BaseByteOffset * 8) 451138287Smarks + ObjDesc->CommonField.StartFieldBitOffset, 452138287Smarks ObjDesc->CommonField.BitLength, 453138287Smarks ObjDesc->CommonField.AccessByteWidth); 45485756Smsmith break; 455102550Siwasaki 45699679Siwasaki default: 457250838Sjkim 45899679Siwasaki break; 45985756Smsmith } 46067754Smsmith break; 46167754Smsmith 46285756Smsmith case ACPI_DISPLAY_OBJECTS: 46367754Smsmith 464107325Siwasaki AcpiOsPrintf ("O:%p", ObjDesc); 46585756Smsmith if (!ObjDesc) 46685756Smsmith { 46785756Smsmith /* No attached object, we are done */ 46885756Smsmith 46987031Smsmith AcpiOsPrintf ("\n"); 47085756Smsmith return (AE_OK); 47185756Smsmith } 47285756Smsmith 473209746Sjkim AcpiOsPrintf ("(R%u)", ObjDesc->Common.ReferenceCount); 47485756Smsmith 47585756Smsmith switch (Type) 47685756Smsmith { 47785756Smsmith case ACPI_TYPE_METHOD: 47885756Smsmith 47985756Smsmith /* Name is a Method and its AML offset/length are set */ 48085756Smsmith 48187031Smsmith AcpiOsPrintf (" M:%p-%X\n", ObjDesc->Method.AmlStart, 482193267Sjkim ObjDesc->Method.AmlLength); 48385756Smsmith break; 48485756Smsmith 48585756Smsmith case ACPI_TYPE_INTEGER: 48685756Smsmith 487123315Snjl AcpiOsPrintf (" I:%8.8X8.8%X\n", 488193267Sjkim ACPI_FORMAT_UINT64 (ObjDesc->Integer.Value)); 48985756Smsmith break; 49085756Smsmith 49185756Smsmith case ACPI_TYPE_STRING: 49285756Smsmith 49387031Smsmith AcpiOsPrintf (" S:%p-%X\n", ObjDesc->String.Pointer, 494193267Sjkim ObjDesc->String.Length); 49585756Smsmith break; 49685756Smsmith 49785756Smsmith case ACPI_TYPE_BUFFER: 49885756Smsmith 49987031Smsmith AcpiOsPrintf (" B:%p-%X\n", ObjDesc->Buffer.Pointer, 500193267Sjkim ObjDesc->Buffer.Length); 50185756Smsmith break; 50285756Smsmith 50385756Smsmith default: 50485756Smsmith 50587031Smsmith AcpiOsPrintf ("\n"); 50685756Smsmith break; 50785756Smsmith } 50867754Smsmith break; 50987031Smsmith 51087031Smsmith default: 51187031Smsmith AcpiOsPrintf ("\n"); 51287031Smsmith break; 51367754Smsmith } 51467754Smsmith 51567754Smsmith /* If debug turned off, done */ 51667754Smsmith 51782367Smsmith if (!(AcpiDbgLevel & ACPI_LV_VALUES)) 51867754Smsmith { 51967754Smsmith return (AE_OK); 52067754Smsmith } 52167754Smsmith 52267754Smsmith /* If there is an attached object, display it */ 52367754Smsmith 524104470Siwasaki DbgLevel = AcpiDbgLevel; 52591116Smsmith AcpiDbgLevel = 0; 526104470Siwasaki ObjDesc = AcpiNsGetAttachedObject (ThisNode); 52791116Smsmith AcpiDbgLevel = DbgLevel; 52867754Smsmith 52967754Smsmith /* Dump attached objects */ 53067754Smsmith 53185756Smsmith while (ObjDesc) 53267754Smsmith { 533107325Siwasaki ObjType = ACPI_TYPE_INVALID; 534151937Sjkim AcpiOsPrintf ("Attached Object %p: ", ObjDesc); 53567754Smsmith 53667754Smsmith /* Decode the type of attached object and dump the contents */ 53767754Smsmith 53891116Smsmith switch (ACPI_GET_DESCRIPTOR_TYPE (ObjDesc)) 53991116Smsmith { 54091116Smsmith case ACPI_DESC_TYPE_NAMED: 54167754Smsmith 54287031Smsmith AcpiOsPrintf ("(Ptr to Node)\n"); 54367754Smsmith BytesToDump = sizeof (ACPI_NAMESPACE_NODE); 544151937Sjkim ACPI_DUMP_BUFFER (ObjDesc, BytesToDump); 54591116Smsmith break; 54667754Smsmith 54799679Siwasaki case ACPI_DESC_TYPE_OPERAND: 54891116Smsmith 549193267Sjkim ObjType = ObjDesc->Common.Type; 55067754Smsmith 551107325Siwasaki if (ObjType > ACPI_TYPE_LOCAL_MAX) 55267754Smsmith { 553193267Sjkim AcpiOsPrintf ("(Pointer to ACPI Object type %.2X [UNKNOWN])\n", 554138287Smarks ObjType); 55567754Smsmith BytesToDump = 32; 55667754Smsmith } 55767754Smsmith else 55867754Smsmith { 559193267Sjkim AcpiOsPrintf ("(Pointer to ACPI Object type %.2X [%s])\n", 560151937Sjkim ObjType, AcpiUtGetTypeName (ObjType)); 56167754Smsmith BytesToDump = sizeof (ACPI_OPERAND_OBJECT); 56267754Smsmith } 563151937Sjkim 564151937Sjkim ACPI_DUMP_BUFFER (ObjDesc, BytesToDump); 56591116Smsmith break; 56691116Smsmith 56791116Smsmith default: 56891116Smsmith 56991116Smsmith break; 57067754Smsmith } 57167754Smsmith 57267754Smsmith /* If value is NOT an internal object, we are done */ 57367754Smsmith 57499679Siwasaki if (ACPI_GET_DESCRIPTOR_TYPE (ObjDesc) != ACPI_DESC_TYPE_OPERAND) 57567754Smsmith { 57667754Smsmith goto Cleanup; 57767754Smsmith } 57867754Smsmith 579193267Sjkim /* Valid object, get the pointer to next level, if any */ 580193267Sjkim 58167754Smsmith switch (ObjType) 58267754Smsmith { 583151937Sjkim case ACPI_TYPE_BUFFER: 58467754Smsmith case ACPI_TYPE_STRING: 585151937Sjkim /* 586151937Sjkim * NOTE: takes advantage of common fields between string/buffer 587151937Sjkim */ 588151937Sjkim BytesToDump = ObjDesc->String.Length; 58999679Siwasaki ObjDesc = (void *) ObjDesc->String.Pointer; 590151937Sjkim AcpiOsPrintf ( "(Buffer/String pointer %p length %X)\n", 591151937Sjkim ObjDesc, BytesToDump); 592151937Sjkim ACPI_DUMP_BUFFER (ObjDesc, BytesToDump); 593151937Sjkim goto Cleanup; 59467754Smsmith 59577424Smsmith case ACPI_TYPE_BUFFER_FIELD: 596250838Sjkim 59785756Smsmith ObjDesc = (ACPI_OPERAND_OBJECT *) ObjDesc->BufferField.BufferObj; 59877424Smsmith break; 59977424Smsmith 60067754Smsmith case ACPI_TYPE_PACKAGE: 601250838Sjkim 60299679Siwasaki ObjDesc = (void *) ObjDesc->Package.Elements; 60367754Smsmith break; 60467754Smsmith 60567754Smsmith case ACPI_TYPE_METHOD: 606250838Sjkim 60799679Siwasaki ObjDesc = (void *) ObjDesc->Method.AmlStart; 60867754Smsmith break; 60967754Smsmith 610107325Siwasaki case ACPI_TYPE_LOCAL_REGION_FIELD: 611250838Sjkim 61299679Siwasaki ObjDesc = (void *) ObjDesc->Field.RegionObj; 61367754Smsmith break; 61467754Smsmith 615107325Siwasaki case ACPI_TYPE_LOCAL_BANK_FIELD: 616250838Sjkim 61799679Siwasaki ObjDesc = (void *) ObjDesc->BankField.RegionObj; 61867754Smsmith break; 61967754Smsmith 620107325Siwasaki case ACPI_TYPE_LOCAL_INDEX_FIELD: 621252279Sjkim 62299679Siwasaki ObjDesc = (void *) ObjDesc->IndexField.IndexObj; 62367754Smsmith break; 62467754Smsmith 62599679Siwasaki default: 626250838Sjkim 62767754Smsmith goto Cleanup; 62867754Smsmith } 62967754Smsmith 630107325Siwasaki ObjType = ACPI_TYPE_INVALID; /* Terminate loop after next pass */ 63167754Smsmith } 63267754Smsmith 63367754SmsmithCleanup: 63487031Smsmith AcpiOsPrintf ("\n"); 63567754Smsmith return (AE_OK); 63667754Smsmith} 63767754Smsmith 63867754Smsmith 63977424Smsmith/******************************************************************************* 64067754Smsmith * 64167754Smsmith * FUNCTION: AcpiNsDumpObjects 64267754Smsmith * 64367754Smsmith * PARAMETERS: Type - Object type to be dumped 644151937Sjkim * DisplayType - 0 or ACPI_DISPLAY_SUMMARY 645138287Smarks * MaxDepth - Maximum depth of dump. Use ACPI_UINT32_MAX 64667754Smsmith * for an effectively unlimited depth. 647193267Sjkim * OwnerId - Dump only objects owned by this ID. Use 64867754Smsmith * ACPI_UINT32_MAX to match all owners. 64967754Smsmith * StartHandle - Where in namespace to start/end search 65067754Smsmith * 651151937Sjkim * RETURN: None 652151937Sjkim * 653193267Sjkim * DESCRIPTION: Dump typed objects within the loaded namespace. Uses 654193267Sjkim * AcpiNsWalkNamespace in conjunction with AcpiNsDumpOneObject. 65567754Smsmith * 65677424Smsmith ******************************************************************************/ 65767754Smsmith 65867754Smsmithvoid 65967754SmsmithAcpiNsDumpObjects ( 66091116Smsmith ACPI_OBJECT_TYPE Type, 66185756Smsmith UINT8 DisplayType, 66267754Smsmith UINT32 MaxDepth, 663151937Sjkim ACPI_OWNER_ID OwnerId, 66467754Smsmith ACPI_HANDLE StartHandle) 66567754Smsmith{ 66667754Smsmith ACPI_WALK_INFO Info; 667217365Sjkim ACPI_STATUS Status; 66867754Smsmith 66967754Smsmith 67091116Smsmith ACPI_FUNCTION_ENTRY (); 67183174Smsmith 67283174Smsmith 673217365Sjkim /* 674217365Sjkim * Just lock the entire namespace for the duration of the dump. 675217365Sjkim * We don't want any changes to the namespace during this time, 676217365Sjkim * especially the temporary nodes since we are going to display 677217365Sjkim * them also. 678217365Sjkim */ 679217365Sjkim Status = AcpiUtAcquireMutex (ACPI_MTX_NAMESPACE); 680217365Sjkim if (ACPI_FAILURE (Status)) 681217365Sjkim { 682217365Sjkim AcpiOsPrintf ("Could not acquire namespace mutex\n"); 683217365Sjkim return; 684217365Sjkim } 685217365Sjkim 68682367Smsmith Info.DebugLevel = ACPI_LV_TABLES; 68767754Smsmith Info.OwnerId = OwnerId; 68885756Smsmith Info.DisplayType = DisplayType; 68967754Smsmith 690102550Siwasaki (void) AcpiNsWalkNamespace (Type, StartHandle, MaxDepth, 691167802Sjkim ACPI_NS_WALK_NO_UNLOCK | ACPI_NS_WALK_TEMP_NODES, 692199337Sjkim AcpiNsDumpOneObject, NULL, (void *) &Info, NULL); 693217365Sjkim 694217365Sjkim (void) AcpiUtReleaseMutex (ACPI_MTX_NAMESPACE); 69567754Smsmith} 69667754Smsmith 69767754Smsmith 69877424Smsmith/******************************************************************************* 69967754Smsmith * 700151937Sjkim * FUNCTION: AcpiNsDumpEntry 701151937Sjkim * 702151937Sjkim * PARAMETERS: Handle - Node to be dumped 703151937Sjkim * DebugLevel - Output level 704151937Sjkim * 705151937Sjkim * RETURN: None 706151937Sjkim * 707151937Sjkim * DESCRIPTION: Dump a single Node 708151937Sjkim * 709151937Sjkim ******************************************************************************/ 710151937Sjkim 711151937Sjkimvoid 712151937SjkimAcpiNsDumpEntry ( 713151937Sjkim ACPI_HANDLE Handle, 714151937Sjkim UINT32 DebugLevel) 715151937Sjkim{ 716151937Sjkim ACPI_WALK_INFO Info; 717151937Sjkim 718151937Sjkim 719151937Sjkim ACPI_FUNCTION_ENTRY (); 720151937Sjkim 721151937Sjkim 722151937Sjkim Info.DebugLevel = DebugLevel; 723151937Sjkim Info.OwnerId = ACPI_OWNER_ID_MAX; 724151937Sjkim Info.DisplayType = ACPI_DISPLAY_SUMMARY; 725151937Sjkim 726151937Sjkim (void) AcpiNsDumpOneObject (Handle, 1, &Info, NULL); 727151937Sjkim} 728151937Sjkim 729151937Sjkim 730151937Sjkim#ifdef ACPI_ASL_COMPILER 731151937Sjkim/******************************************************************************* 732151937Sjkim * 73367754Smsmith * FUNCTION: AcpiNsDumpTables 73467754Smsmith * 73567754Smsmith * PARAMETERS: SearchBase - Root of subtree to be dumped, or 73667754Smsmith * NS_ALL to dump the entire namespace 737241973Sjkim * MaxDepth - Maximum depth of dump. Use INT_MAX 73867754Smsmith * for an effectively unlimited depth. 73967754Smsmith * 740151937Sjkim * RETURN: None 741151937Sjkim * 74267754Smsmith * DESCRIPTION: Dump the name space, or a portion of it. 74367754Smsmith * 74477424Smsmith ******************************************************************************/ 74567754Smsmith 74667754Smsmithvoid 74767754SmsmithAcpiNsDumpTables ( 74867754Smsmith ACPI_HANDLE SearchBase, 74967754Smsmith UINT32 MaxDepth) 75067754Smsmith{ 75167754Smsmith ACPI_HANDLE SearchHandle = SearchBase; 75267754Smsmith 75367754Smsmith 754167802Sjkim ACPI_FUNCTION_TRACE (NsDumpTables); 75567754Smsmith 75667754Smsmith 75767754Smsmith if (!AcpiGbl_RootNode) 75867754Smsmith { 75967754Smsmith /* 76067754Smsmith * If the name space has not been initialized, 76167754Smsmith * there is nothing to dump. 76267754Smsmith */ 763104470Siwasaki ACPI_DEBUG_PRINT ((ACPI_DB_TABLES, "namespace not initialized!\n")); 76467754Smsmith return_VOID; 76567754Smsmith } 76667754Smsmith 76791116Smsmith if (ACPI_NS_ALL == SearchBase) 76867754Smsmith { 769151937Sjkim /* Entire namespace */ 77067754Smsmith 77167754Smsmith SearchHandle = AcpiGbl_RootNode; 77282367Smsmith ACPI_DEBUG_PRINT ((ACPI_DB_TABLES, "\\\n")); 77367754Smsmith } 77467754Smsmith 77587031Smsmith AcpiNsDumpObjects (ACPI_TYPE_ANY, ACPI_DISPLAY_OBJECTS, MaxDepth, 776151937Sjkim ACPI_OWNER_ID_MAX, SearchHandle); 77767754Smsmith return_VOID; 77867754Smsmith} 77967754Smsmith#endif 780151937Sjkim#endif 781