Home | History | Annotate | Line # | Download | only in include
amlresrc.h revision 1.1
      1 
      2 /******************************************************************************
      3  *
      4  * Module Name: amlresrc.h - AML resource descriptors
      5  *
      6  *****************************************************************************/
      7 
      8 /******************************************************************************
      9  *
     10  * 1. Copyright Notice
     11  *
     12  * Some or all of this work - Copyright (c) 1999 - 2010, Intel Corp.
     13  * All rights reserved.
     14  *
     15  * 2. License
     16  *
     17  * 2.1. This is your license from Intel Corp. under its intellectual property
     18  * rights.  You may have additional license terms from the party that provided
     19  * you this software, covering your right to use that party's intellectual
     20  * property rights.
     21  *
     22  * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a
     23  * copy of the source code appearing in this file ("Covered Code") an
     24  * irrevocable, perpetual, worldwide license under Intel's copyrights in the
     25  * base code distributed originally by Intel ("Original Intel Code") to copy,
     26  * make derivatives, distribute, use and display any portion of the Covered
     27  * Code in any form, with the right to sublicense such rights; and
     28  *
     29  * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent
     30  * license (with the right to sublicense), under only those claims of Intel
     31  * patents that are infringed by the Original Intel Code, to make, use, sell,
     32  * offer to sell, and import the Covered Code and derivative works thereof
     33  * solely to the minimum extent necessary to exercise the above copyright
     34  * license, and in no event shall the patent license extend to any additions
     35  * to or modifications of the Original Intel Code.  No other license or right
     36  * is granted directly or by implication, estoppel or otherwise;
     37  *
     38  * The above copyright and patent license is granted only if the following
     39  * conditions are met:
     40  *
     41  * 3. Conditions
     42  *
     43  * 3.1. Redistribution of Source with Rights to Further Distribute Source.
     44  * Redistribution of source code of any substantial portion of the Covered
     45  * Code or modification with rights to further distribute source must include
     46  * the above Copyright Notice, the above License, this list of Conditions,
     47  * and the following Disclaimer and Export Compliance provision.  In addition,
     48  * Licensee must cause all Covered Code to which Licensee contributes to
     49  * contain a file documenting the changes Licensee made to create that Covered
     50  * Code and the date of any change.  Licensee must include in that file the
     51  * documentation of any changes made by any predecessor Licensee.  Licensee
     52  * must include a prominent statement that the modification is derived,
     53  * directly or indirectly, from Original Intel Code.
     54  *
     55  * 3.2. Redistribution of Source with no Rights to Further Distribute Source.
     56  * Redistribution of source code of any substantial portion of the Covered
     57  * Code or modification without rights to further distribute source must
     58  * include the following Disclaimer and Export Compliance provision in the
     59  * documentation and/or other materials provided with distribution.  In
     60  * addition, Licensee may not authorize further sublicense of source of any
     61  * portion of the Covered Code, and must include terms to the effect that the
     62  * license from Licensee to its licensee is limited to the intellectual
     63  * property embodied in the software Licensee provides to its licensee, and
     64  * not to intellectual property embodied in modifications its licensee may
     65  * make.
     66  *
     67  * 3.3. Redistribution of Executable. Redistribution in executable form of any
     68  * substantial portion of the Covered Code or modification must reproduce the
     69  * above Copyright Notice, and the following Disclaimer and Export Compliance
     70  * provision in the documentation and/or other materials provided with the
     71  * distribution.
     72  *
     73  * 3.4. Intel retains all right, title, and interest in and to the Original
     74  * Intel Code.
     75  *
     76  * 3.5. Neither the name Intel nor any other trademark owned or controlled by
     77  * Intel shall be used in advertising or otherwise to promote the sale, use or
     78  * other dealings in products derived from or relating to the Covered Code
     79  * without prior written authorization from Intel.
     80  *
     81  * 4. Disclaimer and Export Compliance
     82  *
     83  * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED
     84  * HERE.  ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE
     85  * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT,  ASSISTANCE,
     86  * INSTALLATION, TRAINING OR OTHER SERVICES.  INTEL WILL NOT PROVIDE ANY
     87  * UPDATES, ENHANCEMENTS OR EXTENSIONS.  INTEL SPECIFICALLY DISCLAIMS ANY
     88  * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A
     89  * PARTICULAR PURPOSE.
     90  *
     91  * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES
     92  * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR
     93  * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT,
     94  * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY
     95  * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL
     96  * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.  THESE LIMITATIONS
     97  * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY
     98  * LIMITED REMEDY.
     99  *
    100  * 4.3. Licensee shall not export, either directly or indirectly, any of this
    101  * software or system incorporating such software without first obtaining any
    102  * required license or other approval from the U. S. Department of Commerce or
    103  * any other agency or department of the United States Government.  In the
    104  * event Licensee exports any such software from the United States or
    105  * re-exports any such software from a foreign destination, Licensee shall
    106  * ensure that the distribution and export/re-export of the software is in
    107  * compliance with all laws, regulations, orders, or other restrictions of the
    108  * U.S. Export Administration Regulations. Licensee agrees that neither it nor
    109  * any of its subsidiaries will export/re-export any technical data, process,
    110  * software, or service, directly or indirectly, to any country for which the
    111  * United States government or any agency thereof requires an export license,
    112  * other governmental approval, or letter of assurance, without first obtaining
    113  * such license, approval or letter.
    114  *
    115  *****************************************************************************/
    116 
    117 /* acpisrc:StructDefs -- for acpisrc conversion */
    118 
    119 #ifndef __AMLRESRC_H
    120 #define __AMLRESRC_H
    121 
    122 
    123 /*
    124  * Resource descriptor tags, as defined in the ACPI specification.
    125  * Used to symbolically reference fields within a descriptor.
    126  */
    127 #define ACPI_RESTAG_ADDRESS                     "_ADR"
    128 #define ACPI_RESTAG_ALIGNMENT                   "_ALN"
    129 #define ACPI_RESTAG_ADDRESSSPACE                "_ASI"
    130 #define ACPI_RESTAG_ACCESSSIZE                  "_ASZ"
    131 #define ACPI_RESTAG_TYPESPECIFICATTRIBUTES      "_ATT"
    132 #define ACPI_RESTAG_BASEADDRESS                 "_BAS"
    133 #define ACPI_RESTAG_BUSMASTER                   "_BM_"  /* Master(1), Slave(0) */
    134 #define ACPI_RESTAG_DECODE                      "_DEC"
    135 #define ACPI_RESTAG_DMA                         "_DMA"
    136 #define ACPI_RESTAG_DMATYPE                     "_TYP"  /* Compatible(0), A(1), B(2), F(3) */
    137 #define ACPI_RESTAG_GRANULARITY                 "_GRA"
    138 #define ACPI_RESTAG_INTERRUPT                   "_INT"
    139 #define ACPI_RESTAG_INTERRUPTLEVEL              "_LL_"  /* ActiveLo(1), ActiveHi(0) */
    140 #define ACPI_RESTAG_INTERRUPTSHARE              "_SHR"  /* Shareable(1), NoShare(0) */
    141 #define ACPI_RESTAG_INTERRUPTTYPE               "_HE_"  /* Edge(1), Level(0) */
    142 #define ACPI_RESTAG_LENGTH                      "_LEN"
    143 #define ACPI_RESTAG_MEMATTRIBUTES               "_MTP"  /* Memory(0), Reserved(1), ACPI(2), NVS(3) */
    144 #define ACPI_RESTAG_MEMTYPE                     "_MEM"  /* NonCache(0), Cacheable(1) Cache+combine(2), Cache+prefetch(3) */
    145 #define ACPI_RESTAG_MAXADDR                     "_MAX"
    146 #define ACPI_RESTAG_MINADDR                     "_MIN"
    147 #define ACPI_RESTAG_MAXTYPE                     "_MAF"
    148 #define ACPI_RESTAG_MINTYPE                     "_MIF"
    149 #define ACPI_RESTAG_REGISTERBITOFFSET           "_RBO"
    150 #define ACPI_RESTAG_REGISTERBITWIDTH            "_RBW"
    151 #define ACPI_RESTAG_RANGETYPE                   "_RNG"
    152 #define ACPI_RESTAG_READWRITETYPE               "_RW_"  /* ReadOnly(0), Writeable (1) */
    153 #define ACPI_RESTAG_TRANSLATION                 "_TRA"
    154 #define ACPI_RESTAG_TRANSTYPE                   "_TRS"  /* Sparse(1), Dense(0) */
    155 #define ACPI_RESTAG_TYPE                        "_TTP"  /* Translation(1), Static (0) */
    156 #define ACPI_RESTAG_XFERTYPE                    "_SIZ"  /* 8(0), 8And16(1), 16(2) */
    157 
    158 
    159 /* Default sizes for "small" resource descriptors */
    160 
    161 #define ASL_RDESC_IRQ_SIZE                      0x02
    162 #define ASL_RDESC_DMA_SIZE                      0x02
    163 #define ASL_RDESC_ST_DEPEND_SIZE                0x00
    164 #define ASL_RDESC_END_DEPEND_SIZE               0x00
    165 #define ASL_RDESC_IO_SIZE                       0x07
    166 #define ASL_RDESC_FIXED_IO_SIZE                 0x03
    167 #define ASL_RDESC_END_TAG_SIZE                  0x01
    168 
    169 
    170 typedef struct asl_resource_node
    171 {
    172     UINT32                          BufferLength;
    173     void                            *Buffer;
    174     struct asl_resource_node        *Next;
    175 
    176 } ASL_RESOURCE_NODE;
    177 
    178 
    179 /* Macros used to generate AML resource length fields */
    180 
    181 #define ACPI_AML_SIZE_LARGE(r)      (sizeof (r) - sizeof (AML_RESOURCE_LARGE_HEADER))
    182 #define ACPI_AML_SIZE_SMALL(r)      (sizeof (r) - sizeof (AML_RESOURCE_SMALL_HEADER))
    183 
    184 /*
    185  * Resource descriptors defined in the ACPI specification.
    186  *
    187  * Packing/alignment must be BYTE because these descriptors
    188  * are used to overlay the raw AML byte stream.
    189  */
    190 #pragma pack(1)
    191 
    192 /*
    193  * SMALL descriptors
    194  */
    195 #define AML_RESOURCE_SMALL_HEADER_COMMON \
    196     UINT8                           DescriptorType;
    197 
    198 typedef struct aml_resource_small_header
    199 {
    200     AML_RESOURCE_SMALL_HEADER_COMMON
    201 
    202 } AML_RESOURCE_SMALL_HEADER;
    203 
    204 
    205 typedef struct aml_resource_irq
    206 {
    207     AML_RESOURCE_SMALL_HEADER_COMMON
    208     UINT16                          IrqMask;
    209     UINT8                           Flags;
    210 
    211 } AML_RESOURCE_IRQ;
    212 
    213 
    214 typedef struct aml_resource_irq_noflags
    215 {
    216     AML_RESOURCE_SMALL_HEADER_COMMON
    217     UINT16                          IrqMask;
    218 
    219 } AML_RESOURCE_IRQ_NOFLAGS;
    220 
    221 
    222 typedef struct aml_resource_dma
    223 {
    224     AML_RESOURCE_SMALL_HEADER_COMMON
    225     UINT8                           DmaChannelMask;
    226     UINT8                           Flags;
    227 
    228 } AML_RESOURCE_DMA;
    229 
    230 
    231 typedef struct aml_resource_start_dependent
    232 {
    233     AML_RESOURCE_SMALL_HEADER_COMMON
    234     UINT8                           Flags;
    235 
    236 } AML_RESOURCE_START_DEPENDENT;
    237 
    238 
    239 typedef struct aml_resource_start_dependent_noprio
    240 {
    241     AML_RESOURCE_SMALL_HEADER_COMMON
    242 
    243 } AML_RESOURCE_START_DEPENDENT_NOPRIO;
    244 
    245 
    246 typedef struct aml_resource_end_dependent
    247 {
    248     AML_RESOURCE_SMALL_HEADER_COMMON
    249 
    250 } AML_RESOURCE_END_DEPENDENT;
    251 
    252 
    253 typedef struct aml_resource_io
    254 {
    255     AML_RESOURCE_SMALL_HEADER_COMMON
    256     UINT8                           Flags;
    257     UINT16                          Minimum;
    258     UINT16                          Maximum;
    259     UINT8                           Alignment;
    260     UINT8                           AddressLength;
    261 
    262 } AML_RESOURCE_IO;
    263 
    264 
    265 typedef struct aml_resource_fixed_io
    266 {
    267     AML_RESOURCE_SMALL_HEADER_COMMON
    268     UINT16                          Address;
    269     UINT8                           AddressLength;
    270 
    271 } AML_RESOURCE_FIXED_IO;
    272 
    273 
    274 typedef struct aml_resource_vendor_small
    275 {
    276     AML_RESOURCE_SMALL_HEADER_COMMON
    277 
    278 } AML_RESOURCE_VENDOR_SMALL;
    279 
    280 
    281 typedef struct aml_resource_end_tag
    282 {
    283     AML_RESOURCE_SMALL_HEADER_COMMON
    284     UINT8                           Checksum;
    285 
    286 } AML_RESOURCE_END_TAG;
    287 
    288 
    289 /*
    290  * LARGE descriptors
    291  */
    292 #define AML_RESOURCE_LARGE_HEADER_COMMON \
    293     UINT8                           DescriptorType;\
    294     UINT16                          ResourceLength;
    295 
    296 typedef struct aml_resource_large_header
    297 {
    298     AML_RESOURCE_LARGE_HEADER_COMMON
    299 
    300 } AML_RESOURCE_LARGE_HEADER;
    301 
    302 
    303 /* General Flags for address space resource descriptors */
    304 
    305 #define ACPI_RESOURCE_FLAG_DEC      2
    306 #define ACPI_RESOURCE_FLAG_MIF      4
    307 #define ACPI_RESOURCE_FLAG_MAF      8
    308 
    309 typedef struct aml_resource_memory24
    310 {
    311     AML_RESOURCE_LARGE_HEADER_COMMON
    312     UINT8                           Flags;
    313     UINT16                          Minimum;
    314     UINT16                          Maximum;
    315     UINT16                          Alignment;
    316     UINT16                          AddressLength;
    317 
    318 } AML_RESOURCE_MEMORY24;
    319 
    320 
    321 typedef struct aml_resource_vendor_large
    322 {
    323     AML_RESOURCE_LARGE_HEADER_COMMON
    324 
    325 } AML_RESOURCE_VENDOR_LARGE;
    326 
    327 
    328 typedef struct aml_resource_memory32
    329 {
    330     AML_RESOURCE_LARGE_HEADER_COMMON
    331     UINT8                           Flags;
    332     UINT32                          Minimum;
    333     UINT32                          Maximum;
    334     UINT32                          Alignment;
    335     UINT32                          AddressLength;
    336 
    337 } AML_RESOURCE_MEMORY32;
    338 
    339 
    340 typedef struct aml_resource_fixed_memory32
    341 {
    342     AML_RESOURCE_LARGE_HEADER_COMMON
    343     UINT8                           Flags;
    344     UINT32                          Address;
    345     UINT32                          AddressLength;
    346 
    347 } AML_RESOURCE_FIXED_MEMORY32;
    348 
    349 
    350 #define AML_RESOURCE_ADDRESS_COMMON \
    351     UINT8                           ResourceType; \
    352     UINT8                           Flags; \
    353     UINT8                           SpecificFlags;
    354 
    355 
    356 typedef struct aml_resource_address
    357 {
    358     AML_RESOURCE_LARGE_HEADER_COMMON
    359     AML_RESOURCE_ADDRESS_COMMON
    360 
    361 } AML_RESOURCE_ADDRESS;
    362 
    363 
    364 typedef struct aml_resource_extended_address64
    365 {
    366     AML_RESOURCE_LARGE_HEADER_COMMON
    367     AML_RESOURCE_ADDRESS_COMMON
    368     UINT8                           RevisionID;
    369     UINT8                           Reserved;
    370     UINT64                          Granularity;
    371     UINT64                          Minimum;
    372     UINT64                          Maximum;
    373     UINT64                          TranslationOffset;
    374     UINT64                          AddressLength;
    375     UINT64                          TypeSpecific;
    376 
    377 } AML_RESOURCE_EXTENDED_ADDRESS64;
    378 
    379 #define AML_RESOURCE_EXTENDED_ADDRESS_REVISION          1       /* ACPI 3.0 */
    380 
    381 
    382 typedef struct aml_resource_address64
    383 {
    384     AML_RESOURCE_LARGE_HEADER_COMMON
    385     AML_RESOURCE_ADDRESS_COMMON
    386     UINT64                          Granularity;
    387     UINT64                          Minimum;
    388     UINT64                          Maximum;
    389     UINT64                          TranslationOffset;
    390     UINT64                          AddressLength;
    391 
    392 } AML_RESOURCE_ADDRESS64;
    393 
    394 
    395 typedef struct aml_resource_address32
    396 {
    397     AML_RESOURCE_LARGE_HEADER_COMMON
    398     AML_RESOURCE_ADDRESS_COMMON
    399     UINT32                          Granularity;
    400     UINT32                          Minimum;
    401     UINT32                          Maximum;
    402     UINT32                          TranslationOffset;
    403     UINT32                          AddressLength;
    404 
    405 } AML_RESOURCE_ADDRESS32;
    406 
    407 
    408 typedef struct aml_resource_address16
    409 {
    410     AML_RESOURCE_LARGE_HEADER_COMMON
    411     AML_RESOURCE_ADDRESS_COMMON
    412     UINT16                          Granularity;
    413     UINT16                          Minimum;
    414     UINT16                          Maximum;
    415     UINT16                          TranslationOffset;
    416     UINT16                          AddressLength;
    417 
    418 } AML_RESOURCE_ADDRESS16;
    419 
    420 
    421 typedef struct aml_resource_extended_irq
    422 {
    423     AML_RESOURCE_LARGE_HEADER_COMMON
    424     UINT8                           Flags;
    425     UINT8                           InterruptCount;
    426     UINT32                          Interrupts[1];
    427     /* ResSourceIndex, ResSource optional fields follow */
    428 
    429 } AML_RESOURCE_EXTENDED_IRQ;
    430 
    431 
    432 typedef struct aml_resource_generic_register
    433 {
    434     AML_RESOURCE_LARGE_HEADER_COMMON
    435     UINT8                           AddressSpaceId;
    436     UINT8                           BitWidth;
    437     UINT8                           BitOffset;
    438     UINT8                           AccessSize; /* ACPI 3.0, was previously Reserved */
    439     UINT64                          Address;
    440 
    441 } AML_RESOURCE_GENERIC_REGISTER;
    442 
    443 /* restore default alignment */
    444 
    445 #pragma pack()
    446 
    447 /* Union of all resource descriptors, so we can allocate the worst case */
    448 
    449 typedef union aml_resource
    450 {
    451     /* Descriptor headers */
    452 
    453     UINT8                                   DescriptorType;
    454     AML_RESOURCE_SMALL_HEADER               SmallHeader;
    455     AML_RESOURCE_LARGE_HEADER               LargeHeader;
    456 
    457     /* Small resource descriptors */
    458 
    459     AML_RESOURCE_IRQ                        Irq;
    460     AML_RESOURCE_DMA                        Dma;
    461     AML_RESOURCE_START_DEPENDENT            StartDpf;
    462     AML_RESOURCE_END_DEPENDENT              EndDpf;
    463     AML_RESOURCE_IO                         Io;
    464     AML_RESOURCE_FIXED_IO                   FixedIo;
    465     AML_RESOURCE_VENDOR_SMALL               VendorSmall;
    466     AML_RESOURCE_END_TAG                    EndTag;
    467 
    468     /* Large resource descriptors */
    469 
    470     AML_RESOURCE_MEMORY24                   Memory24;
    471     AML_RESOURCE_GENERIC_REGISTER           GenericReg;
    472     AML_RESOURCE_VENDOR_LARGE               VendorLarge;
    473     AML_RESOURCE_MEMORY32                   Memory32;
    474     AML_RESOURCE_FIXED_MEMORY32             FixedMemory32;
    475     AML_RESOURCE_ADDRESS16                  Address16;
    476     AML_RESOURCE_ADDRESS32                  Address32;
    477     AML_RESOURCE_ADDRESS64                  Address64;
    478     AML_RESOURCE_EXTENDED_ADDRESS64         ExtAddress64;
    479     AML_RESOURCE_EXTENDED_IRQ               ExtendedIrq;
    480 
    481     /* Utility overlays */
    482 
    483     AML_RESOURCE_ADDRESS                    Address;
    484     UINT32                                  DwordItem;
    485     UINT16                                  WordItem;
    486     UINT8                                   ByteItem;
    487 
    488 } AML_RESOURCE;
    489 
    490 #endif
    491 
    492