dmresrcl.c revision 193341
1100966Siwasaki/******************************************************************************* 2100966Siwasaki * 3100966Siwasaki * Module Name: dmresrcl.c - "Large" Resource Descriptor disassembly 4100966Siwasaki * 5100966Siwasaki ******************************************************************************/ 6100966Siwasaki 7100966Siwasaki/****************************************************************************** 8100966Siwasaki * 9100966Siwasaki * 1. Copyright Notice 10100966Siwasaki * 11193267Sjkim * Some or all of this work - Copyright (c) 1999 - 2009, Intel Corp. 12100966Siwasaki * All rights reserved. 13100966Siwasaki * 14100966Siwasaki * 2. License 15100966Siwasaki * 16100966Siwasaki * 2.1. This is your license from Intel Corp. under its intellectual property 17100966Siwasaki * rights. You may have additional license terms from the party that provided 18100966Siwasaki * you this software, covering your right to use that party's intellectual 19100966Siwasaki * property rights. 20100966Siwasaki * 21100966Siwasaki * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a 22100966Siwasaki * copy of the source code appearing in this file ("Covered Code") an 23100966Siwasaki * irrevocable, perpetual, worldwide license under Intel's copyrights in the 24100966Siwasaki * base code distributed originally by Intel ("Original Intel Code") to copy, 25100966Siwasaki * make derivatives, distribute, use and display any portion of the Covered 26100966Siwasaki * Code in any form, with the right to sublicense such rights; and 27100966Siwasaki * 28100966Siwasaki * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent 29100966Siwasaki * license (with the right to sublicense), under only those claims of Intel 30100966Siwasaki * patents that are infringed by the Original Intel Code, to make, use, sell, 31100966Siwasaki * offer to sell, and import the Covered Code and derivative works thereof 32100966Siwasaki * solely to the minimum extent necessary to exercise the above copyright 33100966Siwasaki * license, and in no event shall the patent license extend to any additions 34100966Siwasaki * to or modifications of the Original Intel Code. No other license or right 35100966Siwasaki * is granted directly or by implication, estoppel or otherwise; 36100966Siwasaki * 37100966Siwasaki * The above copyright and patent license is granted only if the following 38100966Siwasaki * conditions are met: 39100966Siwasaki * 40100966Siwasaki * 3. Conditions 41100966Siwasaki * 42100966Siwasaki * 3.1. Redistribution of Source with Rights to Further Distribute Source. 43100966Siwasaki * Redistribution of source code of any substantial portion of the Covered 44100966Siwasaki * Code or modification with rights to further distribute source must include 45100966Siwasaki * the above Copyright Notice, the above License, this list of Conditions, 46100966Siwasaki * and the following Disclaimer and Export Compliance provision. In addition, 47100966Siwasaki * Licensee must cause all Covered Code to which Licensee contributes to 48100966Siwasaki * contain a file documenting the changes Licensee made to create that Covered 49100966Siwasaki * Code and the date of any change. Licensee must include in that file the 50100966Siwasaki * documentation of any changes made by any predecessor Licensee. Licensee 51100966Siwasaki * must include a prominent statement that the modification is derived, 52100966Siwasaki * directly or indirectly, from Original Intel Code. 53100966Siwasaki * 54100966Siwasaki * 3.2. Redistribution of Source with no Rights to Further Distribute Source. 55100966Siwasaki * Redistribution of source code of any substantial portion of the Covered 56100966Siwasaki * Code or modification without rights to further distribute source must 57100966Siwasaki * include the following Disclaimer and Export Compliance provision in the 58100966Siwasaki * documentation and/or other materials provided with distribution. In 59100966Siwasaki * addition, Licensee may not authorize further sublicense of source of any 60100966Siwasaki * portion of the Covered Code, and must include terms to the effect that the 61100966Siwasaki * license from Licensee to its licensee is limited to the intellectual 62100966Siwasaki * property embodied in the software Licensee provides to its licensee, and 63100966Siwasaki * not to intellectual property embodied in modifications its licensee may 64100966Siwasaki * make. 65100966Siwasaki * 66100966Siwasaki * 3.3. Redistribution of Executable. Redistribution in executable form of any 67100966Siwasaki * substantial portion of the Covered Code or modification must reproduce the 68100966Siwasaki * above Copyright Notice, and the following Disclaimer and Export Compliance 69100966Siwasaki * provision in the documentation and/or other materials provided with the 70100966Siwasaki * distribution. 71100966Siwasaki * 72100966Siwasaki * 3.4. Intel retains all right, title, and interest in and to the Original 73100966Siwasaki * Intel Code. 74100966Siwasaki * 75100966Siwasaki * 3.5. Neither the name Intel nor any other trademark owned or controlled by 76100966Siwasaki * Intel shall be used in advertising or otherwise to promote the sale, use or 77100966Siwasaki * other dealings in products derived from or relating to the Covered Code 78100966Siwasaki * without prior written authorization from Intel. 79100966Siwasaki * 80100966Siwasaki * 4. Disclaimer and Export Compliance 81100966Siwasaki * 82100966Siwasaki * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED 83100966Siwasaki * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE 84100966Siwasaki * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE, 85100966Siwasaki * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY 86100966Siwasaki * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY 87100966Siwasaki * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A 88100966Siwasaki * PARTICULAR PURPOSE. 89100966Siwasaki * 90100966Siwasaki * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES 91100966Siwasaki * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR 92100966Siwasaki * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT, 93100966Siwasaki * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY 94100966Siwasaki * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL 95100966Siwasaki * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS 96100966Siwasaki * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY 97100966Siwasaki * LIMITED REMEDY. 98100966Siwasaki * 99100966Siwasaki * 4.3. Licensee shall not export, either directly or indirectly, any of this 100100966Siwasaki * software or system incorporating such software without first obtaining any 101100966Siwasaki * required license or other approval from the U. S. Department of Commerce or 102100966Siwasaki * any other agency or department of the United States Government. In the 103100966Siwasaki * event Licensee exports any such software from the United States or 104100966Siwasaki * re-exports any such software from a foreign destination, Licensee shall 105100966Siwasaki * ensure that the distribution and export/re-export of the software is in 106100966Siwasaki * compliance with all laws, regulations, orders, or other restrictions of the 107100966Siwasaki * U.S. Export Administration Regulations. Licensee agrees that neither it nor 108100966Siwasaki * any of its subsidiaries will export/re-export any technical data, process, 109100966Siwasaki * software, or service, directly or indirectly, to any country for which the 110100966Siwasaki * United States government or any agency thereof requires an export license, 111100966Siwasaki * other governmental approval, or letter of assurance, without first obtaining 112100966Siwasaki * such license, approval or letter. 113100966Siwasaki * 114100966Siwasaki *****************************************************************************/ 115100966Siwasaki 116100966Siwasaki 117193341Sjkim#include <contrib/dev/acpica/include/acpi.h> 118193341Sjkim#include <contrib/dev/acpica/include/accommon.h> 119193341Sjkim#include <contrib/dev/acpica/include/acdisasm.h> 120100966Siwasaki 121100966Siwasaki 122100966Siwasaki#ifdef ACPI_DISASSEMBLER 123100966Siwasaki 124102550Siwasaki#define _COMPONENT ACPI_CA_DEBUGGER 125100966Siwasaki ACPI_MODULE_NAME ("dbresrcl") 126100966Siwasaki 127100966Siwasaki 128151937Sjkim/* Common names for address and memory descriptors */ 129151937Sjkim 130151937Sjkimstatic char *AcpiDmAddressNames[] = 131151937Sjkim{ 132167802Sjkim "Granularity", 133167802Sjkim "Range Minimum", 134167802Sjkim "Range Maximum", 135167802Sjkim "Translation Offset", 136167802Sjkim "Length" 137151937Sjkim}; 138151937Sjkim 139151937Sjkimstatic char *AcpiDmMemoryNames[] = 140151937Sjkim{ 141167802Sjkim "Range Minimum", 142167802Sjkim "Range Maximum", 143167802Sjkim "Alignment", 144167802Sjkim "Length" 145151937Sjkim}; 146151937Sjkim 147151937Sjkim 148151937Sjkim/* Local prototypes */ 149151937Sjkim 150151937Sjkimstatic void 151151937SjkimAcpiDmSpaceFlags ( 152151937Sjkim UINT8 Flags); 153151937Sjkim 154151937Sjkimstatic void 155151937SjkimAcpiDmIoFlags ( 156151937Sjkim UINT8 Flags); 157151937Sjkim 158151937Sjkimstatic void 159151937SjkimAcpiDmIoFlags2 ( 160151937Sjkim UINT8 SpecificFlags); 161151937Sjkim 162151937Sjkimstatic void 163151937SjkimAcpiDmMemoryFlags ( 164151937Sjkim UINT8 Flags, 165151937Sjkim UINT8 SpecificFlags); 166151937Sjkim 167151937Sjkimstatic void 168151937SjkimAcpiDmMemoryFlags2 ( 169151937Sjkim UINT8 SpecificFlags); 170151937Sjkim 171151937Sjkimstatic void 172151937SjkimAcpiDmResourceSource ( 173151937Sjkim AML_RESOURCE *Resource, 174151937Sjkim ACPI_SIZE MinimumLength, 175151937Sjkim UINT32 Length); 176151937Sjkim 177151937Sjkimstatic void 178151937SjkimAcpiDmAddressFields ( 179151937Sjkim void *Source, 180151937Sjkim UINT8 Type, 181151937Sjkim UINT32 Level); 182151937Sjkim 183151937Sjkimstatic void 184151937SjkimAcpiDmAddressPrefix ( 185151937Sjkim UINT8 Type); 186151937Sjkim 187151937Sjkimstatic void 188151937SjkimAcpiDmAddressCommon ( 189151937Sjkim AML_RESOURCE *Resource, 190151937Sjkim UINT8 Type, 191151937Sjkim UINT32 Level); 192151937Sjkim 193151937Sjkimstatic void 194151937SjkimAcpiDmAddressFlags ( 195151937Sjkim AML_RESOURCE *Resource); 196151937Sjkim 197151937Sjkim 198100966Siwasaki/******************************************************************************* 199100966Siwasaki * 200151937Sjkim * FUNCTION: AcpiDmMemoryFields 201151937Sjkim * 202151937Sjkim * PARAMETERS: Source - Pointer to the contiguous data fields 203151937Sjkim * Type - 16 or 32 (bit) 204151937Sjkim * Level - Current source code indentation level 205151937Sjkim * 206151937Sjkim * RETURN: None 207151937Sjkim * 208151937Sjkim * DESCRIPTION: Decode fields common to Memory24 and Memory32 descriptors 209151937Sjkim * 210151937Sjkim ******************************************************************************/ 211151937Sjkim 212151937Sjkimstatic void 213151937SjkimAcpiDmMemoryFields ( 214151937Sjkim void *Source, 215151937Sjkim UINT8 Type, 216151937Sjkim UINT32 Level) 217151937Sjkim{ 218193267Sjkim UINT32 i; 219151937Sjkim 220151937Sjkim 221151937Sjkim for (i = 0; i < 4; i++) 222151937Sjkim { 223151937Sjkim AcpiDmIndent (Level + 1); 224151937Sjkim 225151937Sjkim switch (Type) 226151937Sjkim { 227151937Sjkim case 16: 228167802Sjkim AcpiDmDumpInteger16 (ACPI_CAST_PTR (UINT16, Source)[i], 229167802Sjkim AcpiDmMemoryNames[i]); 230151937Sjkim break; 231151937Sjkim 232151937Sjkim case 32: 233167802Sjkim AcpiDmDumpInteger32 (ACPI_CAST_PTR (UINT32, Source)[i], 234167802Sjkim AcpiDmMemoryNames[i]); 235151937Sjkim break; 236151937Sjkim 237151937Sjkim default: 238151937Sjkim return; 239151937Sjkim } 240151937Sjkim } 241151937Sjkim} 242151937Sjkim 243151937Sjkim 244151937Sjkim/******************************************************************************* 245151937Sjkim * 246167802Sjkim * FUNCTION: AcpiDmAddressFields 247151937Sjkim * 248151937Sjkim * PARAMETERS: Source - Pointer to the contiguous data fields 249151937Sjkim * Type - 16, 32, or 64 (bit) 250151937Sjkim * Level - Current source code indentation level 251151937Sjkim * 252151937Sjkim * RETURN: None 253151937Sjkim * 254151937Sjkim * DESCRIPTION: Decode fields common to address descriptors 255151937Sjkim * 256151937Sjkim ******************************************************************************/ 257151937Sjkim 258151937Sjkimstatic void 259151937SjkimAcpiDmAddressFields ( 260151937Sjkim void *Source, 261151937Sjkim UINT8 Type, 262151937Sjkim UINT32 Level) 263151937Sjkim{ 264193267Sjkim UINT32 i; 265151937Sjkim 266151937Sjkim 267151937Sjkim AcpiOsPrintf ("\n"); 268151937Sjkim 269151937Sjkim for (i = 0; i < 5; i++) 270151937Sjkim { 271151937Sjkim AcpiDmIndent (Level + 1); 272151937Sjkim 273151937Sjkim switch (Type) 274151937Sjkim { 275151937Sjkim case 16: 276167802Sjkim AcpiDmDumpInteger16 (ACPI_CAST_PTR (UINT16, Source)[i], 277167802Sjkim AcpiDmAddressNames[i]); 278151937Sjkim break; 279151937Sjkim 280151937Sjkim case 32: 281167802Sjkim AcpiDmDumpInteger32 (ACPI_CAST_PTR (UINT32, Source)[i], 282167802Sjkim AcpiDmAddressNames[i]); 283151937Sjkim break; 284151937Sjkim 285151937Sjkim case 64: 286167802Sjkim AcpiDmDumpInteger64 (ACPI_CAST_PTR (UINT64, Source)[i], 287167802Sjkim AcpiDmAddressNames[i]); 288151937Sjkim break; 289151937Sjkim 290151937Sjkim default: 291151937Sjkim return; 292151937Sjkim } 293151937Sjkim } 294151937Sjkim} 295151937Sjkim 296151937Sjkim 297151937Sjkim/******************************************************************************* 298151937Sjkim * 299151937Sjkim * FUNCTION: AcpiDmAddressPrefix 300151937Sjkim * 301151937Sjkim * PARAMETERS: Type - Descriptor type 302151937Sjkim * 303151937Sjkim * RETURN: None 304151937Sjkim * 305151937Sjkim * DESCRIPTION: Emit name prefix representing the address descriptor type 306151937Sjkim * 307151937Sjkim ******************************************************************************/ 308151937Sjkim 309151937Sjkimstatic void 310151937SjkimAcpiDmAddressPrefix ( 311151937Sjkim UINT8 Type) 312151937Sjkim{ 313151937Sjkim 314151937Sjkim switch (Type) 315151937Sjkim { 316151937Sjkim case ACPI_RESOURCE_TYPE_ADDRESS16: 317151937Sjkim AcpiOsPrintf ("Word"); 318151937Sjkim break; 319151937Sjkim 320151937Sjkim case ACPI_RESOURCE_TYPE_ADDRESS32: 321151937Sjkim AcpiOsPrintf ("DWord"); 322151937Sjkim break; 323151937Sjkim 324151937Sjkim case ACPI_RESOURCE_TYPE_ADDRESS64: 325151937Sjkim AcpiOsPrintf ("QWord"); 326151937Sjkim break; 327151937Sjkim 328151937Sjkim case ACPI_RESOURCE_TYPE_EXTENDED_ADDRESS64: 329151937Sjkim AcpiOsPrintf ("Extended"); 330151937Sjkim break; 331151937Sjkim 332151937Sjkim default: 333151937Sjkim return; 334151937Sjkim } 335151937Sjkim} 336151937Sjkim 337151937Sjkim 338151937Sjkim/******************************************************************************* 339151937Sjkim * 340151937Sjkim * FUNCTION: AcpiDmAddressCommon 341151937Sjkim * 342151937Sjkim * PARAMETERS: Resource - Raw AML descriptor 343151937Sjkim * Type - Descriptor type 344151937Sjkim * Level - Current source code indentation level 345151937Sjkim * 346151937Sjkim * RETURN: None 347151937Sjkim * 348151937Sjkim * DESCRIPTION: Emit common name and flag fields common to address descriptors 349151937Sjkim * 350151937Sjkim ******************************************************************************/ 351151937Sjkim 352151937Sjkimstatic void 353151937SjkimAcpiDmAddressCommon ( 354151937Sjkim AML_RESOURCE *Resource, 355151937Sjkim UINT8 Type, 356151937Sjkim UINT32 Level) 357151937Sjkim{ 358151937Sjkim UINT8 ResourceType; 359151937Sjkim UINT8 SpecificFlags; 360151937Sjkim UINT8 Flags; 361151937Sjkim 362151937Sjkim 363151937Sjkim ResourceType = Resource->Address.ResourceType; 364151937Sjkim SpecificFlags = Resource->Address.SpecificFlags; 365151937Sjkim Flags = Resource->Address.Flags; 366151937Sjkim 367151937Sjkim AcpiDmIndent (Level); 368151937Sjkim 369151937Sjkim /* Validate ResourceType */ 370151937Sjkim 371151937Sjkim if ((ResourceType > 2) && (ResourceType < 0xC0)) 372151937Sjkim { 373151937Sjkim AcpiOsPrintf ("/**** Invalid Resource Type: 0x%X ****/", ResourceType); 374151937Sjkim return; 375151937Sjkim } 376151937Sjkim 377151937Sjkim /* Prefix is either Word, DWord, QWord, or Extended */ 378151937Sjkim 379151937Sjkim AcpiDmAddressPrefix (Type); 380151937Sjkim 381151937Sjkim /* Resource Types above 0xC0 are vendor-defined */ 382151937Sjkim 383151937Sjkim if (ResourceType > 2) 384151937Sjkim { 385151937Sjkim AcpiOsPrintf ("Space (0x%2.2X, ", ResourceType); 386151937Sjkim AcpiDmSpaceFlags (Flags); 387151937Sjkim AcpiOsPrintf (" 0x%2.2X,", SpecificFlags); 388151937Sjkim return; 389151937Sjkim } 390151937Sjkim 391151937Sjkim /* This is either a Memory, IO, or BusNumber descriptor (0,1,2) */ 392151937Sjkim 393167802Sjkim AcpiOsPrintf ("%s (", AcpiGbl_WordDecode [ResourceType & 0x3]); 394151937Sjkim 395151937Sjkim /* Decode the general and type-specific flags */ 396151937Sjkim 397151937Sjkim if (ResourceType == ACPI_MEMORY_RANGE) 398151937Sjkim { 399151937Sjkim AcpiDmMemoryFlags (Flags, SpecificFlags); 400151937Sjkim } 401151937Sjkim else /* IO range or BusNumberRange */ 402151937Sjkim { 403151937Sjkim AcpiDmIoFlags (Flags); 404151937Sjkim if (ResourceType == ACPI_IO_RANGE) 405151937Sjkim { 406167802Sjkim AcpiOsPrintf (" %s,", AcpiGbl_RngDecode [SpecificFlags & 0x3]); 407151937Sjkim } 408151937Sjkim } 409151937Sjkim} 410151937Sjkim 411151937Sjkim 412151937Sjkim/******************************************************************************* 413151937Sjkim * 414151937Sjkim * FUNCTION: AcpiDmAddressFlags 415151937Sjkim * 416151937Sjkim * PARAMETERS: Resource - Raw AML descriptor 417151937Sjkim * 418151937Sjkim * RETURN: None 419151937Sjkim * 420151937Sjkim * DESCRIPTION: Emit flags common to address descriptors 421151937Sjkim * 422151937Sjkim ******************************************************************************/ 423151937Sjkim 424151937Sjkimstatic void 425151937SjkimAcpiDmAddressFlags ( 426151937Sjkim AML_RESOURCE *Resource) 427151937Sjkim{ 428151937Sjkim 429151937Sjkim if (Resource->Address.ResourceType == ACPI_IO_RANGE) 430151937Sjkim { 431151937Sjkim AcpiDmIoFlags2 (Resource->Address.SpecificFlags); 432151937Sjkim } 433151937Sjkim else if (Resource->Address.ResourceType == ACPI_MEMORY_RANGE) 434151937Sjkim { 435151937Sjkim AcpiDmMemoryFlags2 (Resource->Address.SpecificFlags); 436151937Sjkim } 437151937Sjkim} 438151937Sjkim 439151937Sjkim 440151937Sjkim/******************************************************************************* 441151937Sjkim * 442151937Sjkim * FUNCTION: AcpiDmSpaceFlags 443151937Sjkim * 444151937Sjkim * PARAMETERS: Flags - Flag byte to be decoded 445151937Sjkim * 446151937Sjkim * RETURN: None 447151937Sjkim * 448151937Sjkim * DESCRIPTION: Decode the flags specific to Space Address space descriptors 449151937Sjkim * 450151937Sjkim ******************************************************************************/ 451151937Sjkim 452151937Sjkimstatic void 453151937SjkimAcpiDmSpaceFlags ( 454151937Sjkim UINT8 Flags) 455151937Sjkim{ 456151937Sjkim 457151937Sjkim AcpiOsPrintf ("%s, %s, %s, %s,", 458151937Sjkim AcpiGbl_ConsumeDecode [(Flags & 1)], 459167802Sjkim AcpiGbl_DecDecode [(Flags & 0x2) >> 1], 460151937Sjkim AcpiGbl_MinDecode [(Flags & 0x4) >> 2], 461151937Sjkim AcpiGbl_MaxDecode [(Flags & 0x8) >> 3]); 462151937Sjkim} 463151937Sjkim 464151937Sjkim 465151937Sjkim/******************************************************************************* 466151937Sjkim * 467100966Siwasaki * FUNCTION: AcpiDmIoFlags 468100966Siwasaki * 469100966Siwasaki * PARAMETERS: Flags - Flag byte to be decoded 470100966Siwasaki * 471100966Siwasaki * RETURN: None 472100966Siwasaki * 473100966Siwasaki * DESCRIPTION: Decode the flags specific to IO Address space descriptors 474100966Siwasaki * 475100966Siwasaki ******************************************************************************/ 476100966Siwasaki 477151937Sjkimstatic void 478100966SiwasakiAcpiDmIoFlags ( 479100966Siwasaki UINT8 Flags) 480100966Siwasaki{ 481100966Siwasaki AcpiOsPrintf ("%s, %s, %s, %s,", 482100966Siwasaki AcpiGbl_ConsumeDecode [(Flags & 1)], 483100966Siwasaki AcpiGbl_MinDecode [(Flags & 0x4) >> 2], 484100966Siwasaki AcpiGbl_MaxDecode [(Flags & 0x8) >> 3], 485167802Sjkim AcpiGbl_DecDecode [(Flags & 0x2) >> 1]); 486100966Siwasaki} 487100966Siwasaki 488100966Siwasaki 489100966Siwasaki/******************************************************************************* 490100966Siwasaki * 491151937Sjkim * FUNCTION: AcpiDmIoFlags2 492151937Sjkim * 493151937Sjkim * PARAMETERS: SpecificFlags - "Specific" flag byte to be decoded 494151937Sjkim * 495151937Sjkim * RETURN: None 496151937Sjkim * 497151937Sjkim * DESCRIPTION: Decode the flags specific to IO Address space descriptors 498151937Sjkim * 499151937Sjkim ******************************************************************************/ 500151937Sjkim 501151937Sjkimstatic void 502151937SjkimAcpiDmIoFlags2 ( 503151937Sjkim UINT8 SpecificFlags) 504151937Sjkim{ 505151937Sjkim 506151937Sjkim AcpiOsPrintf (", %s", 507167802Sjkim AcpiGbl_TtpDecode [(SpecificFlags & 0x10) >> 4]); 508151937Sjkim 509151937Sjkim /* TRS is only used if TTP is TypeTranslation */ 510151937Sjkim 511151937Sjkim if (SpecificFlags & 0x10) 512151937Sjkim { 513151937Sjkim AcpiOsPrintf (", %s", 514167802Sjkim AcpiGbl_TrsDecode [(SpecificFlags & 0x20) >> 5]); 515151937Sjkim } 516151937Sjkim} 517151937Sjkim 518151937Sjkim 519151937Sjkim/******************************************************************************* 520151937Sjkim * 521100966Siwasaki * FUNCTION: AcpiDmMemoryFlags 522100966Siwasaki * 523100966Siwasaki * PARAMETERS: Flags - Flag byte to be decoded 524100966Siwasaki * SpecificFlags - "Specific" flag byte to be decoded 525100966Siwasaki * 526100966Siwasaki * RETURN: None 527100966Siwasaki * 528100966Siwasaki * DESCRIPTION: Decode flags specific to Memory Address Space descriptors 529100966Siwasaki * 530100966Siwasaki ******************************************************************************/ 531100966Siwasaki 532151937Sjkimstatic void 533100966SiwasakiAcpiDmMemoryFlags ( 534100966Siwasaki UINT8 Flags, 535100966Siwasaki UINT8 SpecificFlags) 536100966Siwasaki{ 537151937Sjkim 538100966Siwasaki AcpiOsPrintf ("%s, %s, %s, %s, %s, %s,", 539100966Siwasaki AcpiGbl_ConsumeDecode [(Flags & 1)], 540167802Sjkim AcpiGbl_DecDecode [(Flags & 0x2) >> 1], 541100966Siwasaki AcpiGbl_MinDecode [(Flags & 0x4) >> 2], 542100966Siwasaki AcpiGbl_MaxDecode [(Flags & 0x8) >> 3], 543167802Sjkim AcpiGbl_MemDecode [(SpecificFlags & 0x6) >> 1], 544167802Sjkim AcpiGbl_RwDecode [(SpecificFlags & 0x1)]); 545100966Siwasaki} 546100966Siwasaki 547100966Siwasaki 548100966Siwasaki/******************************************************************************* 549100966Siwasaki * 550151937Sjkim * FUNCTION: AcpiDmMemoryFlags2 551151937Sjkim * 552151937Sjkim * PARAMETERS: SpecificFlags - "Specific" flag byte to be decoded 553151937Sjkim * 554151937Sjkim * RETURN: None 555151937Sjkim * 556151937Sjkim * DESCRIPTION: Decode flags specific to Memory Address Space descriptors 557151937Sjkim * 558151937Sjkim ******************************************************************************/ 559151937Sjkim 560151937Sjkimstatic void 561151937SjkimAcpiDmMemoryFlags2 ( 562151937Sjkim UINT8 SpecificFlags) 563151937Sjkim{ 564151937Sjkim 565151937Sjkim AcpiOsPrintf (", %s, %s", 566167802Sjkim AcpiGbl_MtpDecode [(SpecificFlags & 0x18) >> 3], 567167802Sjkim AcpiGbl_TtpDecode [(SpecificFlags & 0x20) >> 5]); 568151937Sjkim} 569151937Sjkim 570151937Sjkim 571151937Sjkim/******************************************************************************* 572151937Sjkim * 573151937Sjkim * FUNCTION: AcpiDmResourceSource 574151937Sjkim * 575151937Sjkim * PARAMETERS: Resource - Raw AML descriptor 576151937Sjkim * MinimumLength - descriptor length without optional fields 577151937Sjkim * ResourceLength 578151937Sjkim * 579151937Sjkim * RETURN: None 580151937Sjkim * 581151937Sjkim * DESCRIPTION: Dump optional ResourceSource fields of an address descriptor 582151937Sjkim * 583151937Sjkim ******************************************************************************/ 584151937Sjkim 585151937Sjkimstatic void 586151937SjkimAcpiDmResourceSource ( 587151937Sjkim AML_RESOURCE *Resource, 588151937Sjkim ACPI_SIZE MinimumTotalLength, 589151937Sjkim UINT32 ResourceLength) 590151937Sjkim{ 591151937Sjkim UINT8 *AmlResourceSource; 592151937Sjkim UINT32 TotalLength; 593151937Sjkim 594151937Sjkim 595151937Sjkim TotalLength = ResourceLength + sizeof (AML_RESOURCE_LARGE_HEADER); 596151937Sjkim 597151937Sjkim /* Check if the optional ResourceSource fields are present */ 598151937Sjkim 599151937Sjkim if (TotalLength <= MinimumTotalLength) 600151937Sjkim { 601151937Sjkim /* The two optional fields are not used */ 602151937Sjkim 603167802Sjkim AcpiOsPrintf (",, "); 604151937Sjkim return; 605151937Sjkim } 606151937Sjkim 607151937Sjkim /* Get a pointer to the ResourceSource */ 608151937Sjkim 609167802Sjkim AmlResourceSource = ACPI_ADD_PTR (UINT8, Resource, MinimumTotalLength); 610151937Sjkim 611151937Sjkim /* 612151937Sjkim * Always emit the ResourceSourceIndex (Byte) 613151937Sjkim * 614151937Sjkim * NOTE: Some ASL compilers always create a 0 byte (in the AML) for the 615151937Sjkim * Index even if the String does not exist. Although this is in violation 616151937Sjkim * of the ACPI specification, it is very important to emit ASL code that 617151937Sjkim * can be compiled back to the identical AML. There may be fields and/or 618151937Sjkim * indexes into the resource template buffer that are compiled to absolute 619151937Sjkim * offsets, and these will be broken if the AML length is changed. 620151937Sjkim */ 621151937Sjkim AcpiOsPrintf ("0x%2.2X,", (UINT32) AmlResourceSource[0]); 622151937Sjkim 623151937Sjkim /* Make sure that the ResourceSource string exists before dumping it */ 624151937Sjkim 625151937Sjkim if (TotalLength > (MinimumTotalLength + 1)) 626151937Sjkim { 627151937Sjkim AcpiOsPrintf (" "); 628151937Sjkim AcpiUtPrintString ((char *) &AmlResourceSource[1], ACPI_UINT8_MAX); 629151937Sjkim } 630151937Sjkim 631167802Sjkim AcpiOsPrintf (", "); 632151937Sjkim} 633151937Sjkim 634151937Sjkim 635151937Sjkim/******************************************************************************* 636151937Sjkim * 637100966Siwasaki * FUNCTION: AcpiDmWordDescriptor 638100966Siwasaki * 639100966Siwasaki * PARAMETERS: Resource - Pointer to the resource descriptor 640100966Siwasaki * Length - Length of the descriptor in bytes 641100966Siwasaki * Level - Current source code indentation level 642100966Siwasaki * 643100966Siwasaki * RETURN: None 644100966Siwasaki * 645100966Siwasaki * DESCRIPTION: Decode a Word Address Space descriptor 646100966Siwasaki * 647100966Siwasaki ******************************************************************************/ 648100966Siwasaki 649100966Siwasakivoid 650100966SiwasakiAcpiDmWordDescriptor ( 651151937Sjkim AML_RESOURCE *Resource, 652100966Siwasaki UINT32 Length, 653100966Siwasaki UINT32 Level) 654100966Siwasaki{ 655100966Siwasaki 656151937Sjkim /* Dump resource name and flags */ 657100966Siwasaki 658151937Sjkim AcpiDmAddressCommon (Resource, ACPI_RESOURCE_TYPE_ADDRESS16, Level); 659100966Siwasaki 660151937Sjkim /* Dump the 5 contiguous WORD values */ 661100966Siwasaki 662151937Sjkim AcpiDmAddressFields (&Resource->Address16.Granularity, 16, Level); 663100966Siwasaki 664151937Sjkim /* The ResourceSource fields are optional */ 665151937Sjkim 666100966Siwasaki AcpiDmIndent (Level + 1); 667151937Sjkim AcpiDmResourceSource (Resource, sizeof (AML_RESOURCE_ADDRESS16), Length); 668100966Siwasaki 669167802Sjkim /* Insert a descriptor name */ 670167802Sjkim 671167802Sjkim AcpiDmDescriptorName (); 672167802Sjkim 673151937Sjkim /* Type-specific flags */ 674100966Siwasaki 675151937Sjkim AcpiDmAddressFlags (Resource); 676100966Siwasaki AcpiOsPrintf (")\n"); 677100966Siwasaki} 678100966Siwasaki 679100966Siwasaki 680100966Siwasaki/******************************************************************************* 681100966Siwasaki * 682100966Siwasaki * FUNCTION: AcpiDmDwordDescriptor 683100966Siwasaki * 684100966Siwasaki * PARAMETERS: Resource - Pointer to the resource descriptor 685100966Siwasaki * Length - Length of the descriptor in bytes 686100966Siwasaki * Level - Current source code indentation level 687100966Siwasaki * 688100966Siwasaki * RETURN: None 689100966Siwasaki * 690100966Siwasaki * DESCRIPTION: Decode a DWord Address Space descriptor 691100966Siwasaki * 692100966Siwasaki ******************************************************************************/ 693100966Siwasaki 694100966Siwasakivoid 695100966SiwasakiAcpiDmDwordDescriptor ( 696151937Sjkim AML_RESOURCE *Resource, 697100966Siwasaki UINT32 Length, 698100966Siwasaki UINT32 Level) 699100966Siwasaki{ 700100966Siwasaki 701151937Sjkim /* Dump resource name and flags */ 702100966Siwasaki 703151937Sjkim AcpiDmAddressCommon (Resource, ACPI_RESOURCE_TYPE_ADDRESS32, Level); 704100966Siwasaki 705151937Sjkim /* Dump the 5 contiguous DWORD values */ 706100966Siwasaki 707151937Sjkim AcpiDmAddressFields (&Resource->Address32.Granularity, 32, Level); 708151937Sjkim 709151937Sjkim /* The ResourceSource fields are optional */ 710151937Sjkim 711100966Siwasaki AcpiDmIndent (Level + 1); 712151937Sjkim AcpiDmResourceSource (Resource, sizeof (AML_RESOURCE_ADDRESS32), Length); 713100966Siwasaki 714167802Sjkim /* Insert a descriptor name */ 715167802Sjkim 716167802Sjkim AcpiDmDescriptorName (); 717167802Sjkim 718151937Sjkim /* Type-specific flags */ 719100966Siwasaki 720151937Sjkim AcpiDmAddressFlags (Resource); 721100966Siwasaki AcpiOsPrintf (")\n"); 722100966Siwasaki} 723100966Siwasaki 724100966Siwasaki 725100966Siwasaki/******************************************************************************* 726100966Siwasaki * 727100966Siwasaki * FUNCTION: AcpiDmQwordDescriptor 728100966Siwasaki * 729100966Siwasaki * PARAMETERS: Resource - Pointer to the resource descriptor 730100966Siwasaki * Length - Length of the descriptor in bytes 731100966Siwasaki * Level - Current source code indentation level 732100966Siwasaki * 733100966Siwasaki * RETURN: None 734100966Siwasaki * 735100966Siwasaki * DESCRIPTION: Decode a QWord Address Space descriptor 736100966Siwasaki * 737100966Siwasaki ******************************************************************************/ 738100966Siwasaki 739100966Siwasakivoid 740100966SiwasakiAcpiDmQwordDescriptor ( 741151937Sjkim AML_RESOURCE *Resource, 742100966Siwasaki UINT32 Length, 743100966Siwasaki UINT32 Level) 744100966Siwasaki{ 745100966Siwasaki 746151937Sjkim /* Dump resource name and flags */ 747100966Siwasaki 748151937Sjkim AcpiDmAddressCommon (Resource, ACPI_RESOURCE_TYPE_ADDRESS64, Level); 749100966Siwasaki 750151937Sjkim /* Dump the 5 contiguous QWORD values */ 751100966Siwasaki 752151937Sjkim AcpiDmAddressFields (&Resource->Address64.Granularity, 64, Level); 753100966Siwasaki 754151937Sjkim /* The ResourceSource fields are optional */ 755100966Siwasaki 756100966Siwasaki AcpiDmIndent (Level + 1); 757151937Sjkim AcpiDmResourceSource (Resource, sizeof (AML_RESOURCE_ADDRESS64), Length); 758100966Siwasaki 759167802Sjkim /* Insert a descriptor name */ 760167802Sjkim 761167802Sjkim AcpiDmDescriptorName (); 762167802Sjkim 763151937Sjkim /* Type-specific flags */ 764100966Siwasaki 765151937Sjkim AcpiDmAddressFlags (Resource); 766151937Sjkim AcpiOsPrintf (")\n"); 767151937Sjkim} 768151937Sjkim 769151937Sjkim 770151937Sjkim/******************************************************************************* 771151937Sjkim * 772151937Sjkim * FUNCTION: AcpiDmExtendedDescriptor 773151937Sjkim * 774151937Sjkim * PARAMETERS: Resource - Pointer to the resource descriptor 775151937Sjkim * Length - Length of the descriptor in bytes 776151937Sjkim * Level - Current source code indentation level 777151937Sjkim * 778151937Sjkim * RETURN: None 779151937Sjkim * 780151937Sjkim * DESCRIPTION: Decode a Extended Address Space descriptor 781151937Sjkim * 782151937Sjkim ******************************************************************************/ 783151937Sjkim 784151937Sjkimvoid 785151937SjkimAcpiDmExtendedDescriptor ( 786151937Sjkim AML_RESOURCE *Resource, 787151937Sjkim UINT32 Length, 788151937Sjkim UINT32 Level) 789151937Sjkim{ 790151937Sjkim 791151937Sjkim /* Dump resource name and flags */ 792151937Sjkim 793151937Sjkim AcpiDmAddressCommon (Resource, ACPI_RESOURCE_TYPE_EXTENDED_ADDRESS64, Level); 794151937Sjkim 795151937Sjkim /* Dump the 5 contiguous QWORD values */ 796151937Sjkim 797151937Sjkim AcpiDmAddressFields (&Resource->ExtAddress64.Granularity, 64, Level); 798151937Sjkim 799151937Sjkim /* Extra field for this descriptor only */ 800151937Sjkim 801100966Siwasaki AcpiDmIndent (Level + 1); 802151937Sjkim AcpiDmDumpInteger64 (Resource->ExtAddress64.TypeSpecific, 803151937Sjkim "Type-Specific Attributes"); 804100966Siwasaki 805167802Sjkim /* Insert a descriptor name */ 806167802Sjkim 807167802Sjkim AcpiDmIndent (Level + 1); 808167802Sjkim AcpiDmDescriptorName (); 809167802Sjkim 810151937Sjkim /* Type-specific flags */ 811100966Siwasaki 812151937Sjkim AcpiDmAddressFlags (Resource); 813100966Siwasaki AcpiOsPrintf (")\n"); 814100966Siwasaki} 815100966Siwasaki 816100966Siwasaki 817100966Siwasaki/******************************************************************************* 818100966Siwasaki * 819100966Siwasaki * FUNCTION: AcpiDmMemory24Descriptor 820100966Siwasaki * 821100966Siwasaki * PARAMETERS: Resource - Pointer to the resource descriptor 822100966Siwasaki * Length - Length of the descriptor in bytes 823100966Siwasaki * Level - Current source code indentation level 824100966Siwasaki * 825100966Siwasaki * RETURN: None 826100966Siwasaki * 827100966Siwasaki * DESCRIPTION: Decode a Memory24 descriptor 828100966Siwasaki * 829100966Siwasaki ******************************************************************************/ 830100966Siwasaki 831100966Siwasakivoid 832100966SiwasakiAcpiDmMemory24Descriptor ( 833151937Sjkim AML_RESOURCE *Resource, 834100966Siwasaki UINT32 Length, 835100966Siwasaki UINT32 Level) 836100966Siwasaki{ 837100966Siwasaki 838151937Sjkim /* Dump name and read/write flag */ 839151937Sjkim 840100966Siwasaki AcpiDmIndent (Level); 841151937Sjkim AcpiOsPrintf ("Memory24 (%s,\n", 842167802Sjkim AcpiGbl_RwDecode [Resource->Memory24.Flags & 1]); 843151937Sjkim 844151937Sjkim /* Dump the 4 contiguous WORD values */ 845151937Sjkim 846151937Sjkim AcpiDmMemoryFields (&Resource->Memory24.Minimum, 16, Level); 847151937Sjkim 848167802Sjkim /* Insert a descriptor name */ 849167802Sjkim 850151937Sjkim AcpiDmIndent (Level + 1); 851167802Sjkim AcpiDmDescriptorName (); 852151937Sjkim AcpiOsPrintf (")\n"); 853100966Siwasaki} 854100966Siwasaki 855100966Siwasaki 856100966Siwasaki/******************************************************************************* 857100966Siwasaki * 858100966Siwasaki * FUNCTION: AcpiDmMemory32Descriptor 859100966Siwasaki * 860100966Siwasaki * PARAMETERS: Resource - Pointer to the resource descriptor 861100966Siwasaki * Length - Length of the descriptor in bytes 862100966Siwasaki * Level - Current source code indentation level 863100966Siwasaki * 864100966Siwasaki * RETURN: None 865100966Siwasaki * 866100966Siwasaki * DESCRIPTION: Decode a Memory32 descriptor 867100966Siwasaki * 868100966Siwasaki ******************************************************************************/ 869100966Siwasaki 870100966Siwasakivoid 871100966SiwasakiAcpiDmMemory32Descriptor ( 872151937Sjkim AML_RESOURCE *Resource, 873100966Siwasaki UINT32 Length, 874100966Siwasaki UINT32 Level) 875100966Siwasaki{ 876100966Siwasaki 877151937Sjkim /* Dump name and read/write flag */ 878151937Sjkim 879100966Siwasaki AcpiDmIndent (Level); 880151937Sjkim AcpiOsPrintf ("Memory32 (%s,\n", 881167802Sjkim AcpiGbl_RwDecode [Resource->Memory32.Flags & 1]); 882151937Sjkim 883151937Sjkim /* Dump the 4 contiguous DWORD values */ 884151937Sjkim 885151937Sjkim AcpiDmMemoryFields (&Resource->Memory32.Minimum, 32, Level); 886151937Sjkim 887167802Sjkim /* Insert a descriptor name */ 888167802Sjkim 889151937Sjkim AcpiDmIndent (Level + 1); 890167802Sjkim AcpiDmDescriptorName (); 891151937Sjkim AcpiOsPrintf (")\n"); 892100966Siwasaki} 893100966Siwasaki 894100966Siwasaki 895100966Siwasaki/******************************************************************************* 896100966Siwasaki * 897151937Sjkim * FUNCTION: AcpiDmFixedMemory32Descriptor 898100966Siwasaki * 899100966Siwasaki * PARAMETERS: Resource - Pointer to the resource descriptor 900100966Siwasaki * Length - Length of the descriptor in bytes 901100966Siwasaki * Level - Current source code indentation level 902100966Siwasaki * 903100966Siwasaki * RETURN: None 904100966Siwasaki * 905100966Siwasaki * DESCRIPTION: Decode a Fixed Memory32 descriptor 906100966Siwasaki * 907100966Siwasaki ******************************************************************************/ 908100966Siwasaki 909100966Siwasakivoid 910151937SjkimAcpiDmFixedMemory32Descriptor ( 911151937Sjkim AML_RESOURCE *Resource, 912100966Siwasaki UINT32 Length, 913100966Siwasaki UINT32 Level) 914100966Siwasaki{ 915100966Siwasaki 916151937Sjkim /* Dump name and read/write flag */ 917151937Sjkim 918100966Siwasaki AcpiDmIndent (Level); 919151937Sjkim AcpiOsPrintf ("Memory32Fixed (%s,\n", 920167802Sjkim AcpiGbl_RwDecode [Resource->FixedMemory32.Flags & 1]); 921151937Sjkim 922151937Sjkim AcpiDmIndent (Level + 1); 923151937Sjkim AcpiDmDumpInteger32 (Resource->FixedMemory32.Address, "Address Base"); 924151937Sjkim 925151937Sjkim AcpiDmIndent (Level + 1); 926151937Sjkim AcpiDmDumpInteger32 (Resource->FixedMemory32.AddressLength, "Address Length"); 927151937Sjkim 928167802Sjkim /* Insert a descriptor name */ 929167802Sjkim 930151937Sjkim AcpiDmIndent (Level + 1); 931167802Sjkim AcpiDmDescriptorName (); 932151937Sjkim AcpiOsPrintf (")\n"); 933100966Siwasaki} 934100966Siwasaki 935100966Siwasaki 936100966Siwasaki/******************************************************************************* 937100966Siwasaki * 938100966Siwasaki * FUNCTION: AcpiDmGenericRegisterDescriptor 939100966Siwasaki * 940100966Siwasaki * PARAMETERS: Resource - Pointer to the resource descriptor 941100966Siwasaki * Length - Length of the descriptor in bytes 942100966Siwasaki * Level - Current source code indentation level 943100966Siwasaki * 944100966Siwasaki * RETURN: None 945100966Siwasaki * 946100966Siwasaki * DESCRIPTION: Decode a Generic Register descriptor 947100966Siwasaki * 948100966Siwasaki ******************************************************************************/ 949100966Siwasaki 950100966Siwasakivoid 951100966SiwasakiAcpiDmGenericRegisterDescriptor ( 952151937Sjkim AML_RESOURCE *Resource, 953100966Siwasaki UINT32 Length, 954100966Siwasaki UINT32 Level) 955100966Siwasaki{ 956100966Siwasaki 957100966Siwasaki AcpiDmIndent (Level); 958100966Siwasaki AcpiOsPrintf ("Register ("); 959151937Sjkim AcpiDmAddressSpace (Resource->GenericReg.AddressSpaceId); 960151937Sjkim AcpiOsPrintf ("\n"); 961102550Siwasaki 962151937Sjkim AcpiDmIndent (Level + 1); 963167802Sjkim AcpiDmDumpInteger8 (Resource->GenericReg.BitWidth, "Bit Width"); 964102550Siwasaki 965151937Sjkim AcpiDmIndent (Level + 1); 966167802Sjkim AcpiDmDumpInteger8 (Resource->GenericReg.BitOffset, "Bit Offset"); 967151937Sjkim 968151937Sjkim AcpiDmIndent (Level + 1); 969167802Sjkim AcpiDmDumpInteger64 (Resource->GenericReg.Address, "Address"); 970151937Sjkim 971151937Sjkim /* Optional field for ACPI 3.0 */ 972151937Sjkim 973167802Sjkim AcpiDmIndent (Level + 1); 974151937Sjkim if (Resource->GenericReg.AccessSize) 975151937Sjkim { 976167802Sjkim AcpiOsPrintf ("0x%2.2X, // %s\n", 977167802Sjkim Resource->GenericReg.AccessSize, "Access Size"); 978151937Sjkim AcpiDmIndent (Level + 1); 979151937Sjkim } 980167802Sjkim else 981167802Sjkim { 982167802Sjkim AcpiOsPrintf (","); 983167802Sjkim } 984151937Sjkim 985167802Sjkim /* DescriptorName was added for ACPI 3.0+ */ 986167802Sjkim 987167802Sjkim AcpiDmDescriptorName (); 988151937Sjkim AcpiOsPrintf (")\n"); 989100966Siwasaki} 990100966Siwasaki 991100966Siwasaki 992100966Siwasaki/******************************************************************************* 993100966Siwasaki * 994100966Siwasaki * FUNCTION: AcpiDmInterruptDescriptor 995100966Siwasaki * 996100966Siwasaki * PARAMETERS: Resource - Pointer to the resource descriptor 997100966Siwasaki * Length - Length of the descriptor in bytes 998100966Siwasaki * Level - Current source code indentation level 999100966Siwasaki * 1000100966Siwasaki * RETURN: None 1001100966Siwasaki * 1002100966Siwasaki * DESCRIPTION: Decode a extended Interrupt descriptor 1003100966Siwasaki * 1004100966Siwasaki ******************************************************************************/ 1005100966Siwasaki 1006100966Siwasakivoid 1007100966SiwasakiAcpiDmInterruptDescriptor ( 1008151937Sjkim AML_RESOURCE *Resource, 1009100966Siwasaki UINT32 Length, 1010100966Siwasaki UINT32 Level) 1011100966Siwasaki{ 1012100966Siwasaki UINT32 i; 1013100966Siwasaki 1014100966Siwasaki 1015100966Siwasaki AcpiDmIndent (Level); 1016151937Sjkim AcpiOsPrintf ("Interrupt (%s, %s, %s, %s, ", 1017151937Sjkim AcpiGbl_ConsumeDecode [(Resource->ExtendedIrq.Flags & 1)], 1018167802Sjkim AcpiGbl_HeDecode [(Resource->ExtendedIrq.Flags >> 1) & 1], 1019167802Sjkim AcpiGbl_LlDecode [(Resource->ExtendedIrq.Flags >> 2) & 1], 1020167802Sjkim AcpiGbl_ShrDecode [(Resource->ExtendedIrq.Flags >> 3) & 1]); 1021100966Siwasaki 1022151937Sjkim /* 1023151937Sjkim * The ResourceSource fields are optional and appear after the interrupt 1024151937Sjkim * list. Must compute length based on length of the list. First xrupt 1025151937Sjkim * is included in the struct (reason for -1 below) 1026151937Sjkim */ 1027151937Sjkim AcpiDmResourceSource (Resource, 1028151937Sjkim sizeof (AML_RESOURCE_EXTENDED_IRQ) + 1029193267Sjkim ((UINT32) Resource->ExtendedIrq.InterruptCount - 1) * sizeof (UINT32), 1030151937Sjkim Resource->ExtendedIrq.ResourceLength); 1031100966Siwasaki 1032167802Sjkim /* Insert a descriptor name */ 1033167802Sjkim 1034167802Sjkim AcpiDmDescriptorName (); 1035167802Sjkim AcpiOsPrintf (")\n"); 1036167802Sjkim 1037151937Sjkim /* Dump the interrupt list */ 1038114237Snjl 1039100966Siwasaki AcpiDmIndent (Level); 1040100966Siwasaki AcpiOsPrintf ("{\n"); 1041151937Sjkim for (i = 0; i < Resource->ExtendedIrq.InterruptCount; i++) 1042100966Siwasaki { 1043100966Siwasaki AcpiDmIndent (Level + 1); 1044151937Sjkim AcpiOsPrintf ("0x%8.8X,\n", 1045151937Sjkim (UINT32) Resource->ExtendedIrq.Interrupts[i]); 1046100966Siwasaki } 1047100966Siwasaki 1048100966Siwasaki AcpiDmIndent (Level); 1049100966Siwasaki AcpiOsPrintf ("}\n"); 1050100966Siwasaki} 1051100966Siwasaki 1052100966Siwasaki 1053100966Siwasaki/******************************************************************************* 1054100966Siwasaki * 1055151937Sjkim * FUNCTION: AcpiDmVendorCommon 1056100966Siwasaki * 1057151937Sjkim * PARAMETERS: Name - Descriptor name suffix 1058151937Sjkim * ByteData - Pointer to the vendor byte data 1059151937Sjkim * Length - Length of the byte data 1060100966Siwasaki * Level - Current source code indentation level 1061100966Siwasaki * 1062100966Siwasaki * RETURN: None 1063100966Siwasaki * 1064151937Sjkim * DESCRIPTION: Decode a Vendor descriptor, both Large and Small 1065100966Siwasaki * 1066100966Siwasaki ******************************************************************************/ 1067100966Siwasaki 1068100966Siwasakivoid 1069151937SjkimAcpiDmVendorCommon ( 1070151937Sjkim char *Name, 1071151937Sjkim UINT8 *ByteData, 1072100966Siwasaki UINT32 Length, 1073100966Siwasaki UINT32 Level) 1074100966Siwasaki{ 1075100966Siwasaki 1076167802Sjkim /* Dump macro name */ 1077151937Sjkim 1078100966Siwasaki AcpiDmIndent (Level); 1079167802Sjkim AcpiOsPrintf ("Vendor%s (", Name); 1080151937Sjkim 1081167802Sjkim /* Insert a descriptor name */ 1082167802Sjkim 1083167802Sjkim AcpiDmDescriptorName (); 1084167802Sjkim AcpiOsPrintf (") // Length = 0x%.2X\n", Length); 1085167802Sjkim 1086151937Sjkim /* Dump the vendor bytes */ 1087151937Sjkim 1088100966Siwasaki AcpiDmIndent (Level); 1089100966Siwasaki AcpiOsPrintf ("{\n"); 1090100966Siwasaki 1091151937Sjkim AcpiDmDisasmByteList (Level + 1, ByteData, Length); 1092151937Sjkim 1093100966Siwasaki AcpiDmIndent (Level); 1094100966Siwasaki AcpiOsPrintf ("}\n"); 1095100966Siwasaki} 1096100966Siwasaki 1097100966Siwasaki 1098151937Sjkim/******************************************************************************* 1099151937Sjkim * 1100151937Sjkim * FUNCTION: AcpiDmVendorLargeDescriptor 1101151937Sjkim * 1102151937Sjkim * PARAMETERS: Resource - Pointer to the resource descriptor 1103151937Sjkim * Length - Length of the descriptor in bytes 1104151937Sjkim * Level - Current source code indentation level 1105151937Sjkim * 1106151937Sjkim * RETURN: None 1107151937Sjkim * 1108151937Sjkim * DESCRIPTION: Decode a Vendor Large descriptor 1109151937Sjkim * 1110151937Sjkim ******************************************************************************/ 1111151937Sjkim 1112151937Sjkimvoid 1113151937SjkimAcpiDmVendorLargeDescriptor ( 1114151937Sjkim AML_RESOURCE *Resource, 1115151937Sjkim UINT32 Length, 1116151937Sjkim UINT32 Level) 1117151937Sjkim{ 1118151937Sjkim 1119167802Sjkim AcpiDmVendorCommon ("Long ", 1120167802Sjkim ACPI_ADD_PTR (UINT8, Resource, sizeof (AML_RESOURCE_LARGE_HEADER)), 1121151937Sjkim Length, Level); 1122151937Sjkim} 1123151937Sjkim 1124100966Siwasaki#endif 1125100966Siwasaki 1126