Home | History | Annotate | Line # | Download | only in include
      1 /******************************************************************************
      2  *
      3  * Module Name: amlresrc.h - AML resource descriptors
      4  *
      5  *****************************************************************************/
      6 
      7 /*
      8  * Copyright (C) 2000 - 2025, 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