Linux Audio

Check our new training course

Loading...
v3.1
  1
  2/******************************************************************************
  3 *
  4 * Module Name: amlresrc.h - AML resource descriptors
  5 *
  6 *****************************************************************************/
  7
  8/*
  9 * Copyright (C) 2000 - 2011, 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
v3.5.6
  1
  2/******************************************************************************
  3 *
  4 * Module Name: amlresrc.h - AML resource descriptors
  5 *
  6 *****************************************************************************/
  7
  8/*
  9 * Copyright (C) 2000 - 2012, 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_DEBOUNCETIME                "_DBT"
 62#define ACPI_RESTAG_DECODE                      "_DEC"
 63#define ACPI_RESTAG_DEVICEPOLARITY              "_DPL"
 64#define ACPI_RESTAG_DMA                         "_DMA"
 65#define ACPI_RESTAG_DMATYPE                     "_TYP"	/* Compatible(0), A(1), B(2), F(3) */
 66#define ACPI_RESTAG_DRIVESTRENGTH               "_DRS"
 67#define ACPI_RESTAG_ENDIANNESS                  "_END"
 68#define ACPI_RESTAG_FLOWCONTROL                 "_FLC"
 69#define ACPI_RESTAG_GRANULARITY                 "_GRA"
 70#define ACPI_RESTAG_INTERRUPT                   "_INT"
 71#define ACPI_RESTAG_INTERRUPTLEVEL              "_LL_"	/* active_lo(1), active_hi(0) */
 72#define ACPI_RESTAG_INTERRUPTSHARE              "_SHR"	/* Shareable(1), no_share(0) */
 73#define ACPI_RESTAG_INTERRUPTTYPE               "_HE_"	/* Edge(1), Level(0) */
 74#define ACPI_RESTAG_IORESTRICTION               "_IOR"
 75#define ACPI_RESTAG_LENGTH                      "_LEN"
 76#define ACPI_RESTAG_LINE                        "_LIN"
 77#define ACPI_RESTAG_MEMATTRIBUTES               "_MTP"	/* Memory(0), Reserved(1), ACPI(2), NVS(3) */
 78#define ACPI_RESTAG_MEMTYPE                     "_MEM"	/* non_cache(0), Cacheable(1) Cache+combine(2), Cache+prefetch(3) */
 79#define ACPI_RESTAG_MAXADDR                     "_MAX"
 80#define ACPI_RESTAG_MINADDR                     "_MIN"
 81#define ACPI_RESTAG_MAXTYPE                     "_MAF"
 82#define ACPI_RESTAG_MINTYPE                     "_MIF"
 83#define ACPI_RESTAG_MODE                        "_MOD"
 84#define ACPI_RESTAG_PARITY                      "_PAR"
 85#define ACPI_RESTAG_PHASE                       "_PHA"
 86#define ACPI_RESTAG_PIN                         "_PIN"
 87#define ACPI_RESTAG_PINCONFIG                   "_PPI"
 88#define ACPI_RESTAG_POLARITY                    "_POL"
 89#define ACPI_RESTAG_REGISTERBITOFFSET           "_RBO"
 90#define ACPI_RESTAG_REGISTERBITWIDTH            "_RBW"
 91#define ACPI_RESTAG_RANGETYPE                   "_RNG"
 92#define ACPI_RESTAG_READWRITETYPE               "_RW_"	/* read_only(0), Writeable (1) */
 93#define ACPI_RESTAG_LENGTH_RX                   "_RXL"
 94#define ACPI_RESTAG_LENGTH_TX                   "_TXL"
 95#define ACPI_RESTAG_SLAVEMODE                   "_SLV"
 96#define ACPI_RESTAG_SPEED                       "_SPE"
 97#define ACPI_RESTAG_STOPBITS                    "_STB"
 98#define ACPI_RESTAG_TRANSLATION                 "_TRA"
 99#define ACPI_RESTAG_TRANSTYPE                   "_TRS"	/* Sparse(1), Dense(0) */
