linux/drivers/acpi/acpica/amlresrc.h
<<
>>
Prefs
   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
  95struct 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
 120struct aml_resource_small_header {
 121AML_RESOURCE_SMALL_HEADER_COMMON};
 122
 123struct aml_resource_irq {
 124        AML_RESOURCE_SMALL_HEADER_COMMON u16 irq_mask;
 125        u8 flags;
 126};
 127
 128struct aml_resource_irq_noflags {
 129        AML_RESOURCE_SMALL_HEADER_COMMON u16 irq_mask;
 130};
 131
 132struct aml_resource_dma {
 133        AML_RESOURCE_SMALL_HEADER_COMMON u8 dma_channel_mask;
 134        u8 flags;
 135};
 136
 137struct aml_resource_start_dependent {
 138        AML_RESOURCE_SMALL_HEADER_COMMON u8 flags;
 139};
 140
 141struct aml_resource_start_dependent_noprio {
 142AML_RESOURCE_SMALL_HEADER_COMMON};
 143
 144struct aml_resource_end_dependent {
 145AML_RESOURCE_SMALL_HEADER_COMMON};
 146
 147struct 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
 155struct aml_resource_fixed_io {
 156        AML_RESOURCE_SMALL_HEADER_COMMON u16 address;
 157        u8 address_length;
 158};
 159
 160struct aml_resource_vendor_small {
 161AML_RESOURCE_SMALL_HEADER_COMMON};
 162
 163struct 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
 174struct aml_resource_large_header {
 175AML_RESOURCE_LARGE_HEADER_COMMON};
 176
 177struct 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
 185struct aml_resource_vendor_large {
 186AML_RESOURCE_LARGE_HEADER_COMMON};
 187
 188struct 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
 196struct 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
 207struct aml_resource_address {
 208AML_RESOURCE_LARGE_HEADER_COMMON AML_RESOURCE_ADDRESS_COMMON};
 209
 210struct 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
 224struct 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
 233struct 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
 242struct 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
 251struct 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
 258struct 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
 272union 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
 312