amlresrc.h revision 316303
1100966Siwasaki/******************************************************************************
2100966Siwasaki *
3100966Siwasaki * Module Name: amlresrc.h - AML resource descriptors
4100966Siwasaki *
5100966Siwasaki *****************************************************************************/
6100966Siwasaki
7316303Sjkim/******************************************************************************
8316303Sjkim *
9316303Sjkim * 1. Copyright Notice
10316303Sjkim *
11316303Sjkim * Some or all of this work - Copyright (c) 1999 - 2017, Intel Corp.
12100966Siwasaki * All rights reserved.
13100966Siwasaki *
14316303Sjkim * 2. License
15316303Sjkim *
16316303Sjkim * 2.1. This is your license from Intel Corp. under its intellectual property
17316303Sjkim * rights. You may have additional license terms from the party that provided
18316303Sjkim * you this software, covering your right to use that party's intellectual
19316303Sjkim * property rights.
20316303Sjkim *
21316303Sjkim * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a
22316303Sjkim * copy of the source code appearing in this file ("Covered Code") an
23316303Sjkim * irrevocable, perpetual, worldwide license under Intel's copyrights in the
24316303Sjkim * base code distributed originally by Intel ("Original Intel Code") to copy,
25316303Sjkim * make derivatives, distribute, use and display any portion of the Covered
26316303Sjkim * Code in any form, with the right to sublicense such rights; and
27316303Sjkim *
28316303Sjkim * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent
29316303Sjkim * license (with the right to sublicense), under only those claims of Intel
30316303Sjkim * patents that are infringed by the Original Intel Code, to make, use, sell,
31316303Sjkim * offer to sell, and import the Covered Code and derivative works thereof
32316303Sjkim * solely to the minimum extent necessary to exercise the above copyright
33316303Sjkim * license, and in no event shall the patent license extend to any additions
34316303Sjkim * to or modifications of the Original Intel Code. No other license or right
35316303Sjkim * is granted directly or by implication, estoppel or otherwise;
36316303Sjkim *
37316303Sjkim * The above copyright and patent license is granted only if the following
38316303Sjkim * conditions are met:
39316303Sjkim *
40316303Sjkim * 3. Conditions
41316303Sjkim *
42316303Sjkim * 3.1. Redistribution of Source with Rights to Further Distribute Source.
43316303Sjkim * Redistribution of source code of any substantial portion of the Covered
44316303Sjkim * Code or modification with rights to further distribute source must include
45316303Sjkim * the above Copyright Notice, the above License, this list of Conditions,
46316303Sjkim * and the following Disclaimer and Export Compliance provision. In addition,
47316303Sjkim * Licensee must cause all Covered Code to which Licensee contributes to
48316303Sjkim * contain a file documenting the changes Licensee made to create that Covered
49316303Sjkim * Code and the date of any change. Licensee must include in that file the
50316303Sjkim * documentation of any changes made by any predecessor Licensee. Licensee
51316303Sjkim * must include a prominent statement that the modification is derived,
52316303Sjkim * directly or indirectly, from Original Intel Code.
53316303Sjkim *
54316303Sjkim * 3.2. Redistribution of Source with no Rights to Further Distribute Source.
55316303Sjkim * Redistribution of source code of any substantial portion of the Covered
56316303Sjkim * Code or modification without rights to further distribute source must
57316303Sjkim * include the following Disclaimer and Export Compliance provision in the
58316303Sjkim * documentation and/or other materials provided with distribution. In
59316303Sjkim * addition, Licensee may not authorize further sublicense of source of any
60316303Sjkim * portion of the Covered Code, and must include terms to the effect that the
61316303Sjkim * license from Licensee to its licensee is limited to the intellectual
62316303Sjkim * property embodied in the software Licensee provides to its licensee, and
63316303Sjkim * not to intellectual property embodied in modifications its licensee may
64316303Sjkim * make.
65316303Sjkim *
66316303Sjkim * 3.3. Redistribution of Executable. Redistribution in executable form of any
67316303Sjkim * substantial portion of the Covered Code or modification must reproduce the
68316303Sjkim * above Copyright Notice, and the following Disclaimer and Export Compliance
69316303Sjkim * provision in the documentation and/or other materials provided with the
70316303Sjkim * distribution.
71316303Sjkim *
72316303Sjkim * 3.4. Intel retains all right, title, and interest in and to the Original
73316303Sjkim * Intel Code.
74316303Sjkim *
75316303Sjkim * 3.5. Neither the name Intel nor any other trademark owned or controlled by
76316303Sjkim * Intel shall be used in advertising or otherwise to promote the sale, use or
77316303Sjkim * other dealings in products derived from or relating to the Covered Code
78316303Sjkim * without prior written authorization from Intel.
79316303Sjkim *
80316303Sjkim * 4. Disclaimer and Export Compliance
81316303Sjkim *
82316303Sjkim * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED
83316303Sjkim * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE
84316303Sjkim * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE,
85316303Sjkim * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY
86316303Sjkim * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY
87316303Sjkim * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A
88316303Sjkim * PARTICULAR PURPOSE.
89316303Sjkim *
90316303Sjkim * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES
91316303Sjkim * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR
92316303Sjkim * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT,
93316303Sjkim * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY
94316303Sjkim * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL
95316303Sjkim * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS
96316303Sjkim * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY
97316303Sjkim * LIMITED REMEDY.
98316303Sjkim *
99316303Sjkim * 4.3. Licensee shall not export, either directly or indirectly, any of this
100316303Sjkim * software or system incorporating such software without first obtaining any
101316303Sjkim * required license or other approval from the U. S. Department of Commerce or
102316303Sjkim * any other agency or department of the United States Government. In the
103316303Sjkim * event Licensee exports any such software from the United States or
104316303Sjkim * re-exports any such software from a foreign destination, Licensee shall
105316303Sjkim * ensure that the distribution and export/re-export of the software is in
106316303Sjkim * compliance with all laws, regulations, orders, or other restrictions of the
107316303Sjkim * U.S. Export Administration Regulations. Licensee agrees that neither it nor
108316303Sjkim * any of its subsidiaries will export/re-export any technical data, process,
109316303Sjkim * software, or service, directly or indirectly, to any country for which the
110316303Sjkim * United States government or any agency thereof requires an export license,
111316303Sjkim * other governmental approval, or letter of assurance, without first obtaining
112316303Sjkim * such license, approval or letter.
113316303Sjkim *
114316303Sjkim *****************************************************************************
115316303Sjkim *
116316303Sjkim * Alternatively, you may choose to be licensed under the terms of the
117316303Sjkim * following license:
118316303Sjkim *
119217365Sjkim * Redistribution and use in source and binary forms, with or without
120217365Sjkim * modification, are permitted provided that the following conditions
121217365Sjkim * are met:
122217365Sjkim * 1. Redistributions of source code must retain the above copyright
123217365Sjkim *    notice, this list of conditions, and the following disclaimer,
124217365Sjkim *    without modification.
125217365Sjkim * 2. Redistributions in binary form must reproduce at minimum a disclaimer
126217365Sjkim *    substantially similar to the "NO WARRANTY" disclaimer below
127217365Sjkim *    ("Disclaimer") and any redistribution must be conditioned upon
128217365Sjkim *    including a substantially similar Disclaimer requirement for further
129217365Sjkim *    binary redistribution.
130217365Sjkim * 3. Neither the names of the above-listed copyright holders nor the names
131217365Sjkim *    of any contributors may be used to endorse or promote products derived
132217365Sjkim *    from this software without specific prior written permission.
133100966Siwasaki *
134316303Sjkim * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
135316303Sjkim * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
136316303Sjkim * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
137316303Sjkim * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
138316303Sjkim * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
139316303Sjkim * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
140316303Sjkim * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
141316303Sjkim * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
142316303Sjkim * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
143316303Sjkim * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
144316303Sjkim * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
145316303Sjkim *
146316303Sjkim * Alternatively, you may choose to be licensed under the terms of the
147217365Sjkim * GNU General Public License ("GPL") version 2 as published by the Free
148217365Sjkim * Software Foundation.
149100966Siwasaki *
150316303Sjkim *****************************************************************************/
151100966Siwasaki
152167802Sjkim/* acpisrc:StructDefs -- for acpisrc conversion */
153100966Siwasaki
154100966Siwasaki#ifndef __AMLRESRC_H
155100966Siwasaki#define __AMLRESRC_H
156100966Siwasaki
157100966Siwasaki
158167802Sjkim/*
159167802Sjkim * Resource descriptor tags, as defined in the ACPI specification.
160167802Sjkim * Used to symbolically reference fields within a descriptor.
161167802Sjkim */
162167802Sjkim#define ACPI_RESTAG_ADDRESS                     "_ADR"
163167802Sjkim#define ACPI_RESTAG_ALIGNMENT                   "_ALN"
164167802Sjkim#define ACPI_RESTAG_ADDRESSSPACE                "_ASI"
165167802Sjkim#define ACPI_RESTAG_ACCESSSIZE                  "_ASZ"
166167802Sjkim#define ACPI_RESTAG_TYPESPECIFICATTRIBUTES      "_ATT"
167167802Sjkim#define ACPI_RESTAG_BASEADDRESS                 "_BAS"
168167802Sjkim#define ACPI_RESTAG_BUSMASTER                   "_BM_"  /* Master(1), Slave(0) */
169228110Sjkim#define ACPI_RESTAG_DEBOUNCETIME                "_DBT"
170167802Sjkim#define ACPI_RESTAG_DECODE                      "_DEC"
171228110Sjkim#define ACPI_RESTAG_DEVICEPOLARITY              "_DPL"
172167802Sjkim#define ACPI_RESTAG_DMA                         "_DMA"
173167802Sjkim#define ACPI_RESTAG_DMATYPE                     "_TYP"  /* Compatible(0), A(1), B(2), F(3) */
174228110Sjkim#define ACPI_RESTAG_DRIVESTRENGTH               "_DRS"
175228110Sjkim#define ACPI_RESTAG_ENDIANNESS                  "_END"
176228110Sjkim#define ACPI_RESTAG_FLOWCONTROL                 "_FLC"
177167802Sjkim#define ACPI_RESTAG_GRANULARITY                 "_GRA"
178167802Sjkim#define ACPI_RESTAG_INTERRUPT                   "_INT"
179167802Sjkim#define ACPI_RESTAG_INTERRUPTLEVEL              "_LL_"  /* ActiveLo(1), ActiveHi(0) */
180167802Sjkim#define ACPI_RESTAG_INTERRUPTSHARE              "_SHR"  /* Shareable(1), NoShare(0) */
181167802Sjkim#define ACPI_RESTAG_INTERRUPTTYPE               "_HE_"  /* Edge(1), Level(0) */
182228110Sjkim#define ACPI_RESTAG_IORESTRICTION               "_IOR"
183167802Sjkim#define ACPI_RESTAG_LENGTH                      "_LEN"
184228110Sjkim#define ACPI_RESTAG_LINE                        "_LIN"
185167802Sjkim#define ACPI_RESTAG_MEMATTRIBUTES               "_MTP"  /* Memory(0), Reserved(1), ACPI(2), NVS(3) */
186167802Sjkim#define ACPI_RESTAG_MEMTYPE                     "_MEM"  /* NonCache(0), Cacheable(1) Cache+combine(2), Cache+prefetch(3) */
187167802Sjkim#define ACPI_RESTAG_MAXADDR                     "_MAX"
188167802Sjkim#define ACPI_RESTAG_MINADDR                     "_MIN"
189167802Sjkim#define ACPI_RESTAG_MAXTYPE                     "_MAF"
190167802Sjkim#define ACPI_RESTAG_MINTYPE                     "_MIF"
191228110Sjkim#define ACPI_RESTAG_MODE                        "_MOD"
192228110Sjkim#define ACPI_RESTAG_PARITY                      "_PAR"
193228110Sjkim#define ACPI_RESTAG_PHASE                       "_PHA"
194228110Sjkim#define ACPI_RESTAG_PIN                         "_PIN"
195228110Sjkim#define ACPI_RESTAG_PINCONFIG                   "_PPI"
196228110Sjkim#define ACPI_RESTAG_POLARITY                    "_POL"
197167802Sjkim#define ACPI_RESTAG_REGISTERBITOFFSET           "_RBO"
198167802Sjkim#define ACPI_RESTAG_REGISTERBITWIDTH            "_RBW"
199167802Sjkim#define ACPI_RESTAG_RANGETYPE                   "_RNG"
200167802Sjkim#define ACPI_RESTAG_READWRITETYPE               "_RW_"  /* ReadOnly(0), Writeable (1) */
201228110Sjkim#define ACPI_RESTAG_LENGTH_RX                   "_RXL"
202228110Sjkim#define ACPI_RESTAG_LENGTH_TX                   "_TXL"
203228110Sjkim#define ACPI_RESTAG_SLAVEMODE                   "_SLV"
204228110Sjkim#define ACPI_RESTAG_SPEED                       "_SPE"
205228110Sjkim#define ACPI_RESTAG_STOPBITS                    "_STB"
206167802Sjkim#define ACPI_RESTAG_TRANSLATION                 "_TRA"
207167802Sjkim#define ACPI_RESTAG_TRANSTYPE                   "_TRS"  /* Sparse(1), Dense(0) */
208167802Sjkim#define ACPI_RESTAG_TYPE                        "_TTP"  /* Translation(1), Static (0) */
209167802Sjkim#define ACPI_RESTAG_XFERTYPE                    "_SIZ"  /* 8(0), 8And16(1), 16(2) */
210228110Sjkim#define ACPI_RESTAG_VENDORDATA                  "_VEN"
211100966Siwasaki
212100966Siwasaki
213100966Siwasaki/* Default sizes for "small" resource descriptors */
214100966Siwasaki
215100966Siwasaki#define ASL_RDESC_IRQ_SIZE                      0x02
216100966Siwasaki#define ASL_RDESC_DMA_SIZE                      0x02
217100966Siwasaki#define ASL_RDESC_ST_DEPEND_SIZE                0x00
218100966Siwasaki#define ASL_RDESC_END_DEPEND_SIZE               0x00
219100966Siwasaki#define ASL_RDESC_IO_SIZE                       0x07
220100966Siwasaki#define ASL_RDESC_FIXED_IO_SIZE                 0x03
221228110Sjkim#define ASL_RDESC_FIXED_DMA_SIZE                0x05
222100966Siwasaki#define ASL_RDESC_END_TAG_SIZE                  0x01
223100966Siwasaki
224100966Siwasaki
225100966Siwasakitypedef struct asl_resource_node
226100966Siwasaki{
227167802Sjkim    UINT32                          BufferLength;
228167802Sjkim    void                            *Buffer;
229167802Sjkim    struct asl_resource_node        *Next;
230100966Siwasaki
231100966Siwasaki} ASL_RESOURCE_NODE;
232100966Siwasaki
233272444Sjkimtypedef struct asl_resource_info
234272444Sjkim{
235272444Sjkim    ACPI_PARSE_OBJECT               *DescriptorTypeOp;  /* Resource descriptor parse node */
236272444Sjkim    ACPI_PARSE_OBJECT               *MappingOp;         /* Used for mapfile support */
237272444Sjkim    UINT32                          CurrentByteOffset;  /* Offset in resource template */
238100966Siwasaki
239272444Sjkim} ASL_RESOURCE_INFO;
240272444Sjkim
241272444Sjkim
242167802Sjkim/* Macros used to generate AML resource length fields */
243167802Sjkim
244167802Sjkim#define ACPI_AML_SIZE_LARGE(r)      (sizeof (r) - sizeof (AML_RESOURCE_LARGE_HEADER))
245167802Sjkim#define ACPI_AML_SIZE_SMALL(r)      (sizeof (r) - sizeof (AML_RESOURCE_SMALL_HEADER))
246167802Sjkim
247100966Siwasaki/*
248100966Siwasaki * Resource descriptors defined in the ACPI specification.
249100966Siwasaki *
250138287Smarks * Packing/alignment must be BYTE because these descriptors
251151937Sjkim * are used to overlay the raw AML byte stream.
252100966Siwasaki */
253100966Siwasaki#pragma pack(1)
254100966Siwasaki
255151937Sjkim/*
256151937Sjkim * SMALL descriptors
257151937Sjkim */
258151937Sjkim#define AML_RESOURCE_SMALL_HEADER_COMMON \
259167802Sjkim    UINT8                           DescriptorType;
260151937Sjkim
261151937Sjkimtypedef struct aml_resource_small_header
262100966Siwasaki{
263151937Sjkim    AML_RESOURCE_SMALL_HEADER_COMMON
264151937Sjkim
265151937Sjkim} AML_RESOURCE_SMALL_HEADER;
266151937Sjkim
267151937Sjkim
268151937Sjkimtypedef struct aml_resource_irq
269151937Sjkim{
270151937Sjkim    AML_RESOURCE_SMALL_HEADER_COMMON
271167802Sjkim    UINT16                          IrqMask;
272167802Sjkim    UINT8                           Flags;
273100966Siwasaki
274151937Sjkim} AML_RESOURCE_IRQ;
275100966Siwasaki
276100966Siwasaki
277151937Sjkimtypedef struct aml_resource_irq_noflags
278100966Siwasaki{
279151937Sjkim    AML_RESOURCE_SMALL_HEADER_COMMON
280167802Sjkim    UINT16                          IrqMask;
281100966Siwasaki
282151937Sjkim} AML_RESOURCE_IRQ_NOFLAGS;
283100966Siwasaki
284100966Siwasaki
285151937Sjkimtypedef struct aml_resource_dma
286100966Siwasaki{
287151937Sjkim    AML_RESOURCE_SMALL_HEADER_COMMON
288167802Sjkim    UINT8                           DmaChannelMask;
289167802Sjkim    UINT8                           Flags;
290100966Siwasaki
291151937Sjkim} AML_RESOURCE_DMA;
292100966Siwasaki
293100966Siwasaki
294151937Sjkimtypedef struct aml_resource_start_dependent
295100966Siwasaki{
296151937Sjkim    AML_RESOURCE_SMALL_HEADER_COMMON
297167802Sjkim    UINT8                           Flags;
298100966Siwasaki
299151937Sjkim} AML_RESOURCE_START_DEPENDENT;
300100966Siwasaki
301100966Siwasaki
302151937Sjkimtypedef struct aml_resource_start_dependent_noprio
303100966Siwasaki{
304151937Sjkim    AML_RESOURCE_SMALL_HEADER_COMMON
305100966Siwasaki
306151937Sjkim} AML_RESOURCE_START_DEPENDENT_NOPRIO;
307100966Siwasaki
308100966Siwasaki
309151937Sjkimtypedef struct aml_resource_end_dependent
310100966Siwasaki{
311151937Sjkim    AML_RESOURCE_SMALL_HEADER_COMMON
312100966Siwasaki
313151937Sjkim} AML_RESOURCE_END_DEPENDENT;
314100966Siwasaki
315100966Siwasaki
316151937Sjkimtypedef struct aml_resource_io
317100966Siwasaki{
318151937Sjkim    AML_RESOURCE_SMALL_HEADER_COMMON
319167802Sjkim    UINT8                           Flags;
320167802Sjkim    UINT16                          Minimum;
321167802Sjkim    UINT16                          Maximum;
322167802Sjkim    UINT8                           Alignment;
323167802Sjkim    UINT8                           AddressLength;
324100966Siwasaki
325151937Sjkim} AML_RESOURCE_IO;
326100966Siwasaki
327100966Siwasaki
328151937Sjkimtypedef struct aml_resource_fixed_io
329100966Siwasaki{
330151937Sjkim    AML_RESOURCE_SMALL_HEADER_COMMON
331167802Sjkim    UINT16                          Address;
332167802Sjkim    UINT8                           AddressLength;
333100966Siwasaki
334151937Sjkim} AML_RESOURCE_FIXED_IO;
335100966Siwasaki
336100966Siwasaki
337151937Sjkimtypedef struct aml_resource_vendor_small
338100966Siwasaki{
339151937Sjkim    AML_RESOURCE_SMALL_HEADER_COMMON
340100966Siwasaki
341151937Sjkim} AML_RESOURCE_VENDOR_SMALL;
342100966Siwasaki
343100966Siwasaki
344151937Sjkimtypedef struct aml_resource_end_tag
345100966Siwasaki{
346151937Sjkim    AML_RESOURCE_SMALL_HEADER_COMMON
347167802Sjkim    UINT8                           Checksum;
348100966Siwasaki
349151937Sjkim} AML_RESOURCE_END_TAG;
350100966Siwasaki
351100966Siwasaki
352228110Sjkimtypedef struct aml_resource_fixed_dma
353228110Sjkim{
354228110Sjkim    AML_RESOURCE_SMALL_HEADER_COMMON
355228110Sjkim    UINT16                          RequestLines;
356228110Sjkim    UINT16                          Channels;
357228110Sjkim    UINT8                           Width;
358228110Sjkim
359228110Sjkim} AML_RESOURCE_FIXED_DMA;
360228110Sjkim
361228110Sjkim
362151937Sjkim/*
363151937Sjkim * LARGE descriptors
364151937Sjkim */
365151937Sjkim#define AML_RESOURCE_LARGE_HEADER_COMMON \
366167802Sjkim    UINT8                           DescriptorType;\
367167802Sjkim    UINT16                          ResourceLength;
368100966Siwasaki
369151937Sjkimtypedef struct aml_resource_large_header
370100966Siwasaki{
371151937Sjkim    AML_RESOURCE_LARGE_HEADER_COMMON
372151937Sjkim
373151937Sjkim} AML_RESOURCE_LARGE_HEADER;
374151937Sjkim
375151937Sjkim
376207344Sjkim/* General Flags for address space resource descriptors */
377207344Sjkim
378207344Sjkim#define ACPI_RESOURCE_FLAG_DEC      2
379207344Sjkim#define ACPI_RESOURCE_FLAG_MIF      4
380207344Sjkim#define ACPI_RESOURCE_FLAG_MAF      8
381207344Sjkim
382151937Sjkimtypedef struct aml_resource_memory24
383151937Sjkim{
384151937Sjkim    AML_RESOURCE_LARGE_HEADER_COMMON
385167802Sjkim    UINT8                           Flags;
386167802Sjkim    UINT16                          Minimum;
387167802Sjkim    UINT16                          Maximum;
388167802Sjkim    UINT16                          Alignment;
389167802Sjkim    UINT16                          AddressLength;
390100966Siwasaki
391151937Sjkim} AML_RESOURCE_MEMORY24;
392100966Siwasaki
393100966Siwasaki
394151937Sjkimtypedef struct aml_resource_vendor_large
395100966Siwasaki{
396151937Sjkim    AML_RESOURCE_LARGE_HEADER_COMMON
397100966Siwasaki
398151937Sjkim} AML_RESOURCE_VENDOR_LARGE;
399100966Siwasaki
400100966Siwasaki
401151937Sjkimtypedef struct aml_resource_memory32
402100966Siwasaki{
403151937Sjkim    AML_RESOURCE_LARGE_HEADER_COMMON
404167802Sjkim    UINT8                           Flags;
405167802Sjkim    UINT32                          Minimum;
406167802Sjkim    UINT32                          Maximum;
407167802Sjkim    UINT32                          Alignment;
408167802Sjkim    UINT32                          AddressLength;
409100966Siwasaki
410151937Sjkim} AML_RESOURCE_MEMORY32;
411100966Siwasaki
412100966Siwasaki
413151937Sjkimtypedef struct aml_resource_fixed_memory32
414100966Siwasaki{
415151937Sjkim    AML_RESOURCE_LARGE_HEADER_COMMON
416167802Sjkim    UINT8                           Flags;
417167802Sjkim    UINT32                          Address;
418167802Sjkim    UINT32                          AddressLength;
419100966Siwasaki
420151937Sjkim} AML_RESOURCE_FIXED_MEMORY32;
421100966Siwasaki
422100966Siwasaki
423151937Sjkim#define AML_RESOURCE_ADDRESS_COMMON \
424167802Sjkim    UINT8                           ResourceType; \
425167802Sjkim    UINT8                           Flags; \
426167802Sjkim    UINT8                           SpecificFlags;
427151937Sjkim
428151937Sjkim
429151937Sjkimtypedef struct aml_resource_address
430100966Siwasaki{
431151937Sjkim    AML_RESOURCE_LARGE_HEADER_COMMON
432151937Sjkim    AML_RESOURCE_ADDRESS_COMMON
433151937Sjkim
434151937Sjkim} AML_RESOURCE_ADDRESS;
435151937Sjkim
436151937Sjkim
437151937Sjkimtypedef struct aml_resource_extended_address64
438151937Sjkim{
439151937Sjkim    AML_RESOURCE_LARGE_HEADER_COMMON
440151937Sjkim    AML_RESOURCE_ADDRESS_COMMON
441167802Sjkim    UINT8                           RevisionID;
442167802Sjkim    UINT8                           Reserved;
443167802Sjkim    UINT64                          Granularity;
444167802Sjkim    UINT64                          Minimum;
445167802Sjkim    UINT64                          Maximum;
446167802Sjkim    UINT64                          TranslationOffset;
447167802Sjkim    UINT64                          AddressLength;
448167802Sjkim    UINT64                          TypeSpecific;
449100966Siwasaki
450151937Sjkim} AML_RESOURCE_EXTENDED_ADDRESS64;
451100966Siwasaki
452151937Sjkim#define AML_RESOURCE_EXTENDED_ADDRESS_REVISION          1       /* ACPI 3.0 */
453100966Siwasaki
454151937Sjkim
455151937Sjkimtypedef struct aml_resource_address64
456100966Siwasaki{
457151937Sjkim    AML_RESOURCE_LARGE_HEADER_COMMON
458151937Sjkim    AML_RESOURCE_ADDRESS_COMMON
459167802Sjkim    UINT64                          Granularity;
460167802Sjkim    UINT64                          Minimum;
461167802Sjkim    UINT64                          Maximum;
462167802Sjkim    UINT64                          TranslationOffset;
463167802Sjkim    UINT64                          AddressLength;
464151937Sjkim
465151937Sjkim} AML_RESOURCE_ADDRESS64;
466151937Sjkim
467151937Sjkim
468151937Sjkimtypedef struct aml_resource_address32
469151937Sjkim{
470151937Sjkim    AML_RESOURCE_LARGE_HEADER_COMMON
471151937Sjkim    AML_RESOURCE_ADDRESS_COMMON
472167802Sjkim    UINT32                          Granularity;
473167802Sjkim    UINT32                          Minimum;
474167802Sjkim    UINT32                          Maximum;
475167802Sjkim    UINT32                          TranslationOffset;
476167802Sjkim    UINT32                          AddressLength;
477100966Siwasaki
478151937Sjkim} AML_RESOURCE_ADDRESS32;
479100966Siwasaki
480100966Siwasaki
481151937Sjkimtypedef struct aml_resource_address16
482100966Siwasaki{
483151937Sjkim    AML_RESOURCE_LARGE_HEADER_COMMON
484151937Sjkim    AML_RESOURCE_ADDRESS_COMMON
485167802Sjkim    UINT16                          Granularity;
486167802Sjkim    UINT16                          Minimum;
487167802Sjkim    UINT16                          Maximum;
488167802Sjkim    UINT16                          TranslationOffset;
489167802Sjkim    UINT16                          AddressLength;
490100966Siwasaki
491151937Sjkim} AML_RESOURCE_ADDRESS16;
492100966Siwasaki
493100966Siwasaki
494151937Sjkimtypedef struct aml_resource_extended_irq
495100966Siwasaki{
496151937Sjkim    AML_RESOURCE_LARGE_HEADER_COMMON
497167802Sjkim    UINT8                           Flags;
498167802Sjkim    UINT8                           InterruptCount;
499167802Sjkim    UINT32                          Interrupts[1];
500100966Siwasaki    /* ResSourceIndex, ResSource optional fields follow */
501100966Siwasaki
502151937Sjkim} AML_RESOURCE_EXTENDED_IRQ;
503100966Siwasaki
504100966Siwasaki
505151937Sjkimtypedef struct aml_resource_generic_register
506100966Siwasaki{
507151937Sjkim    AML_RESOURCE_LARGE_HEADER_COMMON
508167802Sjkim    UINT8                           AddressSpaceId;
509167802Sjkim    UINT8                           BitWidth;
510167802Sjkim    UINT8                           BitOffset;
511167802Sjkim    UINT8                           AccessSize; /* ACPI 3.0, was previously Reserved */
512167802Sjkim    UINT64                          Address;
513100966Siwasaki
514151937Sjkim} AML_RESOURCE_GENERIC_REGISTER;
515100966Siwasaki
516228110Sjkim
517228110Sjkim/* Common descriptor for GpioInt and GpioIo (ACPI 5.0) */
518228110Sjkim
519228110Sjkimtypedef struct aml_resource_gpio
520228110Sjkim{
521228110Sjkim    AML_RESOURCE_LARGE_HEADER_COMMON
522228110Sjkim    UINT8                           RevisionId;
523228110Sjkim    UINT8                           ConnectionType;
524228110Sjkim    UINT16                          Flags;
525228110Sjkim    UINT16                          IntFlags;
526228110Sjkim    UINT8                           PinConfig;
527228110Sjkim    UINT16                          DriveStrength;
528228110Sjkim    UINT16                          DebounceTimeout;
529228110Sjkim    UINT16                          PinTableOffset;
530228110Sjkim    UINT8                           ResSourceIndex;
531228110Sjkim    UINT16                          ResSourceOffset;
532228110Sjkim    UINT16                          VendorOffset;
533228110Sjkim    UINT16                          VendorLength;
534228110Sjkim    /*
535228110Sjkim     * Optional fields follow immediately:
536228110Sjkim     * 1) PIN list (Words)
537228110Sjkim     * 2) Resource Source String
538228110Sjkim     * 3) Vendor Data bytes
539228110Sjkim     */
540228110Sjkim
541228110Sjkim} AML_RESOURCE_GPIO;
542228110Sjkim
543228110Sjkim#define AML_RESOURCE_GPIO_REVISION              1       /* ACPI 5.0 */
544228110Sjkim
545228110Sjkim/* Values for ConnectionType above */
546228110Sjkim
547228110Sjkim#define AML_RESOURCE_GPIO_TYPE_INT              0
548228110Sjkim#define AML_RESOURCE_GPIO_TYPE_IO               1
549228110Sjkim#define AML_RESOURCE_MAX_GPIOTYPE               1
550228110Sjkim
551228110Sjkim
552228110Sjkim/* Common preamble for all serial descriptors (ACPI 5.0) */
553228110Sjkim
554228110Sjkim#define AML_RESOURCE_SERIAL_COMMON \
555228110Sjkim    UINT8                           RevisionId; \
556228110Sjkim    UINT8                           ResSourceIndex; \
557228110Sjkim    UINT8                           Type; \
558228110Sjkim    UINT8                           Flags; \
559228110Sjkim    UINT16                          TypeSpecificFlags; \
560228110Sjkim    UINT8                           TypeRevisionId; \
561228110Sjkim    UINT16                          TypeDataLength; \
562228110Sjkim
563228110Sjkim/* Values for the type field above */
564228110Sjkim
565228110Sjkim#define AML_RESOURCE_I2C_SERIALBUSTYPE          1
566228110Sjkim#define AML_RESOURCE_SPI_SERIALBUSTYPE          2
567228110Sjkim#define AML_RESOURCE_UART_SERIALBUSTYPE         3
568228110Sjkim#define AML_RESOURCE_MAX_SERIALBUSTYPE          3
569228110Sjkim#define AML_RESOURCE_VENDOR_SERIALBUSTYPE       192 /* Vendor defined is 0xC0-0xFF (NOT SUPPORTED) */
570228110Sjkim
571228110Sjkimtypedef struct aml_resource_common_serialbus
572228110Sjkim{
573228110Sjkim    AML_RESOURCE_LARGE_HEADER_COMMON
574228110Sjkim    AML_RESOURCE_SERIAL_COMMON
575228110Sjkim
576228110Sjkim} AML_RESOURCE_COMMON_SERIALBUS;
577228110Sjkim
578228110Sjkimtypedef struct aml_resource_i2c_serialbus
579228110Sjkim{
580228110Sjkim    AML_RESOURCE_LARGE_HEADER_COMMON
581228110Sjkim    AML_RESOURCE_SERIAL_COMMON
582228110Sjkim    UINT32                          ConnectionSpeed;
583228110Sjkim    UINT16                          SlaveAddress;
584228110Sjkim    /*
585228110Sjkim     * Optional fields follow immediately:
586228110Sjkim     * 1) Vendor Data bytes
587228110Sjkim     * 2) Resource Source String
588228110Sjkim     */
589228110Sjkim
590228110Sjkim} AML_RESOURCE_I2C_SERIALBUS;
591228110Sjkim
592228110Sjkim#define AML_RESOURCE_I2C_REVISION               1       /* ACPI 5.0 */
593228110Sjkim#define AML_RESOURCE_I2C_TYPE_REVISION          1       /* ACPI 5.0 */
594228110Sjkim#define AML_RESOURCE_I2C_MIN_DATA_LEN           6
595228110Sjkim
596228110Sjkimtypedef struct aml_resource_spi_serialbus
597228110Sjkim{
598228110Sjkim    AML_RESOURCE_LARGE_HEADER_COMMON
599228110Sjkim    AML_RESOURCE_SERIAL_COMMON
600228110Sjkim    UINT32                          ConnectionSpeed;
601228110Sjkim    UINT8                           DataBitLength;
602228110Sjkim    UINT8                           ClockPhase;
603228110Sjkim    UINT8                           ClockPolarity;
604228110Sjkim    UINT16                          DeviceSelection;
605228110Sjkim    /*
606228110Sjkim     * Optional fields follow immediately:
607228110Sjkim     * 1) Vendor Data bytes
608228110Sjkim     * 2) Resource Source String
609228110Sjkim     */
610228110Sjkim
611228110Sjkim} AML_RESOURCE_SPI_SERIALBUS;
612228110Sjkim
613228110Sjkim#define AML_RESOURCE_SPI_REVISION               1       /* ACPI 5.0 */
614228110Sjkim#define AML_RESOURCE_SPI_TYPE_REVISION          1       /* ACPI 5.0 */
615228110Sjkim#define AML_RESOURCE_SPI_MIN_DATA_LEN           9
616228110Sjkim
617228110Sjkim
618228110Sjkimtypedef struct aml_resource_uart_serialbus
619228110Sjkim{
620228110Sjkim    AML_RESOURCE_LARGE_HEADER_COMMON
621228110Sjkim    AML_RESOURCE_SERIAL_COMMON
622228110Sjkim    UINT32                          DefaultBaudRate;
623228110Sjkim    UINT16                          RxFifoSize;
624228110Sjkim    UINT16                          TxFifoSize;
625228110Sjkim    UINT8                           Parity;
626228110Sjkim    UINT8                           LinesEnabled;
627228110Sjkim    /*
628228110Sjkim     * Optional fields follow immediately:
629228110Sjkim     * 1) Vendor Data bytes
630228110Sjkim     * 2) Resource Source String
631228110Sjkim     */
632228110Sjkim
633228110Sjkim} AML_RESOURCE_UART_SERIALBUS;
634228110Sjkim
635228110Sjkim#define AML_RESOURCE_UART_REVISION              1       /* ACPI 5.0 */
636228110Sjkim#define AML_RESOURCE_UART_TYPE_REVISION         1       /* ACPI 5.0 */
637228110Sjkim#define AML_RESOURCE_UART_MIN_DATA_LEN          10
638228110Sjkim
639228110Sjkim
640100966Siwasaki/* restore default alignment */
641100966Siwasaki
642100966Siwasaki#pragma pack()
643100966Siwasaki
644138287Smarks/* Union of all resource descriptors, so we can allocate the worst case */
645100966Siwasaki
646151937Sjkimtypedef union aml_resource
647100966Siwasaki{
648151937Sjkim    /* Descriptor headers */
649100966Siwasaki
650167802Sjkim    UINT8                                   DescriptorType;
651167802Sjkim    AML_RESOURCE_SMALL_HEADER               SmallHeader;
652167802Sjkim    AML_RESOURCE_LARGE_HEADER               LargeHeader;
653100966Siwasaki
654151937Sjkim    /* Small resource descriptors */
655100966Siwasaki
656167802Sjkim    AML_RESOURCE_IRQ                        Irq;
657167802Sjkim    AML_RESOURCE_DMA                        Dma;
658167802Sjkim    AML_RESOURCE_START_DEPENDENT            StartDpf;
659167802Sjkim    AML_RESOURCE_END_DEPENDENT              EndDpf;
660167802Sjkim    AML_RESOURCE_IO                         Io;
661167802Sjkim    AML_RESOURCE_FIXED_IO                   FixedIo;
662228110Sjkim    AML_RESOURCE_FIXED_DMA                  FixedDma;
663167802Sjkim    AML_RESOURCE_VENDOR_SMALL               VendorSmall;
664167802Sjkim    AML_RESOURCE_END_TAG                    EndTag;
665100966Siwasaki
666151937Sjkim    /* Large resource descriptors */
667151937Sjkim
668167802Sjkim    AML_RESOURCE_MEMORY24                   Memory24;
669167802Sjkim    AML_RESOURCE_GENERIC_REGISTER           GenericReg;
670167802Sjkim    AML_RESOURCE_VENDOR_LARGE               VendorLarge;
671167802Sjkim    AML_RESOURCE_MEMORY32                   Memory32;
672167802Sjkim    AML_RESOURCE_FIXED_MEMORY32             FixedMemory32;
673167802Sjkim    AML_RESOURCE_ADDRESS16                  Address16;
674167802Sjkim    AML_RESOURCE_ADDRESS32                  Address32;
675167802Sjkim    AML_RESOURCE_ADDRESS64                  Address64;
676167802Sjkim    AML_RESOURCE_EXTENDED_ADDRESS64         ExtAddress64;
677167802Sjkim    AML_RESOURCE_EXTENDED_IRQ               ExtendedIrq;
678228110Sjkim    AML_RESOURCE_GPIO                       Gpio;
679228110Sjkim    AML_RESOURCE_I2C_SERIALBUS              I2cSerialBus;
680228110Sjkim    AML_RESOURCE_SPI_SERIALBUS              SpiSerialBus;
681228110Sjkim    AML_RESOURCE_UART_SERIALBUS             UartSerialBus;
682228110Sjkim    AML_RESOURCE_COMMON_SERIALBUS           CommonSerialBus;
683151937Sjkim
684151937Sjkim    /* Utility overlays */
685151937Sjkim
686167802Sjkim    AML_RESOURCE_ADDRESS                    Address;
687167802Sjkim    UINT32                                  DwordItem;
688167802Sjkim    UINT16                                  WordItem;
689167802Sjkim    UINT8                                   ByteItem;
690151937Sjkim
691151937Sjkim} AML_RESOURCE;
692151937Sjkim
693272444Sjkim
694272444Sjkim/* Interfaces used by both the disassembler and compiler */
695272444Sjkim
696272444Sjkimvoid
697272444SjkimMpSaveGpioInfo (
698272444Sjkim    ACPI_PARSE_OBJECT       *Op,
699272444Sjkim    AML_RESOURCE            *Resource,
700272444Sjkim    UINT32                  PinCount,
701272444Sjkim    UINT16                  *PinList,
702272444Sjkim    char                    *DeviceName);
703272444Sjkim
704272444Sjkimvoid
705272444SjkimMpSaveSerialInfo (
706272444Sjkim    ACPI_PARSE_OBJECT       *Op,
707272444Sjkim    AML_RESOURCE            *Resource,
708272444Sjkim    char                    *DeviceName);
709272444Sjkim
710272444Sjkimchar *
711272444SjkimMpGetHidFromParseTree (
712272444Sjkim    ACPI_NAMESPACE_NODE     *HidNode);
713272444Sjkim
714272444Sjkimchar *
715272444SjkimMpGetHidViaNamestring (
716272444Sjkim    char                    *DeviceName);
717272444Sjkim
718272444Sjkimchar *
719272444SjkimMpGetConnectionInfo (
720272444Sjkim    ACPI_PARSE_OBJECT       *Op,
721272444Sjkim    UINT32                  PinIndex,
722272444Sjkim    ACPI_NAMESPACE_NODE     **TargetNode,
723272444Sjkim    char                    **TargetName);
724272444Sjkim
725272444Sjkimchar *
726272444SjkimMpGetParentDeviceHid (
727272444Sjkim    ACPI_PARSE_OBJECT       *Op,
728272444Sjkim    ACPI_NAMESPACE_NODE     **TargetNode,
729272444Sjkim    char                    **ParentDeviceName);
730272444Sjkim
731272444Sjkimchar *
732272444SjkimMpGetDdnValue (
733272444Sjkim    char                    *DeviceName);
734272444Sjkim
735272444Sjkimchar *
736272444SjkimMpGetHidValue (
737272444Sjkim    ACPI_NAMESPACE_NODE     *DeviceNode);
738272444Sjkim
739100966Siwasaki#endif
740