100#define ACPI_RESTAG_TYPE                        "_TTP"	/* Translation(1), Static (0) */
101#define ACPI_RESTAG_XFERTYPE                    "_SIZ"	/* 8(0), 8_and16(1), 16(2) */
102#define ACPI_RESTAG_VENDORDATA                  "_VEN"
103
104/* Default sizes for "small" resource descriptors */
105
106#define ASL_RDESC_IRQ_SIZE                      0x02
107#define ASL_RDESC_DMA_SIZE                      0x02
108#define ASL_RDESC_ST_DEPEND_SIZE                0x00
109#define ASL_RDESC_END_DEPEND_SIZE               0x00
110#define ASL_RDESC_IO_SIZE                       0x07
111#define ASL_RDESC_FIXED_IO_SIZE                 0x03
112#define ASL_RDESC_FIXED_DMA_SIZE                0x05
113#define ASL_RDESC_END_TAG_SIZE                  0x01
114
115struct asl_resource_node {
116	u32 buffer_length;
117	void *buffer;
118	struct asl_resource_node *next;
119};
120
121/* Macros used to generate AML resource length fields */
122
123#define ACPI_AML_SIZE_LARGE(r)      (sizeof (r) - sizeof (struct aml_resource_large_header))
124#define ACPI_AML_SIZE_SMALL(r)      (sizeof (r) - sizeof (struct aml_resource_small_header))
125
126/*
127 * Resource descriptors defined in the ACPI specification.
128 *
129 * Packing/alignment must be BYTE because these descriptors
130 * are used to overlay the raw AML byte stream.
131 */
132#pragma pack(1)
133
134/*
135 * SMALL descriptors
136 */
137#define AML_RESOURCE_SMALL_HEADER_COMMON \
138	u8                              descriptor_type;
139
140struct aml_resource_small_header {
141AML_RESOURCE_SMALL_HEADER_COMMON};
142
143struct aml_resource_irq {
144	AML_RESOURCE_SMALL_HEADER_COMMON u16 irq_mask;
145	u8 flags;
146};
147
148struct aml_resource_irq_noflags {
149	AML_RESOURCE_SMALL_HEADER_COMMON u16 irq_mask;
150};
151
152struct aml_resource_dma {
153	AML_RESOURCE_SMALL_HEADER_COMMON u8 dma_channel_mask;
154	u8 flags;
155};
156
157struct aml_resource_start_dependent {
158	AML_RESOURCE_SMALL_HEADER_COMMON u8 flags;
159};
160
161struct aml_resource_start_dependent_noprio {
162AML_RESOURCE_SMALL_HEADER_COMMON};
163
164struct aml_resource_end_dependent {
165AML_RESOURCE_SMALL_HEADER_COMMON};
166
167struct aml_resource_io {
168	AML_RESOURCE_SMALL_HEADER_COMMON u8 flags;
169	u16 minimum;
170	u16 maximum;
171	u8 alignment;
172	u8 address_length;
173};
174
175struct aml_resource_fixed_io {
176	AML_RESOURCE_SMALL_HEADER_COMMON u16 address;
177	u8 address_length;
178};
179
180struct aml_resource_vendor_small {
181AML_RESOURCE_SMALL_HEADER_COMMON};
182
183struct aml_resource_end_tag {
184	AML_RESOURCE_SMALL_HEADER_COMMON u8 checksum;
185};
186
187struct aml_resource_fixed_dma {
188	AML_RESOURCE_SMALL_HEADER_COMMON u16 request_lines;
189	u16 channels;
190	u8 width;
191};
192
193/*
194 * LARGE descriptors
195 */
196#define AML_RESOURCE_LARGE_HEADER_COMMON \
197	u8                              descriptor_type;\
198	u16                             resource_length;
199
200struct aml_resource_large_header {
201AML_RESOURCE_LARGE_HEADER_COMMON};
202
203struct aml_resource_memory24 {
204	AML_RESOURCE_LARGE_HEADER_COMMON u8 flags;
205	u16 minimum;
206	u16 maximum;
207	u16 alignment;
208	u16 address_length;
209};
210
211struct aml_resource_vendor_large {
212AML_RESOURCE_LARGE_HEADER_COMMON};
213
214struct aml_resource_memory32 {
215	AML_RESOURCE_LARGE_HEADER_COMMON u8 flags;
216	u32 minimum;
217	u32 maximum;
218	u32 alignment;
219	u32 address_length;
220};
221
222struct aml_resource_fixed_memory32 {
223	AML_RESOURCE_LARGE_HEADER_COMMON u8 flags;
224	u32 address;
225	u32 address_length;
226};
227
228#define AML_RESOURCE_ADDRESS_COMMON \
229	u8                              resource_type; \
230	u8                              flags; \
231	u8                              specific_flags;
232
233struct aml_resource_address {
234AML_RESOURCE_LARGE_HEADER_COMMON AML_RESOURCE_ADDRESS_COMMON};
235
236struct aml_resource_extended_address64 {
237	AML_RESOURCE_LARGE_HEADER_COMMON
238	    AML_RESOURCE_ADDRESS_COMMON u8 revision_iD;
239	u8 reserved;
240	u64 granularity;
241	u64 minimum;
242	u64 maximum;
243	u64 translation_offset;
244	u64 address_length;
245	u64 type_specific;
246};
247
248#define AML_RESOURCE_EXTENDED_ADDRESS_REVISION          1	/* ACPI 3.0 */
249
250struct aml_resource_address64 {
251	AML_RESOURCE_LARGE_HEADER_COMMON
252	    AML_RESOURCE_ADDRESS_COMMON u64 granularity;
253	u64 minimum;
254	u64 maximum;
255	u64 translation_offset;
256	u64 address_length;
257};
258
259struct aml_resource_address32 {
260	AML_RESOURCE_LARGE_HEADER_COMMON
261	    AML_RESOURCE_ADDRESS_COMMON u32 granularity;
262	u32 minimum;
263	u32 maximum;
264	u32 translation_offset;
265	u32 address_length;
266};
267
268struct aml_resource_address16 {
269	AML_RESOURCE_LARGE_HEADER_COMMON
270	    AML_RESOURCE_ADDRESS_COMMON u16 granularity;
271	u16 minimum;
272	u16 maximum;
273	u16 translation_offset;
274	u16 address_length;
275};
276
277struct aml_resource_extended_irq {
278	AML_RESOURCE_LARGE_HEADER_COMMON u8 flags;
279	u8 interrupt_count;
280	u32 interrupts[1];
281	/* res_source_index, res_source optional fields follow */
282};
283
284struct aml_resource_generic_register {
285	AML_RESOURCE_LARGE_HEADER_COMMON u8 address_space_id;
286	u8 bit_width;
287	u8 bit_offset;
288	u8 access_size;		/* ACPI 3.0, was previously Reserved */
289	u64 address;
290};
291
292/* Common descriptor for gpio_int and gpio_io (ACPI 5.0) */
293
294struct aml_resource_gpio {
295	AML_RESOURCE_LARGE_HEADER_COMMON u8 revision_id;
296	u8 connection_type;
297	u16 flags;
298	u16 int_flags;
299	u8 pin_config;
300	u16 drive_strength;
301	u16 debounce_timeout;
302	u16 pin_table_offset;
303	u8 res_source_index;
304	u16 res_source_offset;
305	u16 vendor_offset;
306	u16 vendor_length;
307	/*
308	 * Optional fields follow immediately:
309	 * 1) PIN list (Words)
310	 * 2) Resource Source String
311	 * 3) Vendor Data bytes
312	 */
313};
314
315#define AML_RESOURCE_GPIO_REVISION              1	/* ACPI 5.0 */
316
317/* Values for connection_type above */
318
319#define AML_RESOURCE_GPIO_TYPE_INT              0
320#define AML_RESOURCE_GPIO_TYPE_IO               1
321#define AML_RESOURCE_MAX_GPIOTYPE               1
322
323/* Common preamble for all serial descriptors (ACPI 5.0) */
324
325#define AML_RESOURCE_SERIAL_COMMON \
326	u8                              revision_id; \
327	u8                              res_source_index; \
328	u8                              type; \
329	u8                              flags; \
330	u16                             type_specific_flags; \
331	u8                              type_revision_id; \
332	u16                             type_data_length; \
333
334/* Values for the type field above */
335
336#define AML_RESOURCE_I2C_SERIALBUSTYPE          1
337#define AML_RESOURCE_SPI_SERIALBUSTYPE          2
338#define AML_RESOURCE_UART_SERIALBUSTYPE         3
339#define AML_RESOURCE_MAX_SERIALBUSTYPE          3
340#define AML_RESOURCE_VENDOR_SERIALBUSTYPE       192	/* Vendor defined is 0xC0-0xFF (NOT SUPPORTED) */
341
342struct aml_resource_common_serialbus {
343AML_RESOURCE_LARGE_HEADER_COMMON AML_RESOURCE_SERIAL_COMMON};
344
345struct aml_resource_i2c_serialbus {
346	AML_RESOURCE_LARGE_HEADER_COMMON
347	    AML_RESOURCE_SERIAL_COMMON u32 connection_speed;
348	u16 slave_address;
349	/*
350	 * Optional fields follow immediately:
351	 * 1) Vendor Data bytes
352	 * 2) Resource Source String
353	 */
354};
355
356#define AML_RESOURCE_I2C_REVISION               1	/* ACPI 5.0 */
357#define AML_RESOURCE_I2C_TYPE_REVISION          1	/* ACPI 5.0 */
358#define AML_RESOURCE_I2C_MIN_DATA_LEN           6
359
360struct aml_resource_spi_serialbus {
361	AML_RESOURCE_LARGE_HEADER_COMMON
362	    AML_RESOURCE_SERIAL_COMMON u32 connection_speed;
363	u8 data_bit_length;
364	u8 clock_phase;
365	u8 clock_polarity;
366	u16 device_selection;
367	/*
368	 * Optional fields follow immediately:
369	 * 1) Vendor Data bytes
370	 * 2) Resource Source String
371	 */
372};
373
374#define AML_RESOURCE_SPI_REVISION               1	/* ACPI 5.0 */
375#define AML_RESOURCE_SPI_TYPE_REVISION          1	/* ACPI 5.0 */
376#define AML_RESOURCE_SPI_MIN_DATA_LEN           9
377
378struct aml_resource_uart_serialbus {
379	AML_RESOURCE_LARGE_HEADER_COMMON
380	    AML_RESOURCE_SERIAL_COMMON u32 default_baud_rate;
381	u16 rx_fifo_size;
382	u16 tx_fifo_size;
383	u8 parity;
384	u8 lines_enabled;
385	/*
386	 * Optional fields follow immediately:
387	 * 1) Vendor Data bytes
388	 * 2) Resource Source String
389	 */
390};
391
392#define AML_RESOURCE_UART_REVISION              1	/* ACPI 5.0 */
393#define AML_RESOURCE_UART_TYPE_REVISION         1	/* ACPI 5.0 */
394#define AML_RESOURCE_UART_MIN_DATA_LEN          10
395
396/* restore default alignment */
397
398#pragma pack()
399
400/* Union of all resource descriptors, so we can allocate the worst case */
401
402union aml_resource {
403	/* Descriptor headers */
404
405	u8 descriptor_type;
406	struct aml_resource_small_header small_header;
407	struct aml_resource_large_header large_header;
408
409	/* Small resource descriptors */
410
411	struct aml_resource_irq irq;
412	struct aml_resource_dma dma;
413	struct aml_resource_start_dependent start_dpf;
414	struct aml_resource_end_dependent end_dpf;
415	struct aml_resource_io io;
416	struct aml_resource_fixed_io fixed_io;
417	struct aml_resource_fixed_dma fixed_dma;
418	struct aml_resource_vendor_small vendor_small;
419	struct aml_resource_end_tag end_tag;
420
421	/* Large resource descriptors */
422
423	struct aml_resource_memory24 memory24;
424	struct aml_resource_generic_register generic_reg;
425	struct aml_resource_vendor_large vendor_large;
426	struct aml_resource_memory32 memory32;
427	struct aml_resource_fixed_memory32 fixed_memory32;
428	struct aml_resource_address16 address16;
429	struct aml_resource_address32 address32;
430	struct aml_resource_address64 address64;
431	struct aml_resource_extended_address64 ext_address64;
432	struct aml_resource_extended_irq extended_irq;
433	struct aml_resource_gpio gpio;
434	struct aml_resource_i2c_serialbus i2c_serial_bus;
435	struct aml_resource_spi_serialbus spi_serial_bus;
436	struct aml_resource_uart_serialbus uart_serial_bus;
437	struct aml_resource_common_serialbus common_serial_bus;
438
439	/* Utility overlays */
440
441	struct aml_resource_address address;
442	u32 dword_item;
443	u16 word_item;
444	u8 byte_item;
445};
446
447#endif