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