1100966Siwasaki/******************************************************************************
2100966Siwasaki *
3100966Siwasaki * Module Name: amlresrc.h - AML resource descriptors
4100966Siwasaki *
5100966Siwasaki *****************************************************************************/
6100966Siwasaki
7217365Sjkim/*
8306536Sjkim * Copyright (C) 2000 - 2016, Intel Corp.
9100966Siwasaki * All rights reserved.
10100966Siwasaki *
11217365Sjkim * Redistribution and use in source and binary forms, with or without
12217365Sjkim * modification, are permitted provided that the following conditions
13217365Sjkim * are met:
14217365Sjkim * 1. Redistributions of source code must retain the above copyright
15217365Sjkim *    notice, this list of conditions, and the following disclaimer,
16217365Sjkim *    without modification.
17217365Sjkim * 2. Redistributions in binary form must reproduce at minimum a disclaimer
18217365Sjkim *    substantially similar to the "NO WARRANTY" disclaimer below
19217365Sjkim *    ("Disclaimer") and any redistribution must be conditioned upon
20217365Sjkim *    including a substantially similar Disclaimer requirement for further
21217365Sjkim *    binary redistribution.
22217365Sjkim * 3. Neither the names of the above-listed copyright holders nor the names
23217365Sjkim *    of any contributors may be used to endorse or promote products derived
24217365Sjkim *    from this software without specific prior written permission.
25100966Siwasaki *
26217365Sjkim * Alternatively, this software may be distributed under the terms of the
27217365Sjkim * GNU General Public License ("GPL") version 2 as published by the Free
28217365Sjkim * Software Foundation.
29100966Siwasaki *
30217365Sjkim * NO WARRANTY
31217365Sjkim * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
32217365Sjkim * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
33217365Sjkim * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
34217365Sjkim * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
35217365Sjkim * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
36217365Sjkim * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
37217365Sjkim * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
38217365Sjkim * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
39217365Sjkim * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
40217365Sjkim * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
41217365Sjkim * POSSIBILITY OF SUCH DAMAGES.
42217365Sjkim */
43100966Siwasaki
44167802Sjkim/* acpisrc:StructDefs -- for acpisrc conversion */
45100966Siwasaki
46100966Siwasaki#ifndef __AMLRESRC_H
47100966Siwasaki#define __AMLRESRC_H
48100966Siwasaki
49100966Siwasaki
50167802Sjkim/*
51167802Sjkim * Resource descriptor tags, as defined in the ACPI specification.
52167802Sjkim * Used to symbolically reference fields within a descriptor.
53167802Sjkim */
54167802Sjkim#define ACPI_RESTAG_ADDRESS                     "_ADR"
55167802Sjkim#define ACPI_RESTAG_ALIGNMENT                   "_ALN"
56167802Sjkim#define ACPI_RESTAG_ADDRESSSPACE                "_ASI"
57167802Sjkim#define ACPI_RESTAG_ACCESSSIZE                  "_ASZ"
58167802Sjkim#define ACPI_RESTAG_TYPESPECIFICATTRIBUTES      "_ATT"
59167802Sjkim#define ACPI_RESTAG_BASEADDRESS                 "_BAS"
60167802Sjkim#define ACPI_RESTAG_BUSMASTER                   "_BM_"  /* Master(1), Slave(0) */
61228110Sjkim#define ACPI_RESTAG_DEBOUNCETIME                "_DBT"
62167802Sjkim#define ACPI_RESTAG_DECODE                      "_DEC"
63228110Sjkim#define ACPI_RESTAG_DEVICEPOLARITY              "_DPL"
64167802Sjkim#define ACPI_RESTAG_DMA                         "_DMA"
65167802Sjkim#define ACPI_RESTAG_DMATYPE                     "_TYP"  /* Compatible(0), A(1), B(2), F(3) */
66228110Sjkim#define ACPI_RESTAG_DRIVESTRENGTH               "_DRS"
67228110Sjkim#define ACPI_RESTAG_ENDIANNESS                  "_END"
68228110Sjkim#define ACPI_RESTAG_FLOWCONTROL                 "_FLC"
69167802Sjkim#define ACPI_RESTAG_GRANULARITY                 "_GRA"
70167802Sjkim#define ACPI_RESTAG_INTERRUPT                   "_INT"
71167802Sjkim#define ACPI_RESTAG_INTERRUPTLEVEL              "_LL_"  /* ActiveLo(1), ActiveHi(0) */
72167802Sjkim#define ACPI_RESTAG_INTERRUPTSHARE              "_SHR"  /* Shareable(1), NoShare(0) */
73167802Sjkim#define ACPI_RESTAG_INTERRUPTTYPE               "_HE_"  /* Edge(1), Level(0) */
74228110Sjkim#define ACPI_RESTAG_IORESTRICTION               "_IOR"
75167802Sjkim#define ACPI_RESTAG_LENGTH                      "_LEN"
76228110Sjkim#define ACPI_RESTAG_LINE                        "_LIN"
77167802Sjkim#define ACPI_RESTAG_MEMATTRIBUTES               "_MTP"  /* Memory(0), Reserved(1), ACPI(2), NVS(3) */
78167802Sjkim#define ACPI_RESTAG_MEMTYPE                     "_MEM"  /* NonCache(0), Cacheable(1) Cache+combine(2), Cache+prefetch(3) */
79167802Sjkim#define ACPI_RESTAG_MAXADDR                     "_MAX"
80167802Sjkim#define ACPI_RESTAG_MINADDR                     "_MIN"
81167802Sjkim#define ACPI_RESTAG_MAXTYPE                     "_MAF"
82167802Sjkim#define ACPI_RESTAG_MINTYPE                     "_MIF"
83228110Sjkim#define ACPI_RESTAG_MODE                        "_MOD"
84228110Sjkim#define ACPI_RESTAG_PARITY                      "_PAR"
85228110Sjkim#define ACPI_RESTAG_PHASE                       "_PHA"
86228110Sjkim#define ACPI_RESTAG_PIN                         "_PIN"
87228110Sjkim#define ACPI_RESTAG_PINCONFIG                   "_PPI"
88228110Sjkim#define ACPI_RESTAG_POLARITY                    "_POL"
89167802Sjkim#define ACPI_RESTAG_REGISTERBITOFFSET           "_RBO"
90167802Sjkim#define ACPI_RESTAG_REGISTERBITWIDTH            "_RBW"
91167802Sjkim#define ACPI_RESTAG_RANGETYPE                   "_RNG"
92167802Sjkim#define ACPI_RESTAG_READWRITETYPE               "_RW_"  /* ReadOnly(0), Writeable (1) */
93228110Sjkim#define ACPI_RESTAG_LENGTH_RX                   "_RXL"
94228110Sjkim#define ACPI_RESTAG_LENGTH_TX                   "_TXL"
95228110Sjkim#define ACPI_RESTAG_SLAVEMODE                   "_SLV"
96228110Sjkim#define ACPI_RESTAG_SPEED                       "_SPE"
97228110Sjkim#define ACPI_RESTAG_STOPBITS                    "_STB"
98167802Sjkim#define ACPI_RESTAG_TRANSLATION                 "_TRA"
99167802Sjkim#define ACPI_RESTAG_TRANSTYPE                   "_TRS"  /* Sparse(1), Dense(0) */
100167802Sjkim#define ACPI_RESTAG_TYPE                        "_TTP"  /* Translation(1), Static (0) */
101167802Sjkim#define ACPI_RESTAG_XFERTYPE                    "_SIZ"  /* 8(0), 8And16(1), 16(2) */
102228110Sjkim#define ACPI_RESTAG_VENDORDATA                  "_VEN"
103100966Siwasaki
104100966Siwasaki
105100966Siwasaki/* Default sizes for "small" resource descriptors */
106100966Siwasaki
107100966Siwasaki#define ASL_RDESC_IRQ_SIZE                      0x02
108100966Siwasaki#define ASL_RDESC_DMA_SIZE                      0x02
109100966Siwasaki#define ASL_RDESC_ST_DEPEND_SIZE                0x00
110100966Siwasaki#define ASL_RDESC_END_DEPEND_SIZE               0x00
111100966Siwasaki#define ASL_RDESC_IO_SIZE                       0x07
112100966Siwasaki#define ASL_RDESC_FIXED_IO_SIZE                 0x03
113228110Sjkim#define ASL_RDESC_FIXED_DMA_SIZE                0x05
114100966Siwasaki#define ASL_RDESC_END_TAG_SIZE                  0x01
115100966Siwasaki
116100966Siwasaki
117100966Siwasakitypedef struct asl_resource_node
118100966Siwasaki{
119167802Sjkim    UINT32                          BufferLength;
120167802Sjkim    void                            *Buffer;
121167802Sjkim    struct asl_resource_node        *Next;
122100966Siwasaki
123100966Siwasaki} ASL_RESOURCE_NODE;
124100966Siwasaki
125281075Sdimtypedef struct asl_resource_info
126281075Sdim{
127281075Sdim    ACPI_PARSE_OBJECT               *DescriptorTypeOp;  /* Resource descriptor parse node */
128281075Sdim    ACPI_PARSE_OBJECT               *MappingOp;         /* Used for mapfile support */
129281075Sdim    UINT32                          CurrentByteOffset;  /* Offset in resource template */
130100966Siwasaki
131281075Sdim} ASL_RESOURCE_INFO;
132281075Sdim
133281075Sdim
134167802Sjkim/* Macros used to generate AML resource length fields */
135167802Sjkim
136167802Sjkim#define ACPI_AML_SIZE_LARGE(r)      (sizeof (r) - sizeof (AML_RESOURCE_LARGE_HEADER))
137167802Sjkim#define ACPI_AML_SIZE_SMALL(r)      (sizeof (r) - sizeof (AML_RESOURCE_SMALL_HEADER))
138167802Sjkim
139100966Siwasaki/*
140100966Siwasaki * Resource descriptors defined in the ACPI specification.
141100966Siwasaki *
142138287Smarks * Packing/alignment must be BYTE because these descriptors
143151937Sjkim * are used to overlay the raw AML byte stream.
144100966Siwasaki */
145100966Siwasaki#pragma pack(1)
146100966Siwasaki
147151937Sjkim/*
148151937Sjkim * SMALL descriptors
149151937Sjkim */
150151937Sjkim#define AML_RESOURCE_SMALL_HEADER_COMMON \
151167802Sjkim    UINT8                           DescriptorType;
152151937Sjkim
153151937Sjkimtypedef struct aml_resource_small_header
154100966Siwasaki{
155151937Sjkim    AML_RESOURCE_SMALL_HEADER_COMMON
156151937Sjkim
157151937Sjkim} AML_RESOURCE_SMALL_HEADER;
158151937Sjkim
159151937Sjkim
160151937Sjkimtypedef struct aml_resource_irq
161151937Sjkim{
162151937Sjkim    AML_RESOURCE_SMALL_HEADER_COMMON
163167802Sjkim    UINT16                          IrqMask;
164167802Sjkim    UINT8                           Flags;
165100966Siwasaki
166151937Sjkim} AML_RESOURCE_IRQ;
167100966Siwasaki
168100966Siwasaki
169151937Sjkimtypedef struct aml_resource_irq_noflags
170100966Siwasaki{
171151937Sjkim    AML_RESOURCE_SMALL_HEADER_COMMON
172167802Sjkim    UINT16                          IrqMask;
173100966Siwasaki
174151937Sjkim} AML_RESOURCE_IRQ_NOFLAGS;
175100966Siwasaki
176100966Siwasaki
177151937Sjkimtypedef struct aml_resource_dma
178100966Siwasaki{
179151937Sjkim    AML_RESOURCE_SMALL_HEADER_COMMON
180167802Sjkim    UINT8                           DmaChannelMask;
181167802Sjkim    UINT8                           Flags;
182100966Siwasaki
183151937Sjkim} AML_RESOURCE_DMA;
184100966Siwasaki
185100966Siwasaki
186151937Sjkimtypedef struct aml_resource_start_dependent
187100966Siwasaki{
188151937Sjkim    AML_RESOURCE_SMALL_HEADER_COMMON
189167802Sjkim    UINT8                           Flags;
190100966Siwasaki
191151937Sjkim} AML_RESOURCE_START_DEPENDENT;
192100966Siwasaki
193100966Siwasaki
194151937Sjkimtypedef struct aml_resource_start_dependent_noprio
195100966Siwasaki{
196151937Sjkim    AML_RESOURCE_SMALL_HEADER_COMMON
197100966Siwasaki
198151937Sjkim} AML_RESOURCE_START_DEPENDENT_NOPRIO;
199100966Siwasaki
200100966Siwasaki
201151937Sjkimtypedef struct aml_resource_end_dependent
202100966Siwasaki{
203151937Sjkim    AML_RESOURCE_SMALL_HEADER_COMMON
204100966Siwasaki
205151937Sjkim} AML_RESOURCE_END_DEPENDENT;
206100966Siwasaki
207100966Siwasaki
208151937Sjkimtypedef struct aml_resource_io
209100966Siwasaki{
210151937Sjkim    AML_RESOURCE_SMALL_HEADER_COMMON
211167802Sjkim    UINT8                           Flags;
212167802Sjkim    UINT16                          Minimum;
213167802Sjkim    UINT16                          Maximum;
214167802Sjkim    UINT8                           Alignment;
215167802Sjkim    UINT8                           AddressLength;
216100966Siwasaki
217151937Sjkim} AML_RESOURCE_IO;
218100966Siwasaki
219100966Siwasaki
220151937Sjkimtypedef struct aml_resource_fixed_io
221100966Siwasaki{
222151937Sjkim    AML_RESOURCE_SMALL_HEADER_COMMON
223167802Sjkim    UINT16                          Address;
224167802Sjkim    UINT8                           AddressLength;
225100966Siwasaki
226151937Sjkim} AML_RESOURCE_FIXED_IO;
227100966Siwasaki
228100966Siwasaki
229151937Sjkimtypedef struct aml_resource_vendor_small
230100966Siwasaki{
231151937Sjkim    AML_RESOURCE_SMALL_HEADER_COMMON
232100966Siwasaki
233151937Sjkim} AML_RESOURCE_VENDOR_SMALL;
234100966Siwasaki
235100966Siwasaki
236151937Sjkimtypedef struct aml_resource_end_tag
237100966Siwasaki{
238151937Sjkim    AML_RESOURCE_SMALL_HEADER_COMMON
239167802Sjkim    UINT8                           Checksum;
240100966Siwasaki
241151937Sjkim} AML_RESOURCE_END_TAG;
242100966Siwasaki
243100966Siwasaki
244228110Sjkimtypedef struct aml_resource_fixed_dma
245228110Sjkim{
246228110Sjkim    AML_RESOURCE_SMALL_HEADER_COMMON
247228110Sjkim    UINT16                          RequestLines;
248228110Sjkim    UINT16                          Channels;
249228110Sjkim    UINT8                           Width;
250228110Sjkim
251228110Sjkim} AML_RESOURCE_FIXED_DMA;
252228110Sjkim
253228110Sjkim
254151937Sjkim/*
255151937Sjkim * LARGE descriptors
256151937Sjkim */
257151937Sjkim#define AML_RESOURCE_LARGE_HEADER_COMMON \
258167802Sjkim    UINT8                           DescriptorType;\
259167802Sjkim    UINT16                          ResourceLength;
260100966Siwasaki
261151937Sjkimtypedef struct aml_resource_large_header
262100966Siwasaki{
263151937Sjkim    AML_RESOURCE_LARGE_HEADER_COMMON
264151937Sjkim
265151937Sjkim} AML_RESOURCE_LARGE_HEADER;
266151937Sjkim
267151937Sjkim
268207344Sjkim/* General Flags for address space resource descriptors */
269207344Sjkim
270207344Sjkim#define ACPI_RESOURCE_FLAG_DEC      2
271207344Sjkim#define ACPI_RESOURCE_FLAG_MIF      4
272207344Sjkim#define ACPI_RESOURCE_FLAG_MAF      8
273207344Sjkim
274151937Sjkimtypedef struct aml_resource_memory24
275151937Sjkim{
276151937Sjkim    AML_RESOURCE_LARGE_HEADER_COMMON
277167802Sjkim    UINT8                           Flags;
278167802Sjkim    UINT16                          Minimum;
279167802Sjkim    UINT16                          Maximum;
280167802Sjkim    UINT16                          Alignment;
281167802Sjkim    UINT16                          AddressLength;
282100966Siwasaki
283151937Sjkim} AML_RESOURCE_MEMORY24;
284100966Siwasaki
285100966Siwasaki
286151937Sjkimtypedef struct aml_resource_vendor_large
287100966Siwasaki{
288151937Sjkim    AML_RESOURCE_LARGE_HEADER_COMMON
289100966Siwasaki
290151937Sjkim} AML_RESOURCE_VENDOR_LARGE;
291100966Siwasaki
292100966Siwasaki
293151937Sjkimtypedef struct aml_resource_memory32
294100966Siwasaki{
295151937Sjkim    AML_RESOURCE_LARGE_HEADER_COMMON
296167802Sjkim    UINT8                           Flags;
297167802Sjkim    UINT32                          Minimum;
298167802Sjkim    UINT32                          Maximum;
299167802Sjkim    UINT32                          Alignment;
300167802Sjkim    UINT32                          AddressLength;
301100966Siwasaki
302151937Sjkim} AML_RESOURCE_MEMORY32;
303100966Siwasaki
304100966Siwasaki
305151937Sjkimtypedef struct aml_resource_fixed_memory32
306100966Siwasaki{
307151937Sjkim    AML_RESOURCE_LARGE_HEADER_COMMON
308167802Sjkim    UINT8                           Flags;
309167802Sjkim    UINT32                          Address;
310167802Sjkim    UINT32                          AddressLength;
311100966Siwasaki
312151937Sjkim} AML_RESOURCE_FIXED_MEMORY32;
313100966Siwasaki
314100966Siwasaki
315151937Sjkim#define AML_RESOURCE_ADDRESS_COMMON \
316167802Sjkim    UINT8                           ResourceType; \
317167802Sjkim    UINT8                           Flags; \
318167802Sjkim    UINT8                           SpecificFlags;
319151937Sjkim
320151937Sjkim
321151937Sjkimtypedef struct aml_resource_address
322100966Siwasaki{
323151937Sjkim    AML_RESOURCE_LARGE_HEADER_COMMON
324151937Sjkim    AML_RESOURCE_ADDRESS_COMMON
325151937Sjkim
326151937Sjkim} AML_RESOURCE_ADDRESS;
327151937Sjkim
328151937Sjkim
329151937Sjkimtypedef struct aml_resource_extended_address64
330151937Sjkim{
331151937Sjkim    AML_RESOURCE_LARGE_HEADER_COMMON
332151937Sjkim    AML_RESOURCE_ADDRESS_COMMON
333167802Sjkim    UINT8                           RevisionID;
334167802Sjkim    UINT8                           Reserved;
335167802Sjkim    UINT64                          Granularity;
336167802Sjkim    UINT64                          Minimum;
337167802Sjkim    UINT64                          Maximum;
338167802Sjkim    UINT64                          TranslationOffset;
339167802Sjkim    UINT64                          AddressLength;
340167802Sjkim    UINT64                          TypeSpecific;
341100966Siwasaki
342151937Sjkim} AML_RESOURCE_EXTENDED_ADDRESS64;
343100966Siwasaki
344151937Sjkim#define AML_RESOURCE_EXTENDED_ADDRESS_REVISION          1       /* ACPI 3.0 */
345100966Siwasaki
346151937Sjkim
347151937Sjkimtypedef struct aml_resource_address64
348100966Siwasaki{
349151937Sjkim    AML_RESOURCE_LARGE_HEADER_COMMON
350151937Sjkim    AML_RESOURCE_ADDRESS_COMMON
351167802Sjkim    UINT64                          Granularity;
352167802Sjkim    UINT64                          Minimum;
353167802Sjkim    UINT64                          Maximum;
354167802Sjkim    UINT64                          TranslationOffset;
355167802Sjkim    UINT64                          AddressLength;
356151937Sjkim
357151937Sjkim} AML_RESOURCE_ADDRESS64;
358151937Sjkim
359151937Sjkim
360151937Sjkimtypedef struct aml_resource_address32
361151937Sjkim{
362151937Sjkim    AML_RESOURCE_LARGE_HEADER_COMMON
363151937Sjkim    AML_RESOURCE_ADDRESS_COMMON
364167802Sjkim    UINT32                          Granularity;
365167802Sjkim    UINT32                          Minimum;
366167802Sjkim    UINT32                          Maximum;
367167802Sjkim    UINT32                          TranslationOffset;
368167802Sjkim    UINT32                          AddressLength;
369100966Siwasaki
370151937Sjkim} AML_RESOURCE_ADDRESS32;
371100966Siwasaki
372100966Siwasaki
373151937Sjkimtypedef struct aml_resource_address16
374100966Siwasaki{
375151937Sjkim    AML_RESOURCE_LARGE_HEADER_COMMON
376151937Sjkim    AML_RESOURCE_ADDRESS_COMMON
377167802Sjkim    UINT16                          Granularity;
378167802Sjkim    UINT16                          Minimum;
379167802Sjkim    UINT16                          Maximum;
380167802Sjkim    UINT16                          TranslationOffset;
381167802Sjkim    UINT16                          AddressLength;
382100966Siwasaki
383151937Sjkim} AML_RESOURCE_ADDRESS16;
384100966Siwasaki
385100966Siwasaki
386151937Sjkimtypedef struct aml_resource_extended_irq
387100966Siwasaki{
388151937Sjkim    AML_RESOURCE_LARGE_HEADER_COMMON
389167802Sjkim    UINT8                           Flags;
390167802Sjkim    UINT8                           InterruptCount;
391167802Sjkim    UINT32                          Interrupts[1];
392100966Siwasaki    /* ResSourceIndex, ResSource optional fields follow */
393100966Siwasaki
394151937Sjkim} AML_RESOURCE_EXTENDED_IRQ;
395100966Siwasaki
396100966Siwasaki
397151937Sjkimtypedef struct aml_resource_generic_register
398100966Siwasaki{
399151937Sjkim    AML_RESOURCE_LARGE_HEADER_COMMON
400167802Sjkim    UINT8                           AddressSpaceId;
401167802Sjkim    UINT8                           BitWidth;
402167802Sjkim    UINT8                           BitOffset;
403167802Sjkim    UINT8                           AccessSize; /* ACPI 3.0, was previously Reserved */
404167802Sjkim    UINT64                          Address;
405100966Siwasaki
406151937Sjkim} AML_RESOURCE_GENERIC_REGISTER;
407100966Siwasaki
408228110Sjkim
409228110Sjkim/* Common descriptor for GpioInt and GpioIo (ACPI 5.0) */
410228110Sjkim
411228110Sjkimtypedef struct aml_resource_gpio
412228110Sjkim{
413228110Sjkim    AML_RESOURCE_LARGE_HEADER_COMMON
414228110Sjkim    UINT8                           RevisionId;
415228110Sjkim    UINT8                           ConnectionType;
416228110Sjkim    UINT16                          Flags;
417228110Sjkim    UINT16                          IntFlags;
418228110Sjkim    UINT8                           PinConfig;
419228110Sjkim    UINT16                          DriveStrength;
420228110Sjkim    UINT16                          DebounceTimeout;
421228110Sjkim    UINT16                          PinTableOffset;
422228110Sjkim    UINT8                           ResSourceIndex;
423228110Sjkim    UINT16                          ResSourceOffset;
424228110Sjkim    UINT16                          VendorOffset;
425228110Sjkim    UINT16                          VendorLength;
426228110Sjkim    /*
427228110Sjkim     * Optional fields follow immediately:
428228110Sjkim     * 1) PIN list (Words)
429228110Sjkim     * 2) Resource Source String
430228110Sjkim     * 3) Vendor Data bytes
431228110Sjkim     */
432228110Sjkim
433228110Sjkim} AML_RESOURCE_GPIO;
434228110Sjkim
435228110Sjkim#define AML_RESOURCE_GPIO_REVISION              1       /* ACPI 5.0 */
436228110Sjkim
437228110Sjkim/* Values for ConnectionType above */
438228110Sjkim
439228110Sjkim#define AML_RESOURCE_GPIO_TYPE_INT              0
440228110Sjkim#define AML_RESOURCE_GPIO_TYPE_IO               1
441228110Sjkim#define AML_RESOURCE_MAX_GPIOTYPE               1
442228110Sjkim
443228110Sjkim
444228110Sjkim/* Common preamble for all serial descriptors (ACPI 5.0) */
445228110Sjkim
446228110Sjkim#define AML_RESOURCE_SERIAL_COMMON \
447228110Sjkim    UINT8                           RevisionId; \
448228110Sjkim    UINT8                           ResSourceIndex; \
449228110Sjkim    UINT8                           Type; \
450228110Sjkim    UINT8                           Flags; \
451228110Sjkim    UINT16                          TypeSpecificFlags; \
452228110Sjkim    UINT8                           TypeRevisionId; \
453228110Sjkim    UINT16                          TypeDataLength; \
454228110Sjkim
455228110Sjkim/* Values for the type field above */
456228110Sjkim
457228110Sjkim#define AML_RESOURCE_I2C_SERIALBUSTYPE          1
458228110Sjkim#define AML_RESOURCE_SPI_SERIALBUSTYPE          2
459228110Sjkim#define AML_RESOURCE_UART_SERIALBUSTYPE         3
460228110Sjkim#define AML_RESOURCE_MAX_SERIALBUSTYPE          3
461228110Sjkim#define AML_RESOURCE_VENDOR_SERIALBUSTYPE       192 /* Vendor defined is 0xC0-0xFF (NOT SUPPORTED) */
462228110Sjkim
463228110Sjkimtypedef struct aml_resource_common_serialbus
464228110Sjkim{
465228110Sjkim    AML_RESOURCE_LARGE_HEADER_COMMON
466228110Sjkim    AML_RESOURCE_SERIAL_COMMON
467228110Sjkim
468228110Sjkim} AML_RESOURCE_COMMON_SERIALBUS;
469228110Sjkim
470228110Sjkimtypedef struct aml_resource_i2c_serialbus
471228110Sjkim{
472228110Sjkim    AML_RESOURCE_LARGE_HEADER_COMMON
473228110Sjkim    AML_RESOURCE_SERIAL_COMMON
474228110Sjkim    UINT32                          ConnectionSpeed;
475228110Sjkim    UINT16                          SlaveAddress;
476228110Sjkim    /*
477228110Sjkim     * Optional fields follow immediately:
478228110Sjkim     * 1) Vendor Data bytes
479228110Sjkim     * 2) Resource Source String
480228110Sjkim     */
481228110Sjkim
482228110Sjkim} AML_RESOURCE_I2C_SERIALBUS;
483228110Sjkim
484228110Sjkim#define AML_RESOURCE_I2C_REVISION               1       /* ACPI 5.0 */
485228110Sjkim#define AML_RESOURCE_I2C_TYPE_REVISION          1       /* ACPI 5.0 */
486228110Sjkim#define AML_RESOURCE_I2C_MIN_DATA_LEN           6
487228110Sjkim
488228110Sjkimtypedef struct aml_resource_spi_serialbus
489228110Sjkim{
490228110Sjkim    AML_RESOURCE_LARGE_HEADER_COMMON
491228110Sjkim    AML_RESOURCE_SERIAL_COMMON
492228110Sjkim    UINT32                          ConnectionSpeed;
493228110Sjkim    UINT8                           DataBitLength;
494228110Sjkim    UINT8                           ClockPhase;
495228110Sjkim    UINT8                           ClockPolarity;
496228110Sjkim    UINT16                          DeviceSelection;
497228110Sjkim    /*
498228110Sjkim     * Optional fields follow immediately:
499228110Sjkim     * 1) Vendor Data bytes
500228110Sjkim     * 2) Resource Source String
501228110Sjkim     */
502228110Sjkim
503228110Sjkim} AML_RESOURCE_SPI_SERIALBUS;
504228110Sjkim
505228110Sjkim#define AML_RESOURCE_SPI_REVISION               1       /* ACPI 5.0 */
506228110Sjkim#define AML_RESOURCE_SPI_TYPE_REVISION          1       /* ACPI 5.0 */
507228110Sjkim#define AML_RESOURCE_SPI_MIN_DATA_LEN           9
508228110Sjkim
509228110Sjkim
510228110Sjkimtypedef struct aml_resource_uart_serialbus
511228110Sjkim{
512228110Sjkim    AML_RESOURCE_LARGE_HEADER_COMMON
513228110Sjkim    AML_RESOURCE_SERIAL_COMMON
514228110Sjkim    UINT32                          DefaultBaudRate;
515228110Sjkim    UINT16                          RxFifoSize;
516228110Sjkim    UINT16                          TxFifoSize;
517228110Sjkim    UINT8                           Parity;
518228110Sjkim    UINT8                           LinesEnabled;
519228110Sjkim    /*
520228110Sjkim     * Optional fields follow immediately:
521228110Sjkim     * 1) Vendor Data bytes
522228110Sjkim     * 2) Resource Source String
523228110Sjkim     */
524228110Sjkim
525228110Sjkim} AML_RESOURCE_UART_SERIALBUS;
526228110Sjkim
527228110Sjkim#define AML_RESOURCE_UART_REVISION              1       /* ACPI 5.0 */
528228110Sjkim#define AML_RESOURCE_UART_TYPE_REVISION         1       /* ACPI 5.0 */
529228110Sjkim#define AML_RESOURCE_UART_MIN_DATA_LEN          10
530228110Sjkim
531228110Sjkim
532100966Siwasaki/* restore default alignment */
533100966Siwasaki
534100966Siwasaki#pragma pack()
535100966Siwasaki
536138287Smarks/* Union of all resource descriptors, so we can allocate the worst case */
537100966Siwasaki
538151937Sjkimtypedef union aml_resource
539100966Siwasaki{
540151937Sjkim    /* Descriptor headers */
541100966Siwasaki
542167802Sjkim    UINT8                                   DescriptorType;
543167802Sjkim    AML_RESOURCE_SMALL_HEADER               SmallHeader;
544167802Sjkim    AML_RESOURCE_LARGE_HEADER               LargeHeader;
545100966Siwasaki
546151937Sjkim    /* Small resource descriptors */
547100966Siwasaki
548167802Sjkim    AML_RESOURCE_IRQ                        Irq;
549167802Sjkim    AML_RESOURCE_DMA                        Dma;
550167802Sjkim    AML_RESOURCE_START_DEPENDENT            StartDpf;
551167802Sjkim    AML_RESOURCE_END_DEPENDENT              EndDpf;
552167802Sjkim    AML_RESOURCE_IO                         Io;
553167802Sjkim    AML_RESOURCE_FIXED_IO                   FixedIo;
554228110Sjkim    AML_RESOURCE_FIXED_DMA                  FixedDma;
555167802Sjkim    AML_RESOURCE_VENDOR_SMALL               VendorSmall;
556167802Sjkim    AML_RESOURCE_END_TAG                    EndTag;
557100966Siwasaki
558151937Sjkim    /* Large resource descriptors */
559151937Sjkim
560167802Sjkim    AML_RESOURCE_MEMORY24                   Memory24;
561167802Sjkim    AML_RESOURCE_GENERIC_REGISTER           GenericReg;
562167802Sjkim    AML_RESOURCE_VENDOR_LARGE               VendorLarge;
563167802Sjkim    AML_RESOURCE_MEMORY32                   Memory32;
564167802Sjkim    AML_RESOURCE_FIXED_MEMORY32             FixedMemory32;
565167802Sjkim    AML_RESOURCE_ADDRESS16                  Address16;
566167802Sjkim    AML_RESOURCE_ADDRESS32                  Address32;
567167802Sjkim    AML_RESOURCE_ADDRESS64                  Address64;
568167802Sjkim    AML_RESOURCE_EXTENDED_ADDRESS64         ExtAddress64;
569167802Sjkim    AML_RESOURCE_EXTENDED_IRQ               ExtendedIrq;
570228110Sjkim    AML_RESOURCE_GPIO                       Gpio;
571228110Sjkim    AML_RESOURCE_I2C_SERIALBUS              I2cSerialBus;
572228110Sjkim    AML_RESOURCE_SPI_SERIALBUS              SpiSerialBus;
573228110Sjkim    AML_RESOURCE_UART_SERIALBUS             UartSerialBus;
574228110Sjkim    AML_RESOURCE_COMMON_SERIALBUS           CommonSerialBus;
575151937Sjkim
576151937Sjkim    /* Utility overlays */
577151937Sjkim
578167802Sjkim    AML_RESOURCE_ADDRESS                    Address;
579167802Sjkim    UINT32                                  DwordItem;
580167802Sjkim    UINT16                                  WordItem;
581167802Sjkim    UINT8                                   ByteItem;
582151937Sjkim
583151937Sjkim} AML_RESOURCE;
584151937Sjkim
585281075Sdim
586281075Sdim/* Interfaces used by both the disassembler and compiler */
587281075Sdim
588281075Sdimvoid
589281075SdimMpSaveGpioInfo (
590281075Sdim    ACPI_PARSE_OBJECT       *Op,
591281075Sdim    AML_RESOURCE            *Resource,
592281075Sdim    UINT32                  PinCount,
593281075Sdim    UINT16                  *PinList,
594281075Sdim    char                    *DeviceName);
595281075Sdim
596281075Sdimvoid
597281075SdimMpSaveSerialInfo (
598281075Sdim    ACPI_PARSE_OBJECT       *Op,
599281075Sdim    AML_RESOURCE            *Resource,
600281075Sdim    char                    *DeviceName);
601281075Sdim
602281075Sdimchar *
603281075SdimMpGetHidFromParseTree (
604281075Sdim    ACPI_NAMESPACE_NODE     *HidNode);
605281075Sdim
606281075Sdimchar *
607281075SdimMpGetHidViaNamestring (
608281075Sdim    char                    *DeviceName);
609281075Sdim
610281075Sdimchar *
611281075SdimMpGetConnectionInfo (
612281075Sdim    ACPI_PARSE_OBJECT       *Op,
613281075Sdim    UINT32                  PinIndex,
614281075Sdim    ACPI_NAMESPACE_NODE     **TargetNode,
615281075Sdim    char                    **TargetName);
616281075Sdim
617281075Sdimchar *
618281075SdimMpGetParentDeviceHid (
619281075Sdim    ACPI_PARSE_OBJECT       *Op,
620281075Sdim    ACPI_NAMESPACE_NODE     **TargetNode,
621281075Sdim    char                    **ParentDeviceName);
622281075Sdim
623281075Sdimchar *
624281075SdimMpGetDdnValue (
625281075Sdim    char                    *DeviceName);
626281075Sdim
627281075Sdimchar *
628281075SdimMpGetHidValue (
629281075Sdim    ACPI_NAMESPACE_NODE     *DeviceNode);
630281075Sdim
631100966Siwasaki#endif
632