nsdump.c revision 245582
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: 285233250Sjkim AcpiOsPrintf ("<No attached object>"); 286233250Sjkim break; 287233250Sjkim 288233250Sjkim default: 289233250Sjkim break; 290233250Sjkim } 291233250Sjkim 29287031Smsmith AcpiOsPrintf ("\n"); 29385756Smsmith return (AE_OK); 29485756Smsmith } 29567754Smsmith 29685756Smsmith switch (Type) 29785756Smsmith { 29885756Smsmith case ACPI_TYPE_PROCESSOR: 299102550Siwasaki 300239340Sjkim AcpiOsPrintf ("ID %02X Len %02X Addr %p\n", 301138287Smarks ObjDesc->Processor.ProcId, ObjDesc->Processor.Length, 302193267Sjkim ACPI_CAST_PTR (void, ObjDesc->Processor.Address)); 30385756Smsmith break; 30467754Smsmith 30599146Siwasaki 30685756Smsmith case ACPI_TYPE_DEVICE: 307102550Siwasaki 308123315Snjl AcpiOsPrintf ("Notify Object: %p\n", ObjDesc); 30985756Smsmith break; 31067754Smsmith 31199146Siwasaki 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 31999146Siwasaki 32085756Smsmith case ACPI_TYPE_INTEGER: 321102550Siwasaki 322107325Siwasaki AcpiOsPrintf ("= %8.8X%8.8X\n", 323138287Smarks ACPI_FORMAT_UINT64 (ObjDesc->Integer.Value)); 32485756Smsmith break; 32567754Smsmith 32699146Siwasaki 32785756Smsmith case ACPI_TYPE_PACKAGE: 32899146Siwasaki 32999146Siwasaki if (ObjDesc->Common.Flags & AOPOBJ_DATA_VALID) 33099146Siwasaki { 331107325Siwasaki AcpiOsPrintf ("Elements %.2X\n", 332138287Smarks ObjDesc->Package.Count); 33399146Siwasaki } 33499146Siwasaki else 33599146Siwasaki { 336107325Siwasaki AcpiOsPrintf ("[Length not yet evaluated]\n"); 33799146Siwasaki } 33885756Smsmith break; 33967754Smsmith 34099146Siwasaki 34185756Smsmith case ACPI_TYPE_BUFFER: 34267754Smsmith 34399146Siwasaki if (ObjDesc->Common.Flags & AOPOBJ_DATA_VALID) 34499146Siwasaki { 345107325Siwasaki AcpiOsPrintf ("Len %.2X", 34699146Siwasaki ObjDesc->Buffer.Length); 34767754Smsmith 34899146Siwasaki /* Dump some of the buffer */ 34999146Siwasaki 35099146Siwasaki if (ObjDesc->Buffer.Length > 0) 35185756Smsmith { 35299146Siwasaki AcpiOsPrintf (" ="); 35399146Siwasaki for (i = 0; (i < ObjDesc->Buffer.Length && i < 12); i++) 35499146Siwasaki { 35599679Siwasaki AcpiOsPrintf (" %.2hX", ObjDesc->Buffer.Pointer[i]); 35699146Siwasaki } 35785756Smsmith } 35899146Siwasaki AcpiOsPrintf ("\n"); 35985756Smsmith } 36099146Siwasaki else 36199146Siwasaki { 362107325Siwasaki AcpiOsPrintf ("[Length not yet evaluated]\n"); 36399146Siwasaki } 36485756Smsmith break; 36567754Smsmith 36699146Siwasaki 36785756Smsmith case ACPI_TYPE_STRING: 368102550Siwasaki 369107325Siwasaki AcpiOsPrintf ("Len %.2X ", ObjDesc->String.Length); 370107325Siwasaki AcpiUtPrintString (ObjDesc->String.Pointer, 32); 37187031Smsmith AcpiOsPrintf ("\n"); 37285756Smsmith break; 37367754Smsmith 37499146Siwasaki 37585756Smsmith case ACPI_TYPE_REGION: 376102550Siwasaki 377138287Smarks AcpiOsPrintf ("[%s]", 378138287Smarks AcpiUtGetRegionName (ObjDesc->Region.SpaceId)); 37985756Smsmith if (ObjDesc->Region.Flags & AOPOBJ_DATA_VALID) 38085756Smsmith { 38187031Smsmith AcpiOsPrintf (" Addr %8.8X%8.8X Len %.4X\n", 382193267Sjkim ACPI_FORMAT_NATIVE_UINT (ObjDesc->Region.Address), 383138287Smarks ObjDesc->Region.Length); 38485756Smsmith } 38585756Smsmith else 38685756Smsmith { 38799146Siwasaki AcpiOsPrintf (" [Address/Length not yet evaluated]\n"); 38885756Smsmith } 38985756Smsmith break; 39067754Smsmith 39199146Siwasaki 392107325Siwasaki case ACPI_TYPE_LOCAL_REFERENCE: 393102550Siwasaki 394193267Sjkim AcpiOsPrintf ("[%s]\n", AcpiUtGetReferenceName (ObjDesc)); 39585756Smsmith break; 39667754Smsmith 39799146Siwasaki 39885756Smsmith case ACPI_TYPE_BUFFER_FIELD: 399102550Siwasaki 40087031Smsmith if (ObjDesc->BufferField.BufferObj && 40187031Smsmith ObjDesc->BufferField.BufferObj->Buffer.Node) 40287031Smsmith { 403107325Siwasaki AcpiOsPrintf ("Buf [%4.4s]", 404193267Sjkim AcpiUtGetNodeName ( 405193267Sjkim ObjDesc->BufferField.BufferObj->Buffer.Node)); 40687031Smsmith } 40785756Smsmith break; 40885756Smsmith 40999146Siwasaki 410107325Siwasaki case ACPI_TYPE_LOCAL_REGION_FIELD: 411102550Siwasaki 412107325Siwasaki AcpiOsPrintf ("Rgn [%4.4s]", 413193267Sjkim AcpiUtGetNodeName ( 414193267Sjkim ObjDesc->CommonField.RegionObj->Region.Node)); 41585756Smsmith break; 41685756Smsmith 41799146Siwasaki 418107325Siwasaki case ACPI_TYPE_LOCAL_BANK_FIELD: 419102550Siwasaki 420107325Siwasaki AcpiOsPrintf ("Rgn [%4.4s] Bnk [%4.4s]", 421193267Sjkim AcpiUtGetNodeName ( 422193267Sjkim ObjDesc->CommonField.RegionObj->Region.Node), 423193267Sjkim AcpiUtGetNodeName ( 424193267Sjkim ObjDesc->BankField.BankObj->CommonField.Node)); 42585756Smsmith break; 42685756Smsmith 42799146Siwasaki 428107325Siwasaki case ACPI_TYPE_LOCAL_INDEX_FIELD: 429102550Siwasaki 430107325Siwasaki AcpiOsPrintf ("Idx [%4.4s] Dat [%4.4s]", 431193267Sjkim AcpiUtGetNodeName ( 432193267Sjkim ObjDesc->IndexField.IndexObj->CommonField.Node), 433193267Sjkim AcpiUtGetNodeName ( 434193267Sjkim ObjDesc->IndexField.DataObj->CommonField.Node)); 43585756Smsmith break; 43685756Smsmith 43799146Siwasaki 438107325Siwasaki case ACPI_TYPE_LOCAL_ALIAS: 439128212Snjl case ACPI_TYPE_LOCAL_METHOD_ALIAS: 440104470Siwasaki 441138287Smarks AcpiOsPrintf ("Target %4.4s (%p)\n", 442138287Smarks AcpiUtGetNodeName (ObjDesc), ObjDesc); 443104470Siwasaki break; 444104470Siwasaki 44585756Smsmith default: 446102550Siwasaki 447107325Siwasaki AcpiOsPrintf ("Object %p\n", ObjDesc); 44885756Smsmith break; 44985756Smsmith } 45085756Smsmith 45185756Smsmith /* Common field handling */ 45285756Smsmith 45385756Smsmith switch (Type) 45485756Smsmith { 45585756Smsmith case ACPI_TYPE_BUFFER_FIELD: 456107325Siwasaki case ACPI_TYPE_LOCAL_REGION_FIELD: 457107325Siwasaki case ACPI_TYPE_LOCAL_BANK_FIELD: 458107325Siwasaki case ACPI_TYPE_LOCAL_INDEX_FIELD: 459107325Siwasaki 460123315Snjl AcpiOsPrintf (" Off %.3X Len %.2X Acc %.2hd\n", 461138287Smarks (ObjDesc->CommonField.BaseByteOffset * 8) 462138287Smarks + ObjDesc->CommonField.StartFieldBitOffset, 463138287Smarks ObjDesc->CommonField.BitLength, 464138287Smarks ObjDesc->CommonField.AccessByteWidth); 46585756Smsmith break; 466102550Siwasaki 46799679Siwasaki default: 46899679Siwasaki break; 46985756Smsmith } 47067754Smsmith break; 47167754Smsmith 47267754Smsmith 47385756Smsmith case ACPI_DISPLAY_OBJECTS: 47467754Smsmith 475107325Siwasaki AcpiOsPrintf ("O:%p", ObjDesc); 47685756Smsmith if (!ObjDesc) 47785756Smsmith { 47885756Smsmith /* No attached object, we are done */ 47985756Smsmith 48087031Smsmith AcpiOsPrintf ("\n"); 48185756Smsmith return (AE_OK); 48285756Smsmith } 48385756Smsmith 484209746Sjkim AcpiOsPrintf ("(R%u)", ObjDesc->Common.ReferenceCount); 48585756Smsmith 48685756Smsmith switch (Type) 48785756Smsmith { 48885756Smsmith case ACPI_TYPE_METHOD: 48985756Smsmith 49085756Smsmith /* Name is a Method and its AML offset/length are set */ 49185756Smsmith 49287031Smsmith AcpiOsPrintf (" M:%p-%X\n", ObjDesc->Method.AmlStart, 493193267Sjkim ObjDesc->Method.AmlLength); 49485756Smsmith break; 49585756Smsmith 49685756Smsmith case ACPI_TYPE_INTEGER: 49785756Smsmith 498123315Snjl AcpiOsPrintf (" I:%8.8X8.8%X\n", 499193267Sjkim ACPI_FORMAT_UINT64 (ObjDesc->Integer.Value)); 50085756Smsmith break; 50185756Smsmith 50285756Smsmith case ACPI_TYPE_STRING: 50385756Smsmith 50487031Smsmith AcpiOsPrintf (" S:%p-%X\n", ObjDesc->String.Pointer, 505193267Sjkim ObjDesc->String.Length); 50685756Smsmith break; 50785756Smsmith 50885756Smsmith case ACPI_TYPE_BUFFER: 50985756Smsmith 51087031Smsmith AcpiOsPrintf (" B:%p-%X\n", ObjDesc->Buffer.Pointer, 511193267Sjkim ObjDesc->Buffer.Length); 51285756Smsmith break; 51385756Smsmith 51485756Smsmith default: 51585756Smsmith 51687031Smsmith AcpiOsPrintf ("\n"); 51785756Smsmith break; 51885756Smsmith } 51967754Smsmith break; 52087031Smsmith 52187031Smsmith 52287031Smsmith default: 52387031Smsmith AcpiOsPrintf ("\n"); 52487031Smsmith break; 52567754Smsmith } 52667754Smsmith 52767754Smsmith /* If debug turned off, done */ 52867754Smsmith 52982367Smsmith if (!(AcpiDbgLevel & ACPI_LV_VALUES)) 53067754Smsmith { 53167754Smsmith return (AE_OK); 53267754Smsmith } 53367754Smsmith 53467754Smsmith /* If there is an attached object, display it */ 53567754Smsmith 536104470Siwasaki DbgLevel = AcpiDbgLevel; 53791116Smsmith AcpiDbgLevel = 0; 538104470Siwasaki ObjDesc = AcpiNsGetAttachedObject (ThisNode); 53991116Smsmith AcpiDbgLevel = DbgLevel; 54067754Smsmith 54167754Smsmith /* Dump attached objects */ 54267754Smsmith 54385756Smsmith while (ObjDesc) 54467754Smsmith { 545107325Siwasaki ObjType = ACPI_TYPE_INVALID; 546151937Sjkim AcpiOsPrintf ("Attached Object %p: ", ObjDesc); 54767754Smsmith 54867754Smsmith /* Decode the type of attached object and dump the contents */ 54967754Smsmith 55091116Smsmith switch (ACPI_GET_DESCRIPTOR_TYPE (ObjDesc)) 55191116Smsmith { 55291116Smsmith case ACPI_DESC_TYPE_NAMED: 55367754Smsmith 55487031Smsmith AcpiOsPrintf ("(Ptr to Node)\n"); 55567754Smsmith BytesToDump = sizeof (ACPI_NAMESPACE_NODE); 556151937Sjkim ACPI_DUMP_BUFFER (ObjDesc, BytesToDump); 55791116Smsmith break; 55867754Smsmith 55999679Siwasaki case ACPI_DESC_TYPE_OPERAND: 56091116Smsmith 561193267Sjkim ObjType = ObjDesc->Common.Type; 56267754Smsmith 563107325Siwasaki if (ObjType > ACPI_TYPE_LOCAL_MAX) 56467754Smsmith { 565193267Sjkim AcpiOsPrintf ("(Pointer to ACPI Object type %.2X [UNKNOWN])\n", 566138287Smarks ObjType); 56767754Smsmith BytesToDump = 32; 56867754Smsmith } 56967754Smsmith else 57067754Smsmith { 571193267Sjkim AcpiOsPrintf ("(Pointer to ACPI Object type %.2X [%s])\n", 572151937Sjkim ObjType, AcpiUtGetTypeName (ObjType)); 57367754Smsmith BytesToDump = sizeof (ACPI_OPERAND_OBJECT); 57467754Smsmith } 575151937Sjkim 576151937Sjkim ACPI_DUMP_BUFFER (ObjDesc, BytesToDump); 57791116Smsmith break; 57891116Smsmith 57991116Smsmith default: 58091116Smsmith 58191116Smsmith break; 58267754Smsmith } 58367754Smsmith 58467754Smsmith /* If value is NOT an internal object, we are done */ 58567754Smsmith 58699679Siwasaki if (ACPI_GET_DESCRIPTOR_TYPE (ObjDesc) != ACPI_DESC_TYPE_OPERAND) 58767754Smsmith { 58867754Smsmith goto Cleanup; 58967754Smsmith } 59067754Smsmith 591193267Sjkim /* Valid object, get the pointer to next level, if any */ 592193267Sjkim 59367754Smsmith switch (ObjType) 59467754Smsmith { 595151937Sjkim case ACPI_TYPE_BUFFER: 59667754Smsmith case ACPI_TYPE_STRING: 597151937Sjkim /* 598151937Sjkim * NOTE: takes advantage of common fields between string/buffer 599151937Sjkim */ 600151937Sjkim BytesToDump = ObjDesc->String.Length; 60199679Siwasaki ObjDesc = (void *) ObjDesc->String.Pointer; 602151937Sjkim AcpiOsPrintf ( "(Buffer/String pointer %p length %X)\n", 603151937Sjkim ObjDesc, BytesToDump); 604151937Sjkim ACPI_DUMP_BUFFER (ObjDesc, BytesToDump); 605151937Sjkim goto Cleanup; 60667754Smsmith 60777424Smsmith case ACPI_TYPE_BUFFER_FIELD: 60885756Smsmith ObjDesc = (ACPI_OPERAND_OBJECT *) ObjDesc->BufferField.BufferObj; 60977424Smsmith break; 61077424Smsmith 61167754Smsmith case ACPI_TYPE_PACKAGE: 61299679Siwasaki ObjDesc = (void *) ObjDesc->Package.Elements; 61367754Smsmith break; 61467754Smsmith 61567754Smsmith case ACPI_TYPE_METHOD: 61699679Siwasaki ObjDesc = (void *) ObjDesc->Method.AmlStart; 61767754Smsmith break; 61867754Smsmith 619107325Siwasaki case ACPI_TYPE_LOCAL_REGION_FIELD: 62099679Siwasaki ObjDesc = (void *) ObjDesc->Field.RegionObj; 62167754Smsmith break; 62267754Smsmith 623107325Siwasaki case ACPI_TYPE_LOCAL_BANK_FIELD: 62499679Siwasaki ObjDesc = (void *) ObjDesc->BankField.RegionObj; 62567754Smsmith break; 62667754Smsmith 627107325Siwasaki case ACPI_TYPE_LOCAL_INDEX_FIELD: 62899679Siwasaki ObjDesc = (void *) ObjDesc->IndexField.IndexObj; 62967754Smsmith break; 63067754Smsmith 63199679Siwasaki default: 63267754Smsmith goto Cleanup; 63367754Smsmith } 63467754Smsmith 635107325Siwasaki ObjType = ACPI_TYPE_INVALID; /* Terminate loop after next pass */ 63667754Smsmith } 63767754Smsmith 63867754SmsmithCleanup: 63987031Smsmith AcpiOsPrintf ("\n"); 64067754Smsmith return (AE_OK); 64167754Smsmith} 64267754Smsmith 64367754Smsmith 64477424Smsmith/******************************************************************************* 64567754Smsmith * 64667754Smsmith * FUNCTION: AcpiNsDumpObjects 64767754Smsmith * 64867754Smsmith * PARAMETERS: Type - Object type to be dumped 649151937Sjkim * DisplayType - 0 or ACPI_DISPLAY_SUMMARY 650138287Smarks * MaxDepth - Maximum depth of dump. Use ACPI_UINT32_MAX 65167754Smsmith * for an effectively unlimited depth. 652193267Sjkim * OwnerId - Dump only objects owned by this ID. Use 65367754Smsmith * ACPI_UINT32_MAX to match all owners. 65467754Smsmith * StartHandle - Where in namespace to start/end search 65567754Smsmith * 656151937Sjkim * RETURN: None 657151937Sjkim * 658193267Sjkim * DESCRIPTION: Dump typed objects within the loaded namespace. Uses 659193267Sjkim * AcpiNsWalkNamespace in conjunction with AcpiNsDumpOneObject. 66067754Smsmith * 66177424Smsmith ******************************************************************************/ 66267754Smsmith 66367754Smsmithvoid 66467754SmsmithAcpiNsDumpObjects ( 66591116Smsmith ACPI_OBJECT_TYPE Type, 66685756Smsmith UINT8 DisplayType, 66767754Smsmith UINT32 MaxDepth, 668151937Sjkim ACPI_OWNER_ID OwnerId, 66967754Smsmith ACPI_HANDLE StartHandle) 67067754Smsmith{ 67167754Smsmith ACPI_WALK_INFO Info; 672217365Sjkim ACPI_STATUS Status; 67367754Smsmith 67467754Smsmith 67591116Smsmith ACPI_FUNCTION_ENTRY (); 67683174Smsmith 67783174Smsmith 678217365Sjkim /* 679217365Sjkim * Just lock the entire namespace for the duration of the dump. 680217365Sjkim * We don't want any changes to the namespace during this time, 681217365Sjkim * especially the temporary nodes since we are going to display 682217365Sjkim * them also. 683217365Sjkim */ 684217365Sjkim Status = AcpiUtAcquireMutex (ACPI_MTX_NAMESPACE); 685217365Sjkim if (ACPI_FAILURE (Status)) 686217365Sjkim { 687217365Sjkim AcpiOsPrintf ("Could not acquire namespace mutex\n"); 688217365Sjkim return; 689217365Sjkim } 690217365Sjkim 69182367Smsmith Info.DebugLevel = ACPI_LV_TABLES; 69267754Smsmith Info.OwnerId = OwnerId; 69385756Smsmith Info.DisplayType = DisplayType; 69467754Smsmith 695102550Siwasaki (void) AcpiNsWalkNamespace (Type, StartHandle, MaxDepth, 696167802Sjkim ACPI_NS_WALK_NO_UNLOCK | ACPI_NS_WALK_TEMP_NODES, 697199337Sjkim AcpiNsDumpOneObject, NULL, (void *) &Info, NULL); 698217365Sjkim 699217365Sjkim (void) AcpiUtReleaseMutex (ACPI_MTX_NAMESPACE); 70067754Smsmith} 70167754Smsmith 70267754Smsmith 70377424Smsmith/******************************************************************************* 70467754Smsmith * 705151937Sjkim * FUNCTION: AcpiNsDumpEntry 706151937Sjkim * 707151937Sjkim * PARAMETERS: Handle - Node to be dumped 708151937Sjkim * DebugLevel - Output level 709151937Sjkim * 710151937Sjkim * RETURN: None 711151937Sjkim * 712151937Sjkim * DESCRIPTION: Dump a single Node 713151937Sjkim * 714151937Sjkim ******************************************************************************/ 715151937Sjkim 716151937Sjkimvoid 717151937SjkimAcpiNsDumpEntry ( 718151937Sjkim ACPI_HANDLE Handle, 719151937Sjkim UINT32 DebugLevel) 720151937Sjkim{ 721151937Sjkim ACPI_WALK_INFO Info; 722151937Sjkim 723151937Sjkim 724151937Sjkim ACPI_FUNCTION_ENTRY (); 725151937Sjkim 726151937Sjkim 727151937Sjkim Info.DebugLevel = DebugLevel; 728151937Sjkim Info.OwnerId = ACPI_OWNER_ID_MAX; 729151937Sjkim Info.DisplayType = ACPI_DISPLAY_SUMMARY; 730151937Sjkim 731151937Sjkim (void) AcpiNsDumpOneObject (Handle, 1, &Info, NULL); 732151937Sjkim} 733151937Sjkim 734151937Sjkim 735151937Sjkim#ifdef ACPI_ASL_COMPILER 736151937Sjkim/******************************************************************************* 737151937Sjkim * 73867754Smsmith * FUNCTION: AcpiNsDumpTables 73967754Smsmith * 74067754Smsmith * PARAMETERS: SearchBase - Root of subtree to be dumped, or 74167754Smsmith * NS_ALL to dump the entire namespace 742241973Sjkim * MaxDepth - Maximum depth of dump. Use INT_MAX 74367754Smsmith * for an effectively unlimited depth. 74467754Smsmith * 745151937Sjkim * RETURN: None 746151937Sjkim * 74767754Smsmith * DESCRIPTION: Dump the name space, or a portion of it. 74867754Smsmith * 74977424Smsmith ******************************************************************************/ 75067754Smsmith 75167754Smsmithvoid 75267754SmsmithAcpiNsDumpTables ( 75367754Smsmith ACPI_HANDLE SearchBase, 75467754Smsmith UINT32 MaxDepth) 75567754Smsmith{ 75667754Smsmith ACPI_HANDLE SearchHandle = SearchBase; 75767754Smsmith 75867754Smsmith 759167802Sjkim ACPI_FUNCTION_TRACE (NsDumpTables); 76067754Smsmith 76167754Smsmith 76267754Smsmith if (!AcpiGbl_RootNode) 76367754Smsmith { 76467754Smsmith /* 76567754Smsmith * If the name space has not been initialized, 76667754Smsmith * there is nothing to dump. 76767754Smsmith */ 768104470Siwasaki ACPI_DEBUG_PRINT ((ACPI_DB_TABLES, "namespace not initialized!\n")); 76967754Smsmith return_VOID; 77067754Smsmith } 77167754Smsmith 77291116Smsmith if (ACPI_NS_ALL == SearchBase) 77367754Smsmith { 774151937Sjkim /* Entire namespace */ 77567754Smsmith 77667754Smsmith SearchHandle = AcpiGbl_RootNode; 77782367Smsmith ACPI_DEBUG_PRINT ((ACPI_DB_TABLES, "\\\n")); 77867754Smsmith } 77967754Smsmith 78087031Smsmith AcpiNsDumpObjects (ACPI_TYPE_ANY, ACPI_DISPLAY_OBJECTS, MaxDepth, 781151937Sjkim ACPI_OWNER_ID_MAX, SearchHandle); 78267754Smsmith return_VOID; 78367754Smsmith} 78467754Smsmith#endif 785151937Sjkim#endif 786