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