167754Smsmith/******************************************************************************* 267754Smsmith * 367754Smsmith * Module Name: dbdisply - debug display commands 467754Smsmith * 567754Smsmith ******************************************************************************/ 667754Smsmith 7217365Sjkim/* 8281075Sdim * Copyright (C) 2000 - 2015, 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 44193341Sjkim#include <contrib/dev/acpica/include/acpi.h> 45193341Sjkim#include <contrib/dev/acpica/include/accommon.h> 46193341Sjkim#include <contrib/dev/acpica/include/amlcode.h> 47193341Sjkim#include <contrib/dev/acpica/include/acdispat.h> 48193341Sjkim#include <contrib/dev/acpica/include/acnamesp.h> 49193341Sjkim#include <contrib/dev/acpica/include/acparser.h> 50193341Sjkim#include <contrib/dev/acpica/include/acinterp.h> 51193341Sjkim#include <contrib/dev/acpica/include/acdebug.h> 52193341Sjkim#include <contrib/dev/acpica/include/acdisasm.h> 5367754Smsmith 5467754Smsmith 55102550Siwasaki#ifdef ACPI_DEBUGGER 5667754Smsmith 57102550Siwasaki#define _COMPONENT ACPI_CA_DEBUGGER 5891116Smsmith ACPI_MODULE_NAME ("dbdisply") 5967754Smsmith 60151937Sjkim/* Local prototypes */ 6167754Smsmith 62151937Sjkimstatic void 63151937SjkimAcpiDbDumpParserDescriptor ( 64151937Sjkim ACPI_PARSE_OBJECT *Op); 65151937Sjkim 66151937Sjkimstatic void * 67151937SjkimAcpiDbGetPointer ( 68151937Sjkim void *Target); 69151937Sjkim 70249663Sjkimstatic ACPI_STATUS 71249663SjkimAcpiDbDisplayNonRootHandlers ( 72249663Sjkim ACPI_HANDLE ObjHandle, 73249663Sjkim UINT32 NestingLevel, 74249663Sjkim void *Context, 75249663Sjkim void **ReturnValue); 76151937Sjkim 77220663Sjkim/* 78220663Sjkim * System handler information. 79220663Sjkim * Used for Handlers command, in AcpiDbDisplayHandlers. 80220663Sjkim */ 81220663Sjkim#define ACPI_PREDEFINED_PREFIX "%25s (%.2X) : " 82220663Sjkim#define ACPI_HANDLER_NAME_STRING "%30s : " 83220663Sjkim#define ACPI_HANDLER_PRESENT_STRING "%-9s (%p)\n" 84249663Sjkim#define ACPI_HANDLER_PRESENT_STRING2 "%-9s (%p)" 85220663Sjkim#define ACPI_HANDLER_NOT_PRESENT_STRING "%-9s\n" 86220663Sjkim 87220663Sjkim/* All predefined Address Space IDs */ 88220663Sjkim 89220663Sjkimstatic ACPI_ADR_SPACE_TYPE AcpiGbl_SpaceIdList[] = 90220663Sjkim{ 91220663Sjkim ACPI_ADR_SPACE_SYSTEM_MEMORY, 92220663Sjkim ACPI_ADR_SPACE_SYSTEM_IO, 93220663Sjkim ACPI_ADR_SPACE_PCI_CONFIG, 94220663Sjkim ACPI_ADR_SPACE_EC, 95220663Sjkim ACPI_ADR_SPACE_SMBUS, 96220663Sjkim ACPI_ADR_SPACE_CMOS, 97220663Sjkim ACPI_ADR_SPACE_PCI_BAR_TARGET, 98220663Sjkim ACPI_ADR_SPACE_IPMI, 99228110Sjkim ACPI_ADR_SPACE_GPIO, 100228110Sjkim ACPI_ADR_SPACE_GSBUS, 101220663Sjkim ACPI_ADR_SPACE_DATA_TABLE, 102220663Sjkim ACPI_ADR_SPACE_FIXED_HARDWARE 103220663Sjkim}; 104220663Sjkim 105220663Sjkim/* Global handler information */ 106220663Sjkim 107220663Sjkimtypedef struct acpi_handler_info 108220663Sjkim{ 109220663Sjkim void *Handler; 110220663Sjkim char *Name; 111220663Sjkim 112220663Sjkim} ACPI_HANDLER_INFO; 113220663Sjkim 114220663Sjkimstatic ACPI_HANDLER_INFO AcpiGbl_HandlerList[] = 115220663Sjkim{ 116234623Sjkim {&AcpiGbl_GlobalNotify[0].Handler, "System Notifications"}, 117234623Sjkim {&AcpiGbl_GlobalNotify[1].Handler, "Device Notifications"}, 118220663Sjkim {&AcpiGbl_TableHandler, "ACPI Table Events"}, 119220663Sjkim {&AcpiGbl_ExceptionHandler, "Control Method Exceptions"}, 120220663Sjkim {&AcpiGbl_InterfaceHandler, "OSI Invocations"} 121220663Sjkim}; 122220663Sjkim 123220663Sjkim 124151937Sjkim/******************************************************************************* 12567754Smsmith * 12667754Smsmith * FUNCTION: AcpiDbGetPointer 12767754Smsmith * 12867754Smsmith * PARAMETERS: Target - Pointer to string to be converted 12967754Smsmith * 13067754Smsmith * RETURN: Converted pointer 13167754Smsmith * 13267754Smsmith * DESCRIPTION: Convert an ascii pointer value to a real value 13367754Smsmith * 134151937Sjkim ******************************************************************************/ 13567754Smsmith 136151937Sjkimstatic void * 13767754SmsmithAcpiDbGetPointer ( 13867754Smsmith void *Target) 13967754Smsmith{ 14067754Smsmith void *ObjPtr; 141252279Sjkim ACPI_SIZE Address; 14267754Smsmith 14367754Smsmith 144252279Sjkim Address = ACPI_STRTOUL (Target, NULL, 16); 145252279Sjkim ObjPtr = ACPI_TO_POINTER (Address); 14667754Smsmith return (ObjPtr); 14767754Smsmith} 14867754Smsmith 14967754Smsmith 15067754Smsmith/******************************************************************************* 15167754Smsmith * 15267754Smsmith * FUNCTION: AcpiDbDumpParserDescriptor 15367754Smsmith * 15467754Smsmith * PARAMETERS: Op - A parser Op descriptor 15567754Smsmith * 15667754Smsmith * RETURN: None 15767754Smsmith * 15867754Smsmith * DESCRIPTION: Display a formatted parser object 15967754Smsmith * 16067754Smsmith ******************************************************************************/ 16167754Smsmith 162151937Sjkimstatic void 16367754SmsmithAcpiDbDumpParserDescriptor ( 16467754Smsmith ACPI_PARSE_OBJECT *Op) 16567754Smsmith{ 16683174Smsmith const ACPI_OPCODE_INFO *Info; 16767754Smsmith 16867754Smsmith 16999679Siwasaki Info = AcpiPsGetOpcodeInfo (Op->Common.AmlOpcode); 17067754Smsmith 17167754Smsmith AcpiOsPrintf ("Parser Op Descriptor:\n"); 17299679Siwasaki AcpiOsPrintf ("%20.20s : %4.4X\n", "Opcode", Op->Common.AmlOpcode); 17367754Smsmith 174151937Sjkim ACPI_DEBUG_ONLY_MEMBERS (AcpiOsPrintf ("%20.20s : %s\n", "Opcode Name", 175151937Sjkim Info->Name)); 17667754Smsmith 17799679Siwasaki AcpiOsPrintf ("%20.20s : %p\n", "Value/ArgList", Op->Common.Value.Arg); 17899679Siwasaki AcpiOsPrintf ("%20.20s : %p\n", "Parent", Op->Common.Parent); 17999679Siwasaki AcpiOsPrintf ("%20.20s : %p\n", "NextOp", Op->Common.Next); 18067754Smsmith} 18167754Smsmith 18267754Smsmith 18367754Smsmith/******************************************************************************* 18467754Smsmith * 18567754Smsmith * FUNCTION: AcpiDbDecodeAndDisplayObject 18667754Smsmith * 187241973Sjkim * PARAMETERS: Target - String with object to be displayed. Names 18867754Smsmith * and hex pointers are supported. 18967754Smsmith * OutputType - Byte, Word, Dword, or Qword (B|W|D|Q) 19067754Smsmith * 19167754Smsmith * RETURN: None 19267754Smsmith * 19367754Smsmith * DESCRIPTION: Display a formatted ACPI object 19467754Smsmith * 19567754Smsmith ******************************************************************************/ 19667754Smsmith 19767754Smsmithvoid 19867754SmsmithAcpiDbDecodeAndDisplayObject ( 199114237Snjl char *Target, 200114237Snjl char *OutputType) 20167754Smsmith{ 20267754Smsmith void *ObjPtr; 20367754Smsmith ACPI_NAMESPACE_NODE *Node; 20487031Smsmith ACPI_OPERAND_OBJECT *ObjDesc; 20567754Smsmith UINT32 Display = DB_BYTE_DISPLAY; 206114237Snjl char Buffer[80]; 20767754Smsmith ACPI_BUFFER RetBuf; 20867754Smsmith ACPI_STATUS Status; 20967754Smsmith UINT32 Size; 21067754Smsmith 21167754Smsmith 21267754Smsmith if (!Target) 21367754Smsmith { 21467754Smsmith return; 21567754Smsmith } 21667754Smsmith 21767754Smsmith /* Decode the output type */ 21867754Smsmith 21967754Smsmith if (OutputType) 22067754Smsmith { 221151937Sjkim AcpiUtStrupr (OutputType); 22267754Smsmith if (OutputType[0] == 'W') 22367754Smsmith { 22467754Smsmith Display = DB_WORD_DISPLAY; 22567754Smsmith } 22667754Smsmith else if (OutputType[0] == 'D') 22767754Smsmith { 22867754Smsmith Display = DB_DWORD_DISPLAY; 22967754Smsmith } 23067754Smsmith else if (OutputType[0] == 'Q') 23167754Smsmith { 23267754Smsmith Display = DB_QWORD_DISPLAY; 23367754Smsmith } 23467754Smsmith } 23567754Smsmith 23667754Smsmith RetBuf.Length = sizeof (Buffer); 23767754Smsmith RetBuf.Pointer = Buffer; 23867754Smsmith 23967754Smsmith /* Differentiate between a number and a name */ 24067754Smsmith 24167754Smsmith if ((Target[0] >= 0x30) && (Target[0] <= 0x39)) 24267754Smsmith { 24367754Smsmith ObjPtr = AcpiDbGetPointer (Target); 24467754Smsmith if (!AcpiOsReadable (ObjPtr, 16)) 24567754Smsmith { 246151937Sjkim AcpiOsPrintf ("Address %p is invalid in this address space\n", 247151937Sjkim ObjPtr); 24867754Smsmith return; 24967754Smsmith } 25067754Smsmith 25167754Smsmith /* Decode the object type */ 25267754Smsmith 25391116Smsmith switch (ACPI_GET_DESCRIPTOR_TYPE (ObjPtr)) 25467754Smsmith { 25591116Smsmith case ACPI_DESC_TYPE_NAMED: 25667754Smsmith 25791116Smsmith /* This is a namespace Node */ 25891116Smsmith 25967754Smsmith if (!AcpiOsReadable (ObjPtr, sizeof (ACPI_NAMESPACE_NODE))) 26067754Smsmith { 261151937Sjkim AcpiOsPrintf ( 262151937Sjkim "Cannot read entire Named object at address %p\n", ObjPtr); 26367754Smsmith return; 26467754Smsmith } 26567754Smsmith 26667754Smsmith Node = ObjPtr; 267151937Sjkim goto DumpNode; 26867754Smsmith 26999679Siwasaki case ACPI_DESC_TYPE_OPERAND: 27091116Smsmith 27191116Smsmith /* This is a ACPI OPERAND OBJECT */ 27291116Smsmith 27367754Smsmith if (!AcpiOsReadable (ObjPtr, sizeof (ACPI_OPERAND_OBJECT))) 27467754Smsmith { 275151937Sjkim AcpiOsPrintf ("Cannot read entire ACPI object at address %p\n", 276151937Sjkim ObjPtr); 27767754Smsmith return; 27867754Smsmith } 27967754Smsmith 280241973Sjkim AcpiUtDebugDumpBuffer (ObjPtr, sizeof (ACPI_OPERAND_OBJECT), Display, 281151937Sjkim ACPI_UINT32_MAX); 28277424Smsmith AcpiExDumpObjectDescriptor (ObjPtr, 1); 28391116Smsmith break; 28467754Smsmith 28591116Smsmith case ACPI_DESC_TYPE_PARSER: 28691116Smsmith 28791116Smsmith /* This is a Parser Op object */ 28891116Smsmith 28967754Smsmith if (!AcpiOsReadable (ObjPtr, sizeof (ACPI_PARSE_OBJECT))) 29067754Smsmith { 291151937Sjkim AcpiOsPrintf ( 292151937Sjkim "Cannot read entire Parser object at address %p\n", ObjPtr); 29367754Smsmith return; 29467754Smsmith } 29567754Smsmith 296241973Sjkim AcpiUtDebugDumpBuffer (ObjPtr, sizeof (ACPI_PARSE_OBJECT), Display, 297151937Sjkim ACPI_UINT32_MAX); 29867754Smsmith AcpiDbDumpParserDescriptor ((ACPI_PARSE_OBJECT *) ObjPtr); 29991116Smsmith break; 30067754Smsmith 30191116Smsmith default: 30291116Smsmith 30391116Smsmith /* Is not a recognizeable object */ 30491116Smsmith 305281075Sdim AcpiOsPrintf ( 306281075Sdim "Not a known ACPI internal object, descriptor type %2.2X\n", 307281075Sdim ACPI_GET_DESCRIPTOR_TYPE (ObjPtr)); 308281075Sdim 30967754Smsmith Size = 16; 31067754Smsmith if (AcpiOsReadable (ObjPtr, 64)) 31167754Smsmith { 31267754Smsmith Size = 64; 31367754Smsmith } 31467754Smsmith 31567754Smsmith /* Just dump some memory */ 31667754Smsmith 317241973Sjkim AcpiUtDebugDumpBuffer (ObjPtr, Size, Display, ACPI_UINT32_MAX); 31891116Smsmith break; 31967754Smsmith } 32067754Smsmith 32167754Smsmith return; 32267754Smsmith } 32367754Smsmith 32467754Smsmith /* The parameter is a name string that must be resolved to a Named obj */ 32567754Smsmith 32667754Smsmith Node = AcpiDbLocalNsLookup (Target); 32767754Smsmith if (!Node) 32867754Smsmith { 32967754Smsmith return; 33067754Smsmith } 33167754Smsmith 33267754Smsmith 333151937SjkimDumpNode: 334151937Sjkim /* Now dump the NS node */ 33567754Smsmith 33667754Smsmith Status = AcpiGetName (Node, ACPI_FULL_PATHNAME, &RetBuf); 33767754Smsmith if (ACPI_FAILURE (Status)) 33867754Smsmith { 33967754Smsmith AcpiOsPrintf ("Could not convert name to pathname\n"); 34067754Smsmith } 34167754Smsmith 34269746Smsmith else 34369746Smsmith { 344151937Sjkim AcpiOsPrintf ("Object (%p) Pathname: %s\n", 345151937Sjkim Node, (char *) RetBuf.Pointer); 34669746Smsmith } 34769746Smsmith 34867754Smsmith if (!AcpiOsReadable (Node, sizeof (ACPI_NAMESPACE_NODE))) 34967754Smsmith { 35067754Smsmith AcpiOsPrintf ("Invalid Named object at address %p\n", Node); 35167754Smsmith return; 35267754Smsmith } 35367754Smsmith 354241973Sjkim AcpiUtDebugDumpBuffer ((void *) Node, sizeof (ACPI_NAMESPACE_NODE), 355151937Sjkim Display, ACPI_UINT32_MAX); 356167802Sjkim AcpiExDumpNamespaceNode (Node, 1); 35767754Smsmith 35887031Smsmith ObjDesc = AcpiNsGetAttachedObject (Node); 35987031Smsmith if (ObjDesc) 36067754Smsmith { 36187031Smsmith AcpiOsPrintf ("\nAttached Object (%p):\n", ObjDesc); 36287031Smsmith if (!AcpiOsReadable (ObjDesc, sizeof (ACPI_OPERAND_OBJECT))) 36367754Smsmith { 364151937Sjkim AcpiOsPrintf ("Invalid internal ACPI Object at address %p\n", 365151937Sjkim ObjDesc); 36667754Smsmith return; 36767754Smsmith } 36867754Smsmith 369241973Sjkim AcpiUtDebugDumpBuffer ((void *) ObjDesc, sizeof (ACPI_OPERAND_OBJECT), 370151937Sjkim Display, ACPI_UINT32_MAX); 37187031Smsmith AcpiExDumpObjectDescriptor (ObjDesc, 1); 37267754Smsmith } 37367754Smsmith} 37467754Smsmith 37567754Smsmith 37667754Smsmith/******************************************************************************* 37767754Smsmith * 37867754Smsmith * FUNCTION: AcpiDbDisplayMethodInfo 37967754Smsmith * 38067754Smsmith * PARAMETERS: StartOp - Root of the control method parse tree 38167754Smsmith * 38267754Smsmith * RETURN: None 38367754Smsmith * 38467754Smsmith * DESCRIPTION: Display information about the current method 38567754Smsmith * 38667754Smsmith ******************************************************************************/ 38767754Smsmith 38867754Smsmithvoid 38967754SmsmithAcpiDbDisplayMethodInfo ( 39067754Smsmith ACPI_PARSE_OBJECT *StartOp) 39167754Smsmith{ 39267754Smsmith ACPI_WALK_STATE *WalkState; 39367754Smsmith ACPI_OPERAND_OBJECT *ObjDesc; 39467754Smsmith ACPI_NAMESPACE_NODE *Node; 39567754Smsmith ACPI_PARSE_OBJECT *RootOp; 39667754Smsmith ACPI_PARSE_OBJECT *Op; 39783174Smsmith const ACPI_OPCODE_INFO *OpInfo; 39867754Smsmith UINT32 NumOps = 0; 39967754Smsmith UINT32 NumOperands = 0; 40067754Smsmith UINT32 NumOperators = 0; 40167754Smsmith UINT32 NumRemainingOps = 0; 40267754Smsmith UINT32 NumRemainingOperands = 0; 40367754Smsmith UINT32 NumRemainingOperators = 0; 40467754Smsmith BOOLEAN CountRemaining = FALSE; 40567754Smsmith 40667754Smsmith 40767754Smsmith WalkState = AcpiDsGetCurrentWalkState (AcpiGbl_CurrentWalkList); 40867754Smsmith if (!WalkState) 40967754Smsmith { 41067754Smsmith AcpiOsPrintf ("There is no method currently executing\n"); 41167754Smsmith return; 41267754Smsmith } 41367754Smsmith 41467754Smsmith ObjDesc = WalkState->MethodDesc; 41587031Smsmith Node = WalkState->MethodNode; 41667754Smsmith 417123315Snjl AcpiOsPrintf ("Currently executing control method is [%4.4s]\n", 418123315Snjl AcpiUtGetNodeName (Node)); 419167802Sjkim AcpiOsPrintf ("%X Arguments, SyncLevel = %X\n", 420167802Sjkim (UINT32) ObjDesc->Method.ParamCount, 421167802Sjkim (UINT32) ObjDesc->Method.SyncLevel); 42267754Smsmith 42367754Smsmith 42467754Smsmith RootOp = StartOp; 42599679Siwasaki while (RootOp->Common.Parent) 42667754Smsmith { 42799679Siwasaki RootOp = RootOp->Common.Parent; 42867754Smsmith } 42967754Smsmith 43067754Smsmith Op = RootOp; 43167754Smsmith 43267754Smsmith while (Op) 43367754Smsmith { 43467754Smsmith if (Op == StartOp) 43567754Smsmith { 43667754Smsmith CountRemaining = TRUE; 43767754Smsmith } 43867754Smsmith 43967754Smsmith NumOps++; 44067754Smsmith if (CountRemaining) 44167754Smsmith { 44267754Smsmith NumRemainingOps++; 44367754Smsmith } 44467754Smsmith 44567754Smsmith /* Decode the opcode */ 44667754Smsmith 44799679Siwasaki OpInfo = AcpiPsGetOpcodeInfo (Op->Common.AmlOpcode); 44885756Smsmith switch (OpInfo->Class) 44967754Smsmith { 45085756Smsmith case AML_CLASS_ARGUMENT: 451250838Sjkim 45267754Smsmith if (CountRemaining) 45367754Smsmith { 45467754Smsmith NumRemainingOperands++; 45567754Smsmith } 45667754Smsmith 45767754Smsmith NumOperands++; 45867754Smsmith break; 45967754Smsmith 46085756Smsmith case AML_CLASS_UNKNOWN: 461250838Sjkim 46285756Smsmith /* Bad opcode or ASCII character */ 46385756Smsmith 46485756Smsmith continue; 46585756Smsmith 46667754Smsmith default: 467250838Sjkim 46867754Smsmith if (CountRemaining) 46967754Smsmith { 47067754Smsmith NumRemainingOperators++; 47167754Smsmith } 47267754Smsmith 47367754Smsmith NumOperators++; 47467754Smsmith break; 47567754Smsmith } 47667754Smsmith 47767754Smsmith Op = AcpiPsGetDepthNext (StartOp, Op); 47867754Smsmith } 47967754Smsmith 480151937Sjkim AcpiOsPrintf ( 481151937Sjkim "Method contains: %X AML Opcodes - %X Operators, %X Operands\n", 482151937Sjkim NumOps, NumOperators, NumOperands); 48367754Smsmith 484151937Sjkim AcpiOsPrintf ( 485151937Sjkim "Remaining to execute: %X AML Opcodes - %X Operators, %X Operands\n", 486151937Sjkim NumRemainingOps, NumRemainingOperators, NumRemainingOperands); 48767754Smsmith} 48867754Smsmith 48967754Smsmith 49067754Smsmith/******************************************************************************* 49167754Smsmith * 49267754Smsmith * FUNCTION: AcpiDbDisplayLocals 49367754Smsmith * 49467754Smsmith * PARAMETERS: None 49567754Smsmith * 49667754Smsmith * RETURN: None 49767754Smsmith * 49867754Smsmith * DESCRIPTION: Display all locals for the currently running control method 49967754Smsmith * 50067754Smsmith ******************************************************************************/ 50167754Smsmith 50267754Smsmithvoid 503151937SjkimAcpiDbDisplayLocals ( 504151937Sjkim void) 50567754Smsmith{ 50667754Smsmith ACPI_WALK_STATE *WalkState; 50767754Smsmith 50867754Smsmith 50967754Smsmith WalkState = AcpiDsGetCurrentWalkState (AcpiGbl_CurrentWalkList); 51067754Smsmith if (!WalkState) 51167754Smsmith { 51267754Smsmith AcpiOsPrintf ("There is no method currently executing\n"); 51367754Smsmith return; 51467754Smsmith } 51567754Smsmith 516117521Snjl AcpiDmDisplayLocals (WalkState); 51767754Smsmith} 51867754Smsmith 51967754Smsmith 52067754Smsmith/******************************************************************************* 52167754Smsmith * 52267754Smsmith * FUNCTION: AcpiDbDisplayArguments 52367754Smsmith * 52467754Smsmith * PARAMETERS: None 52567754Smsmith * 52667754Smsmith * RETURN: None 52767754Smsmith * 52867754Smsmith * DESCRIPTION: Display all arguments for the currently running control method 52967754Smsmith * 53067754Smsmith ******************************************************************************/ 53167754Smsmith 53267754Smsmithvoid 533151937SjkimAcpiDbDisplayArguments ( 534151937Sjkim void) 53567754Smsmith{ 53667754Smsmith ACPI_WALK_STATE *WalkState; 53767754Smsmith 53867754Smsmith 53967754Smsmith WalkState = AcpiDsGetCurrentWalkState (AcpiGbl_CurrentWalkList); 54067754Smsmith if (!WalkState) 54167754Smsmith { 54267754Smsmith AcpiOsPrintf ("There is no method currently executing\n"); 54367754Smsmith return; 54467754Smsmith } 54567754Smsmith 546117521Snjl AcpiDmDisplayArguments (WalkState); 54767754Smsmith} 54867754Smsmith 54967754Smsmith 55067754Smsmith/******************************************************************************* 55167754Smsmith * 55267754Smsmith * FUNCTION: AcpiDbDisplayResults 55367754Smsmith * 55467754Smsmith * PARAMETERS: None 55567754Smsmith * 55667754Smsmith * RETURN: None 55767754Smsmith * 55867754Smsmith * DESCRIPTION: Display current contents of a method result stack 55967754Smsmith * 56067754Smsmith ******************************************************************************/ 56167754Smsmith 56267754Smsmithvoid 563151937SjkimAcpiDbDisplayResults ( 564151937Sjkim void) 56567754Smsmith{ 56667754Smsmith UINT32 i; 56767754Smsmith ACPI_WALK_STATE *WalkState; 56867754Smsmith ACPI_OPERAND_OBJECT *ObjDesc; 569167802Sjkim UINT32 ResultCount = 0; 57067754Smsmith ACPI_NAMESPACE_NODE *Node; 571167802Sjkim ACPI_GENERIC_STATE *Frame; 572167802Sjkim UINT32 Index; /* Index onto current frame */ 57367754Smsmith 57467754Smsmith 57567754Smsmith WalkState = AcpiDsGetCurrentWalkState (AcpiGbl_CurrentWalkList); 57667754Smsmith if (!WalkState) 57767754Smsmith { 57867754Smsmith AcpiOsPrintf ("There is no method currently executing\n"); 57967754Smsmith return; 58067754Smsmith } 58167754Smsmith 58267754Smsmith ObjDesc = WalkState->MethodDesc; 583123315Snjl Node = WalkState->MethodNode; 58467754Smsmith 58569746Smsmith if (WalkState->Results) 58669746Smsmith { 587167802Sjkim ResultCount = WalkState->ResultCount; 58869746Smsmith } 58967754Smsmith 59087031Smsmith AcpiOsPrintf ("Method [%4.4s] has %X stacked result objects\n", 591167802Sjkim AcpiUtGetNodeName (Node), ResultCount); 59269746Smsmith 593167802Sjkim /* From the top element of result stack */ 594167802Sjkim 595167802Sjkim Frame = WalkState->Results; 596167802Sjkim Index = (ResultCount - 1) % ACPI_RESULTS_FRAME_OBJ_NUM; 597167802Sjkim 598167802Sjkim for (i = 0; i < ResultCount; i++) 59967754Smsmith { 600167802Sjkim ObjDesc = Frame->Results.ObjDesc[Index]; 601209746Sjkim AcpiOsPrintf ("Result%u: ", i); 602117521Snjl AcpiDmDisplayInternalObject (ObjDesc, WalkState); 603167802Sjkim if (Index == 0) 604167802Sjkim { 605167802Sjkim Frame = Frame->Results.Next; 606167802Sjkim Index = ACPI_RESULTS_FRAME_OBJ_NUM; 607167802Sjkim } 608167802Sjkim Index--; 60967754Smsmith } 61067754Smsmith} 61167754Smsmith 61267754Smsmith 61367754Smsmith/******************************************************************************* 61467754Smsmith * 61567754Smsmith * FUNCTION: AcpiDbDisplayCallingTree 61667754Smsmith * 61767754Smsmith * PARAMETERS: None 61867754Smsmith * 61967754Smsmith * RETURN: None 62067754Smsmith * 62167754Smsmith * DESCRIPTION: Display current calling tree of nested control methods 62267754Smsmith * 62367754Smsmith ******************************************************************************/ 62467754Smsmith 62567754Smsmithvoid 626151937SjkimAcpiDbDisplayCallingTree ( 627151937Sjkim void) 62867754Smsmith{ 62967754Smsmith ACPI_WALK_STATE *WalkState; 63067754Smsmith ACPI_NAMESPACE_NODE *Node; 63167754Smsmith 63267754Smsmith 63367754Smsmith WalkState = AcpiDsGetCurrentWalkState (AcpiGbl_CurrentWalkList); 63467754Smsmith if (!WalkState) 63567754Smsmith { 63667754Smsmith AcpiOsPrintf ("There is no method currently executing\n"); 63767754Smsmith return; 63867754Smsmith } 63967754Smsmith 64069450Smsmith Node = WalkState->MethodNode; 64167754Smsmith AcpiOsPrintf ("Current Control Method Call Tree\n"); 64267754Smsmith 64399679Siwasaki while (WalkState) 64467754Smsmith { 64569450Smsmith Node = WalkState->MethodNode; 64667754Smsmith 647123315Snjl AcpiOsPrintf (" [%4.4s]\n", AcpiUtGetNodeName (Node)); 64867754Smsmith 64967754Smsmith WalkState = WalkState->Next; 65067754Smsmith } 65167754Smsmith} 65267754Smsmith 65367754Smsmith 65467754Smsmith/******************************************************************************* 65567754Smsmith * 656117521Snjl * FUNCTION: AcpiDbDisplayObjectType 657117521Snjl * 658241973Sjkim * PARAMETERS: Name - User entered NS node handle or name 659117521Snjl * 660117521Snjl * RETURN: None 661117521Snjl * 662123315Snjl * DESCRIPTION: Display type of an arbitrary NS node 663117521Snjl * 664117521Snjl ******************************************************************************/ 665117521Snjl 666117521Snjlvoid 667117521SnjlAcpiDbDisplayObjectType ( 668241973Sjkim char *Name) 669117521Snjl{ 670241973Sjkim ACPI_NAMESPACE_NODE *Node; 671117521Snjl ACPI_DEVICE_INFO *Info; 672117521Snjl ACPI_STATUS Status; 673193267Sjkim UINT32 i; 674117521Snjl 675117521Snjl 676241973Sjkim Node = AcpiDbConvertToNode (Name); 677241973Sjkim if (!Node) 678241973Sjkim { 679241973Sjkim return; 680241973Sjkim } 681117521Snjl 682241973Sjkim Status = AcpiGetObjectInfo (ACPI_CAST_PTR (ACPI_HANDLE, Node), &Info); 683197104Sjkim if (ACPI_FAILURE (Status)) 684117521Snjl { 685197104Sjkim AcpiOsPrintf ("Could not get object info, %s\n", 686197104Sjkim AcpiFormatException (Status)); 687197104Sjkim return; 688197104Sjkim } 689117521Snjl 690241973Sjkim if (Info->Valid & ACPI_VALID_ADR) 691241973Sjkim { 692241973Sjkim AcpiOsPrintf ("ADR: %8.8X%8.8X, STA: %8.8X, Flags: %X\n", 693241973Sjkim ACPI_FORMAT_UINT64 (Info->Address), 694241973Sjkim Info->CurrentStatus, Info->Flags); 695241973Sjkim } 696241973Sjkim if (Info->Valid & ACPI_VALID_SXDS) 697241973Sjkim { 698241973Sjkim AcpiOsPrintf ("S1D-%2.2X S2D-%2.2X S3D-%2.2X S4D-%2.2X\n", 699241973Sjkim Info->HighestDstates[0], Info->HighestDstates[1], 700241973Sjkim Info->HighestDstates[2], Info->HighestDstates[3]); 701241973Sjkim } 702241973Sjkim if (Info->Valid & ACPI_VALID_SXWS) 703241973Sjkim { 704241973Sjkim AcpiOsPrintf ("S0W-%2.2X S1W-%2.2X S2W-%2.2X S3W-%2.2X S4W-%2.2X\n", 705241973Sjkim Info->LowestDstates[0], Info->LowestDstates[1], 706241973Sjkim Info->LowestDstates[2], Info->LowestDstates[3], 707241973Sjkim Info->LowestDstates[4]); 708241973Sjkim } 709117521Snjl 710197104Sjkim if (Info->Valid & ACPI_VALID_HID) 711197104Sjkim { 712197104Sjkim AcpiOsPrintf ("HID: %s\n", Info->HardwareId.String); 713117521Snjl } 714197104Sjkim if (Info->Valid & ACPI_VALID_UID) 715117521Snjl { 716197104Sjkim AcpiOsPrintf ("UID: %s\n", Info->UniqueId.String); 717117521Snjl } 718241973Sjkim if (Info->Valid & ACPI_VALID_SUB) 719241973Sjkim { 720241973Sjkim AcpiOsPrintf ("SUB: %s\n", Info->SubsystemId.String); 721241973Sjkim } 722197104Sjkim if (Info->Valid & ACPI_VALID_CID) 723197104Sjkim { 724197104Sjkim for (i = 0; i < Info->CompatibleIdList.Count; i++) 725197104Sjkim { 726209746Sjkim AcpiOsPrintf ("CID %u: %s\n", i, 727197104Sjkim Info->CompatibleIdList.Ids[i].String); 728197104Sjkim } 729197104Sjkim } 730197104Sjkim 731197104Sjkim ACPI_FREE (Info); 732117521Snjl} 733117521Snjl 734117521Snjl 735117521Snjl/******************************************************************************* 736117521Snjl * 73767754Smsmith * FUNCTION: AcpiDbDisplayResultObject 73867754Smsmith * 73967754Smsmith * PARAMETERS: ObjDesc - Object to be displayed 74067754Smsmith * WalkState - Current walk state 74167754Smsmith * 74267754Smsmith * RETURN: None 74367754Smsmith * 74467754Smsmith * DESCRIPTION: Display the result of an AML opcode 74567754Smsmith * 74691116Smsmith * Note: Curently only displays the result object if we are single stepping. 74791116Smsmith * However, this output may be useful in other contexts and could be enabled 74891116Smsmith * to do so if needed. 74991116Smsmith * 75067754Smsmith ******************************************************************************/ 75167754Smsmith 75267754Smsmithvoid 75367754SmsmithAcpiDbDisplayResultObject ( 75467754Smsmith ACPI_OPERAND_OBJECT *ObjDesc, 75567754Smsmith ACPI_WALK_STATE *WalkState) 75667754Smsmith{ 75767754Smsmith 75891116Smsmith /* Only display if single stepping */ 75991116Smsmith 76067754Smsmith if (!AcpiGbl_CmSingleStep) 76167754Smsmith { 76267754Smsmith return; 76367754Smsmith } 76467754Smsmith 76567754Smsmith AcpiOsPrintf ("ResultObj: "); 766117521Snjl AcpiDmDisplayInternalObject (ObjDesc, WalkState); 76767754Smsmith AcpiOsPrintf ("\n"); 76867754Smsmith} 76967754Smsmith 77067754Smsmith 77167754Smsmith/******************************************************************************* 77267754Smsmith * 77367754Smsmith * FUNCTION: AcpiDbDisplayArgumentObject 77467754Smsmith * 77567754Smsmith * PARAMETERS: ObjDesc - Object to be displayed 77667754Smsmith * WalkState - Current walk state 77767754Smsmith * 77867754Smsmith * RETURN: None 77967754Smsmith * 78067754Smsmith * DESCRIPTION: Display the result of an AML opcode 78167754Smsmith * 78267754Smsmith ******************************************************************************/ 78367754Smsmith 78467754Smsmithvoid 78567754SmsmithAcpiDbDisplayArgumentObject ( 78667754Smsmith ACPI_OPERAND_OBJECT *ObjDesc, 78767754Smsmith ACPI_WALK_STATE *WalkState) 78867754Smsmith{ 78967754Smsmith 79067754Smsmith if (!AcpiGbl_CmSingleStep) 79167754Smsmith { 79267754Smsmith return; 79367754Smsmith } 79467754Smsmith 79567754Smsmith AcpiOsPrintf ("ArgObj: "); 796117521Snjl AcpiDmDisplayInternalObject (ObjDesc, WalkState); 79767754Smsmith} 79867754Smsmith 799114237Snjl 800231844Sjkim#if (!ACPI_REDUCED_HARDWARE) 801114237Snjl/******************************************************************************* 802114237Snjl * 803114237Snjl * FUNCTION: AcpiDbDisplayGpes 804114237Snjl * 805123315Snjl * PARAMETERS: None 806114237Snjl * 807114237Snjl * RETURN: None 808114237Snjl * 809123315Snjl * DESCRIPTION: Display the current GPE structures 810114237Snjl * 811114237Snjl ******************************************************************************/ 812114237Snjl 813114237Snjlvoid 814151937SjkimAcpiDbDisplayGpes ( 815151937Sjkim void) 816114237Snjl{ 817114237Snjl ACPI_GPE_BLOCK_INFO *GpeBlock; 818117521Snjl ACPI_GPE_XRUPT_INFO *GpeXruptInfo; 819129684Snjl ACPI_GPE_EVENT_INFO *GpeEventInfo; 820129684Snjl ACPI_GPE_REGISTER_INFO *GpeRegisterInfo; 821207344Sjkim char *GpeType; 822237412Sjkim ACPI_GPE_NOTIFY_INFO *Notify; 823129684Snjl UINT32 GpeIndex; 824129684Snjl UINT32 Block = 0; 825129684Snjl UINT32 i; 826129684Snjl UINT32 j; 827237412Sjkim UINT32 Count; 828129684Snjl char Buffer[80]; 829129684Snjl ACPI_BUFFER RetBuf; 830129684Snjl ACPI_STATUS Status; 831114237Snjl 832114237Snjl 833129684Snjl RetBuf.Length = sizeof (Buffer); 834129684Snjl RetBuf.Pointer = Buffer; 835129684Snjl 836129684Snjl Block = 0; 837129684Snjl 838129684Snjl /* Walk the GPE lists */ 839129684Snjl 840117521Snjl GpeXruptInfo = AcpiGbl_GpeXruptListHead; 841117521Snjl while (GpeXruptInfo) 842114237Snjl { 843117521Snjl GpeBlock = GpeXruptInfo->GpeBlockListHead; 844117521Snjl while (GpeBlock) 845117521Snjl { 846129684Snjl Status = AcpiGetName (GpeBlock->Node, ACPI_FULL_PATHNAME, &RetBuf); 847129684Snjl if (ACPI_FAILURE (Status)) 848129684Snjl { 849129684Snjl AcpiOsPrintf ("Could not convert name to pathname\n"); 850129684Snjl } 851129684Snjl 852207344Sjkim if (GpeBlock->Node == AcpiGbl_FadtGpeDevice) 853207344Sjkim { 854207344Sjkim GpeType = "FADT-defined GPE block"; 855207344Sjkim } 856207344Sjkim else 857207344Sjkim { 858207344Sjkim GpeType = "GPE Block Device"; 859207344Sjkim } 860151937Sjkim 861209746Sjkim AcpiOsPrintf ("\nBlock %u - Info %p DeviceNode %p [%s] - %s\n", 862207344Sjkim Block, GpeBlock, GpeBlock->Node, Buffer, GpeType); 863207344Sjkim 864151937Sjkim AcpiOsPrintf (" Registers: %u (%u GPEs)\n", 865206117Sjkim GpeBlock->RegisterCount, GpeBlock->GpeCount); 866151937Sjkim 867206117Sjkim AcpiOsPrintf (" GPE range: 0x%X to 0x%X on interrupt %u\n", 868151937Sjkim GpeBlock->BlockBaseNumber, 869206117Sjkim GpeBlock->BlockBaseNumber + (GpeBlock->GpeCount - 1), 870206117Sjkim GpeXruptInfo->InterruptNumber); 871151937Sjkim 872151937Sjkim AcpiOsPrintf ( 873151937Sjkim " RegisterInfo: %p Status %8.8X%8.8X Enable %8.8X%8.8X\n", 874151937Sjkim GpeBlock->RegisterInfo, 875167802Sjkim ACPI_FORMAT_UINT64 (GpeBlock->RegisterInfo->StatusAddress.Address), 876167802Sjkim ACPI_FORMAT_UINT64 (GpeBlock->RegisterInfo->EnableAddress.Address)); 877151937Sjkim 878117521Snjl AcpiOsPrintf (" EventInfo: %p\n", GpeBlock->EventInfo); 879114237Snjl 880129684Snjl /* Examine each GPE Register within the block */ 881129684Snjl 882129684Snjl for (i = 0; i < GpeBlock->RegisterCount; i++) 883129684Snjl { 884129684Snjl GpeRegisterInfo = &GpeBlock->RegisterInfo[i]; 885129684Snjl 886129684Snjl AcpiOsPrintf ( 887206117Sjkim " Reg %u: (GPE %.2X-%.2X) RunEnable %2.2X WakeEnable %2.2X" 888206117Sjkim " Status %8.8X%8.8X Enable %8.8X%8.8X\n", 889206117Sjkim i, GpeRegisterInfo->BaseGpeNumber, 890206117Sjkim GpeRegisterInfo->BaseGpeNumber + (ACPI_GPE_REGISTER_WIDTH - 1), 891151937Sjkim GpeRegisterInfo->EnableForRun, 892206117Sjkim GpeRegisterInfo->EnableForWake, 893167802Sjkim ACPI_FORMAT_UINT64 (GpeRegisterInfo->StatusAddress.Address), 894167802Sjkim ACPI_FORMAT_UINT64 (GpeRegisterInfo->EnableAddress.Address)); 895129684Snjl 896129684Snjl /* Now look at the individual GPEs in this byte register */ 897129684Snjl 898129684Snjl for (j = 0; j < ACPI_GPE_REGISTER_WIDTH; j++) 899129684Snjl { 900129684Snjl GpeIndex = (i * ACPI_GPE_REGISTER_WIDTH) + j; 901129684Snjl GpeEventInfo = &GpeBlock->EventInfo[GpeIndex]; 902129684Snjl 903281075Sdim if (ACPI_GPE_DISPATCH_TYPE (GpeEventInfo->Flags) == 904216471Sjkim ACPI_GPE_DISPATCH_NONE) 905129684Snjl { 906206117Sjkim /* This GPE is not used (no method or handler), ignore it */ 907129684Snjl 908129684Snjl continue; 909129684Snjl } 910129684Snjl 911129684Snjl AcpiOsPrintf ( 912209746Sjkim " GPE %.2X: %p RunRefs %2.2X Flags %2.2X (", 913206117Sjkim GpeBlock->BlockBaseNumber + GpeIndex, GpeEventInfo, 914216471Sjkim GpeEventInfo->RuntimeCount, GpeEventInfo->Flags); 915129684Snjl 916206117Sjkim /* Decode the flags byte */ 917206117Sjkim 918129684Snjl if (GpeEventInfo->Flags & ACPI_GPE_LEVEL_TRIGGERED) 919129684Snjl { 920129684Snjl AcpiOsPrintf ("Level, "); 921129684Snjl } 922129684Snjl else 923129684Snjl { 924129684Snjl AcpiOsPrintf ("Edge, "); 925129684Snjl } 926129684Snjl 927206117Sjkim if (GpeEventInfo->Flags & ACPI_GPE_CAN_WAKE) 928129684Snjl { 929206117Sjkim AcpiOsPrintf ("CanWake, "); 930129684Snjl } 931129684Snjl else 932129684Snjl { 933206117Sjkim AcpiOsPrintf ("RunOnly, "); 934129684Snjl } 935129684Snjl 936281075Sdim switch (ACPI_GPE_DISPATCH_TYPE (GpeEventInfo->Flags)) 937129684Snjl { 938216471Sjkim case ACPI_GPE_DISPATCH_NONE: 939250838Sjkim 940129684Snjl AcpiOsPrintf ("NotUsed"); 941129684Snjl break; 942250838Sjkim 943216471Sjkim case ACPI_GPE_DISPATCH_METHOD: 944250838Sjkim 945216471Sjkim AcpiOsPrintf ("Method"); 946216471Sjkim break; 947281075Sdim 948129684Snjl case ACPI_GPE_DISPATCH_HANDLER: 949250838Sjkim 950129684Snjl AcpiOsPrintf ("Handler"); 951129684Snjl break; 952250838Sjkim 953216471Sjkim case ACPI_GPE_DISPATCH_NOTIFY: 954250838Sjkim 955237412Sjkim Count = 0; 956237412Sjkim Notify = GpeEventInfo->Dispatch.NotifyList; 957237412Sjkim while (Notify) 958237412Sjkim { 959237412Sjkim Count++; 960237412Sjkim Notify = Notify->Next; 961237412Sjkim } 962237412Sjkim AcpiOsPrintf ("Implicit Notify on %u devices", Count); 963129684Snjl break; 964250838Sjkim 965281075Sdim case ACPI_GPE_DISPATCH_RAW_HANDLER: 966281075Sdim 967281075Sdim AcpiOsPrintf ("RawHandler"); 968281075Sdim break; 969281075Sdim 970129684Snjl default: 971250838Sjkim 972129684Snjl AcpiOsPrintf ("UNKNOWN: %X", 973281075Sdim ACPI_GPE_DISPATCH_TYPE (GpeEventInfo->Flags)); 974129684Snjl break; 975129684Snjl } 976129684Snjl 977206117Sjkim AcpiOsPrintf (")\n"); 978129684Snjl } 979129684Snjl } 980129684Snjl Block++; 981117521Snjl GpeBlock = GpeBlock->Next; 982117521Snjl } 983117521Snjl GpeXruptInfo = GpeXruptInfo->Next; 984114237Snjl } 985114237Snjl} 986231844Sjkim#endif /* !ACPI_REDUCED_HARDWARE */ 987114237Snjl 988220663Sjkim 989218590Sjkim/******************************************************************************* 990218590Sjkim * 991218590Sjkim * FUNCTION: AcpiDbDisplayHandlers 992218590Sjkim * 993218590Sjkim * PARAMETERS: None 994218590Sjkim * 995218590Sjkim * RETURN: None 996218590Sjkim * 997218590Sjkim * DESCRIPTION: Display the currently installed global handlers 998218590Sjkim * 999218590Sjkim ******************************************************************************/ 1000218590Sjkim 1001218590Sjkimvoid 1002218590SjkimAcpiDbDisplayHandlers ( 1003218590Sjkim void) 1004218590Sjkim{ 1005218590Sjkim ACPI_OPERAND_OBJECT *ObjDesc; 1006218590Sjkim ACPI_OPERAND_OBJECT *HandlerObj; 1007218590Sjkim ACPI_ADR_SPACE_TYPE SpaceId; 1008218590Sjkim UINT32 i; 1009218590Sjkim 1010218590Sjkim 1011218590Sjkim /* Operation region handlers */ 1012218590Sjkim 1013249663Sjkim AcpiOsPrintf ("\nOperation Region Handlers at the namespace root:\n"); 1014218590Sjkim 1015218590Sjkim ObjDesc = AcpiNsGetAttachedObject (AcpiGbl_RootNode); 1016218590Sjkim if (ObjDesc) 1017218590Sjkim { 1018220663Sjkim for (i = 0; i < ACPI_ARRAY_LENGTH (AcpiGbl_SpaceIdList); i++) 1019218590Sjkim { 1020220663Sjkim SpaceId = AcpiGbl_SpaceIdList[i]; 1021218590Sjkim HandlerObj = ObjDesc->Device.Handler; 1022218590Sjkim 1023218590Sjkim AcpiOsPrintf (ACPI_PREDEFINED_PREFIX, 1024218590Sjkim AcpiUtGetRegionName ((UINT8) SpaceId), SpaceId); 1025218590Sjkim 1026218590Sjkim while (HandlerObj) 1027218590Sjkim { 1028228110Sjkim if (AcpiGbl_SpaceIdList[i] == HandlerObj->AddressSpace.SpaceId) 1029218590Sjkim { 1030218590Sjkim AcpiOsPrintf (ACPI_HANDLER_PRESENT_STRING, 1031218590Sjkim (HandlerObj->AddressSpace.HandlerFlags & 1032218590Sjkim ACPI_ADDR_HANDLER_DEFAULT_INSTALLED) ? "Default" : "User", 1033218590Sjkim HandlerObj->AddressSpace.Handler); 1034218590Sjkim goto FoundHandler; 1035218590Sjkim } 1036218590Sjkim 1037218590Sjkim HandlerObj = HandlerObj->AddressSpace.Next; 1038218590Sjkim } 1039218590Sjkim 1040218590Sjkim /* There is no handler for this SpaceId */ 1041218590Sjkim 1042218590Sjkim AcpiOsPrintf ("None\n"); 1043218590Sjkim 1044218590Sjkim FoundHandler:; 1045218590Sjkim } 1046228110Sjkim 1047228110Sjkim /* Find all handlers for user-defined SpaceIDs */ 1048228110Sjkim 1049228110Sjkim HandlerObj = ObjDesc->Device.Handler; 1050228110Sjkim while (HandlerObj) 1051228110Sjkim { 1052228110Sjkim if (HandlerObj->AddressSpace.SpaceId >= ACPI_USER_REGION_BEGIN) 1053228110Sjkim { 1054228110Sjkim AcpiOsPrintf (ACPI_PREDEFINED_PREFIX, 1055228110Sjkim "User-defined ID", HandlerObj->AddressSpace.SpaceId); 1056228110Sjkim AcpiOsPrintf (ACPI_HANDLER_PRESENT_STRING, 1057228110Sjkim (HandlerObj->AddressSpace.HandlerFlags & 1058228110Sjkim ACPI_ADDR_HANDLER_DEFAULT_INSTALLED) ? "Default" : "User", 1059228110Sjkim HandlerObj->AddressSpace.Handler); 1060228110Sjkim } 1061228110Sjkim 1062228110Sjkim HandlerObj = HandlerObj->AddressSpace.Next; 1063228110Sjkim } 1064218590Sjkim } 1065218590Sjkim 1066231844Sjkim#if (!ACPI_REDUCED_HARDWARE) 1067231844Sjkim 1068218590Sjkim /* Fixed event handlers */ 1069218590Sjkim 1070218590Sjkim AcpiOsPrintf ("\nFixed Event Handlers:\n"); 1071218590Sjkim 1072218590Sjkim for (i = 0; i < ACPI_NUM_FIXED_EVENTS; i++) 1073218590Sjkim { 1074218590Sjkim AcpiOsPrintf (ACPI_PREDEFINED_PREFIX, AcpiUtGetEventName (i), i); 1075218590Sjkim if (AcpiGbl_FixedEventHandlers[i].Handler) 1076218590Sjkim { 1077218590Sjkim AcpiOsPrintf (ACPI_HANDLER_PRESENT_STRING, "User", 1078218590Sjkim AcpiGbl_FixedEventHandlers[i].Handler); 1079218590Sjkim } 1080218590Sjkim else 1081218590Sjkim { 1082218590Sjkim AcpiOsPrintf (ACPI_HANDLER_NOT_PRESENT_STRING, "None"); 1083218590Sjkim } 1084218590Sjkim } 1085218590Sjkim 1086231844Sjkim#endif /* !ACPI_REDUCED_HARDWARE */ 1087231844Sjkim 1088218590Sjkim /* Miscellaneous global handlers */ 1089218590Sjkim 1090218590Sjkim AcpiOsPrintf ("\nMiscellaneous Global Handlers:\n"); 1091218590Sjkim 1092220663Sjkim for (i = 0; i < ACPI_ARRAY_LENGTH (AcpiGbl_HandlerList); i++) 1093218590Sjkim { 1094220663Sjkim AcpiOsPrintf (ACPI_HANDLER_NAME_STRING, AcpiGbl_HandlerList[i].Name); 1095220663Sjkim if (AcpiGbl_HandlerList[i].Handler) 1096218590Sjkim { 1097218590Sjkim AcpiOsPrintf (ACPI_HANDLER_PRESENT_STRING, "User", 1098220663Sjkim AcpiGbl_HandlerList[i].Handler); 1099218590Sjkim } 1100218590Sjkim else 1101218590Sjkim { 1102218590Sjkim AcpiOsPrintf (ACPI_HANDLER_NOT_PRESENT_STRING, "None"); 1103218590Sjkim } 1104218590Sjkim } 1105249663Sjkim 1106249663Sjkim 1107249663Sjkim /* Other handlers that are installed throughout the namespace */ 1108249663Sjkim 1109249663Sjkim AcpiOsPrintf ("\nOperation Region Handlers for specific devices:\n"); 1110249663Sjkim 1111249663Sjkim (void) AcpiWalkNamespace (ACPI_TYPE_DEVICE, ACPI_ROOT_OBJECT, 1112249663Sjkim ACPI_UINT32_MAX, AcpiDbDisplayNonRootHandlers, 1113249663Sjkim NULL, NULL, NULL); 1114218590Sjkim} 1115218590Sjkim 1116249663Sjkim 1117249663Sjkim/******************************************************************************* 1118249663Sjkim * 1119249663Sjkim * FUNCTION: AcpiDbDisplayNonRootHandlers 1120249663Sjkim * 1121249663Sjkim * PARAMETERS: ACPI_WALK_CALLBACK 1122249663Sjkim * 1123249663Sjkim * RETURN: Status 1124249663Sjkim * 1125249663Sjkim * DESCRIPTION: Display information about all handlers installed for a 1126249663Sjkim * device object. 1127249663Sjkim * 1128249663Sjkim ******************************************************************************/ 1129249663Sjkim 1130249663Sjkimstatic ACPI_STATUS 1131249663SjkimAcpiDbDisplayNonRootHandlers ( 1132249663Sjkim ACPI_HANDLE ObjHandle, 1133249663Sjkim UINT32 NestingLevel, 1134249663Sjkim void *Context, 1135249663Sjkim void **ReturnValue) 1136249663Sjkim{ 1137249663Sjkim ACPI_NAMESPACE_NODE *Node = ACPI_CAST_PTR (ACPI_NAMESPACE_NODE, ObjHandle); 1138249663Sjkim ACPI_OPERAND_OBJECT *ObjDesc; 1139249663Sjkim ACPI_OPERAND_OBJECT *HandlerObj; 1140249663Sjkim char *Pathname; 1141249663Sjkim 1142249663Sjkim 1143249663Sjkim ObjDesc = AcpiNsGetAttachedObject (Node); 1144249663Sjkim if (!ObjDesc) 1145249663Sjkim { 1146249663Sjkim return (AE_OK); 1147249663Sjkim } 1148249663Sjkim 1149249663Sjkim Pathname = AcpiNsGetExternalPathname (Node); 1150249663Sjkim if (!Pathname) 1151249663Sjkim { 1152249663Sjkim return (AE_OK); 1153249663Sjkim } 1154249663Sjkim 1155249663Sjkim /* Display all handlers associated with this device */ 1156249663Sjkim 1157249663Sjkim HandlerObj = ObjDesc->Device.Handler; 1158249663Sjkim while (HandlerObj) 1159249663Sjkim { 1160249663Sjkim AcpiOsPrintf (ACPI_PREDEFINED_PREFIX, 1161249663Sjkim AcpiUtGetRegionName ((UINT8) HandlerObj->AddressSpace.SpaceId), 1162249663Sjkim HandlerObj->AddressSpace.SpaceId); 1163249663Sjkim 1164249663Sjkim AcpiOsPrintf (ACPI_HANDLER_PRESENT_STRING2, 1165249663Sjkim (HandlerObj->AddressSpace.HandlerFlags & 1166249663Sjkim ACPI_ADDR_HANDLER_DEFAULT_INSTALLED) ? "Default" : "User", 1167249663Sjkim HandlerObj->AddressSpace.Handler); 1168249663Sjkim 1169249663Sjkim AcpiOsPrintf (" Device Name: %s (%p)\n", Pathname, Node); 1170249663Sjkim 1171249663Sjkim HandlerObj = HandlerObj->AddressSpace.Next; 1172249663Sjkim } 1173249663Sjkim 1174249663Sjkim ACPI_FREE (Pathname); 1175249663Sjkim return (AE_OK); 1176249663Sjkim} 1177249663Sjkim 1178102550Siwasaki#endif /* ACPI_DEBUGGER */ 1179