1 
   2 /******************************************************************************
   3  *
   4  * Module Name: amlresrc.h - AML resource descriptors
   5  *
   6  *****************************************************************************/
   7 
   8 /*
   9  * Copyright (C) 2000 - 2011, Intel Corp.
  10  * All rights reserved.
  11  *
  12  * Redistribution and use in source and binary forms, with or without
  13  * modification, are permitted provided that the following conditions
  14  * are met:
  15  * 1. Redistributions of source code must retain the above copyright
  16  *    notice, this list of conditions, and the following disclaimer,
  17  *    without modification.
  18  * 2. Redistributions in binary form must reproduce at minimum a disclaimer
  19  *    substantially similar to the "NO WARRANTY" disclaimer below
  20  *    ("Disclaimer") and any redistribution must be conditioned upon
  21  *    including a substantially similar Disclaimer requirement for further
  22  *    binary redistribution.
  23  * 3. Neither the names of the above-listed copyright holders nor the names
  24  *    of any contributors may be used to endorse or promote products derived
  25  *    from this software without specific prior written permission.
  26  *
  27  * Alternatively, this software may be distributed under the terms of the
  28  * GNU General Public License ("GPL") version 2 as published by the Free
  29  * Software Foundation.
  30  *
  31  * NO WARRANTY
  32  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
  33  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
  34  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
  35  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
  36  * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  37  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  38  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  39  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
  40  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
  41  * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
  42  * POSSIBILITY OF SUCH DAMAGES.
  43  */
  44 
  45 /* acpisrc:StructDefs -- for acpisrc conversion */
  46 
  47 #ifndef __AMLRESRC_H
  48 #define __AMLRESRC_H
  49 
  50 
  51 /*
  52  * Resource descriptor tags, as defined in the ACPI specification.
  53  * Used to symbolically reference fields within a descriptor.
  54  */
  55 #define ACPI_RESTAG_ADDRESS                     "_ADR"
  56 #define ACPI_RESTAG_ALIGNMENT                   "_ALN"
  57 #define ACPI_RESTAG_ADDRESSSPACE                "_ASI"
  58 #define ACPI_RESTAG_ACCESSSIZE                  "_ASZ"
  59 #define ACPI_RESTAG_TYPESPECIFICATTRIBUTES      "_ATT"
  60 #define ACPI_RESTAG_BASEADDRESS                 "_BAS"
  61 #define ACPI_RESTAG_BUSMASTER                   "_BM_"  /* Master(1), Slave(0) */
  62 #define ACPI_RESTAG_DECODE                      "_DEC"
  63 #define ACPI_RESTAG_DMA                         "_DMA"
  64 #define ACPI_RESTAG_DMATYPE                     "_TYP"  /* Compatible(0), A(1), B(2), F(3) */
  65 #define ACPI_RESTAG_GRANULARITY                 "_GRA"
  66 #define ACPI_RESTAG_INTERRUPT                   "_INT"
  67 #define ACPI_RESTAG_INTERRUPTLEVEL              "_LL_"  /* ActiveLo(1), ActiveHi(0) */
  68 #define ACPI_RESTAG_INTERRUPTSHARE              "_SHR"  /* Shareable(1), NoShare(0) */
  69 #define ACPI_RESTAG_INTERRUPTTYPE               "_HE_"  /* Edge(1), Level(0) */
  70 #define ACPI_RESTAG_LENGTH                      "_LEN"
  71 #define ACPI_RESTAG_MEMATTRIBUTES               "_MTP"  /* Memory(0), Reserved(1), ACPI(2), NVS(3) */
  72 #define ACPI_RESTAG_MEMTYPE                     "_MEM"  /* NonCache(0), Cacheable(1) Cache+combine(2), Cache+prefetch(3) */
  73 #define ACPI_RESTAG_MAXADDR                     "_MAX"
  74 #define ACPI_RESTAG_MINADDR                     "_MIN"
  75 #define ACPI_RESTAG_MAXTYPE                     "_MAF"
  76 #define ACPI_RESTAG_MINTYPE                     "_MIF"
  77 #define ACPI_RESTAG_REGISTERBITOFFSET           "_RBO"
  78 #define ACPI_RESTAG_REGISTERBITWIDTH            "_RBW"
  79 #define ACPI_RESTAG_RANGETYPE                   "_RNG"
  80 #define ACPI_RESTAG_READWRITETYPE               "_RW_"  /* ReadOnly(0), Writeable (1) */
  81 #define ACPI_RESTAG_TRANSLATION                 "_TRA"
  82 #define ACPI_RESTAG_TRANSTYPE                   "_TRS"  /* Sparse(1), Dense(0) */
  83 #define ACPI_RESTAG_TYPE                        "_TTP"  /* Translation(1), Static (0) */
  84 #define ACPI_RESTAG_XFERTYPE                    "_SIZ"  /* 8(0), 8And16(1), 16(2) */
  85 
  86 
  87 /* Default sizes for "small" resource descriptors */
  88 
  89 #define ASL_RDESC_IRQ_SIZE                      0x02
  90 #define ASL_RDESC_DMA_SIZE                      0x02
  91 #define ASL_RDESC_ST_DEPEND_SIZE                0x00
  92 #define ASL_RDESC_END_DEPEND_SIZE               0x00
  93 #define ASL_RDESC_IO_SIZE                       0x07
  94 #define ASL_RDESC_FIXED_IO_SIZE                 0x03
  95 #define ASL_RDESC_END_TAG_SIZE                  0x01
  96 
  97 
  98 typedef struct asl_resource_node
  99 {
 100     UINT32                          BufferLength;
 101     void                            *Buffer;
 102     struct asl_resource_node        *Next;
 103 
 104 } ASL_RESOURCE_NODE;
 105 
 106 
 107 /* Macros used to generate AML resource length fields */
 108 
 109 #define ACPI_AML_SIZE_LARGE(r)      (sizeof (r) - sizeof (AML_RESOURCE_LARGE_HEADER))
 110 #define ACPI_AML_SIZE_SMALL(r)      (sizeof (r) - sizeof (AML_RESOURCE_SMALL_HEADER))
 111 
 112 /*
 113  * Resource descriptors defined in the ACPI specification.
 114  *
 115  * Packing/alignment must be BYTE because these descriptors
 116  * are used to overlay the raw AML byte stream.
 117  */
 118 #pragma pack(1)
 119 
 120 /*
 121  * SMALL descriptors
 122  */
 123 #define AML_RESOURCE_SMALL_HEADER_COMMON \
 124     UINT8                           DescriptorType;
 125 
 126 typedef struct aml_resource_small_header
 127 {
 128     AML_RESOURCE_SMALL_HEADER_COMMON
 129 
 130 } AML_RESOURCE_SMALL_HEADER;
 131 
 132 
 133 typedef struct aml_resource_irq
 134 {
 135     AML_RESOURCE_SMALL_HEADER_COMMON
 136     UINT16                          IrqMask;
 137     UINT8                           Flags;
 138 
 139 } AML_RESOURCE_IRQ;
 140 
 141 
 142 typedef struct aml_resource_irq_noflags
 143 {
 144     AML_RESOURCE_SMALL_HEADER_COMMON
 145     UINT16                          IrqMask;
 146 
 147 } AML_RESOURCE_IRQ_NOFLAGS;
 148 
 149 
 150 typedef struct aml_resource_dma
 151 {
 152     AML_RESOURCE_SMALL_HEADER_COMMON
 153     UINT8                           DmaChannelMask;
 154     UINT8                           Flags;
 155 
 156 } AML_RESOURCE_DMA;
 157 
 158 
 159 typedef struct aml_resource_start_dependent
 160 {
 161     AML_RESOURCE_SMALL_HEADER_COMMON
 162     UINT8                           Flags;
 163 
 164 } AML_RESOURCE_START_DEPENDENT;
 165 
 166 
 167 typedef struct aml_resource_start_dependent_noprio
 168 {
 169     AML_RESOURCE_SMALL_HEADER_COMMON
 170 
 171 } AML_RESOURCE_START_DEPENDENT_NOPRIO;
 172 
 173 
 174 typedef struct aml_resource_end_dependent
 175 {
 176     AML_RESOURCE_SMALL_HEADER_COMMON
 177 
 178 } AML_RESOURCE_END_DEPENDENT;
 179 
 180 
 181 typedef struct aml_resource_io
 182 {
 183     AML_RESOURCE_SMALL_HEADER_COMMON
 184     UINT8                           Flags;
 185     UINT16                          Minimum;
 186     UINT16                          Maximum;
 187     UINT8                           Alignment;
 188     UINT8                           AddressLength;
 189 
 190 } AML_RESOURCE_IO;
 191 
 192 
 193 typedef struct aml_resource_fixed_io
 194 {
 195     AML_RESOURCE_SMALL_HEADER_COMMON
 196     UINT16                          Address;
 197     UINT8                           AddressLength;
 198 
 199 } AML_RESOURCE_FIXED_IO;
 200 
 201 
 202 typedef struct aml_resource_vendor_small
 203 {
 204     AML_RESOURCE_SMALL_HEADER_COMMON
 205 
 206 } AML_RESOURCE_VENDOR_SMALL;
 207 
 208 
 209 typedef struct aml_resource_end_tag
 210 {
 211     AML_RESOURCE_SMALL_HEADER_COMMON
 212     UINT8                           Checksum;
 213 
 214 } AML_RESOURCE_END_TAG;
 215 
 216 
 217 /*
 218  * LARGE descriptors
 219  */
 220 #define AML_RESOURCE_LARGE_HEADER_COMMON \
 221     UINT8                           DescriptorType;\
 222     UINT16                          ResourceLength;
 223 
 224 typedef struct aml_resource_large_header
 225 {
 226     AML_RESOURCE_LARGE_HEADER_COMMON
 227 
 228 } AML_RESOURCE_LARGE_HEADER;
 229 
 230 
 231 /* General Flags for address space resource descriptors */
 232 
 233 #define ACPI_RESOURCE_FLAG_DEC      2
 234 #define ACPI_RESOURCE_FLAG_MIF      4
 235 #define ACPI_RESOURCE_FLAG_MAF      8
 236 
 237 typedef struct aml_resource_memory24
 238 {
 239     AML_RESOURCE_LARGE_HEADER_COMMON
 240     UINT8                           Flags;
 241     UINT16                          Minimum;
 242     UINT16                          Maximum;
 243     UINT16                          Alignment;
 244     UINT16                          AddressLength;
 245 
 246 } AML_RESOURCE_MEMORY24;
 247 
 248 
 249 typedef struct aml_resource_vendor_large
 250 {
 251     AML_RESOURCE_LARGE_HEADER_COMMON
 252 
 253 } AML_RESOURCE_VENDOR_LARGE;
 254 
 255 
 256 typedef struct aml_resource_memory32
 257 {
 258     AML_RESOURCE_LARGE_HEADER_COMMON
 259     UINT8                           Flags;
 260     UINT32                          Minimum;
 261     UINT32                          Maximum;
 262     UINT32                          Alignment;
 263     UINT32                          AddressLength;
 264 
 265 } AML_RESOURCE_MEMORY32;
 266 
 267 
 268 typedef struct aml_resource_fixed_memory32
 269 {
 270     AML_RESOURCE_LARGE_HEADER_COMMON
 271     UINT8                           Flags;
 272     UINT32                          Address;
 273     UINT32                          AddressLength;
 274 
 275 } AML_RESOURCE_FIXED_MEMORY32;
 276 
 277 
 278 #define AML_RESOURCE_ADDRESS_COMMON \
 279     UINT8                           ResourceType; \
 280     UINT8                           Flags; \
 281     UINT8                           SpecificFlags;
 282 
 283 
 284 typedef struct aml_resource_address
 285 {
 286     AML_RESOURCE_LARGE_HEADER_COMMON
 287     AML_RESOURCE_ADDRESS_COMMON
 288 
 289 } AML_RESOURCE_ADDRESS;
 290 
 291 
 292 typedef struct aml_resource_extended_address64
 293 {
 294     AML_RESOURCE_LARGE_HEADER_COMMON
 295     AML_RESOURCE_ADDRESS_COMMON
 296     UINT8                           RevisionID;
 297     UINT8                           Reserved;
 298     UINT64                          Granularity;
 299     UINT64                          Minimum;
 300     UINT64                          Maximum;
 301     UINT64                          TranslationOffset;
 302     UINT64                          AddressLength;
 303     UINT64                          TypeSpecific;
 304 
 305 } AML_RESOURCE_EXTENDED_ADDRESS64;
 306 
 307 #define AML_RESOURCE_EXTENDED_ADDRESS_REVISION          1       /* ACPI 3.0 */
 308 
 309 
 310 typedef struct aml_resource_address64
 311 {
 312     AML_RESOURCE_LARGE_HEADER_COMMON
 313     AML_RESOURCE_ADDRESS_COMMON
 314     UINT64                          Granularity;
 315     UINT64                          Minimum;
 316     UINT64                          Maximum;
 317     UINT64                          TranslationOffset;
 318     UINT64                          AddressLength;
 319 
 320 } AML_RESOURCE_ADDRESS64;
 321 
 322 
 323 typedef struct aml_resource_address32
 324 {
 325     AML_RESOURCE_LARGE_HEADER_COMMON
 326     AML_RESOURCE_ADDRESS_COMMON
 327     UINT32                          Granularity;
 328     UINT32                          Minimum;
 329     UINT32                          Maximum;
 330     UINT32                          TranslationOffset;
 331     UINT32                          AddressLength;
 332 
 333 } AML_RESOURCE_ADDRESS32;
 334 
 335 
 336 typedef struct aml_resource_address16
 337 {
 338     AML_RESOURCE_LARGE_HEADER_COMMON
 339     AML_RESOURCE_ADDRESS_COMMON
 340     UINT16                          Granularity;
 341     UINT16                          Minimum;
 342     UINT16                          Maximum;
 343     UINT16                          TranslationOffset;
 344     UINT16                          AddressLength;
 345 
 346 } AML_RESOURCE_ADDRESS16;
 347 
 348 
 349 typedef struct aml_resource_extended_irq
 350 {
 351     AML_RESOURCE_LARGE_HEADER_COMMON
 352     UINT8                           Flags;
 353     UINT8                           InterruptCount;
 354     UINT32                          Interrupts[1];
 355     /* ResSourceIndex, ResSource optional fields follow */
 356 
 357 } AML_RESOURCE_EXTENDED_IRQ;
 358 
 359 
 360 typedef struct aml_resource_generic_register
 361 {
 362     AML_RESOURCE_LARGE_HEADER_COMMON
 363     UINT8                           AddressSpaceId;
 364     UINT8                           BitWidth;
 365     UINT8                           BitOffset;
 366     UINT8                           AccessSize; /* ACPI 3.0, was previously Reserved */
 367     UINT64                          Address;
 368 
 369 } AML_RESOURCE_GENERIC_REGISTER;
 370 
 371 /* restore default alignment */
 372 
 373 #pragma pack()
 374 
 375 /* Union of all resource descriptors, so we can allocate the worst case */
 376 
 377 typedef union aml_resource
 378 {
 379     /* Descriptor headers */
 380 
 381     UINT8                                   DescriptorType;
 382     AML_RESOURCE_SMALL_HEADER               SmallHeader;
 383     AML_RESOURCE_LARGE_HEADER               LargeHeader;
 384 
 385     /* Small resource descriptors */
 386 
 387     AML_RESOURCE_IRQ                        Irq;
 388     AML_RESOURCE_DMA                        Dma;
 389     AML_RESOURCE_START_DEPENDENT            StartDpf;
 390     AML_RESOURCE_END_DEPENDENT              EndDpf;
 391     AML_RESOURCE_IO                         Io;
 392     AML_RESOURCE_FIXED_IO                   FixedIo;
 393     AML_RESOURCE_VENDOR_SMALL               VendorSmall;
 394     AML_RESOURCE_END_TAG                    EndTag;
 395 
 396     /* Large resource descriptors */
 397 
 398     AML_RESOURCE_MEMORY24                   Memory24;
 399     AML_RESOURCE_GENERIC_REGISTER           GenericReg;
 400     AML_RESOURCE_VENDOR_LARGE               VendorLarge;
 401     AML_RESOURCE_MEMORY32                   Memory32;
 402     AML_RESOURCE_FIXED_MEMORY32             FixedMemory32;
 403     AML_RESOURCE_ADDRESS16                  Address16;
 404     AML_RESOURCE_ADDRESS32                  Address32;
 405     AML_RESOURCE_ADDRESS64                  Address64;
 406     AML_RESOURCE_EXTENDED_ADDRESS64         ExtAddress64;
 407     AML_RESOURCE_EXTENDED_IRQ               ExtendedIrq;
 408 
 409     /* Utility overlays */
 410 
 411     AML_RESOURCE_ADDRESS                    Address;
 412     UINT32                                  DwordItem;
 413     UINT16                                  WordItem;
 414     UINT8                                   ByteItem;
 415 
 416 } AML_RESOURCE;
 417 
 418 #endif
 419