amlresrc.h revision 217365
1100966Siwasaki 2100966Siwasaki/****************************************************************************** 3100966Siwasaki * 4100966Siwasaki * Module Name: amlresrc.h - AML resource descriptors 5100966Siwasaki * 6100966Siwasaki *****************************************************************************/ 7100966Siwasaki 8217365Sjkim/* 9217365Sjkim * Copyright (C) 2000 - 2011, Intel Corp. 10100966Siwasaki * All rights reserved. 11100966Siwasaki * 12217365Sjkim * Redistribution and use in source and binary forms, with or without 13217365Sjkim * modification, are permitted provided that the following conditions 14217365Sjkim * are met: 15217365Sjkim * 1. Redistributions of source code must retain the above copyright 16217365Sjkim * notice, this list of conditions, and the following disclaimer, 17217365Sjkim * without modification. 18217365Sjkim * 2. Redistributions in binary form must reproduce at minimum a disclaimer 19217365Sjkim * substantially similar to the "NO WARRANTY" disclaimer below 20217365Sjkim * ("Disclaimer") and any redistribution must be conditioned upon 21217365Sjkim * including a substantially similar Disclaimer requirement for further 22217365Sjkim * binary redistribution. 23217365Sjkim * 3. Neither the names of the above-listed copyright holders nor the names 24217365Sjkim * of any contributors may be used to endorse or promote products derived 25217365Sjkim * from this software without specific prior written permission. 26100966Siwasaki * 27217365Sjkim * Alternatively, this software may be distributed under the terms of the 28217365Sjkim * GNU General Public License ("GPL") version 2 as published by the Free 29217365Sjkim * Software Foundation. 30100966Siwasaki * 31217365Sjkim * NO WARRANTY 32217365Sjkim * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 33217365Sjkim * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 34217365Sjkim * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR 35217365Sjkim * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 36217365Sjkim * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 37217365Sjkim * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 38217365Sjkim * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 39217365Sjkim * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 40217365Sjkim * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING 41217365Sjkim * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 42217365Sjkim * POSSIBILITY OF SUCH DAMAGES. 43217365Sjkim */ 44100966Siwasaki 45167802Sjkim/* acpisrc:StructDefs -- for acpisrc conversion */ 46100966Siwasaki 47100966Siwasaki#ifndef __AMLRESRC_H 48100966Siwasaki#define __AMLRESRC_H 49100966Siwasaki 50100966Siwasaki 51167802Sjkim/* 52167802Sjkim * Resource descriptor tags, as defined in the ACPI specification. 53167802Sjkim * Used to symbolically reference fields within a descriptor. 54167802Sjkim */ 55167802Sjkim#define ACPI_RESTAG_ADDRESS "_ADR" 56167802Sjkim#define ACPI_RESTAG_ALIGNMENT "_ALN" 57167802Sjkim#define ACPI_RESTAG_ADDRESSSPACE "_ASI" 58167802Sjkim#define ACPI_RESTAG_ACCESSSIZE "_ASZ" 59167802Sjkim#define ACPI_RESTAG_TYPESPECIFICATTRIBUTES "_ATT" 60167802Sjkim#define ACPI_RESTAG_BASEADDRESS "_BAS" 61167802Sjkim#define ACPI_RESTAG_BUSMASTER "_BM_" /* Master(1), Slave(0) */ 62167802Sjkim#define ACPI_RESTAG_DECODE "_DEC" 63167802Sjkim#define ACPI_RESTAG_DMA "_DMA" 64167802Sjkim#define ACPI_RESTAG_DMATYPE "_TYP" /* Compatible(0), A(1), B(2), F(3) */ 65167802Sjkim#define ACPI_RESTAG_GRANULARITY "_GRA" 66167802Sjkim#define ACPI_RESTAG_INTERRUPT "_INT" 67167802Sjkim#define ACPI_RESTAG_INTERRUPTLEVEL "_LL_" /* ActiveLo(1), ActiveHi(0) */ 68167802Sjkim#define ACPI_RESTAG_INTERRUPTSHARE "_SHR" /* Shareable(1), NoShare(0) */ 69167802Sjkim#define ACPI_RESTAG_INTERRUPTTYPE "_HE_" /* Edge(1), Level(0) */ 70167802Sjkim#define ACPI_RESTAG_LENGTH "_LEN" 71167802Sjkim#define ACPI_RESTAG_MEMATTRIBUTES "_MTP" /* Memory(0), Reserved(1), ACPI(2), NVS(3) */ 72167802Sjkim#define ACPI_RESTAG_MEMTYPE "_MEM" /* NonCache(0), Cacheable(1) Cache+combine(2), Cache+prefetch(3) */ 73167802Sjkim#define ACPI_RESTAG_MAXADDR "_MAX" 74167802Sjkim#define ACPI_RESTAG_MINADDR "_MIN" 75167802Sjkim#define ACPI_RESTAG_MAXTYPE "_MAF" 76167802Sjkim#define ACPI_RESTAG_MINTYPE "_MIF" 77167802Sjkim#define ACPI_RESTAG_REGISTERBITOFFSET "_RBO" 78167802Sjkim#define ACPI_RESTAG_REGISTERBITWIDTH "_RBW" 79167802Sjkim#define ACPI_RESTAG_RANGETYPE "_RNG" 80167802Sjkim#define ACPI_RESTAG_READWRITETYPE "_RW_" /* ReadOnly(0), Writeable (1) */ 81167802Sjkim#define ACPI_RESTAG_TRANSLATION "_TRA" 82167802Sjkim#define ACPI_RESTAG_TRANSTYPE "_TRS" /* Sparse(1), Dense(0) */ 83167802Sjkim#define ACPI_RESTAG_TYPE "_TTP" /* Translation(1), Static (0) */ 84167802Sjkim#define ACPI_RESTAG_XFERTYPE "_SIZ" /* 8(0), 8And16(1), 16(2) */ 85100966Siwasaki 86100966Siwasaki 87100966Siwasaki/* Default sizes for "small" resource descriptors */ 88100966Siwasaki 89100966Siwasaki#define ASL_RDESC_IRQ_SIZE 0x02 90100966Siwasaki#define ASL_RDESC_DMA_SIZE 0x02 91100966Siwasaki#define ASL_RDESC_ST_DEPEND_SIZE 0x00 92100966Siwasaki#define ASL_RDESC_END_DEPEND_SIZE 0x00 93100966Siwasaki#define ASL_RDESC_IO_SIZE 0x07 94100966Siwasaki#define ASL_RDESC_FIXED_IO_SIZE 0x03 95100966Siwasaki#define ASL_RDESC_END_TAG_SIZE 0x01 96100966Siwasaki 97100966Siwasaki 98100966Siwasakitypedef struct asl_resource_node 99100966Siwasaki{ 100167802Sjkim UINT32 BufferLength; 101167802Sjkim void *Buffer; 102167802Sjkim struct asl_resource_node *Next; 103100966Siwasaki 104100966Siwasaki} ASL_RESOURCE_NODE; 105100966Siwasaki 106100966Siwasaki 107167802Sjkim/* Macros used to generate AML resource length fields */ 108167802Sjkim 109167802Sjkim#define ACPI_AML_SIZE_LARGE(r) (sizeof (r) - sizeof (AML_RESOURCE_LARGE_HEADER)) 110167802Sjkim#define ACPI_AML_SIZE_SMALL(r) (sizeof (r) - sizeof (AML_RESOURCE_SMALL_HEADER)) 111167802Sjkim 112100966Siwasaki/* 113100966Siwasaki * Resource descriptors defined in the ACPI specification. 114100966Siwasaki * 115138287Smarks * Packing/alignment must be BYTE because these descriptors 116151937Sjkim * are used to overlay the raw AML byte stream. 117100966Siwasaki */ 118100966Siwasaki#pragma pack(1) 119100966Siwasaki 120151937Sjkim/* 121151937Sjkim * SMALL descriptors 122151937Sjkim */ 123151937Sjkim#define AML_RESOURCE_SMALL_HEADER_COMMON \ 124167802Sjkim UINT8 DescriptorType; 125151937Sjkim 126151937Sjkimtypedef struct aml_resource_small_header 127100966Siwasaki{ 128151937Sjkim AML_RESOURCE_SMALL_HEADER_COMMON 129151937Sjkim 130151937Sjkim} AML_RESOURCE_SMALL_HEADER; 131151937Sjkim 132151937Sjkim 133151937Sjkimtypedef struct aml_resource_irq 134151937Sjkim{ 135151937Sjkim AML_RESOURCE_SMALL_HEADER_COMMON 136167802Sjkim UINT16 IrqMask; 137167802Sjkim UINT8 Flags; 138100966Siwasaki 139151937Sjkim} AML_RESOURCE_IRQ; 140100966Siwasaki 141100966Siwasaki 142151937Sjkimtypedef struct aml_resource_irq_noflags 143100966Siwasaki{ 144151937Sjkim AML_RESOURCE_SMALL_HEADER_COMMON 145167802Sjkim UINT16 IrqMask; 146100966Siwasaki 147151937Sjkim} AML_RESOURCE_IRQ_NOFLAGS; 148100966Siwasaki 149100966Siwasaki 150151937Sjkimtypedef struct aml_resource_dma 151100966Siwasaki{ 152151937Sjkim AML_RESOURCE_SMALL_HEADER_COMMON 153167802Sjkim UINT8 DmaChannelMask; 154167802Sjkim UINT8 Flags; 155100966Siwasaki 156151937Sjkim} AML_RESOURCE_DMA; 157100966Siwasaki 158100966Siwasaki 159151937Sjkimtypedef struct aml_resource_start_dependent 160100966Siwasaki{ 161151937Sjkim AML_RESOURCE_SMALL_HEADER_COMMON 162167802Sjkim UINT8 Flags; 163100966Siwasaki 164151937Sjkim} AML_RESOURCE_START_DEPENDENT; 165100966Siwasaki 166100966Siwasaki 167151937Sjkimtypedef struct aml_resource_start_dependent_noprio 168100966Siwasaki{ 169151937Sjkim AML_RESOURCE_SMALL_HEADER_COMMON 170100966Siwasaki 171151937Sjkim} AML_RESOURCE_START_DEPENDENT_NOPRIO; 172100966Siwasaki 173100966Siwasaki 174151937Sjkimtypedef struct aml_resource_end_dependent 175100966Siwasaki{ 176151937Sjkim AML_RESOURCE_SMALL_HEADER_COMMON 177100966Siwasaki 178151937Sjkim} AML_RESOURCE_END_DEPENDENT; 179100966Siwasaki 180100966Siwasaki 181151937Sjkimtypedef struct aml_resource_io 182100966Siwasaki{ 183151937Sjkim AML_RESOURCE_SMALL_HEADER_COMMON 184167802Sjkim UINT8 Flags; 185167802Sjkim UINT16 Minimum; 186167802Sjkim UINT16 Maximum; 187167802Sjkim UINT8 Alignment; 188167802Sjkim UINT8 AddressLength; 189100966Siwasaki 190151937Sjkim} AML_RESOURCE_IO; 191100966Siwasaki 192100966Siwasaki 193151937Sjkimtypedef struct aml_resource_fixed_io 194100966Siwasaki{ 195151937Sjkim AML_RESOURCE_SMALL_HEADER_COMMON 196167802Sjkim UINT16 Address; 197167802Sjkim UINT8 AddressLength; 198100966Siwasaki 199151937Sjkim} AML_RESOURCE_FIXED_IO; 200100966Siwasaki 201100966Siwasaki 202151937Sjkimtypedef struct aml_resource_vendor_small 203100966Siwasaki{ 204151937Sjkim AML_RESOURCE_SMALL_HEADER_COMMON 205100966Siwasaki 206151937Sjkim} AML_RESOURCE_VENDOR_SMALL; 207100966Siwasaki 208100966Siwasaki 209151937Sjkimtypedef struct aml_resource_end_tag 210100966Siwasaki{ 211151937Sjkim AML_RESOURCE_SMALL_HEADER_COMMON 212167802Sjkim UINT8 Checksum; 213100966Siwasaki 214151937Sjkim} AML_RESOURCE_END_TAG; 215100966Siwasaki 216100966Siwasaki 217151937Sjkim/* 218151937Sjkim * LARGE descriptors 219151937Sjkim */ 220151937Sjkim#define AML_RESOURCE_LARGE_HEADER_COMMON \ 221167802Sjkim UINT8 DescriptorType;\ 222167802Sjkim UINT16 ResourceLength; 223100966Siwasaki 224151937Sjkimtypedef struct aml_resource_large_header 225100966Siwasaki{ 226151937Sjkim AML_RESOURCE_LARGE_HEADER_COMMON 227151937Sjkim 228151937Sjkim} AML_RESOURCE_LARGE_HEADER; 229151937Sjkim 230151937Sjkim 231207344Sjkim/* General Flags for address space resource descriptors */ 232207344Sjkim 233207344Sjkim#define ACPI_RESOURCE_FLAG_DEC 2 234207344Sjkim#define ACPI_RESOURCE_FLAG_MIF 4 235207344Sjkim#define ACPI_RESOURCE_FLAG_MAF 8 236207344Sjkim 237151937Sjkimtypedef struct aml_resource_memory24 238151937Sjkim{ 239151937Sjkim AML_RESOURCE_LARGE_HEADER_COMMON 240167802Sjkim UINT8 Flags; 241167802Sjkim UINT16 Minimum; 242167802Sjkim UINT16 Maximum; 243167802Sjkim UINT16 Alignment; 244167802Sjkim UINT16 AddressLength; 245100966Siwasaki 246151937Sjkim} AML_RESOURCE_MEMORY24; 247100966Siwasaki 248100966Siwasaki 249151937Sjkimtypedef struct aml_resource_vendor_large 250100966Siwasaki{ 251151937Sjkim AML_RESOURCE_LARGE_HEADER_COMMON 252100966Siwasaki 253151937Sjkim} AML_RESOURCE_VENDOR_LARGE; 254100966Siwasaki 255100966Siwasaki 256151937Sjkimtypedef struct aml_resource_memory32 257100966Siwasaki{ 258151937Sjkim AML_RESOURCE_LARGE_HEADER_COMMON 259167802Sjkim UINT8 Flags; 260167802Sjkim UINT32 Minimum; 261167802Sjkim UINT32 Maximum; 262167802Sjkim UINT32 Alignment; 263167802Sjkim UINT32 AddressLength; 264100966Siwasaki 265151937Sjkim} AML_RESOURCE_MEMORY32; 266100966Siwasaki 267100966Siwasaki 268151937Sjkimtypedef struct aml_resource_fixed_memory32 269100966Siwasaki{ 270151937Sjkim AML_RESOURCE_LARGE_HEADER_COMMON 271167802Sjkim UINT8 Flags; 272167802Sjkim UINT32 Address; 273167802Sjkim UINT32 AddressLength; 274100966Siwasaki 275151937Sjkim} AML_RESOURCE_FIXED_MEMORY32; 276100966Siwasaki 277100966Siwasaki 278151937Sjkim#define AML_RESOURCE_ADDRESS_COMMON \ 279167802Sjkim UINT8 ResourceType; \ 280167802Sjkim UINT8 Flags; \ 281167802Sjkim UINT8 SpecificFlags; 282151937Sjkim 283151937Sjkim 284151937Sjkimtypedef struct aml_resource_address 285100966Siwasaki{ 286151937Sjkim AML_RESOURCE_LARGE_HEADER_COMMON 287151937Sjkim AML_RESOURCE_ADDRESS_COMMON 288151937Sjkim 289151937Sjkim} AML_RESOURCE_ADDRESS; 290151937Sjkim 291151937Sjkim 292151937Sjkimtypedef struct aml_resource_extended_address64 293151937Sjkim{ 294151937Sjkim AML_RESOURCE_LARGE_HEADER_COMMON 295151937Sjkim AML_RESOURCE_ADDRESS_COMMON 296167802Sjkim UINT8 RevisionID; 297167802Sjkim UINT8 Reserved; 298167802Sjkim UINT64 Granularity; 299167802Sjkim UINT64 Minimum; 300167802Sjkim UINT64 Maximum; 301167802Sjkim UINT64 TranslationOffset; 302167802Sjkim UINT64 AddressLength; 303167802Sjkim UINT64 TypeSpecific; 304100966Siwasaki 305151937Sjkim} AML_RESOURCE_EXTENDED_ADDRESS64; 306100966Siwasaki 307151937Sjkim#define AML_RESOURCE_EXTENDED_ADDRESS_REVISION 1 /* ACPI 3.0 */ 308100966Siwasaki 309151937Sjkim 310151937Sjkimtypedef struct aml_resource_address64 311100966Siwasaki{ 312151937Sjkim AML_RESOURCE_LARGE_HEADER_COMMON 313151937Sjkim AML_RESOURCE_ADDRESS_COMMON 314167802Sjkim UINT64 Granularity; 315167802Sjkim UINT64 Minimum; 316167802Sjkim UINT64 Maximum; 317167802Sjkim UINT64 TranslationOffset; 318167802Sjkim UINT64 AddressLength; 319151937Sjkim 320151937Sjkim} AML_RESOURCE_ADDRESS64; 321151937Sjkim 322151937Sjkim 323151937Sjkimtypedef struct aml_resource_address32 324151937Sjkim{ 325151937Sjkim AML_RESOURCE_LARGE_HEADER_COMMON 326151937Sjkim AML_RESOURCE_ADDRESS_COMMON 327167802Sjkim UINT32 Granularity; 328167802Sjkim UINT32 Minimum; 329167802Sjkim UINT32 Maximum; 330167802Sjkim UINT32 TranslationOffset; 331167802Sjkim UINT32 AddressLength; 332100966Siwasaki 333151937Sjkim} AML_RESOURCE_ADDRESS32; 334100966Siwasaki 335100966Siwasaki 336151937Sjkimtypedef struct aml_resource_address16 337100966Siwasaki{ 338151937Sjkim AML_RESOURCE_LARGE_HEADER_COMMON 339151937Sjkim AML_RESOURCE_ADDRESS_COMMON 340167802Sjkim UINT16 Granularity; 341167802Sjkim UINT16 Minimum; 342167802Sjkim UINT16 Maximum; 343167802Sjkim UINT16 TranslationOffset; 344167802Sjkim UINT16 AddressLength; 345100966Siwasaki 346151937Sjkim} AML_RESOURCE_ADDRESS16; 347100966Siwasaki 348100966Siwasaki 349151937Sjkimtypedef struct aml_resource_extended_irq 350100966Siwasaki{ 351151937Sjkim AML_RESOURCE_LARGE_HEADER_COMMON 352167802Sjkim UINT8 Flags; 353167802Sjkim UINT8 InterruptCount; 354167802Sjkim UINT32 Interrupts[1]; 355100966Siwasaki /* ResSourceIndex, ResSource optional fields follow */ 356100966Siwasaki 357151937Sjkim} AML_RESOURCE_EXTENDED_IRQ; 358100966Siwasaki 359100966Siwasaki 360151937Sjkimtypedef struct aml_resource_generic_register 361100966Siwasaki{ 362151937Sjkim AML_RESOURCE_LARGE_HEADER_COMMON 363167802Sjkim UINT8 AddressSpaceId; 364167802Sjkim UINT8 BitWidth; 365167802Sjkim UINT8 BitOffset; 366167802Sjkim UINT8 AccessSize; /* ACPI 3.0, was previously Reserved */ 367167802Sjkim UINT64 Address; 368100966Siwasaki 369151937Sjkim} AML_RESOURCE_GENERIC_REGISTER; 370100966Siwasaki 371100966Siwasaki/* restore default alignment */ 372100966Siwasaki 373100966Siwasaki#pragma pack() 374100966Siwasaki 375138287Smarks/* Union of all resource descriptors, so we can allocate the worst case */ 376100966Siwasaki 377151937Sjkimtypedef union aml_resource 378100966Siwasaki{ 379151937Sjkim /* Descriptor headers */ 380100966Siwasaki 381167802Sjkim UINT8 DescriptorType; 382167802Sjkim AML_RESOURCE_SMALL_HEADER SmallHeader; 383167802Sjkim AML_RESOURCE_LARGE_HEADER LargeHeader; 384100966Siwasaki 385151937Sjkim /* Small resource descriptors */ 386100966Siwasaki 387167802Sjkim AML_RESOURCE_IRQ Irq; 388167802Sjkim AML_RESOURCE_DMA Dma; 389167802Sjkim AML_RESOURCE_START_DEPENDENT StartDpf; 390167802Sjkim AML_RESOURCE_END_DEPENDENT EndDpf; 391167802Sjkim AML_RESOURCE_IO Io; 392167802Sjkim AML_RESOURCE_FIXED_IO FixedIo; 393167802Sjkim AML_RESOURCE_VENDOR_SMALL VendorSmall; 394167802Sjkim AML_RESOURCE_END_TAG EndTag; 395100966Siwasaki 396151937Sjkim /* Large resource descriptors */ 397151937Sjkim 398167802Sjkim AML_RESOURCE_MEMORY24 Memory24; 399167802Sjkim AML_RESOURCE_GENERIC_REGISTER GenericReg; 400167802Sjkim AML_RESOURCE_VENDOR_LARGE VendorLarge; 401167802Sjkim AML_RESOURCE_MEMORY32 Memory32; 402167802Sjkim AML_RESOURCE_FIXED_MEMORY32 FixedMemory32; 403167802Sjkim AML_RESOURCE_ADDRESS16 Address16; 404167802Sjkim AML_RESOURCE_ADDRESS32 Address32; 405167802Sjkim AML_RESOURCE_ADDRESS64 Address64; 406167802Sjkim AML_RESOURCE_EXTENDED_ADDRESS64 ExtAddress64; 407167802Sjkim AML_RESOURCE_EXTENDED_IRQ ExtendedIrq; 408151937Sjkim 409151937Sjkim /* Utility overlays */ 410151937Sjkim 411167802Sjkim AML_RESOURCE_ADDRESS Address; 412167802Sjkim UINT32 DwordItem; 413167802Sjkim UINT16 WordItem; 414167802Sjkim UINT8 ByteItem; 415151937Sjkim 416151937Sjkim} AML_RESOURCE; 417151937Sjkim 418100966Siwasaki#endif 419100966Siwasaki 420