Palacios Public Git Repository

To checkout Palacios execute

  git clone http://v3vee.org/palacios/palacios.web/palacios.git
This will give you the master branch. You probably want the devel branch or one of the release branches. To switch to the devel branch, simply execute
  cd palacios
  git checkout --track -b devel origin/devel
The other branches are similar.


Do not make oldconfig when building kitten
[palacios-OLD.git] / kitten / include / acpi / amlresrc.h
1
2 /******************************************************************************
3  *
4  * Module Name: amlresrc.h - AML resource descriptors
5  *
6  *****************************************************************************/
7
8 /*
9  * Copyright (C) 2000 - 2006, R. Byron Moore
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