167754Smsmith/******************************************************************************* 267754Smsmith * 367754Smsmith * Module Name: dbdisply - debug display commands 467754Smsmith * 567754Smsmith ******************************************************************************/ 667754Smsmith 7217365Sjkim/* 8298714Sjkim * Copyright (C) 2000 - 2016, 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> 51298714Sjkim#include <contrib/dev/acpica/include/acevents.h> 52193341Sjkim#include <contrib/dev/acpica/include/acdebug.h> 5367754Smsmith 5467754Smsmith 55102550Siwasaki#define _COMPONENT ACPI_CA_DEBUGGER 5691116Smsmith ACPI_MODULE_NAME ("dbdisply") 5767754Smsmith 58151937Sjkim/* Local prototypes */ 5967754Smsmith 60151937Sjkimstatic void 61151937SjkimAcpiDbDumpParserDescriptor ( 62151937Sjkim ACPI_PARSE_OBJECT *Op); 63151937Sjkim 64151937Sjkimstatic void * 65151937SjkimAcpiDbGetPointer ( 66151937Sjkim void *Target); 67151937Sjkim 68249663Sjkimstatic ACPI_STATUS 69249663SjkimAcpiDbDisplayNonRootHandlers ( 70249663Sjkim ACPI_HANDLE ObjHandle, 71249663Sjkim UINT32 NestingLevel, 72249663Sjkim void *Context, 73249663Sjkim void **ReturnValue); 74151937Sjkim 75220663Sjkim/* 76220663Sjkim * System handler information. 77220663Sjkim * Used for Handlers command, in AcpiDbDisplayHandlers. 78220663Sjkim */ 79220663Sjkim#define ACPI_PREDEFINED_PREFIX "%25s (%.2X) : " 80220663Sjkim#define ACPI_HANDLER_NAME_STRING "%30s : " 81220663Sjkim#define ACPI_HANDLER_PRESENT_STRING "%-9s (%p)\n" 82249663Sjkim#define ACPI_HANDLER_PRESENT_STRING2 "%-9s (%p)" 83220663Sjkim#define ACPI_HANDLER_NOT_PRESENT_STRING "%-9s\n" 84220663Sjkim 85220663Sjkim/* All predefined Address Space IDs */ 86220663Sjkim 87220663Sjkimstatic ACPI_ADR_SPACE_TYPE AcpiGbl_SpaceIdList[] = 88220663Sjkim{ 89220663Sjkim ACPI_ADR_SPACE_SYSTEM_MEMORY, 90220663Sjkim ACPI_ADR_SPACE_SYSTEM_IO, 91220663Sjkim ACPI_ADR_SPACE_PCI_CONFIG, 92220663Sjkim ACPI_ADR_SPACE_EC, 93220663Sjkim ACPI_ADR_SPACE_SMBUS, 94220663Sjkim ACPI_ADR_SPACE_CMOS, 95220663Sjkim ACPI_ADR_SPACE_PCI_BAR_TARGET, 96220663Sjkim ACPI_ADR_SPACE_IPMI, 97228110Sjkim ACPI_ADR_SPACE_GPIO, 98228110Sjkim ACPI_ADR_SPACE_GSBUS, 99220663Sjkim ACPI_ADR_SPACE_DATA_TABLE, 100220663Sjkim ACPI_ADR_SPACE_FIXED_HARDWARE 101220663Sjkim}; 102220663Sjkim 103220663Sjkim/* Global handler information */ 104220663Sjkim 105220663Sjkimtypedef struct acpi_handler_info 106220663Sjkim{ 107220663Sjkim void *Handler; 108220663Sjkim char *Name; 109220663Sjkim 110220663Sjkim} ACPI_HANDLER_INFO; 111220663Sjkim 112220663Sjkimstatic ACPI_HANDLER_INFO AcpiGbl_HandlerList[] = 113220663Sjkim{ 114234623Sjkim {&AcpiGbl_GlobalNotify[0].Handler, "System Notifications"}, 115234623Sjkim {&AcpiGbl_GlobalNotify[1].Handler, "Device Notifications"}, 116220663Sjkim {&AcpiGbl_TableHandler, "ACPI Table Events"}, 117220663Sjkim {&AcpiGbl_ExceptionHandler, "Control Method Exceptions"}, 118220663Sjkim {&AcpiGbl_InterfaceHandler, "OSI Invocations"} 119220663Sjkim}; 120220663Sjkim 121220663Sjkim 122151937Sjkim/******************************************************************************* 12367754Smsmith * 12467754Smsmith * FUNCTION: AcpiDbGetPointer 12567754Smsmith * 12667754Smsmith * PARAMETERS: Target - Pointer to string to be converted 12767754Smsmith * 12867754Smsmith * RETURN: Converted pointer 12967754Smsmith * 13067754Smsmith * DESCRIPTION: Convert an ascii pointer value to a real value 13167754Smsmith * 132151937Sjkim ******************************************************************************/ 13367754Smsmith 134151937Sjkimstatic void * 13567754SmsmithAcpiDbGetPointer ( 13667754Smsmith void *Target) 13767754Smsmith{ 13867754Smsmith void *ObjPtr; 139252279Sjkim ACPI_SIZE Address; 14067754Smsmith 14167754Smsmith 142284583Sjkim Address = strtoul (Target, NULL, 16); 143252279Sjkim ObjPtr = ACPI_TO_POINTER (Address); 14467754Smsmith return (ObjPtr); 14567754Smsmith} 14667754Smsmith 14767754Smsmith 14867754Smsmith/******************************************************************************* 14967754Smsmith * 15067754Smsmith * FUNCTION: AcpiDbDumpParserDescriptor 15167754Smsmith * 15267754Smsmith * PARAMETERS: Op - A parser Op descriptor 15367754Smsmith * 15467754Smsmith * RETURN: None 15567754Smsmith * 15667754Smsmith * DESCRIPTION: Display a formatted parser object 15767754Smsmith * 15867754Smsmith ******************************************************************************/ 15967754Smsmith 160151937Sjkimstatic void 16167754SmsmithAcpiDbDumpParserDescriptor ( 16267754Smsmith ACPI_PARSE_OBJECT *Op) 16367754Smsmith{ 16483174Smsmith const ACPI_OPCODE_INFO *Info; 16567754Smsmith 16667754Smsmith 16799679Siwasaki Info = AcpiPsGetOpcodeInfo (Op->Common.AmlOpcode); 16867754Smsmith 16967754Smsmith AcpiOsPrintf ("Parser Op Descriptor:\n"); 17099679Siwasaki AcpiOsPrintf ("%20.20s : %4.4X\n", "Opcode", Op->Common.AmlOpcode); 17167754Smsmith 172151937Sjkim ACPI_DEBUG_ONLY_MEMBERS (AcpiOsPrintf ("%20.20s : %s\n", "Opcode Name", 173151937Sjkim Info->Name)); 17467754Smsmith 17599679Siwasaki AcpiOsPrintf ("%20.20s : %p\n", "Value/ArgList", Op->Common.Value.Arg); 17699679Siwasaki AcpiOsPrintf ("%20.20s : %p\n", "Parent", Op->Common.Parent); 17799679Siwasaki AcpiOsPrintf ("%20.20s : %p\n", "NextOp", Op->Common.Next); 17867754Smsmith} 17967754Smsmith 18067754Smsmith 18167754Smsmith/******************************************************************************* 18267754Smsmith * 18367754Smsmith * FUNCTION: AcpiDbDecodeAndDisplayObject 18467754Smsmith * 185241973Sjkim * PARAMETERS: Target - String with object to be displayed. Names 18667754Smsmith * and hex pointers are supported. 18767754Smsmith * OutputType - Byte, Word, Dword, or Qword (B|W|D|Q) 18867754Smsmith * 18967754Smsmith * RETURN: None 19067754Smsmith * 19167754Smsmith * DESCRIPTION: Display a formatted ACPI object 19267754Smsmith * 19367754Smsmith ******************************************************************************/ 19467754Smsmith 19567754Smsmithvoid 19667754SmsmithAcpiDbDecodeAndDisplayObject ( 197114237Snjl char *Target, 198114237Snjl char *OutputType) 19967754Smsmith{ 20067754Smsmith void *ObjPtr; 20167754Smsmith ACPI_NAMESPACE_NODE *Node; 20287031Smsmith ACPI_OPERAND_OBJECT *ObjDesc; 20367754Smsmith UINT32 Display = DB_BYTE_DISPLAY; 204114237Snjl char Buffer[80]; 20567754Smsmith ACPI_BUFFER RetBuf; 20667754Smsmith ACPI_STATUS Status; 20767754Smsmith UINT32 Size; 20867754Smsmith 20967754Smsmith 21067754Smsmith if (!Target) 21167754Smsmith { 21267754Smsmith return; 21367754Smsmith } 21467754Smsmith 21567754Smsmith /* Decode the output type */ 21667754Smsmith 21767754Smsmith if (OutputType) 21867754Smsmith { 219151937Sjkim AcpiUtStrupr (OutputType); 22067754Smsmith if (OutputType[0] == 'W') 22167754Smsmith { 22267754Smsmith Display = DB_WORD_DISPLAY; 22367754Smsmith } 22467754Smsmith else if (OutputType[0] == 'D') 22567754Smsmith { 22667754Smsmith Display = DB_DWORD_DISPLAY; 22767754Smsmith } 22867754Smsmith else if (OutputType[0] == 'Q') 22967754Smsmith { 23067754Smsmith Display = DB_QWORD_DISPLAY; 23167754Smsmith } 23267754Smsmith } 23367754Smsmith 23467754Smsmith RetBuf.Length = sizeof (Buffer); 23567754Smsmith RetBuf.Pointer = Buffer; 23667754Smsmith 23767754Smsmith /* Differentiate between a number and a name */ 23867754Smsmith 23967754Smsmith if ((Target[0] >= 0x30) && (Target[0] <= 0x39)) 24067754Smsmith { 24167754Smsmith ObjPtr = AcpiDbGetPointer (Target); 24267754Smsmith if (!AcpiOsReadable (ObjPtr, 16)) 24367754Smsmith { 244287168Sjkim AcpiOsPrintf ( 245287168Sjkim "Address %p is invalid in this address space\n", 246151937Sjkim ObjPtr); 24767754Smsmith return; 24867754Smsmith } 24967754Smsmith 25067754Smsmith /* Decode the object type */ 25167754Smsmith 25291116Smsmith switch (ACPI_GET_DESCRIPTOR_TYPE (ObjPtr)) 25367754Smsmith { 25491116Smsmith case ACPI_DESC_TYPE_NAMED: 25567754Smsmith 25691116Smsmith /* This is a namespace Node */ 25791116Smsmith 25867754Smsmith if (!AcpiOsReadable (ObjPtr, sizeof (ACPI_NAMESPACE_NODE))) 25967754Smsmith { 260151937Sjkim AcpiOsPrintf ( 261287168Sjkim "Cannot read entire Named object at address %p\n", 262287168Sjkim 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 { 275287168Sjkim AcpiOsPrintf ( 276287168Sjkim "Cannot read entire ACPI object at address %p\n", 277151937Sjkim ObjPtr); 27867754Smsmith return; 27967754Smsmith } 28067754Smsmith 281287168Sjkim AcpiUtDebugDumpBuffer (ObjPtr, sizeof (ACPI_OPERAND_OBJECT), 282287168Sjkim Display, ACPI_UINT32_MAX); 28377424Smsmith AcpiExDumpObjectDescriptor (ObjPtr, 1); 28491116Smsmith break; 28567754Smsmith 28691116Smsmith case ACPI_DESC_TYPE_PARSER: 28791116Smsmith 28891116Smsmith /* This is a Parser Op object */ 28991116Smsmith 29067754Smsmith if (!AcpiOsReadable (ObjPtr, sizeof (ACPI_PARSE_OBJECT))) 29167754Smsmith { 292151937Sjkim AcpiOsPrintf ( 293287168Sjkim "Cannot read entire Parser object at address %p\n", 294287168Sjkim ObjPtr); 29567754Smsmith return; 29667754Smsmith } 29767754Smsmith 298287168Sjkim AcpiUtDebugDumpBuffer (ObjPtr, sizeof (ACPI_PARSE_OBJECT), 299287168Sjkim Display, ACPI_UINT32_MAX); 30067754Smsmith AcpiDbDumpParserDescriptor ((ACPI_PARSE_OBJECT *) ObjPtr); 30191116Smsmith break; 30267754Smsmith 30391116Smsmith default: 30491116Smsmith 30591116Smsmith /* Is not a recognizeable object */ 30691116Smsmith 307272444Sjkim AcpiOsPrintf ( 308272444Sjkim "Not a known ACPI internal object, descriptor type %2.2X\n", 309272444Sjkim ACPI_GET_DESCRIPTOR_TYPE (ObjPtr)); 310272444Sjkim 31167754Smsmith Size = 16; 31267754Smsmith if (AcpiOsReadable (ObjPtr, 64)) 31367754Smsmith { 31467754Smsmith Size = 64; 31567754Smsmith } 31667754Smsmith 31767754Smsmith /* Just dump some memory */ 31867754Smsmith 319241973Sjkim AcpiUtDebugDumpBuffer (ObjPtr, Size, Display, ACPI_UINT32_MAX); 32091116Smsmith break; 32167754Smsmith } 32267754Smsmith 32367754Smsmith return; 32467754Smsmith } 32567754Smsmith 32667754Smsmith /* The parameter is a name string that must be resolved to a Named obj */ 32767754Smsmith 32867754Smsmith Node = AcpiDbLocalNsLookup (Target); 32967754Smsmith if (!Node) 33067754Smsmith { 33167754Smsmith return; 33267754Smsmith } 33367754Smsmith 33467754Smsmith 335151937SjkimDumpNode: 336151937Sjkim /* Now dump the NS node */ 33767754Smsmith 338287168Sjkim Status = AcpiGetName (Node, ACPI_FULL_PATHNAME_NO_TRAILING, &RetBuf); 33967754Smsmith if (ACPI_FAILURE (Status)) 34067754Smsmith { 34167754Smsmith AcpiOsPrintf ("Could not convert name to pathname\n"); 34267754Smsmith } 34367754Smsmith 34469746Smsmith else 34569746Smsmith { 346151937Sjkim AcpiOsPrintf ("Object (%p) Pathname: %s\n", 347151937Sjkim Node, (char *) RetBuf.Pointer); 34869746Smsmith } 34969746Smsmith 35067754Smsmith if (!AcpiOsReadable (Node, sizeof (ACPI_NAMESPACE_NODE))) 35167754Smsmith { 35267754Smsmith AcpiOsPrintf ("Invalid Named object at address %p\n", Node); 35367754Smsmith return; 35467754Smsmith } 35567754Smsmith 356241973Sjkim AcpiUtDebugDumpBuffer ((void *) Node, sizeof (ACPI_NAMESPACE_NODE), 357151937Sjkim Display, ACPI_UINT32_MAX); 358167802Sjkim AcpiExDumpNamespaceNode (Node, 1); 35967754Smsmith 36087031Smsmith ObjDesc = AcpiNsGetAttachedObject (Node); 36187031Smsmith if (ObjDesc) 36267754Smsmith { 36387031Smsmith AcpiOsPrintf ("\nAttached Object (%p):\n", ObjDesc); 36487031Smsmith if (!AcpiOsReadable (ObjDesc, sizeof (ACPI_OPERAND_OBJECT))) 36567754Smsmith { 366151937Sjkim AcpiOsPrintf ("Invalid internal ACPI Object at address %p\n", 367151937Sjkim ObjDesc); 36867754Smsmith return; 36967754Smsmith } 37067754Smsmith 371287168Sjkim AcpiUtDebugDumpBuffer ((void *) ObjDesc, 372287168Sjkim sizeof (ACPI_OPERAND_OBJECT), Display, ACPI_UINT32_MAX); 37387031Smsmith AcpiExDumpObjectDescriptor (ObjDesc, 1); 37467754Smsmith } 37567754Smsmith} 37667754Smsmith 37767754Smsmith 37867754Smsmith/******************************************************************************* 37967754Smsmith * 38067754Smsmith * FUNCTION: AcpiDbDisplayMethodInfo 38167754Smsmith * 38267754Smsmith * PARAMETERS: StartOp - Root of the control method parse tree 38367754Smsmith * 38467754Smsmith * RETURN: None 38567754Smsmith * 38667754Smsmith * DESCRIPTION: Display information about the current method 38767754Smsmith * 38867754Smsmith ******************************************************************************/ 38967754Smsmith 39067754Smsmithvoid 39167754SmsmithAcpiDbDisplayMethodInfo ( 39267754Smsmith ACPI_PARSE_OBJECT *StartOp) 39367754Smsmith{ 39467754Smsmith ACPI_WALK_STATE *WalkState; 39567754Smsmith ACPI_OPERAND_OBJECT *ObjDesc; 39667754Smsmith ACPI_NAMESPACE_NODE *Node; 39767754Smsmith ACPI_PARSE_OBJECT *RootOp; 39867754Smsmith ACPI_PARSE_OBJECT *Op; 39983174Smsmith const ACPI_OPCODE_INFO *OpInfo; 40067754Smsmith UINT32 NumOps = 0; 40167754Smsmith UINT32 NumOperands = 0; 40267754Smsmith UINT32 NumOperators = 0; 40367754Smsmith UINT32 NumRemainingOps = 0; 40467754Smsmith UINT32 NumRemainingOperands = 0; 40567754Smsmith UINT32 NumRemainingOperators = 0; 40667754Smsmith BOOLEAN CountRemaining = FALSE; 40767754Smsmith 40867754Smsmith 40967754Smsmith WalkState = AcpiDsGetCurrentWalkState (AcpiGbl_CurrentWalkList); 41067754Smsmith if (!WalkState) 41167754Smsmith { 41267754Smsmith AcpiOsPrintf ("There is no method currently executing\n"); 41367754Smsmith return; 41467754Smsmith } 41567754Smsmith 41667754Smsmith ObjDesc = WalkState->MethodDesc; 417298714Sjkim Node = WalkState->MethodNode; 41867754Smsmith 419123315Snjl AcpiOsPrintf ("Currently executing control method is [%4.4s]\n", 420298714Sjkim AcpiUtGetNodeName (Node)); 421167802Sjkim AcpiOsPrintf ("%X Arguments, SyncLevel = %X\n", 422298714Sjkim (UINT32) ObjDesc->Method.ParamCount, 423298714Sjkim (UINT32) ObjDesc->Method.SyncLevel); 42467754Smsmith 42567754Smsmith RootOp = StartOp; 42699679Siwasaki while (RootOp->Common.Parent) 42767754Smsmith { 42899679Siwasaki RootOp = RootOp->Common.Parent; 42967754Smsmith } 43067754Smsmith 43167754Smsmith Op = RootOp; 43267754Smsmith 43367754Smsmith while (Op) 43467754Smsmith { 43567754Smsmith if (Op == StartOp) 43667754Smsmith { 43767754Smsmith CountRemaining = TRUE; 43867754Smsmith } 43967754Smsmith 44067754Smsmith NumOps++; 44167754Smsmith if (CountRemaining) 44267754Smsmith { 44367754Smsmith NumRemainingOps++; 44467754Smsmith } 44567754Smsmith 44667754Smsmith /* Decode the opcode */ 44767754Smsmith 44899679Siwasaki OpInfo = AcpiPsGetOpcodeInfo (Op->Common.AmlOpcode); 44985756Smsmith switch (OpInfo->Class) 45067754Smsmith { 45185756Smsmith case AML_CLASS_ARGUMENT: 452250838Sjkim 45367754Smsmith if (CountRemaining) 45467754Smsmith { 45567754Smsmith NumRemainingOperands++; 45667754Smsmith } 45767754Smsmith 45867754Smsmith NumOperands++; 45967754Smsmith break; 46067754Smsmith 46185756Smsmith case AML_CLASS_UNKNOWN: 462250838Sjkim 46385756Smsmith /* Bad opcode or ASCII character */ 46485756Smsmith 46585756Smsmith continue; 46685756Smsmith 46767754Smsmith default: 468250838Sjkim 46967754Smsmith if (CountRemaining) 47067754Smsmith { 47167754Smsmith NumRemainingOperators++; 47267754Smsmith } 47367754Smsmith 47467754Smsmith NumOperators++; 47567754Smsmith break; 47667754Smsmith } 47767754Smsmith 47867754Smsmith Op = AcpiPsGetDepthNext (StartOp, Op); 47967754Smsmith } 48067754Smsmith 481151937Sjkim AcpiOsPrintf ( 482151937Sjkim "Method contains: %X AML Opcodes - %X Operators, %X Operands\n", 483151937Sjkim NumOps, NumOperators, NumOperands); 48467754Smsmith 485151937Sjkim AcpiOsPrintf ( 486151937Sjkim "Remaining to execute: %X AML Opcodes - %X Operators, %X Operands\n", 487151937Sjkim NumRemainingOps, NumRemainingOperators, NumRemainingOperands); 48867754Smsmith} 48967754Smsmith 49067754Smsmith 49167754Smsmith/******************************************************************************* 49267754Smsmith * 49367754Smsmith * FUNCTION: AcpiDbDisplayLocals 49467754Smsmith * 49567754Smsmith * PARAMETERS: None 49667754Smsmith * 49767754Smsmith * RETURN: None 49867754Smsmith * 49967754Smsmith * DESCRIPTION: Display all locals for the currently running control method 50067754Smsmith * 50167754Smsmith ******************************************************************************/ 50267754Smsmith 50367754Smsmithvoid 504151937SjkimAcpiDbDisplayLocals ( 505151937Sjkim void) 50667754Smsmith{ 50767754Smsmith ACPI_WALK_STATE *WalkState; 50867754Smsmith 50967754Smsmith 51067754Smsmith WalkState = AcpiDsGetCurrentWalkState (AcpiGbl_CurrentWalkList); 51167754Smsmith if (!WalkState) 51267754Smsmith { 51367754Smsmith AcpiOsPrintf ("There is no method currently executing\n"); 51467754Smsmith return; 51567754Smsmith } 51667754Smsmith 517285797Sjkim AcpiDbDecodeLocals (WalkState); 51867754Smsmith} 51967754Smsmith 52067754Smsmith 52167754Smsmith/******************************************************************************* 52267754Smsmith * 52367754Smsmith * FUNCTION: AcpiDbDisplayArguments 52467754Smsmith * 52567754Smsmith * PARAMETERS: None 52667754Smsmith * 52767754Smsmith * RETURN: None 52867754Smsmith * 52967754Smsmith * DESCRIPTION: Display all arguments for the currently running control method 53067754Smsmith * 53167754Smsmith ******************************************************************************/ 53267754Smsmith 53367754Smsmithvoid 534151937SjkimAcpiDbDisplayArguments ( 535151937Sjkim void) 53667754Smsmith{ 53767754Smsmith ACPI_WALK_STATE *WalkState; 53867754Smsmith 53967754Smsmith 54067754Smsmith WalkState = AcpiDsGetCurrentWalkState (AcpiGbl_CurrentWalkList); 54167754Smsmith if (!WalkState) 54267754Smsmith { 54367754Smsmith AcpiOsPrintf ("There is no method currently executing\n"); 54467754Smsmith return; 54567754Smsmith } 54667754Smsmith 547285797Sjkim AcpiDbDecodeArguments (WalkState); 54867754Smsmith} 54967754Smsmith 55067754Smsmith 55167754Smsmith/******************************************************************************* 55267754Smsmith * 55367754Smsmith * FUNCTION: AcpiDbDisplayResults 55467754Smsmith * 55567754Smsmith * PARAMETERS: None 55667754Smsmith * 55767754Smsmith * RETURN: None 55867754Smsmith * 55967754Smsmith * DESCRIPTION: Display current contents of a method result stack 56067754Smsmith * 56167754Smsmith ******************************************************************************/ 56267754Smsmith 56367754Smsmithvoid 564151937SjkimAcpiDbDisplayResults ( 565151937Sjkim void) 56667754Smsmith{ 56767754Smsmith UINT32 i; 56867754Smsmith ACPI_WALK_STATE *WalkState; 56967754Smsmith ACPI_OPERAND_OBJECT *ObjDesc; 570167802Sjkim UINT32 ResultCount = 0; 57167754Smsmith ACPI_NAMESPACE_NODE *Node; 572167802Sjkim ACPI_GENERIC_STATE *Frame; 573167802Sjkim UINT32 Index; /* Index onto current frame */ 57467754Smsmith 57567754Smsmith 57667754Smsmith WalkState = AcpiDsGetCurrentWalkState (AcpiGbl_CurrentWalkList); 57767754Smsmith if (!WalkState) 57867754Smsmith { 57967754Smsmith AcpiOsPrintf ("There is no method currently executing\n"); 58067754Smsmith return; 58167754Smsmith } 58267754Smsmith 58367754Smsmith ObjDesc = WalkState->MethodDesc; 584298714Sjkim Node = WalkState->MethodNode; 58567754Smsmith 58669746Smsmith if (WalkState->Results) 58769746Smsmith { 588167802Sjkim ResultCount = WalkState->ResultCount; 58969746Smsmith } 59067754Smsmith 59187031Smsmith AcpiOsPrintf ("Method [%4.4s] has %X stacked result objects\n", 592287168Sjkim AcpiUtGetNodeName (Node), ResultCount); 59369746Smsmith 594167802Sjkim /* From the top element of result stack */ 595167802Sjkim 596167802Sjkim Frame = WalkState->Results; 597167802Sjkim Index = (ResultCount - 1) % ACPI_RESULTS_FRAME_OBJ_NUM; 598167802Sjkim 599167802Sjkim for (i = 0; i < ResultCount; i++) 60067754Smsmith { 601167802Sjkim ObjDesc = Frame->Results.ObjDesc[Index]; 602209746Sjkim AcpiOsPrintf ("Result%u: ", i); 603285797Sjkim AcpiDbDisplayInternalObject (ObjDesc, WalkState); 604287168Sjkim 605167802Sjkim if (Index == 0) 606167802Sjkim { 607167802Sjkim Frame = Frame->Results.Next; 608167802Sjkim Index = ACPI_RESULTS_FRAME_OBJ_NUM; 609167802Sjkim } 610287168Sjkim 611167802Sjkim Index--; 61267754Smsmith } 61367754Smsmith} 61467754Smsmith 61567754Smsmith 61667754Smsmith/******************************************************************************* 61767754Smsmith * 61867754Smsmith * FUNCTION: AcpiDbDisplayCallingTree 61967754Smsmith * 62067754Smsmith * PARAMETERS: None 62167754Smsmith * 62267754Smsmith * RETURN: None 62367754Smsmith * 62467754Smsmith * DESCRIPTION: Display current calling tree of nested control methods 62567754Smsmith * 62667754Smsmith ******************************************************************************/ 62767754Smsmith 62867754Smsmithvoid 629151937SjkimAcpiDbDisplayCallingTree ( 630151937Sjkim void) 63167754Smsmith{ 63267754Smsmith ACPI_WALK_STATE *WalkState; 63367754Smsmith ACPI_NAMESPACE_NODE *Node; 63467754Smsmith 63567754Smsmith 63667754Smsmith WalkState = AcpiDsGetCurrentWalkState (AcpiGbl_CurrentWalkList); 63767754Smsmith if (!WalkState) 63867754Smsmith { 63967754Smsmith AcpiOsPrintf ("There is no method currently executing\n"); 64067754Smsmith return; 64167754Smsmith } 64267754Smsmith 64369450Smsmith Node = WalkState->MethodNode; 64467754Smsmith AcpiOsPrintf ("Current Control Method Call Tree\n"); 64567754Smsmith 64699679Siwasaki while (WalkState) 64767754Smsmith { 64869450Smsmith Node = WalkState->MethodNode; 649123315Snjl AcpiOsPrintf (" [%4.4s]\n", AcpiUtGetNodeName (Node)); 65067754Smsmith 65167754Smsmith WalkState = WalkState->Next; 65267754Smsmith } 65367754Smsmith} 65467754Smsmith 65567754Smsmith 65667754Smsmith/******************************************************************************* 65767754Smsmith * 658117521Snjl * FUNCTION: AcpiDbDisplayObjectType 659117521Snjl * 660298714Sjkim * PARAMETERS: ObjectArg - User entered NS node handle 661117521Snjl * 662117521Snjl * RETURN: None 663117521Snjl * 664123315Snjl * DESCRIPTION: Display type of an arbitrary NS node 665117521Snjl * 666117521Snjl ******************************************************************************/ 667117521Snjl 668117521Snjlvoid 669117521SnjlAcpiDbDisplayObjectType ( 670298714Sjkim char *ObjectArg) 671117521Snjl{ 672298714Sjkim ACPI_SIZE Arg; 673298714Sjkim ACPI_HANDLE Handle; 674117521Snjl ACPI_DEVICE_INFO *Info; 675117521Snjl ACPI_STATUS Status; 676193267Sjkim UINT32 i; 677117521Snjl 678117521Snjl 679298714Sjkim Arg = strtoul (ObjectArg, NULL, 16); 680298714Sjkim Handle = ACPI_TO_POINTER (Arg); 681117521Snjl 682298714Sjkim Status = AcpiGetObjectInfo (Handle, &Info); 683197104Sjkim if (ACPI_FAILURE (Status)) 684117521Snjl { 685197104Sjkim AcpiOsPrintf ("Could not get object info, %s\n", 686197104Sjkim AcpiFormatException (Status)); 687197104Sjkim return; 688197104Sjkim } 689117521Snjl 690298714Sjkim AcpiOsPrintf ("ADR: %8.8X%8.8X, STA: %8.8X, Flags: %X\n", 691298714Sjkim ACPI_FORMAT_UINT64 (Info->Address), 692298714Sjkim Info->CurrentStatus, Info->Flags); 693117521Snjl 694298714Sjkim AcpiOsPrintf ("S1D-%2.2X S2D-%2.2X S3D-%2.2X S4D-%2.2X\n", 695298714Sjkim Info->HighestDstates[0], Info->HighestDstates[1], 696298714Sjkim Info->HighestDstates[2], Info->HighestDstates[3]); 697298714Sjkim 698298714Sjkim AcpiOsPrintf ("S0W-%2.2X S1W-%2.2X S2W-%2.2X S3W-%2.2X S4W-%2.2X\n", 699298714Sjkim Info->LowestDstates[0], Info->LowestDstates[1], 700298714Sjkim Info->LowestDstates[2], Info->LowestDstates[3], 701298714Sjkim Info->LowestDstates[4]); 702298714Sjkim 703197104Sjkim if (Info->Valid & ACPI_VALID_HID) 704197104Sjkim { 705197104Sjkim AcpiOsPrintf ("HID: %s\n", Info->HardwareId.String); 706117521Snjl } 707287168Sjkim 708197104Sjkim if (Info->Valid & ACPI_VALID_UID) 709117521Snjl { 710197104Sjkim AcpiOsPrintf ("UID: %s\n", Info->UniqueId.String); 711117521Snjl } 712287168Sjkim 713197104Sjkim if (Info->Valid & ACPI_VALID_CID) 714197104Sjkim { 715197104Sjkim for (i = 0; i < Info->CompatibleIdList.Count; i++) 716197104Sjkim { 717209746Sjkim AcpiOsPrintf ("CID %u: %s\n", i, 718197104Sjkim Info->CompatibleIdList.Ids[i].String); 719197104Sjkim } 720197104Sjkim } 721197104Sjkim 722197104Sjkim ACPI_FREE (Info); 723117521Snjl} 724117521Snjl 725117521Snjl 726117521Snjl/******************************************************************************* 727117521Snjl * 72867754Smsmith * FUNCTION: AcpiDbDisplayResultObject 72967754Smsmith * 73067754Smsmith * PARAMETERS: ObjDesc - Object to be displayed 73167754Smsmith * WalkState - Current walk state 73267754Smsmith * 73367754Smsmith * RETURN: None 73467754Smsmith * 73567754Smsmith * DESCRIPTION: Display the result of an AML opcode 73667754Smsmith * 73791116Smsmith * Note: Curently only displays the result object if we are single stepping. 73891116Smsmith * However, this output may be useful in other contexts and could be enabled 73991116Smsmith * to do so if needed. 74091116Smsmith * 74167754Smsmith ******************************************************************************/ 74267754Smsmith 74367754Smsmithvoid 74467754SmsmithAcpiDbDisplayResultObject ( 74567754Smsmith ACPI_OPERAND_OBJECT *ObjDesc, 74667754Smsmith ACPI_WALK_STATE *WalkState) 74767754Smsmith{ 74867754Smsmith 749298714Sjkim#ifndef ACPI_APPLICATION 750298714Sjkim if (AcpiGbl_DbThreadId != AcpiOsGetThreadId()) 751298714Sjkim { 752298714Sjkim return; 753298714Sjkim } 754298714Sjkim#endif 755298714Sjkim 75691116Smsmith /* Only display if single stepping */ 75791116Smsmith 75867754Smsmith if (!AcpiGbl_CmSingleStep) 75967754Smsmith { 76067754Smsmith return; 76167754Smsmith } 76267754Smsmith 76367754Smsmith AcpiOsPrintf ("ResultObj: "); 764285797Sjkim AcpiDbDisplayInternalObject (ObjDesc, WalkState); 76567754Smsmith AcpiOsPrintf ("\n"); 76667754Smsmith} 76767754Smsmith 76867754Smsmith 76967754Smsmith/******************************************************************************* 77067754Smsmith * 77167754Smsmith * FUNCTION: AcpiDbDisplayArgumentObject 77267754Smsmith * 77367754Smsmith * PARAMETERS: ObjDesc - Object to be displayed 77467754Smsmith * WalkState - Current walk state 77567754Smsmith * 77667754Smsmith * RETURN: None 77767754Smsmith * 77867754Smsmith * DESCRIPTION: Display the result of an AML opcode 77967754Smsmith * 78067754Smsmith ******************************************************************************/ 78167754Smsmith 78267754Smsmithvoid 78367754SmsmithAcpiDbDisplayArgumentObject ( 78467754Smsmith ACPI_OPERAND_OBJECT *ObjDesc, 78567754Smsmith ACPI_WALK_STATE *WalkState) 78667754Smsmith{ 78767754Smsmith 788298714Sjkim#ifndef ACPI_APPLICATION 789298714Sjkim if (AcpiGbl_DbThreadId != AcpiOsGetThreadId()) 790298714Sjkim { 791298714Sjkim return; 792298714Sjkim } 793298714Sjkim#endif 794298714Sjkim 79567754Smsmith if (!AcpiGbl_CmSingleStep) 79667754Smsmith { 79767754Smsmith return; 79867754Smsmith } 79967754Smsmith 80067754Smsmith AcpiOsPrintf ("ArgObj: "); 801285797Sjkim AcpiDbDisplayInternalObject (ObjDesc, WalkState); 80267754Smsmith} 80367754Smsmith 804114237Snjl 805231844Sjkim#if (!ACPI_REDUCED_HARDWARE) 806114237Snjl/******************************************************************************* 807114237Snjl * 808114237Snjl * FUNCTION: AcpiDbDisplayGpes 809114237Snjl * 810123315Snjl * PARAMETERS: None 811114237Snjl * 812114237Snjl * RETURN: None 813114237Snjl * 814123315Snjl * DESCRIPTION: Display the current GPE structures 815114237Snjl * 816114237Snjl ******************************************************************************/ 817114237Snjl 818114237Snjlvoid 819151937SjkimAcpiDbDisplayGpes ( 820151937Sjkim void) 821114237Snjl{ 822114237Snjl ACPI_GPE_BLOCK_INFO *GpeBlock; 823117521Snjl ACPI_GPE_XRUPT_INFO *GpeXruptInfo; 824129684Snjl ACPI_GPE_EVENT_INFO *GpeEventInfo; 825129684Snjl ACPI_GPE_REGISTER_INFO *GpeRegisterInfo; 826207344Sjkim char *GpeType; 827237412Sjkim ACPI_GPE_NOTIFY_INFO *Notify; 828129684Snjl UINT32 GpeIndex; 829129684Snjl UINT32 Block = 0; 830129684Snjl UINT32 i; 831129684Snjl UINT32 j; 832237412Sjkim UINT32 Count; 833129684Snjl char Buffer[80]; 834129684Snjl ACPI_BUFFER RetBuf; 835129684Snjl ACPI_STATUS Status; 836114237Snjl 837114237Snjl 838129684Snjl RetBuf.Length = sizeof (Buffer); 839129684Snjl RetBuf.Pointer = Buffer; 840129684Snjl 841129684Snjl Block = 0; 842129684Snjl 843129684Snjl /* Walk the GPE lists */ 844129684Snjl 845117521Snjl GpeXruptInfo = AcpiGbl_GpeXruptListHead; 846117521Snjl while (GpeXruptInfo) 847114237Snjl { 848117521Snjl GpeBlock = GpeXruptInfo->GpeBlockListHead; 849117521Snjl while (GpeBlock) 850117521Snjl { 851287168Sjkim Status = AcpiGetName (GpeBlock->Node, 852287168Sjkim ACPI_FULL_PATHNAME_NO_TRAILING, &RetBuf); 853129684Snjl if (ACPI_FAILURE (Status)) 854129684Snjl { 855129684Snjl AcpiOsPrintf ("Could not convert name to pathname\n"); 856129684Snjl } 857129684Snjl 858207344Sjkim if (GpeBlock->Node == AcpiGbl_FadtGpeDevice) 859207344Sjkim { 860207344Sjkim GpeType = "FADT-defined GPE block"; 861207344Sjkim } 862207344Sjkim else 863207344Sjkim { 864207344Sjkim GpeType = "GPE Block Device"; 865207344Sjkim } 866151937Sjkim 867287168Sjkim AcpiOsPrintf ( 868287168Sjkim "\nBlock %u - Info %p DeviceNode %p [%s] - %s\n", 869207344Sjkim Block, GpeBlock, GpeBlock->Node, Buffer, GpeType); 870207344Sjkim 871287168Sjkim AcpiOsPrintf ( 872287168Sjkim " Registers: %u (%u GPEs)\n", 873206117Sjkim GpeBlock->RegisterCount, GpeBlock->GpeCount); 874151937Sjkim 875287168Sjkim AcpiOsPrintf ( 876287168Sjkim " GPE range: 0x%X to 0x%X on interrupt %u\n", 877151937Sjkim GpeBlock->BlockBaseNumber, 878206117Sjkim GpeBlock->BlockBaseNumber + (GpeBlock->GpeCount - 1), 879206117Sjkim GpeXruptInfo->InterruptNumber); 880151937Sjkim 881151937Sjkim AcpiOsPrintf ( 882151937Sjkim " RegisterInfo: %p Status %8.8X%8.8X Enable %8.8X%8.8X\n", 883151937Sjkim GpeBlock->RegisterInfo, 884287168Sjkim ACPI_FORMAT_UINT64 ( 885287168Sjkim GpeBlock->RegisterInfo->StatusAddress.Address), 886287168Sjkim ACPI_FORMAT_UINT64 ( 887287168Sjkim GpeBlock->RegisterInfo->EnableAddress.Address)); 888151937Sjkim 889117521Snjl AcpiOsPrintf (" EventInfo: %p\n", GpeBlock->EventInfo); 890114237Snjl 891129684Snjl /* Examine each GPE Register within the block */ 892129684Snjl 893129684Snjl for (i = 0; i < GpeBlock->RegisterCount; i++) 894129684Snjl { 895129684Snjl GpeRegisterInfo = &GpeBlock->RegisterInfo[i]; 896129684Snjl 897129684Snjl AcpiOsPrintf ( 898287168Sjkim " Reg %u: (GPE %.2X-%.2X) " 899287168Sjkim "RunEnable %2.2X WakeEnable %2.2X" 900206117Sjkim " Status %8.8X%8.8X Enable %8.8X%8.8X\n", 901206117Sjkim i, GpeRegisterInfo->BaseGpeNumber, 902287168Sjkim GpeRegisterInfo->BaseGpeNumber + 903287168Sjkim (ACPI_GPE_REGISTER_WIDTH - 1), 904151937Sjkim GpeRegisterInfo->EnableForRun, 905206117Sjkim GpeRegisterInfo->EnableForWake, 906287168Sjkim ACPI_FORMAT_UINT64 ( 907287168Sjkim GpeRegisterInfo->StatusAddress.Address), 908287168Sjkim ACPI_FORMAT_UINT64 ( 909287168Sjkim GpeRegisterInfo->EnableAddress.Address)); 910129684Snjl 911129684Snjl /* Now look at the individual GPEs in this byte register */ 912129684Snjl 913129684Snjl for (j = 0; j < ACPI_GPE_REGISTER_WIDTH; j++) 914129684Snjl { 915129684Snjl GpeIndex = (i * ACPI_GPE_REGISTER_WIDTH) + j; 916129684Snjl GpeEventInfo = &GpeBlock->EventInfo[GpeIndex]; 917129684Snjl 918278970Sjkim if (ACPI_GPE_DISPATCH_TYPE (GpeEventInfo->Flags) == 919216471Sjkim ACPI_GPE_DISPATCH_NONE) 920129684Snjl { 921206117Sjkim /* This GPE is not used (no method or handler), ignore it */ 922129684Snjl 923129684Snjl continue; 924129684Snjl } 925129684Snjl 926129684Snjl AcpiOsPrintf ( 927209746Sjkim " GPE %.2X: %p RunRefs %2.2X Flags %2.2X (", 928206117Sjkim GpeBlock->BlockBaseNumber + GpeIndex, GpeEventInfo, 929216471Sjkim GpeEventInfo->RuntimeCount, GpeEventInfo->Flags); 930129684Snjl 931206117Sjkim /* Decode the flags byte */ 932206117Sjkim 933129684Snjl if (GpeEventInfo->Flags & ACPI_GPE_LEVEL_TRIGGERED) 934129684Snjl { 935129684Snjl AcpiOsPrintf ("Level, "); 936129684Snjl } 937129684Snjl else 938129684Snjl { 939129684Snjl AcpiOsPrintf ("Edge, "); 940129684Snjl } 941129684Snjl 942206117Sjkim if (GpeEventInfo->Flags & ACPI_GPE_CAN_WAKE) 943129684Snjl { 944206117Sjkim AcpiOsPrintf ("CanWake, "); 945129684Snjl } 946129684Snjl else 947129684Snjl { 948206117Sjkim AcpiOsPrintf ("RunOnly, "); 949129684Snjl } 950129684Snjl 951278970Sjkim switch (ACPI_GPE_DISPATCH_TYPE (GpeEventInfo->Flags)) 952129684Snjl { 953216471Sjkim case ACPI_GPE_DISPATCH_NONE: 954250838Sjkim 955129684Snjl AcpiOsPrintf ("NotUsed"); 956129684Snjl break; 957250838Sjkim 958216471Sjkim case ACPI_GPE_DISPATCH_METHOD: 959250838Sjkim 960216471Sjkim AcpiOsPrintf ("Method"); 961216471Sjkim break; 962278970Sjkim 963129684Snjl case ACPI_GPE_DISPATCH_HANDLER: 964250838Sjkim 965129684Snjl AcpiOsPrintf ("Handler"); 966129684Snjl break; 967250838Sjkim 968216471Sjkim case ACPI_GPE_DISPATCH_NOTIFY: 969250838Sjkim 970237412Sjkim Count = 0; 971237412Sjkim Notify = GpeEventInfo->Dispatch.NotifyList; 972237412Sjkim while (Notify) 973237412Sjkim { 974237412Sjkim Count++; 975237412Sjkim Notify = Notify->Next; 976237412Sjkim } 977287168Sjkim 978287168Sjkim AcpiOsPrintf ("Implicit Notify on %u devices", 979287168Sjkim Count); 980129684Snjl break; 981250838Sjkim 982278970Sjkim case ACPI_GPE_DISPATCH_RAW_HANDLER: 983278970Sjkim 984278970Sjkim AcpiOsPrintf ("RawHandler"); 985278970Sjkim break; 986278970Sjkim 987129684Snjl default: 988250838Sjkim 989129684Snjl AcpiOsPrintf ("UNKNOWN: %X", 990278970Sjkim ACPI_GPE_DISPATCH_TYPE (GpeEventInfo->Flags)); 991129684Snjl break; 992129684Snjl } 993129684Snjl 994206117Sjkim AcpiOsPrintf (")\n"); 995129684Snjl } 996129684Snjl } 997287168Sjkim 998129684Snjl Block++; 999117521Snjl GpeBlock = GpeBlock->Next; 1000117521Snjl } 1001287168Sjkim 1002117521Snjl GpeXruptInfo = GpeXruptInfo->Next; 1003114237Snjl } 1004114237Snjl} 1005231844Sjkim#endif /* !ACPI_REDUCED_HARDWARE */ 1006114237Snjl 1007220663Sjkim 1008218590Sjkim/******************************************************************************* 1009218590Sjkim * 1010218590Sjkim * FUNCTION: AcpiDbDisplayHandlers 1011218590Sjkim * 1012218590Sjkim * PARAMETERS: None 1013218590Sjkim * 1014218590Sjkim * RETURN: None 1015218590Sjkim * 1016218590Sjkim * DESCRIPTION: Display the currently installed global handlers 1017218590Sjkim * 1018218590Sjkim ******************************************************************************/ 1019218590Sjkim 1020218590Sjkimvoid 1021218590SjkimAcpiDbDisplayHandlers ( 1022218590Sjkim void) 1023218590Sjkim{ 1024218590Sjkim ACPI_OPERAND_OBJECT *ObjDesc; 1025218590Sjkim ACPI_OPERAND_OBJECT *HandlerObj; 1026218590Sjkim ACPI_ADR_SPACE_TYPE SpaceId; 1027218590Sjkim UINT32 i; 1028218590Sjkim 1029218590Sjkim 1030218590Sjkim /* Operation region handlers */ 1031218590Sjkim 1032249663Sjkim AcpiOsPrintf ("\nOperation Region Handlers at the namespace root:\n"); 1033218590Sjkim 1034218590Sjkim ObjDesc = AcpiNsGetAttachedObject (AcpiGbl_RootNode); 1035218590Sjkim if (ObjDesc) 1036218590Sjkim { 1037220663Sjkim for (i = 0; i < ACPI_ARRAY_LENGTH (AcpiGbl_SpaceIdList); i++) 1038218590Sjkim { 1039220663Sjkim SpaceId = AcpiGbl_SpaceIdList[i]; 1040218590Sjkim 1041218590Sjkim AcpiOsPrintf (ACPI_PREDEFINED_PREFIX, 1042218590Sjkim AcpiUtGetRegionName ((UINT8) SpaceId), SpaceId); 1043218590Sjkim 1044298714Sjkim HandlerObj = AcpiEvFindRegionHandler ( 1045298714Sjkim SpaceId, ObjDesc->CommonNotify.Handler); 1046298714Sjkim if (HandlerObj) 1047218590Sjkim { 1048298714Sjkim AcpiOsPrintf (ACPI_HANDLER_PRESENT_STRING, 1049298714Sjkim (HandlerObj->AddressSpace.HandlerFlags & 1050298714Sjkim ACPI_ADDR_HANDLER_DEFAULT_INSTALLED) ? 1051298714Sjkim "Default" : "User", 1052298714Sjkim HandlerObj->AddressSpace.Handler); 1053287168Sjkim 1054298714Sjkim goto FoundHandler; 1055218590Sjkim } 1056218590Sjkim 1057218590Sjkim /* There is no handler for this SpaceId */ 1058218590Sjkim 1059218590Sjkim AcpiOsPrintf ("None\n"); 1060218590Sjkim 1061218590Sjkim FoundHandler:; 1062218590Sjkim } 1063228110Sjkim 1064228110Sjkim /* Find all handlers for user-defined SpaceIDs */ 1065228110Sjkim 1066298714Sjkim HandlerObj = ObjDesc->CommonNotify.Handler; 1067228110Sjkim while (HandlerObj) 1068228110Sjkim { 1069228110Sjkim if (HandlerObj->AddressSpace.SpaceId >= ACPI_USER_REGION_BEGIN) 1070228110Sjkim { 1071228110Sjkim AcpiOsPrintf (ACPI_PREDEFINED_PREFIX, 1072228110Sjkim "User-defined ID", HandlerObj->AddressSpace.SpaceId); 1073228110Sjkim AcpiOsPrintf (ACPI_HANDLER_PRESENT_STRING, 1074228110Sjkim (HandlerObj->AddressSpace.HandlerFlags & 1075287168Sjkim ACPI_ADDR_HANDLER_DEFAULT_INSTALLED) ? 1076287168Sjkim "Default" : "User", 1077228110Sjkim HandlerObj->AddressSpace.Handler); 1078228110Sjkim } 1079228110Sjkim 1080228110Sjkim HandlerObj = HandlerObj->AddressSpace.Next; 1081228110Sjkim } 1082218590Sjkim } 1083218590Sjkim 1084231844Sjkim#if (!ACPI_REDUCED_HARDWARE) 1085231844Sjkim 1086218590Sjkim /* Fixed event handlers */ 1087218590Sjkim 1088218590Sjkim AcpiOsPrintf ("\nFixed Event Handlers:\n"); 1089218590Sjkim 1090218590Sjkim for (i = 0; i < ACPI_NUM_FIXED_EVENTS; i++) 1091218590Sjkim { 1092218590Sjkim AcpiOsPrintf (ACPI_PREDEFINED_PREFIX, AcpiUtGetEventName (i), i); 1093218590Sjkim if (AcpiGbl_FixedEventHandlers[i].Handler) 1094218590Sjkim { 1095218590Sjkim AcpiOsPrintf (ACPI_HANDLER_PRESENT_STRING, "User", 1096218590Sjkim AcpiGbl_FixedEventHandlers[i].Handler); 1097218590Sjkim } 1098218590Sjkim else 1099218590Sjkim { 1100218590Sjkim AcpiOsPrintf (ACPI_HANDLER_NOT_PRESENT_STRING, "None"); 1101218590Sjkim } 1102218590Sjkim } 1103218590Sjkim 1104231844Sjkim#endif /* !ACPI_REDUCED_HARDWARE */ 1105231844Sjkim 1106218590Sjkim /* Miscellaneous global handlers */ 1107218590Sjkim 1108218590Sjkim AcpiOsPrintf ("\nMiscellaneous Global Handlers:\n"); 1109218590Sjkim 1110220663Sjkim for (i = 0; i < ACPI_ARRAY_LENGTH (AcpiGbl_HandlerList); i++) 1111218590Sjkim { 1112287168Sjkim AcpiOsPrintf (ACPI_HANDLER_NAME_STRING, 1113287168Sjkim AcpiGbl_HandlerList[i].Name); 1114287168Sjkim 1115220663Sjkim if (AcpiGbl_HandlerList[i].Handler) 1116218590Sjkim { 1117218590Sjkim AcpiOsPrintf (ACPI_HANDLER_PRESENT_STRING, "User", 1118220663Sjkim AcpiGbl_HandlerList[i].Handler); 1119218590Sjkim } 1120218590Sjkim else 1121218590Sjkim { 1122218590Sjkim AcpiOsPrintf (ACPI_HANDLER_NOT_PRESENT_STRING, "None"); 1123218590Sjkim } 1124218590Sjkim } 1125249663Sjkim 1126249663Sjkim 1127249663Sjkim /* Other handlers that are installed throughout the namespace */ 1128249663Sjkim 1129249663Sjkim AcpiOsPrintf ("\nOperation Region Handlers for specific devices:\n"); 1130249663Sjkim 1131249663Sjkim (void) AcpiWalkNamespace (ACPI_TYPE_DEVICE, ACPI_ROOT_OBJECT, 1132287168Sjkim ACPI_UINT32_MAX, AcpiDbDisplayNonRootHandlers, 1133287168Sjkim NULL, NULL, NULL); 1134218590Sjkim} 1135218590Sjkim 1136249663Sjkim 1137249663Sjkim/******************************************************************************* 1138249663Sjkim * 1139249663Sjkim * FUNCTION: AcpiDbDisplayNonRootHandlers 1140249663Sjkim * 1141249663Sjkim * PARAMETERS: ACPI_WALK_CALLBACK 1142249663Sjkim * 1143249663Sjkim * RETURN: Status 1144249663Sjkim * 1145249663Sjkim * DESCRIPTION: Display information about all handlers installed for a 1146249663Sjkim * device object. 1147249663Sjkim * 1148249663Sjkim ******************************************************************************/ 1149249663Sjkim 1150249663Sjkimstatic ACPI_STATUS 1151249663SjkimAcpiDbDisplayNonRootHandlers ( 1152249663Sjkim ACPI_HANDLE ObjHandle, 1153249663Sjkim UINT32 NestingLevel, 1154249663Sjkim void *Context, 1155249663Sjkim void **ReturnValue) 1156249663Sjkim{ 1157249663Sjkim ACPI_NAMESPACE_NODE *Node = ACPI_CAST_PTR (ACPI_NAMESPACE_NODE, ObjHandle); 1158249663Sjkim ACPI_OPERAND_OBJECT *ObjDesc; 1159249663Sjkim ACPI_OPERAND_OBJECT *HandlerObj; 1160249663Sjkim char *Pathname; 1161249663Sjkim 1162249663Sjkim 1163249663Sjkim ObjDesc = AcpiNsGetAttachedObject (Node); 1164249663Sjkim if (!ObjDesc) 1165249663Sjkim { 1166249663Sjkim return (AE_OK); 1167249663Sjkim } 1168249663Sjkim 1169298714Sjkim Pathname = AcpiNsGetNormalizedPathname (Node, TRUE); 1170249663Sjkim if (!Pathname) 1171249663Sjkim { 1172249663Sjkim return (AE_OK); 1173249663Sjkim } 1174249663Sjkim 1175249663Sjkim /* Display all handlers associated with this device */ 1176249663Sjkim 1177298714Sjkim HandlerObj = ObjDesc->CommonNotify.Handler; 1178249663Sjkim while (HandlerObj) 1179249663Sjkim { 1180249663Sjkim AcpiOsPrintf (ACPI_PREDEFINED_PREFIX, 1181249663Sjkim AcpiUtGetRegionName ((UINT8) HandlerObj->AddressSpace.SpaceId), 1182249663Sjkim HandlerObj->AddressSpace.SpaceId); 1183249663Sjkim 1184249663Sjkim AcpiOsPrintf (ACPI_HANDLER_PRESENT_STRING2, 1185249663Sjkim (HandlerObj->AddressSpace.HandlerFlags & 1186249663Sjkim ACPI_ADDR_HANDLER_DEFAULT_INSTALLED) ? "Default" : "User", 1187249663Sjkim HandlerObj->AddressSpace.Handler); 1188249663Sjkim 1189249663Sjkim AcpiOsPrintf (" Device Name: %s (%p)\n", Pathname, Node); 1190249663Sjkim 1191249663Sjkim HandlerObj = HandlerObj->AddressSpace.Next; 1192249663Sjkim } 1193249663Sjkim 1194249663Sjkim ACPI_FREE (Pathname); 1195249663Sjkim return (AE_OK); 1196249663Sjkim} 1197