167754Smsmith/****************************************************************************** 267754Smsmith * 377424Smsmith * Module Name: exdump - Interpreter debug output routines 467754Smsmith * 567754Smsmith *****************************************************************************/ 667754Smsmith 7217365Sjkim/* 8306536Sjkim * 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/acinterp.h> 47193341Sjkim#include <contrib/dev/acpica/include/amlcode.h> 48193341Sjkim#include <contrib/dev/acpica/include/acnamesp.h> 4967754Smsmith 50193267Sjkim 5177424Smsmith#define _COMPONENT ACPI_EXECUTER 5291116Smsmith ACPI_MODULE_NAME ("exdump") 5367754Smsmith 5467754Smsmith/* 5567754Smsmith * The following routines are used for debug output only 5667754Smsmith */ 57102550Siwasaki#if defined(ACPI_DEBUG_OUTPUT) || defined(ACPI_DEBUGGER) 5867754Smsmith 59151937Sjkim/* Local prototypes */ 60151937Sjkim 61151937Sjkimstatic void 62151937SjkimAcpiExOutString ( 63306536Sjkim const char *Title, 64306536Sjkim const char *Value); 65151937Sjkim 66151937Sjkimstatic void 67151937SjkimAcpiExOutPointer ( 68306536Sjkim const char *Title, 69306536Sjkim const void *Value); 70151937Sjkim 71151937Sjkimstatic void 72167802SjkimAcpiExDumpObject ( 73167802Sjkim ACPI_OPERAND_OBJECT *ObjDesc, 74167802Sjkim ACPI_EXDUMP_INFO *Info); 75151937Sjkim 76151937Sjkimstatic void 77167802SjkimAcpiExDumpReferenceObj ( 78151937Sjkim ACPI_OPERAND_OBJECT *ObjDesc); 79151937Sjkim 80151937Sjkimstatic void 81167802SjkimAcpiExDumpPackageObj ( 82151937Sjkim ACPI_OPERAND_OBJECT *ObjDesc, 83151937Sjkim UINT32 Level, 84151937Sjkim UINT32 Index); 85151937Sjkim 86151937Sjkim 87151937Sjkim/******************************************************************************* 8867754Smsmith * 89167802Sjkim * Object Descriptor info tables 90167802Sjkim * 91167802Sjkim * Note: The first table entry must be an INIT opcode and must contain 92167802Sjkim * the table length (number of table entries) 93167802Sjkim * 94167802Sjkim ******************************************************************************/ 95167802Sjkim 96167802Sjkimstatic ACPI_EXDUMP_INFO AcpiExDumpInteger[2] = 97167802Sjkim{ 98167802Sjkim {ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE (AcpiExDumpInteger), NULL}, 99167802Sjkim {ACPI_EXD_UINT64, ACPI_EXD_OFFSET (Integer.Value), "Value"} 100167802Sjkim}; 101167802Sjkim 102167802Sjkimstatic ACPI_EXDUMP_INFO AcpiExDumpString[4] = 103167802Sjkim{ 104167802Sjkim {ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE (AcpiExDumpString), NULL}, 105167802Sjkim {ACPI_EXD_UINT32, ACPI_EXD_OFFSET (String.Length), "Length"}, 106167802Sjkim {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (String.Pointer), "Pointer"}, 107167802Sjkim {ACPI_EXD_STRING, 0, NULL} 108167802Sjkim}; 109167802Sjkim 110167802Sjkimstatic ACPI_EXDUMP_INFO AcpiExDumpBuffer[5] = 111167802Sjkim{ 112167802Sjkim {ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE (AcpiExDumpBuffer), NULL}, 113167802Sjkim {ACPI_EXD_UINT32, ACPI_EXD_OFFSET (Buffer.Length), "Length"}, 114167802Sjkim {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (Buffer.Pointer), "Pointer"}, 115281075Sdim {ACPI_EXD_NODE, ACPI_EXD_OFFSET (Buffer.Node), "Parent Node"}, 116167802Sjkim {ACPI_EXD_BUFFER, 0, NULL} 117167802Sjkim}; 118167802Sjkim 119281075Sdimstatic ACPI_EXDUMP_INFO AcpiExDumpPackage[6] = 120167802Sjkim{ 121167802Sjkim {ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE (AcpiExDumpPackage), NULL}, 122281075Sdim {ACPI_EXD_NODE, ACPI_EXD_OFFSET (Package.Node), "Parent Node"}, 123167802Sjkim {ACPI_EXD_UINT8, ACPI_EXD_OFFSET (Package.Flags), "Flags"}, 124167802Sjkim {ACPI_EXD_UINT32, ACPI_EXD_OFFSET (Package.Count), "Elements"}, 125167802Sjkim {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (Package.Elements), "Element List"}, 126167802Sjkim {ACPI_EXD_PACKAGE, 0, NULL} 127167802Sjkim}; 128167802Sjkim 129167802Sjkimstatic ACPI_EXDUMP_INFO AcpiExDumpDevice[4] = 130167802Sjkim{ 131167802Sjkim {ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE (AcpiExDumpDevice), NULL}, 132234623Sjkim {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (Device.NotifyList[0]), "System Notify"}, 133281075Sdim {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (Device.NotifyList[1]), "Device Notify"}, 134281075Sdim {ACPI_EXD_HDLR_LIST,ACPI_EXD_OFFSET (Device.Handler), "Handler"} 135167802Sjkim}; 136167802Sjkim 137167802Sjkimstatic ACPI_EXDUMP_INFO AcpiExDumpEvent[2] = 138167802Sjkim{ 139167802Sjkim {ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE (AcpiExDumpEvent), NULL}, 140167802Sjkim {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (Event.OsSemaphore), "OsSemaphore"} 141167802Sjkim}; 142167802Sjkim 143193267Sjkimstatic ACPI_EXDUMP_INFO AcpiExDumpMethod[9] = 144167802Sjkim{ 145167802Sjkim {ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE (AcpiExDumpMethod), NULL}, 146217365Sjkim {ACPI_EXD_UINT8, ACPI_EXD_OFFSET (Method.InfoFlags), "Info Flags"}, 147193267Sjkim {ACPI_EXD_UINT8, ACPI_EXD_OFFSET (Method.ParamCount), "Parameter Count"}, 148167802Sjkim {ACPI_EXD_UINT8, ACPI_EXD_OFFSET (Method.SyncLevel), "Sync Level"}, 149167802Sjkim {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (Method.Mutex), "Mutex"}, 150167802Sjkim {ACPI_EXD_UINT8, ACPI_EXD_OFFSET (Method.OwnerId), "Owner Id"}, 151167802Sjkim {ACPI_EXD_UINT8, ACPI_EXD_OFFSET (Method.ThreadCount), "Thread Count"}, 152167802Sjkim {ACPI_EXD_UINT32, ACPI_EXD_OFFSET (Method.AmlLength), "Aml Length"}, 153167802Sjkim {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (Method.AmlStart), "Aml Start"} 154167802Sjkim}; 155167802Sjkim 156281075Sdimstatic ACPI_EXDUMP_INFO AcpiExDumpMutex[6] = 157167802Sjkim{ 158167802Sjkim {ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE (AcpiExDumpMutex), NULL}, 159167802Sjkim {ACPI_EXD_UINT8, ACPI_EXD_OFFSET (Mutex.SyncLevel), "Sync Level"}, 160281075Sdim {ACPI_EXD_UINT8, ACPI_EXD_OFFSET (Mutex.OriginalSyncLevel), "Original 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 166281075Sdimstatic ACPI_EXDUMP_INFO AcpiExDumpRegion[8] = 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"}, 171281075Sdim {ACPI_EXD_NODE, ACPI_EXD_OFFSET (Region.Node), "Parent Node"}, 172167802Sjkim {ACPI_EXD_ADDRESS, ACPI_EXD_OFFSET (Region.Address), "Address"}, 173167802Sjkim {ACPI_EXD_UINT32, ACPI_EXD_OFFSET (Region.Length), "Length"}, 174281075Sdim {ACPI_EXD_HDLR_LIST,ACPI_EXD_OFFSET (Region.Handler), "Handler"}, 175167802Sjkim {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (Region.Next), "Next"} 176167802Sjkim}; 177167802Sjkim 178281075Sdimstatic ACPI_EXDUMP_INFO AcpiExDumpPower[6] = 179167802Sjkim{ 180167802Sjkim {ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE (AcpiExDumpPower), NULL}, 181167802Sjkim {ACPI_EXD_UINT32, ACPI_EXD_OFFSET (PowerResource.SystemLevel), "System Level"}, 182167802Sjkim {ACPI_EXD_UINT32, ACPI_EXD_OFFSET (PowerResource.ResourceOrder), "Resource Order"}, 183234623Sjkim {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (PowerResource.NotifyList[0]), "System Notify"}, 184281075Sdim {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (PowerResource.NotifyList[1]), "Device Notify"}, 185281075Sdim {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (PowerResource.Handler), "Handler"} 186167802Sjkim}; 187167802Sjkim 188167802Sjkimstatic ACPI_EXDUMP_INFO AcpiExDumpProcessor[7] = 189167802Sjkim{ 190167802Sjkim {ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE (AcpiExDumpProcessor), NULL}, 191167802Sjkim {ACPI_EXD_UINT8, ACPI_EXD_OFFSET (Processor.ProcId), "Processor ID"}, 192167802Sjkim {ACPI_EXD_UINT8 , ACPI_EXD_OFFSET (Processor.Length), "Length"}, 193167802Sjkim {ACPI_EXD_ADDRESS, ACPI_EXD_OFFSET (Processor.Address), "Address"}, 194234623Sjkim {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (Processor.NotifyList[0]), "System Notify"}, 195234623Sjkim {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (Processor.NotifyList[1]), "Device Notify"}, 196167802Sjkim {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (Processor.Handler), "Handler"} 197167802Sjkim}; 198167802Sjkim 199167802Sjkimstatic ACPI_EXDUMP_INFO AcpiExDumpThermal[4] = 200167802Sjkim{ 201167802Sjkim {ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE (AcpiExDumpThermal), NULL}, 202234623Sjkim {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (ThermalZone.NotifyList[0]), "System Notify"}, 203234623Sjkim {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (ThermalZone.NotifyList[1]), "Device Notify"}, 204167802Sjkim {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (ThermalZone.Handler), "Handler"} 205167802Sjkim}; 206167802Sjkim 207167802Sjkimstatic ACPI_EXDUMP_INFO AcpiExDumpBufferField[3] = 208167802Sjkim{ 209167802Sjkim {ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE (AcpiExDumpBufferField), NULL}, 210167802Sjkim {ACPI_EXD_FIELD, 0, NULL}, 211167802Sjkim {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (BufferField.BufferObj), "Buffer Object"} 212167802Sjkim}; 213167802Sjkim 214228110Sjkimstatic ACPI_EXDUMP_INFO AcpiExDumpRegionField[5] = 215167802Sjkim{ 216167802Sjkim {ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE (AcpiExDumpRegionField), NULL}, 217167802Sjkim {ACPI_EXD_FIELD, 0, NULL}, 218228110Sjkim {ACPI_EXD_UINT8, ACPI_EXD_OFFSET (Field.AccessLength), "AccessLength"}, 219228110Sjkim {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (Field.RegionObj), "Region Object"}, 220228110Sjkim {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (Field.ResourceBuffer), "ResourceBuffer"} 221167802Sjkim}; 222167802Sjkim 223167802Sjkimstatic ACPI_EXDUMP_INFO AcpiExDumpBankField[5] = 224167802Sjkim{ 225167802Sjkim {ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE (AcpiExDumpBankField), NULL}, 226167802Sjkim {ACPI_EXD_FIELD, 0, NULL}, 227167802Sjkim {ACPI_EXD_UINT32, ACPI_EXD_OFFSET (BankField.Value), "Value"}, 228167802Sjkim {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (BankField.RegionObj), "Region Object"}, 229167802Sjkim {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (BankField.BankObj), "Bank Object"} 230167802Sjkim}; 231167802Sjkim 232167802Sjkimstatic ACPI_EXDUMP_INFO AcpiExDumpIndexField[5] = 233167802Sjkim{ 234167802Sjkim {ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE (AcpiExDumpBankField), NULL}, 235167802Sjkim {ACPI_EXD_FIELD, 0, NULL}, 236167802Sjkim {ACPI_EXD_UINT32, ACPI_EXD_OFFSET (IndexField.Value), "Value"}, 237167802Sjkim {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (IndexField.IndexObj), "Index Object"}, 238167802Sjkim {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (IndexField.DataObj), "Data Object"} 239167802Sjkim}; 240167802Sjkim 241306536Sjkimstatic ACPI_EXDUMP_INFO AcpiExDumpReference[9] = 242167802Sjkim{ 243167802Sjkim {ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE (AcpiExDumpReference), NULL}, 244193267Sjkim {ACPI_EXD_UINT8, ACPI_EXD_OFFSET (Reference.Class), "Class"}, 245167802Sjkim {ACPI_EXD_UINT8, ACPI_EXD_OFFSET (Reference.TargetType), "Target Type"}, 246193267Sjkim {ACPI_EXD_UINT32, ACPI_EXD_OFFSET (Reference.Value), "Value"}, 247167802Sjkim {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (Reference.Object), "Object Desc"}, 248281075Sdim {ACPI_EXD_NODE, ACPI_EXD_OFFSET (Reference.Node), "Node"}, 249167802Sjkim {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (Reference.Where), "Where"}, 250306536Sjkim {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (Reference.IndexPointer), "Index Pointer"}, 251167802Sjkim {ACPI_EXD_REFERENCE,0, NULL} 252167802Sjkim}; 253167802Sjkim 254167802Sjkimstatic ACPI_EXDUMP_INFO AcpiExDumpAddressHandler[6] = 255167802Sjkim{ 256167802Sjkim {ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE (AcpiExDumpAddressHandler), NULL}, 257167802Sjkim {ACPI_EXD_UINT8, ACPI_EXD_OFFSET (AddressSpace.SpaceId), "Space Id"}, 258281075Sdim {ACPI_EXD_HDLR_LIST,ACPI_EXD_OFFSET (AddressSpace.Next), "Next"}, 259281075Sdim {ACPI_EXD_RGN_LIST, ACPI_EXD_OFFSET (AddressSpace.RegionList), "Region List"}, 260281075Sdim {ACPI_EXD_NODE, ACPI_EXD_OFFSET (AddressSpace.Node), "Node"}, 261167802Sjkim {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (AddressSpace.Context), "Context"} 262167802Sjkim}; 263167802Sjkim 264234623Sjkimstatic ACPI_EXDUMP_INFO AcpiExDumpNotify[7] = 265167802Sjkim{ 266167802Sjkim {ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE (AcpiExDumpNotify), NULL}, 267281075Sdim {ACPI_EXD_NODE, ACPI_EXD_OFFSET (Notify.Node), "Node"}, 268234623Sjkim {ACPI_EXD_UINT32, ACPI_EXD_OFFSET (Notify.HandlerType), "Handler Type"}, 269234623Sjkim {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (Notify.Handler), "Handler"}, 270234623Sjkim {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (Notify.Context), "Context"}, 271234623Sjkim {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (Notify.Next[0]), "Next System Notify"}, 272234623Sjkim {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (Notify.Next[1]), "Next Device Notify"} 273167802Sjkim}; 274167802Sjkim 275281075Sdimstatic ACPI_EXDUMP_INFO AcpiExDumpExtra[6] = 276281075Sdim{ 277281075Sdim {ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE (AcpiExDumpExtra), NULL}, 278281075Sdim {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (Extra.Method_REG), "_REG Method"}, 279281075Sdim {ACPI_EXD_NODE, ACPI_EXD_OFFSET (Extra.ScopeNode), "Scope Node"}, 280281075Sdim {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (Extra.RegionContext), "Region Context"}, 281281075Sdim {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (Extra.AmlStart), "Aml Start"}, 282281075Sdim {ACPI_EXD_UINT32, ACPI_EXD_OFFSET (Extra.AmlLength), "Aml Length"} 283281075Sdim}; 284167802Sjkim 285281075Sdimstatic ACPI_EXDUMP_INFO AcpiExDumpData[3] = 286281075Sdim{ 287281075Sdim {ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE (AcpiExDumpData), NULL}, 288281075Sdim {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (Data.Handler), "Handler"}, 289281075Sdim {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (Data.Pointer), "Raw Data"} 290281075Sdim}; 291281075Sdim 292167802Sjkim/* Miscellaneous tables */ 293167802Sjkim 294281075Sdimstatic ACPI_EXDUMP_INFO AcpiExDumpCommon[5] = 295167802Sjkim{ 296167802Sjkim {ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE (AcpiExDumpCommon), NULL}, 297167802Sjkim {ACPI_EXD_TYPE , 0, NULL}, 298167802Sjkim {ACPI_EXD_UINT16, ACPI_EXD_OFFSET (Common.ReferenceCount), "Reference Count"}, 299281075Sdim {ACPI_EXD_UINT8, ACPI_EXD_OFFSET (Common.Flags), "Flags"}, 300281075Sdim {ACPI_EXD_LIST, ACPI_EXD_OFFSET (Common.NextObject), "Object List"} 301167802Sjkim}; 302167802Sjkim 303167802Sjkimstatic ACPI_EXDUMP_INFO AcpiExDumpFieldCommon[7] = 304167802Sjkim{ 305167802Sjkim {ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE (AcpiExDumpFieldCommon), NULL}, 306167802Sjkim {ACPI_EXD_UINT8, ACPI_EXD_OFFSET (CommonField.FieldFlags), "Field Flags"}, 307167802Sjkim {ACPI_EXD_UINT8, ACPI_EXD_OFFSET (CommonField.AccessByteWidth), "Access Byte Width"}, 308167802Sjkim {ACPI_EXD_UINT32, ACPI_EXD_OFFSET (CommonField.BitLength), "Bit Length"}, 309167802Sjkim {ACPI_EXD_UINT8, ACPI_EXD_OFFSET (CommonField.StartFieldBitOffset),"Field Bit Offset"}, 310167802Sjkim {ACPI_EXD_UINT32, ACPI_EXD_OFFSET (CommonField.BaseByteOffset), "Base Byte Offset"}, 311281075Sdim {ACPI_EXD_NODE, ACPI_EXD_OFFSET (CommonField.Node), "Parent Node"} 312167802Sjkim}; 313167802Sjkim 314281075Sdimstatic ACPI_EXDUMP_INFO AcpiExDumpNode[7] = 315167802Sjkim{ 316167802Sjkim {ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE (AcpiExDumpNode), NULL}, 317167802Sjkim {ACPI_EXD_UINT8, ACPI_EXD_NSOFFSET (Flags), "Flags"}, 318167802Sjkim {ACPI_EXD_UINT8, ACPI_EXD_NSOFFSET (OwnerId), "Owner Id"}, 319281075Sdim {ACPI_EXD_LIST, ACPI_EXD_NSOFFSET (Object), "Object List"}, 320281075Sdim {ACPI_EXD_NODE, ACPI_EXD_NSOFFSET (Parent), "Parent"}, 321281075Sdim {ACPI_EXD_NODE, ACPI_EXD_NSOFFSET (Child), "Child"}, 322281075Sdim {ACPI_EXD_NODE, ACPI_EXD_NSOFFSET (Peer), "Peer"} 323167802Sjkim}; 324167802Sjkim 325167802Sjkim 326167802Sjkim/* Dispatch table, indexed by object type */ 327167802Sjkim 328167802Sjkimstatic ACPI_EXDUMP_INFO *AcpiExDumpInfo[] = 329167802Sjkim{ 330167802Sjkim NULL, 331167802Sjkim AcpiExDumpInteger, 332167802Sjkim AcpiExDumpString, 333167802Sjkim AcpiExDumpBuffer, 334167802Sjkim AcpiExDumpPackage, 335167802Sjkim NULL, 336167802Sjkim AcpiExDumpDevice, 337167802Sjkim AcpiExDumpEvent, 338167802Sjkim AcpiExDumpMethod, 339167802Sjkim AcpiExDumpMutex, 340167802Sjkim AcpiExDumpRegion, 341167802Sjkim AcpiExDumpPower, 342167802Sjkim AcpiExDumpProcessor, 343167802Sjkim AcpiExDumpThermal, 344167802Sjkim AcpiExDumpBufferField, 345167802Sjkim NULL, 346167802Sjkim NULL, 347167802Sjkim AcpiExDumpRegionField, 348167802Sjkim AcpiExDumpBankField, 349167802Sjkim AcpiExDumpIndexField, 350167802Sjkim AcpiExDumpReference, 351167802Sjkim NULL, 352167802Sjkim NULL, 353167802Sjkim AcpiExDumpNotify, 354167802Sjkim AcpiExDumpAddressHandler, 355167802Sjkim NULL, 356167802Sjkim NULL, 357281075Sdim NULL, 358281075Sdim AcpiExDumpExtra, 359281075Sdim AcpiExDumpData 360167802Sjkim}; 361167802Sjkim 362167802Sjkim 363167802Sjkim/******************************************************************************* 364167802Sjkim * 365167802Sjkim * FUNCTION: AcpiExDumpObject 366167802Sjkim * 367167802Sjkim * PARAMETERS: ObjDesc - Descriptor to dump 368167802Sjkim * Info - Info table corresponding to this object 369167802Sjkim * type 370167802Sjkim * 371167802Sjkim * RETURN: None 372167802Sjkim * 373167802Sjkim * DESCRIPTION: Walk the info table for this object 374167802Sjkim * 375167802Sjkim ******************************************************************************/ 376167802Sjkim 377167802Sjkimstatic void 378167802SjkimAcpiExDumpObject ( 379167802Sjkim ACPI_OPERAND_OBJECT *ObjDesc, 380167802Sjkim ACPI_EXDUMP_INFO *Info) 381167802Sjkim{ 382167802Sjkim UINT8 *Target; 383306536Sjkim const char *Name; 384167802Sjkim UINT8 Count; 385281075Sdim ACPI_OPERAND_OBJECT *Start; 386281075Sdim ACPI_OPERAND_OBJECT *Data = NULL; 387281075Sdim ACPI_OPERAND_OBJECT *Next; 388281075Sdim ACPI_NAMESPACE_NODE *Node; 389167802Sjkim 390167802Sjkim 391167802Sjkim if (!Info) 392167802Sjkim { 393167802Sjkim AcpiOsPrintf ( 394167802Sjkim "ExDumpObject: Display not implemented for object type %s\n", 395167802Sjkim AcpiUtGetObjectTypeName (ObjDesc)); 396167802Sjkim return; 397167802Sjkim } 398167802Sjkim 399167802Sjkim /* First table entry must contain the table length (# of table entries) */ 400167802Sjkim 401167802Sjkim Count = Info->Offset; 402167802Sjkim 403167802Sjkim while (Count) 404167802Sjkim { 405167802Sjkim Target = ACPI_ADD_PTR (UINT8, ObjDesc, Info->Offset); 406167802Sjkim Name = Info->Name; 407167802Sjkim 408167802Sjkim switch (Info->Opcode) 409167802Sjkim { 410167802Sjkim case ACPI_EXD_INIT: 411250838Sjkim 412167802Sjkim break; 413167802Sjkim 414167802Sjkim case ACPI_EXD_TYPE: 415193267Sjkim 416281075Sdim AcpiOsPrintf ("%20s : %2.2X [%s]\n", "Type", 417281075Sdim ObjDesc->Common.Type, AcpiUtGetObjectTypeName (ObjDesc)); 418167802Sjkim break; 419167802Sjkim 420167802Sjkim case ACPI_EXD_UINT8: 421167802Sjkim 422167802Sjkim AcpiOsPrintf ("%20s : %2.2X\n", Name, *Target); 423167802Sjkim break; 424167802Sjkim 425167802Sjkim case ACPI_EXD_UINT16: 426167802Sjkim 427167802Sjkim AcpiOsPrintf ("%20s : %4.4X\n", Name, ACPI_GET16 (Target)); 428167802Sjkim break; 429167802Sjkim 430167802Sjkim case ACPI_EXD_UINT32: 431167802Sjkim 432167802Sjkim AcpiOsPrintf ("%20s : %8.8X\n", Name, ACPI_GET32 (Target)); 433167802Sjkim break; 434167802Sjkim 435167802Sjkim case ACPI_EXD_UINT64: 436167802Sjkim 437167802Sjkim AcpiOsPrintf ("%20s : %8.8X%8.8X\n", "Value", 438193267Sjkim ACPI_FORMAT_UINT64 (ACPI_GET64 (Target))); 439167802Sjkim break; 440167802Sjkim 441167802Sjkim case ACPI_EXD_POINTER: 442167802Sjkim case ACPI_EXD_ADDRESS: 443167802Sjkim 444167802Sjkim AcpiExOutPointer (Name, *ACPI_CAST_PTR (void *, Target)); 445167802Sjkim break; 446167802Sjkim 447167802Sjkim case ACPI_EXD_STRING: 448167802Sjkim 449167802Sjkim AcpiUtPrintString (ObjDesc->String.Pointer, ACPI_UINT8_MAX); 450167802Sjkim AcpiOsPrintf ("\n"); 451167802Sjkim break; 452167802Sjkim 453167802Sjkim case ACPI_EXD_BUFFER: 454167802Sjkim 455306536Sjkim ACPI_DUMP_BUFFER ( 456306536Sjkim ObjDesc->Buffer.Pointer, ObjDesc->Buffer.Length); 457167802Sjkim break; 458167802Sjkim 459167802Sjkim case ACPI_EXD_PACKAGE: 460167802Sjkim 461167802Sjkim /* Dump the package contents */ 462167802Sjkim 463167802Sjkim AcpiOsPrintf ("\nPackage Contents:\n"); 464167802Sjkim AcpiExDumpPackageObj (ObjDesc, 0, 0); 465167802Sjkim break; 466167802Sjkim 467167802Sjkim case ACPI_EXD_FIELD: 468167802Sjkim 469167802Sjkim AcpiExDumpObject (ObjDesc, AcpiExDumpFieldCommon); 470167802Sjkim break; 471167802Sjkim 472167802Sjkim case ACPI_EXD_REFERENCE: 473167802Sjkim 474306536Sjkim AcpiExOutString ("Class Name", AcpiUtGetReferenceName (ObjDesc)); 475167802Sjkim AcpiExDumpReferenceObj (ObjDesc); 476167802Sjkim break; 477167802Sjkim 478281075Sdim case ACPI_EXD_LIST: 479281075Sdim 480281075Sdim Start = *ACPI_CAST_PTR (void *, Target); 481281075Sdim Next = Start; 482281075Sdim 483281075Sdim AcpiOsPrintf ("%20s : %p", Name, Next); 484281075Sdim if (Next) 485281075Sdim { 486281075Sdim AcpiOsPrintf ("(%s %2.2X)", 487281075Sdim AcpiUtGetObjectTypeName (Next), Next->Common.Type); 488281075Sdim 489281075Sdim while (Next->Common.NextObject) 490281075Sdim { 491281075Sdim if ((Next->Common.Type == ACPI_TYPE_LOCAL_DATA) && 492281075Sdim !Data) 493281075Sdim { 494281075Sdim Data = Next; 495281075Sdim } 496281075Sdim 497281075Sdim Next = Next->Common.NextObject; 498281075Sdim AcpiOsPrintf ("->%p(%s %2.2X)", Next, 499281075Sdim AcpiUtGetObjectTypeName (Next), Next->Common.Type); 500281075Sdim 501281075Sdim if ((Next == Start) || (Next == Data)) 502281075Sdim { 503306536Sjkim AcpiOsPrintf ( 504306536Sjkim "\n**** Error: Object list appears to be circular linked"); 505281075Sdim break; 506281075Sdim } 507281075Sdim } 508281075Sdim } 509281075Sdim 510281075Sdim AcpiOsPrintf ("\n"); 511281075Sdim break; 512281075Sdim 513281075Sdim case ACPI_EXD_HDLR_LIST: 514281075Sdim 515281075Sdim Start = *ACPI_CAST_PTR (void *, Target); 516281075Sdim Next = Start; 517281075Sdim 518281075Sdim AcpiOsPrintf ("%20s : %p", Name, Next); 519281075Sdim if (Next) 520281075Sdim { 521281075Sdim AcpiOsPrintf ("(%s %2.2X)", 522306536Sjkim AcpiUtGetObjectTypeName (Next), 523306536Sjkim Next->AddressSpace.SpaceId); 524281075Sdim 525281075Sdim while (Next->AddressSpace.Next) 526281075Sdim { 527281075Sdim if ((Next->Common.Type == ACPI_TYPE_LOCAL_DATA) && 528281075Sdim !Data) 529281075Sdim { 530281075Sdim Data = Next; 531281075Sdim } 532281075Sdim 533281075Sdim Next = Next->AddressSpace.Next; 534281075Sdim AcpiOsPrintf ("->%p(%s %2.2X)", Next, 535306536Sjkim AcpiUtGetObjectTypeName (Next), 536306536Sjkim Next->AddressSpace.SpaceId); 537281075Sdim 538281075Sdim if ((Next == Start) || (Next == Data)) 539281075Sdim { 540306536Sjkim AcpiOsPrintf ( 541306536Sjkim "\n**** Error: Handler list appears to be circular linked"); 542281075Sdim break; 543281075Sdim } 544281075Sdim } 545281075Sdim } 546281075Sdim 547281075Sdim AcpiOsPrintf ("\n"); 548281075Sdim break; 549281075Sdim 550281075Sdim case ACPI_EXD_RGN_LIST: 551281075Sdim 552281075Sdim Start = *ACPI_CAST_PTR (void *, Target); 553281075Sdim Next = Start; 554281075Sdim 555281075Sdim AcpiOsPrintf ("%20s : %p", Name, Next); 556281075Sdim if (Next) 557281075Sdim { 558281075Sdim AcpiOsPrintf ("(%s %2.2X)", 559281075Sdim AcpiUtGetObjectTypeName (Next), Next->Common.Type); 560281075Sdim 561281075Sdim while (Next->Region.Next) 562281075Sdim { 563281075Sdim if ((Next->Common.Type == ACPI_TYPE_LOCAL_DATA) && 564281075Sdim !Data) 565281075Sdim { 566281075Sdim Data = Next; 567281075Sdim } 568281075Sdim 569281075Sdim Next = Next->Region.Next; 570281075Sdim AcpiOsPrintf ("->%p(%s %2.2X)", Next, 571281075Sdim AcpiUtGetObjectTypeName (Next), Next->Common.Type); 572281075Sdim 573281075Sdim if ((Next == Start) || (Next == Data)) 574281075Sdim { 575306536Sjkim AcpiOsPrintf ( 576306536Sjkim "\n**** Error: Region list appears to be circular linked"); 577281075Sdim break; 578281075Sdim } 579281075Sdim } 580281075Sdim } 581281075Sdim 582281075Sdim AcpiOsPrintf ("\n"); 583281075Sdim break; 584281075Sdim 585281075Sdim case ACPI_EXD_NODE: 586281075Sdim 587281075Sdim Node = *ACPI_CAST_PTR (ACPI_NAMESPACE_NODE *, Target); 588281075Sdim 589281075Sdim AcpiOsPrintf ("%20s : %p", Name, Node); 590281075Sdim if (Node) 591281075Sdim { 592281075Sdim AcpiOsPrintf (" [%4.4s]", Node->Name.Ascii); 593281075Sdim } 594281075Sdim AcpiOsPrintf ("\n"); 595281075Sdim break; 596281075Sdim 597167802Sjkim default: 598193267Sjkim 599193267Sjkim AcpiOsPrintf ("**** Invalid table opcode [%X] ****\n", 600193267Sjkim Info->Opcode); 601167802Sjkim return; 602167802Sjkim } 603167802Sjkim 604167802Sjkim Info++; 605167802Sjkim Count--; 606167802Sjkim } 607167802Sjkim} 608167802Sjkim 609167802Sjkim 610167802Sjkim/******************************************************************************* 611167802Sjkim * 61277424Smsmith * FUNCTION: AcpiExDumpOperand 61367754Smsmith * 614151937Sjkim * PARAMETERS: *ObjDesc - Pointer to entry to be dumped 615151937Sjkim * Depth - Current nesting depth 61667754Smsmith * 617138287Smarks * RETURN: None 61867754Smsmith * 61991116Smsmith * DESCRIPTION: Dump an operand object 62067754Smsmith * 621151937Sjkim ******************************************************************************/ 62267754Smsmith 62399679Siwasakivoid 62477424SmsmithAcpiExDumpOperand ( 625138287Smarks ACPI_OPERAND_OBJECT *ObjDesc, 626138287Smarks UINT32 Depth) 62767754Smsmith{ 62867754Smsmith UINT32 Length; 629138287Smarks UINT32 Index; 63067754Smsmith 63167754Smsmith 632167802Sjkim ACPI_FUNCTION_NAME (ExDumpOperand) 63377424Smsmith 63477424Smsmith 635245582Sjkim /* Check if debug output enabled */ 636245582Sjkim 637245582Sjkim if (!ACPI_IS_DEBUG_ENABLED (ACPI_LV_EXEC, _COMPONENT)) 63887031Smsmith { 63999679Siwasaki return; 64087031Smsmith } 64187031Smsmith 64291116Smsmith if (!ObjDesc) 64367754Smsmith { 644151937Sjkim /* This could be a null element of a package */ 645151937Sjkim 646138287Smarks ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Null Object Descriptor\n")); 64799679Siwasaki return; 64867754Smsmith } 64967754Smsmith 65091116Smsmith if (ACPI_GET_DESCRIPTOR_TYPE (ObjDesc) == ACPI_DESC_TYPE_NAMED) 65167754Smsmith { 652151937Sjkim ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "%p Namespace Node: ", ObjDesc)); 65399146Siwasaki ACPI_DUMP_ENTRY (ObjDesc, ACPI_LV_EXEC); 65499679Siwasaki return; 65567754Smsmith } 65667754Smsmith 65799679Siwasaki if (ACPI_GET_DESCRIPTOR_TYPE (ObjDesc) != ACPI_DESC_TYPE_OPERAND) 65867754Smsmith { 659123315Snjl ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, 660138287Smarks "%p is not a node or operand object: [%s]\n", 661138287Smarks ObjDesc, AcpiUtGetDescriptorName (ObjDesc))); 66291116Smsmith ACPI_DUMP_BUFFER (ObjDesc, sizeof (ACPI_OPERAND_OBJECT)); 66399679Siwasaki return; 66467754Smsmith } 66567754Smsmith 666123315Snjl /* ObjDesc is a valid object */ 66767754Smsmith 668138287Smarks if (Depth > 0) 669138287Smarks { 670138287Smarks ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "%*s[%u] %p ", 671138287Smarks Depth, " ", Depth, ObjDesc)); 672138287Smarks } 673138287Smarks else 674138287Smarks { 675138287Smarks ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "%p ", ObjDesc)); 676138287Smarks } 67767754Smsmith 678151937Sjkim /* Decode object type */ 679138287Smarks 680193267Sjkim switch (ObjDesc->Common.Type) 68167754Smsmith { 682107325Siwasaki case ACPI_TYPE_LOCAL_REFERENCE: 68367754Smsmith 684306536Sjkim AcpiOsPrintf ("Reference: [%s] ", 685306536Sjkim AcpiUtGetReferenceName (ObjDesc)); 686193267Sjkim 687193267Sjkim switch (ObjDesc->Reference.Class) 68867754Smsmith { 689193267Sjkim case ACPI_REFCLASS_DEBUG: 69067754Smsmith 691193267Sjkim AcpiOsPrintf ("\n"); 69267754Smsmith break; 69367754Smsmith 694193267Sjkim case ACPI_REFCLASS_INDEX: 69567754Smsmith 696193267Sjkim AcpiOsPrintf ("%p\n", ObjDesc->Reference.Object); 69767754Smsmith break; 69867754Smsmith 699193267Sjkim case ACPI_REFCLASS_TABLE: 700100966Siwasaki 701193267Sjkim AcpiOsPrintf ("Table Index %X\n", ObjDesc->Reference.Value); 702100966Siwasaki break; 703100966Siwasaki 704193267Sjkim case ACPI_REFCLASS_REFOF: 70567754Smsmith 706193267Sjkim AcpiOsPrintf ("%p [%s]\n", ObjDesc->Reference.Object, 707193267Sjkim AcpiUtGetTypeName (((ACPI_OPERAND_OBJECT *) 708193267Sjkim ObjDesc->Reference.Object)->Common.Type)); 70967754Smsmith break; 71067754Smsmith 711193267Sjkim case ACPI_REFCLASS_NAME: 71267754Smsmith 713306536Sjkim AcpiOsPrintf ("- [%4.4s]\n", 714306536Sjkim ObjDesc->Reference.Node->Name.Ascii); 71567754Smsmith break; 71667754Smsmith 717193267Sjkim case ACPI_REFCLASS_ARG: 718193267Sjkim case ACPI_REFCLASS_LOCAL: 719100966Siwasaki 720193267Sjkim AcpiOsPrintf ("%X\n", ObjDesc->Reference.Value); 72167754Smsmith break; 72267754Smsmith 723193267Sjkim default: /* Unknown reference class */ 72467754Smsmith 725193267Sjkim AcpiOsPrintf ("%2.2X\n", ObjDesc->Reference.Class); 72667754Smsmith break; 72767754Smsmith } 72867754Smsmith break; 72967754Smsmith 73067754Smsmith case ACPI_TYPE_BUFFER: 73167754Smsmith 732193267Sjkim AcpiOsPrintf ("Buffer length %.2X @ %p\n", 733138287Smarks ObjDesc->Buffer.Length, ObjDesc->Buffer.Pointer); 73467754Smsmith 73567754Smsmith /* Debug only -- dump the buffer contents */ 73667754Smsmith 73791116Smsmith if (ObjDesc->Buffer.Pointer) 73867754Smsmith { 739193267Sjkim Length = ObjDesc->Buffer.Length; 740193267Sjkim if (Length > 128) 74167754Smsmith { 742193267Sjkim Length = 128; 74367754Smsmith } 744193267Sjkim 745306536Sjkim AcpiOsPrintf ( 746306536Sjkim "Buffer Contents: (displaying length 0x%.2X)\n", Length); 747193267Sjkim ACPI_DUMP_BUFFER (ObjDesc->Buffer.Pointer, Length); 74867754Smsmith } 74967754Smsmith break; 75067754Smsmith 75171867Smsmith case ACPI_TYPE_INTEGER: 75267754Smsmith 75387031Smsmith AcpiOsPrintf ("Integer %8.8X%8.8X\n", 754138287Smarks ACPI_FORMAT_UINT64 (ObjDesc->Integer.Value)); 75567754Smsmith break; 75667754Smsmith 75767754Smsmith case ACPI_TYPE_PACKAGE: 75867754Smsmith 759138287Smarks AcpiOsPrintf ("Package [Len %X] ElementArray %p\n", 760138287Smarks ObjDesc->Package.Count, ObjDesc->Package.Elements); 76167754Smsmith 76267754Smsmith /* 763138287Smarks * If elements exist, package element pointer is valid, 76467754Smsmith * and debug_level exceeds 1, dump package's elements. 76567754Smsmith */ 76691116Smsmith if (ObjDesc->Package.Count && 76791116Smsmith ObjDesc->Package.Elements && 76883174Smsmith AcpiDbgLevel > 1) 76967754Smsmith { 770138287Smarks for (Index = 0; Index < ObjDesc->Package.Count; Index++) 77167754Smsmith { 772306536Sjkim AcpiExDumpOperand ( 773306536Sjkim ObjDesc->Package.Elements[Index], Depth + 1); 77467754Smsmith } 77567754Smsmith } 77667754Smsmith break; 77767754Smsmith 77867754Smsmith case ACPI_TYPE_REGION: 77967754Smsmith 78087031Smsmith AcpiOsPrintf ("Region %s (%X)", 78191116Smsmith AcpiUtGetRegionName (ObjDesc->Region.SpaceId), 78291116Smsmith ObjDesc->Region.SpaceId); 78367754Smsmith 78467754Smsmith /* 78567754Smsmith * If the address and length have not been evaluated, 78667754Smsmith * don't print them. 78767754Smsmith */ 78891116Smsmith if (!(ObjDesc->Region.Flags & AOPOBJ_DATA_VALID)) 78967754Smsmith { 79087031Smsmith AcpiOsPrintf ("\n"); 79167754Smsmith } 79267754Smsmith else 79367754Smsmith { 79487031Smsmith AcpiOsPrintf (" base %8.8X%8.8X Length %X\n", 795281687Sjkim ACPI_FORMAT_UINT64 (ObjDesc->Region.Address), 79691116Smsmith ObjDesc->Region.Length); 79767754Smsmith } 79867754Smsmith break; 79967754Smsmith 80067754Smsmith case ACPI_TYPE_STRING: 80167754Smsmith 802107325Siwasaki AcpiOsPrintf ("String length %X @ %p ", 803151937Sjkim ObjDesc->String.Length, 804151937Sjkim ObjDesc->String.Pointer); 805151937Sjkim 806107325Siwasaki AcpiUtPrintString (ObjDesc->String.Pointer, ACPI_UINT8_MAX); 807107325Siwasaki AcpiOsPrintf ("\n"); 80867754Smsmith break; 80967754Smsmith 810107325Siwasaki case ACPI_TYPE_LOCAL_BANK_FIELD: 81167754Smsmith 81287031Smsmith AcpiOsPrintf ("BankField\n"); 81367754Smsmith break; 81467754Smsmith 815107325Siwasaki case ACPI_TYPE_LOCAL_REGION_FIELD: 81667754Smsmith 817193267Sjkim AcpiOsPrintf ("RegionField: Bits=%X AccWidth=%X Lock=%X Update=%X at " 818193267Sjkim "byte=%X bit=%X of below:\n", 819151937Sjkim ObjDesc->Field.BitLength, 820151937Sjkim ObjDesc->Field.AccessByteWidth, 82191116Smsmith ObjDesc->Field.FieldFlags & AML_FIELD_LOCK_RULE_MASK, 82291116Smsmith ObjDesc->Field.FieldFlags & AML_FIELD_UPDATE_RULE_MASK, 823151937Sjkim ObjDesc->Field.BaseByteOffset, 824151937Sjkim ObjDesc->Field.StartFieldBitOffset); 825151937Sjkim 826306536Sjkim AcpiExDumpOperand (ObjDesc->Field.RegionObj, Depth + 1); 82767754Smsmith break; 82867754Smsmith 829107325Siwasaki case ACPI_TYPE_LOCAL_INDEX_FIELD: 83067754Smsmith 83187031Smsmith AcpiOsPrintf ("IndexField\n"); 83267754Smsmith break; 83367754Smsmith 83477424Smsmith case ACPI_TYPE_BUFFER_FIELD: 83567754Smsmith 836193267Sjkim AcpiOsPrintf ("BufferField: %X bits at byte %X bit %X of\n", 837151937Sjkim ObjDesc->BufferField.BitLength, 838151937Sjkim ObjDesc->BufferField.BaseByteOffset, 83991116Smsmith ObjDesc->BufferField.StartFieldBitOffset); 84067754Smsmith 84191116Smsmith if (!ObjDesc->BufferField.BufferObj) 84267754Smsmith { 843151937Sjkim ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "*NULL*\n")); 84467754Smsmith } 845193267Sjkim else if ((ObjDesc->BufferField.BufferObj)->Common.Type != 846306536Sjkim ACPI_TYPE_BUFFER) 84767754Smsmith { 848151937Sjkim AcpiOsPrintf ("*not a Buffer*\n"); 84967754Smsmith } 85067754Smsmith else 85167754Smsmith { 852306536Sjkim AcpiExDumpOperand (ObjDesc->BufferField.BufferObj, Depth + 1); 85367754Smsmith } 85467754Smsmith break; 85567754Smsmith 85667754Smsmith case ACPI_TYPE_EVENT: 85767754Smsmith 85887031Smsmith AcpiOsPrintf ("Event\n"); 85967754Smsmith break; 86067754Smsmith 86167754Smsmith case ACPI_TYPE_METHOD: 86267754Smsmith 863151937Sjkim AcpiOsPrintf ("Method(%X) @ %p:%X\n", 86491116Smsmith ObjDesc->Method.ParamCount, 865151937Sjkim ObjDesc->Method.AmlStart, 866151937Sjkim ObjDesc->Method.AmlLength); 86767754Smsmith break; 86867754Smsmith 86967754Smsmith case ACPI_TYPE_MUTEX: 87067754Smsmith 87187031Smsmith AcpiOsPrintf ("Mutex\n"); 87267754Smsmith break; 87367754Smsmith 87467754Smsmith case ACPI_TYPE_DEVICE: 87567754Smsmith 87687031Smsmith AcpiOsPrintf ("Device\n"); 87767754Smsmith break; 87867754Smsmith 87967754Smsmith case ACPI_TYPE_POWER: 88067754Smsmith 88187031Smsmith AcpiOsPrintf ("Power\n"); 88267754Smsmith break; 88367754Smsmith 88467754Smsmith case ACPI_TYPE_PROCESSOR: 88567754Smsmith 88687031Smsmith AcpiOsPrintf ("Processor\n"); 88767754Smsmith break; 88867754Smsmith 88967754Smsmith case ACPI_TYPE_THERMAL: 89067754Smsmith 89187031Smsmith AcpiOsPrintf ("Thermal\n"); 89267754Smsmith break; 89367754Smsmith 894250838Sjkim default: 89567754Smsmith 89699679Siwasaki /* Unknown Type */ 89767754Smsmith 898193267Sjkim AcpiOsPrintf ("Unknown Type %X\n", ObjDesc->Common.Type); 89967754Smsmith break; 90067754Smsmith } 90167754Smsmith 90299679Siwasaki return; 90367754Smsmith} 90467754Smsmith 90567754Smsmith 906151937Sjkim/******************************************************************************* 90767754Smsmith * 90877424Smsmith * FUNCTION: AcpiExDumpOperands 90967754Smsmith * 910193267Sjkim * PARAMETERS: Operands - A list of Operand objects 911193267Sjkim * OpcodeName - AML opcode name 912193267Sjkim * NumOperands - Operand count for this opcode 91367754Smsmith * 914193267Sjkim * DESCRIPTION: Dump the operands associated with the opcode 91567754Smsmith * 916151937Sjkim ******************************************************************************/ 91767754Smsmith 91867754Smsmithvoid 91977424SmsmithAcpiExDumpOperands ( 92067754Smsmith ACPI_OPERAND_OBJECT **Operands, 921193267Sjkim const char *OpcodeName, 922193267Sjkim UINT32 NumOperands) 92367754Smsmith{ 924167802Sjkim ACPI_FUNCTION_NAME (ExDumpOperands); 92582367Smsmith 92683174Smsmith 927193267Sjkim if (!OpcodeName) 92867754Smsmith { 929193267Sjkim OpcodeName = "UNKNOWN"; 93067754Smsmith } 93167754Smsmith 93299146Siwasaki ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, 933209746Sjkim "**** Start operand dump for opcode [%s], %u operands\n", 934193267Sjkim OpcodeName, NumOperands)); 93567754Smsmith 936193267Sjkim if (NumOperands == 0) 93777424Smsmith { 938193267Sjkim NumOperands = 1; 93977424Smsmith } 94067754Smsmith 941193267Sjkim /* Dump the individual operands */ 94267754Smsmith 943193267Sjkim while (NumOperands) 94467754Smsmith { 945193267Sjkim AcpiExDumpOperand (*Operands, 0); 946193267Sjkim Operands++; 947193267Sjkim NumOperands--; 94867754Smsmith } 94967754Smsmith 95099146Siwasaki ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, 951193267Sjkim "**** End operand dump for [%s]\n", OpcodeName)); 95267754Smsmith return; 95367754Smsmith} 95467754Smsmith 95567754Smsmith 956151937Sjkim/******************************************************************************* 95767754Smsmith * 958151937Sjkim * FUNCTION: AcpiExOut* functions 95987031Smsmith * 96087031Smsmith * PARAMETERS: Title - Descriptive text 96187031Smsmith * Value - Value to be displayed 96287031Smsmith * 963241973Sjkim * DESCRIPTION: Object dump output formatting functions. These functions 96487031Smsmith * reduce the number of format strings required and keeps them 96587031Smsmith * all in one place for easy modification. 96687031Smsmith * 967151937Sjkim ******************************************************************************/ 96887031Smsmith 969151937Sjkimstatic void 97087031SmsmithAcpiExOutString ( 971306536Sjkim const char *Title, 972306536Sjkim const char *Value) 97387031Smsmith{ 97487031Smsmith AcpiOsPrintf ("%20s : %s\n", Title, Value); 97587031Smsmith} 97687031Smsmith 977151937Sjkimstatic void 97887031SmsmithAcpiExOutPointer ( 979306536Sjkim const char *Title, 980306536Sjkim const void *Value) 98187031Smsmith{ 98287031Smsmith AcpiOsPrintf ("%20s : %p\n", Title, Value); 98387031Smsmith} 98487031Smsmith 98587031Smsmith 986151937Sjkim/******************************************************************************* 98787031Smsmith * 988167802Sjkim * FUNCTION: AcpiExDumpNamespaceNode 98967754Smsmith * 990167802Sjkim * PARAMETERS: Node - Descriptor to dump 991151937Sjkim * Flags - Force display if TRUE 99267754Smsmith * 99367754Smsmith * DESCRIPTION: Dumps the members of the given.Node 99467754Smsmith * 995151937Sjkim ******************************************************************************/ 99667754Smsmith 99767754Smsmithvoid 998167802SjkimAcpiExDumpNamespaceNode ( 99967754Smsmith ACPI_NAMESPACE_NODE *Node, 100067754Smsmith UINT32 Flags) 100167754Smsmith{ 100267754Smsmith 100391116Smsmith ACPI_FUNCTION_ENTRY (); 100483174Smsmith 100583174Smsmith 100667754Smsmith if (!Flags) 100767754Smsmith { 1008245582Sjkim /* Check if debug output enabled */ 1009245582Sjkim 1010245582Sjkim if (!ACPI_IS_DEBUG_ENABLED (ACPI_LV_OBJECTS, _COMPONENT)) 101167754Smsmith { 101267754Smsmith return; 101367754Smsmith } 101467754Smsmith } 101567754Smsmith 1016193267Sjkim AcpiOsPrintf ("%20s : %4.4s\n", "Name", AcpiUtGetNodeName (Node)); 1017281075Sdim AcpiOsPrintf ("%20s : %2.2X [%s]\n", "Type", 1018281075Sdim Node->Type, AcpiUtGetTypeName (Node->Type)); 1019167802Sjkim 1020167802Sjkim AcpiExDumpObject (ACPI_CAST_PTR (ACPI_OPERAND_OBJECT, Node), 1021167802Sjkim AcpiExDumpNode); 102267754Smsmith} 102367754Smsmith 102467754Smsmith 1025151937Sjkim/******************************************************************************* 102667754Smsmith * 1027167802Sjkim * FUNCTION: AcpiExDumpReferenceObj 1028151937Sjkim * 1029151937Sjkim * PARAMETERS: Object - Descriptor to dump 1030151937Sjkim * 1031151937Sjkim * DESCRIPTION: Dumps a reference object 1032151937Sjkim * 1033151937Sjkim ******************************************************************************/ 1034151937Sjkim 1035151937Sjkimstatic void 1036167802SjkimAcpiExDumpReferenceObj ( 1037151937Sjkim ACPI_OPERAND_OBJECT *ObjDesc) 1038151937Sjkim{ 1039151937Sjkim ACPI_BUFFER RetBuf; 1040151937Sjkim ACPI_STATUS Status; 1041151937Sjkim 1042151937Sjkim 1043167802Sjkim RetBuf.Length = ACPI_ALLOCATE_LOCAL_BUFFER; 1044167802Sjkim 1045193267Sjkim if (ObjDesc->Reference.Class == ACPI_REFCLASS_NAME) 1046151937Sjkim { 1047193267Sjkim AcpiOsPrintf (" %p ", ObjDesc->Reference.Node); 1048167802Sjkim 1049306536Sjkim Status = AcpiNsHandleToPathname (ObjDesc->Reference.Node, 1050306536Sjkim &RetBuf, TRUE); 1051151937Sjkim if (ACPI_FAILURE (Status)) 1052151937Sjkim { 1053193267Sjkim AcpiOsPrintf (" Could not convert name to pathname\n"); 1054151937Sjkim } 1055151937Sjkim else 1056151937Sjkim { 1057151937Sjkim AcpiOsPrintf ("%s\n", (char *) RetBuf.Pointer); 1058167802Sjkim ACPI_FREE (RetBuf.Pointer); 1059151937Sjkim } 1060151937Sjkim } 1061151937Sjkim else if (ObjDesc->Reference.Object) 1062151937Sjkim { 1063193267Sjkim if (ACPI_GET_DESCRIPTOR_TYPE (ObjDesc) == ACPI_DESC_TYPE_OPERAND) 1064193267Sjkim { 1065306536Sjkim AcpiOsPrintf ("%22s %p", "Target :", 1066306536Sjkim ObjDesc->Reference.Object); 1067193267Sjkim if (ObjDesc->Reference.Class == ACPI_REFCLASS_TABLE) 1068193267Sjkim { 1069306536Sjkim AcpiOsPrintf (" Table Index: %X\n", 1070306536Sjkim ObjDesc->Reference.Value); 1071193267Sjkim } 1072193267Sjkim else 1073193267Sjkim { 1074306536Sjkim AcpiOsPrintf (" [%s]\n", 1075193267Sjkim AcpiUtGetTypeName (((ACPI_OPERAND_OBJECT *) 1076306536Sjkim ObjDesc->Reference.Object)->Common.Type)); 1077193267Sjkim } 1078193267Sjkim } 1079193267Sjkim else 1080193267Sjkim { 1081193267Sjkim AcpiOsPrintf (" Target: %p\n", ObjDesc->Reference.Object); 1082193267Sjkim } 1083151937Sjkim } 1084151937Sjkim} 1085151937Sjkim 1086151937Sjkim 1087151937Sjkim/******************************************************************************* 1088151937Sjkim * 1089167802Sjkim * FUNCTION: AcpiExDumpPackageObj 1090151937Sjkim * 1091167802Sjkim * PARAMETERS: ObjDesc - Descriptor to dump 1092151937Sjkim * Level - Indentation Level 1093151937Sjkim * Index - Package index for this object 1094151937Sjkim * 1095151937Sjkim * DESCRIPTION: Dumps the elements of the package 1096151937Sjkim * 1097151937Sjkim ******************************************************************************/ 1098151937Sjkim 1099151937Sjkimstatic void 1100167802SjkimAcpiExDumpPackageObj ( 1101151937Sjkim ACPI_OPERAND_OBJECT *ObjDesc, 1102151937Sjkim UINT32 Level, 1103151937Sjkim UINT32 Index) 1104151937Sjkim{ 1105151937Sjkim UINT32 i; 1106151937Sjkim 1107151937Sjkim 1108151937Sjkim /* Indentation and index output */ 1109151937Sjkim 1110151937Sjkim if (Level > 0) 1111151937Sjkim { 1112151937Sjkim for (i = 0; i < Level; i++) 1113151937Sjkim { 1114151937Sjkim AcpiOsPrintf (" "); 1115151937Sjkim } 1116151937Sjkim 1117151937Sjkim AcpiOsPrintf ("[%.2d] ", Index); 1118151937Sjkim } 1119151937Sjkim 1120151937Sjkim AcpiOsPrintf ("%p ", ObjDesc); 1121151937Sjkim 1122151937Sjkim /* Null package elements are allowed */ 1123151937Sjkim 1124151937Sjkim if (!ObjDesc) 1125151937Sjkim { 1126151937Sjkim AcpiOsPrintf ("[Null Object]\n"); 1127151937Sjkim return; 1128151937Sjkim } 1129151937Sjkim 1130151937Sjkim /* Packages may only contain a few object types */ 1131151937Sjkim 1132193267Sjkim switch (ObjDesc->Common.Type) 1133151937Sjkim { 1134151937Sjkim case ACPI_TYPE_INTEGER: 1135151937Sjkim 1136151937Sjkim AcpiOsPrintf ("[Integer] = %8.8X%8.8X\n", 1137193267Sjkim ACPI_FORMAT_UINT64 (ObjDesc->Integer.Value)); 1138151937Sjkim break; 1139151937Sjkim 1140151937Sjkim case ACPI_TYPE_STRING: 1141151937Sjkim 1142151937Sjkim AcpiOsPrintf ("[String] Value: "); 1143234623Sjkim AcpiUtPrintString (ObjDesc->String.Pointer, ACPI_UINT8_MAX); 1144151937Sjkim AcpiOsPrintf ("\n"); 1145151937Sjkim break; 1146151937Sjkim 1147151937Sjkim case ACPI_TYPE_BUFFER: 1148151937Sjkim 1149151937Sjkim AcpiOsPrintf ("[Buffer] Length %.2X = ", ObjDesc->Buffer.Length); 1150151937Sjkim if (ObjDesc->Buffer.Length) 1151151937Sjkim { 1152306536Sjkim AcpiUtDebugDumpBuffer ( 1153306536Sjkim ACPI_CAST_PTR (UINT8, ObjDesc->Buffer.Pointer), 1154193267Sjkim ObjDesc->Buffer.Length, DB_DWORD_DISPLAY, _COMPONENT); 1155151937Sjkim } 1156151937Sjkim else 1157151937Sjkim { 1158151937Sjkim AcpiOsPrintf ("\n"); 1159151937Sjkim } 1160151937Sjkim break; 1161151937Sjkim 1162151937Sjkim case ACPI_TYPE_PACKAGE: 1163151937Sjkim 1164209746Sjkim AcpiOsPrintf ("[Package] Contains %u Elements:\n", 1165193267Sjkim ObjDesc->Package.Count); 1166151937Sjkim 1167151937Sjkim for (i = 0; i < ObjDesc->Package.Count; i++) 1168151937Sjkim { 1169306536Sjkim AcpiExDumpPackageObj ( 1170306536Sjkim ObjDesc->Package.Elements[i], Level + 1, i); 1171151937Sjkim } 1172151937Sjkim break; 1173151937Sjkim 1174151937Sjkim case ACPI_TYPE_LOCAL_REFERENCE: 1175151937Sjkim 1176193267Sjkim AcpiOsPrintf ("[Object Reference] Type [%s] %2.2X", 1177193267Sjkim AcpiUtGetReferenceName (ObjDesc), 1178193267Sjkim ObjDesc->Reference.Class); 1179167802Sjkim AcpiExDumpReferenceObj (ObjDesc); 1180151937Sjkim break; 1181151937Sjkim 1182151937Sjkim default: 1183151937Sjkim 1184193267Sjkim AcpiOsPrintf ("[Unknown Type] %X\n", ObjDesc->Common.Type); 1185151937Sjkim break; 1186151937Sjkim } 1187151937Sjkim} 1188151937Sjkim 1189151937Sjkim 1190151937Sjkim/******************************************************************************* 1191151937Sjkim * 119277424Smsmith * FUNCTION: AcpiExDumpObjectDescriptor 119367754Smsmith * 1194167802Sjkim * PARAMETERS: ObjDesc - Descriptor to dump 1195151937Sjkim * Flags - Force display if TRUE 119667754Smsmith * 119767754Smsmith * DESCRIPTION: Dumps the members of the object descriptor given. 119867754Smsmith * 1199151937Sjkim ******************************************************************************/ 120067754Smsmith 120167754Smsmithvoid 120277424SmsmithAcpiExDumpObjectDescriptor ( 120367754Smsmith ACPI_OPERAND_OBJECT *ObjDesc, 120467754Smsmith UINT32 Flags) 120567754Smsmith{ 1206167802Sjkim ACPI_FUNCTION_TRACE (ExDumpObjectDescriptor); 120782367Smsmith 120882367Smsmith 1209151937Sjkim if (!ObjDesc) 1210151937Sjkim { 1211151937Sjkim return_VOID; 1212151937Sjkim } 121367754Smsmith 121467754Smsmith if (!Flags) 121567754Smsmith { 1216245582Sjkim /* Check if debug output enabled */ 1217245582Sjkim 1218245582Sjkim if (!ACPI_IS_DEBUG_ENABLED (ACPI_LV_OBJECTS, _COMPONENT)) 121967754Smsmith { 1220100966Siwasaki return_VOID; 122167754Smsmith } 122267754Smsmith } 122367754Smsmith 1224104470Siwasaki if (ACPI_GET_DESCRIPTOR_TYPE (ObjDesc) == ACPI_DESC_TYPE_NAMED) 1225104470Siwasaki { 1226167802Sjkim AcpiExDumpNamespaceNode ((ACPI_NAMESPACE_NODE *) ObjDesc, Flags); 1227167802Sjkim 1228138287Smarks AcpiOsPrintf ("\nAttached Object (%p):\n", 1229138287Smarks ((ACPI_NAMESPACE_NODE *) ObjDesc)->Object); 1230167802Sjkim 1231281075Sdim ObjDesc = ((ACPI_NAMESPACE_NODE *) ObjDesc)->Object; 1232281075Sdim goto DumpObject; 1233104470Siwasaki } 1234104470Siwasaki 123599679Siwasaki if (ACPI_GET_DESCRIPTOR_TYPE (ObjDesc) != ACPI_DESC_TYPE_OPERAND) 123667754Smsmith { 1237138287Smarks AcpiOsPrintf ( 1238281075Sdim "%p is not an ACPI operand object: [%s]\n", 1239138287Smarks ObjDesc, AcpiUtGetDescriptorName (ObjDesc)); 1240100966Siwasaki return_VOID; 124167754Smsmith } 124267754Smsmith 1243281075Sdim /* Validate the object type */ 1244281075Sdim 1245281075Sdim if (ObjDesc->Common.Type > ACPI_TYPE_LOCAL_MAX) 124667754Smsmith { 1247281075Sdim AcpiOsPrintf ("Not a known object type: %2.2X\n", 1248281075Sdim ObjDesc->Common.Type); 1249167802Sjkim return_VOID; 1250167802Sjkim } 125167754Smsmith 1252281075Sdim 1253281075SdimDumpObject: 1254281075Sdim 1255167802Sjkim /* Common Fields */ 125667754Smsmith 1257167802Sjkim AcpiExDumpObject (ObjDesc, AcpiExDumpCommon); 125867754Smsmith 1259167802Sjkim /* Object-specific fields */ 126067754Smsmith 1261167802Sjkim AcpiExDumpObject (ObjDesc, AcpiExDumpInfo[ObjDesc->Common.Type]); 1262281075Sdim 1263281075Sdim if (ObjDesc->Common.Type == ACPI_TYPE_REGION) 1264281075Sdim { 1265281075Sdim ObjDesc = ObjDesc->Common.NextObject; 1266281075Sdim if (ObjDesc->Common.Type > ACPI_TYPE_LOCAL_MAX) 1267281075Sdim { 1268306536Sjkim AcpiOsPrintf ( 1269306536Sjkim "Secondary object is not a known object type: %2.2X\n", 1270281075Sdim ObjDesc->Common.Type); 1271281075Sdim 1272281075Sdim return_VOID; 1273281075Sdim } 1274281075Sdim 1275281075Sdim AcpiOsPrintf ("\nExtra attached Object (%p):\n", ObjDesc); 1276281075Sdim AcpiExDumpObject (ObjDesc, AcpiExDumpInfo[ObjDesc->Common.Type]); 1277281075Sdim } 1278281075Sdim 127967754Smsmith return_VOID; 128067754Smsmith} 128167754Smsmith 128267754Smsmith#endif 1283