167754Smsmith/****************************************************************************** 267754Smsmith * 377424Smsmith * Module Name: exdump - Interpreter debug output routines 467754Smsmith * 567754Smsmith *****************************************************************************/ 667754Smsmith 7217365Sjkim/* 8217365Sjkim * Copyright (C) 2000 - 2011, 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 4477424Smsmith#define __EXDUMP_C__ 4567754Smsmith 46193341Sjkim#include <contrib/dev/acpica/include/acpi.h> 47193341Sjkim#include <contrib/dev/acpica/include/accommon.h> 48193341Sjkim#include <contrib/dev/acpica/include/acinterp.h> 49193341Sjkim#include <contrib/dev/acpica/include/amlcode.h> 50193341Sjkim#include <contrib/dev/acpica/include/acnamesp.h> 5167754Smsmith 52193267Sjkim 5377424Smsmith#define _COMPONENT ACPI_EXECUTER 5491116Smsmith ACPI_MODULE_NAME ("exdump") 5567754Smsmith 5667754Smsmith/* 5767754Smsmith * The following routines are used for debug output only 5867754Smsmith */ 59102550Siwasaki#if defined(ACPI_DEBUG_OUTPUT) || defined(ACPI_DEBUGGER) 6067754Smsmith 61151937Sjkim/* Local prototypes */ 62151937Sjkim 63151937Sjkimstatic void 64151937SjkimAcpiExOutString ( 65151937Sjkim char *Title, 66151937Sjkim char *Value); 67151937Sjkim 68151937Sjkimstatic void 69151937SjkimAcpiExOutPointer ( 70151937Sjkim char *Title, 71151937Sjkim void *Value); 72151937Sjkim 73151937Sjkimstatic void 74167802SjkimAcpiExDumpObject ( 75167802Sjkim ACPI_OPERAND_OBJECT *ObjDesc, 76167802Sjkim ACPI_EXDUMP_INFO *Info); 77151937Sjkim 78151937Sjkimstatic void 79167802SjkimAcpiExDumpReferenceObj ( 80151937Sjkim ACPI_OPERAND_OBJECT *ObjDesc); 81151937Sjkim 82151937Sjkimstatic void 83167802SjkimAcpiExDumpPackageObj ( 84151937Sjkim ACPI_OPERAND_OBJECT *ObjDesc, 85151937Sjkim UINT32 Level, 86151937Sjkim UINT32 Index); 87151937Sjkim 88151937Sjkim 89151937Sjkim/******************************************************************************* 9067754Smsmith * 91167802Sjkim * Object Descriptor info tables 92167802Sjkim * 93167802Sjkim * Note: The first table entry must be an INIT opcode and must contain 94167802Sjkim * the table length (number of table entries) 95167802Sjkim * 96167802Sjkim ******************************************************************************/ 97167802Sjkim 98167802Sjkimstatic ACPI_EXDUMP_INFO AcpiExDumpInteger[2] = 99167802Sjkim{ 100167802Sjkim {ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE (AcpiExDumpInteger), NULL}, 101167802Sjkim {ACPI_EXD_UINT64, ACPI_EXD_OFFSET (Integer.Value), "Value"} 102167802Sjkim}; 103167802Sjkim 104167802Sjkimstatic ACPI_EXDUMP_INFO AcpiExDumpString[4] = 105167802Sjkim{ 106167802Sjkim {ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE (AcpiExDumpString), NULL}, 107167802Sjkim {ACPI_EXD_UINT32, ACPI_EXD_OFFSET (String.Length), "Length"}, 108167802Sjkim {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (String.Pointer), "Pointer"}, 109167802Sjkim {ACPI_EXD_STRING, 0, NULL} 110167802Sjkim}; 111167802Sjkim 112167802Sjkimstatic ACPI_EXDUMP_INFO AcpiExDumpBuffer[5] = 113167802Sjkim{ 114167802Sjkim {ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE (AcpiExDumpBuffer), NULL}, 115167802Sjkim {ACPI_EXD_UINT32, ACPI_EXD_OFFSET (Buffer.Length), "Length"}, 116167802Sjkim {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (Buffer.Pointer), "Pointer"}, 117167802Sjkim {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (Buffer.Node), "Parent Node"}, 118167802Sjkim {ACPI_EXD_BUFFER, 0, NULL} 119167802Sjkim}; 120167802Sjkim 121167802Sjkimstatic ACPI_EXDUMP_INFO AcpiExDumpPackage[5] = 122167802Sjkim{ 123167802Sjkim {ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE (AcpiExDumpPackage), NULL}, 124167802Sjkim {ACPI_EXD_UINT8, ACPI_EXD_OFFSET (Package.Flags), "Flags"}, 125167802Sjkim {ACPI_EXD_UINT32, ACPI_EXD_OFFSET (Package.Count), "Elements"}, 126167802Sjkim {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (Package.Elements), "Element List"}, 127167802Sjkim {ACPI_EXD_PACKAGE, 0, NULL} 128167802Sjkim}; 129167802Sjkim 130167802Sjkimstatic ACPI_EXDUMP_INFO AcpiExDumpDevice[4] = 131167802Sjkim{ 132167802Sjkim {ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE (AcpiExDumpDevice), NULL}, 133167802Sjkim {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (Device.Handler), "Handler"}, 134167802Sjkim {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (Device.SystemNotify), "System Notify"}, 135167802Sjkim {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (Device.DeviceNotify), "Device Notify"} 136167802Sjkim}; 137167802Sjkim 138167802Sjkimstatic ACPI_EXDUMP_INFO AcpiExDumpEvent[2] = 139167802Sjkim{ 140167802Sjkim {ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE (AcpiExDumpEvent), NULL}, 141167802Sjkim {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (Event.OsSemaphore), "OsSemaphore"} 142167802Sjkim}; 143167802Sjkim 144193267Sjkimstatic ACPI_EXDUMP_INFO AcpiExDumpMethod[9] = 145167802Sjkim{ 146167802Sjkim {ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE (AcpiExDumpMethod), NULL}, 147217365Sjkim {ACPI_EXD_UINT8, ACPI_EXD_OFFSET (Method.InfoFlags), "Info Flags"}, 148193267Sjkim {ACPI_EXD_UINT8, ACPI_EXD_OFFSET (Method.ParamCount), "Parameter Count"}, 149167802Sjkim {ACPI_EXD_UINT8, ACPI_EXD_OFFSET (Method.SyncLevel), "Sync Level"}, 150167802Sjkim {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (Method.Mutex), "Mutex"}, 151167802Sjkim {ACPI_EXD_UINT8, ACPI_EXD_OFFSET (Method.OwnerId), "Owner Id"}, 152167802Sjkim {ACPI_EXD_UINT8, ACPI_EXD_OFFSET (Method.ThreadCount), "Thread Count"}, 153167802Sjkim {ACPI_EXD_UINT32, ACPI_EXD_OFFSET (Method.AmlLength), "Aml Length"}, 154167802Sjkim {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (Method.AmlStart), "Aml Start"} 155167802Sjkim}; 156167802Sjkim 157167802Sjkimstatic ACPI_EXDUMP_INFO AcpiExDumpMutex[5] = 158167802Sjkim{ 159167802Sjkim {ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE (AcpiExDumpMutex), NULL}, 160167802Sjkim {ACPI_EXD_UINT8, ACPI_EXD_OFFSET (Mutex.SyncLevel), "Sync Level"}, 161167802Sjkim {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (Mutex.OwnerThread), "Owner Thread"}, 162167802Sjkim {ACPI_EXD_UINT16, ACPI_EXD_OFFSET (Mutex.AcquisitionDepth), "Acquire Depth"}, 163167802Sjkim {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (Mutex.OsMutex), "OsMutex"} 164167802Sjkim}; 165167802Sjkim 166167802Sjkimstatic ACPI_EXDUMP_INFO AcpiExDumpRegion[7] = 167167802Sjkim{ 168167802Sjkim {ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE (AcpiExDumpRegion), NULL}, 169167802Sjkim {ACPI_EXD_UINT8, ACPI_EXD_OFFSET (Region.SpaceId), "Space Id"}, 170167802Sjkim {ACPI_EXD_UINT8, ACPI_EXD_OFFSET (Region.Flags), "Flags"}, 171167802Sjkim {ACPI_EXD_ADDRESS, ACPI_EXD_OFFSET (Region.Address), "Address"}, 172167802Sjkim {ACPI_EXD_UINT32, ACPI_EXD_OFFSET (Region.Length), "Length"}, 173167802Sjkim {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (Region.Handler), "Handler"}, 174167802Sjkim {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (Region.Next), "Next"} 175167802Sjkim}; 176167802Sjkim 177167802Sjkimstatic ACPI_EXDUMP_INFO AcpiExDumpPower[5] = 178167802Sjkim{ 179167802Sjkim {ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE (AcpiExDumpPower), NULL}, 180167802Sjkim {ACPI_EXD_UINT32, ACPI_EXD_OFFSET (PowerResource.SystemLevel), "System Level"}, 181167802Sjkim {ACPI_EXD_UINT32, ACPI_EXD_OFFSET (PowerResource.ResourceOrder), "Resource Order"}, 182167802Sjkim {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (PowerResource.SystemNotify), "System Notify"}, 183167802Sjkim {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (PowerResource.DeviceNotify), "Device Notify"} 184167802Sjkim}; 185167802Sjkim 186167802Sjkimstatic ACPI_EXDUMP_INFO AcpiExDumpProcessor[7] = 187167802Sjkim{ 188167802Sjkim {ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE (AcpiExDumpProcessor), NULL}, 189167802Sjkim {ACPI_EXD_UINT8, ACPI_EXD_OFFSET (Processor.ProcId), "Processor ID"}, 190167802Sjkim {ACPI_EXD_UINT8 , ACPI_EXD_OFFSET (Processor.Length), "Length"}, 191167802Sjkim {ACPI_EXD_ADDRESS, ACPI_EXD_OFFSET (Processor.Address), "Address"}, 192167802Sjkim {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (Processor.SystemNotify), "System Notify"}, 193167802Sjkim {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (Processor.DeviceNotify), "Device Notify"}, 194167802Sjkim {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (Processor.Handler), "Handler"} 195167802Sjkim}; 196167802Sjkim 197167802Sjkimstatic ACPI_EXDUMP_INFO AcpiExDumpThermal[4] = 198167802Sjkim{ 199167802Sjkim {ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE (AcpiExDumpThermal), NULL}, 200167802Sjkim {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (ThermalZone.SystemNotify), "System Notify"}, 201167802Sjkim {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (ThermalZone.DeviceNotify), "Device Notify"}, 202167802Sjkim {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (ThermalZone.Handler), "Handler"} 203167802Sjkim}; 204167802Sjkim 205167802Sjkimstatic ACPI_EXDUMP_INFO AcpiExDumpBufferField[3] = 206167802Sjkim{ 207167802Sjkim {ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE (AcpiExDumpBufferField), NULL}, 208167802Sjkim {ACPI_EXD_FIELD, 0, NULL}, 209167802Sjkim {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (BufferField.BufferObj), "Buffer Object"} 210167802Sjkim}; 211167802Sjkim 212167802Sjkimstatic ACPI_EXDUMP_INFO AcpiExDumpRegionField[3] = 213167802Sjkim{ 214167802Sjkim {ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE (AcpiExDumpRegionField), NULL}, 215167802Sjkim {ACPI_EXD_FIELD, 0, NULL}, 216167802Sjkim {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (Field.RegionObj), "Region Object"} 217167802Sjkim}; 218167802Sjkim 219167802Sjkimstatic ACPI_EXDUMP_INFO AcpiExDumpBankField[5] = 220167802Sjkim{ 221167802Sjkim {ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE (AcpiExDumpBankField), NULL}, 222167802Sjkim {ACPI_EXD_FIELD, 0, NULL}, 223167802Sjkim {ACPI_EXD_UINT32, ACPI_EXD_OFFSET (BankField.Value), "Value"}, 224167802Sjkim {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (BankField.RegionObj), "Region Object"}, 225167802Sjkim {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (BankField.BankObj), "Bank Object"} 226167802Sjkim}; 227167802Sjkim 228167802Sjkimstatic ACPI_EXDUMP_INFO AcpiExDumpIndexField[5] = 229167802Sjkim{ 230167802Sjkim {ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE (AcpiExDumpBankField), NULL}, 231167802Sjkim {ACPI_EXD_FIELD, 0, NULL}, 232167802Sjkim {ACPI_EXD_UINT32, ACPI_EXD_OFFSET (IndexField.Value), "Value"}, 233167802Sjkim {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (IndexField.IndexObj), "Index Object"}, 234167802Sjkim {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (IndexField.DataObj), "Data Object"} 235167802Sjkim}; 236167802Sjkim 237193267Sjkimstatic ACPI_EXDUMP_INFO AcpiExDumpReference[8] = 238167802Sjkim{ 239167802Sjkim {ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE (AcpiExDumpReference), NULL}, 240193267Sjkim {ACPI_EXD_UINT8, ACPI_EXD_OFFSET (Reference.Class), "Class"}, 241167802Sjkim {ACPI_EXD_UINT8, ACPI_EXD_OFFSET (Reference.TargetType), "Target Type"}, 242193267Sjkim {ACPI_EXD_UINT32, ACPI_EXD_OFFSET (Reference.Value), "Value"}, 243167802Sjkim {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (Reference.Object), "Object Desc"}, 244167802Sjkim {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (Reference.Node), "Node"}, 245167802Sjkim {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (Reference.Where), "Where"}, 246167802Sjkim {ACPI_EXD_REFERENCE,0, NULL} 247167802Sjkim}; 248167802Sjkim 249167802Sjkimstatic ACPI_EXDUMP_INFO AcpiExDumpAddressHandler[6] = 250167802Sjkim{ 251167802Sjkim {ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE (AcpiExDumpAddressHandler), NULL}, 252167802Sjkim {ACPI_EXD_UINT8, ACPI_EXD_OFFSET (AddressSpace.SpaceId), "Space Id"}, 253167802Sjkim {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (AddressSpace.Next), "Next"}, 254167802Sjkim {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (AddressSpace.RegionList), "Region List"}, 255167802Sjkim {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (AddressSpace.Node), "Node"}, 256167802Sjkim {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (AddressSpace.Context), "Context"} 257167802Sjkim}; 258167802Sjkim 259167802Sjkimstatic ACPI_EXDUMP_INFO AcpiExDumpNotify[3] = 260167802Sjkim{ 261167802Sjkim {ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE (AcpiExDumpNotify), NULL}, 262167802Sjkim {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (Notify.Node), "Node"}, 263167802Sjkim {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (Notify.Context), "Context"} 264167802Sjkim}; 265167802Sjkim 266167802Sjkim 267167802Sjkim/* Miscellaneous tables */ 268167802Sjkim 269167802Sjkimstatic ACPI_EXDUMP_INFO AcpiExDumpCommon[4] = 270167802Sjkim{ 271167802Sjkim {ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE (AcpiExDumpCommon), NULL}, 272167802Sjkim {ACPI_EXD_TYPE , 0, NULL}, 273167802Sjkim {ACPI_EXD_UINT16, ACPI_EXD_OFFSET (Common.ReferenceCount), "Reference Count"}, 274167802Sjkim {ACPI_EXD_UINT8, ACPI_EXD_OFFSET (Common.Flags), "Flags"} 275167802Sjkim}; 276167802Sjkim 277167802Sjkimstatic ACPI_EXDUMP_INFO AcpiExDumpFieldCommon[7] = 278167802Sjkim{ 279167802Sjkim {ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE (AcpiExDumpFieldCommon), NULL}, 280167802Sjkim {ACPI_EXD_UINT8, ACPI_EXD_OFFSET (CommonField.FieldFlags), "Field Flags"}, 281167802Sjkim {ACPI_EXD_UINT8, ACPI_EXD_OFFSET (CommonField.AccessByteWidth), "Access Byte Width"}, 282167802Sjkim {ACPI_EXD_UINT32, ACPI_EXD_OFFSET (CommonField.BitLength), "Bit Length"}, 283167802Sjkim {ACPI_EXD_UINT8, ACPI_EXD_OFFSET (CommonField.StartFieldBitOffset),"Field Bit Offset"}, 284167802Sjkim {ACPI_EXD_UINT32, ACPI_EXD_OFFSET (CommonField.BaseByteOffset), "Base Byte Offset"}, 285167802Sjkim {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (CommonField.Node), "Parent Node"} 286167802Sjkim}; 287167802Sjkim 288167802Sjkimstatic ACPI_EXDUMP_INFO AcpiExDumpNode[5] = 289167802Sjkim{ 290167802Sjkim {ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE (AcpiExDumpNode), NULL}, 291167802Sjkim {ACPI_EXD_UINT8, ACPI_EXD_NSOFFSET (Flags), "Flags"}, 292167802Sjkim {ACPI_EXD_UINT8, ACPI_EXD_NSOFFSET (OwnerId), "Owner Id"}, 293167802Sjkim {ACPI_EXD_POINTER, ACPI_EXD_NSOFFSET (Child), "Child List"}, 294167802Sjkim {ACPI_EXD_POINTER, ACPI_EXD_NSOFFSET (Peer), "Next Peer"} 295167802Sjkim}; 296167802Sjkim 297167802Sjkim 298167802Sjkim/* Dispatch table, indexed by object type */ 299167802Sjkim 300167802Sjkimstatic ACPI_EXDUMP_INFO *AcpiExDumpInfo[] = 301167802Sjkim{ 302167802Sjkim NULL, 303167802Sjkim AcpiExDumpInteger, 304167802Sjkim AcpiExDumpString, 305167802Sjkim AcpiExDumpBuffer, 306167802Sjkim AcpiExDumpPackage, 307167802Sjkim NULL, 308167802Sjkim AcpiExDumpDevice, 309167802Sjkim AcpiExDumpEvent, 310167802Sjkim AcpiExDumpMethod, 311167802Sjkim AcpiExDumpMutex, 312167802Sjkim AcpiExDumpRegion, 313167802Sjkim AcpiExDumpPower, 314167802Sjkim AcpiExDumpProcessor, 315167802Sjkim AcpiExDumpThermal, 316167802Sjkim AcpiExDumpBufferField, 317167802Sjkim NULL, 318167802Sjkim NULL, 319167802Sjkim AcpiExDumpRegionField, 320167802Sjkim AcpiExDumpBankField, 321167802Sjkim AcpiExDumpIndexField, 322167802Sjkim AcpiExDumpReference, 323167802Sjkim NULL, 324167802Sjkim NULL, 325167802Sjkim AcpiExDumpNotify, 326167802Sjkim AcpiExDumpAddressHandler, 327167802Sjkim NULL, 328167802Sjkim NULL, 329167802Sjkim NULL 330167802Sjkim}; 331167802Sjkim 332167802Sjkim 333167802Sjkim/******************************************************************************* 334167802Sjkim * 335167802Sjkim * FUNCTION: AcpiExDumpObject 336167802Sjkim * 337167802Sjkim * PARAMETERS: ObjDesc - Descriptor to dump 338167802Sjkim * Info - Info table corresponding to this object 339167802Sjkim * type 340167802Sjkim * 341167802Sjkim * RETURN: None 342167802Sjkim * 343167802Sjkim * DESCRIPTION: Walk the info table for this object 344167802Sjkim * 345167802Sjkim ******************************************************************************/ 346167802Sjkim 347167802Sjkimstatic void 348167802SjkimAcpiExDumpObject ( 349167802Sjkim ACPI_OPERAND_OBJECT *ObjDesc, 350167802Sjkim ACPI_EXDUMP_INFO *Info) 351167802Sjkim{ 352167802Sjkim UINT8 *Target; 353167802Sjkim char *Name; 354167802Sjkim UINT8 Count; 355167802Sjkim 356167802Sjkim 357167802Sjkim if (!Info) 358167802Sjkim { 359167802Sjkim AcpiOsPrintf ( 360167802Sjkim "ExDumpObject: Display not implemented for object type %s\n", 361167802Sjkim AcpiUtGetObjectTypeName (ObjDesc)); 362167802Sjkim return; 363167802Sjkim } 364167802Sjkim 365167802Sjkim /* First table entry must contain the table length (# of table entries) */ 366167802Sjkim 367167802Sjkim Count = Info->Offset; 368167802Sjkim 369167802Sjkim while (Count) 370167802Sjkim { 371167802Sjkim Target = ACPI_ADD_PTR (UINT8, ObjDesc, Info->Offset); 372167802Sjkim Name = Info->Name; 373167802Sjkim 374167802Sjkim switch (Info->Opcode) 375167802Sjkim { 376167802Sjkim case ACPI_EXD_INIT: 377167802Sjkim break; 378167802Sjkim 379167802Sjkim case ACPI_EXD_TYPE: 380193267Sjkim 381167802Sjkim AcpiExOutString ("Type", AcpiUtGetObjectTypeName (ObjDesc)); 382167802Sjkim break; 383167802Sjkim 384167802Sjkim case ACPI_EXD_UINT8: 385167802Sjkim 386167802Sjkim AcpiOsPrintf ("%20s : %2.2X\n", Name, *Target); 387167802Sjkim break; 388167802Sjkim 389167802Sjkim case ACPI_EXD_UINT16: 390167802Sjkim 391167802Sjkim AcpiOsPrintf ("%20s : %4.4X\n", Name, ACPI_GET16 (Target)); 392167802Sjkim break; 393167802Sjkim 394167802Sjkim case ACPI_EXD_UINT32: 395167802Sjkim 396167802Sjkim AcpiOsPrintf ("%20s : %8.8X\n", Name, ACPI_GET32 (Target)); 397167802Sjkim break; 398167802Sjkim 399167802Sjkim case ACPI_EXD_UINT64: 400167802Sjkim 401167802Sjkim AcpiOsPrintf ("%20s : %8.8X%8.8X\n", "Value", 402193267Sjkim ACPI_FORMAT_UINT64 (ACPI_GET64 (Target))); 403167802Sjkim break; 404167802Sjkim 405167802Sjkim case ACPI_EXD_POINTER: 406167802Sjkim case ACPI_EXD_ADDRESS: 407167802Sjkim 408167802Sjkim AcpiExOutPointer (Name, *ACPI_CAST_PTR (void *, Target)); 409167802Sjkim break; 410167802Sjkim 411167802Sjkim case ACPI_EXD_STRING: 412167802Sjkim 413167802Sjkim AcpiUtPrintString (ObjDesc->String.Pointer, ACPI_UINT8_MAX); 414167802Sjkim AcpiOsPrintf ("\n"); 415167802Sjkim break; 416167802Sjkim 417167802Sjkim case ACPI_EXD_BUFFER: 418167802Sjkim 419167802Sjkim ACPI_DUMP_BUFFER (ObjDesc->Buffer.Pointer, ObjDesc->Buffer.Length); 420167802Sjkim break; 421167802Sjkim 422167802Sjkim case ACPI_EXD_PACKAGE: 423167802Sjkim 424167802Sjkim /* Dump the package contents */ 425167802Sjkim 426167802Sjkim AcpiOsPrintf ("\nPackage Contents:\n"); 427167802Sjkim AcpiExDumpPackageObj (ObjDesc, 0, 0); 428167802Sjkim break; 429167802Sjkim 430167802Sjkim case ACPI_EXD_FIELD: 431167802Sjkim 432167802Sjkim AcpiExDumpObject (ObjDesc, AcpiExDumpFieldCommon); 433167802Sjkim break; 434167802Sjkim 435167802Sjkim case ACPI_EXD_REFERENCE: 436167802Sjkim 437193267Sjkim AcpiExOutString ("Class Name", 438193267Sjkim ACPI_CAST_PTR (char, AcpiUtGetReferenceName (ObjDesc))); 439167802Sjkim AcpiExDumpReferenceObj (ObjDesc); 440167802Sjkim break; 441167802Sjkim 442167802Sjkim default: 443193267Sjkim 444193267Sjkim AcpiOsPrintf ("**** Invalid table opcode [%X] ****\n", 445193267Sjkim Info->Opcode); 446167802Sjkim return; 447167802Sjkim } 448167802Sjkim 449167802Sjkim Info++; 450167802Sjkim Count--; 451167802Sjkim } 452167802Sjkim} 453167802Sjkim 454167802Sjkim 455167802Sjkim/******************************************************************************* 456167802Sjkim * 45777424Smsmith * FUNCTION: AcpiExDumpOperand 45867754Smsmith * 459151937Sjkim * PARAMETERS: *ObjDesc - Pointer to entry to be dumped 460151937Sjkim * Depth - Current nesting depth 46167754Smsmith * 462138287Smarks * RETURN: None 46367754Smsmith * 46491116Smsmith * DESCRIPTION: Dump an operand object 46567754Smsmith * 466151937Sjkim ******************************************************************************/ 46767754Smsmith 46899679Siwasakivoid 46977424SmsmithAcpiExDumpOperand ( 470138287Smarks ACPI_OPERAND_OBJECT *ObjDesc, 471138287Smarks UINT32 Depth) 47267754Smsmith{ 47367754Smsmith UINT32 Length; 474138287Smarks UINT32 Index; 47567754Smsmith 47667754Smsmith 477167802Sjkim ACPI_FUNCTION_NAME (ExDumpOperand) 47877424Smsmith 47977424Smsmith 48099146Siwasaki if (!((ACPI_LV_EXEC & AcpiDbgLevel) && (_COMPONENT & AcpiDbgLayer))) 48187031Smsmith { 48299679Siwasaki return; 48387031Smsmith } 48487031Smsmith 48591116Smsmith if (!ObjDesc) 48667754Smsmith { 487151937Sjkim /* This could be a null element of a package */ 488151937Sjkim 489138287Smarks ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Null Object Descriptor\n")); 49099679Siwasaki return; 49167754Smsmith } 49267754Smsmith 49391116Smsmith if (ACPI_GET_DESCRIPTOR_TYPE (ObjDesc) == ACPI_DESC_TYPE_NAMED) 49467754Smsmith { 495151937Sjkim ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "%p Namespace Node: ", ObjDesc)); 49699146Siwasaki ACPI_DUMP_ENTRY (ObjDesc, ACPI_LV_EXEC); 49799679Siwasaki return; 49867754Smsmith } 49967754Smsmith 50099679Siwasaki if (ACPI_GET_DESCRIPTOR_TYPE (ObjDesc) != ACPI_DESC_TYPE_OPERAND) 50167754Smsmith { 502123315Snjl ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, 503138287Smarks "%p is not a node or operand object: [%s]\n", 504138287Smarks ObjDesc, AcpiUtGetDescriptorName (ObjDesc))); 50591116Smsmith ACPI_DUMP_BUFFER (ObjDesc, sizeof (ACPI_OPERAND_OBJECT)); 50699679Siwasaki return; 50767754Smsmith } 50867754Smsmith 509123315Snjl /* ObjDesc is a valid object */ 51067754Smsmith 511138287Smarks if (Depth > 0) 512138287Smarks { 513138287Smarks ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "%*s[%u] %p ", 514138287Smarks Depth, " ", Depth, ObjDesc)); 515138287Smarks } 516138287Smarks else 517138287Smarks { 518138287Smarks ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "%p ", ObjDesc)); 519138287Smarks } 52067754Smsmith 521151937Sjkim /* Decode object type */ 522138287Smarks 523193267Sjkim switch (ObjDesc->Common.Type) 52467754Smsmith { 525107325Siwasaki case ACPI_TYPE_LOCAL_REFERENCE: 52667754Smsmith 527193267Sjkim AcpiOsPrintf ("Reference: [%s] ", AcpiUtGetReferenceName (ObjDesc)); 528193267Sjkim 529193267Sjkim switch (ObjDesc->Reference.Class) 53067754Smsmith { 531193267Sjkim case ACPI_REFCLASS_DEBUG: 53267754Smsmith 533193267Sjkim AcpiOsPrintf ("\n"); 53467754Smsmith break; 53567754Smsmith 53667754Smsmith 537193267Sjkim case ACPI_REFCLASS_INDEX: 53867754Smsmith 539193267Sjkim AcpiOsPrintf ("%p\n", ObjDesc->Reference.Object); 54067754Smsmith break; 54167754Smsmith 54267754Smsmith 543193267Sjkim case ACPI_REFCLASS_TABLE: 544100966Siwasaki 545193267Sjkim AcpiOsPrintf ("Table Index %X\n", ObjDesc->Reference.Value); 546100966Siwasaki break; 547100966Siwasaki 548100966Siwasaki 549193267Sjkim case ACPI_REFCLASS_REFOF: 55067754Smsmith 551193267Sjkim AcpiOsPrintf ("%p [%s]\n", ObjDesc->Reference.Object, 552193267Sjkim AcpiUtGetTypeName (((ACPI_OPERAND_OBJECT *) 553193267Sjkim ObjDesc->Reference.Object)->Common.Type)); 55467754Smsmith break; 55567754Smsmith 55667754Smsmith 557193267Sjkim case ACPI_REFCLASS_NAME: 55867754Smsmith 559193267Sjkim AcpiOsPrintf ("- [%4.4s]\n", ObjDesc->Reference.Node->Name.Ascii); 56067754Smsmith break; 56167754Smsmith 56267754Smsmith 563193267Sjkim case ACPI_REFCLASS_ARG: 564193267Sjkim case ACPI_REFCLASS_LOCAL: 565100966Siwasaki 566193267Sjkim AcpiOsPrintf ("%X\n", ObjDesc->Reference.Value); 56767754Smsmith break; 56867754Smsmith 569100966Siwasaki 570193267Sjkim default: /* Unknown reference class */ 57167754Smsmith 572193267Sjkim AcpiOsPrintf ("%2.2X\n", ObjDesc->Reference.Class); 57367754Smsmith break; 57467754Smsmith } 57567754Smsmith break; 57667754Smsmith 57767754Smsmith 57867754Smsmith case ACPI_TYPE_BUFFER: 57967754Smsmith 580193267Sjkim AcpiOsPrintf ("Buffer length %.2X @ %p\n", 581138287Smarks ObjDesc->Buffer.Length, ObjDesc->Buffer.Pointer); 58267754Smsmith 58367754Smsmith /* Debug only -- dump the buffer contents */ 58467754Smsmith 58591116Smsmith if (ObjDesc->Buffer.Pointer) 58667754Smsmith { 587193267Sjkim Length = ObjDesc->Buffer.Length; 588193267Sjkim if (Length > 128) 58967754Smsmith { 590193267Sjkim Length = 128; 59167754Smsmith } 592193267Sjkim 593193267Sjkim AcpiOsPrintf ("Buffer Contents: (displaying length 0x%.2X)\n", 594193267Sjkim Length); 595193267Sjkim ACPI_DUMP_BUFFER (ObjDesc->Buffer.Pointer, Length); 59667754Smsmith } 59767754Smsmith break; 59867754Smsmith 59967754Smsmith 60071867Smsmith case ACPI_TYPE_INTEGER: 60167754Smsmith 60287031Smsmith AcpiOsPrintf ("Integer %8.8X%8.8X\n", 603138287Smarks ACPI_FORMAT_UINT64 (ObjDesc->Integer.Value)); 60467754Smsmith break; 60567754Smsmith 60667754Smsmith 60767754Smsmith case ACPI_TYPE_PACKAGE: 60867754Smsmith 609138287Smarks AcpiOsPrintf ("Package [Len %X] ElementArray %p\n", 610138287Smarks ObjDesc->Package.Count, ObjDesc->Package.Elements); 61167754Smsmith 61267754Smsmith /* 613138287Smarks * If elements exist, package element pointer is valid, 61467754Smsmith * and debug_level exceeds 1, dump package's elements. 61567754Smsmith */ 61691116Smsmith if (ObjDesc->Package.Count && 61791116Smsmith ObjDesc->Package.Elements && 61883174Smsmith AcpiDbgLevel > 1) 61967754Smsmith { 620138287Smarks for (Index = 0; Index < ObjDesc->Package.Count; Index++) 62167754Smsmith { 622138287Smarks AcpiExDumpOperand (ObjDesc->Package.Elements[Index], Depth+1); 62367754Smsmith } 62467754Smsmith } 62567754Smsmith break; 62667754Smsmith 62767754Smsmith 62867754Smsmith case ACPI_TYPE_REGION: 62967754Smsmith 63087031Smsmith AcpiOsPrintf ("Region %s (%X)", 63191116Smsmith AcpiUtGetRegionName (ObjDesc->Region.SpaceId), 63291116Smsmith ObjDesc->Region.SpaceId); 63367754Smsmith 63467754Smsmith /* 63567754Smsmith * If the address and length have not been evaluated, 63667754Smsmith * don't print them. 63767754Smsmith */ 63891116Smsmith if (!(ObjDesc->Region.Flags & AOPOBJ_DATA_VALID)) 63967754Smsmith { 64087031Smsmith AcpiOsPrintf ("\n"); 64167754Smsmith } 64267754Smsmith else 64367754Smsmith { 64487031Smsmith AcpiOsPrintf (" base %8.8X%8.8X Length %X\n", 645193267Sjkim ACPI_FORMAT_NATIVE_UINT (ObjDesc->Region.Address), 64691116Smsmith ObjDesc->Region.Length); 64767754Smsmith } 64867754Smsmith break; 64967754Smsmith 65067754Smsmith 65167754Smsmith case ACPI_TYPE_STRING: 65267754Smsmith 653107325Siwasaki AcpiOsPrintf ("String length %X @ %p ", 654151937Sjkim ObjDesc->String.Length, 655151937Sjkim ObjDesc->String.Pointer); 656151937Sjkim 657107325Siwasaki AcpiUtPrintString (ObjDesc->String.Pointer, ACPI_UINT8_MAX); 658107325Siwasaki AcpiOsPrintf ("\n"); 65967754Smsmith break; 66067754Smsmith 66167754Smsmith 662107325Siwasaki case ACPI_TYPE_LOCAL_BANK_FIELD: 66367754Smsmith 66487031Smsmith AcpiOsPrintf ("BankField\n"); 66567754Smsmith break; 66667754Smsmith 66767754Smsmith 668107325Siwasaki case ACPI_TYPE_LOCAL_REGION_FIELD: 66967754Smsmith 670193267Sjkim AcpiOsPrintf ("RegionField: Bits=%X AccWidth=%X Lock=%X Update=%X at " 671193267Sjkim "byte=%X bit=%X of below:\n", 672151937Sjkim ObjDesc->Field.BitLength, 673151937Sjkim ObjDesc->Field.AccessByteWidth, 67491116Smsmith ObjDesc->Field.FieldFlags & AML_FIELD_LOCK_RULE_MASK, 67591116Smsmith ObjDesc->Field.FieldFlags & AML_FIELD_UPDATE_RULE_MASK, 676151937Sjkim ObjDesc->Field.BaseByteOffset, 677151937Sjkim ObjDesc->Field.StartFieldBitOffset); 678151937Sjkim 679138287Smarks AcpiExDumpOperand (ObjDesc->Field.RegionObj, Depth+1); 68067754Smsmith break; 68167754Smsmith 68267754Smsmith 683107325Siwasaki case ACPI_TYPE_LOCAL_INDEX_FIELD: 68467754Smsmith 68587031Smsmith AcpiOsPrintf ("IndexField\n"); 68667754Smsmith break; 68767754Smsmith 68867754Smsmith 68977424Smsmith case ACPI_TYPE_BUFFER_FIELD: 69067754Smsmith 691193267Sjkim AcpiOsPrintf ("BufferField: %X bits at byte %X bit %X of\n", 692151937Sjkim ObjDesc->BufferField.BitLength, 693151937Sjkim ObjDesc->BufferField.BaseByteOffset, 69491116Smsmith ObjDesc->BufferField.StartFieldBitOffset); 69567754Smsmith 69691116Smsmith if (!ObjDesc->BufferField.BufferObj) 69767754Smsmith { 698151937Sjkim ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "*NULL*\n")); 69967754Smsmith } 700193267Sjkim else if ((ObjDesc->BufferField.BufferObj)->Common.Type != 701151937Sjkim ACPI_TYPE_BUFFER) 70267754Smsmith { 703151937Sjkim AcpiOsPrintf ("*not a Buffer*\n"); 70467754Smsmith } 70567754Smsmith else 70667754Smsmith { 707138287Smarks AcpiExDumpOperand (ObjDesc->BufferField.BufferObj, Depth+1); 70867754Smsmith } 70967754Smsmith break; 71067754Smsmith 71167754Smsmith 71267754Smsmith case ACPI_TYPE_EVENT: 71367754Smsmith 71487031Smsmith AcpiOsPrintf ("Event\n"); 71567754Smsmith break; 71667754Smsmith 71767754Smsmith 71867754Smsmith case ACPI_TYPE_METHOD: 71967754Smsmith 720151937Sjkim AcpiOsPrintf ("Method(%X) @ %p:%X\n", 72191116Smsmith ObjDesc->Method.ParamCount, 722151937Sjkim ObjDesc->Method.AmlStart, 723151937Sjkim ObjDesc->Method.AmlLength); 72467754Smsmith break; 72567754Smsmith 72667754Smsmith 72767754Smsmith case ACPI_TYPE_MUTEX: 72867754Smsmith 72987031Smsmith AcpiOsPrintf ("Mutex\n"); 73067754Smsmith break; 73167754Smsmith 73267754Smsmith 73367754Smsmith case ACPI_TYPE_DEVICE: 73467754Smsmith 73587031Smsmith AcpiOsPrintf ("Device\n"); 73667754Smsmith break; 73767754Smsmith 73867754Smsmith 73967754Smsmith case ACPI_TYPE_POWER: 74067754Smsmith 74187031Smsmith AcpiOsPrintf ("Power\n"); 74267754Smsmith break; 74367754Smsmith 74467754Smsmith 74567754Smsmith case ACPI_TYPE_PROCESSOR: 74667754Smsmith 74787031Smsmith AcpiOsPrintf ("Processor\n"); 74867754Smsmith break; 74967754Smsmith 75067754Smsmith 75167754Smsmith case ACPI_TYPE_THERMAL: 75267754Smsmith 75387031Smsmith AcpiOsPrintf ("Thermal\n"); 75467754Smsmith break; 75567754Smsmith 75667754Smsmith 75767754Smsmith default: 75899679Siwasaki /* Unknown Type */ 75967754Smsmith 760193267Sjkim AcpiOsPrintf ("Unknown Type %X\n", ObjDesc->Common.Type); 76167754Smsmith break; 76267754Smsmith } 76367754Smsmith 76499679Siwasaki return; 76567754Smsmith} 76667754Smsmith 76767754Smsmith 768151937Sjkim/******************************************************************************* 76967754Smsmith * 77077424Smsmith * FUNCTION: AcpiExDumpOperands 77167754Smsmith * 772193267Sjkim * PARAMETERS: Operands - A list of Operand objects 773193267Sjkim * OpcodeName - AML opcode name 774193267Sjkim * NumOperands - Operand count for this opcode 77567754Smsmith * 776193267Sjkim * DESCRIPTION: Dump the operands associated with the opcode 77767754Smsmith * 778151937Sjkim ******************************************************************************/ 77967754Smsmith 78067754Smsmithvoid 78177424SmsmithAcpiExDumpOperands ( 78267754Smsmith ACPI_OPERAND_OBJECT **Operands, 783193267Sjkim const char *OpcodeName, 784193267Sjkim UINT32 NumOperands) 78567754Smsmith{ 786167802Sjkim ACPI_FUNCTION_NAME (ExDumpOperands); 78782367Smsmith 78883174Smsmith 789193267Sjkim if (!OpcodeName) 79067754Smsmith { 791193267Sjkim OpcodeName = "UNKNOWN"; 79267754Smsmith } 79367754Smsmith 79499146Siwasaki ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, 795209746Sjkim "**** Start operand dump for opcode [%s], %u operands\n", 796193267Sjkim OpcodeName, NumOperands)); 79767754Smsmith 798193267Sjkim if (NumOperands == 0) 79977424Smsmith { 800193267Sjkim NumOperands = 1; 80177424Smsmith } 80267754Smsmith 803193267Sjkim /* Dump the individual operands */ 80467754Smsmith 805193267Sjkim while (NumOperands) 80667754Smsmith { 807193267Sjkim AcpiExDumpOperand (*Operands, 0); 808193267Sjkim Operands++; 809193267Sjkim NumOperands--; 81067754Smsmith } 81167754Smsmith 81299146Siwasaki ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, 813193267Sjkim "**** End operand dump for [%s]\n", OpcodeName)); 81467754Smsmith return; 81567754Smsmith} 81667754Smsmith 81767754Smsmith 818151937Sjkim/******************************************************************************* 81967754Smsmith * 820151937Sjkim * FUNCTION: AcpiExOut* functions 82187031Smsmith * 82287031Smsmith * PARAMETERS: Title - Descriptive text 82387031Smsmith * Value - Value to be displayed 82487031Smsmith * 82587031Smsmith * DESCRIPTION: Object dump output formatting functions. These functions 82687031Smsmith * reduce the number of format strings required and keeps them 82787031Smsmith * all in one place for easy modification. 82887031Smsmith * 829151937Sjkim ******************************************************************************/ 83087031Smsmith 831151937Sjkimstatic void 83287031SmsmithAcpiExOutString ( 83387031Smsmith char *Title, 83487031Smsmith char *Value) 83587031Smsmith{ 83687031Smsmith AcpiOsPrintf ("%20s : %s\n", Title, Value); 83787031Smsmith} 83887031Smsmith 839151937Sjkimstatic void 84087031SmsmithAcpiExOutPointer ( 84187031Smsmith char *Title, 84287031Smsmith void *Value) 84387031Smsmith{ 84487031Smsmith AcpiOsPrintf ("%20s : %p\n", Title, Value); 84587031Smsmith} 84687031Smsmith 84787031Smsmith 848151937Sjkim/******************************************************************************* 84987031Smsmith * 850167802Sjkim * FUNCTION: AcpiExDumpNamespaceNode 85167754Smsmith * 852167802Sjkim * PARAMETERS: Node - Descriptor to dump 853151937Sjkim * Flags - Force display if TRUE 85467754Smsmith * 85567754Smsmith * DESCRIPTION: Dumps the members of the given.Node 85667754Smsmith * 857151937Sjkim ******************************************************************************/ 85867754Smsmith 85967754Smsmithvoid 860167802SjkimAcpiExDumpNamespaceNode ( 86167754Smsmith ACPI_NAMESPACE_NODE *Node, 86267754Smsmith UINT32 Flags) 86367754Smsmith{ 86467754Smsmith 86591116Smsmith ACPI_FUNCTION_ENTRY (); 86683174Smsmith 86783174Smsmith 86867754Smsmith if (!Flags) 86967754Smsmith { 87082367Smsmith if (!((ACPI_LV_OBJECTS & AcpiDbgLevel) && (_COMPONENT & AcpiDbgLayer))) 87167754Smsmith { 87267754Smsmith return; 87367754Smsmith } 87467754Smsmith } 87567754Smsmith 876193267Sjkim AcpiOsPrintf ("%20s : %4.4s\n", "Name", AcpiUtGetNodeName (Node)); 877193267Sjkim AcpiExOutString ("Type", AcpiUtGetTypeName (Node->Type)); 878193267Sjkim AcpiExOutPointer ("Attached Object", AcpiNsGetAttachedObject (Node)); 879209746Sjkim AcpiExOutPointer ("Parent", Node->Parent); 880167802Sjkim 881167802Sjkim AcpiExDumpObject (ACPI_CAST_PTR (ACPI_OPERAND_OBJECT, Node), 882167802Sjkim AcpiExDumpNode); 88367754Smsmith} 88467754Smsmith 88567754Smsmith 886151937Sjkim/******************************************************************************* 88767754Smsmith * 888167802Sjkim * FUNCTION: AcpiExDumpReferenceObj 889151937Sjkim * 890151937Sjkim * PARAMETERS: Object - Descriptor to dump 891151937Sjkim * 892151937Sjkim * DESCRIPTION: Dumps a reference object 893151937Sjkim * 894151937Sjkim ******************************************************************************/ 895151937Sjkim 896151937Sjkimstatic void 897167802SjkimAcpiExDumpReferenceObj ( 898151937Sjkim ACPI_OPERAND_OBJECT *ObjDesc) 899151937Sjkim{ 900151937Sjkim ACPI_BUFFER RetBuf; 901151937Sjkim ACPI_STATUS Status; 902151937Sjkim 903151937Sjkim 904167802Sjkim RetBuf.Length = ACPI_ALLOCATE_LOCAL_BUFFER; 905167802Sjkim 906193267Sjkim if (ObjDesc->Reference.Class == ACPI_REFCLASS_NAME) 907151937Sjkim { 908193267Sjkim AcpiOsPrintf (" %p ", ObjDesc->Reference.Node); 909167802Sjkim 910151937Sjkim Status = AcpiNsHandleToPathname (ObjDesc->Reference.Node, &RetBuf); 911151937Sjkim if (ACPI_FAILURE (Status)) 912151937Sjkim { 913193267Sjkim AcpiOsPrintf (" Could not convert name to pathname\n"); 914151937Sjkim } 915151937Sjkim else 916151937Sjkim { 917151937Sjkim AcpiOsPrintf ("%s\n", (char *) RetBuf.Pointer); 918167802Sjkim ACPI_FREE (RetBuf.Pointer); 919151937Sjkim } 920151937Sjkim } 921151937Sjkim else if (ObjDesc->Reference.Object) 922151937Sjkim { 923193267Sjkim if (ACPI_GET_DESCRIPTOR_TYPE (ObjDesc) == ACPI_DESC_TYPE_OPERAND) 924193267Sjkim { 925193267Sjkim AcpiOsPrintf (" Target: %p", ObjDesc->Reference.Object); 926193267Sjkim if (ObjDesc->Reference.Class == ACPI_REFCLASS_TABLE) 927193267Sjkim { 928193267Sjkim AcpiOsPrintf (" Table Index: %X\n", ObjDesc->Reference.Value); 929193267Sjkim } 930193267Sjkim else 931193267Sjkim { 932193267Sjkim AcpiOsPrintf (" Target: %p [%s]\n", ObjDesc->Reference.Object, 933193267Sjkim AcpiUtGetTypeName (((ACPI_OPERAND_OBJECT *) 934193267Sjkim ObjDesc->Reference.Object)->Common.Type)); 935193267Sjkim } 936193267Sjkim } 937193267Sjkim else 938193267Sjkim { 939193267Sjkim AcpiOsPrintf (" Target: %p\n", ObjDesc->Reference.Object); 940193267Sjkim } 941151937Sjkim } 942151937Sjkim} 943151937Sjkim 944151937Sjkim 945151937Sjkim/******************************************************************************* 946151937Sjkim * 947167802Sjkim * FUNCTION: AcpiExDumpPackageObj 948151937Sjkim * 949167802Sjkim * PARAMETERS: ObjDesc - Descriptor to dump 950151937Sjkim * Level - Indentation Level 951151937Sjkim * Index - Package index for this object 952151937Sjkim * 953151937Sjkim * DESCRIPTION: Dumps the elements of the package 954151937Sjkim * 955151937Sjkim ******************************************************************************/ 956151937Sjkim 957151937Sjkimstatic void 958167802SjkimAcpiExDumpPackageObj ( 959151937Sjkim ACPI_OPERAND_OBJECT *ObjDesc, 960151937Sjkim UINT32 Level, 961151937Sjkim UINT32 Index) 962151937Sjkim{ 963151937Sjkim UINT32 i; 964151937Sjkim 965151937Sjkim 966151937Sjkim /* Indentation and index output */ 967151937Sjkim 968151937Sjkim if (Level > 0) 969151937Sjkim { 970151937Sjkim for (i = 0; i < Level; i++) 971151937Sjkim { 972151937Sjkim AcpiOsPrintf (" "); 973151937Sjkim } 974151937Sjkim 975151937Sjkim AcpiOsPrintf ("[%.2d] ", Index); 976151937Sjkim } 977151937Sjkim 978151937Sjkim AcpiOsPrintf ("%p ", ObjDesc); 979151937Sjkim 980151937Sjkim /* Null package elements are allowed */ 981151937Sjkim 982151937Sjkim if (!ObjDesc) 983151937Sjkim { 984151937Sjkim AcpiOsPrintf ("[Null Object]\n"); 985151937Sjkim return; 986151937Sjkim } 987151937Sjkim 988151937Sjkim /* Packages may only contain a few object types */ 989151937Sjkim 990193267Sjkim switch (ObjDesc->Common.Type) 991151937Sjkim { 992151937Sjkim case ACPI_TYPE_INTEGER: 993151937Sjkim 994151937Sjkim AcpiOsPrintf ("[Integer] = %8.8X%8.8X\n", 995193267Sjkim ACPI_FORMAT_UINT64 (ObjDesc->Integer.Value)); 996151937Sjkim break; 997151937Sjkim 998151937Sjkim 999151937Sjkim case ACPI_TYPE_STRING: 1000151937Sjkim 1001151937Sjkim AcpiOsPrintf ("[String] Value: "); 1002151937Sjkim for (i = 0; i < ObjDesc->String.Length; i++) 1003151937Sjkim { 1004151937Sjkim AcpiOsPrintf ("%c", ObjDesc->String.Pointer[i]); 1005151937Sjkim } 1006151937Sjkim AcpiOsPrintf ("\n"); 1007151937Sjkim break; 1008151937Sjkim 1009151937Sjkim 1010151937Sjkim case ACPI_TYPE_BUFFER: 1011151937Sjkim 1012151937Sjkim AcpiOsPrintf ("[Buffer] Length %.2X = ", ObjDesc->Buffer.Length); 1013151937Sjkim if (ObjDesc->Buffer.Length) 1014151937Sjkim { 1015167802Sjkim AcpiUtDumpBuffer (ACPI_CAST_PTR (UINT8, ObjDesc->Buffer.Pointer), 1016193267Sjkim ObjDesc->Buffer.Length, DB_DWORD_DISPLAY, _COMPONENT); 1017151937Sjkim } 1018151937Sjkim else 1019151937Sjkim { 1020151937Sjkim AcpiOsPrintf ("\n"); 1021151937Sjkim } 1022151937Sjkim break; 1023151937Sjkim 1024151937Sjkim 1025151937Sjkim case ACPI_TYPE_PACKAGE: 1026151937Sjkim 1027209746Sjkim AcpiOsPrintf ("[Package] Contains %u Elements:\n", 1028193267Sjkim ObjDesc->Package.Count); 1029151937Sjkim 1030151937Sjkim for (i = 0; i < ObjDesc->Package.Count; i++) 1031151937Sjkim { 1032167802Sjkim AcpiExDumpPackageObj (ObjDesc->Package.Elements[i], Level+1, i); 1033151937Sjkim } 1034151937Sjkim break; 1035151937Sjkim 1036151937Sjkim 1037151937Sjkim case ACPI_TYPE_LOCAL_REFERENCE: 1038151937Sjkim 1039193267Sjkim AcpiOsPrintf ("[Object Reference] Type [%s] %2.2X", 1040193267Sjkim AcpiUtGetReferenceName (ObjDesc), 1041193267Sjkim ObjDesc->Reference.Class); 1042167802Sjkim AcpiExDumpReferenceObj (ObjDesc); 1043151937Sjkim break; 1044151937Sjkim 1045151937Sjkim 1046151937Sjkim default: 1047151937Sjkim 1048193267Sjkim AcpiOsPrintf ("[Unknown Type] %X\n", ObjDesc->Common.Type); 1049151937Sjkim break; 1050151937Sjkim } 1051151937Sjkim} 1052151937Sjkim 1053151937Sjkim 1054151937Sjkim/******************************************************************************* 1055151937Sjkim * 105677424Smsmith * FUNCTION: AcpiExDumpObjectDescriptor 105767754Smsmith * 1058167802Sjkim * PARAMETERS: ObjDesc - Descriptor to dump 1059151937Sjkim * Flags - Force display if TRUE 106067754Smsmith * 106167754Smsmith * DESCRIPTION: Dumps the members of the object descriptor given. 106267754Smsmith * 1063151937Sjkim ******************************************************************************/ 106467754Smsmith 106567754Smsmithvoid 106677424SmsmithAcpiExDumpObjectDescriptor ( 106767754Smsmith ACPI_OPERAND_OBJECT *ObjDesc, 106867754Smsmith UINT32 Flags) 106967754Smsmith{ 1070167802Sjkim ACPI_FUNCTION_TRACE (ExDumpObjectDescriptor); 107182367Smsmith 107282367Smsmith 1073151937Sjkim if (!ObjDesc) 1074151937Sjkim { 1075151937Sjkim return_VOID; 1076151937Sjkim } 107767754Smsmith 107867754Smsmith if (!Flags) 107967754Smsmith { 108083174Smsmith if (!((ACPI_LV_OBJECTS & AcpiDbgLevel) && (_COMPONENT & AcpiDbgLayer))) 108167754Smsmith { 1082100966Siwasaki return_VOID; 108367754Smsmith } 108467754Smsmith } 108567754Smsmith 1086104470Siwasaki if (ACPI_GET_DESCRIPTOR_TYPE (ObjDesc) == ACPI_DESC_TYPE_NAMED) 1087104470Siwasaki { 1088167802Sjkim AcpiExDumpNamespaceNode ((ACPI_NAMESPACE_NODE *) ObjDesc, Flags); 1089167802Sjkim 1090138287Smarks AcpiOsPrintf ("\nAttached Object (%p):\n", 1091138287Smarks ((ACPI_NAMESPACE_NODE *) ObjDesc)->Object); 1092167802Sjkim 1093138287Smarks AcpiExDumpObjectDescriptor ( 1094138287Smarks ((ACPI_NAMESPACE_NODE *) ObjDesc)->Object, Flags); 1095138287Smarks return_VOID; 1096104470Siwasaki } 1097104470Siwasaki 109899679Siwasaki if (ACPI_GET_DESCRIPTOR_TYPE (ObjDesc) != ACPI_DESC_TYPE_OPERAND) 109967754Smsmith { 1100138287Smarks AcpiOsPrintf ( 1101138287Smarks "ExDumpObjectDescriptor: %p is not an ACPI operand object: [%s]\n", 1102138287Smarks ObjDesc, AcpiUtGetDescriptorName (ObjDesc)); 1103100966Siwasaki return_VOID; 110467754Smsmith } 110567754Smsmith 1106167802Sjkim if (ObjDesc->Common.Type > ACPI_TYPE_NS_NODE_MAX) 110767754Smsmith { 1108167802Sjkim return_VOID; 1109167802Sjkim } 111067754Smsmith 1111167802Sjkim /* Common Fields */ 111267754Smsmith 1113167802Sjkim AcpiExDumpObject (ObjDesc, AcpiExDumpCommon); 111467754Smsmith 1115167802Sjkim /* Object-specific fields */ 111667754Smsmith 1117167802Sjkim AcpiExDumpObject (ObjDesc, AcpiExDumpInfo[ObjDesc->Common.Type]); 111867754Smsmith return_VOID; 111967754Smsmith} 112067754Smsmith 112167754Smsmith#endif 112267754Smsmith 1123