amlresrc.h revision 217365
1100966Siwasaki
2100966Siwasaki/******************************************************************************
3100966Siwasaki *
4100966Siwasaki * Module Name: amlresrc.h - AML resource descriptors
5100966Siwasaki *
6100966Siwasaki *****************************************************************************/
7100966Siwasaki
8217365Sjkim/*
9217365Sjkim * Copyright (C) 2000 - 2011, Intel Corp.
10100966Siwasaki * All rights reserved.
11100966Siwasaki *
12217365Sjkim * Redistribution and use in source and binary forms, with or without
13217365Sjkim * modification, are permitted provided that the following conditions
14217365Sjkim * are met:
15217365Sjkim * 1. Redistributions of source code must retain the above copyright
16217365Sjkim *    notice, this list of conditions, and the following disclaimer,
17217365Sjkim *    without modification.
18217365Sjkim * 2. Redistributions in binary form must reproduce at minimum a disclaimer
19217365Sjkim *    substantially similar to the "NO WARRANTY" disclaimer below
20217365Sjkim *    ("Disclaimer") and any redistribution must be conditioned upon
21217365Sjkim *    including a substantially similar Disclaimer requirement for further
22217365Sjkim *    binary redistribution.
23217365Sjkim * 3. Neither the names of the above-listed copyright holders nor the names
24217365Sjkim *    of any contributors may be used to endorse or promote products derived
25217365Sjkim *    from this software without specific prior written permission.
26100966Siwasaki *
27217365Sjkim * Alternatively, this software may be distributed under the terms of the
28217365Sjkim * GNU General Public License ("GPL") version 2 as published by the Free
29217365Sjkim * Software Foundation.
30100966Siwasaki *
31217365Sjkim * NO WARRANTY
32217365Sjkim * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
33217365Sjkim * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
34217365Sjkim * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
35217365Sjkim * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
36217365Sjkim * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
37217365Sjkim * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
38217365Sjkim * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
39217365Sjkim * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
40217365Sjkim * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
41217365Sjkim * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
42217365Sjkim * POSSIBILITY OF SUCH DAMAGES.
43217365Sjkim */
44100966Siwasaki
45167802Sjkim/* acpisrc:StructDefs -- for acpisrc conversion */
46100966Siwasaki
47100966Siwasaki#ifndef __AMLRESRC_H
48100966Siwasaki#define __AMLRESRC_H
49100966Siwasaki
50100966Siwasaki
51167802Sjkim/*
52167802Sjkim * Resource descriptor tags, as defined in the ACPI specification.
53167802Sjkim * Used to symbolically reference fields within a descriptor.
54167802Sjkim */
55167802Sjkim#define ACPI_RESTAG_ADDRESS                     "_ADR"
56167802Sjkim#define ACPI_RESTAG_ALIGNMENT                   "_ALN"
57167802Sjkim#define ACPI_RESTAG_ADDRESSSPACE                "_ASI"
58167802Sjkim#define ACPI_RESTAG_ACCESSSIZE                  "_ASZ"
59167802Sjkim#define ACPI_RESTAG_TYPESPECIFICATTRIBUTES      "_ATT"
60167802Sjkim#define ACPI_RESTAG_BASEADDRESS                 "_BAS"
61167802Sjkim#define ACPI_RESTAG_BUSMASTER                   "_BM_"  /* Master(1), Slave(0) */
62167802Sjkim#define ACPI_RESTAG_DECODE                      "_DEC"
63167802Sjkim#define ACPI_RESTAG_DMA                         "_DMA"
64167802Sjkim#define ACPI_RESTAG_DMATYPE                     "_TYP"  /* Compatible(0), A(1), B(2), F(3) */
65167802Sjkim#define ACPI_RESTAG_GRANULARITY                 "_GRA"
66167802Sjkim#define ACPI_RESTAG_INTERRUPT                   "_INT"
67167802Sjkim#define ACPI_RESTAG_INTERRUPTLEVEL              "_LL_"  /* ActiveLo(1), ActiveHi(0) */
68167802Sjkim#define ACPI_RESTAG_INTERRUPTSHARE              "_SHR"  /* Shareable(1), NoShare(0) */
69167802Sjkim#define ACPI_RESTAG_INTERRUPTTYPE               "_HE_"  /* Edge(1), Level(0) */
70167802Sjkim#define ACPI_RESTAG_LENGTH                      "_LEN"
71167802Sjkim#define ACPI_RESTAG_MEMATTRIBUTES               "_MTP"  /* Memory(0), Reserved(1), ACPI(2), NVS(3) */
72167802Sjkim#define ACPI_RESTAG_MEMTYPE                     "_MEM"  /* NonCache(0), Cacheable(1) Cache+combine(2), Cache+prefetch(3) */
73167802Sjkim#define ACPI_RESTAG_MAXADDR                     "_MAX"
74167802Sjkim#define ACPI_RESTAG_MINADDR                     "_MIN"
75167802Sjkim#define ACPI_RESTAG_MAXTYPE                     "_MAF"
76167802Sjkim#define ACPI_RESTAG_MINTYPE                     "_MIF"
77167802Sjkim#define ACPI_RESTAG_REGISTERBITOFFSET           "_RBO"
78167802Sjkim#define ACPI_RESTAG_REGISTERBITWIDTH            "_RBW"
79167802Sjkim#define ACPI_RESTAG_RANGETYPE                   "_RNG"
80167802Sjkim#define ACPI_RESTAG_READWRITETYPE               "_RW_"  /* ReadOnly(0), Writeable (1) */
81167802Sjkim#define ACPI_RESTAG_TRANSLATION                 "_TRA"
82167802Sjkim#define ACPI_RESTAG_TRANSTYPE                   "_TRS"  /* Sparse(1), Dense(0) */
83167802Sjkim#define ACPI_RESTAG_TYPE                        "_TTP"  /* Translation(1), Static (0) */
84167802Sjkim#define ACPI_RESTAG_XFERTYPE                    "_SIZ"  /* 8(0), 8And16(1), 16(2) */
85100966Siwasaki
86100966Siwasaki
87100966Siwasaki/* Default sizes for "small" resource descriptors */
88100966Siwasaki
89100966Siwasaki#define ASL_RDESC_IRQ_SIZE                      0x02
90100966Siwasaki#define ASL_RDESC_DMA_SIZE                      0x02
91100966Siwasaki#define ASL_RDESC_ST_DEPEND_SIZE                0x00
92100966Siwasaki#define ASL_RDESC_END_DEPEND_SIZE               0x00
93100966Siwasaki#define ASL_RDESC_IO_SIZE                       0x07
94100966Siwasaki#define ASL_RDESC_FIXED_IO_SIZE                 0x03
95100966Siwasaki#define ASL_RDESC_END_TAG_SIZE                  0x01
96100966Siwasaki
97100966Siwasaki
98100966Siwasakitypedef struct asl_resource_node
99100966Siwasaki{
100167802Sjkim    UINT32                          BufferLength;
101167802Sjkim    void                            *Buffer;
102167802Sjkim    struct asl_resource_node        *Next;
103100966Siwasaki
104100966Siwasaki} ASL_RESOURCE_NODE;
105100966Siwasaki
106100966Siwasaki
107167802Sjkim/* Macros used to generate AML resource length fields */
108167802Sjkim
109167802Sjkim#define ACPI_AML_SIZE_LARGE(r)      (sizeof (r) - sizeof (AML_RESOURCE_LARGE_HEADER))
110167802Sjkim#define ACPI_AML_SIZE_SMALL(r)      (sizeof (r) - sizeof (AML_RESOURCE_SMALL_HEADER))
111167802Sjkim
112100966Siwasaki/*
113100966Siwasaki * Resource descriptors defined in the ACPI specification.
114100966Siwasaki *
115138287Smarks * Packing/alignment must be BYTE because these descriptors
116151937Sjkim * are used to overlay the raw AML byte stream.
117100966Siwasaki */
118100966Siwasaki#pragma pack(1)
119100966Siwasaki
120151937Sjkim/*
121151937Sjkim * SMALL descriptors
122151937Sjkim */
123151937Sjkim#define AML_RESOURCE_SMALL_HEADER_COMMON \
124167802Sjkim    UINT8                           DescriptorType;
125151937Sjkim
126151937Sjkimtypedef struct aml_resource_small_header
127100966Siwasaki{
128151937Sjkim    AML_RESOURCE_SMALL_HEADER_COMMON
129151937Sjkim
130151937Sjkim} AML_RESOURCE_SMALL_HEADER;
131151937Sjkim
132151937Sjkim
133151937Sjkimtypedef struct aml_resource_irq
134151937Sjkim{
135151937Sjkim    AML_RESOURCE_SMALL_HEADER_COMMON
136167802Sjkim    UINT16                          IrqMask;
137167802Sjkim    UINT8                           Flags;
138100966Siwasaki
139151937Sjkim} AML_RESOURCE_IRQ;
140100966Siwasaki
141100966Siwasaki
142151937Sjkimtypedef struct aml_resource_irq_noflags
143100966Siwasaki{
144151937Sjkim    AML_RESOURCE_SMALL_HEADER_COMMON
145167802Sjkim    UINT16                          IrqMask;
146100966Siwasaki
147151937Sjkim} AML_RESOURCE_IRQ_NOFLAGS;
148100966Siwasaki
149100966Siwasaki
150151937Sjkimtypedef struct aml_resource_dma
151100966Siwasaki{
152151937Sjkim    AML_RESOURCE_SMALL_HEADER_COMMON
153167802Sjkim    UINT8                           DmaChannelMask;
154167802Sjkim    UINT8                           Flags;
155100966Siwasaki
156151937Sjkim} AML_RESOURCE_DMA;
157100966Siwasaki
158100966Siwasaki
159151937Sjkimtypedef struct aml_resource_start_dependent
160100966Siwasaki{
161151937Sjkim    AML_RESOURCE_SMALL_HEADER_COMMON
162167802Sjkim    UINT8                           Flags;
163100966Siwasaki
164151937Sjkim} AML_RESOURCE_START_DEPENDENT;
165100966Siwasaki
166100966Siwasaki
167151937Sjkimtypedef struct aml_resource_start_dependent_noprio
168100966Siwasaki{
169151937Sjkim    AML_RESOURCE_SMALL_HEADER_COMMON
170100966Siwasaki
171151937Sjkim} AML_RESOURCE_START_DEPENDENT_NOPRIO;
172100966Siwasaki
173100966Siwasaki
174151937Sjkimtypedef struct aml_resource_end_dependent
175100966Siwasaki{
176151937Sjkim    AML_RESOURCE_SMALL_HEADER_COMMON
177100966Siwasaki
178151937Sjkim} AML_RESOURCE_END_DEPENDENT;
179100966Siwasaki
180100966Siwasaki
181151937Sjkimtypedef struct aml_resource_io
182100966Siwasaki{
183151937Sjkim    AML_RESOURCE_SMALL_HEADER_COMMON
184167802Sjkim    UINT8                           Flags;
185167802Sjkim    UINT16                          Minimum;
186167802Sjkim    UINT16                          Maximum;
187167802Sjkim    UINT8                           Alignment;
188167802Sjkim    UINT8                           AddressLength;
189100966Siwasaki
190151937Sjkim} AML_RESOURCE_IO;
191100966Siwasaki
192100966Siwasaki
193151937Sjkimtypedef struct aml_resource_fixed_io
194100966Siwasaki{
195151937Sjkim    AML_RESOURCE_SMALL_HEADER_COMMON
196167802Sjkim    UINT16                          Address;
197167802Sjkim    UINT8                           AddressLength;
198100966Siwasaki
199151937Sjkim} AML_RESOURCE_FIXED_IO;
200100966Siwasaki
201100966Siwasaki
202151937Sjkimtypedef struct aml_resource_vendor_small
203100966Siwasaki{
204151937Sjkim    AML_RESOURCE_SMALL_HEADER_COMMON
205100966Siwasaki
206151937Sjkim} AML_RESOURCE_VENDOR_SMALL;
207100966Siwasaki
208100966Siwasaki
209151937Sjkimtypedef struct aml_resource_end_tag
210100966Siwasaki{
211151937Sjkim    AML_RESOURCE_SMALL_HEADER_COMMON
212167802Sjkim    UINT8                           Checksum;
213100966Siwasaki
214151937Sjkim} AML_RESOURCE_END_TAG;
215100966Siwasaki
216100966Siwasaki
217151937Sjkim/*
218151937Sjkim * LARGE descriptors
219151937Sjkim */
220151937Sjkim#define AML_RESOURCE_LARGE_HEADER_COMMON \
221167802Sjkim    UINT8                           DescriptorType;\
222167802Sjkim    UINT16                          ResourceLength;
223100966Siwasaki
224151937Sjkimtypedef struct aml_resource_large_header
225100966Siwasaki{
226151937Sjkim    AML_RESOURCE_LARGE_HEADER_COMMON
227151937Sjkim
228151937Sjkim} AML_RESOURCE_LARGE_HEADER;
229151937Sjkim
230151937Sjkim
231207344Sjkim/* General Flags for address space resource descriptors */
232207344Sjkim
233207344Sjkim#define ACPI_RESOURCE_FLAG_DEC      2
234207344Sjkim#define ACPI_RESOURCE_FLAG_MIF      4
235207344Sjkim#define ACPI_RESOURCE_FLAG_MAF      8
236207344Sjkim
237151937Sjkimtypedef struct aml_resource_memory24
238151937Sjkim{
239151937Sjkim    AML_RESOURCE_LARGE_HEADER_COMMON
240167802Sjkim    UINT8                           Flags;
241167802Sjkim    UINT16                          Minimum;
242167802Sjkim    UINT16                          Maximum;
243167802Sjkim    UINT16                          Alignment;
244167802Sjkim    UINT16                          AddressLength;
245100966Siwasaki
246151937Sjkim} AML_RESOURCE_MEMORY24;
247100966Siwasaki
248100966Siwasaki
249151937Sjkimtypedef struct aml_resource_vendor_large
250100966Siwasaki{
251151937Sjkim    AML_RESOURCE_LARGE_HEADER_COMMON
252100966Siwasaki
253151937Sjkim} AML_RESOURCE_VENDOR_LARGE;
254100966Siwasaki
255100966Siwasaki
256151937Sjkimtypedef struct aml_resource_memory32
257100966Siwasaki{
258151937Sjkim    AML_RESOURCE_LARGE_HEADER_COMMON
259167802Sjkim    UINT8                           Flags;
260167802Sjkim    UINT32                          Minimum;
261167802Sjkim    UINT32                          Maximum;
262167802Sjkim    UINT32                          Alignment;
263167802Sjkim    UINT32                          AddressLength;
264100966Siwasaki
265151937Sjkim} AML_RESOURCE_MEMORY32;
266100966Siwasaki
267100966Siwasaki
268151937Sjkimtypedef struct aml_resource_fixed_memory32
269100966Siwasaki{
270151937Sjkim    AML_RESOURCE_LARGE_HEADER_COMMON
271167802Sjkim    UINT8                           Flags;
272167802Sjkim    UINT32                          Address;
273167802Sjkim    UINT32                          AddressLength;
274100966Siwasaki
275151937Sjkim} AML_RESOURCE_FIXED_MEMORY32;
276100966Siwasaki
277100966Siwasaki
278151937Sjkim#define AML_RESOURCE_ADDRESS_COMMON \
279167802Sjkim    UINT8                           ResourceType; \
280167802Sjkim    UINT8                           Flags; \
281167802Sjkim    UINT8                           SpecificFlags;
282151937Sjkim
283151937Sjkim
284151937Sjkimtypedef struct aml_resource_address
285100966Siwasaki{
286151937Sjkim    AML_RESOURCE_LARGE_HEADER_COMMON
287151937Sjkim    AML_RESOURCE_ADDRESS_COMMON
288151937Sjkim
289151937Sjkim} AML_RESOURCE_ADDRESS;
290151937Sjkim
291151937Sjkim
292151937Sjkimtypedef struct aml_resource_extended_address64
293151937Sjkim{
294151937Sjkim    AML_RESOURCE_LARGE_HEADER_COMMON
295151937Sjkim    AML_RESOURCE_ADDRESS_COMMON
296167802Sjkim    UINT8                           RevisionID;
297167802Sjkim    UINT8                           Reserved;
298167802Sjkim    UINT64                          Granularity;
299167802Sjkim    UINT64                          Minimum;
300167802Sjkim    UINT64                          Maximum;
301167802Sjkim    UINT64                          TranslationOffset;
302167802Sjkim    UINT64                          AddressLength;
303167802Sjkim    UINT64                          TypeSpecific;
304100966Siwasaki
305151937Sjkim} AML_RESOURCE_EXTENDED_ADDRESS64;
306100966Siwasaki
307151937Sjkim#define AML_RESOURCE_EXTENDED_ADDRESS_REVISION          1       /* ACPI 3.0 */
308100966Siwasaki
309151937Sjkim
310151937Sjkimtypedef struct aml_resource_address64
311100966Siwasaki{
312151937Sjkim    AML_RESOURCE_LARGE_HEADER_COMMON
313151937Sjkim    AML_RESOURCE_ADDRESS_COMMON
314167802Sjkim    UINT64                          Granularity;
315167802Sjkim    UINT64                          Minimum;
316167802Sjkim    UINT64                          Maximum;
317167802Sjkim    UINT64                          TranslationOffset;
318167802Sjkim    UINT64                          AddressLength;
319151937Sjkim
320151937Sjkim} AML_RESOURCE_ADDRESS64;
321151937Sjkim
322151937Sjkim
323151937Sjkimtypedef struct aml_resource_address32
324151937Sjkim{
325151937Sjkim    AML_RESOURCE_LARGE_HEADER_COMMON
326151937Sjkim    AML_RESOURCE_ADDRESS_COMMON
327167802Sjkim    UINT32                          Granularity;
328167802Sjkim    UINT32                          Minimum;
329167802Sjkim    UINT32                          Maximum;
330167802Sjkim    UINT32                          TranslationOffset;
331167802Sjkim    UINT32                          AddressLength;
332100966Siwasaki
333151937Sjkim} AML_RESOURCE_ADDRESS32;
334100966Siwasaki
335100966Siwasaki
336151937Sjkimtypedef struct aml_resource_address16
337100966Siwasaki{
338151937Sjkim    AML_RESOURCE_LARGE_HEADER_COMMON
339151937Sjkim    AML_RESOURCE_ADDRESS_COMMON
340167802Sjkim    UINT16                          Granularity;
341167802Sjkim    UINT16                          Minimum;
342167802Sjkim    UINT16                          Maximum;
343167802Sjkim    UINT16                          TranslationOffset;
344167802Sjkim    UINT16                          AddressLength;
345100966Siwasaki
346151937Sjkim} AML_RESOURCE_ADDRESS16;
347100966Siwasaki
348100966Siwasaki
349151937Sjkimtypedef struct aml_resource_extended_irq
350100966Siwasaki{
351151937Sjkim    AML_RESOURCE_LARGE_HEADER_COMMON
352167802Sjkim    UINT8                           Flags;
353167802Sjkim    UINT8                           InterruptCount;
354167802Sjkim    UINT32                          Interrupts[1];
355100966Siwasaki    /* ResSourceIndex, ResSource optional fields follow */
356100966Siwasaki
357151937Sjkim} AML_RESOURCE_EXTENDED_IRQ;
358100966Siwasaki
359100966Siwasaki
360151937Sjkimtypedef struct aml_resource_generic_register
361100966Siwasaki{
362151937Sjkim    AML_RESOURCE_LARGE_HEADER_COMMON
363167802Sjkim    UINT8                           AddressSpaceId;
364167802Sjkim    UINT8                           BitWidth;
365167802Sjkim    UINT8                           BitOffset;
366167802Sjkim    UINT8                           AccessSize; /* ACPI 3.0, was previously Reserved */
367167802Sjkim    UINT64                          Address;
368100966Siwasaki
369151937Sjkim} AML_RESOURCE_GENERIC_REGISTER;
370100966Siwasaki
371100966Siwasaki/* restore default alignment */
372100966Siwasaki
373100966Siwasaki#pragma pack()
374100966Siwasaki
375138287Smarks/* Union of all resource descriptors, so we can allocate the worst case */
376100966Siwasaki
377151937Sjkimtypedef union aml_resource
378100966Siwasaki{
379151937Sjkim    /* Descriptor headers */
380100966Siwasaki
381167802Sjkim    UINT8                                   DescriptorType;
382167802Sjkim    AML_RESOURCE_SMALL_HEADER               SmallHeader;
383167802Sjkim    AML_RESOURCE_LARGE_HEADER               LargeHeader;
384100966Siwasaki
385151937Sjkim    /* Small resource descriptors */
386100966Siwasaki
387167802Sjkim    AML_RESOURCE_IRQ                        Irq;
388167802Sjkim    AML_RESOURCE_DMA                        Dma;
389167802Sjkim    AML_RESOURCE_START_DEPENDENT            StartDpf;
390167802Sjkim    AML_RESOURCE_END_DEPENDENT              EndDpf;
391167802Sjkim    AML_RESOURCE_IO                         Io;
392167802Sjkim    AML_RESOURCE_FIXED_IO                   FixedIo;
393167802Sjkim    AML_RESOURCE_VENDOR_SMALL               VendorSmall;
394167802Sjkim    AML_RESOURCE_END_TAG                    EndTag;
395100966Siwasaki
396151937Sjkim    /* Large resource descriptors */
397151937Sjkim
398167802Sjkim    AML_RESOURCE_MEMORY24                   Memory24;
399167802Sjkim    AML_RESOURCE_GENERIC_REGISTER           GenericReg;
400167802Sjkim    AML_RESOURCE_VENDOR_LARGE               VendorLarge;
401167802Sjkim    AML_RESOURCE_MEMORY32                   Memory32;
402167802Sjkim    AML_RESOURCE_FIXED_MEMORY32             FixedMemory32;
403167802Sjkim    AML_RESOURCE_ADDRESS16                  Address16;
404167802Sjkim    AML_RESOURCE_ADDRESS32                  Address32;
405167802Sjkim    AML_RESOURCE_ADDRESS64                  Address64;
406167802Sjkim    AML_RESOURCE_EXTENDED_ADDRESS64         ExtAddress64;
407167802Sjkim    AML_RESOURCE_EXTENDED_IRQ               ExtendedIrq;
408151937Sjkim
409151937Sjkim    /* Utility overlays */
410151937Sjkim
411167802Sjkim    AML_RESOURCE_ADDRESS                    Address;
412167802Sjkim    UINT32                                  DwordItem;
413167802Sjkim    UINT16                                  WordItem;
414167802Sjkim    UINT8                                   ByteItem;
415151937Sjkim
416151937Sjkim} AML_RESOURCE;
417151937Sjkim
418100966Siwasaki#endif
419100966Siwasaki
420