1433d6423SLionel Sambuc /****************************************************************************** 2433d6423SLionel Sambuc * 3433d6423SLionel Sambuc * Module Name: amlresrc.h - AML resource descriptors 4433d6423SLionel Sambuc * 5433d6423SLionel Sambuc *****************************************************************************/ 6433d6423SLionel Sambuc 7*29492bb7SDavid van Moolenbroek /* 8*29492bb7SDavid van Moolenbroek * Copyright (C) 2000 - 2014, Intel Corp. 9433d6423SLionel Sambuc * All rights reserved. 10433d6423SLionel Sambuc * 11*29492bb7SDavid van Moolenbroek * Redistribution and use in source and binary forms, with or without 12*29492bb7SDavid van Moolenbroek * modification, are permitted provided that the following conditions 13*29492bb7SDavid van Moolenbroek * are met: 14*29492bb7SDavid van Moolenbroek * 1. Redistributions of source code must retain the above copyright 15*29492bb7SDavid van Moolenbroek * notice, this list of conditions, and the following disclaimer, 16*29492bb7SDavid van Moolenbroek * without modification. 17*29492bb7SDavid van Moolenbroek * 2. Redistributions in binary form must reproduce at minimum a disclaimer 18*29492bb7SDavid van Moolenbroek * substantially similar to the "NO WARRANTY" disclaimer below 19*29492bb7SDavid van Moolenbroek * ("Disclaimer") and any redistribution must be conditioned upon 20*29492bb7SDavid van Moolenbroek * including a substantially similar Disclaimer requirement for further 21*29492bb7SDavid van Moolenbroek * binary redistribution. 22*29492bb7SDavid van Moolenbroek * 3. Neither the names of the above-listed copyright holders nor the names 23*29492bb7SDavid van Moolenbroek * of any contributors may be used to endorse or promote products derived 24*29492bb7SDavid van Moolenbroek * from this software without specific prior written permission. 25433d6423SLionel Sambuc * 26*29492bb7SDavid van Moolenbroek * Alternatively, this software may be distributed under the terms of the 27*29492bb7SDavid van Moolenbroek * GNU General Public License ("GPL") version 2 as published by the Free 28*29492bb7SDavid van Moolenbroek * Software Foundation. 29433d6423SLionel Sambuc * 30*29492bb7SDavid van Moolenbroek * NO WARRANTY 31*29492bb7SDavid van Moolenbroek * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 32*29492bb7SDavid van Moolenbroek * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 33*29492bb7SDavid van Moolenbroek * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR 34*29492bb7SDavid van Moolenbroek * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 35*29492bb7SDavid van Moolenbroek * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 36*29492bb7SDavid van Moolenbroek * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 37*29492bb7SDavid van Moolenbroek * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 38*29492bb7SDavid van Moolenbroek * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 39*29492bb7SDavid van Moolenbroek * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING 40*29492bb7SDavid van Moolenbroek * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 41*29492bb7SDavid van Moolenbroek * POSSIBILITY OF SUCH DAMAGES. 42*29492bb7SDavid van Moolenbroek */ 43433d6423SLionel Sambuc 44433d6423SLionel Sambuc /* acpisrc:StructDefs -- for acpisrc conversion */ 45433d6423SLionel Sambuc 46433d6423SLionel Sambuc #ifndef __AMLRESRC_H 47433d6423SLionel Sambuc #define __AMLRESRC_H 48433d6423SLionel Sambuc 49433d6423SLionel Sambuc 50433d6423SLionel Sambuc /* 51433d6423SLionel Sambuc * Resource descriptor tags, as defined in the ACPI specification. 52433d6423SLionel Sambuc * Used to symbolically reference fields within a descriptor. 53433d6423SLionel Sambuc */ 54433d6423SLionel Sambuc #define ACPI_RESTAG_ADDRESS "_ADR" 55433d6423SLionel Sambuc #define ACPI_RESTAG_ALIGNMENT "_ALN" 56433d6423SLionel Sambuc #define ACPI_RESTAG_ADDRESSSPACE "_ASI" 57433d6423SLionel Sambuc #define ACPI_RESTAG_ACCESSSIZE "_ASZ" 58433d6423SLionel Sambuc #define ACPI_RESTAG_TYPESPECIFICATTRIBUTES "_ATT" 59433d6423SLionel Sambuc #define ACPI_RESTAG_BASEADDRESS "_BAS" 60433d6423SLionel Sambuc #define ACPI_RESTAG_BUSMASTER "_BM_" /* Master(1), Slave(0) */ 61*29492bb7SDavid van Moolenbroek #define ACPI_RESTAG_DEBOUNCETIME "_DBT" 62433d6423SLionel Sambuc #define ACPI_RESTAG_DECODE "_DEC" 63*29492bb7SDavid van Moolenbroek #define ACPI_RESTAG_DEVICEPOLARITY "_DPL" 64433d6423SLionel Sambuc #define ACPI_RESTAG_DMA "_DMA" 65433d6423SLionel Sambuc #define ACPI_RESTAG_DMATYPE "_TYP" /* Compatible(0), A(1), B(2), F(3) */ 66*29492bb7SDavid van Moolenbroek #define ACPI_RESTAG_DRIVESTRENGTH "_DRS" 67*29492bb7SDavid van Moolenbroek #define ACPI_RESTAG_ENDIANNESS "_END" 68*29492bb7SDavid van Moolenbroek #define ACPI_RESTAG_FLOWCONTROL "_FLC" 69433d6423SLionel Sambuc #define ACPI_RESTAG_GRANULARITY "_GRA" 70433d6423SLionel Sambuc #define ACPI_RESTAG_INTERRUPT "_INT" 71433d6423SLionel Sambuc #define ACPI_RESTAG_INTERRUPTLEVEL "_LL_" /* ActiveLo(1), ActiveHi(0) */ 72433d6423SLionel Sambuc #define ACPI_RESTAG_INTERRUPTSHARE "_SHR" /* Shareable(1), NoShare(0) */ 73433d6423SLionel Sambuc #define ACPI_RESTAG_INTERRUPTTYPE "_HE_" /* Edge(1), Level(0) */ 74*29492bb7SDavid van Moolenbroek #define ACPI_RESTAG_IORESTRICTION "_IOR" 75433d6423SLionel Sambuc #define ACPI_RESTAG_LENGTH "_LEN" 76*29492bb7SDavid van Moolenbroek #define ACPI_RESTAG_LINE "_LIN" 77433d6423SLionel Sambuc #define ACPI_RESTAG_MEMATTRIBUTES "_MTP" /* Memory(0), Reserved(1), ACPI(2), NVS(3) */ 78433d6423SLionel Sambuc #define ACPI_RESTAG_MEMTYPE "_MEM" /* NonCache(0), Cacheable(1) Cache+combine(2), Cache+prefetch(3) */ 79433d6423SLionel Sambuc #define ACPI_RESTAG_MAXADDR "_MAX" 80433d6423SLionel Sambuc #define ACPI_RESTAG_MINADDR "_MIN" 81433d6423SLionel Sambuc #define ACPI_RESTAG_MAXTYPE "_MAF" 82433d6423SLionel Sambuc #define ACPI_RESTAG_MINTYPE "_MIF" 83*29492bb7SDavid van Moolenbroek #define ACPI_RESTAG_MODE "_MOD" 84*29492bb7SDavid van Moolenbroek #define ACPI_RESTAG_PARITY "_PAR" 85*29492bb7SDavid van Moolenbroek #define ACPI_RESTAG_PHASE "_PHA" 86*29492bb7SDavid van Moolenbroek #define ACPI_RESTAG_PIN "_PIN" 87*29492bb7SDavid van Moolenbroek #define ACPI_RESTAG_PINCONFIG "_PPI" 88*29492bb7SDavid van Moolenbroek #define ACPI_RESTAG_POLARITY "_POL" 89433d6423SLionel Sambuc #define ACPI_RESTAG_REGISTERBITOFFSET "_RBO" 90433d6423SLionel Sambuc #define ACPI_RESTAG_REGISTERBITWIDTH "_RBW" 91433d6423SLionel Sambuc #define ACPI_RESTAG_RANGETYPE "_RNG" 92433d6423SLionel Sambuc #define ACPI_RESTAG_READWRITETYPE "_RW_" /* ReadOnly(0), Writeable (1) */ 93*29492bb7SDavid van Moolenbroek #define ACPI_RESTAG_LENGTH_RX "_RXL" 94*29492bb7SDavid van Moolenbroek #define ACPI_RESTAG_LENGTH_TX "_TXL" 95*29492bb7SDavid van Moolenbroek #define ACPI_RESTAG_SLAVEMODE "_SLV" 96*29492bb7SDavid van Moolenbroek #define ACPI_RESTAG_SPEED "_SPE" 97*29492bb7SDavid van Moolenbroek #define ACPI_RESTAG_STOPBITS "_STB" 98433d6423SLionel Sambuc #define ACPI_RESTAG_TRANSLATION "_TRA" 99433d6423SLionel Sambuc #define ACPI_RESTAG_TRANSTYPE "_TRS" /* Sparse(1), Dense(0) */ 100433d6423SLionel Sambuc #define ACPI_RESTAG_TYPE "_TTP" /* Translation(1), Static (0) */ 101433d6423SLionel Sambuc #define ACPI_RESTAG_XFERTYPE "_SIZ" /* 8(0), 8And16(1), 16(2) */ 102*29492bb7SDavid van Moolenbroek #define ACPI_RESTAG_VENDORDATA "_VEN" 103433d6423SLionel Sambuc 104433d6423SLionel Sambuc 105433d6423SLionel Sambuc /* Default sizes for "small" resource descriptors */ 106433d6423SLionel Sambuc 107433d6423SLionel Sambuc #define ASL_RDESC_IRQ_SIZE 0x02 108433d6423SLionel Sambuc #define ASL_RDESC_DMA_SIZE 0x02 109433d6423SLionel Sambuc #define ASL_RDESC_ST_DEPEND_SIZE 0x00 110433d6423SLionel Sambuc #define ASL_RDESC_END_DEPEND_SIZE 0x00 111433d6423SLionel Sambuc #define ASL_RDESC_IO_SIZE 0x07 112433d6423SLionel Sambuc #define ASL_RDESC_FIXED_IO_SIZE 0x03 113*29492bb7SDavid van Moolenbroek #define ASL_RDESC_FIXED_DMA_SIZE 0x05 114433d6423SLionel Sambuc #define ASL_RDESC_END_TAG_SIZE 0x01 115433d6423SLionel Sambuc 116433d6423SLionel Sambuc 117433d6423SLionel Sambuc typedef struct asl_resource_node 118433d6423SLionel Sambuc { 119433d6423SLionel Sambuc UINT32 BufferLength; 120433d6423SLionel Sambuc void *Buffer; 121433d6423SLionel Sambuc struct asl_resource_node *Next; 122433d6423SLionel Sambuc 123433d6423SLionel Sambuc } ASL_RESOURCE_NODE; 124433d6423SLionel Sambuc 125*29492bb7SDavid van Moolenbroek typedef struct asl_resource_info 126*29492bb7SDavid van Moolenbroek { 127*29492bb7SDavid van Moolenbroek ACPI_PARSE_OBJECT *DescriptorTypeOp; /* Resource descriptor parse node */ 128*29492bb7SDavid van Moolenbroek ACPI_PARSE_OBJECT *MappingOp; /* Used for mapfile support */ 129*29492bb7SDavid van Moolenbroek UINT32 CurrentByteOffset; /* Offset in resource template */ 130*29492bb7SDavid van Moolenbroek 131*29492bb7SDavid van Moolenbroek } ASL_RESOURCE_INFO; 132*29492bb7SDavid van Moolenbroek 133433d6423SLionel Sambuc 134433d6423SLionel Sambuc /* Macros used to generate AML resource length fields */ 135433d6423SLionel Sambuc 136433d6423SLionel Sambuc #define ACPI_AML_SIZE_LARGE(r) (sizeof (r) - sizeof (AML_RESOURCE_LARGE_HEADER)) 137433d6423SLionel Sambuc #define ACPI_AML_SIZE_SMALL(r) (sizeof (r) - sizeof (AML_RESOURCE_SMALL_HEADER)) 138433d6423SLionel Sambuc 139433d6423SLionel Sambuc /* 140433d6423SLionel Sambuc * Resource descriptors defined in the ACPI specification. 141433d6423SLionel Sambuc * 142433d6423SLionel Sambuc * Packing/alignment must be BYTE because these descriptors 143433d6423SLionel Sambuc * are used to overlay the raw AML byte stream. 144433d6423SLionel Sambuc */ 145433d6423SLionel Sambuc #pragma pack(1) 146433d6423SLionel Sambuc 147433d6423SLionel Sambuc /* 148433d6423SLionel Sambuc * SMALL descriptors 149433d6423SLionel Sambuc */ 150433d6423SLionel Sambuc #define AML_RESOURCE_SMALL_HEADER_COMMON \ 151433d6423SLionel Sambuc UINT8 DescriptorType; 152433d6423SLionel Sambuc 153433d6423SLionel Sambuc typedef struct aml_resource_small_header 154433d6423SLionel Sambuc { 155433d6423SLionel Sambuc AML_RESOURCE_SMALL_HEADER_COMMON 156433d6423SLionel Sambuc 157433d6423SLionel Sambuc } AML_RESOURCE_SMALL_HEADER; 158433d6423SLionel Sambuc 159433d6423SLionel Sambuc 160433d6423SLionel Sambuc typedef struct aml_resource_irq 161433d6423SLionel Sambuc { 162433d6423SLionel Sambuc AML_RESOURCE_SMALL_HEADER_COMMON 163433d6423SLionel Sambuc UINT16 IrqMask; 164433d6423SLionel Sambuc UINT8 Flags; 165433d6423SLionel Sambuc 166433d6423SLionel Sambuc } AML_RESOURCE_IRQ; 167433d6423SLionel Sambuc 168433d6423SLionel Sambuc 169433d6423SLionel Sambuc typedef struct aml_resource_irq_noflags 170433d6423SLionel Sambuc { 171433d6423SLionel Sambuc AML_RESOURCE_SMALL_HEADER_COMMON 172433d6423SLionel Sambuc UINT16 IrqMask; 173433d6423SLionel Sambuc 174433d6423SLionel Sambuc } AML_RESOURCE_IRQ_NOFLAGS; 175433d6423SLionel Sambuc 176433d6423SLionel Sambuc 177433d6423SLionel Sambuc typedef struct aml_resource_dma 178433d6423SLionel Sambuc { 179433d6423SLionel Sambuc AML_RESOURCE_SMALL_HEADER_COMMON 180433d6423SLionel Sambuc UINT8 DmaChannelMask; 181433d6423SLionel Sambuc UINT8 Flags; 182433d6423SLionel Sambuc 183433d6423SLionel Sambuc } AML_RESOURCE_DMA; 184433d6423SLionel Sambuc 185433d6423SLionel Sambuc 186433d6423SLionel Sambuc typedef struct aml_resource_start_dependent 187433d6423SLionel Sambuc { 188433d6423SLionel Sambuc AML_RESOURCE_SMALL_HEADER_COMMON 189433d6423SLionel Sambuc UINT8 Flags; 190433d6423SLionel Sambuc 191433d6423SLionel Sambuc } AML_RESOURCE_START_DEPENDENT; 192433d6423SLionel Sambuc 193433d6423SLionel Sambuc 194433d6423SLionel Sambuc typedef struct aml_resource_start_dependent_noprio 195433d6423SLionel Sambuc { 196433d6423SLionel Sambuc AML_RESOURCE_SMALL_HEADER_COMMON 197433d6423SLionel Sambuc 198433d6423SLionel Sambuc } AML_RESOURCE_START_DEPENDENT_NOPRIO; 199433d6423SLionel Sambuc 200433d6423SLionel Sambuc 201433d6423SLionel Sambuc typedef struct aml_resource_end_dependent 202433d6423SLionel Sambuc { 203433d6423SLionel Sambuc AML_RESOURCE_SMALL_HEADER_COMMON 204433d6423SLionel Sambuc 205433d6423SLionel Sambuc } AML_RESOURCE_END_DEPENDENT; 206433d6423SLionel Sambuc 207433d6423SLionel Sambuc 208433d6423SLionel Sambuc typedef struct aml_resource_io 209433d6423SLionel Sambuc { 210433d6423SLionel Sambuc AML_RESOURCE_SMALL_HEADER_COMMON 211433d6423SLionel Sambuc UINT8 Flags; 212433d6423SLionel Sambuc UINT16 Minimum; 213433d6423SLionel Sambuc UINT16 Maximum; 214433d6423SLionel Sambuc UINT8 Alignment; 215433d6423SLionel Sambuc UINT8 AddressLength; 216433d6423SLionel Sambuc 217433d6423SLionel Sambuc } AML_RESOURCE_IO; 218433d6423SLionel Sambuc 219433d6423SLionel Sambuc 220433d6423SLionel Sambuc typedef struct aml_resource_fixed_io 221433d6423SLionel Sambuc { 222433d6423SLionel Sambuc AML_RESOURCE_SMALL_HEADER_COMMON 223433d6423SLionel Sambuc UINT16 Address; 224433d6423SLionel Sambuc UINT8 AddressLength; 225433d6423SLionel Sambuc 226433d6423SLionel Sambuc } AML_RESOURCE_FIXED_IO; 227433d6423SLionel Sambuc 228433d6423SLionel Sambuc 229433d6423SLionel Sambuc typedef struct aml_resource_vendor_small 230433d6423SLionel Sambuc { 231433d6423SLionel Sambuc AML_RESOURCE_SMALL_HEADER_COMMON 232433d6423SLionel Sambuc 233433d6423SLionel Sambuc } AML_RESOURCE_VENDOR_SMALL; 234433d6423SLionel Sambuc 235433d6423SLionel Sambuc 236433d6423SLionel Sambuc typedef struct aml_resource_end_tag 237433d6423SLionel Sambuc { 238433d6423SLionel Sambuc AML_RESOURCE_SMALL_HEADER_COMMON 239433d6423SLionel Sambuc UINT8 Checksum; 240433d6423SLionel Sambuc 241433d6423SLionel Sambuc } AML_RESOURCE_END_TAG; 242433d6423SLionel Sambuc 243433d6423SLionel Sambuc 244*29492bb7SDavid van Moolenbroek typedef struct aml_resource_fixed_dma 245*29492bb7SDavid van Moolenbroek { 246*29492bb7SDavid van Moolenbroek AML_RESOURCE_SMALL_HEADER_COMMON 247*29492bb7SDavid van Moolenbroek UINT16 RequestLines; 248*29492bb7SDavid van Moolenbroek UINT16 Channels; 249*29492bb7SDavid van Moolenbroek UINT8 Width; 250*29492bb7SDavid van Moolenbroek 251*29492bb7SDavid van Moolenbroek } AML_RESOURCE_FIXED_DMA; 252*29492bb7SDavid van Moolenbroek 253*29492bb7SDavid van Moolenbroek 254433d6423SLionel Sambuc /* 255433d6423SLionel Sambuc * LARGE descriptors 256433d6423SLionel Sambuc */ 257433d6423SLionel Sambuc #define AML_RESOURCE_LARGE_HEADER_COMMON \ 258433d6423SLionel Sambuc UINT8 DescriptorType;\ 259433d6423SLionel Sambuc UINT16 ResourceLength; 260433d6423SLionel Sambuc 261433d6423SLionel Sambuc typedef struct aml_resource_large_header 262433d6423SLionel Sambuc { 263433d6423SLionel Sambuc AML_RESOURCE_LARGE_HEADER_COMMON 264433d6423SLionel Sambuc 265433d6423SLionel Sambuc } AML_RESOURCE_LARGE_HEADER; 266433d6423SLionel Sambuc 267433d6423SLionel Sambuc 268433d6423SLionel Sambuc /* General Flags for address space resource descriptors */ 269433d6423SLionel Sambuc 270433d6423SLionel Sambuc #define ACPI_RESOURCE_FLAG_DEC 2 271433d6423SLionel Sambuc #define ACPI_RESOURCE_FLAG_MIF 4 272433d6423SLionel Sambuc #define ACPI_RESOURCE_FLAG_MAF 8 273433d6423SLionel Sambuc 274433d6423SLionel Sambuc typedef struct aml_resource_memory24 275433d6423SLionel Sambuc { 276433d6423SLionel Sambuc AML_RESOURCE_LARGE_HEADER_COMMON 277433d6423SLionel Sambuc UINT8 Flags; 278433d6423SLionel Sambuc UINT16 Minimum; 279433d6423SLionel Sambuc UINT16 Maximum; 280433d6423SLionel Sambuc UINT16 Alignment; 281433d6423SLionel Sambuc UINT16 AddressLength; 282433d6423SLionel Sambuc 283433d6423SLionel Sambuc } AML_RESOURCE_MEMORY24; 284433d6423SLionel Sambuc 285433d6423SLionel Sambuc 286433d6423SLionel Sambuc typedef struct aml_resource_vendor_large 287433d6423SLionel Sambuc { 288433d6423SLionel Sambuc AML_RESOURCE_LARGE_HEADER_COMMON 289433d6423SLionel Sambuc 290433d6423SLionel Sambuc } AML_RESOURCE_VENDOR_LARGE; 291433d6423SLionel Sambuc 292433d6423SLionel Sambuc 293433d6423SLionel Sambuc typedef struct aml_resource_memory32 294433d6423SLionel Sambuc { 295433d6423SLionel Sambuc AML_RESOURCE_LARGE_HEADER_COMMON 296433d6423SLionel Sambuc UINT8 Flags; 297433d6423SLionel Sambuc UINT32 Minimum; 298433d6423SLionel Sambuc UINT32 Maximum; 299433d6423SLionel Sambuc UINT32 Alignment; 300433d6423SLionel Sambuc UINT32 AddressLength; 301433d6423SLionel Sambuc 302433d6423SLionel Sambuc } AML_RESOURCE_MEMORY32; 303433d6423SLionel Sambuc 304433d6423SLionel Sambuc 305433d6423SLionel Sambuc typedef struct aml_resource_fixed_memory32 306433d6423SLionel Sambuc { 307433d6423SLionel Sambuc AML_RESOURCE_LARGE_HEADER_COMMON 308433d6423SLionel Sambuc UINT8 Flags; 309433d6423SLionel Sambuc UINT32 Address; 310433d6423SLionel Sambuc UINT32 AddressLength; 311433d6423SLionel Sambuc 312433d6423SLionel Sambuc } AML_RESOURCE_FIXED_MEMORY32; 313433d6423SLionel Sambuc 314433d6423SLionel Sambuc 315433d6423SLionel Sambuc #define AML_RESOURCE_ADDRESS_COMMON \ 316433d6423SLionel Sambuc UINT8 ResourceType; \ 317433d6423SLionel Sambuc UINT8 Flags; \ 318433d6423SLionel Sambuc UINT8 SpecificFlags; 319433d6423SLionel Sambuc 320433d6423SLionel Sambuc 321433d6423SLionel Sambuc typedef struct aml_resource_address 322433d6423SLionel Sambuc { 323433d6423SLionel Sambuc AML_RESOURCE_LARGE_HEADER_COMMON 324433d6423SLionel Sambuc AML_RESOURCE_ADDRESS_COMMON 325433d6423SLionel Sambuc 326433d6423SLionel Sambuc } AML_RESOURCE_ADDRESS; 327433d6423SLionel Sambuc 328433d6423SLionel Sambuc 329433d6423SLionel Sambuc typedef struct aml_resource_extended_address64 330433d6423SLionel Sambuc { 331433d6423SLionel Sambuc AML_RESOURCE_LARGE_HEADER_COMMON 332433d6423SLionel Sambuc AML_RESOURCE_ADDRESS_COMMON 333433d6423SLionel Sambuc UINT8 RevisionID; 334433d6423SLionel Sambuc UINT8 Reserved; 335433d6423SLionel Sambuc UINT64 Granularity; 336433d6423SLionel Sambuc UINT64 Minimum; 337433d6423SLionel Sambuc UINT64 Maximum; 338433d6423SLionel Sambuc UINT64 TranslationOffset; 339433d6423SLionel Sambuc UINT64 AddressLength; 340433d6423SLionel Sambuc UINT64 TypeSpecific; 341433d6423SLionel Sambuc 342433d6423SLionel Sambuc } AML_RESOURCE_EXTENDED_ADDRESS64; 343433d6423SLionel Sambuc 344433d6423SLionel Sambuc #define AML_RESOURCE_EXTENDED_ADDRESS_REVISION 1 /* ACPI 3.0 */ 345433d6423SLionel Sambuc 346433d6423SLionel Sambuc 347433d6423SLionel Sambuc typedef struct aml_resource_address64 348433d6423SLionel Sambuc { 349433d6423SLionel Sambuc AML_RESOURCE_LARGE_HEADER_COMMON 350433d6423SLionel Sambuc AML_RESOURCE_ADDRESS_COMMON 351433d6423SLionel Sambuc UINT64 Granularity; 352433d6423SLionel Sambuc UINT64 Minimum; 353433d6423SLionel Sambuc UINT64 Maximum; 354433d6423SLionel Sambuc UINT64 TranslationOffset; 355433d6423SLionel Sambuc UINT64 AddressLength; 356433d6423SLionel Sambuc 357433d6423SLionel Sambuc } AML_RESOURCE_ADDRESS64; 358433d6423SLionel Sambuc 359433d6423SLionel Sambuc 360433d6423SLionel Sambuc typedef struct aml_resource_address32 361433d6423SLionel Sambuc { 362433d6423SLionel Sambuc AML_RESOURCE_LARGE_HEADER_COMMON 363433d6423SLionel Sambuc AML_RESOURCE_ADDRESS_COMMON 364433d6423SLionel Sambuc UINT32 Granularity; 365433d6423SLionel Sambuc UINT32 Minimum; 366433d6423SLionel Sambuc UINT32 Maximum; 367433d6423SLionel Sambuc UINT32 TranslationOffset; 368433d6423SLionel Sambuc UINT32 AddressLength; 369433d6423SLionel Sambuc 370433d6423SLionel Sambuc } AML_RESOURCE_ADDRESS32; 371433d6423SLionel Sambuc 372433d6423SLionel Sambuc 373433d6423SLionel Sambuc typedef struct aml_resource_address16 374433d6423SLionel Sambuc { 375433d6423SLionel Sambuc AML_RESOURCE_LARGE_HEADER_COMMON 376433d6423SLionel Sambuc AML_RESOURCE_ADDRESS_COMMON 377433d6423SLionel Sambuc UINT16 Granularity; 378433d6423SLionel Sambuc UINT16 Minimum; 379433d6423SLionel Sambuc UINT16 Maximum; 380433d6423SLionel Sambuc UINT16 TranslationOffset; 381433d6423SLionel Sambuc UINT16 AddressLength; 382433d6423SLionel Sambuc 383433d6423SLionel Sambuc } AML_RESOURCE_ADDRESS16; 384433d6423SLionel Sambuc 385433d6423SLionel Sambuc 386433d6423SLionel Sambuc typedef struct aml_resource_extended_irq 387433d6423SLionel Sambuc { 388433d6423SLionel Sambuc AML_RESOURCE_LARGE_HEADER_COMMON 389433d6423SLionel Sambuc UINT8 Flags; 390433d6423SLionel Sambuc UINT8 InterruptCount; 391433d6423SLionel Sambuc UINT32 Interrupts[1]; 392433d6423SLionel Sambuc /* ResSourceIndex, ResSource optional fields follow */ 393433d6423SLionel Sambuc 394433d6423SLionel Sambuc } AML_RESOURCE_EXTENDED_IRQ; 395433d6423SLionel Sambuc 396433d6423SLionel Sambuc 397433d6423SLionel Sambuc typedef struct aml_resource_generic_register 398433d6423SLionel Sambuc { 399433d6423SLionel Sambuc AML_RESOURCE_LARGE_HEADER_COMMON 400433d6423SLionel Sambuc UINT8 AddressSpaceId; 401433d6423SLionel Sambuc UINT8 BitWidth; 402433d6423SLionel Sambuc UINT8 BitOffset; 403433d6423SLionel Sambuc UINT8 AccessSize; /* ACPI 3.0, was previously Reserved */ 404433d6423SLionel Sambuc UINT64 Address; 405433d6423SLionel Sambuc 406433d6423SLionel Sambuc } AML_RESOURCE_GENERIC_REGISTER; 407433d6423SLionel Sambuc 408*29492bb7SDavid van Moolenbroek 409*29492bb7SDavid van Moolenbroek /* Common descriptor for GpioInt and GpioIo (ACPI 5.0) */ 410*29492bb7SDavid van Moolenbroek 411*29492bb7SDavid van Moolenbroek typedef struct aml_resource_gpio 412*29492bb7SDavid van Moolenbroek { 413*29492bb7SDavid van Moolenbroek AML_RESOURCE_LARGE_HEADER_COMMON 414*29492bb7SDavid van Moolenbroek UINT8 RevisionId; 415*29492bb7SDavid van Moolenbroek UINT8 ConnectionType; 416*29492bb7SDavid van Moolenbroek UINT16 Flags; 417*29492bb7SDavid van Moolenbroek UINT16 IntFlags; 418*29492bb7SDavid van Moolenbroek UINT8 PinConfig; 419*29492bb7SDavid van Moolenbroek UINT16 DriveStrength; 420*29492bb7SDavid van Moolenbroek UINT16 DebounceTimeout; 421*29492bb7SDavid van Moolenbroek UINT16 PinTableOffset; 422*29492bb7SDavid van Moolenbroek UINT8 ResSourceIndex; 423*29492bb7SDavid van Moolenbroek UINT16 ResSourceOffset; 424*29492bb7SDavid van Moolenbroek UINT16 VendorOffset; 425*29492bb7SDavid van Moolenbroek UINT16 VendorLength; 426*29492bb7SDavid van Moolenbroek /* 427*29492bb7SDavid van Moolenbroek * Optional fields follow immediately: 428*29492bb7SDavid van Moolenbroek * 1) PIN list (Words) 429*29492bb7SDavid van Moolenbroek * 2) Resource Source String 430*29492bb7SDavid van Moolenbroek * 3) Vendor Data bytes 431*29492bb7SDavid van Moolenbroek */ 432*29492bb7SDavid van Moolenbroek 433*29492bb7SDavid van Moolenbroek } AML_RESOURCE_GPIO; 434*29492bb7SDavid van Moolenbroek 435*29492bb7SDavid van Moolenbroek #define AML_RESOURCE_GPIO_REVISION 1 /* ACPI 5.0 */ 436*29492bb7SDavid van Moolenbroek 437*29492bb7SDavid van Moolenbroek /* Values for ConnectionType above */ 438*29492bb7SDavid van Moolenbroek 439*29492bb7SDavid van Moolenbroek #define AML_RESOURCE_GPIO_TYPE_INT 0 440*29492bb7SDavid van Moolenbroek #define AML_RESOURCE_GPIO_TYPE_IO 1 441*29492bb7SDavid van Moolenbroek #define AML_RESOURCE_MAX_GPIOTYPE 1 442*29492bb7SDavid van Moolenbroek 443*29492bb7SDavid van Moolenbroek 444*29492bb7SDavid van Moolenbroek /* Common preamble for all serial descriptors (ACPI 5.0) */ 445*29492bb7SDavid van Moolenbroek 446*29492bb7SDavid van Moolenbroek #define AML_RESOURCE_SERIAL_COMMON \ 447*29492bb7SDavid van Moolenbroek UINT8 RevisionId; \ 448*29492bb7SDavid van Moolenbroek UINT8 ResSourceIndex; \ 449*29492bb7SDavid van Moolenbroek UINT8 Type; \ 450*29492bb7SDavid van Moolenbroek UINT8 Flags; \ 451*29492bb7SDavid van Moolenbroek UINT16 TypeSpecificFlags; \ 452*29492bb7SDavid van Moolenbroek UINT8 TypeRevisionId; \ 453*29492bb7SDavid van Moolenbroek UINT16 TypeDataLength; \ 454*29492bb7SDavid van Moolenbroek 455*29492bb7SDavid van Moolenbroek /* Values for the type field above */ 456*29492bb7SDavid van Moolenbroek 457*29492bb7SDavid van Moolenbroek #define AML_RESOURCE_I2C_SERIALBUSTYPE 1 458*29492bb7SDavid van Moolenbroek #define AML_RESOURCE_SPI_SERIALBUSTYPE 2 459*29492bb7SDavid van Moolenbroek #define AML_RESOURCE_UART_SERIALBUSTYPE 3 460*29492bb7SDavid van Moolenbroek #define AML_RESOURCE_MAX_SERIALBUSTYPE 3 461*29492bb7SDavid van Moolenbroek #define AML_RESOURCE_VENDOR_SERIALBUSTYPE 192 /* Vendor defined is 0xC0-0xFF (NOT SUPPORTED) */ 462*29492bb7SDavid van Moolenbroek 463*29492bb7SDavid van Moolenbroek typedef struct aml_resource_common_serialbus 464*29492bb7SDavid van Moolenbroek { 465*29492bb7SDavid van Moolenbroek AML_RESOURCE_LARGE_HEADER_COMMON 466*29492bb7SDavid van Moolenbroek AML_RESOURCE_SERIAL_COMMON 467*29492bb7SDavid van Moolenbroek 468*29492bb7SDavid van Moolenbroek } AML_RESOURCE_COMMON_SERIALBUS; 469*29492bb7SDavid van Moolenbroek 470*29492bb7SDavid van Moolenbroek typedef struct aml_resource_i2c_serialbus 471*29492bb7SDavid van Moolenbroek { 472*29492bb7SDavid van Moolenbroek AML_RESOURCE_LARGE_HEADER_COMMON 473*29492bb7SDavid van Moolenbroek AML_RESOURCE_SERIAL_COMMON 474*29492bb7SDavid van Moolenbroek UINT32 ConnectionSpeed; 475*29492bb7SDavid van Moolenbroek UINT16 SlaveAddress; 476*29492bb7SDavid van Moolenbroek /* 477*29492bb7SDavid van Moolenbroek * Optional fields follow immediately: 478*29492bb7SDavid van Moolenbroek * 1) Vendor Data bytes 479*29492bb7SDavid van Moolenbroek * 2) Resource Source String 480*29492bb7SDavid van Moolenbroek */ 481*29492bb7SDavid van Moolenbroek 482*29492bb7SDavid van Moolenbroek } AML_RESOURCE_I2C_SERIALBUS; 483*29492bb7SDavid van Moolenbroek 484*29492bb7SDavid van Moolenbroek #define AML_RESOURCE_I2C_REVISION 1 /* ACPI 5.0 */ 485*29492bb7SDavid van Moolenbroek #define AML_RESOURCE_I2C_TYPE_REVISION 1 /* ACPI 5.0 */ 486*29492bb7SDavid van Moolenbroek #define AML_RESOURCE_I2C_MIN_DATA_LEN 6 487*29492bb7SDavid van Moolenbroek 488*29492bb7SDavid van Moolenbroek typedef struct aml_resource_spi_serialbus 489*29492bb7SDavid van Moolenbroek { 490*29492bb7SDavid van Moolenbroek AML_RESOURCE_LARGE_HEADER_COMMON 491*29492bb7SDavid van Moolenbroek AML_RESOURCE_SERIAL_COMMON 492*29492bb7SDavid van Moolenbroek UINT32 ConnectionSpeed; 493*29492bb7SDavid van Moolenbroek UINT8 DataBitLength; 494*29492bb7SDavid van Moolenbroek UINT8 ClockPhase; 495*29492bb7SDavid van Moolenbroek UINT8 ClockPolarity; 496*29492bb7SDavid van Moolenbroek UINT16 DeviceSelection; 497*29492bb7SDavid van Moolenbroek /* 498*29492bb7SDavid van Moolenbroek * Optional fields follow immediately: 499*29492bb7SDavid van Moolenbroek * 1) Vendor Data bytes 500*29492bb7SDavid van Moolenbroek * 2) Resource Source String 501*29492bb7SDavid van Moolenbroek */ 502*29492bb7SDavid van Moolenbroek 503*29492bb7SDavid van Moolenbroek } AML_RESOURCE_SPI_SERIALBUS; 504*29492bb7SDavid van Moolenbroek 505*29492bb7SDavid van Moolenbroek #define AML_RESOURCE_SPI_REVISION 1 /* ACPI 5.0 */ 506*29492bb7SDavid van Moolenbroek #define AML_RESOURCE_SPI_TYPE_REVISION 1 /* ACPI 5.0 */ 507*29492bb7SDavid van Moolenbroek #define AML_RESOURCE_SPI_MIN_DATA_LEN 9 508*29492bb7SDavid van Moolenbroek 509*29492bb7SDavid van Moolenbroek 510*29492bb7SDavid van Moolenbroek typedef struct aml_resource_uart_serialbus 511*29492bb7SDavid van Moolenbroek { 512*29492bb7SDavid van Moolenbroek AML_RESOURCE_LARGE_HEADER_COMMON 513*29492bb7SDavid van Moolenbroek AML_RESOURCE_SERIAL_COMMON 514*29492bb7SDavid van Moolenbroek UINT32 DefaultBaudRate; 515*29492bb7SDavid van Moolenbroek UINT16 RxFifoSize; 516*29492bb7SDavid van Moolenbroek UINT16 TxFifoSize; 517*29492bb7SDavid van Moolenbroek UINT8 Parity; 518*29492bb7SDavid van Moolenbroek UINT8 LinesEnabled; 519*29492bb7SDavid van Moolenbroek /* 520*29492bb7SDavid van Moolenbroek * Optional fields follow immediately: 521*29492bb7SDavid van Moolenbroek * 1) Vendor Data bytes 522*29492bb7SDavid van Moolenbroek * 2) Resource Source String 523*29492bb7SDavid van Moolenbroek */ 524*29492bb7SDavid van Moolenbroek 525*29492bb7SDavid van Moolenbroek } AML_RESOURCE_UART_SERIALBUS; 526*29492bb7SDavid van Moolenbroek 527*29492bb7SDavid van Moolenbroek #define AML_RESOURCE_UART_REVISION 1 /* ACPI 5.0 */ 528*29492bb7SDavid van Moolenbroek #define AML_RESOURCE_UART_TYPE_REVISION 1 /* ACPI 5.0 */ 529*29492bb7SDavid van Moolenbroek #define AML_RESOURCE_UART_MIN_DATA_LEN 10 530*29492bb7SDavid van Moolenbroek 531*29492bb7SDavid van Moolenbroek 532433d6423SLionel Sambuc /* restore default alignment */ 533433d6423SLionel Sambuc 534433d6423SLionel Sambuc #pragma pack() 535433d6423SLionel Sambuc 536433d6423SLionel Sambuc /* Union of all resource descriptors, so we can allocate the worst case */ 537433d6423SLionel Sambuc 538433d6423SLionel Sambuc typedef union aml_resource 539433d6423SLionel Sambuc { 540433d6423SLionel Sambuc /* Descriptor headers */ 541433d6423SLionel Sambuc 542433d6423SLionel Sambuc UINT8 DescriptorType; 543433d6423SLionel Sambuc AML_RESOURCE_SMALL_HEADER SmallHeader; 544433d6423SLionel Sambuc AML_RESOURCE_LARGE_HEADER LargeHeader; 545433d6423SLionel Sambuc 546433d6423SLionel Sambuc /* Small resource descriptors */ 547433d6423SLionel Sambuc 548433d6423SLionel Sambuc AML_RESOURCE_IRQ Irq; 549433d6423SLionel Sambuc AML_RESOURCE_DMA Dma; 550433d6423SLionel Sambuc AML_RESOURCE_START_DEPENDENT StartDpf; 551433d6423SLionel Sambuc AML_RESOURCE_END_DEPENDENT EndDpf; 552433d6423SLionel Sambuc AML_RESOURCE_IO Io; 553433d6423SLionel Sambuc AML_RESOURCE_FIXED_IO FixedIo; 554*29492bb7SDavid van Moolenbroek AML_RESOURCE_FIXED_DMA FixedDma; 555433d6423SLionel Sambuc AML_RESOURCE_VENDOR_SMALL VendorSmall; 556433d6423SLionel Sambuc AML_RESOURCE_END_TAG EndTag; 557433d6423SLionel Sambuc 558433d6423SLionel Sambuc /* Large resource descriptors */ 559433d6423SLionel Sambuc 560433d6423SLionel Sambuc AML_RESOURCE_MEMORY24 Memory24; 561433d6423SLionel Sambuc AML_RESOURCE_GENERIC_REGISTER GenericReg; 562433d6423SLionel Sambuc AML_RESOURCE_VENDOR_LARGE VendorLarge; 563433d6423SLionel Sambuc AML_RESOURCE_MEMORY32 Memory32; 564433d6423SLionel Sambuc AML_RESOURCE_FIXED_MEMORY32 FixedMemory32; 565433d6423SLionel Sambuc AML_RESOURCE_ADDRESS16 Address16; 566433d6423SLionel Sambuc AML_RESOURCE_ADDRESS32 Address32; 567433d6423SLionel Sambuc AML_RESOURCE_ADDRESS64 Address64; 568433d6423SLionel Sambuc AML_RESOURCE_EXTENDED_ADDRESS64 ExtAddress64; 569433d6423SLionel Sambuc AML_RESOURCE_EXTENDED_IRQ ExtendedIrq; 570*29492bb7SDavid van Moolenbroek AML_RESOURCE_GPIO Gpio; 571*29492bb7SDavid van Moolenbroek AML_RESOURCE_I2C_SERIALBUS I2cSerialBus; 572*29492bb7SDavid van Moolenbroek AML_RESOURCE_SPI_SERIALBUS SpiSerialBus; 573*29492bb7SDavid van Moolenbroek AML_RESOURCE_UART_SERIALBUS UartSerialBus; 574*29492bb7SDavid van Moolenbroek AML_RESOURCE_COMMON_SERIALBUS CommonSerialBus; 575433d6423SLionel Sambuc 576433d6423SLionel Sambuc /* Utility overlays */ 577433d6423SLionel Sambuc 578433d6423SLionel Sambuc AML_RESOURCE_ADDRESS Address; 579433d6423SLionel Sambuc UINT32 DwordItem; 580433d6423SLionel Sambuc UINT16 WordItem; 581433d6423SLionel Sambuc UINT8 ByteItem; 582433d6423SLionel Sambuc 583433d6423SLionel Sambuc } AML_RESOURCE; 584433d6423SLionel Sambuc 585433d6423SLionel Sambuc 586*29492bb7SDavid van Moolenbroek /* Interfaces used by both the disassembler and compiler */ 587*29492bb7SDavid van Moolenbroek 588*29492bb7SDavid van Moolenbroek void 589*29492bb7SDavid van Moolenbroek MpSaveGpioInfo ( 590*29492bb7SDavid van Moolenbroek ACPI_PARSE_OBJECT *Op, 591*29492bb7SDavid van Moolenbroek AML_RESOURCE *Resource, 592*29492bb7SDavid van Moolenbroek UINT32 PinCount, 593*29492bb7SDavid van Moolenbroek UINT16 *PinList, 594*29492bb7SDavid van Moolenbroek char *DeviceName); 595*29492bb7SDavid van Moolenbroek 596*29492bb7SDavid van Moolenbroek void 597*29492bb7SDavid van Moolenbroek MpSaveSerialInfo ( 598*29492bb7SDavid van Moolenbroek ACPI_PARSE_OBJECT *Op, 599*29492bb7SDavid van Moolenbroek AML_RESOURCE *Resource, 600*29492bb7SDavid van Moolenbroek char *DeviceName); 601*29492bb7SDavid van Moolenbroek 602*29492bb7SDavid van Moolenbroek char * 603*29492bb7SDavid van Moolenbroek MpGetHidFromParseTree ( 604*29492bb7SDavid van Moolenbroek ACPI_NAMESPACE_NODE *HidNode); 605*29492bb7SDavid van Moolenbroek 606*29492bb7SDavid van Moolenbroek char * 607*29492bb7SDavid van Moolenbroek MpGetHidViaNamestring ( 608*29492bb7SDavid van Moolenbroek char *DeviceName); 609*29492bb7SDavid van Moolenbroek 610*29492bb7SDavid van Moolenbroek char * 611*29492bb7SDavid van Moolenbroek MpGetConnectionInfo ( 612*29492bb7SDavid van Moolenbroek ACPI_PARSE_OBJECT *Op, 613*29492bb7SDavid van Moolenbroek UINT32 PinIndex, 614*29492bb7SDavid van Moolenbroek ACPI_NAMESPACE_NODE **TargetNode, 615*29492bb7SDavid van Moolenbroek char **TargetName); 616*29492bb7SDavid van Moolenbroek 617*29492bb7SDavid van Moolenbroek char * 618*29492bb7SDavid van Moolenbroek MpGetParentDeviceHid ( 619*29492bb7SDavid van Moolenbroek ACPI_PARSE_OBJECT *Op, 620*29492bb7SDavid van Moolenbroek ACPI_NAMESPACE_NODE **TargetNode, 621*29492bb7SDavid van Moolenbroek char **ParentDeviceName); 622*29492bb7SDavid van Moolenbroek 623*29492bb7SDavid van Moolenbroek char * 624*29492bb7SDavid van Moolenbroek MpGetDdnValue ( 625*29492bb7SDavid van Moolenbroek char *DeviceName); 626*29492bb7SDavid van Moolenbroek 627*29492bb7SDavid van Moolenbroek char * 628*29492bb7SDavid van Moolenbroek MpGetHidValue ( 629*29492bb7SDavid van Moolenbroek ACPI_NAMESPACE_NODE *DeviceNode); 630*29492bb7SDavid van Moolenbroek 631*29492bb7SDavid van Moolenbroek #endif 632