1db2bae30SDana Myers /****************************************************************************** 2db2bae30SDana Myers * 3db2bae30SDana Myers * Module Name: exdump - Interpreter debug output routines 4db2bae30SDana Myers * 5db2bae30SDana Myers *****************************************************************************/ 6db2bae30SDana Myers 726f3cdf0SGordon Ross /* 8*385cc6b4SJerry Jelinek * Copyright (C) 2000 - 2016, Intel Corp. 9db2bae30SDana Myers * All rights reserved. 10db2bae30SDana Myers * 1126f3cdf0SGordon Ross * Redistribution and use in source and binary forms, with or without 1226f3cdf0SGordon Ross * modification, are permitted provided that the following conditions 1326f3cdf0SGordon Ross * are met: 1426f3cdf0SGordon Ross * 1. Redistributions of source code must retain the above copyright 1526f3cdf0SGordon Ross * notice, this list of conditions, and the following disclaimer, 1626f3cdf0SGordon Ross * without modification. 1726f3cdf0SGordon Ross * 2. Redistributions in binary form must reproduce at minimum a disclaimer 1826f3cdf0SGordon Ross * substantially similar to the "NO WARRANTY" disclaimer below 1926f3cdf0SGordon Ross * ("Disclaimer") and any redistribution must be conditioned upon 2026f3cdf0SGordon Ross * including a substantially similar Disclaimer requirement for further 2126f3cdf0SGordon Ross * binary redistribution. 2226f3cdf0SGordon Ross * 3. Neither the names of the above-listed copyright holders nor the names 2326f3cdf0SGordon Ross * of any contributors may be used to endorse or promote products derived 2426f3cdf0SGordon Ross * from this software without specific prior written permission. 25db2bae30SDana Myers * 2626f3cdf0SGordon Ross * Alternatively, this software may be distributed under the terms of the 2726f3cdf0SGordon Ross * GNU General Public License ("GPL") version 2 as published by the Free 2826f3cdf0SGordon Ross * Software Foundation. 29db2bae30SDana Myers * 3026f3cdf0SGordon Ross * NO WARRANTY 3126f3cdf0SGordon Ross * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 3226f3cdf0SGordon Ross * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 3326f3cdf0SGordon Ross * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR 3426f3cdf0SGordon Ross * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 3526f3cdf0SGordon Ross * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 3626f3cdf0SGordon Ross * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 3726f3cdf0SGordon Ross * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 3826f3cdf0SGordon Ross * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 3926f3cdf0SGordon Ross * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING 4026f3cdf0SGordon Ross * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 4126f3cdf0SGordon Ross * POSSIBILITY OF SUCH DAMAGES. 4226f3cdf0SGordon Ross */ 43db2bae30SDana Myers 44db2bae30SDana Myers #include "acpi.h" 45aa2aa9a6SDana Myers #include "accommon.h" 46db2bae30SDana Myers #include "acinterp.h" 47db2bae30SDana Myers #include "amlcode.h" 48db2bae30SDana Myers #include "acnamesp.h" 49db2bae30SDana Myers 50db2bae30SDana Myers 51db2bae30SDana Myers #define _COMPONENT ACPI_EXECUTER 52db2bae30SDana Myers ACPI_MODULE_NAME ("exdump") 53db2bae30SDana Myers 54db2bae30SDana Myers /* 55db2bae30SDana Myers * The following routines are used for debug output only 56db2bae30SDana Myers */ 57db2bae30SDana Myers #if defined(ACPI_DEBUG_OUTPUT) || defined(ACPI_DEBUGGER) 58db2bae30SDana Myers 59db2bae30SDana Myers /* Local prototypes */ 60db2bae30SDana Myers 61db2bae30SDana Myers static void 62db2bae30SDana Myers AcpiExOutString ( 63*385cc6b4SJerry Jelinek const char *Title, 64*385cc6b4SJerry Jelinek const char *Value); 65db2bae30SDana Myers 66db2bae30SDana Myers static void 67db2bae30SDana Myers AcpiExOutPointer ( 68*385cc6b4SJerry Jelinek const char *Title, 69*385cc6b4SJerry Jelinek const void *Value); 70db2bae30SDana Myers 71db2bae30SDana Myers static void 72db2bae30SDana Myers AcpiExDumpObject ( 73db2bae30SDana Myers ACPI_OPERAND_OBJECT *ObjDesc, 74db2bae30SDana Myers ACPI_EXDUMP_INFO *Info); 75db2bae30SDana Myers 76db2bae30SDana Myers static void 77db2bae30SDana Myers AcpiExDumpReferenceObj ( 78db2bae30SDana Myers ACPI_OPERAND_OBJECT *ObjDesc); 79db2bae30SDana Myers 80db2bae30SDana Myers static void 81db2bae30SDana Myers AcpiExDumpPackageObj ( 82db2bae30SDana Myers ACPI_OPERAND_OBJECT *ObjDesc, 83db2bae30SDana Myers UINT32 Level, 84db2bae30SDana Myers UINT32 Index); 85db2bae30SDana Myers 86db2bae30SDana Myers 87db2bae30SDana Myers /******************************************************************************* 88db2bae30SDana Myers * 89db2bae30SDana Myers * Object Descriptor info tables 90db2bae30SDana Myers * 91db2bae30SDana Myers * Note: The first table entry must be an INIT opcode and must contain 92db2bae30SDana Myers * the table length (number of table entries) 93db2bae30SDana Myers * 94db2bae30SDana Myers ******************************************************************************/ 95db2bae30SDana Myers 96db2bae30SDana Myers static ACPI_EXDUMP_INFO AcpiExDumpInteger[2] = 97db2bae30SDana Myers { 98db2bae30SDana Myers {ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE (AcpiExDumpInteger), NULL}, 99db2bae30SDana Myers {ACPI_EXD_UINT64, ACPI_EXD_OFFSET (Integer.Value), "Value"} 100db2bae30SDana Myers }; 101db2bae30SDana Myers 102db2bae30SDana Myers static ACPI_EXDUMP_INFO AcpiExDumpString[4] = 103db2bae30SDana Myers { 104db2bae30SDana Myers {ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE (AcpiExDumpString), NULL}, 105db2bae30SDana Myers {ACPI_EXD_UINT32, ACPI_EXD_OFFSET (String.Length), "Length"}, 106db2bae30SDana Myers {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (String.Pointer), "Pointer"}, 107db2bae30SDana Myers {ACPI_EXD_STRING, 0, NULL} 108db2bae30SDana Myers }; 109db2bae30SDana Myers 110db2bae30SDana Myers static ACPI_EXDUMP_INFO AcpiExDumpBuffer[5] = 111db2bae30SDana Myers { 112db2bae30SDana Myers {ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE (AcpiExDumpBuffer), NULL}, 113db2bae30SDana Myers {ACPI_EXD_UINT32, ACPI_EXD_OFFSET (Buffer.Length), "Length"}, 114db2bae30SDana Myers {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (Buffer.Pointer), "Pointer"}, 115*385cc6b4SJerry Jelinek {ACPI_EXD_NODE, ACPI_EXD_OFFSET (Buffer.Node), "Parent Node"}, 116db2bae30SDana Myers {ACPI_EXD_BUFFER, 0, NULL} 117db2bae30SDana Myers }; 118db2bae30SDana Myers 119*385cc6b4SJerry Jelinek static ACPI_EXDUMP_INFO AcpiExDumpPackage[6] = 120db2bae30SDana Myers { 121db2bae30SDana Myers {ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE (AcpiExDumpPackage), NULL}, 122*385cc6b4SJerry Jelinek {ACPI_EXD_NODE, ACPI_EXD_OFFSET (Package.Node), "Parent Node"}, 123db2bae30SDana Myers {ACPI_EXD_UINT8, ACPI_EXD_OFFSET (Package.Flags), "Flags"}, 124db2bae30SDana Myers {ACPI_EXD_UINT32, ACPI_EXD_OFFSET (Package.Count), "Elements"}, 125db2bae30SDana Myers {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (Package.Elements), "Element List"}, 126db2bae30SDana Myers {ACPI_EXD_PACKAGE, 0, NULL} 127db2bae30SDana Myers }; 128db2bae30SDana Myers 129db2bae30SDana Myers static ACPI_EXDUMP_INFO AcpiExDumpDevice[4] = 130db2bae30SDana Myers { 131db2bae30SDana Myers {ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE (AcpiExDumpDevice), NULL}, 132*385cc6b4SJerry Jelinek {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (Device.NotifyList[0]), "System Notify"}, 133*385cc6b4SJerry Jelinek {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (Device.NotifyList[1]), "Device Notify"}, 134*385cc6b4SJerry Jelinek {ACPI_EXD_HDLR_LIST,ACPI_EXD_OFFSET (Device.Handler), "Handler"} 135db2bae30SDana Myers }; 136db2bae30SDana Myers 137db2bae30SDana Myers static ACPI_EXDUMP_INFO AcpiExDumpEvent[2] = 138db2bae30SDana Myers { 139db2bae30SDana Myers {ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE (AcpiExDumpEvent), NULL}, 140db2bae30SDana Myers {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (Event.OsSemaphore), "OsSemaphore"} 141db2bae30SDana Myers }; 142db2bae30SDana Myers 143aa2aa9a6SDana Myers static ACPI_EXDUMP_INFO AcpiExDumpMethod[9] = 144db2bae30SDana Myers { 145db2bae30SDana Myers {ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE (AcpiExDumpMethod), NULL}, 14626f3cdf0SGordon Ross {ACPI_EXD_UINT8, ACPI_EXD_OFFSET (Method.InfoFlags), "Info Flags"}, 147aa2aa9a6SDana Myers {ACPI_EXD_UINT8, ACPI_EXD_OFFSET (Method.ParamCount), "Parameter Count"}, 148db2bae30SDana Myers {ACPI_EXD_UINT8, ACPI_EXD_OFFSET (Method.SyncLevel), "Sync Level"}, 149db2bae30SDana Myers {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (Method.Mutex), "Mutex"}, 150db2bae30SDana Myers {ACPI_EXD_UINT8, ACPI_EXD_OFFSET (Method.OwnerId), "Owner Id"}, 151db2bae30SDana Myers {ACPI_EXD_UINT8, ACPI_EXD_OFFSET (Method.ThreadCount), "Thread Count"}, 152db2bae30SDana Myers {ACPI_EXD_UINT32, ACPI_EXD_OFFSET (Method.AmlLength), "Aml Length"}, 153db2bae30SDana Myers {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (Method.AmlStart), "Aml Start"} 154db2bae30SDana Myers }; 155db2bae30SDana Myers 156*385cc6b4SJerry Jelinek static ACPI_EXDUMP_INFO AcpiExDumpMutex[6] = 157db2bae30SDana Myers { 158db2bae30SDana Myers {ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE (AcpiExDumpMutex), NULL}, 159db2bae30SDana Myers {ACPI_EXD_UINT8, ACPI_EXD_OFFSET (Mutex.SyncLevel), "Sync Level"}, 160*385cc6b4SJerry Jelinek {ACPI_EXD_UINT8, ACPI_EXD_OFFSET (Mutex.OriginalSyncLevel), "Original Sync Level"}, 161db2bae30SDana Myers {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (Mutex.OwnerThread), "Owner Thread"}, 162db2bae30SDana Myers {ACPI_EXD_UINT16, ACPI_EXD_OFFSET (Mutex.AcquisitionDepth), "Acquire Depth"}, 163db2bae30SDana Myers {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (Mutex.OsMutex), "OsMutex"} 164db2bae30SDana Myers }; 165db2bae30SDana Myers 166*385cc6b4SJerry Jelinek static ACPI_EXDUMP_INFO AcpiExDumpRegion[8] = 167db2bae30SDana Myers { 168db2bae30SDana Myers {ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE (AcpiExDumpRegion), NULL}, 169db2bae30SDana Myers {ACPI_EXD_UINT8, ACPI_EXD_OFFSET (Region.SpaceId), "Space Id"}, 170db2bae30SDana Myers {ACPI_EXD_UINT8, ACPI_EXD_OFFSET (Region.Flags), "Flags"}, 171*385cc6b4SJerry Jelinek {ACPI_EXD_NODE, ACPI_EXD_OFFSET (Region.Node), "Parent Node"}, 172db2bae30SDana Myers {ACPI_EXD_ADDRESS, ACPI_EXD_OFFSET (Region.Address), "Address"}, 173db2bae30SDana Myers {ACPI_EXD_UINT32, ACPI_EXD_OFFSET (Region.Length), "Length"}, 174*385cc6b4SJerry Jelinek {ACPI_EXD_HDLR_LIST,ACPI_EXD_OFFSET (Region.Handler), "Handler"}, 175db2bae30SDana Myers {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (Region.Next), "Next"} 176db2bae30SDana Myers }; 177db2bae30SDana Myers 178*385cc6b4SJerry Jelinek static ACPI_EXDUMP_INFO AcpiExDumpPower[6] = 179db2bae30SDana Myers { 180db2bae30SDana Myers {ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE (AcpiExDumpPower), NULL}, 181db2bae30SDana Myers {ACPI_EXD_UINT32, ACPI_EXD_OFFSET (PowerResource.SystemLevel), "System Level"}, 182db2bae30SDana Myers {ACPI_EXD_UINT32, ACPI_EXD_OFFSET (PowerResource.ResourceOrder), "Resource Order"}, 183*385cc6b4SJerry Jelinek {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (PowerResource.NotifyList[0]), "System Notify"}, 184*385cc6b4SJerry Jelinek {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (PowerResource.NotifyList[1]), "Device Notify"}, 185*385cc6b4SJerry Jelinek {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (PowerResource.Handler), "Handler"} 186db2bae30SDana Myers }; 187db2bae30SDana Myers 188db2bae30SDana Myers static ACPI_EXDUMP_INFO AcpiExDumpProcessor[7] = 189db2bae30SDana Myers { 190db2bae30SDana Myers {ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE (AcpiExDumpProcessor), NULL}, 191db2bae30SDana Myers {ACPI_EXD_UINT8, ACPI_EXD_OFFSET (Processor.ProcId), "Processor ID"}, 192db2bae30SDana Myers {ACPI_EXD_UINT8 , ACPI_EXD_OFFSET (Processor.Length), "Length"}, 193db2bae30SDana Myers {ACPI_EXD_ADDRESS, ACPI_EXD_OFFSET (Processor.Address), "Address"}, 194*385cc6b4SJerry Jelinek {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (Processor.NotifyList[0]), "System Notify"}, 195*385cc6b4SJerry Jelinek {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (Processor.NotifyList[1]), "Device Notify"}, 196db2bae30SDana Myers {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (Processor.Handler), "Handler"} 197db2bae30SDana Myers }; 198db2bae30SDana Myers 199db2bae30SDana Myers static ACPI_EXDUMP_INFO AcpiExDumpThermal[4] = 200db2bae30SDana Myers { 201db2bae30SDana Myers {ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE (AcpiExDumpThermal), NULL}, 202*385cc6b4SJerry Jelinek {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (ThermalZone.NotifyList[0]), "System Notify"}, 203*385cc6b4SJerry Jelinek {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (ThermalZone.NotifyList[1]), "Device Notify"}, 204db2bae30SDana Myers {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (ThermalZone.Handler), "Handler"} 205db2bae30SDana Myers }; 206db2bae30SDana Myers 207db2bae30SDana Myers static ACPI_EXDUMP_INFO AcpiExDumpBufferField[3] = 208db2bae30SDana Myers { 209db2bae30SDana Myers {ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE (AcpiExDumpBufferField), NULL}, 210db2bae30SDana Myers {ACPI_EXD_FIELD, 0, NULL}, 211db2bae30SDana Myers {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (BufferField.BufferObj), "Buffer Object"} 212db2bae30SDana Myers }; 213db2bae30SDana Myers 214*385cc6b4SJerry Jelinek static ACPI_EXDUMP_INFO AcpiExDumpRegionField[5] = 215db2bae30SDana Myers { 216db2bae30SDana Myers {ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE (AcpiExDumpRegionField), NULL}, 217db2bae30SDana Myers {ACPI_EXD_FIELD, 0, NULL}, 218*385cc6b4SJerry Jelinek {ACPI_EXD_UINT8, ACPI_EXD_OFFSET (Field.AccessLength), "AccessLength"}, 219*385cc6b4SJerry Jelinek {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (Field.RegionObj), "Region Object"}, 220*385cc6b4SJerry Jelinek {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (Field.ResourceBuffer), "ResourceBuffer"} 221db2bae30SDana Myers }; 222db2bae30SDana Myers 223db2bae30SDana Myers static ACPI_EXDUMP_INFO AcpiExDumpBankField[5] = 224db2bae30SDana Myers { 225db2bae30SDana Myers {ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE (AcpiExDumpBankField), NULL}, 226db2bae30SDana Myers {ACPI_EXD_FIELD, 0, NULL}, 227db2bae30SDana Myers {ACPI_EXD_UINT32, ACPI_EXD_OFFSET (BankField.Value), "Value"}, 228db2bae30SDana Myers {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (BankField.RegionObj), "Region Object"}, 229db2bae30SDana Myers {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (BankField.BankObj), "Bank Object"} 230db2bae30SDana Myers }; 231db2bae30SDana Myers 232db2bae30SDana Myers static ACPI_EXDUMP_INFO AcpiExDumpIndexField[5] = 233db2bae30SDana Myers { 234db2bae30SDana Myers {ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE (AcpiExDumpBankField), NULL}, 235db2bae30SDana Myers {ACPI_EXD_FIELD, 0, NULL}, 236db2bae30SDana Myers {ACPI_EXD_UINT32, ACPI_EXD_OFFSET (IndexField.Value), "Value"}, 237db2bae30SDana Myers {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (IndexField.IndexObj), "Index Object"}, 238db2bae30SDana Myers {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (IndexField.DataObj), "Data Object"} 239db2bae30SDana Myers }; 240db2bae30SDana Myers 241*385cc6b4SJerry Jelinek static ACPI_EXDUMP_INFO AcpiExDumpReference[9] = 242db2bae30SDana Myers { 243db2bae30SDana Myers {ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE (AcpiExDumpReference), NULL}, 244db2bae30SDana Myers {ACPI_EXD_UINT8, ACPI_EXD_OFFSET (Reference.Class), "Class"}, 245db2bae30SDana Myers {ACPI_EXD_UINT8, ACPI_EXD_OFFSET (Reference.TargetType), "Target Type"}, 246db2bae30SDana Myers {ACPI_EXD_UINT32, ACPI_EXD_OFFSET (Reference.Value), "Value"}, 247db2bae30SDana Myers {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (Reference.Object), "Object Desc"}, 248*385cc6b4SJerry Jelinek {ACPI_EXD_NODE, ACPI_EXD_OFFSET (Reference.Node), "Node"}, 249db2bae30SDana Myers {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (Reference.Where), "Where"}, 250*385cc6b4SJerry Jelinek {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (Reference.IndexPointer), "Index Pointer"}, 251db2bae30SDana Myers {ACPI_EXD_REFERENCE,0, NULL} 252db2bae30SDana Myers }; 253db2bae30SDana Myers 254db2bae30SDana Myers static ACPI_EXDUMP_INFO AcpiExDumpAddressHandler[6] = 255db2bae30SDana Myers { 256db2bae30SDana Myers {ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE (AcpiExDumpAddressHandler), NULL}, 257db2bae30SDana Myers {ACPI_EXD_UINT8, ACPI_EXD_OFFSET (AddressSpace.SpaceId), "Space Id"}, 258*385cc6b4SJerry Jelinek {ACPI_EXD_HDLR_LIST,ACPI_EXD_OFFSET (AddressSpace.Next), "Next"}, 259*385cc6b4SJerry Jelinek {ACPI_EXD_RGN_LIST, ACPI_EXD_OFFSET (AddressSpace.RegionList), "Region List"}, 260*385cc6b4SJerry Jelinek {ACPI_EXD_NODE, ACPI_EXD_OFFSET (AddressSpace.Node), "Node"}, 261db2bae30SDana Myers {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (AddressSpace.Context), "Context"} 262db2bae30SDana Myers }; 263db2bae30SDana Myers 264*385cc6b4SJerry Jelinek static ACPI_EXDUMP_INFO AcpiExDumpNotify[7] = 265db2bae30SDana Myers { 266db2bae30SDana Myers {ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE (AcpiExDumpNotify), NULL}, 267*385cc6b4SJerry Jelinek {ACPI_EXD_NODE, ACPI_EXD_OFFSET (Notify.Node), "Node"}, 268*385cc6b4SJerry Jelinek {ACPI_EXD_UINT32, ACPI_EXD_OFFSET (Notify.HandlerType), "Handler Type"}, 269*385cc6b4SJerry Jelinek {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (Notify.Handler), "Handler"}, 270*385cc6b4SJerry Jelinek {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (Notify.Context), "Context"}, 271*385cc6b4SJerry Jelinek {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (Notify.Next[0]), "Next System Notify"}, 272*385cc6b4SJerry Jelinek {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (Notify.Next[1]), "Next Device Notify"} 273db2bae30SDana Myers }; 274db2bae30SDana Myers 275*385cc6b4SJerry Jelinek static ACPI_EXDUMP_INFO AcpiExDumpExtra[6] = 276*385cc6b4SJerry Jelinek { 277*385cc6b4SJerry Jelinek {ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE (AcpiExDumpExtra), NULL}, 278*385cc6b4SJerry Jelinek {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (Extra.Method_REG), "_REG Method"}, 279*385cc6b4SJerry Jelinek {ACPI_EXD_NODE, ACPI_EXD_OFFSET (Extra.ScopeNode), "Scope Node"}, 280*385cc6b4SJerry Jelinek {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (Extra.RegionContext), "Region Context"}, 281*385cc6b4SJerry Jelinek {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (Extra.AmlStart), "Aml Start"}, 282*385cc6b4SJerry Jelinek {ACPI_EXD_UINT32, ACPI_EXD_OFFSET (Extra.AmlLength), "Aml Length"} 283*385cc6b4SJerry Jelinek }; 284*385cc6b4SJerry Jelinek 285*385cc6b4SJerry Jelinek static ACPI_EXDUMP_INFO AcpiExDumpData[3] = 286*385cc6b4SJerry Jelinek { 287*385cc6b4SJerry Jelinek {ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE (AcpiExDumpData), NULL}, 288*385cc6b4SJerry Jelinek {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (Data.Handler), "Handler"}, 289*385cc6b4SJerry Jelinek {ACPI_EXD_POINTER, ACPI_EXD_OFFSET (Data.Pointer), "Raw Data"} 290*385cc6b4SJerry Jelinek }; 291db2bae30SDana Myers 292db2bae30SDana Myers /* Miscellaneous tables */ 293db2bae30SDana Myers 294*385cc6b4SJerry Jelinek static ACPI_EXDUMP_INFO AcpiExDumpCommon[5] = 295db2bae30SDana Myers { 296db2bae30SDana Myers {ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE (AcpiExDumpCommon), NULL}, 297db2bae30SDana Myers {ACPI_EXD_TYPE , 0, NULL}, 298db2bae30SDana Myers {ACPI_EXD_UINT16, ACPI_EXD_OFFSET (Common.ReferenceCount), "Reference Count"}, 299*385cc6b4SJerry Jelinek {ACPI_EXD_UINT8, ACPI_EXD_OFFSET (Common.Flags), "Flags"}, 300*385cc6b4SJerry Jelinek {ACPI_EXD_LIST, ACPI_EXD_OFFSET (Common.NextObject), "Object List"} 301db2bae30SDana Myers }; 302db2bae30SDana Myers 303db2bae30SDana Myers static ACPI_EXDUMP_INFO AcpiExDumpFieldCommon[7] = 304db2bae30SDana Myers { 305db2bae30SDana Myers {ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE (AcpiExDumpFieldCommon), NULL}, 306db2bae30SDana Myers {ACPI_EXD_UINT8, ACPI_EXD_OFFSET (CommonField.FieldFlags), "Field Flags"}, 307db2bae30SDana Myers {ACPI_EXD_UINT8, ACPI_EXD_OFFSET (CommonField.AccessByteWidth), "Access Byte Width"}, 308db2bae30SDana Myers {ACPI_EXD_UINT32, ACPI_EXD_OFFSET (CommonField.BitLength), "Bit Length"}, 309db2bae30SDana Myers {ACPI_EXD_UINT8, ACPI_EXD_OFFSET (CommonField.StartFieldBitOffset),"Field Bit Offset"}, 310db2bae30SDana Myers {ACPI_EXD_UINT32, ACPI_EXD_OFFSET (CommonField.BaseByteOffset), "Base Byte Offset"}, 311*385cc6b4SJerry Jelinek {ACPI_EXD_NODE, ACPI_EXD_OFFSET (CommonField.Node), "Parent Node"} 312db2bae30SDana Myers }; 313db2bae30SDana Myers 314*385cc6b4SJerry Jelinek static ACPI_EXDUMP_INFO AcpiExDumpNode[7] = 315db2bae30SDana Myers { 316db2bae30SDana Myers {ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE (AcpiExDumpNode), NULL}, 317db2bae30SDana Myers {ACPI_EXD_UINT8, ACPI_EXD_NSOFFSET (Flags), "Flags"}, 318db2bae30SDana Myers {ACPI_EXD_UINT8, ACPI_EXD_NSOFFSET (OwnerId), "Owner Id"}, 319*385cc6b4SJerry Jelinek {ACPI_EXD_LIST, ACPI_EXD_NSOFFSET (Object), "Object List"}, 320*385cc6b4SJerry Jelinek {ACPI_EXD_NODE, ACPI_EXD_NSOFFSET (Parent), "Parent"}, 321*385cc6b4SJerry Jelinek {ACPI_EXD_NODE, ACPI_EXD_NSOFFSET (Child), "Child"}, 322*385cc6b4SJerry Jelinek {ACPI_EXD_NODE, ACPI_EXD_NSOFFSET (Peer), "Peer"} 323db2bae30SDana Myers }; 324db2bae30SDana Myers 325db2bae30SDana Myers 326db2bae30SDana Myers /* Dispatch table, indexed by object type */ 327db2bae30SDana Myers 328db2bae30SDana Myers static ACPI_EXDUMP_INFO *AcpiExDumpInfo[] = 329db2bae30SDana Myers { 330db2bae30SDana Myers NULL, 331db2bae30SDana Myers AcpiExDumpInteger, 332db2bae30SDana Myers AcpiExDumpString, 333db2bae30SDana Myers AcpiExDumpBuffer, 334db2bae30SDana Myers AcpiExDumpPackage, 335db2bae30SDana Myers NULL, 336db2bae30SDana Myers AcpiExDumpDevice, 337db2bae30SDana Myers AcpiExDumpEvent, 338db2bae30SDana Myers AcpiExDumpMethod, 339db2bae30SDana Myers AcpiExDumpMutex, 340db2bae30SDana Myers AcpiExDumpRegion, 341db2bae30SDana Myers AcpiExDumpPower, 342db2bae30SDana Myers AcpiExDumpProcessor, 343db2bae30SDana Myers AcpiExDumpThermal, 344db2bae30SDana Myers AcpiExDumpBufferField, 345db2bae30SDana Myers NULL, 346db2bae30SDana Myers NULL, 347db2bae30SDana Myers AcpiExDumpRegionField, 348db2bae30SDana Myers AcpiExDumpBankField, 349db2bae30SDana Myers AcpiExDumpIndexField, 350db2bae30SDana Myers AcpiExDumpReference, 351db2bae30SDana Myers NULL, 352db2bae30SDana Myers NULL, 353db2bae30SDana Myers AcpiExDumpNotify, 354db2bae30SDana Myers AcpiExDumpAddressHandler, 355db2bae30SDana Myers NULL, 356db2bae30SDana Myers NULL, 357*385cc6b4SJerry Jelinek NULL, 358*385cc6b4SJerry Jelinek AcpiExDumpExtra, 359*385cc6b4SJerry Jelinek AcpiExDumpData 360db2bae30SDana Myers }; 361db2bae30SDana Myers 362db2bae30SDana Myers 363db2bae30SDana Myers /******************************************************************************* 364db2bae30SDana Myers * 365db2bae30SDana Myers * FUNCTION: AcpiExDumpObject 366db2bae30SDana Myers * 367db2bae30SDana Myers * PARAMETERS: ObjDesc - Descriptor to dump 368db2bae30SDana Myers * Info - Info table corresponding to this object 369db2bae30SDana Myers * type 370db2bae30SDana Myers * 371db2bae30SDana Myers * RETURN: None 372db2bae30SDana Myers * 373db2bae30SDana Myers * DESCRIPTION: Walk the info table for this object 374db2bae30SDana Myers * 375db2bae30SDana Myers ******************************************************************************/ 376db2bae30SDana Myers 377db2bae30SDana Myers static void 378db2bae30SDana Myers AcpiExDumpObject ( 379db2bae30SDana Myers ACPI_OPERAND_OBJECT *ObjDesc, 380db2bae30SDana Myers ACPI_EXDUMP_INFO *Info) 381db2bae30SDana Myers { 382db2bae30SDana Myers UINT8 *Target; 383*385cc6b4SJerry Jelinek const char *Name; 384db2bae30SDana Myers UINT8 Count; 385*385cc6b4SJerry Jelinek ACPI_OPERAND_OBJECT *Start; 386*385cc6b4SJerry Jelinek ACPI_OPERAND_OBJECT *Data = NULL; 387*385cc6b4SJerry Jelinek ACPI_OPERAND_OBJECT *Next; 388*385cc6b4SJerry Jelinek ACPI_NAMESPACE_NODE *Node; 389db2bae30SDana Myers 390db2bae30SDana Myers 391db2bae30SDana Myers if (!Info) 392db2bae30SDana Myers { 393db2bae30SDana Myers AcpiOsPrintf ( 394db2bae30SDana Myers "ExDumpObject: Display not implemented for object type %s\n", 395db2bae30SDana Myers AcpiUtGetObjectTypeName (ObjDesc)); 396db2bae30SDana Myers return; 397db2bae30SDana Myers } 398db2bae30SDana Myers 399db2bae30SDana Myers /* First table entry must contain the table length (# of table entries) */ 400db2bae30SDana Myers 401db2bae30SDana Myers Count = Info->Offset; 402db2bae30SDana Myers 403db2bae30SDana Myers while (Count) 404db2bae30SDana Myers { 405db2bae30SDana Myers Target = ACPI_ADD_PTR (UINT8, ObjDesc, Info->Offset); 406db2bae30SDana Myers Name = Info->Name; 407db2bae30SDana Myers 408db2bae30SDana Myers switch (Info->Opcode) 409db2bae30SDana Myers { 410db2bae30SDana Myers case ACPI_EXD_INIT: 411*385cc6b4SJerry Jelinek 412db2bae30SDana Myers break; 413db2bae30SDana Myers 414db2bae30SDana Myers case ACPI_EXD_TYPE: 415aa2aa9a6SDana Myers 416*385cc6b4SJerry Jelinek AcpiOsPrintf ("%20s : %2.2X [%s]\n", "Type", 417*385cc6b4SJerry Jelinek ObjDesc->Common.Type, AcpiUtGetObjectTypeName (ObjDesc)); 418db2bae30SDana Myers break; 419db2bae30SDana Myers 420db2bae30SDana Myers case ACPI_EXD_UINT8: 421db2bae30SDana Myers 422db2bae30SDana Myers AcpiOsPrintf ("%20s : %2.2X\n", Name, *Target); 423db2bae30SDana Myers break; 424db2bae30SDana Myers 425db2bae30SDana Myers case ACPI_EXD_UINT16: 426db2bae30SDana Myers 427db2bae30SDana Myers AcpiOsPrintf ("%20s : %4.4X\n", Name, ACPI_GET16 (Target)); 428db2bae30SDana Myers break; 429db2bae30SDana Myers 430db2bae30SDana Myers case ACPI_EXD_UINT32: 431db2bae30SDana Myers 432db2bae30SDana Myers AcpiOsPrintf ("%20s : %8.8X\n", Name, ACPI_GET32 (Target)); 433db2bae30SDana Myers break; 434db2bae30SDana Myers 435db2bae30SDana Myers case ACPI_EXD_UINT64: 436db2bae30SDana Myers 437db2bae30SDana Myers AcpiOsPrintf ("%20s : %8.8X%8.8X\n", "Value", 438db2bae30SDana Myers ACPI_FORMAT_UINT64 (ACPI_GET64 (Target))); 439db2bae30SDana Myers break; 440db2bae30SDana Myers 441db2bae30SDana Myers case ACPI_EXD_POINTER: 442db2bae30SDana Myers case ACPI_EXD_ADDRESS: 443db2bae30SDana Myers 444db2bae30SDana Myers AcpiExOutPointer (Name, *ACPI_CAST_PTR (void *, Target)); 445db2bae30SDana Myers break; 446db2bae30SDana Myers 447db2bae30SDana Myers case ACPI_EXD_STRING: 448db2bae30SDana Myers 449db2bae30SDana Myers AcpiUtPrintString (ObjDesc->String.Pointer, ACPI_UINT8_MAX); 450db2bae30SDana Myers AcpiOsPrintf ("\n"); 451db2bae30SDana Myers break; 452db2bae30SDana Myers 453db2bae30SDana Myers case ACPI_EXD_BUFFER: 454db2bae30SDana Myers 455*385cc6b4SJerry Jelinek ACPI_DUMP_BUFFER ( 456*385cc6b4SJerry Jelinek ObjDesc->Buffer.Pointer, ObjDesc->Buffer.Length); 457db2bae30SDana Myers break; 458db2bae30SDana Myers 459db2bae30SDana Myers case ACPI_EXD_PACKAGE: 460db2bae30SDana Myers 461db2bae30SDana Myers /* Dump the package contents */ 462db2bae30SDana Myers 463db2bae30SDana Myers AcpiOsPrintf ("\nPackage Contents:\n"); 464db2bae30SDana Myers AcpiExDumpPackageObj (ObjDesc, 0, 0); 465db2bae30SDana Myers break; 466db2bae30SDana Myers 467db2bae30SDana Myers case ACPI_EXD_FIELD: 468db2bae30SDana Myers 469db2bae30SDana Myers AcpiExDumpObject (ObjDesc, AcpiExDumpFieldCommon); 470db2bae30SDana Myers break; 471db2bae30SDana Myers 472db2bae30SDana Myers case ACPI_EXD_REFERENCE: 473db2bae30SDana Myers 474*385cc6b4SJerry Jelinek AcpiExOutString ("Class Name", AcpiUtGetReferenceName (ObjDesc)); 475db2bae30SDana Myers AcpiExDumpReferenceObj (ObjDesc); 476db2bae30SDana Myers break; 477db2bae30SDana Myers 478*385cc6b4SJerry Jelinek case ACPI_EXD_LIST: 479*385cc6b4SJerry Jelinek 480*385cc6b4SJerry Jelinek Start = *ACPI_CAST_PTR (void *, Target); 481*385cc6b4SJerry Jelinek Next = Start; 482*385cc6b4SJerry Jelinek 483*385cc6b4SJerry Jelinek AcpiOsPrintf ("%20s : %p", Name, Next); 484*385cc6b4SJerry Jelinek if (Next) 485*385cc6b4SJerry Jelinek { 486*385cc6b4SJerry Jelinek AcpiOsPrintf ("(%s %2.2X)", 487*385cc6b4SJerry Jelinek AcpiUtGetObjectTypeName (Next), Next->Common.Type); 488*385cc6b4SJerry Jelinek 489*385cc6b4SJerry Jelinek while (Next->Common.NextObject) 490*385cc6b4SJerry Jelinek { 491*385cc6b4SJerry Jelinek if ((Next->Common.Type == ACPI_TYPE_LOCAL_DATA) && 492*385cc6b4SJerry Jelinek !Data) 493*385cc6b4SJerry Jelinek { 494*385cc6b4SJerry Jelinek Data = Next; 495*385cc6b4SJerry Jelinek } 496*385cc6b4SJerry Jelinek 497*385cc6b4SJerry Jelinek Next = Next->Common.NextObject; 498*385cc6b4SJerry Jelinek AcpiOsPrintf ("->%p(%s %2.2X)", Next, 499*385cc6b4SJerry Jelinek AcpiUtGetObjectTypeName (Next), Next->Common.Type); 500*385cc6b4SJerry Jelinek 501*385cc6b4SJerry Jelinek if ((Next == Start) || (Next == Data)) 502*385cc6b4SJerry Jelinek { 503*385cc6b4SJerry Jelinek AcpiOsPrintf ( 504*385cc6b4SJerry Jelinek "\n**** Error: Object list appears to be circular linked"); 505*385cc6b4SJerry Jelinek break; 506*385cc6b4SJerry Jelinek } 507*385cc6b4SJerry Jelinek } 508*385cc6b4SJerry Jelinek } 509*385cc6b4SJerry Jelinek 510*385cc6b4SJerry Jelinek AcpiOsPrintf ("\n"); 511*385cc6b4SJerry Jelinek break; 512*385cc6b4SJerry Jelinek 513*385cc6b4SJerry Jelinek case ACPI_EXD_HDLR_LIST: 514*385cc6b4SJerry Jelinek 515*385cc6b4SJerry Jelinek Start = *ACPI_CAST_PTR (void *, Target); 516*385cc6b4SJerry Jelinek Next = Start; 517*385cc6b4SJerry Jelinek 518*385cc6b4SJerry Jelinek AcpiOsPrintf ("%20s : %p", Name, Next); 519*385cc6b4SJerry Jelinek if (Next) 520*385cc6b4SJerry Jelinek { 521*385cc6b4SJerry Jelinek AcpiOsPrintf ("(%s %2.2X)", 522*385cc6b4SJerry Jelinek AcpiUtGetObjectTypeName (Next), 523*385cc6b4SJerry Jelinek Next->AddressSpace.SpaceId); 524*385cc6b4SJerry Jelinek 525*385cc6b4SJerry Jelinek while (Next->AddressSpace.Next) 526*385cc6b4SJerry Jelinek { 527*385cc6b4SJerry Jelinek if ((Next->Common.Type == ACPI_TYPE_LOCAL_DATA) && 528*385cc6b4SJerry Jelinek !Data) 529*385cc6b4SJerry Jelinek { 530*385cc6b4SJerry Jelinek Data = Next; 531*385cc6b4SJerry Jelinek } 532*385cc6b4SJerry Jelinek 533*385cc6b4SJerry Jelinek Next = Next->AddressSpace.Next; 534*385cc6b4SJerry Jelinek AcpiOsPrintf ("->%p(%s %2.2X)", Next, 535*385cc6b4SJerry Jelinek AcpiUtGetObjectTypeName (Next), 536*385cc6b4SJerry Jelinek Next->AddressSpace.SpaceId); 537*385cc6b4SJerry Jelinek 538*385cc6b4SJerry Jelinek if ((Next == Start) || (Next == Data)) 539*385cc6b4SJerry Jelinek { 540*385cc6b4SJerry Jelinek AcpiOsPrintf ( 541*385cc6b4SJerry Jelinek "\n**** Error: Handler list appears to be circular linked"); 542*385cc6b4SJerry Jelinek break; 543*385cc6b4SJerry Jelinek } 544*385cc6b4SJerry Jelinek } 545*385cc6b4SJerry Jelinek } 546*385cc6b4SJerry Jelinek 547*385cc6b4SJerry Jelinek AcpiOsPrintf ("\n"); 548*385cc6b4SJerry Jelinek break; 549*385cc6b4SJerry Jelinek 550*385cc6b4SJerry Jelinek case ACPI_EXD_RGN_LIST: 551*385cc6b4SJerry Jelinek 552*385cc6b4SJerry Jelinek Start = *ACPI_CAST_PTR (void *, Target); 553*385cc6b4SJerry Jelinek Next = Start; 554*385cc6b4SJerry Jelinek 555*385cc6b4SJerry Jelinek AcpiOsPrintf ("%20s : %p", Name, Next); 556*385cc6b4SJerry Jelinek if (Next) 557*385cc6b4SJerry Jelinek { 558*385cc6b4SJerry Jelinek AcpiOsPrintf ("(%s %2.2X)", 559*385cc6b4SJerry Jelinek AcpiUtGetObjectTypeName (Next), Next->Common.Type); 560*385cc6b4SJerry Jelinek 561*385cc6b4SJerry Jelinek while (Next->Region.Next) 562*385cc6b4SJerry Jelinek { 563*385cc6b4SJerry Jelinek if ((Next->Common.Type == ACPI_TYPE_LOCAL_DATA) && 564*385cc6b4SJerry Jelinek !Data) 565*385cc6b4SJerry Jelinek { 566*385cc6b4SJerry Jelinek Data = Next; 567*385cc6b4SJerry Jelinek } 568*385cc6b4SJerry Jelinek 569*385cc6b4SJerry Jelinek Next = Next->Region.Next; 570*385cc6b4SJerry Jelinek AcpiOsPrintf ("->%p(%s %2.2X)", Next, 571*385cc6b4SJerry Jelinek AcpiUtGetObjectTypeName (Next), Next->Common.Type); 572*385cc6b4SJerry Jelinek 573*385cc6b4SJerry Jelinek if ((Next == Start) || (Next == Data)) 574*385cc6b4SJerry Jelinek { 575*385cc6b4SJerry Jelinek AcpiOsPrintf ( 576*385cc6b4SJerry Jelinek "\n**** Error: Region list appears to be circular linked"); 577*385cc6b4SJerry Jelinek break; 578*385cc6b4SJerry Jelinek } 579*385cc6b4SJerry Jelinek } 580*385cc6b4SJerry Jelinek } 581*385cc6b4SJerry Jelinek 582*385cc6b4SJerry Jelinek AcpiOsPrintf ("\n"); 583*385cc6b4SJerry Jelinek break; 584*385cc6b4SJerry Jelinek 585*385cc6b4SJerry Jelinek case ACPI_EXD_NODE: 586*385cc6b4SJerry Jelinek 587*385cc6b4SJerry Jelinek Node = *ACPI_CAST_PTR (ACPI_NAMESPACE_NODE *, Target); 588*385cc6b4SJerry Jelinek 589*385cc6b4SJerry Jelinek AcpiOsPrintf ("%20s : %p", Name, Node); 590*385cc6b4SJerry Jelinek if (Node) 591*385cc6b4SJerry Jelinek { 592*385cc6b4SJerry Jelinek AcpiOsPrintf (" [%4.4s]", Node->Name.Ascii); 593*385cc6b4SJerry Jelinek } 594*385cc6b4SJerry Jelinek AcpiOsPrintf ("\n"); 595*385cc6b4SJerry Jelinek break; 596*385cc6b4SJerry Jelinek 597db2bae30SDana Myers default: 598aa2aa9a6SDana Myers 599aa2aa9a6SDana Myers AcpiOsPrintf ("**** Invalid table opcode [%X] ****\n", 600aa2aa9a6SDana Myers Info->Opcode); 601db2bae30SDana Myers return; 602db2bae30SDana Myers } 603db2bae30SDana Myers 604db2bae30SDana Myers Info++; 605db2bae30SDana Myers Count--; 606db2bae30SDana Myers } 607db2bae30SDana Myers } 608db2bae30SDana Myers 609db2bae30SDana Myers 610db2bae30SDana Myers /******************************************************************************* 611db2bae30SDana Myers * 612db2bae30SDana Myers * FUNCTION: AcpiExDumpOperand 613db2bae30SDana Myers * 614db2bae30SDana Myers * PARAMETERS: *ObjDesc - Pointer to entry to be dumped 615db2bae30SDana Myers * Depth - Current nesting depth 616db2bae30SDana Myers * 617db2bae30SDana Myers * RETURN: None 618db2bae30SDana Myers * 619db2bae30SDana Myers * DESCRIPTION: Dump an operand object 620db2bae30SDana Myers * 621db2bae30SDana Myers ******************************************************************************/ 622db2bae30SDana Myers 623db2bae30SDana Myers void 624db2bae30SDana Myers AcpiExDumpOperand ( 625db2bae30SDana Myers ACPI_OPERAND_OBJECT *ObjDesc, 626db2bae30SDana Myers UINT32 Depth) 627db2bae30SDana Myers { 628db2bae30SDana Myers UINT32 Length; 629db2bae30SDana Myers UINT32 Index; 630db2bae30SDana Myers 631db2bae30SDana Myers 632db2bae30SDana Myers ACPI_FUNCTION_NAME (ExDumpOperand) 633db2bae30SDana Myers 634db2bae30SDana Myers 635*385cc6b4SJerry Jelinek /* Check if debug output enabled */ 636*385cc6b4SJerry Jelinek 637*385cc6b4SJerry Jelinek if (!ACPI_IS_DEBUG_ENABLED (ACPI_LV_EXEC, _COMPONENT)) 638db2bae30SDana Myers { 639db2bae30SDana Myers return; 640db2bae30SDana Myers } 641db2bae30SDana Myers 642db2bae30SDana Myers if (!ObjDesc) 643db2bae30SDana Myers { 644db2bae30SDana Myers /* This could be a null element of a package */ 645db2bae30SDana Myers 646db2bae30SDana Myers ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "Null Object Descriptor\n")); 647db2bae30SDana Myers return; 648db2bae30SDana Myers } 649db2bae30SDana Myers 650db2bae30SDana Myers if (ACPI_GET_DESCRIPTOR_TYPE (ObjDesc) == ACPI_DESC_TYPE_NAMED) 651db2bae30SDana Myers { 652db2bae30SDana Myers ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "%p Namespace Node: ", ObjDesc)); 653db2bae30SDana Myers ACPI_DUMP_ENTRY (ObjDesc, ACPI_LV_EXEC); 654db2bae30SDana Myers return; 655db2bae30SDana Myers } 656db2bae30SDana Myers 657db2bae30SDana Myers if (ACPI_GET_DESCRIPTOR_TYPE (ObjDesc) != ACPI_DESC_TYPE_OPERAND) 658db2bae30SDana Myers { 659db2bae30SDana Myers ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, 660db2bae30SDana Myers "%p is not a node or operand object: [%s]\n", 661db2bae30SDana Myers ObjDesc, AcpiUtGetDescriptorName (ObjDesc))); 662db2bae30SDana Myers ACPI_DUMP_BUFFER (ObjDesc, sizeof (ACPI_OPERAND_OBJECT)); 663db2bae30SDana Myers return; 664db2bae30SDana Myers } 665db2bae30SDana Myers 666db2bae30SDana Myers /* ObjDesc is a valid object */ 667db2bae30SDana Myers 668db2bae30SDana Myers if (Depth > 0) 669db2bae30SDana Myers { 670db2bae30SDana Myers ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "%*s[%u] %p ", 671db2bae30SDana Myers Depth, " ", Depth, ObjDesc)); 672db2bae30SDana Myers } 673db2bae30SDana Myers else 674db2bae30SDana Myers { 675db2bae30SDana Myers ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "%p ", ObjDesc)); 676db2bae30SDana Myers } 677db2bae30SDana Myers 678db2bae30SDana Myers /* Decode object type */ 679db2bae30SDana Myers 680aa2aa9a6SDana Myers switch (ObjDesc->Common.Type) 681db2bae30SDana Myers { 682db2bae30SDana Myers case ACPI_TYPE_LOCAL_REFERENCE: 683db2bae30SDana Myers 684*385cc6b4SJerry Jelinek AcpiOsPrintf ("Reference: [%s] ", 685*385cc6b4SJerry Jelinek AcpiUtGetReferenceName (ObjDesc)); 686db2bae30SDana Myers 687db2bae30SDana Myers switch (ObjDesc->Reference.Class) 688db2bae30SDana Myers { 689db2bae30SDana Myers case ACPI_REFCLASS_DEBUG: 690db2bae30SDana Myers 691db2bae30SDana Myers AcpiOsPrintf ("\n"); 692db2bae30SDana Myers break; 693db2bae30SDana Myers 694db2bae30SDana Myers case ACPI_REFCLASS_INDEX: 695db2bae30SDana Myers 696db2bae30SDana Myers AcpiOsPrintf ("%p\n", ObjDesc->Reference.Object); 697db2bae30SDana Myers break; 698db2bae30SDana Myers 699db2bae30SDana Myers case ACPI_REFCLASS_TABLE: 700db2bae30SDana Myers 701db2bae30SDana Myers AcpiOsPrintf ("Table Index %X\n", ObjDesc->Reference.Value); 702db2bae30SDana Myers break; 703db2bae30SDana Myers 704db2bae30SDana Myers case ACPI_REFCLASS_REFOF: 705db2bae30SDana Myers 706db2bae30SDana Myers AcpiOsPrintf ("%p [%s]\n", ObjDesc->Reference.Object, 707db2bae30SDana Myers AcpiUtGetTypeName (((ACPI_OPERAND_OBJECT *) 708db2bae30SDana Myers ObjDesc->Reference.Object)->Common.Type)); 709db2bae30SDana Myers break; 710db2bae30SDana Myers 711db2bae30SDana Myers case ACPI_REFCLASS_NAME: 712db2bae30SDana Myers 713*385cc6b4SJerry Jelinek AcpiOsPrintf ("- [%4.4s]\n", 714*385cc6b4SJerry Jelinek ObjDesc->Reference.Node->Name.Ascii); 715db2bae30SDana Myers break; 716db2bae30SDana Myers 717aa2aa9a6SDana Myers case ACPI_REFCLASS_ARG: 718aa2aa9a6SDana Myers case ACPI_REFCLASS_LOCAL: 719aa2aa9a6SDana Myers 720aa2aa9a6SDana Myers AcpiOsPrintf ("%X\n", ObjDesc->Reference.Value); 721aa2aa9a6SDana Myers break; 722aa2aa9a6SDana Myers 723db2bae30SDana Myers default: /* Unknown reference class */ 724db2bae30SDana Myers 725db2bae30SDana Myers AcpiOsPrintf ("%2.2X\n", ObjDesc->Reference.Class); 726db2bae30SDana Myers break; 727db2bae30SDana Myers } 728db2bae30SDana Myers break; 729db2bae30SDana Myers 730db2bae30SDana Myers case ACPI_TYPE_BUFFER: 731db2bae30SDana Myers 732db2bae30SDana Myers AcpiOsPrintf ("Buffer length %.2X @ %p\n", 733db2bae30SDana Myers ObjDesc->Buffer.Length, ObjDesc->Buffer.Pointer); 734db2bae30SDana Myers 735db2bae30SDana Myers /* Debug only -- dump the buffer contents */ 736db2bae30SDana Myers 737db2bae30SDana Myers if (ObjDesc->Buffer.Pointer) 738db2bae30SDana Myers { 739db2bae30SDana Myers Length = ObjDesc->Buffer.Length; 740db2bae30SDana Myers if (Length > 128) 741db2bae30SDana Myers { 742db2bae30SDana Myers Length = 128; 743db2bae30SDana Myers } 744db2bae30SDana Myers 745*385cc6b4SJerry Jelinek AcpiOsPrintf ( 746*385cc6b4SJerry Jelinek "Buffer Contents: (displaying length 0x%.2X)\n", Length); 747db2bae30SDana Myers ACPI_DUMP_BUFFER (ObjDesc->Buffer.Pointer, Length); 748db2bae30SDana Myers } 749db2bae30SDana Myers break; 750db2bae30SDana Myers 751db2bae30SDana Myers case ACPI_TYPE_INTEGER: 752db2bae30SDana Myers 753db2bae30SDana Myers AcpiOsPrintf ("Integer %8.8X%8.8X\n", 754db2bae30SDana Myers ACPI_FORMAT_UINT64 (ObjDesc->Integer.Value)); 755db2bae30SDana Myers break; 756db2bae30SDana Myers 757db2bae30SDana Myers case ACPI_TYPE_PACKAGE: 758db2bae30SDana Myers 759db2bae30SDana Myers AcpiOsPrintf ("Package [Len %X] ElementArray %p\n", 760db2bae30SDana Myers ObjDesc->Package.Count, ObjDesc->Package.Elements); 761db2bae30SDana Myers 762db2bae30SDana Myers /* 763db2bae30SDana Myers * If elements exist, package element pointer is valid, 764db2bae30SDana Myers * and debug_level exceeds 1, dump package's elements. 765db2bae30SDana Myers */ 766db2bae30SDana Myers if (ObjDesc->Package.Count && 767db2bae30SDana Myers ObjDesc->Package.Elements && 768db2bae30SDana Myers AcpiDbgLevel > 1) 769db2bae30SDana Myers { 770db2bae30SDana Myers for (Index = 0; Index < ObjDesc->Package.Count; Index++) 771db2bae30SDana Myers { 772*385cc6b4SJerry Jelinek AcpiExDumpOperand ( 773*385cc6b4SJerry Jelinek ObjDesc->Package.Elements[Index], Depth + 1); 774db2bae30SDana Myers } 775db2bae30SDana Myers } 776db2bae30SDana Myers break; 777db2bae30SDana Myers 778db2bae30SDana Myers case ACPI_TYPE_REGION: 779db2bae30SDana Myers 780db2bae30SDana Myers AcpiOsPrintf ("Region %s (%X)", 781db2bae30SDana Myers AcpiUtGetRegionName (ObjDesc->Region.SpaceId), 782db2bae30SDana Myers ObjDesc->Region.SpaceId); 783db2bae30SDana Myers 784db2bae30SDana Myers /* 785db2bae30SDana Myers * If the address and length have not been evaluated, 786db2bae30SDana Myers * don't print them. 787db2bae30SDana Myers */ 788db2bae30SDana Myers if (!(ObjDesc->Region.Flags & AOPOBJ_DATA_VALID)) 789db2bae30SDana Myers { 790db2bae30SDana Myers AcpiOsPrintf ("\n"); 791db2bae30SDana Myers } 792db2bae30SDana Myers else 793db2bae30SDana Myers { 794db2bae30SDana Myers AcpiOsPrintf (" base %8.8X%8.8X Length %X\n", 795*385cc6b4SJerry Jelinek ACPI_FORMAT_UINT64 (ObjDesc->Region.Address), 796db2bae30SDana Myers ObjDesc->Region.Length); 797db2bae30SDana Myers } 798db2bae30SDana Myers break; 799db2bae30SDana Myers 800db2bae30SDana Myers case ACPI_TYPE_STRING: 801db2bae30SDana Myers 802db2bae30SDana Myers AcpiOsPrintf ("String length %X @ %p ", 803db2bae30SDana Myers ObjDesc->String.Length, 804db2bae30SDana Myers ObjDesc->String.Pointer); 805db2bae30SDana Myers 806db2bae30SDana Myers AcpiUtPrintString (ObjDesc->String.Pointer, ACPI_UINT8_MAX); 807db2bae30SDana Myers AcpiOsPrintf ("\n"); 808db2bae30SDana Myers break; 809db2bae30SDana Myers 810db2bae30SDana Myers case ACPI_TYPE_LOCAL_BANK_FIELD: 811db2bae30SDana Myers 812db2bae30SDana Myers AcpiOsPrintf ("BankField\n"); 813db2bae30SDana Myers break; 814db2bae30SDana Myers 815db2bae30SDana Myers case ACPI_TYPE_LOCAL_REGION_FIELD: 816db2bae30SDana Myers 817aa2aa9a6SDana Myers AcpiOsPrintf ("RegionField: Bits=%X AccWidth=%X Lock=%X Update=%X at " 818aa2aa9a6SDana Myers "byte=%X bit=%X of below:\n", 819db2bae30SDana Myers ObjDesc->Field.BitLength, 820db2bae30SDana Myers ObjDesc->Field.AccessByteWidth, 821db2bae30SDana Myers ObjDesc->Field.FieldFlags & AML_FIELD_LOCK_RULE_MASK, 822db2bae30SDana Myers ObjDesc->Field.FieldFlags & AML_FIELD_UPDATE_RULE_MASK, 823db2bae30SDana Myers ObjDesc->Field.BaseByteOffset, 824db2bae30SDana Myers ObjDesc->Field.StartFieldBitOffset); 825db2bae30SDana Myers 826db2bae30SDana Myers AcpiExDumpOperand (ObjDesc->Field.RegionObj, Depth + 1); 827db2bae30SDana Myers break; 828db2bae30SDana Myers 829db2bae30SDana Myers case ACPI_TYPE_LOCAL_INDEX_FIELD: 830db2bae30SDana Myers 831db2bae30SDana Myers AcpiOsPrintf ("IndexField\n"); 832db2bae30SDana Myers break; 833db2bae30SDana Myers 834db2bae30SDana Myers case ACPI_TYPE_BUFFER_FIELD: 835db2bae30SDana Myers 836aa2aa9a6SDana Myers AcpiOsPrintf ("BufferField: %X bits at byte %X bit %X of\n", 837db2bae30SDana Myers ObjDesc->BufferField.BitLength, 838db2bae30SDana Myers ObjDesc->BufferField.BaseByteOffset, 839db2bae30SDana Myers ObjDesc->BufferField.StartFieldBitOffset); 840db2bae30SDana Myers 841db2bae30SDana Myers if (!ObjDesc->BufferField.BufferObj) 842db2bae30SDana Myers { 843db2bae30SDana Myers ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "*NULL*\n")); 844db2bae30SDana Myers } 845aa2aa9a6SDana Myers else if ((ObjDesc->BufferField.BufferObj)->Common.Type != 846db2bae30SDana Myers ACPI_TYPE_BUFFER) 847db2bae30SDana Myers { 848db2bae30SDana Myers AcpiOsPrintf ("*not a Buffer*\n"); 849db2bae30SDana Myers } 850db2bae30SDana Myers else 851db2bae30SDana Myers { 852db2bae30SDana Myers AcpiExDumpOperand (ObjDesc->BufferField.BufferObj, Depth + 1); 853db2bae30SDana Myers } 854db2bae30SDana Myers break; 855db2bae30SDana Myers 856db2bae30SDana Myers case ACPI_TYPE_EVENT: 857db2bae30SDana Myers 858db2bae30SDana Myers AcpiOsPrintf ("Event\n"); 859db2bae30SDana Myers break; 860db2bae30SDana Myers 861db2bae30SDana Myers case ACPI_TYPE_METHOD: 862db2bae30SDana Myers 863db2bae30SDana Myers AcpiOsPrintf ("Method(%X) @ %p:%X\n", 864db2bae30SDana Myers ObjDesc->Method.ParamCount, 865db2bae30SDana Myers ObjDesc->Method.AmlStart, 866db2bae30SDana Myers ObjDesc->Method.AmlLength); 867db2bae30SDana Myers break; 868db2bae30SDana Myers 869db2bae30SDana Myers case ACPI_TYPE_MUTEX: 870db2bae30SDana Myers 871db2bae30SDana Myers AcpiOsPrintf ("Mutex\n"); 872db2bae30SDana Myers break; 873db2bae30SDana Myers 874db2bae30SDana Myers case ACPI_TYPE_DEVICE: 875db2bae30SDana Myers 876db2bae30SDana Myers AcpiOsPrintf ("Device\n"); 877db2bae30SDana Myers break; 878db2bae30SDana Myers 879db2bae30SDana Myers case ACPI_TYPE_POWER: 880db2bae30SDana Myers 881db2bae30SDana Myers AcpiOsPrintf ("Power\n"); 882db2bae30SDana Myers break; 883db2bae30SDana Myers 884db2bae30SDana Myers case ACPI_TYPE_PROCESSOR: 885db2bae30SDana Myers 886db2bae30SDana Myers AcpiOsPrintf ("Processor\n"); 887db2bae30SDana Myers break; 888db2bae30SDana Myers 889db2bae30SDana Myers case ACPI_TYPE_THERMAL: 890db2bae30SDana Myers 891db2bae30SDana Myers AcpiOsPrintf ("Thermal\n"); 892db2bae30SDana Myers break; 893db2bae30SDana Myers 894db2bae30SDana Myers default: 895*385cc6b4SJerry Jelinek 896db2bae30SDana Myers /* Unknown Type */ 897db2bae30SDana Myers 898aa2aa9a6SDana Myers AcpiOsPrintf ("Unknown Type %X\n", ObjDesc->Common.Type); 899db2bae30SDana Myers break; 900db2bae30SDana Myers } 901db2bae30SDana Myers 902db2bae30SDana Myers return; 903db2bae30SDana Myers } 904db2bae30SDana Myers 905db2bae30SDana Myers 906db2bae30SDana Myers /******************************************************************************* 907db2bae30SDana Myers * 908db2bae30SDana Myers * FUNCTION: AcpiExDumpOperands 909db2bae30SDana Myers * 910db2bae30SDana Myers * PARAMETERS: Operands - A list of Operand objects 911db2bae30SDana Myers * OpcodeName - AML opcode name 912db2bae30SDana Myers * NumOperands - Operand count for this opcode 913db2bae30SDana Myers * 914db2bae30SDana Myers * DESCRIPTION: Dump the operands associated with the opcode 915db2bae30SDana Myers * 916db2bae30SDana Myers ******************************************************************************/ 917db2bae30SDana Myers 918db2bae30SDana Myers void 919db2bae30SDana Myers AcpiExDumpOperands ( 920db2bae30SDana Myers ACPI_OPERAND_OBJECT **Operands, 921db2bae30SDana Myers const char *OpcodeName, 922db2bae30SDana Myers UINT32 NumOperands) 923db2bae30SDana Myers { 924db2bae30SDana Myers ACPI_FUNCTION_NAME (ExDumpOperands); 925db2bae30SDana Myers 926db2bae30SDana Myers 927db2bae30SDana Myers if (!OpcodeName) 928db2bae30SDana Myers { 929db2bae30SDana Myers OpcodeName = "UNKNOWN"; 930db2bae30SDana Myers } 931db2bae30SDana Myers 932db2bae30SDana Myers ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, 93326f3cdf0SGordon Ross "**** Start operand dump for opcode [%s], %u operands\n", 934db2bae30SDana Myers OpcodeName, NumOperands)); 935db2bae30SDana Myers 936db2bae30SDana Myers if (NumOperands == 0) 937db2bae30SDana Myers { 938db2bae30SDana Myers NumOperands = 1; 939db2bae30SDana Myers } 940db2bae30SDana Myers 941db2bae30SDana Myers /* Dump the individual operands */ 942db2bae30SDana Myers 943db2bae30SDana Myers while (NumOperands) 944db2bae30SDana Myers { 945db2bae30SDana Myers AcpiExDumpOperand (*Operands, 0); 946db2bae30SDana Myers Operands++; 947db2bae30SDana Myers NumOperands--; 948db2bae30SDana Myers } 949db2bae30SDana Myers 950db2bae30SDana Myers ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, 951db2bae30SDana Myers "**** End operand dump for [%s]\n", OpcodeName)); 952db2bae30SDana Myers return; 953db2bae30SDana Myers } 954db2bae30SDana Myers 955db2bae30SDana Myers 956db2bae30SDana Myers /******************************************************************************* 957db2bae30SDana Myers * 958db2bae30SDana Myers * FUNCTION: AcpiExOut* functions 959db2bae30SDana Myers * 960db2bae30SDana Myers * PARAMETERS: Title - Descriptive text 961db2bae30SDana Myers * Value - Value to be displayed 962db2bae30SDana Myers * 963db2bae30SDana Myers * DESCRIPTION: Object dump output formatting functions. These functions 964db2bae30SDana Myers * reduce the number of format strings required and keeps them 965db2bae30SDana Myers * all in one place for easy modification. 966db2bae30SDana Myers * 967db2bae30SDana Myers ******************************************************************************/ 968db2bae30SDana Myers 969db2bae30SDana Myers static void 970db2bae30SDana Myers AcpiExOutString ( 971*385cc6b4SJerry Jelinek const char *Title, 972*385cc6b4SJerry Jelinek const char *Value) 973db2bae30SDana Myers { 974db2bae30SDana Myers AcpiOsPrintf ("%20s : %s\n", Title, Value); 975db2bae30SDana Myers } 976db2bae30SDana Myers 977db2bae30SDana Myers static void 978db2bae30SDana Myers AcpiExOutPointer ( 979*385cc6b4SJerry Jelinek const char *Title, 980*385cc6b4SJerry Jelinek const void *Value) 981db2bae30SDana Myers { 982db2bae30SDana Myers AcpiOsPrintf ("%20s : %p\n", Title, Value); 983db2bae30SDana Myers } 984db2bae30SDana Myers 985db2bae30SDana Myers 986db2bae30SDana Myers /******************************************************************************* 987db2bae30SDana Myers * 988db2bae30SDana Myers * FUNCTION: AcpiExDumpNamespaceNode 989db2bae30SDana Myers * 990db2bae30SDana Myers * PARAMETERS: Node - Descriptor to dump 991db2bae30SDana Myers * Flags - Force display if TRUE 992db2bae30SDana Myers * 993db2bae30SDana Myers * DESCRIPTION: Dumps the members of the given.Node 994db2bae30SDana Myers * 995db2bae30SDana Myers ******************************************************************************/ 996db2bae30SDana Myers 997db2bae30SDana Myers void 998db2bae30SDana Myers AcpiExDumpNamespaceNode ( 999db2bae30SDana Myers ACPI_NAMESPACE_NODE *Node, 1000db2bae30SDana Myers UINT32 Flags) 1001db2bae30SDana Myers { 1002db2bae30SDana Myers 1003db2bae30SDana Myers ACPI_FUNCTION_ENTRY (); 1004db2bae30SDana Myers 1005db2bae30SDana Myers 1006db2bae30SDana Myers if (!Flags) 1007db2bae30SDana Myers { 1008*385cc6b4SJerry Jelinek /* Check if debug output enabled */ 1009*385cc6b4SJerry Jelinek 1010*385cc6b4SJerry Jelinek if (!ACPI_IS_DEBUG_ENABLED (ACPI_LV_OBJECTS, _COMPONENT)) 1011db2bae30SDana Myers { 1012db2bae30SDana Myers return; 1013db2bae30SDana Myers } 1014db2bae30SDana Myers } 1015db2bae30SDana Myers 1016db2bae30SDana Myers AcpiOsPrintf ("%20s : %4.4s\n", "Name", AcpiUtGetNodeName (Node)); 1017*385cc6b4SJerry Jelinek AcpiOsPrintf ("%20s : %2.2X [%s]\n", "Type", 1018*385cc6b4SJerry Jelinek Node->Type, AcpiUtGetTypeName (Node->Type)); 1019db2bae30SDana Myers 1020db2bae30SDana Myers AcpiExDumpObject (ACPI_CAST_PTR (ACPI_OPERAND_OBJECT, Node), 1021db2bae30SDana Myers AcpiExDumpNode); 1022db2bae30SDana Myers } 1023db2bae30SDana Myers 1024db2bae30SDana Myers 1025db2bae30SDana Myers /******************************************************************************* 1026db2bae30SDana Myers * 1027db2bae30SDana Myers * FUNCTION: AcpiExDumpReferenceObj 1028db2bae30SDana Myers * 1029db2bae30SDana Myers * PARAMETERS: Object - Descriptor to dump 1030db2bae30SDana Myers * 1031db2bae30SDana Myers * DESCRIPTION: Dumps a reference object 1032db2bae30SDana Myers * 1033db2bae30SDana Myers ******************************************************************************/ 1034db2bae30SDana Myers 1035db2bae30SDana Myers static void 1036db2bae30SDana Myers AcpiExDumpReferenceObj ( 1037db2bae30SDana Myers ACPI_OPERAND_OBJECT *ObjDesc) 1038db2bae30SDana Myers { 1039db2bae30SDana Myers ACPI_BUFFER RetBuf; 1040db2bae30SDana Myers ACPI_STATUS Status; 1041db2bae30SDana Myers 1042db2bae30SDana Myers 1043db2bae30SDana Myers RetBuf.Length = ACPI_ALLOCATE_LOCAL_BUFFER; 1044db2bae30SDana Myers 1045db2bae30SDana Myers if (ObjDesc->Reference.Class == ACPI_REFCLASS_NAME) 1046db2bae30SDana Myers { 1047db2bae30SDana Myers AcpiOsPrintf (" %p ", ObjDesc->Reference.Node); 1048db2bae30SDana Myers 1049*385cc6b4SJerry Jelinek Status = AcpiNsHandleToPathname (ObjDesc->Reference.Node, 1050*385cc6b4SJerry Jelinek &RetBuf, TRUE); 1051db2bae30SDana Myers if (ACPI_FAILURE (Status)) 1052db2bae30SDana Myers { 1053db2bae30SDana Myers AcpiOsPrintf (" Could not convert name to pathname\n"); 1054db2bae30SDana Myers } 1055db2bae30SDana Myers else 1056db2bae30SDana Myers { 1057db2bae30SDana Myers AcpiOsPrintf ("%s\n", (char *) RetBuf.Pointer); 1058db2bae30SDana Myers ACPI_FREE (RetBuf.Pointer); 1059db2bae30SDana Myers } 1060db2bae30SDana Myers } 1061db2bae30SDana Myers else if (ObjDesc->Reference.Object) 1062db2bae30SDana Myers { 1063db2bae30SDana Myers if (ACPI_GET_DESCRIPTOR_TYPE (ObjDesc) == ACPI_DESC_TYPE_OPERAND) 1064db2bae30SDana Myers { 1065*385cc6b4SJerry Jelinek AcpiOsPrintf ("%22s %p", "Target :", 1066*385cc6b4SJerry Jelinek ObjDesc->Reference.Object); 1067db2bae30SDana Myers if (ObjDesc->Reference.Class == ACPI_REFCLASS_TABLE) 1068db2bae30SDana Myers { 1069*385cc6b4SJerry Jelinek AcpiOsPrintf (" Table Index: %X\n", 1070*385cc6b4SJerry Jelinek ObjDesc->Reference.Value); 1071db2bae30SDana Myers } 1072db2bae30SDana Myers else 1073db2bae30SDana Myers { 1074*385cc6b4SJerry Jelinek AcpiOsPrintf (" [%s]\n", 1075db2bae30SDana Myers AcpiUtGetTypeName (((ACPI_OPERAND_OBJECT *) 1076db2bae30SDana Myers ObjDesc->Reference.Object)->Common.Type)); 1077db2bae30SDana Myers } 1078db2bae30SDana Myers } 1079db2bae30SDana Myers else 1080db2bae30SDana Myers { 1081aa2aa9a6SDana Myers AcpiOsPrintf (" Target: %p\n", ObjDesc->Reference.Object); 1082db2bae30SDana Myers } 1083db2bae30SDana Myers } 1084db2bae30SDana Myers } 1085db2bae30SDana Myers 1086db2bae30SDana Myers 1087db2bae30SDana Myers /******************************************************************************* 1088db2bae30SDana Myers * 1089db2bae30SDana Myers * FUNCTION: AcpiExDumpPackageObj 1090db2bae30SDana Myers * 1091db2bae30SDana Myers * PARAMETERS: ObjDesc - Descriptor to dump 1092db2bae30SDana Myers * Level - Indentation Level 1093db2bae30SDana Myers * Index - Package index for this object 1094db2bae30SDana Myers * 1095db2bae30SDana Myers * DESCRIPTION: Dumps the elements of the package 1096db2bae30SDana Myers * 1097db2bae30SDana Myers ******************************************************************************/ 1098db2bae30SDana Myers 1099db2bae30SDana Myers static void 1100db2bae30SDana Myers AcpiExDumpPackageObj ( 1101db2bae30SDana Myers ACPI_OPERAND_OBJECT *ObjDesc, 1102db2bae30SDana Myers UINT32 Level, 1103db2bae30SDana Myers UINT32 Index) 1104db2bae30SDana Myers { 1105db2bae30SDana Myers UINT32 i; 1106db2bae30SDana Myers 1107db2bae30SDana Myers 1108db2bae30SDana Myers /* Indentation and index output */ 1109db2bae30SDana Myers 1110db2bae30SDana Myers if (Level > 0) 1111db2bae30SDana Myers { 1112db2bae30SDana Myers for (i = 0; i < Level; i++) 1113db2bae30SDana Myers { 1114db2bae30SDana Myers AcpiOsPrintf (" "); 1115db2bae30SDana Myers } 1116db2bae30SDana Myers 1117db2bae30SDana Myers AcpiOsPrintf ("[%.2d] ", Index); 1118db2bae30SDana Myers } 1119db2bae30SDana Myers 1120db2bae30SDana Myers AcpiOsPrintf ("%p ", ObjDesc); 1121db2bae30SDana Myers 1122db2bae30SDana Myers /* Null package elements are allowed */ 1123db2bae30SDana Myers 1124db2bae30SDana Myers if (!ObjDesc) 1125db2bae30SDana Myers { 1126db2bae30SDana Myers AcpiOsPrintf ("[Null Object]\n"); 1127db2bae30SDana Myers return; 1128db2bae30SDana Myers } 1129db2bae30SDana Myers 1130db2bae30SDana Myers /* Packages may only contain a few object types */ 1131db2bae30SDana Myers 1132aa2aa9a6SDana Myers switch (ObjDesc->Common.Type) 1133db2bae30SDana Myers { 1134db2bae30SDana Myers case ACPI_TYPE_INTEGER: 1135db2bae30SDana Myers 1136db2bae30SDana Myers AcpiOsPrintf ("[Integer] = %8.8X%8.8X\n", 1137db2bae30SDana Myers ACPI_FORMAT_UINT64 (ObjDesc->Integer.Value)); 1138db2bae30SDana Myers break; 1139db2bae30SDana Myers 1140db2bae30SDana Myers case ACPI_TYPE_STRING: 1141db2bae30SDana Myers 1142db2bae30SDana Myers AcpiOsPrintf ("[String] Value: "); 1143*385cc6b4SJerry Jelinek AcpiUtPrintString (ObjDesc->String.Pointer, ACPI_UINT8_MAX); 1144db2bae30SDana Myers AcpiOsPrintf ("\n"); 1145db2bae30SDana Myers break; 1146db2bae30SDana Myers 1147db2bae30SDana Myers case ACPI_TYPE_BUFFER: 1148db2bae30SDana Myers 1149db2bae30SDana Myers AcpiOsPrintf ("[Buffer] Length %.2X = ", ObjDesc->Buffer.Length); 1150db2bae30SDana Myers if (ObjDesc->Buffer.Length) 1151db2bae30SDana Myers { 1152*385cc6b4SJerry Jelinek AcpiUtDebugDumpBuffer ( 1153*385cc6b4SJerry Jelinek ACPI_CAST_PTR (UINT8, ObjDesc->Buffer.Pointer), 1154db2bae30SDana Myers ObjDesc->Buffer.Length, DB_DWORD_DISPLAY, _COMPONENT); 1155db2bae30SDana Myers } 1156db2bae30SDana Myers else 1157db2bae30SDana Myers { 1158db2bae30SDana Myers AcpiOsPrintf ("\n"); 1159db2bae30SDana Myers } 1160db2bae30SDana Myers break; 1161db2bae30SDana Myers 1162db2bae30SDana Myers case ACPI_TYPE_PACKAGE: 1163db2bae30SDana Myers 116426f3cdf0SGordon Ross AcpiOsPrintf ("[Package] Contains %u Elements:\n", 1165db2bae30SDana Myers ObjDesc->Package.Count); 1166db2bae30SDana Myers 1167db2bae30SDana Myers for (i = 0; i < ObjDesc->Package.Count; i++) 1168db2bae30SDana Myers { 1169*385cc6b4SJerry Jelinek AcpiExDumpPackageObj ( 1170*385cc6b4SJerry Jelinek ObjDesc->Package.Elements[i], Level + 1, i); 1171db2bae30SDana Myers } 1172db2bae30SDana Myers break; 1173db2bae30SDana Myers 1174db2bae30SDana Myers case ACPI_TYPE_LOCAL_REFERENCE: 1175db2bae30SDana Myers 1176db2bae30SDana Myers AcpiOsPrintf ("[Object Reference] Type [%s] %2.2X", 1177db2bae30SDana Myers AcpiUtGetReferenceName (ObjDesc), 1178db2bae30SDana Myers ObjDesc->Reference.Class); 1179db2bae30SDana Myers AcpiExDumpReferenceObj (ObjDesc); 1180db2bae30SDana Myers break; 1181db2bae30SDana Myers 1182db2bae30SDana Myers default: 1183db2bae30SDana Myers 1184aa2aa9a6SDana Myers AcpiOsPrintf ("[Unknown Type] %X\n", ObjDesc->Common.Type); 1185db2bae30SDana Myers break; 1186db2bae30SDana Myers } 1187db2bae30SDana Myers } 1188db2bae30SDana Myers 1189db2bae30SDana Myers 1190db2bae30SDana Myers /******************************************************************************* 1191db2bae30SDana Myers * 1192db2bae30SDana Myers * FUNCTION: AcpiExDumpObjectDescriptor 1193db2bae30SDana Myers * 1194db2bae30SDana Myers * PARAMETERS: ObjDesc - Descriptor to dump 1195db2bae30SDana Myers * Flags - Force display if TRUE 1196db2bae30SDana Myers * 1197db2bae30SDana Myers * DESCRIPTION: Dumps the members of the object descriptor given. 1198db2bae30SDana Myers * 1199db2bae30SDana Myers ******************************************************************************/ 1200db2bae30SDana Myers 1201db2bae30SDana Myers void 1202db2bae30SDana Myers AcpiExDumpObjectDescriptor ( 1203db2bae30SDana Myers ACPI_OPERAND_OBJECT *ObjDesc, 1204db2bae30SDana Myers UINT32 Flags) 1205db2bae30SDana Myers { 1206db2bae30SDana Myers ACPI_FUNCTION_TRACE (ExDumpObjectDescriptor); 1207db2bae30SDana Myers 1208db2bae30SDana Myers 1209db2bae30SDana Myers if (!ObjDesc) 1210db2bae30SDana Myers { 1211db2bae30SDana Myers return_VOID; 1212db2bae30SDana Myers } 1213db2bae30SDana Myers 1214db2bae30SDana Myers if (!Flags) 1215db2bae30SDana Myers { 1216*385cc6b4SJerry Jelinek /* Check if debug output enabled */ 1217*385cc6b4SJerry Jelinek 1218*385cc6b4SJerry Jelinek if (!ACPI_IS_DEBUG_ENABLED (ACPI_LV_OBJECTS, _COMPONENT)) 1219db2bae30SDana Myers { 1220db2bae30SDana Myers return_VOID; 1221db2bae30SDana Myers } 1222db2bae30SDana Myers } 1223db2bae30SDana Myers 1224db2bae30SDana Myers if (ACPI_GET_DESCRIPTOR_TYPE (ObjDesc) == ACPI_DESC_TYPE_NAMED) 1225db2bae30SDana Myers { 1226db2bae30SDana Myers AcpiExDumpNamespaceNode ((ACPI_NAMESPACE_NODE *) ObjDesc, Flags); 1227db2bae30SDana Myers 1228db2bae30SDana Myers AcpiOsPrintf ("\nAttached Object (%p):\n", 1229db2bae30SDana Myers ((ACPI_NAMESPACE_NODE *) ObjDesc)->Object); 1230db2bae30SDana Myers 1231*385cc6b4SJerry Jelinek ObjDesc = ((ACPI_NAMESPACE_NODE *) ObjDesc)->Object; 1232*385cc6b4SJerry Jelinek goto DumpObject; 1233db2bae30SDana Myers } 1234db2bae30SDana Myers 1235db2bae30SDana Myers if (ACPI_GET_DESCRIPTOR_TYPE (ObjDesc) != ACPI_DESC_TYPE_OPERAND) 1236db2bae30SDana Myers { 1237db2bae30SDana Myers AcpiOsPrintf ( 1238*385cc6b4SJerry Jelinek "%p is not an ACPI operand object: [%s]\n", 1239db2bae30SDana Myers ObjDesc, AcpiUtGetDescriptorName (ObjDesc)); 1240db2bae30SDana Myers return_VOID; 1241db2bae30SDana Myers } 1242db2bae30SDana Myers 1243*385cc6b4SJerry Jelinek /* Validate the object type */ 1244*385cc6b4SJerry Jelinek 1245*385cc6b4SJerry Jelinek if (ObjDesc->Common.Type > ACPI_TYPE_LOCAL_MAX) 1246db2bae30SDana Myers { 1247*385cc6b4SJerry Jelinek AcpiOsPrintf ("Not a known object type: %2.2X\n", 1248*385cc6b4SJerry Jelinek ObjDesc->Common.Type); 1249db2bae30SDana Myers return_VOID; 1250db2bae30SDana Myers } 1251db2bae30SDana Myers 1252*385cc6b4SJerry Jelinek 1253*385cc6b4SJerry Jelinek DumpObject: 1254*385cc6b4SJerry Jelinek 1255db2bae30SDana Myers /* Common Fields */ 1256db2bae30SDana Myers 1257db2bae30SDana Myers AcpiExDumpObject (ObjDesc, AcpiExDumpCommon); 1258db2bae30SDana Myers 1259db2bae30SDana Myers /* Object-specific fields */ 1260db2bae30SDana Myers 1261db2bae30SDana Myers AcpiExDumpObject (ObjDesc, AcpiExDumpInfo[ObjDesc->Common.Type]); 1262*385cc6b4SJerry Jelinek 1263*385cc6b4SJerry Jelinek if (ObjDesc->Common.Type == ACPI_TYPE_REGION) 1264*385cc6b4SJerry Jelinek { 1265*385cc6b4SJerry Jelinek ObjDesc = ObjDesc->Common.NextObject; 1266*385cc6b4SJerry Jelinek if (ObjDesc->Common.Type > ACPI_TYPE_LOCAL_MAX) 1267*385cc6b4SJerry Jelinek { 1268*385cc6b4SJerry Jelinek AcpiOsPrintf ( 1269*385cc6b4SJerry Jelinek "Secondary object is not a known object type: %2.2X\n", 1270*385cc6b4SJerry Jelinek ObjDesc->Common.Type); 1271*385cc6b4SJerry Jelinek 1272*385cc6b4SJerry Jelinek return_VOID; 1273*385cc6b4SJerry Jelinek } 1274*385cc6b4SJerry Jelinek 1275*385cc6b4SJerry Jelinek AcpiOsPrintf ("\nExtra attached Object (%p):\n", ObjDesc); 1276*385cc6b4SJerry Jelinek AcpiExDumpObject (ObjDesc, AcpiExDumpInfo[ObjDesc->Common.Type]); 1277*385cc6b4SJerry Jelinek } 1278*385cc6b4SJerry Jelinek 1279db2bae30SDana Myers return_VOID; 1280db2bae30SDana Myers } 1281db2bae30SDana Myers 1282db2bae30SDana Myers #endif 1283