Home | History | Annotate | Line # | Download | only in include
      1 /******************************************************************************
      2  *
      3  * Name: acrestyp.h - Defines, types, and structures for 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 #ifndef __ACRESTYP_H__
     45 #define __ACRESTYP_H__
     46 
     47 
     48 /*
     49  * Definitions for Resource Attributes
     50  */
     51 typedef UINT16                          ACPI_RS_LENGTH;    /* Resource Length field is fixed at 16 bits */
     52 typedef UINT32                          ACPI_RSDESC_SIZE;  /* Max Resource Descriptor size is (Length+3) = (64K-1)+3 */
     53 
     54 /*
     55  * Memory Attributes
     56  */
     57 #define ACPI_READ_ONLY_MEMORY           (UINT8) 0x00
     58 #define ACPI_READ_WRITE_MEMORY          (UINT8) 0x01
     59 
     60 #define ACPI_NON_CACHEABLE_MEMORY       (UINT8) 0x00
     61 #define ACPI_CACHABLE_MEMORY            (UINT8) 0x01
     62 #define ACPI_WRITE_COMBINING_MEMORY     (UINT8) 0x02
     63 #define ACPI_PREFETCHABLE_MEMORY        (UINT8) 0x03
     64 
     65 /*! [Begin] no source code translation */
     66 /*
     67  * IO Attributes
     68  * The ISA IO ranges are:     n000-n0FFh,  n400-n4FFh, n800-n8FFh, nC00-nCFFh.
     69  * The non-ISA IO ranges are: n100-n3FFh,  n500-n7FFh, n900-nBFFh, nCD0-nFFFh.
     70  */
     71 /*! [End] no source code translation !*/
     72 
     73 #define ACPI_NON_ISA_ONLY_RANGES        (UINT8) 0x01
     74 #define ACPI_ISA_ONLY_RANGES            (UINT8) 0x02
     75 #define ACPI_ENTIRE_RANGE               (ACPI_NON_ISA_ONLY_RANGES | ACPI_ISA_ONLY_RANGES)
     76 
     77 /* Type of translation - 1=Sparse, 0=Dense */
     78 
     79 #define ACPI_SPARSE_TRANSLATION         (UINT8) 0x01
     80 
     81 /*
     82  * IO Port Descriptor Decode
     83  */
     84 #define ACPI_DECODE_10                  (UINT8) 0x00    /* 10-bit IO address decode */
     85 #define ACPI_DECODE_16                  (UINT8) 0x01    /* 16-bit IO address decode */
     86 
     87 /*
     88  * Interrupt attributes - used in multiple descriptors
     89  */
     90 
     91 /* Triggering */
     92 
     93 #define ACPI_LEVEL_SENSITIVE            (UINT8) 0x00
     94 #define ACPI_EDGE_SENSITIVE             (UINT8) 0x01
     95 
     96 /* Polarity */
     97 
     98 #define ACPI_ACTIVE_HIGH                (UINT8) 0x00
     99 #define ACPI_ACTIVE_LOW                 (UINT8) 0x01
    100 #define ACPI_ACTIVE_BOTH                (UINT8) 0x02
    101 
    102 /* Sharing */
    103 
    104 #define ACPI_EXCLUSIVE                  (UINT8) 0x00
    105 #define ACPI_SHARED                     (UINT8) 0x01
    106 
    107 /* Wake */
    108 
    109 #define ACPI_NOT_WAKE_CAPABLE           (UINT8) 0x00
    110 #define ACPI_WAKE_CAPABLE               (UINT8) 0x01
    111 
    112 /*
    113  * DMA Attributes
    114  */
    115 #define ACPI_COMPATIBILITY              (UINT8) 0x00
    116 #define ACPI_TYPE_A                     (UINT8) 0x01
    117 #define ACPI_TYPE_B                     (UINT8) 0x02
    118 #define ACPI_TYPE_F                     (UINT8) 0x03
    119 
    120 #define ACPI_NOT_BUS_MASTER             (UINT8) 0x00
    121 #define ACPI_BUS_MASTER                 (UINT8) 0x01
    122 
    123 #define ACPI_TRANSFER_8                 (UINT8) 0x00
    124 #define ACPI_TRANSFER_8_16              (UINT8) 0x01
    125 #define ACPI_TRANSFER_16                (UINT8) 0x02
    126 
    127 /*
    128  * Start Dependent Functions Priority definitions
    129  */
    130 #define ACPI_GOOD_CONFIGURATION         (UINT8) 0x00
    131 #define ACPI_ACCEPTABLE_CONFIGURATION   (UINT8) 0x01
    132 #define ACPI_SUB_OPTIMAL_CONFIGURATION  (UINT8) 0x02
    133 
    134 /*
    135  * 16, 32 and 64-bit Address Descriptor resource types
    136  */
    137 #define ACPI_MEMORY_RANGE               (UINT8) 0x00
    138 #define ACPI_IO_RANGE                   (UINT8) 0x01
    139 #define ACPI_BUS_NUMBER_RANGE           (UINT8) 0x02
    140 
    141 #define ACPI_ADDRESS_NOT_FIXED          (UINT8) 0x00
    142 #define ACPI_ADDRESS_FIXED              (UINT8) 0x01
    143 
    144 #define ACPI_POS_DECODE                 (UINT8) 0x00
    145 #define ACPI_SUB_DECODE                 (UINT8) 0x01
    146 
    147 /* Producer/Consumer */
    148 
    149 #define ACPI_PRODUCER                   (UINT8) 0x00
    150 #define ACPI_CONSUMER                   (UINT8) 0x01
    151 
    152 
    153 /*
    154  * If possible, pack the following structures to byte alignment
    155  */
    156 #ifndef ACPI_MISALIGNMENT_NOT_SUPPORTED
    157 #pragma pack(1)
    158 #endif
    159 
    160 /* UUID data structures for use in vendor-defined resource descriptors */
    161 
    162 typedef struct acpi_uuid
    163 {
    164     UINT8                           Data[ACPI_UUID_LENGTH];
    165 } ACPI_UUID;
    166 
    167 typedef struct acpi_vendor_uuid
    168 {
    169     UINT8                           Subtype;
    170     UINT8                           Data[ACPI_UUID_LENGTH];
    171 
    172 } ACPI_VENDOR_UUID;
    173 
    174 /*
    175  * Structures used to describe device resources
    176  */
    177 typedef struct acpi_resource_irq
    178 {
    179     UINT8                           DescriptorLength;
    180     UINT8                           Triggering;
    181     UINT8                           Polarity;
    182     UINT8                           Shareable;
    183     UINT8                           WakeCapable;
    184     UINT8                           InterruptCount;
    185     union {
    186         UINT8                       Interrupt;
    187         ACPI_FLEX_ARRAY(UINT8,      Interrupts);
    188     };
    189 
    190 } ACPI_RESOURCE_IRQ;
    191 
    192 typedef struct acpi_resource_dma
    193 {
    194     UINT8                           Type;
    195     UINT8                           BusMaster;
    196     UINT8                           Transfer;
    197     UINT8                           ChannelCount;
    198     union {
    199         UINT8                       Channel;
    200         ACPI_FLEX_ARRAY(UINT8,      Channels);
    201     };
    202 
    203 } ACPI_RESOURCE_DMA;
    204 
    205 typedef struct acpi_resource_start_dependent
    206 {
    207     UINT8                           DescriptorLength;
    208     UINT8                           CompatibilityPriority;
    209     UINT8                           PerformanceRobustness;
    210 
    211 } ACPI_RESOURCE_START_DEPENDENT;
    212 
    213 
    214 /*
    215  * The END_DEPENDENT_FUNCTIONS_RESOURCE struct is not
    216  * needed because it has no fields
    217  */
    218 
    219 
    220 typedef struct acpi_resource_io
    221 {
    222     UINT8                           IoDecode;
    223     UINT8                           Alignment;
    224     UINT8                           AddressLength;
    225     UINT16                          Minimum;
    226     UINT16                          Maximum;
    227 
    228 } ACPI_RESOURCE_IO;
    229 
    230 typedef struct acpi_resource_fixed_io
    231 {
    232     UINT16                          Address;
    233     UINT8                           AddressLength;
    234 
    235 } ACPI_RESOURCE_FIXED_IO;
    236 
    237 typedef struct acpi_resource_fixed_dma
    238 {
    239     UINT16                          RequestLines;
    240     UINT16                          Channels;
    241     UINT8                           Width;
    242 
    243 } ACPI_RESOURCE_FIXED_DMA;
    244 
    245 /* Values for Width field above */
    246 
    247 #define ACPI_DMA_WIDTH8                         0
    248 #define ACPI_DMA_WIDTH16                        1
    249 #define ACPI_DMA_WIDTH32                        2
    250 #define ACPI_DMA_WIDTH64                        3
    251 #define ACPI_DMA_WIDTH128                       4
    252 #define ACPI_DMA_WIDTH256                       5
    253 
    254 
    255 typedef struct acpi_resource_vendor
    256 {
    257     UINT16                          ByteLength;
    258     UINT8                           ByteData[];
    259 
    260 } ACPI_RESOURCE_VENDOR;
    261 
    262 /* Vendor resource with UUID info (introduced in ACPI 3.0) */
    263 
    264 typedef struct acpi_resource_vendor_typed
    265 {
    266     UINT16                          ByteLength;
    267     UINT8                           UuidSubtype;
    268     UINT8                           Uuid[ACPI_UUID_LENGTH];
    269     UINT8                           ByteData[];
    270 
    271 } ACPI_RESOURCE_VENDOR_TYPED;
    272 
    273 typedef struct acpi_resource_end_tag
    274 {
    275     UINT8                           Checksum;
    276 
    277 } ACPI_RESOURCE_END_TAG;
    278 
    279 typedef struct acpi_resource_memory24
    280 {
    281     UINT8                           WriteProtect;
    282     UINT16                          Minimum;
    283     UINT16                          Maximum;
    284     UINT16                          Alignment;
    285     UINT16                          AddressLength;
    286 
    287 } ACPI_RESOURCE_MEMORY24;
    288 
    289 typedef struct acpi_resource_memory32
    290 {
    291     UINT8                           WriteProtect;
    292     UINT32                          Minimum;
    293     UINT32                          Maximum;
    294     UINT32                          Alignment;
    295     UINT32                          AddressLength;
    296 
    297 } ACPI_RESOURCE_MEMORY32;
    298 
    299 typedef struct acpi_resource_fixed_memory32
    300 {
    301     UINT8                           WriteProtect;
    302     UINT32                          Address;
    303     UINT32                          AddressLength;
    304 
    305 } ACPI_RESOURCE_FIXED_MEMORY32;
    306 
    307 typedef struct acpi_memory_attribute
    308 {
    309     UINT8                           WriteProtect;
    310     UINT8                           Caching;
    311     UINT8                           RangeType;
    312     UINT8                           Translation;
    313 
    314 } ACPI_MEMORY_ATTRIBUTE;
    315 
    316 typedef struct acpi_io_attribute
    317 {
    318     UINT8                           RangeType;
    319     UINT8                           Translation;
    320     UINT8                           TranslationType;
    321     UINT8                           Reserved1;
    322 
    323 } ACPI_IO_ATTRIBUTE;
    324 
    325 typedef union acpi_resource_attribute
    326 {
    327     ACPI_MEMORY_ATTRIBUTE           Mem;
    328     ACPI_IO_ATTRIBUTE               Io;
    329 
    330     /* Used for the *WordSpace macros */
    331 
    332     UINT8                           TypeSpecific;
    333 
    334 } ACPI_RESOURCE_ATTRIBUTE;
    335 
    336 typedef struct acpi_resource_label
    337 {
    338     UINT16                          StringLength;
    339     char                            *StringPtr;
    340 
    341 } ACPI_RESOURCE_LABEL;
    342 
    343 typedef struct acpi_resource_source
    344 {
    345     UINT8                           Index;
    346     UINT16                          StringLength;
    347     char                            *StringPtr;
    348 
    349 } ACPI_RESOURCE_SOURCE;
    350 
    351 /* Fields common to all address descriptors, 16/32/64 bit */
    352 
    353 #define ACPI_RESOURCE_ADDRESS_COMMON \
    354     UINT8                           ResourceType; \
    355     UINT8                           ProducerConsumer; \
    356     UINT8                           Decode; \
    357     UINT8                           MinAddressFixed; \
    358     UINT8                           MaxAddressFixed; \
    359     ACPI_RESOURCE_ATTRIBUTE         Info;
    360 
    361 typedef struct acpi_address16_attribute
    362 {
    363     UINT16                          Granularity;
    364     UINT16                          Minimum;
    365     UINT16                          Maximum;
    366     UINT16                          TranslationOffset;
    367     UINT16                          AddressLength;
    368 
    369 } ACPI_ADDRESS16_ATTRIBUTE;
    370 
    371 typedef struct acpi_address32_attribute
    372 {
    373     UINT32                          Granularity;
    374     UINT32                          Minimum;
    375     UINT32                          Maximum;
    376     UINT32                          TranslationOffset;
    377     UINT32                          AddressLength;
    378 
    379 } ACPI_ADDRESS32_ATTRIBUTE;
    380 
    381 typedef struct acpi_address64_attribute
    382 {
    383     UINT64                          Granularity;
    384     UINT64                          Minimum;
    385     UINT64                          Maximum;
    386     UINT64                          TranslationOffset;
    387     UINT64                          AddressLength;
    388 
    389 } ACPI_ADDRESS64_ATTRIBUTE;
    390 
    391 typedef struct acpi_resource_address
    392 {
    393     ACPI_RESOURCE_ADDRESS_COMMON
    394 
    395 } ACPI_RESOURCE_ADDRESS;
    396 
    397 typedef struct acpi_resource_address16
    398 {
    399     ACPI_RESOURCE_ADDRESS_COMMON
    400     ACPI_ADDRESS16_ATTRIBUTE        Address;
    401     ACPI_RESOURCE_SOURCE            ResourceSource;
    402 
    403 } ACPI_RESOURCE_ADDRESS16;
    404 
    405 typedef struct acpi_resource_address32
    406 {
    407     ACPI_RESOURCE_ADDRESS_COMMON
    408     ACPI_ADDRESS32_ATTRIBUTE        Address;
    409     ACPI_RESOURCE_SOURCE            ResourceSource;
    410 
    411 } ACPI_RESOURCE_ADDRESS32;
    412 
    413 typedef struct acpi_resource_address64
    414 {
    415     ACPI_RESOURCE_ADDRESS_COMMON
    416     ACPI_ADDRESS64_ATTRIBUTE        Address;
    417     ACPI_RESOURCE_SOURCE            ResourceSource;
    418 
    419 } ACPI_RESOURCE_ADDRESS64;
    420 
    421 typedef struct acpi_resource_extended_address64
    422 {
    423     ACPI_RESOURCE_ADDRESS_COMMON
    424     UINT8                           RevisionID;
    425     ACPI_ADDRESS64_ATTRIBUTE        Address;
    426     UINT64                          TypeSpecific;
    427 
    428 } ACPI_RESOURCE_EXTENDED_ADDRESS64;
    429 
    430 typedef struct acpi_resource_extended_irq
    431 {
    432     UINT8                           ProducerConsumer;
    433     UINT8                           Triggering;
    434     UINT8                           Polarity;
    435     UINT8                           Shareable;
    436     UINT8                           WakeCapable;
    437     UINT8                           InterruptCount;
    438     ACPI_RESOURCE_SOURCE            ResourceSource;
    439     union {
    440         UINT32                      Interrupt;
    441         ACPI_FLEX_ARRAY(UINT32,     Interrupts);
    442     };
    443 
    444 } ACPI_RESOURCE_EXTENDED_IRQ;
    445 
    446 typedef struct acpi_resource_generic_register
    447 {
    448     UINT8                           SpaceId;
    449     UINT8                           BitWidth;
    450     UINT8                           BitOffset;
    451     UINT8                           AccessSize;
    452     UINT64                          Address;
    453 
    454 } ACPI_RESOURCE_GENERIC_REGISTER;
    455 
    456 typedef struct acpi_resource_gpio
    457 {
    458     UINT8                           RevisionId;
    459     UINT8                           ConnectionType;
    460     UINT8                           ProducerConsumer;   /* For values, see Producer/Consumer above */
    461     UINT8                           PinConfig;
    462     UINT8                           Shareable;           /* For values, see Interrupt Attributes above */
    463     UINT8                           WakeCapable;        /* For values, see Interrupt Attributes above */
    464     UINT8                           IoRestriction;
    465     UINT8                           Triggering;         /* For values, see Interrupt Attributes above */
    466     UINT8                           Polarity;           /* For values, see Interrupt Attributes above */
    467     UINT16                          DriveStrength;
    468     UINT16                          DebounceTimeout;
    469     UINT16                          PinTableLength;
    470     UINT16                          VendorLength;
    471     ACPI_RESOURCE_SOURCE            ResourceSource;
    472     UINT16                          *PinTable;
    473     UINT8                           *VendorData;
    474 
    475 } ACPI_RESOURCE_GPIO;
    476 
    477 /* Values for GPIO ConnectionType field above */
    478 
    479 #define ACPI_RESOURCE_GPIO_TYPE_INT             0
    480 #define ACPI_RESOURCE_GPIO_TYPE_IO              1
    481 
    482 /* Values for PinConfig field above */
    483 
    484 #define ACPI_PIN_CONFIG_DEFAULT                 0
    485 #define ACPI_PIN_CONFIG_PULLUP                  1
    486 #define ACPI_PIN_CONFIG_PULLDOWN                2
    487 #define ACPI_PIN_CONFIG_NOPULL                  3
    488 
    489 /* Values for IoRestriction field above */
    490 
    491 #define ACPI_IO_RESTRICT_NONE                   0
    492 #define ACPI_IO_RESTRICT_INPUT                  1
    493 #define ACPI_IO_RESTRICT_OUTPUT                 2
    494 #define ACPI_IO_RESTRICT_NONE_PRESERVE          3
    495 
    496 
    497 /* Common structure for I2C, SPI, UART, CSI2 serial descriptors */
    498 
    499 #define ACPI_RESOURCE_SERIAL_COMMON \
    500     UINT8                           RevisionId; \
    501     UINT8                           Type; \
    502     UINT8                           ProducerConsumer;    /* For values, see Producer/Consumer above */\
    503     UINT8                           SlaveMode; \
    504     UINT8                           ConnectionSharing; \
    505     UINT8                           TypeRevisionId; \
    506     UINT16                          TypeDataLength; \
    507     UINT16                          VendorLength; \
    508     ACPI_RESOURCE_SOURCE            ResourceSource; \
    509     UINT8                           *VendorData;
    510 
    511 typedef struct acpi_resource_common_serialbus
    512 {
    513     ACPI_RESOURCE_SERIAL_COMMON
    514 
    515 } ACPI_RESOURCE_COMMON_SERIALBUS;
    516 
    517 /* Values for the Type field above */
    518 
    519 #define ACPI_RESOURCE_SERIAL_TYPE_I2C           1
    520 #define ACPI_RESOURCE_SERIAL_TYPE_SPI           2
    521 #define ACPI_RESOURCE_SERIAL_TYPE_UART          3
    522 #define ACPI_RESOURCE_SERIAL_TYPE_CSI2          4
    523 
    524 /* Values for SlaveMode field above */
    525 
    526 #define ACPI_CONTROLLER_INITIATED               0
    527 #define ACPI_DEVICE_INITIATED                   1
    528 
    529 
    530 typedef struct acpi_resource_i2c_serialbus
    531 {
    532     ACPI_RESOURCE_SERIAL_COMMON
    533     UINT8                           AccessMode;
    534     UINT16                          SlaveAddress;
    535     UINT32                          ConnectionSpeed;
    536 
    537 } ACPI_RESOURCE_I2C_SERIALBUS;
    538 
    539 /* Values for AccessMode field above */
    540 
    541 #define ACPI_I2C_7BIT_MODE                      0
    542 #define ACPI_I2C_10BIT_MODE                     1
    543 
    544 
    545 typedef struct acpi_resource_spi_serialbus
    546 {
    547     ACPI_RESOURCE_SERIAL_COMMON
    548     UINT8                           WireMode;
    549     UINT8                           DevicePolarity;
    550     UINT8                           DataBitLength;
    551     UINT8                           ClockPhase;
    552     UINT8                           ClockPolarity;
    553     UINT16                          DeviceSelection;
    554     UINT32                          ConnectionSpeed;
    555 
    556 } ACPI_RESOURCE_SPI_SERIALBUS;
    557 
    558 /* Values for WireMode field above */
    559 
    560 #define ACPI_SPI_4WIRE_MODE                     0
    561 #define ACPI_SPI_3WIRE_MODE                     1
    562 
    563 /* Values for DevicePolarity field above */
    564 
    565 #define ACPI_SPI_ACTIVE_LOW                     0
    566 #define ACPI_SPI_ACTIVE_HIGH                    1
    567 
    568 /* Values for ClockPhase field above */
    569 
    570 #define ACPI_SPI_FIRST_PHASE                    0
    571 #define ACPI_SPI_SECOND_PHASE                   1
    572 
    573 /* Values for ClockPolarity field above */
    574 
    575 #define ACPI_SPI_START_LOW                      0
    576 #define ACPI_SPI_START_HIGH                     1
    577 
    578 
    579 typedef struct acpi_resource_uart_serialbus
    580 {
    581     ACPI_RESOURCE_SERIAL_COMMON
    582     UINT8                           Endian;
    583     UINT8                           DataBits;
    584     UINT8                           StopBits;
    585     UINT8                           FlowControl;
    586     UINT8                           Parity;
    587     UINT8                           LinesEnabled;
    588     UINT16                          RxFifoSize;
    589     UINT16                          TxFifoSize;
    590     UINT32                          DefaultBaudRate;
    591 
    592 } ACPI_RESOURCE_UART_SERIALBUS;
    593 
    594 /* Values for Endian field above */
    595 
    596 #define ACPI_UART_LITTLE_ENDIAN                 0
    597 #define ACPI_UART_BIG_ENDIAN                    1
    598 
    599 /* Values for DataBits field above */
    600 
    601 #define ACPI_UART_5_DATA_BITS                   0
    602 #define ACPI_UART_6_DATA_BITS                   1
    603 #define ACPI_UART_7_DATA_BITS                   2
    604 #define ACPI_UART_8_DATA_BITS                   3
    605 #define ACPI_UART_9_DATA_BITS                   4
    606 
    607 /* Values for StopBits field above */
    608 
    609 #define ACPI_UART_NO_STOP_BITS                  0
    610 #define ACPI_UART_1_STOP_BIT                    1
    611 #define ACPI_UART_1P5_STOP_BITS                 2
    612 #define ACPI_UART_2_STOP_BITS                   3
    613 
    614 /* Values for FlowControl field above */
    615 
    616 #define ACPI_UART_FLOW_CONTROL_NONE             0
    617 #define ACPI_UART_FLOW_CONTROL_HW               1
    618 #define ACPI_UART_FLOW_CONTROL_XON_XOFF         2
    619 
    620 /* Values for Parity field above */
    621 
    622 #define ACPI_UART_PARITY_NONE                   0
    623 #define ACPI_UART_PARITY_EVEN                   1
    624 #define ACPI_UART_PARITY_ODD                    2
    625 #define ACPI_UART_PARITY_MARK                   3
    626 #define ACPI_UART_PARITY_SPACE                  4
    627 
    628 /* Values for LinesEnabled bitfield above */
    629 
    630 #define ACPI_UART_CARRIER_DETECT                (1<<2)
    631 #define ACPI_UART_RING_INDICATOR                (1<<3)
    632 #define ACPI_UART_DATA_SET_READY                (1<<4)
    633 #define ACPI_UART_DATA_TERMINAL_READY           (1<<5)
    634 #define ACPI_UART_CLEAR_TO_SEND                 (1<<6)
    635 #define ACPI_UART_REQUEST_TO_SEND               (1<<7)
    636 
    637 typedef struct acpi_resource_csi2_serialbus
    638 {
    639     ACPI_RESOURCE_SERIAL_COMMON
    640     UINT8                           LocalPortInstance;
    641     UINT8                           PhyType;
    642 
    643 } ACPI_RESOURCE_CSI2_SERIALBUS;
    644 
    645 typedef struct acpi_resource_pin_function
    646 {
    647     UINT8                           RevisionId;
    648     UINT8                           PinConfig;
    649     UINT8                           Shareable;           /* For values, see Interrupt Attributes above */
    650     UINT16                          FunctionNumber;
    651     UINT16                          PinTableLength;
    652     UINT16                          VendorLength;
    653     ACPI_RESOURCE_SOURCE            ResourceSource;
    654     UINT16                          *PinTable;
    655     UINT8                           *VendorData;
    656 
    657 } ACPI_RESOURCE_PIN_FUNCTION;
    658 
    659 typedef struct acpi_resource_pin_config
    660 {
    661     UINT8                           RevisionId;
    662     UINT8                           ProducerConsumer;   /* For values, see Producer/Consumer above */
    663     UINT8                           Shareable;           /* For values, see Interrupt Attributes above */
    664     UINT8                           PinConfigType;
    665     UINT32                          PinConfigValue;
    666     UINT16                          PinTableLength;
    667     UINT16                          VendorLength;
    668     ACPI_RESOURCE_SOURCE            ResourceSource;
    669     UINT16                          *PinTable;
    670     UINT8                           *VendorData;
    671 
    672 } ACPI_RESOURCE_PIN_CONFIG;
    673 
    674 typedef struct acpi_resource_clock_input
    675 {
    676     UINT8                           RevisionId;
    677     UINT8                           Mode;
    678     UINT8                           Scale;
    679     UINT16                          FrequencyDivisor;
    680     UINT32                          FrequencyNumerator;
    681     ACPI_RESOURCE_SOURCE            ResourceSource;
    682 } ACPI_RESOURCE_CLOCK_INPUT;
    683 
    684 /* Values for PinConfigType field above */
    685 
    686 #define ACPI_PIN_CONFIG_DEFAULT                 0
    687 #define ACPI_PIN_CONFIG_BIAS_PULL_UP            1
    688 #define ACPI_PIN_CONFIG_BIAS_PULL_DOWN          2
    689 #define ACPI_PIN_CONFIG_BIAS_DEFAULT            3
    690 #define ACPI_PIN_CONFIG_BIAS_DISABLE            4
    691 #define ACPI_PIN_CONFIG_BIAS_HIGH_IMPEDANCE     5
    692 #define ACPI_PIN_CONFIG_BIAS_BUS_HOLD           6
    693 #define ACPI_PIN_CONFIG_DRIVE_OPEN_DRAIN        7
    694 #define ACPI_PIN_CONFIG_DRIVE_OPEN_SOURCE       8
    695 #define ACPI_PIN_CONFIG_DRIVE_PUSH_PULL         9
    696 #define ACPI_PIN_CONFIG_DRIVE_STRENGTH          10
    697 #define ACPI_PIN_CONFIG_SLEW_RATE               11
    698 #define ACPI_PIN_CONFIG_INPUT_DEBOUNCE          12
    699 #define ACPI_PIN_CONFIG_INPUT_SCHMITT_TRIGGER   13
    700 
    701 typedef struct acpi_resource_pin_group
    702 {
    703     UINT8                           RevisionId;
    704     UINT8                           ProducerConsumer;   /* For values, see Producer/Consumer above */
    705     UINT16                          PinTableLength;
    706     UINT16                          VendorLength;
    707     UINT16                          *PinTable;
    708     ACPI_RESOURCE_LABEL             ResourceLabel;
    709     UINT8                           *VendorData;
    710 
    711 } ACPI_RESOURCE_PIN_GROUP;
    712 
    713 typedef struct acpi_resource_pin_group_function
    714 {
    715     UINT8                           RevisionId;
    716     UINT8                           ProducerConsumer;   /* For values, see Producer/Consumer above */
    717     UINT8                           Shareable;           /* For values, see Interrupt Attributes above */
    718     UINT16                          FunctionNumber;
    719     UINT16                          VendorLength;
    720     ACPI_RESOURCE_SOURCE            ResourceSource;
    721     ACPI_RESOURCE_LABEL             ResourceSourceLabel;
    722     UINT8                           *VendorData;
    723 
    724 } ACPI_RESOURCE_PIN_GROUP_FUNCTION;
    725 
    726 typedef struct acpi_resource_pin_group_config
    727 {
    728     UINT8                           RevisionId;
    729     UINT8                           ProducerConsumer;   /* For values, see Producer/Consumer above */
    730     UINT8                           Shareable;           /* For values, see Interrupt Attributes above */
    731     UINT8                           PinConfigType;      /* For values, see PinConfigType above */
    732     UINT32                          PinConfigValue;
    733     UINT16                          VendorLength;
    734     ACPI_RESOURCE_SOURCE            ResourceSource;
    735     ACPI_RESOURCE_LABEL             ResourceSourceLabel;
    736     UINT8                           *VendorData;
    737 
    738 } ACPI_RESOURCE_PIN_GROUP_CONFIG;
    739 
    740 /* ACPI_RESOURCE_TYPEs */
    741 
    742 #define ACPI_RESOURCE_TYPE_IRQ                  0
    743 #define ACPI_RESOURCE_TYPE_DMA                  1
    744 #define ACPI_RESOURCE_TYPE_START_DEPENDENT      2
    745 #define ACPI_RESOURCE_TYPE_END_DEPENDENT        3
    746 #define ACPI_RESOURCE_TYPE_IO                   4
    747 #define ACPI_RESOURCE_TYPE_FIXED_IO             5
    748 #define ACPI_RESOURCE_TYPE_VENDOR               6
    749 #define ACPI_RESOURCE_TYPE_END_TAG              7
    750 #define ACPI_RESOURCE_TYPE_MEMORY24             8
    751 #define ACPI_RESOURCE_TYPE_MEMORY32             9
    752 #define ACPI_RESOURCE_TYPE_FIXED_MEMORY32       10
    753 #define ACPI_RESOURCE_TYPE_ADDRESS16            11
    754 #define ACPI_RESOURCE_TYPE_ADDRESS32            12
    755 #define ACPI_RESOURCE_TYPE_ADDRESS64            13
    756 #define ACPI_RESOURCE_TYPE_EXTENDED_ADDRESS64   14  /* ACPI 3.0 */
    757 #define ACPI_RESOURCE_TYPE_EXTENDED_IRQ         15
    758 #define ACPI_RESOURCE_TYPE_GENERIC_REGISTER     16
    759 #define ACPI_RESOURCE_TYPE_GPIO                 17  /* ACPI 5.0 */
    760 #define ACPI_RESOURCE_TYPE_FIXED_DMA            18  /* ACPI 5.0 */
    761 #define ACPI_RESOURCE_TYPE_SERIAL_BUS           19  /* ACPI 5.0 */
    762 #define ACPI_RESOURCE_TYPE_PIN_FUNCTION         20  /* ACPI 6.2 */
    763 #define ACPI_RESOURCE_TYPE_PIN_CONFIG           21  /* ACPI 6.2 */
    764 #define ACPI_RESOURCE_TYPE_PIN_GROUP            22  /* ACPI 6.2 */
    765 #define ACPI_RESOURCE_TYPE_PIN_GROUP_FUNCTION   23  /* ACPI 6.2 */
    766 #define ACPI_RESOURCE_TYPE_PIN_GROUP_CONFIG     24  /* ACPI 6.2 */
    767 #define ACPI_RESOURCE_TYPE_CLOCK_INPUT          25  /* ACPI 6.5 */
    768 #define ACPI_RESOURCE_TYPE_MAX                  25
    769 
    770 /* Master union for resource descriptors */
    771 
    772 typedef union acpi_resource_data
    773 {
    774     ACPI_RESOURCE_IRQ                       Irq;
    775     ACPI_RESOURCE_DMA                       Dma;
    776     ACPI_RESOURCE_START_DEPENDENT           StartDpf;
    777     ACPI_RESOURCE_IO                        Io;
    778     ACPI_RESOURCE_FIXED_IO                  FixedIo;
    779     ACPI_RESOURCE_FIXED_DMA                 FixedDma;
    780     ACPI_RESOURCE_VENDOR                    Vendor;
    781     ACPI_RESOURCE_VENDOR_TYPED              VendorTyped;
    782     ACPI_RESOURCE_END_TAG                   EndTag;
    783     ACPI_RESOURCE_MEMORY24                  Memory24;
    784     ACPI_RESOURCE_MEMORY32                  Memory32;
    785     ACPI_RESOURCE_FIXED_MEMORY32            FixedMemory32;
    786     ACPI_RESOURCE_ADDRESS16                 Address16;
    787     ACPI_RESOURCE_ADDRESS32                 Address32;
    788     ACPI_RESOURCE_ADDRESS64                 Address64;
    789     ACPI_RESOURCE_EXTENDED_ADDRESS64        ExtAddress64;
    790     ACPI_RESOURCE_EXTENDED_IRQ              ExtendedIrq;
    791     ACPI_RESOURCE_GENERIC_REGISTER          GenericReg;
    792     ACPI_RESOURCE_GPIO                      Gpio;
    793     ACPI_RESOURCE_I2C_SERIALBUS             I2cSerialBus;
    794     ACPI_RESOURCE_SPI_SERIALBUS             SpiSerialBus;
    795     ACPI_RESOURCE_UART_SERIALBUS            UartSerialBus;
    796     ACPI_RESOURCE_CSI2_SERIALBUS            Csi2SerialBus;
    797     ACPI_RESOURCE_COMMON_SERIALBUS          CommonSerialBus;
    798     ACPI_RESOURCE_PIN_FUNCTION              PinFunction;
    799     ACPI_RESOURCE_PIN_CONFIG                PinConfig;
    800     ACPI_RESOURCE_PIN_GROUP                 PinGroup;
    801     ACPI_RESOURCE_PIN_GROUP_FUNCTION        PinGroupFunction;
    802     ACPI_RESOURCE_PIN_GROUP_CONFIG          PinGroupConfig;
    803     ACPI_RESOURCE_CLOCK_INPUT               ClockInput;
    804 
    805     /* Common fields */
    806 
    807     ACPI_RESOURCE_ADDRESS                   Address;        /* Common 16/32/64 address fields */
    808 
    809 } ACPI_RESOURCE_DATA;
    810 
    811 
    812 /* Common resource header */
    813 
    814 typedef struct acpi_resource
    815 {
    816     UINT32                          Type;
    817     UINT32                          Length;
    818     ACPI_RESOURCE_DATA              Data;
    819 
    820 } ACPI_RESOURCE;
    821 
    822 /* restore default alignment */
    823 
    824 #pragma pack()
    825 
    826 
    827 #define ACPI_RS_SIZE_NO_DATA                8       /* Id + Length fields */
    828 #define ACPI_RS_SIZE_MIN                    (UINT32) ACPI_ROUND_UP_TO_NATIVE_WORD (12)
    829 #define ACPI_RS_SIZE(Type)                  (UINT32) (ACPI_RS_SIZE_NO_DATA + sizeof (Type))
    830 
    831 /* Macro for walking resource templates with multiple descriptors */
    832 
    833 #define ACPI_NEXT_RESOURCE(Res) \
    834     ACPI_ADD_PTR (ACPI_RESOURCE, (Res), (Res)->Length)
    835 
    836 
    837 typedef struct acpi_pci_routing_table
    838 {
    839     UINT32                          Length;
    840     UINT32                          Pin;
    841     UINT64                          Address;        /* here for 64-bit alignment */
    842     UINT32                          SourceIndex;
    843     union {
    844                                     char Pad[4];    /* pad to 64 bits so sizeof() works in all cases */
    845                                     ACPI_FLEX_ARRAY(char, Source);
    846     };
    847 } ACPI_PCI_ROUTING_TABLE;
    848 
    849 #endif /* __ACRESTYP_H__ */
    850