include/acpi/amlresrc.h
changeset 0 aa628870c1d3
equal deleted inserted replaced
-1:000000000000 0:aa628870c1d3
       
     1 
       
     2 /******************************************************************************
       
     3  *
       
     4  * Module Name: amlresrc.h - AML resource descriptors
       
     5  *
       
     6  *****************************************************************************/
       
     7 
       
     8 /*
       
     9  * Copyright (C) 2000 - 2008, 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:struct_defs -- for acpisrc conversion */
       
    46 
       
    47 #ifndef __AMLRESRC_H
       
    48 #define __AMLRESRC_H
       
    49 
       
    50 /*
       
    51  * Resource descriptor tags, as defined in the ACPI specification.
       
    52  * Used to symbolically reference fields within a descriptor.
       
    53  */
       
    54 #define ACPI_RESTAG_ADDRESS                     "_ADR"
       
    55 #define ACPI_RESTAG_ALIGNMENT                   "_ALN"
       
    56 #define ACPI_RESTAG_ADDRESSSPACE                "_ASI"
       
    57 #define ACPI_RESTAG_ACCESSSIZE                  "_ASZ"
       
    58 #define ACPI_RESTAG_TYPESPECIFICATTRIBUTES      "_ATT"
       
    59 #define ACPI_RESTAG_BASEADDRESS                 "_BAS"
       
    60 #define ACPI_RESTAG_BUSMASTER                   "_BM_"	/* Master(1), Slave(0) */
       
    61 #define ACPI_RESTAG_DECODE                      "_DEC"
       
    62 #define ACPI_RESTAG_DMA                         "_DMA"
       
    63 #define ACPI_RESTAG_DMATYPE                     "_TYP"	/* Compatible(0), A(1), B(2), F(3) */
       
    64 #define ACPI_RESTAG_GRANULARITY                 "_GRA"
       
    65 #define ACPI_RESTAG_INTERRUPT                   "_INT"
       
    66 #define ACPI_RESTAG_INTERRUPTLEVEL              "_LL_"	/* active_lo(1), active_hi(0) */
       
    67 #define ACPI_RESTAG_INTERRUPTSHARE              "_SHR"	/* Shareable(1), no_share(0) */
       
    68 #define ACPI_RESTAG_INTERRUPTTYPE               "_HE_"	/* Edge(1), Level(0) */
       
    69 #define ACPI_RESTAG_LENGTH                      "_LEN"
       
    70 #define ACPI_RESTAG_MEMATTRIBUTES               "_MTP"	/* Memory(0), Reserved(1), ACPI(2), NVS(3) */
       
    71 #define ACPI_RESTAG_MEMTYPE                     "_MEM"	/* non_cache(0), Cacheable(1) Cache+combine(2), Cache+prefetch(3) */
       
    72 #define ACPI_RESTAG_MAXADDR                     "_MAX"
       
    73 #define ACPI_RESTAG_MINADDR                     "_MIN"
       
    74 #define ACPI_RESTAG_MAXTYPE                     "_MAF"
       
    75 #define ACPI_RESTAG_MINTYPE                     "_MIF"
       
    76 #define ACPI_RESTAG_REGISTERBITOFFSET           "_RBO"
       
    77 #define ACPI_RESTAG_REGISTERBITWIDTH            "_RBW"
       
    78 #define ACPI_RESTAG_RANGETYPE                   "_RNG"
       
    79 #define ACPI_RESTAG_READWRITETYPE               "_RW_"	/* read_only(0), Writeable (1) */
       
    80 #define ACPI_RESTAG_TRANSLATION                 "_TRA"
       
    81 #define ACPI_RESTAG_TRANSTYPE                   "_TRS"	/* Sparse(1), Dense(0) */
       
    82 #define ACPI_RESTAG_TYPE                        "_TTP"	/* Translation(1), Static (0) */
       
    83 #define ACPI_RESTAG_XFERTYPE                    "_SIZ"	/* 8(0), 8_and16(1), 16(2) */
       
    84 
       
    85 /* Default sizes for "small" resource descriptors */
       
    86 
       
    87 #define ASL_RDESC_IRQ_SIZE                      0x02
       
    88 #define ASL_RDESC_DMA_SIZE                      0x02
       
    89 #define ASL_RDESC_ST_DEPEND_SIZE                0x00
       
    90 #define ASL_RDESC_END_DEPEND_SIZE               0x00
       
    91 #define ASL_RDESC_IO_SIZE                       0x07
       
    92 #define ASL_RDESC_FIXED_IO_SIZE                 0x03
       
    93 #define ASL_RDESC_END_TAG_SIZE                  0x01
       
    94 
       
    95 struct asl_resource_node {
       
    96 	u32 buffer_length;
       
    97 	void *buffer;
       
    98 	struct asl_resource_node *next;
       
    99 };
       
   100 
       
   101 /* Macros used to generate AML resource length fields */
       
   102 
       
   103 #define ACPI_AML_SIZE_LARGE(r)      (sizeof (r) - sizeof (struct aml_resource_large_header))
       
   104 #define ACPI_AML_SIZE_SMALL(r)      (sizeof (r) - sizeof (struct aml_resource_small_header))
       
   105 
       
   106 /*
       
   107  * Resource descriptors defined in the ACPI specification.
       
   108  *
       
   109  * Packing/alignment must be BYTE because these descriptors
       
   110  * are used to overlay the raw AML byte stream.
       
   111  */
       
   112 #pragma pack(1)
       
   113 
       
   114 /*
       
   115  * SMALL descriptors
       
   116  */
       
   117 #define AML_RESOURCE_SMALL_HEADER_COMMON \
       
   118 	u8                              descriptor_type;
       
   119 
       
   120 struct aml_resource_small_header {
       
   121 AML_RESOURCE_SMALL_HEADER_COMMON};
       
   122 
       
   123 struct aml_resource_irq {
       
   124 	AML_RESOURCE_SMALL_HEADER_COMMON u16 irq_mask;
       
   125 	u8 flags;
       
   126 };
       
   127 
       
   128 struct aml_resource_irq_noflags {
       
   129 	AML_RESOURCE_SMALL_HEADER_COMMON u16 irq_mask;
       
   130 };
       
   131 
       
   132 struct aml_resource_dma {
       
   133 	AML_RESOURCE_SMALL_HEADER_COMMON u8 dma_channel_mask;
       
   134 	u8 flags;
       
   135 };
       
   136 
       
   137 struct aml_resource_start_dependent {
       
   138 	AML_RESOURCE_SMALL_HEADER_COMMON u8 flags;
       
   139 };
       
   140 
       
   141 struct aml_resource_start_dependent_noprio {
       
   142 AML_RESOURCE_SMALL_HEADER_COMMON};
       
   143 
       
   144 struct aml_resource_end_dependent {
       
   145 AML_RESOURCE_SMALL_HEADER_COMMON};
       
   146 
       
   147 struct aml_resource_io {
       
   148 	AML_RESOURCE_SMALL_HEADER_COMMON u8 flags;
       
   149 	u16 minimum;
       
   150 	u16 maximum;
       
   151 	u8 alignment;
       
   152 	u8 address_length;
       
   153 };
       
   154 
       
   155 struct aml_resource_fixed_io {
       
   156 	AML_RESOURCE_SMALL_HEADER_COMMON u16 address;
       
   157 	u8 address_length;
       
   158 };
       
   159 
       
   160 struct aml_resource_vendor_small {
       
   161 AML_RESOURCE_SMALL_HEADER_COMMON};
       
   162 
       
   163 struct aml_resource_end_tag {
       
   164 	AML_RESOURCE_SMALL_HEADER_COMMON u8 checksum;
       
   165 };
       
   166 
       
   167 /*
       
   168  * LARGE descriptors
       
   169  */
       
   170 #define AML_RESOURCE_LARGE_HEADER_COMMON \
       
   171 	u8                              descriptor_type;\
       
   172 	u16                             resource_length;
       
   173 
       
   174 struct aml_resource_large_header {
       
   175 AML_RESOURCE_LARGE_HEADER_COMMON};
       
   176 
       
   177 struct aml_resource_memory24 {
       
   178 	AML_RESOURCE_LARGE_HEADER_COMMON u8 flags;
       
   179 	u16 minimum;
       
   180 	u16 maximum;
       
   181 	u16 alignment;
       
   182 	u16 address_length;
       
   183 };
       
   184 
       
   185 struct aml_resource_vendor_large {
       
   186 AML_RESOURCE_LARGE_HEADER_COMMON};
       
   187 
       
   188 struct aml_resource_memory32 {
       
   189 	AML_RESOURCE_LARGE_HEADER_COMMON u8 flags;
       
   190 	u32 minimum;
       
   191 	u32 maximum;
       
   192 	u32 alignment;
       
   193 	u32 address_length;
       
   194 };
       
   195 
       
   196 struct aml_resource_fixed_memory32 {
       
   197 	AML_RESOURCE_LARGE_HEADER_COMMON u8 flags;
       
   198 	u32 address;
       
   199 	u32 address_length;
       
   200 };
       
   201 
       
   202 #define AML_RESOURCE_ADDRESS_COMMON \
       
   203 	u8                              resource_type; \
       
   204 	u8                              flags; \
       
   205 	u8                              specific_flags;
       
   206 
       
   207 struct aml_resource_address {
       
   208 AML_RESOURCE_LARGE_HEADER_COMMON AML_RESOURCE_ADDRESS_COMMON};
       
   209 
       
   210 struct aml_resource_extended_address64 {
       
   211 	AML_RESOURCE_LARGE_HEADER_COMMON
       
   212 	    AML_RESOURCE_ADDRESS_COMMON u8 revision_iD;
       
   213 	u8 reserved;
       
   214 	u64 granularity;
       
   215 	u64 minimum;
       
   216 	u64 maximum;
       
   217 	u64 translation_offset;
       
   218 	u64 address_length;
       
   219 	u64 type_specific;
       
   220 };
       
   221 
       
   222 #define AML_RESOURCE_EXTENDED_ADDRESS_REVISION          1	/* ACPI 3.0 */
       
   223 
       
   224 struct aml_resource_address64 {
       
   225 	AML_RESOURCE_LARGE_HEADER_COMMON
       
   226 	    AML_RESOURCE_ADDRESS_COMMON u64 granularity;
       
   227 	u64 minimum;
       
   228 	u64 maximum;
       
   229 	u64 translation_offset;
       
   230 	u64 address_length;
       
   231 };
       
   232 
       
   233 struct aml_resource_address32 {
       
   234 	AML_RESOURCE_LARGE_HEADER_COMMON
       
   235 	    AML_RESOURCE_ADDRESS_COMMON u32 granularity;
       
   236 	u32 minimum;
       
   237 	u32 maximum;
       
   238 	u32 translation_offset;
       
   239 	u32 address_length;
       
   240 };
       
   241 
       
   242 struct aml_resource_address16 {
       
   243 	AML_RESOURCE_LARGE_HEADER_COMMON
       
   244 	    AML_RESOURCE_ADDRESS_COMMON u16 granularity;
       
   245 	u16 minimum;
       
   246 	u16 maximum;
       
   247 	u16 translation_offset;
       
   248 	u16 address_length;
       
   249 };
       
   250 
       
   251 struct aml_resource_extended_irq {
       
   252 	AML_RESOURCE_LARGE_HEADER_COMMON u8 flags;
       
   253 	u8 interrupt_count;
       
   254 	u32 interrupts[1];
       
   255 	/* res_source_index, res_source optional fields follow */
       
   256 };
       
   257 
       
   258 struct aml_resource_generic_register {
       
   259 	AML_RESOURCE_LARGE_HEADER_COMMON u8 address_space_id;
       
   260 	u8 bit_width;
       
   261 	u8 bit_offset;
       
   262 	u8 access_size;		/* ACPI 3.0, was previously Reserved */
       
   263 	u64 address;
       
   264 };
       
   265 
       
   266 /* restore default alignment */
       
   267 
       
   268 #pragma pack()
       
   269 
       
   270 /* Union of all resource descriptors, so we can allocate the worst case */
       
   271 
       
   272 union aml_resource {
       
   273 	/* Descriptor headers */
       
   274 
       
   275 	u8 descriptor_type;
       
   276 	struct aml_resource_small_header small_header;
       
   277 	struct aml_resource_large_header large_header;
       
   278 
       
   279 	/* Small resource descriptors */
       
   280 
       
   281 	struct aml_resource_irq irq;
       
   282 	struct aml_resource_dma dma;
       
   283 	struct aml_resource_start_dependent start_dpf;
       
   284 	struct aml_resource_end_dependent end_dpf;
       
   285 	struct aml_resource_io io;
       
   286 	struct aml_resource_fixed_io fixed_io;
       
   287 	struct aml_resource_vendor_small vendor_small;
       
   288 	struct aml_resource_end_tag end_tag;
       
   289 
       
   290 	/* Large resource descriptors */
       
   291 
       
   292 	struct aml_resource_memory24 memory24;
       
   293 	struct aml_resource_generic_register generic_reg;
       
   294 	struct aml_resource_vendor_large vendor_large;
       
   295 	struct aml_resource_memory32 memory32;
       
   296 	struct aml_resource_fixed_memory32 fixed_memory32;
       
   297 	struct aml_resource_address16 address16;
       
   298 	struct aml_resource_address32 address32;
       
   299 	struct aml_resource_address64 address64;
       
   300 	struct aml_resource_extended_address64 ext_address64;
       
   301 	struct aml_resource_extended_irq extended_irq;
       
   302 
       
   303 	/* Utility overlays */
       
   304 
       
   305 	struct aml_resource_address address;
       
   306 	u32 dword_item;
       
   307 	u16 word_item;
       
   308 	u8 byte_item;
       
   309 };
       
   310 
       
   311 #endif