• Home
  • History
  • Annotate
  • Line#
  • Navigate
  • Raw
  • Download
  • only in /asuswrt-rt-n18u-9.0.0.4.380.2695/release/src-rt-6.x.4708/linux/linux-2.6.36/drivers/acpi/acpica/
1
2/******************************************************************************
3 *
4 * Module Name: amlresrc.h - AML resource descriptors
5 *
6 *****************************************************************************/
7
8/*
9 * Copyright (C) 2000 - 2010, 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