nsdump.c revision 239340
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 { 273233250Sjkim /* No attached object. Some types should always have an object */ 27467754Smsmith 275233250Sjkim switch (Type) 276233250Sjkim { 277233250Sjkim case ACPI_TYPE_INTEGER: 278233250Sjkim case ACPI_TYPE_PACKAGE: 279233250Sjkim case ACPI_TYPE_BUFFER: 280233250Sjkim case ACPI_TYPE_STRING: 281233250Sjkim case ACPI_TYPE_METHOD: 282233250Sjkim AcpiOsPrintf ("<No attached object>"); 283233250Sjkim break; 284233250Sjkim 285233250Sjkim default: 286233250Sjkim break; 287233250Sjkim } 288233250Sjkim 28987031Smsmith AcpiOsPrintf ("\n"); 29085756Smsmith return (AE_OK); 29185756Smsmith } 29267754Smsmith 29385756Smsmith switch (Type) 29485756Smsmith { 29585756Smsmith case ACPI_TYPE_PROCESSOR: 296102550Siwasaki 297239340Sjkim AcpiOsPrintf ("ID %02X Len %02X Addr %p\n", 298138287Smarks ObjDesc->Processor.ProcId, ObjDesc->Processor.Length, 299193267Sjkim ACPI_CAST_PTR (void, ObjDesc->Processor.Address)); 30085756Smsmith break; 30167754Smsmith 30299146Siwasaki 30385756Smsmith case ACPI_TYPE_DEVICE: 304102550Siwasaki 305123315Snjl AcpiOsPrintf ("Notify Object: %p\n", ObjDesc); 30685756Smsmith break; 30767754Smsmith 30899146Siwasaki 30985756Smsmith case ACPI_TYPE_METHOD: 310102550Siwasaki 311107325Siwasaki AcpiOsPrintf ("Args %X Len %.4X Aml %p\n", 312138287Smarks (UINT32) ObjDesc->Method.ParamCount, 313138287Smarks ObjDesc->Method.AmlLength, ObjDesc->Method.AmlStart); 31485756Smsmith break; 31567754Smsmith 31699146Siwasaki 31785756Smsmith case ACPI_TYPE_INTEGER: 318102550Siwasaki 319107325Siwasaki AcpiOsPrintf ("= %8.8X%8.8X\n", 320138287Smarks ACPI_FORMAT_UINT64 (ObjDesc->Integer.Value)); 32185756Smsmith break; 32267754Smsmith 32399146Siwasaki 32485756Smsmith case ACPI_TYPE_PACKAGE: 32599146Siwasaki 32699146Siwasaki if (ObjDesc->Common.Flags & AOPOBJ_DATA_VALID) 32799146Siwasaki { 328107325Siwasaki AcpiOsPrintf ("Elements %.2X\n", 329138287Smarks ObjDesc->Package.Count); 33099146Siwasaki } 33199146Siwasaki else 33299146Siwasaki { 333107325Siwasaki AcpiOsPrintf ("[Length not yet evaluated]\n"); 33499146Siwasaki } 33585756Smsmith break; 33667754Smsmith 33799146Siwasaki 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 36399146Siwasaki 36485756Smsmith case ACPI_TYPE_STRING: 365102550Siwasaki 366107325Siwasaki AcpiOsPrintf ("Len %.2X ", ObjDesc->String.Length); 367107325Siwasaki AcpiUtPrintString (ObjDesc->String.Pointer, 32); 36887031Smsmith AcpiOsPrintf ("\n"); 36985756Smsmith break; 37067754Smsmith 37199146Siwasaki 37285756Smsmith case ACPI_TYPE_REGION: 373102550Siwasaki 374138287Smarks AcpiOsPrintf ("[%s]", 375138287Smarks AcpiUtGetRegionName (ObjDesc->Region.SpaceId)); 37685756Smsmith if (ObjDesc->Region.Flags & AOPOBJ_DATA_VALID) 37785756Smsmith { 37887031Smsmith AcpiOsPrintf (" Addr %8.8X%8.8X Len %.4X\n", 379193267Sjkim ACPI_FORMAT_NATIVE_UINT (ObjDesc->Region.Address), 380138287Smarks ObjDesc->Region.Length); 38185756Smsmith } 38285756Smsmith else 38385756Smsmith { 38499146Siwasaki AcpiOsPrintf (" [Address/Length not yet evaluated]\n"); 38585756Smsmith } 38685756Smsmith break; 38767754Smsmith 38899146Siwasaki 389107325Siwasaki case ACPI_TYPE_LOCAL_REFERENCE: 390102550Siwasaki 391193267Sjkim AcpiOsPrintf ("[%s]\n", AcpiUtGetReferenceName (ObjDesc)); 39285756Smsmith break; 39367754Smsmith 39499146Siwasaki 39585756Smsmith case ACPI_TYPE_BUFFER_FIELD: 396102550Siwasaki 39787031Smsmith if (ObjDesc->BufferField.BufferObj && 39887031Smsmith ObjDesc->BufferField.BufferObj->Buffer.Node) 39987031Smsmith { 400107325Siwasaki AcpiOsPrintf ("Buf [%4.4s]", 401193267Sjkim AcpiUtGetNodeName ( 402193267Sjkim ObjDesc->BufferField.BufferObj->Buffer.Node)); 40387031Smsmith } 40485756Smsmith break; 40585756Smsmith 40699146Siwasaki 407107325Siwasaki case ACPI_TYPE_LOCAL_REGION_FIELD: 408102550Siwasaki 409107325Siwasaki AcpiOsPrintf ("Rgn [%4.4s]", 410193267Sjkim AcpiUtGetNodeName ( 411193267Sjkim ObjDesc->CommonField.RegionObj->Region.Node)); 41285756Smsmith break; 41385756Smsmith 41499146Siwasaki 415107325Siwasaki case ACPI_TYPE_LOCAL_BANK_FIELD: 416102550Siwasaki 417107325Siwasaki AcpiOsPrintf ("Rgn [%4.4s] Bnk [%4.4s]", 418193267Sjkim AcpiUtGetNodeName ( 419193267Sjkim ObjDesc->CommonField.RegionObj->Region.Node), 420193267Sjkim AcpiUtGetNodeName ( 421193267Sjkim ObjDesc->BankField.BankObj->CommonField.Node)); 42285756Smsmith break; 42385756Smsmith 42499146Siwasaki 425107325Siwasaki case ACPI_TYPE_LOCAL_INDEX_FIELD: 426102550Siwasaki 427107325Siwasaki AcpiOsPrintf ("Idx [%4.4s] Dat [%4.4s]", 428193267Sjkim AcpiUtGetNodeName ( 429193267Sjkim ObjDesc->IndexField.IndexObj->CommonField.Node), 430193267Sjkim AcpiUtGetNodeName ( 431193267Sjkim ObjDesc->IndexField.DataObj->CommonField.Node)); 43285756Smsmith break; 43385756Smsmith 43499146Siwasaki 435107325Siwasaki case ACPI_TYPE_LOCAL_ALIAS: 436128212Snjl case ACPI_TYPE_LOCAL_METHOD_ALIAS: 437104470Siwasaki 438138287Smarks AcpiOsPrintf ("Target %4.4s (%p)\n", 439138287Smarks AcpiUtGetNodeName (ObjDesc), ObjDesc); 440104470Siwasaki break; 441104470Siwasaki 44285756Smsmith default: 443102550Siwasaki 444107325Siwasaki AcpiOsPrintf ("Object %p\n", ObjDesc); 44585756Smsmith break; 44685756Smsmith } 44785756Smsmith 44885756Smsmith /* Common field handling */ 44985756Smsmith 45085756Smsmith switch (Type) 45185756Smsmith { 45285756Smsmith case ACPI_TYPE_BUFFER_FIELD: 453107325Siwasaki case ACPI_TYPE_LOCAL_REGION_FIELD: 454107325Siwasaki case ACPI_TYPE_LOCAL_BANK_FIELD: 455107325Siwasaki case ACPI_TYPE_LOCAL_INDEX_FIELD: 456107325Siwasaki 457123315Snjl AcpiOsPrintf (" Off %.3X Len %.2X Acc %.2hd\n", 458138287Smarks (ObjDesc->CommonField.BaseByteOffset * 8) 459138287Smarks + ObjDesc->CommonField.StartFieldBitOffset, 460138287Smarks ObjDesc->CommonField.BitLength, 461138287Smarks ObjDesc->CommonField.AccessByteWidth); 46285756Smsmith break; 463102550Siwasaki 46499679Siwasaki default: 46599679Siwasaki break; 46685756Smsmith } 46767754Smsmith break; 46867754Smsmith 46967754Smsmith 47085756Smsmith case ACPI_DISPLAY_OBJECTS: 47167754Smsmith 472107325Siwasaki AcpiOsPrintf ("O:%p", ObjDesc); 47385756Smsmith if (!ObjDesc) 47485756Smsmith { 47585756Smsmith /* No attached object, we are done */ 47685756Smsmith 47787031Smsmith AcpiOsPrintf ("\n"); 47885756Smsmith return (AE_OK); 47985756Smsmith } 48085756Smsmith 481209746Sjkim AcpiOsPrintf ("(R%u)", ObjDesc->Common.ReferenceCount); 48285756Smsmith 48385756Smsmith switch (Type) 48485756Smsmith { 48585756Smsmith case ACPI_TYPE_METHOD: 48685756Smsmith 48785756Smsmith /* Name is a Method and its AML offset/length are set */ 48885756Smsmith 48987031Smsmith AcpiOsPrintf (" M:%p-%X\n", ObjDesc->Method.AmlStart, 490193267Sjkim ObjDesc->Method.AmlLength); 49185756Smsmith break; 49285756Smsmith 49385756Smsmith case ACPI_TYPE_INTEGER: 49485756Smsmith 495123315Snjl AcpiOsPrintf (" I:%8.8X8.8%X\n", 496193267Sjkim ACPI_FORMAT_UINT64 (ObjDesc->Integer.Value)); 49785756Smsmith break; 49885756Smsmith 49985756Smsmith case ACPI_TYPE_STRING: 50085756Smsmith 50187031Smsmith AcpiOsPrintf (" S:%p-%X\n", ObjDesc->String.Pointer, 502193267Sjkim ObjDesc->String.Length); 50385756Smsmith break; 50485756Smsmith 50585756Smsmith case ACPI_TYPE_BUFFER: 50685756Smsmith 50787031Smsmith AcpiOsPrintf (" B:%p-%X\n", ObjDesc->Buffer.Pointer, 508193267Sjkim ObjDesc->Buffer.Length); 50985756Smsmith break; 51085756Smsmith 51185756Smsmith default: 51285756Smsmith 51387031Smsmith AcpiOsPrintf ("\n"); 51485756Smsmith break; 51585756Smsmith } 51667754Smsmith break; 51787031Smsmith 51887031Smsmith 51987031Smsmith default: 52087031Smsmith AcpiOsPrintf ("\n"); 52187031Smsmith break; 52267754Smsmith } 52367754Smsmith 52467754Smsmith /* If debug turned off, done */ 52567754Smsmith 52682367Smsmith if (!(AcpiDbgLevel & ACPI_LV_VALUES)) 52767754Smsmith { 52867754Smsmith return (AE_OK); 52967754Smsmith } 53067754Smsmith 53167754Smsmith /* If there is an attached object, display it */ 53267754Smsmith 533104470Siwasaki DbgLevel = AcpiDbgLevel; 53491116Smsmith AcpiDbgLevel = 0; 535104470Siwasaki ObjDesc = AcpiNsGetAttachedObject (ThisNode); 53691116Smsmith AcpiDbgLevel = DbgLevel; 53767754Smsmith 53867754Smsmith /* Dump attached objects */ 53967754Smsmith 54085756Smsmith while (ObjDesc) 54167754Smsmith { 542107325Siwasaki ObjType = ACPI_TYPE_INVALID; 543151937Sjkim AcpiOsPrintf ("Attached Object %p: ", ObjDesc); 54467754Smsmith 54567754Smsmith /* Decode the type of attached object and dump the contents */ 54667754Smsmith 54791116Smsmith switch (ACPI_GET_DESCRIPTOR_TYPE (ObjDesc)) 54891116Smsmith { 54991116Smsmith case ACPI_DESC_TYPE_NAMED: 55067754Smsmith 55187031Smsmith AcpiOsPrintf ("(Ptr to Node)\n"); 55267754Smsmith BytesToDump = sizeof (ACPI_NAMESPACE_NODE); 553151937Sjkim ACPI_DUMP_BUFFER (ObjDesc, BytesToDump); 55491116Smsmith break; 55567754Smsmith 55699679Siwasaki case ACPI_DESC_TYPE_OPERAND: 55791116Smsmith 558193267Sjkim ObjType = ObjDesc->Common.Type; 55967754Smsmith 560107325Siwasaki if (ObjType > ACPI_TYPE_LOCAL_MAX) 56167754Smsmith { 562193267Sjkim AcpiOsPrintf ("(Pointer to ACPI Object type %.2X [UNKNOWN])\n", 563138287Smarks ObjType); 56467754Smsmith BytesToDump = 32; 56567754Smsmith } 56667754Smsmith else 56767754Smsmith { 568193267Sjkim AcpiOsPrintf ("(Pointer to ACPI Object type %.2X [%s])\n", 569151937Sjkim ObjType, AcpiUtGetTypeName (ObjType)); 57067754Smsmith BytesToDump = sizeof (ACPI_OPERAND_OBJECT); 57167754Smsmith } 572151937Sjkim 573151937Sjkim ACPI_DUMP_BUFFER (ObjDesc, BytesToDump); 57491116Smsmith break; 57591116Smsmith 57691116Smsmith default: 57791116Smsmith 57891116Smsmith break; 57967754Smsmith } 58067754Smsmith 58167754Smsmith /* If value is NOT an internal object, we are done */ 58267754Smsmith 58399679Siwasaki if (ACPI_GET_DESCRIPTOR_TYPE (ObjDesc) != ACPI_DESC_TYPE_OPERAND) 58467754Smsmith { 58567754Smsmith goto Cleanup; 58667754Smsmith } 58767754Smsmith 588193267Sjkim /* Valid object, get the pointer to next level, if any */ 589193267Sjkim 59067754Smsmith switch (ObjType) 59167754Smsmith { 592151937Sjkim case ACPI_TYPE_BUFFER: 59367754Smsmith case ACPI_TYPE_STRING: 594151937Sjkim /* 595151937Sjkim * NOTE: takes advantage of common fields between string/buffer 596151937Sjkim */ 597151937Sjkim BytesToDump = ObjDesc->String.Length; 59899679Siwasaki ObjDesc = (void *) ObjDesc->String.Pointer; 599151937Sjkim AcpiOsPrintf ( "(Buffer/String pointer %p length %X)\n", 600151937Sjkim ObjDesc, BytesToDump); 601151937Sjkim ACPI_DUMP_BUFFER (ObjDesc, BytesToDump); 602151937Sjkim goto Cleanup; 60367754Smsmith 60477424Smsmith case ACPI_TYPE_BUFFER_FIELD: 60585756Smsmith ObjDesc = (ACPI_OPERAND_OBJECT *) ObjDesc->BufferField.BufferObj; 60677424Smsmith break; 60777424Smsmith 60867754Smsmith case ACPI_TYPE_PACKAGE: 60999679Siwasaki ObjDesc = (void *) ObjDesc->Package.Elements; 61067754Smsmith break; 61167754Smsmith 61267754Smsmith case ACPI_TYPE_METHOD: 61399679Siwasaki ObjDesc = (void *) ObjDesc->Method.AmlStart; 61467754Smsmith break; 61567754Smsmith 616107325Siwasaki case ACPI_TYPE_LOCAL_REGION_FIELD: 61799679Siwasaki ObjDesc = (void *) ObjDesc->Field.RegionObj; 61867754Smsmith break; 61967754Smsmith 620107325Siwasaki case ACPI_TYPE_LOCAL_BANK_FIELD: 62199679Siwasaki ObjDesc = (void *) ObjDesc->BankField.RegionObj; 62267754Smsmith break; 62367754Smsmith 624107325Siwasaki case ACPI_TYPE_LOCAL_INDEX_FIELD: 62599679Siwasaki ObjDesc = (void *) ObjDesc->IndexField.IndexObj; 62667754Smsmith break; 62767754Smsmith 62899679Siwasaki default: 62967754Smsmith goto Cleanup; 63067754Smsmith } 63167754Smsmith 632107325Siwasaki ObjType = ACPI_TYPE_INVALID; /* Terminate loop after next pass */ 63367754Smsmith } 63467754Smsmith 63567754SmsmithCleanup: 63687031Smsmith AcpiOsPrintf ("\n"); 63767754Smsmith return (AE_OK); 63867754Smsmith} 63967754Smsmith 64067754Smsmith 64177424Smsmith/******************************************************************************* 64267754Smsmith * 64367754Smsmith * FUNCTION: AcpiNsDumpObjects 64467754Smsmith * 64567754Smsmith * PARAMETERS: Type - Object type to be dumped 646151937Sjkim * DisplayType - 0 or ACPI_DISPLAY_SUMMARY 647138287Smarks * MaxDepth - Maximum depth of dump. Use ACPI_UINT32_MAX 64867754Smsmith * for an effectively unlimited depth. 649193267Sjkim * OwnerId - Dump only objects owned by this ID. Use 65067754Smsmith * ACPI_UINT32_MAX to match all owners. 65167754Smsmith * StartHandle - Where in namespace to start/end search 65267754Smsmith * 653151937Sjkim * RETURN: None 654151937Sjkim * 655193267Sjkim * DESCRIPTION: Dump typed objects within the loaded namespace. Uses 656193267Sjkim * AcpiNsWalkNamespace in conjunction with AcpiNsDumpOneObject. 65767754Smsmith * 65877424Smsmith ******************************************************************************/ 65967754Smsmith 66067754Smsmithvoid 66167754SmsmithAcpiNsDumpObjects ( 66291116Smsmith ACPI_OBJECT_TYPE Type, 66385756Smsmith UINT8 DisplayType, 66467754Smsmith UINT32 MaxDepth, 665151937Sjkim ACPI_OWNER_ID OwnerId, 66667754Smsmith ACPI_HANDLE StartHandle) 66767754Smsmith{ 66867754Smsmith ACPI_WALK_INFO Info; 669217365Sjkim ACPI_STATUS Status; 67067754Smsmith 67167754Smsmith 67291116Smsmith ACPI_FUNCTION_ENTRY (); 67383174Smsmith 67483174Smsmith 675217365Sjkim /* 676217365Sjkim * Just lock the entire namespace for the duration of the dump. 677217365Sjkim * We don't want any changes to the namespace during this time, 678217365Sjkim * especially the temporary nodes since we are going to display 679217365Sjkim * them also. 680217365Sjkim */ 681217365Sjkim Status = AcpiUtAcquireMutex (ACPI_MTX_NAMESPACE); 682217365Sjkim if (ACPI_FAILURE (Status)) 683217365Sjkim { 684217365Sjkim AcpiOsPrintf ("Could not acquire namespace mutex\n"); 685217365Sjkim return; 686217365Sjkim } 687217365Sjkim 68882367Smsmith Info.DebugLevel = ACPI_LV_TABLES; 68967754Smsmith Info.OwnerId = OwnerId; 69085756Smsmith Info.DisplayType = DisplayType; 69167754Smsmith 692102550Siwasaki (void) AcpiNsWalkNamespace (Type, StartHandle, MaxDepth, 693167802Sjkim ACPI_NS_WALK_NO_UNLOCK | ACPI_NS_WALK_TEMP_NODES, 694199337Sjkim AcpiNsDumpOneObject, NULL, (void *) &Info, NULL); 695217365Sjkim 696217365Sjkim (void) AcpiUtReleaseMutex (ACPI_MTX_NAMESPACE); 69767754Smsmith} 69867754Smsmith 69967754Smsmith 70077424Smsmith/******************************************************************************* 70167754Smsmith * 702151937Sjkim * FUNCTION: AcpiNsDumpEntry 703151937Sjkim * 704151937Sjkim * PARAMETERS: Handle - Node to be dumped 705151937Sjkim * DebugLevel - Output level 706151937Sjkim * 707151937Sjkim * RETURN: None 708151937Sjkim * 709151937Sjkim * DESCRIPTION: Dump a single Node 710151937Sjkim * 711151937Sjkim ******************************************************************************/ 712151937Sjkim 713151937Sjkimvoid 714151937SjkimAcpiNsDumpEntry ( 715151937Sjkim ACPI_HANDLE Handle, 716151937Sjkim UINT32 DebugLevel) 717151937Sjkim{ 718151937Sjkim ACPI_WALK_INFO Info; 719151937Sjkim 720151937Sjkim 721151937Sjkim ACPI_FUNCTION_ENTRY (); 722151937Sjkim 723151937Sjkim 724151937Sjkim Info.DebugLevel = DebugLevel; 725151937Sjkim Info.OwnerId = ACPI_OWNER_ID_MAX; 726151937Sjkim Info.DisplayType = ACPI_DISPLAY_SUMMARY; 727151937Sjkim 728151937Sjkim (void) AcpiNsDumpOneObject (Handle, 1, &Info, NULL); 729151937Sjkim} 730151937Sjkim 731151937Sjkim 732151937Sjkim#ifdef ACPI_ASL_COMPILER 733151937Sjkim/******************************************************************************* 734151937Sjkim * 73567754Smsmith * FUNCTION: AcpiNsDumpTables 73667754Smsmith * 73767754Smsmith * PARAMETERS: SearchBase - Root of subtree to be dumped, or 73867754Smsmith * NS_ALL to dump the entire namespace 73967754Smsmith * MaxDepth - Maximum depth of dump. Use INT_MAX 74067754Smsmith * for an effectively unlimited depth. 74167754Smsmith * 742151937Sjkim * RETURN: None 743151937Sjkim * 74467754Smsmith * DESCRIPTION: Dump the name space, or a portion of it. 74567754Smsmith * 74677424Smsmith ******************************************************************************/ 74767754Smsmith 74867754Smsmithvoid 74967754SmsmithAcpiNsDumpTables ( 75067754Smsmith ACPI_HANDLE SearchBase, 75167754Smsmith UINT32 MaxDepth) 75267754Smsmith{ 75367754Smsmith ACPI_HANDLE SearchHandle = SearchBase; 75467754Smsmith 75567754Smsmith 756167802Sjkim ACPI_FUNCTION_TRACE (NsDumpTables); 75767754Smsmith 75867754Smsmith 75967754Smsmith if (!AcpiGbl_RootNode) 76067754Smsmith { 76167754Smsmith /* 76267754Smsmith * If the name space has not been initialized, 76367754Smsmith * there is nothing to dump. 76467754Smsmith */ 765104470Siwasaki ACPI_DEBUG_PRINT ((ACPI_DB_TABLES, "namespace not initialized!\n")); 76667754Smsmith return_VOID; 76767754Smsmith } 76867754Smsmith 76991116Smsmith if (ACPI_NS_ALL == SearchBase) 77067754Smsmith { 771151937Sjkim /* Entire namespace */ 77267754Smsmith 77367754Smsmith SearchHandle = AcpiGbl_RootNode; 77482367Smsmith ACPI_DEBUG_PRINT ((ACPI_DB_TABLES, "\\\n")); 77567754Smsmith } 77667754Smsmith 77787031Smsmith AcpiNsDumpObjects (ACPI_TYPE_ANY, ACPI_DISPLAY_OBJECTS, MaxDepth, 778151937Sjkim ACPI_OWNER_ID_MAX, SearchHandle); 77967754Smsmith return_VOID; 78067754Smsmith} 78167754Smsmith#endif 782151937Sjkim#endif 78367754Smsmith 784