dmresrcl.c revision 102550
1/******************************************************************************* 2 * 3 * Module Name: dmresrcl.c - "Large" Resource Descriptor disassembly 4 * $Revision: 7 $ 5 * 6 ******************************************************************************/ 7 8/****************************************************************************** 9 * 10 * 1. Copyright Notice 11 * 12 * Some or all of this work - Copyright (c) 1999 - 2002, 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 118#include "acpi.h" 119#include "acdisasm.h" 120 121 122#ifdef ACPI_DISASSEMBLER 123 124#define _COMPONENT ACPI_CA_DEBUGGER 125 ACPI_MODULE_NAME ("dbresrcl") 126 127 128/******************************************************************************* 129 * 130 * FUNCTION: AcpiDmIoFlags 131 * 132 * PARAMETERS: Flags - Flag byte to be decoded 133 * 134 * RETURN: None 135 * 136 * DESCRIPTION: Decode the flags specific to IO Address space descriptors 137 * 138 ******************************************************************************/ 139 140void 141AcpiDmIoFlags ( 142 UINT8 Flags) 143{ 144 AcpiOsPrintf ("%s, %s, %s, %s,", 145 AcpiGbl_ConsumeDecode [(Flags & 1)], 146 AcpiGbl_MinDecode [(Flags & 0x4) >> 2], 147 AcpiGbl_MaxDecode [(Flags & 0x8) >> 3], 148 AcpiGbl_DECDecode [(Flags & 0x2) >> 1]); 149} 150 151 152/******************************************************************************* 153 * 154 * FUNCTION: AcpiDmMemoryFlags 155 * 156 * PARAMETERS: Flags - Flag byte to be decoded 157 * SpecificFlags - "Specific" flag byte to be decoded 158 * 159 * RETURN: None 160 * 161 * DESCRIPTION: Decode flags specific to Memory Address Space descriptors 162 * 163 ******************************************************************************/ 164 165void 166AcpiDmMemoryFlags ( 167 UINT8 Flags, 168 UINT8 SpecificFlags) 169{ 170 AcpiOsPrintf ("%s, %s, %s, %s, %s, %s,", 171 AcpiGbl_ConsumeDecode [(Flags & 1)], 172 AcpiGbl_DECDecode [(Flags & 0x2) >> 1], 173 AcpiGbl_MinDecode [(Flags & 0x4) >> 2], 174 AcpiGbl_MaxDecode [(Flags & 0x8) >> 3], 175 AcpiGbl_MEMDecode [(SpecificFlags & 0x6) >> 1], 176 AcpiGbl_RWDecode [(SpecificFlags & 0x1)]); 177} 178 179 180/******************************************************************************* 181 * 182 * FUNCTION: AcpiDmWordDescriptor 183 * 184 * PARAMETERS: Resource - Pointer to the resource descriptor 185 * Length - Length of the descriptor in bytes 186 * Level - Current source code indentation level 187 * 188 * RETURN: None 189 * 190 * DESCRIPTION: Decode a Word Address Space descriptor 191 * 192 ******************************************************************************/ 193 194void 195AcpiDmWordDescriptor ( 196 ASL_WORD_ADDRESS_DESC *Resource, 197 UINT32 Length, 198 UINT32 Level) 199{ 200 201 AcpiDmIndent (Level); 202 AcpiOsPrintf ("%s (", 203 AcpiGbl_WordDecode [(Resource->ResourceType & 3)]); 204 205 AcpiDmIoFlags (Resource->Flags); 206 207 if ((Resource->ResourceType & 0x3) == 1) 208 { 209 AcpiOsPrintf (" %s,", 210 AcpiGbl_RNGDecode [(Resource->SpecificFlags & 0x3)]); 211 } 212 213 /* The WORD values */ 214 215 AcpiOsPrintf ("\n"); 216 AcpiDmIndent (Level + 1); 217 AcpiOsPrintf ("0x%4.4X,\n", 218 (UINT32) Resource->Granularity); 219 AcpiDmIndent (Level + 1); 220 AcpiOsPrintf ("0x%4.4X,\n", 221 (UINT32) Resource->AddressMin); 222 AcpiDmIndent (Level + 1); 223 AcpiOsPrintf ("0x%4.4X,\n", 224 (UINT32) Resource->AddressMax); 225 AcpiDmIndent (Level + 1); 226 AcpiOsPrintf ("0x%4.4X,\n", 227 (UINT32) Resource->TranslationOffset); 228 AcpiDmIndent (Level + 1); 229 AcpiOsPrintf ("0x%4.4X", 230 (UINT32) Resource->AddressLength); 231 232 /* Optional fields */ 233 234 if (Length > 13) 235 { 236 AcpiOsPrintf (", 0x%2.2X", 237 (UINT32) Resource->OptionalFields[0]); 238 } 239 240 if (Length > 14) 241 { 242 AcpiOsPrintf (", %s", 243 &Resource->OptionalFields[1]); 244 } 245 AcpiOsPrintf (")\n"); 246} 247 248 249/******************************************************************************* 250 * 251 * FUNCTION: AcpiDmDwordDescriptor 252 * 253 * PARAMETERS: Resource - Pointer to the resource descriptor 254 * Length - Length of the descriptor in bytes 255 * Level - Current source code indentation level 256 * 257 * RETURN: None 258 * 259 * DESCRIPTION: Decode a DWord Address Space descriptor 260 * 261 ******************************************************************************/ 262 263void 264AcpiDmDwordDescriptor ( 265 ASL_DWORD_ADDRESS_DESC *Resource, 266 UINT32 Length, 267 UINT32 Level) 268{ 269 270 AcpiDmIndent (Level); 271 AcpiOsPrintf ("D%s (", 272 AcpiGbl_WordDecode [(Resource->ResourceType & 3)]); 273 274 if ((Resource->ResourceType & 0x3) == 1) 275 { 276 AcpiDmIoFlags (Resource->Flags); 277 AcpiOsPrintf (" %s,", 278 AcpiGbl_RNGDecode [(Resource->SpecificFlags & 0x3)]); 279 } 280 else 281 { 282 AcpiDmMemoryFlags (Resource->Flags, Resource->SpecificFlags); 283 } 284 285 /* The DWORD values */ 286 287 AcpiOsPrintf ("\n"); 288 AcpiDmIndent (Level + 1); 289 AcpiOsPrintf ("0x%8.8X,\n", 290 Resource->Granularity); 291 AcpiDmIndent (Level + 1); 292 AcpiOsPrintf ("0x%8.8X,\n", 293 Resource->AddressMin); 294 AcpiDmIndent (Level + 1); 295 AcpiOsPrintf ("0x%8.8X,\n", 296 Resource->AddressMax); 297 AcpiDmIndent (Level + 1); 298 AcpiOsPrintf ("0x%8.8X,\n", 299 Resource->TranslationOffset); 300 AcpiDmIndent (Level + 1); 301 AcpiOsPrintf ("0x%8.8X", 302 Resource->AddressLength); 303 304 /* Optional fields */ 305 306 if (Length > 23) 307 { 308 AcpiOsPrintf (", 0x%2.2X", 309 Resource->OptionalFields[0]); 310 } 311 if (Length > 24) 312 { 313 AcpiOsPrintf (", %s", 314 &Resource->OptionalFields[1]); 315 } 316 AcpiOsPrintf (")\n"); 317} 318 319 320/******************************************************************************* 321 * 322 * FUNCTION: AcpiDmQwordDescriptor 323 * 324 * PARAMETERS: Resource - Pointer to the resource descriptor 325 * Length - Length of the descriptor in bytes 326 * Level - Current source code indentation level 327 * 328 * RETURN: None 329 * 330 * DESCRIPTION: Decode a QWord Address Space descriptor 331 * 332 ******************************************************************************/ 333 334void 335AcpiDmQwordDescriptor ( 336 ASL_QWORD_ADDRESS_DESC *Resource, 337 UINT32 Length, 338 UINT32 Level) 339{ 340 341 AcpiDmIndent (Level); 342 AcpiOsPrintf ("Q%s (", 343 AcpiGbl_WordDecode [(Resource->ResourceType & 3)]); 344 345 if ((Resource->ResourceType & 0x3) == 1) 346 { 347 AcpiDmIoFlags (Resource->Flags); 348 AcpiOsPrintf (" %s,", 349 AcpiGbl_RNGDecode [(Resource->SpecificFlags & 0x3)]); 350 } 351 else 352 { 353 AcpiDmMemoryFlags (Resource->Flags, Resource->SpecificFlags); 354 } 355 356 /* The QWORD values */ 357 358 AcpiOsPrintf ("\n"); 359 AcpiDmIndent (Level + 1); 360 AcpiOsPrintf ("0x%8.8X%8.8X,\n", 361 ACPI_HIDWORD (ACPI_GET_ADDRESS (Resource->Granularity)), 362 ACPI_LODWORD (ACPI_GET_ADDRESS (Resource->Granularity))); 363 364 AcpiDmIndent (Level + 1); 365 AcpiOsPrintf ("0x%8.8X%8.8X,\n", 366 ACPI_HIDWORD (ACPI_GET_ADDRESS (Resource->AddressMin)), 367 ACPI_LODWORD (ACPI_GET_ADDRESS (Resource->AddressMin))); 368 369 AcpiDmIndent (Level + 1); 370 AcpiOsPrintf ("0x%8.8X%8.8X,\n", 371 ACPI_HIDWORD (ACPI_GET_ADDRESS (Resource->AddressMax)), 372 ACPI_LODWORD (ACPI_GET_ADDRESS (Resource->AddressMax))); 373 374 AcpiDmIndent (Level + 1); 375 AcpiOsPrintf ("0x%8.8X%8.8X,\n", 376 ACPI_HIDWORD (ACPI_GET_ADDRESS (Resource->TranslationOffset)), 377 ACPI_LODWORD (ACPI_GET_ADDRESS (Resource->TranslationOffset))); 378 379 AcpiDmIndent (Level + 1); 380 AcpiOsPrintf ("0x%8.8X%8.8X", 381 ACPI_HIDWORD (ACPI_GET_ADDRESS (Resource->AddressLength)), 382 ACPI_LODWORD (ACPI_GET_ADDRESS (Resource->AddressLength))); 383 384 /* Optional fields */ 385 386 if (Length > 43) 387 { 388 AcpiOsPrintf (", 0x%2.2X", 389 Resource->OptionalFields[0]); 390 } 391 if (Length > 44) 392 { 393 AcpiOsPrintf (", %s", 394 &Resource->OptionalFields[1]); 395 } 396 397 AcpiOsPrintf (")\n"); 398} 399 400 401/******************************************************************************* 402 * 403 * FUNCTION: AcpiDmMemory24Descriptor 404 * 405 * PARAMETERS: Resource - Pointer to the resource descriptor 406 * Length - Length of the descriptor in bytes 407 * Level - Current source code indentation level 408 * 409 * RETURN: None 410 * 411 * DESCRIPTION: Decode a Memory24 descriptor 412 * 413 ******************************************************************************/ 414 415void 416AcpiDmMemory24Descriptor ( 417 ASL_MEMORY_24_DESC *Resource, 418 UINT32 Length, 419 UINT32 Level) 420{ 421 422 AcpiDmIndent (Level); 423 AcpiOsPrintf ("Memory24 (%s, 0x%4.4X, 0x%4.4X, 0x%4.4X, 0x%4.4X)\n", 424 AcpiGbl_RWDecode [Resource->Information & 1], 425 (UINT32) Resource->AddressMin, 426 (UINT32) Resource->AddressMax, 427 (UINT32) Resource->Alignment, 428 (UINT32) Resource->RangeLength); 429} 430 431 432/******************************************************************************* 433 * 434 * FUNCTION: AcpiDmMemory32Descriptor 435 * 436 * PARAMETERS: Resource - Pointer to the resource descriptor 437 * Length - Length of the descriptor in bytes 438 * Level - Current source code indentation level 439 * 440 * RETURN: None 441 * 442 * DESCRIPTION: Decode a Memory32 descriptor 443 * 444 ******************************************************************************/ 445 446void 447AcpiDmMemory32Descriptor ( 448 ASL_MEMORY_32_DESC *Resource, 449 UINT32 Length, 450 UINT32 Level) 451{ 452 453 AcpiDmIndent (Level); 454 AcpiOsPrintf ("Memory32 (%s, 0x%8.8X, 0x%8.8X, 0x%8.8X, 0x%8.8X)\n", 455 AcpiGbl_RWDecode [Resource->Information & 1], 456 Resource->AddressMin, 457 Resource->AddressMax, 458 Resource->Alignment, 459 Resource->RangeLength); 460} 461 462 463/******************************************************************************* 464 * 465 * FUNCTION: AcpiDmFixedMem32Descriptor 466 * 467 * PARAMETERS: Resource - Pointer to the resource descriptor 468 * Length - Length of the descriptor in bytes 469 * Level - Current source code indentation level 470 * 471 * RETURN: None 472 * 473 * DESCRIPTION: Decode a Fixed Memory32 descriptor 474 * 475 ******************************************************************************/ 476 477void 478AcpiDmFixedMem32Descriptor ( 479 ASL_FIXED_MEMORY_32_DESC *Resource, 480 UINT32 Length, 481 UINT32 Level) 482{ 483 484 AcpiDmIndent (Level); 485 AcpiOsPrintf ("Memory32Fixed (%s, 0x%8.8X, 0x%8.8X)\n", 486 AcpiGbl_RWDecode [Resource->Information & 1], 487 Resource->BaseAddress, 488 Resource->RangeLength); 489} 490 491 492/******************************************************************************* 493 * 494 * FUNCTION: AcpiDmGenericRegisterDescriptor 495 * 496 * PARAMETERS: Resource - Pointer to the resource descriptor 497 * Length - Length of the descriptor in bytes 498 * Level - Current source code indentation level 499 * 500 * RETURN: None 501 * 502 * DESCRIPTION: Decode a Generic Register descriptor 503 * 504 ******************************************************************************/ 505 506void 507AcpiDmGenericRegisterDescriptor ( 508 ASL_GENERAL_REGISTER_DESC *Resource, 509 UINT32 Length, 510 UINT32 Level) 511{ 512 513 AcpiDmIndent (Level); 514 AcpiOsPrintf ("Register ("); 515 516 AcpiDmAddressSpace (Resource->AddressSpaceId); 517 518 AcpiOsPrintf ("0x%2.2X, 0x%2.2X, 0x%8.8X%8.8X)\n", 519 (UINT32) Resource->BitWidth, 520 (UINT32) Resource->BitOffset, 521 ACPI_HIDWORD (ACPI_GET_ADDRESS (Resource->Address)), 522 ACPI_LODWORD (ACPI_GET_ADDRESS (Resource->Address))); 523} 524 525 526/******************************************************************************* 527 * 528 * FUNCTION: AcpiDmInterruptDescriptor 529 * 530 * PARAMETERS: Resource - Pointer to the resource descriptor 531 * Length - Length of the descriptor in bytes 532 * Level - Current source code indentation level 533 * 534 * RETURN: None 535 * 536 * DESCRIPTION: Decode a extended Interrupt descriptor 537 * 538 ******************************************************************************/ 539 540void 541AcpiDmInterruptDescriptor ( 542 ASL_EXTENDED_XRUPT_DESC *Resource, 543 UINT32 Length, 544 UINT32 Level) 545{ 546 UINT32 i; 547 548 549 AcpiDmIndent (Level); 550 AcpiOsPrintf ("Interrupt (%s, %s, %s, %s)\n", 551 AcpiGbl_ConsumeDecode [(Resource->Flags & 1)], 552 AcpiGbl_HEDecode [(Resource->Flags >> 1) & 1], 553 AcpiGbl_LLDecode [(Resource->Flags >> 2) & 1], 554 AcpiGbl_SHRDecode [(Resource->Flags >> 3) & 1]); 555 556 /* TBD "Resource Source, optional */ 557 558 AcpiDmIndent (Level); 559 AcpiOsPrintf ("{\n"); 560 for (i = 0; i < Resource->TableLength; i++) 561 { 562 AcpiDmIndent (Level + 1); 563 AcpiOsPrintf ("0x%8.8X,\n", (UINT32) Resource->InterruptNumber[i]); 564 } 565 566 AcpiDmIndent (Level); 567 AcpiOsPrintf ("}\n"); 568} 569 570 571/******************************************************************************* 572 * 573 * FUNCTION: AcpiDmVendorLargeDescriptor 574 * 575 * PARAMETERS: Resource - Pointer to the resource descriptor 576 * Length - Length of the descriptor in bytes 577 * Level - Current source code indentation level 578 * 579 * RETURN: None 580 * 581 * DESCRIPTION: Decode a Vendor Large descriptor 582 * 583 ******************************************************************************/ 584 585void 586AcpiDmVendorLargeDescriptor ( 587 ASL_LARGE_VENDOR_DESC *Resource, 588 UINT32 Length, 589 UINT32 Level) 590{ 591 592 AcpiDmIndent (Level); 593 AcpiOsPrintf ("VendorLong ()\n"); 594 AcpiDmIndent (Level); 595 596 AcpiOsPrintf ("{\n"); 597 598 AcpiDmDisasmByteList (Level + 1, (UINT8 *) Resource->VendorDefined, Length); 599 AcpiDmIndent (Level); 600 AcpiOsPrintf ("}\n"); 601} 602 603 604#endif 605 606