1 /****************************************************************************** 2 * 3 * Module Name: amlresrc.h - AML resource descriptors 4 * 5 *****************************************************************************/ 6 7 /* 8 * Copyright (C) 2000 - 2023, Intel Corp. 9 * All rights reserved. 10 * 11 * Redistribution and use in source and binary forms, with or without 12 * modification, are permitted provided that the following conditions 13 * are met: 14 * 1. Redistributions of source code must retain the above copyright 15 * notice, this list of conditions, and the following disclaimer, 16 * without modification. 17 * 2. Redistributions in binary form must reproduce at minimum a disclaimer 18 * substantially similar to the "NO WARRANTY" disclaimer below 19 * ("Disclaimer") and any redistribution must be conditioned upon 20 * including a substantially similar Disclaimer requirement for further 21 * binary redistribution. 22 * 3. Neither the names of the above-listed copyright holders nor the names 23 * of any contributors may be used to endorse or promote products derived 24 * from this software without specific prior written permission. 25 * 26 * Alternatively, this software may be distributed under the terms of the 27 * GNU General Public License ("GPL") version 2 as published by the Free 28 * Software Foundation. 29 * 30 * NO WARRANTY 31 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 32 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 33 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 34 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 35 * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 36 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 37 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 38 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 39 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING 40 * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 41 * POSSIBILITY OF SUCH DAMAGES. 42 */ 43 44 /* acpisrc:StructDefs -- for acpisrc conversion */ 45 46 #ifndef __AMLRESRC_H 47 #define __AMLRESRC_H 48 49 50 /* 51 * Resource descriptor tags, as defined in the ACPI specification. 52 * Used to symbolically reference fields within a descriptor. 53 */ 54 #define ACPI_RESTAG_ADDRESS "_ADR" 55 #define ACPI_RESTAG_ALIGNMENT "_ALN" 56 #define ACPI_RESTAG_ADDRESSSPACE "_ASI" 57 #define ACPI_RESTAG_ACCESSSIZE "_ASZ" 58 #define ACPI_RESTAG_TYPESPECIFICATTRIBUTES "_ATT" 59 #define ACPI_RESTAG_BASEADDRESS "_BAS" 60 #define ACPI_RESTAG_BUSMASTER "_BM_" /* Master(1), Slave(0) */ 61 #define ACPI_RESTAG_DEBOUNCETIME "_DBT" 62 #define ACPI_RESTAG_DECODE "_DEC" 63 #define ACPI_RESTAG_DEVICEPOLARITY "_DPL" 64 #define ACPI_RESTAG_DMA "_DMA" 65 #define ACPI_RESTAG_DMATYPE "_TYP" /* Compatible(0), A(1), B(2), F(3) */ 66 #define ACPI_RESTAG_DRIVESTRENGTH "_DRS" 67 #define ACPI_RESTAG_ENDIANNESS "_END" 68 #define ACPI_RESTAG_FLOWCONTROL "_FLC" 69 #define ACPI_RESTAG_FUNCTION "_FUN" 70 #define ACPI_RESTAG_GRANULARITY "_GRA" 71 #define ACPI_RESTAG_INTERRUPT "_INT" 72 #define ACPI_RESTAG_INTERRUPTLEVEL "_LL_" /* ActiveLo(1), ActiveHi(0) */ 73 #define ACPI_RESTAG_INTERRUPTSHARE "_SHR" /* Shareable(1), NoShare(0) */ 74 #define ACPI_RESTAG_INTERRUPTTYPE "_HE_" /* Edge(1), Level(0) */ 75 #define ACPI_RESTAG_IORESTRICTION "_IOR" 76 #define ACPI_RESTAG_LENGTH "_LEN" 77 #define ACPI_RESTAG_LINE "_LIN" 78 #define ACPI_RESTAG_LOCALPORT "_PRT" 79 #define ACPI_RESTAG_MEMATTRIBUTES "_MTP" /* Memory(0), Reserved(1), ACPI(2), NVS(3) */ 80 #define ACPI_RESTAG_MEMTYPE "_MEM" /* NonCache(0), Cacheable(1) Cache+combine(2), Cache+prefetch(3) */ 81 #define ACPI_RESTAG_MAXADDR "_MAX" 82 #define ACPI_RESTAG_MINADDR "_MIN" 83 #define ACPI_RESTAG_MAXTYPE "_MAF" 84 #define ACPI_RESTAG_MINTYPE "_MIF" 85 #define ACPI_RESTAG_MODE "_MOD" 86 #define ACPI_RESTAG_PARITY "_PAR" 87 #define ACPI_RESTAG_PHASE "_PHA" 88 #define ACPI_RESTAG_PHYTYPE "_PHY" 89 #define ACPI_RESTAG_PIN "_PIN" 90 #define ACPI_RESTAG_PINCONFIG "_PPI" 91 #define ACPI_RESTAG_PINCONFIG_TYPE "_TYP" 92 #define ACPI_RESTAG_PINCONFIG_VALUE "_VAL" 93 #define ACPI_RESTAG_POLARITY "_POL" 94 #define ACPI_RESTAG_REGISTERBITOFFSET "_RBO" 95 #define ACPI_RESTAG_REGISTERBITWIDTH "_RBW" 96 #define ACPI_RESTAG_RANGETYPE "_RNG" 97 #define ACPI_RESTAG_READWRITETYPE "_RW_" /* ReadOnly(0), Writeable (1) */ 98 #define ACPI_RESTAG_LENGTH_RX "_RXL" 99 #define ACPI_RESTAG_LENGTH_TX "_TXL" 100 #define ACPI_RESTAG_SLAVEMODE "_SLV" 101 #define ACPI_RESTAG_SPEED "_SPE" 102 #define ACPI_RESTAG_STOPBITS "_STB" 103 #define ACPI_RESTAG_TRANSLATION "_TRA" 104 #define ACPI_RESTAG_TRANSTYPE "_TRS" /* Sparse(1), Dense(0) */ 105 #define ACPI_RESTAG_TYPE "_TTP" /* Translation(1), Static (0) */ 106 #define ACPI_RESTAG_XFERTYPE "_SIZ" /* 8(0), 8And16(1), 16(2) */ 107 #define ACPI_RESTAG_VENDORDATA "_VEN" 108 #define ACPI_RESTAG_FQN "_FQN" 109 #define ACPI_RESTAG_FQD "_FQD" 110 111 112 /* Default sizes for "small" resource descriptors */ 113 114 #define ASL_RDESC_IRQ_SIZE 0x02 115 #define ASL_RDESC_DMA_SIZE 0x02 116 #define ASL_RDESC_ST_DEPEND_SIZE 0x00 117 #define ASL_RDESC_END_DEPEND_SIZE 0x00 118 #define ASL_RDESC_IO_SIZE 0x07 119 #define ASL_RDESC_FIXED_IO_SIZE 0x03 120 #define ASL_RDESC_FIXED_DMA_SIZE 0x05 121 #define ASL_RDESC_END_TAG_SIZE 0x01 122 123 124 typedef struct asl_resource_node 125 { 126 UINT32 BufferLength; 127 void *Buffer; 128 struct asl_resource_node *Next; 129 130 } ASL_RESOURCE_NODE; 131 132 typedef struct asl_resource_info 133 { 134 ACPI_PARSE_OBJECT *DescriptorTypeOp; /* Resource descriptor parse node */ 135 ACPI_PARSE_OBJECT *MappingOp; /* Used for mapfile support */ 136 UINT32 CurrentByteOffset; /* Offset in resource template */ 137 138 } ASL_RESOURCE_INFO; 139 140 141 /* Macros used to generate AML resource length fields */ 142 143 #define ACPI_AML_SIZE_LARGE(r) (sizeof (r) - sizeof (AML_RESOURCE_LARGE_HEADER)) 144 #define ACPI_AML_SIZE_SMALL(r) (sizeof (r) - sizeof (AML_RESOURCE_SMALL_HEADER)) 145 146 /* 147 * Resource descriptors defined in the ACPI specification. 148 * 149 * Packing/alignment must be BYTE because these descriptors 150 * are used to overlay the raw AML byte stream. 151 */ 152 #pragma pack(1) 153 154 /* 155 * SMALL descriptors 156 */ 157 #define AML_RESOURCE_SMALL_HEADER_COMMON \ 158 UINT8 DescriptorType; 159 160 typedef struct aml_resource_small_header 161 { 162 AML_RESOURCE_SMALL_HEADER_COMMON 163 164 } AML_RESOURCE_SMALL_HEADER; 165 166 167 typedef struct aml_resource_irq 168 { 169 AML_RESOURCE_SMALL_HEADER_COMMON 170 UINT16 IrqMask; 171 UINT8 Flags; 172 173 } AML_RESOURCE_IRQ; 174 175 176 typedef struct aml_resource_irq_noflags 177 { 178 AML_RESOURCE_SMALL_HEADER_COMMON 179 UINT16 IrqMask; 180 181 } AML_RESOURCE_IRQ_NOFLAGS; 182 183 184 typedef struct aml_resource_dma 185 { 186 AML_RESOURCE_SMALL_HEADER_COMMON 187 UINT8 DmaChannelMask; 188 UINT8 Flags; 189 190 } AML_RESOURCE_DMA; 191 192 193 typedef struct aml_resource_start_dependent 194 { 195 AML_RESOURCE_SMALL_HEADER_COMMON 196 UINT8 Flags; 197 198 } AML_RESOURCE_START_DEPENDENT; 199 200 201 typedef struct aml_resource_start_dependent_noprio 202 { 203 AML_RESOURCE_SMALL_HEADER_COMMON 204 205 } AML_RESOURCE_START_DEPENDENT_NOPRIO; 206 207 208 typedef struct aml_resource_end_dependent 209 { 210 AML_RESOURCE_SMALL_HEADER_COMMON 211 212 } AML_RESOURCE_END_DEPENDENT; 213 214 215 typedef struct aml_resource_io 216 { 217 AML_RESOURCE_SMALL_HEADER_COMMON 218 UINT8 Flags; 219 UINT16 Minimum; 220 UINT16 Maximum; 221 UINT8 Alignment; 222 UINT8 AddressLength; 223 224 } AML_RESOURCE_IO; 225 226 227 typedef struct aml_resource_fixed_io 228 { 229 AML_RESOURCE_SMALL_HEADER_COMMON 230 UINT16 Address; 231 UINT8 AddressLength; 232 233 } AML_RESOURCE_FIXED_IO; 234 235 236 typedef struct aml_resource_vendor_small 237 { 238 AML_RESOURCE_SMALL_HEADER_COMMON 239 240 } AML_RESOURCE_VENDOR_SMALL; 241 242 243 typedef struct aml_resource_end_tag 244 { 245 AML_RESOURCE_SMALL_HEADER_COMMON 246 UINT8 Checksum; 247 248 } AML_RESOURCE_END_TAG; 249 250 251 typedef struct aml_resource_fixed_dma 252 { 253 AML_RESOURCE_SMALL_HEADER_COMMON 254 UINT16 RequestLines; 255 UINT16 Channels; 256 UINT8 Width; 257 258 } AML_RESOURCE_FIXED_DMA; 259 260 261 /* 262 * LARGE descriptors 263 */ 264 #define AML_RESOURCE_LARGE_HEADER_COMMON \ 265 UINT8 DescriptorType;\ 266 UINT16 ResourceLength; 267 268 typedef struct aml_resource_large_header 269 { 270 AML_RESOURCE_LARGE_HEADER_COMMON 271 272 } AML_RESOURCE_LARGE_HEADER; 273 274 275 /* General Flags for address space resource descriptors */ 276 277 #define ACPI_RESOURCE_FLAG_DEC 2 278 #define ACPI_RESOURCE_FLAG_MIF 4 279 #define ACPI_RESOURCE_FLAG_MAF 8 280 281 typedef struct aml_resource_memory24 282 { 283 AML_RESOURCE_LARGE_HEADER_COMMON 284 UINT8 Flags; 285 UINT16 Minimum; 286 UINT16 Maximum; 287 UINT16 Alignment; 288 UINT16 AddressLength; 289 290 } AML_RESOURCE_MEMORY24; 291 292 293 typedef struct aml_resource_vendor_large 294 { 295 AML_RESOURCE_LARGE_HEADER_COMMON 296 297 } AML_RESOURCE_VENDOR_LARGE; 298 299 300 typedef struct aml_resource_memory32 301 { 302 AML_RESOURCE_LARGE_HEADER_COMMON 303 UINT8 Flags; 304 UINT32 Minimum; 305 UINT32 Maximum; 306 UINT32 Alignment; 307 UINT32 AddressLength; 308 309 } AML_RESOURCE_MEMORY32; 310 311 312 typedef struct aml_resource_fixed_memory32 313 { 314 AML_RESOURCE_LARGE_HEADER_COMMON 315 UINT8 Flags; 316 UINT32 Address; 317 UINT32 AddressLength; 318 319 } AML_RESOURCE_FIXED_MEMORY32; 320 321 322 #define AML_RESOURCE_ADDRESS_COMMON \ 323 UINT8 ResourceType; \ 324 UINT8 Flags; \ 325 UINT8 SpecificFlags; 326 327 328 typedef struct aml_resource_address 329 { 330 AML_RESOURCE_LARGE_HEADER_COMMON 331 AML_RESOURCE_ADDRESS_COMMON 332 333 } AML_RESOURCE_ADDRESS; 334 335 336 typedef struct aml_resource_extended_address64 337 { 338 AML_RESOURCE_LARGE_HEADER_COMMON 339 AML_RESOURCE_ADDRESS_COMMON 340 UINT8 RevisionID; 341 UINT8 Reserved; 342 UINT64 Granularity; 343 UINT64 Minimum; 344 UINT64 Maximum; 345 UINT64 TranslationOffset; 346 UINT64 AddressLength; 347 UINT64 TypeSpecific; 348 349 } AML_RESOURCE_EXTENDED_ADDRESS64; 350 351 #define AML_RESOURCE_EXTENDED_ADDRESS_REVISION 1 /* ACPI 3.0 */ 352 353 354 typedef struct aml_resource_address64 355 { 356 AML_RESOURCE_LARGE_HEADER_COMMON 357 AML_RESOURCE_ADDRESS_COMMON 358 UINT64 Granularity; 359 UINT64 Minimum; 360 UINT64 Maximum; 361 UINT64 TranslationOffset; 362 UINT64 AddressLength; 363 364 } AML_RESOURCE_ADDRESS64; 365 366 367 typedef struct aml_resource_address32 368 { 369 AML_RESOURCE_LARGE_HEADER_COMMON 370 AML_RESOURCE_ADDRESS_COMMON 371 UINT32 Granularity; 372 UINT32 Minimum; 373 UINT32 Maximum; 374 UINT32 TranslationOffset; 375 UINT32 AddressLength; 376 377 } AML_RESOURCE_ADDRESS32; 378 379 380 typedef struct aml_resource_address16 381 { 382 AML_RESOURCE_LARGE_HEADER_COMMON 383 AML_RESOURCE_ADDRESS_COMMON 384 UINT16 Granularity; 385 UINT16 Minimum; 386 UINT16 Maximum; 387 UINT16 TranslationOffset; 388 UINT16 AddressLength; 389 390 } AML_RESOURCE_ADDRESS16; 391 392 393 typedef struct aml_resource_extended_irq 394 { 395 AML_RESOURCE_LARGE_HEADER_COMMON 396 UINT8 Flags; 397 UINT8 InterruptCount; 398 union { 399 UINT32 Interrupt; 400 ACPI_FLEX_ARRAY(UINT32, Interrupts); 401 }; 402 /* ResSourceIndex, ResSource optional fields follow */ 403 404 } AML_RESOURCE_EXTENDED_IRQ; 405 406 407 typedef struct aml_resource_generic_register 408 { 409 AML_RESOURCE_LARGE_HEADER_COMMON 410 UINT8 AddressSpaceId; 411 UINT8 BitWidth; 412 UINT8 BitOffset; 413 UINT8 AccessSize; /* ACPI 3.0, was previously Reserved */ 414 UINT64 Address; 415 416 } AML_RESOURCE_GENERIC_REGISTER; 417 418 419 /* Common descriptor for GpioInt and GpioIo (ACPI 5.0) */ 420 421 typedef struct aml_resource_gpio 422 { 423 AML_RESOURCE_LARGE_HEADER_COMMON 424 UINT8 RevisionId; 425 UINT8 ConnectionType; 426 UINT16 Flags; 427 UINT16 IntFlags; 428 UINT8 PinConfig; 429 UINT16 DriveStrength; 430 UINT16 DebounceTimeout; 431 UINT16 PinTableOffset; 432 UINT8 ResSourceIndex; 433 UINT16 ResSourceOffset; 434 UINT16 VendorOffset; 435 UINT16 VendorLength; 436 /* 437 * Optional fields follow immediately: 438 * 1) PIN list (Words) 439 * 2) Resource Source String 440 * 3) Vendor Data bytes 441 */ 442 443 } AML_RESOURCE_GPIO; 444 445 #define AML_RESOURCE_GPIO_REVISION 1 /* ACPI 5.0 */ 446 447 /* Values for ConnectionType above */ 448 449 #define AML_RESOURCE_GPIO_TYPE_INT 0 450 #define AML_RESOURCE_GPIO_TYPE_IO 1 451 #define AML_RESOURCE_MAX_GPIOTYPE 1 452 453 454 /* Common preamble for all serial descriptors (ACPI 5.0) */ 455 456 #define AML_RESOURCE_SERIAL_COMMON \ 457 UINT8 RevisionId; \ 458 UINT8 ResSourceIndex; \ 459 UINT8 Type; \ 460 UINT8 Flags; \ 461 UINT16 TypeSpecificFlags; \ 462 UINT8 TypeRevisionId; \ 463 UINT16 TypeDataLength; \ 464 465 /* Values for the type field above */ 466 467 #define AML_RESOURCE_I2C_SERIALBUSTYPE 1 468 #define AML_RESOURCE_SPI_SERIALBUSTYPE 2 469 #define AML_RESOURCE_UART_SERIALBUSTYPE 3 470 #define AML_RESOURCE_CSI2_SERIALBUSTYPE 4 471 #define AML_RESOURCE_MAX_SERIALBUSTYPE 4 472 #define AML_RESOURCE_VENDOR_SERIALBUSTYPE 192 /* Vendor defined is 0xC0-0xFF (NOT SUPPORTED) */ 473 474 typedef struct aml_resource_common_serialbus 475 { 476 AML_RESOURCE_LARGE_HEADER_COMMON 477 AML_RESOURCE_SERIAL_COMMON 478 479 } AML_RESOURCE_COMMON_SERIALBUS; 480 481 482 typedef struct aml_resource_csi2_serialbus 483 { 484 AML_RESOURCE_LARGE_HEADER_COMMON 485 AML_RESOURCE_SERIAL_COMMON 486 487 /* 488 * Optional fields follow immediately: 489 * 1) Vendor Data bytes 490 * 2) Resource Source String 491 */ 492 493 } AML_RESOURCE_CSI2_SERIALBUS; 494 495 #define AML_RESOURCE_CSI2_REVISION 1 /* ACPI 6.4 */ 496 #define AML_RESOURCE_CSI2_TYPE_REVISION 1 /* ACPI 6.4 */ 497 #define AML_RESOURCE_CSI2_MIN_DATA_LEN 0 /* ACPI 6.4 */ 498 499 typedef struct aml_resource_i2c_serialbus 500 { 501 AML_RESOURCE_LARGE_HEADER_COMMON 502 AML_RESOURCE_SERIAL_COMMON 503 UINT32 ConnectionSpeed; 504 UINT16 SlaveAddress; 505 /* 506 * Optional fields follow immediately: 507 * 1) Vendor Data bytes 508 * 2) Resource Source String 509 */ 510 511 } AML_RESOURCE_I2C_SERIALBUS; 512 513 #define AML_RESOURCE_I2C_REVISION 1 /* ACPI 5.0 */ 514 #define AML_RESOURCE_I2C_TYPE_REVISION 1 /* ACPI 5.0 */ 515 #define AML_RESOURCE_I2C_MIN_DATA_LEN 6 516 517 typedef struct aml_resource_spi_serialbus 518 { 519 AML_RESOURCE_LARGE_HEADER_COMMON 520 AML_RESOURCE_SERIAL_COMMON 521 UINT32 ConnectionSpeed; 522 UINT8 DataBitLength; 523 UINT8 ClockPhase; 524 UINT8 ClockPolarity; 525 UINT16 DeviceSelection; 526 /* 527 * Optional fields follow immediately: 528 * 1) Vendor Data bytes 529 * 2) Resource Source String 530 */ 531 532 } AML_RESOURCE_SPI_SERIALBUS; 533 534 #define AML_RESOURCE_SPI_REVISION 1 /* ACPI 5.0 */ 535 #define AML_RESOURCE_SPI_TYPE_REVISION 1 /* ACPI 5.0 */ 536 #define AML_RESOURCE_SPI_MIN_DATA_LEN 9 537 538 typedef struct aml_resource_uart_serialbus 539 { 540 AML_RESOURCE_LARGE_HEADER_COMMON 541 AML_RESOURCE_SERIAL_COMMON 542 UINT32 DefaultBaudRate; 543 UINT16 RxFifoSize; 544 UINT16 TxFifoSize; 545 UINT8 Parity; 546 UINT8 LinesEnabled; 547 /* 548 * Optional fields follow immediately: 549 * 1) Vendor Data bytes 550 * 2) Resource Source String 551 */ 552 553 } AML_RESOURCE_UART_SERIALBUS; 554 555 #define AML_RESOURCE_UART_REVISION 1 /* ACPI 5.0 */ 556 #define AML_RESOURCE_UART_TYPE_REVISION 1 /* ACPI 5.0 */ 557 #define AML_RESOURCE_UART_MIN_DATA_LEN 10 558 559 typedef struct aml_resource_pin_function 560 { 561 AML_RESOURCE_LARGE_HEADER_COMMON 562 UINT8 RevisionId; 563 UINT16 Flags; 564 UINT8 PinConfig; 565 UINT16 FunctionNumber; 566 UINT16 PinTableOffset; 567 UINT8 ResSourceIndex; 568 UINT16 ResSourceOffset; 569 UINT16 VendorOffset; 570 UINT16 VendorLength; 571 /* 572 * Optional fields follow immediately: 573 * 1) PIN list (Words) 574 * 2) Resource Source String 575 * 3) Vendor Data bytes 576 */ 577 578 } AML_RESOURCE_PIN_FUNCTION; 579 580 #define AML_RESOURCE_PIN_FUNCTION_REVISION 1 /* ACPI 6.2 */ 581 582 typedef struct aml_resource_pin_config 583 { 584 AML_RESOURCE_LARGE_HEADER_COMMON 585 UINT8 RevisionId; 586 UINT16 Flags; 587 UINT8 PinConfigType; 588 UINT32 PinConfigValue; 589 UINT16 PinTableOffset; 590 UINT8 ResSourceIndex; 591 UINT16 ResSourceOffset; 592 UINT16 VendorOffset; 593 UINT16 VendorLength; 594 /* 595 * Optional fields follow immediately: 596 * 1) PIN list (Words) 597 * 2) Resource Source String 598 * 3) Vendor Data bytes 599 */ 600 601 } AML_RESOURCE_PIN_CONFIG; 602 603 #define AML_RESOURCE_CLOCK_INPUT_REVISION 1 /* ACPI 6.5 */ 604 605 typedef struct aml_resource_clock_input 606 { 607 AML_RESOURCE_LARGE_HEADER_COMMON 608 UINT8 RevisionId; 609 UINT16 Flags; 610 UINT16 FrequencyDivisor; 611 UINT32 FrequencyNumerator; 612 /* 613 * Optional fields follow immediately: 614 * 1) Resource Source index 615 * 2) Resource Source String 616 */ 617 } AML_RESOURCE_CLOCK_INPUT; 618 619 620 #define AML_RESOURCE_PIN_CONFIG_REVISION 1 /* ACPI 6.2 */ 621 622 typedef struct aml_resource_pin_group 623 { 624 AML_RESOURCE_LARGE_HEADER_COMMON 625 UINT8 RevisionId; 626 UINT16 Flags; 627 UINT16 PinTableOffset; 628 UINT16 LabelOffset; 629 UINT16 VendorOffset; 630 UINT16 VendorLength; 631 /* 632 * Optional fields follow immediately: 633 * 1) PIN list (Words) 634 * 2) Resource Label String 635 * 3) Vendor Data bytes 636 */ 637 638 } AML_RESOURCE_PIN_GROUP; 639 640 #define AML_RESOURCE_PIN_GROUP_REVISION 1 /* ACPI 6.2 */ 641 642 typedef struct aml_resource_pin_group_function 643 { 644 AML_RESOURCE_LARGE_HEADER_COMMON 645 UINT8 RevisionId; 646 UINT16 Flags; 647 UINT16 FunctionNumber; 648 UINT8 ResSourceIndex; 649 UINT16 ResSourceOffset; 650 UINT16 ResSourceLabelOffset; 651 UINT16 VendorOffset; 652 UINT16 VendorLength; 653 /* 654 * Optional fields follow immediately: 655 * 1) Resource Source String 656 * 2) Resource Source Label String 657 * 3) Vendor Data bytes 658 */ 659 660 } AML_RESOURCE_PIN_GROUP_FUNCTION; 661 662 #define AML_RESOURCE_PIN_GROUP_FUNCTION_REVISION 1 /* ACPI 6.2 */ 663 664 typedef struct aml_resource_pin_group_config 665 { 666 AML_RESOURCE_LARGE_HEADER_COMMON 667 UINT8 RevisionId; 668 UINT16 Flags; 669 UINT8 PinConfigType; 670 UINT32 PinConfigValue; 671 UINT8 ResSourceIndex; 672 UINT16 ResSourceOffset; 673 UINT16 ResSourceLabelOffset; 674 UINT16 VendorOffset; 675 UINT16 VendorLength; 676 /* 677 * Optional fields follow immediately: 678 * 1) Resource Source String 679 * 2) Resource Source Label String 680 * 3) Vendor Data bytes 681 */ 682 683 } AML_RESOURCE_PIN_GROUP_CONFIG; 684 685 #define AML_RESOURCE_PIN_GROUP_CONFIG_REVISION 1 /* ACPI 6.2 */ 686 687 /* Union of all resource descriptors, so we can allocate the worst case */ 688 689 typedef union aml_resource 690 { 691 /* Descriptor headers */ 692 693 UINT8 DescriptorType; 694 AML_RESOURCE_SMALL_HEADER SmallHeader; 695 AML_RESOURCE_LARGE_HEADER LargeHeader; 696 697 /* Small resource descriptors */ 698 699 AML_RESOURCE_IRQ Irq; 700 AML_RESOURCE_DMA Dma; 701 AML_RESOURCE_START_DEPENDENT StartDpf; 702 AML_RESOURCE_END_DEPENDENT EndDpf; 703 AML_RESOURCE_IO Io; 704 AML_RESOURCE_FIXED_IO FixedIo; 705 AML_RESOURCE_FIXED_DMA FixedDma; 706 AML_RESOURCE_VENDOR_SMALL VendorSmall; 707 AML_RESOURCE_END_TAG EndTag; 708 709 /* Large resource descriptors */ 710 711 AML_RESOURCE_MEMORY24 Memory24; 712 AML_RESOURCE_GENERIC_REGISTER GenericReg; 713 AML_RESOURCE_VENDOR_LARGE VendorLarge; 714 AML_RESOURCE_MEMORY32 Memory32; 715 AML_RESOURCE_FIXED_MEMORY32 FixedMemory32; 716 AML_RESOURCE_ADDRESS16 Address16; 717 AML_RESOURCE_ADDRESS32 Address32; 718 AML_RESOURCE_ADDRESS64 Address64; 719 AML_RESOURCE_EXTENDED_ADDRESS64 ExtAddress64; 720 AML_RESOURCE_EXTENDED_IRQ ExtendedIrq; 721 AML_RESOURCE_GPIO Gpio; 722 AML_RESOURCE_I2C_SERIALBUS I2cSerialBus; 723 AML_RESOURCE_SPI_SERIALBUS SpiSerialBus; 724 AML_RESOURCE_UART_SERIALBUS UartSerialBus; 725 AML_RESOURCE_CSI2_SERIALBUS Csi2SerialBus; 726 AML_RESOURCE_COMMON_SERIALBUS CommonSerialBus; 727 AML_RESOURCE_PIN_FUNCTION PinFunction; 728 AML_RESOURCE_PIN_CONFIG PinConfig; 729 AML_RESOURCE_PIN_GROUP PinGroup; 730 AML_RESOURCE_PIN_GROUP_FUNCTION PinGroupFunction; 731 AML_RESOURCE_PIN_GROUP_CONFIG PinGroupConfig; 732 AML_RESOURCE_CLOCK_INPUT ClockInput; 733 734 /* Utility overlays */ 735 736 AML_RESOURCE_ADDRESS Address; 737 UINT32 DwordItem; 738 UINT16 WordItem; 739 UINT8 ByteItem; 740 741 } AML_RESOURCE; 742 743 /* restore default alignment */ 744 745 #pragma pack() 746 747 /* Interfaces used by both the disassembler and compiler */ 748 749 void 750 MpSaveGpioInfo ( 751 ACPI_PARSE_OBJECT *Op, 752 AML_RESOURCE *Resource, 753 UINT32 PinCount, 754 UINT16 *PinList, 755 char *DeviceName); 756 757 void 758 MpSaveSerialInfo ( 759 ACPI_PARSE_OBJECT *Op, 760 AML_RESOURCE *Resource, 761 char *DeviceName); 762 763 char * 764 MpGetHidFromParseTree ( 765 ACPI_NAMESPACE_NODE *HidNode); 766 767 char * 768 MpGetHidViaNamestring ( 769 char *DeviceName); 770 771 char * 772 MpGetConnectionInfo ( 773 ACPI_PARSE_OBJECT *Op, 774 UINT32 PinIndex, 775 ACPI_NAMESPACE_NODE **TargetNode, 776 char **TargetName); 777 778 char * 779 MpGetParentDeviceHid ( 780 ACPI_PARSE_OBJECT *Op, 781 ACPI_NAMESPACE_NODE **TargetNode, 782 char **ParentDeviceName); 783 784 char * 785 MpGetDdnValue ( 786 char *DeviceName); 787 788 char * 789 MpGetHidValue ( 790 ACPI_NAMESPACE_NODE *DeviceNode); 791 792 #endif 793