xref: /titanic_44/usr/src/uts/intel/sys/acpi/amlresrc.h (revision cb56572868bfc488bbd3ab847b09db2a25554d44)
17c478bd9Sstevel@tonic-gate /******************************************************************************
27c478bd9Sstevel@tonic-gate  *
37c478bd9Sstevel@tonic-gate  * Module Name: amlresrc.h - AML resource descriptors
47c478bd9Sstevel@tonic-gate  *
57c478bd9Sstevel@tonic-gate  *****************************************************************************/
67c478bd9Sstevel@tonic-gate 
726f3cdf0SGordon Ross /*
8*cb565728SJerry Jelinek  * Copyright (C) 2000 - 2016, Intel Corp.
97c478bd9Sstevel@tonic-gate  * All rights reserved.
107c478bd9Sstevel@tonic-gate  *
1126f3cdf0SGordon Ross  * Redistribution and use in source and binary forms, with or without
1226f3cdf0SGordon Ross  * modification, are permitted provided that the following conditions
1326f3cdf0SGordon Ross  * are met:
1426f3cdf0SGordon Ross  * 1. Redistributions of source code must retain the above copyright
1526f3cdf0SGordon Ross  *    notice, this list of conditions, and the following disclaimer,
1626f3cdf0SGordon Ross  *    without modification.
1726f3cdf0SGordon Ross  * 2. Redistributions in binary form must reproduce at minimum a disclaimer
1826f3cdf0SGordon Ross  *    substantially similar to the "NO WARRANTY" disclaimer below
1926f3cdf0SGordon Ross  *    ("Disclaimer") and any redistribution must be conditioned upon
2026f3cdf0SGordon Ross  *    including a substantially similar Disclaimer requirement for further
2126f3cdf0SGordon Ross  *    binary redistribution.
2226f3cdf0SGordon Ross  * 3. Neither the names of the above-listed copyright holders nor the names
2326f3cdf0SGordon Ross  *    of any contributors may be used to endorse or promote products derived
2426f3cdf0SGordon Ross  *    from this software without specific prior written permission.
257c478bd9Sstevel@tonic-gate  *
2626f3cdf0SGordon Ross  * Alternatively, this software may be distributed under the terms of the
2726f3cdf0SGordon Ross  * GNU General Public License ("GPL") version 2 as published by the Free
2826f3cdf0SGordon Ross  * Software Foundation.
297c478bd9Sstevel@tonic-gate  *
3026f3cdf0SGordon Ross  * NO WARRANTY
3126f3cdf0SGordon Ross  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
3226f3cdf0SGordon Ross  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
3326f3cdf0SGordon Ross  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
3426f3cdf0SGordon Ross  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
3526f3cdf0SGordon Ross  * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
3626f3cdf0SGordon Ross  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
3726f3cdf0SGordon Ross  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
3826f3cdf0SGordon Ross  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
3926f3cdf0SGordon Ross  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
4026f3cdf0SGordon Ross  * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
4126f3cdf0SGordon Ross  * POSSIBILITY OF SUCH DAMAGES.
4226f3cdf0SGordon Ross  */
437c478bd9Sstevel@tonic-gate 
4427f7c583Smyers /* acpisrc:StructDefs -- for acpisrc conversion */
457c478bd9Sstevel@tonic-gate 
467c478bd9Sstevel@tonic-gate #ifndef __AMLRESRC_H
477c478bd9Sstevel@tonic-gate #define __AMLRESRC_H
487c478bd9Sstevel@tonic-gate 
497c478bd9Sstevel@tonic-gate 
5027f7c583Smyers /*
5127f7c583Smyers  * Resource descriptor tags, as defined in the ACPI specification.
5227f7c583Smyers  * Used to symbolically reference fields within a descriptor.
5327f7c583Smyers  */
5427f7c583Smyers #define ACPI_RESTAG_ADDRESS                     "_ADR"
5527f7c583Smyers #define ACPI_RESTAG_ALIGNMENT                   "_ALN"
5627f7c583Smyers #define ACPI_RESTAG_ADDRESSSPACE                "_ASI"
5727f7c583Smyers #define ACPI_RESTAG_ACCESSSIZE                  "_ASZ"
5827f7c583Smyers #define ACPI_RESTAG_TYPESPECIFICATTRIBUTES      "_ATT"
5927f7c583Smyers #define ACPI_RESTAG_BASEADDRESS                 "_BAS"
6027f7c583Smyers #define ACPI_RESTAG_BUSMASTER                   "_BM_"  /* Master(1), Slave(0) */
61*cb565728SJerry Jelinek #define ACPI_RESTAG_DEBOUNCETIME                "_DBT"
6227f7c583Smyers #define ACPI_RESTAG_DECODE                      "_DEC"
63*cb565728SJerry Jelinek #define ACPI_RESTAG_DEVICEPOLARITY              "_DPL"
6427f7c583Smyers #define ACPI_RESTAG_DMA                         "_DMA"
6527f7c583Smyers #define ACPI_RESTAG_DMATYPE                     "_TYP"  /* Compatible(0), A(1), B(2), F(3) */
66*cb565728SJerry Jelinek #define ACPI_RESTAG_DRIVESTRENGTH               "_DRS"
67*cb565728SJerry Jelinek #define ACPI_RESTAG_ENDIANNESS                  "_END"
68*cb565728SJerry Jelinek #define ACPI_RESTAG_FLOWCONTROL                 "_FLC"
6927f7c583Smyers #define ACPI_RESTAG_GRANULARITY                 "_GRA"
7027f7c583Smyers #define ACPI_RESTAG_INTERRUPT                   "_INT"
7127f7c583Smyers #define ACPI_RESTAG_INTERRUPTLEVEL              "_LL_"  /* ActiveLo(1), ActiveHi(0) */
7227f7c583Smyers #define ACPI_RESTAG_INTERRUPTSHARE              "_SHR"  /* Shareable(1), NoShare(0) */
7327f7c583Smyers #define ACPI_RESTAG_INTERRUPTTYPE               "_HE_"  /* Edge(1), Level(0) */
74*cb565728SJerry Jelinek #define ACPI_RESTAG_IORESTRICTION               "_IOR"
7527f7c583Smyers #define ACPI_RESTAG_LENGTH                      "_LEN"
76*cb565728SJerry Jelinek #define ACPI_RESTAG_LINE                        "_LIN"
7727f7c583Smyers #define ACPI_RESTAG_MEMATTRIBUTES               "_MTP"  /* Memory(0), Reserved(1), ACPI(2), NVS(3) */
7827f7c583Smyers #define ACPI_RESTAG_MEMTYPE                     "_MEM"  /* NonCache(0), Cacheable(1) Cache+combine(2), Cache+prefetch(3) */
7927f7c583Smyers #define ACPI_RESTAG_MAXADDR                     "_MAX"
8027f7c583Smyers #define ACPI_RESTAG_MINADDR                     "_MIN"
8127f7c583Smyers #define ACPI_RESTAG_MAXTYPE                     "_MAF"
8227f7c583Smyers #define ACPI_RESTAG_MINTYPE                     "_MIF"
83*cb565728SJerry Jelinek #define ACPI_RESTAG_MODE                        "_MOD"
84*cb565728SJerry Jelinek #define ACPI_RESTAG_PARITY                      "_PAR"
85*cb565728SJerry Jelinek #define ACPI_RESTAG_PHASE                       "_PHA"
86*cb565728SJerry Jelinek #define ACPI_RESTAG_PIN                         "_PIN"
87*cb565728SJerry Jelinek #define ACPI_RESTAG_PINCONFIG                   "_PPI"
88*cb565728SJerry Jelinek #define ACPI_RESTAG_POLARITY                    "_POL"
8927f7c583Smyers #define ACPI_RESTAG_REGISTERBITOFFSET           "_RBO"
9027f7c583Smyers #define ACPI_RESTAG_REGISTERBITWIDTH            "_RBW"
9127f7c583Smyers #define ACPI_RESTAG_RANGETYPE                   "_RNG"
9227f7c583Smyers #define ACPI_RESTAG_READWRITETYPE               "_RW_"  /* ReadOnly(0), Writeable (1) */
93*cb565728SJerry Jelinek #define ACPI_RESTAG_LENGTH_RX                   "_RXL"
94*cb565728SJerry Jelinek #define ACPI_RESTAG_LENGTH_TX                   "_TXL"
95*cb565728SJerry Jelinek #define ACPI_RESTAG_SLAVEMODE                   "_SLV"
96*cb565728SJerry Jelinek #define ACPI_RESTAG_SPEED                       "_SPE"
97*cb565728SJerry Jelinek #define ACPI_RESTAG_STOPBITS                    "_STB"
9827f7c583Smyers #define ACPI_RESTAG_TRANSLATION                 "_TRA"
9927f7c583Smyers #define ACPI_RESTAG_TRANSTYPE                   "_TRS"  /* Sparse(1), Dense(0) */
10027f7c583Smyers #define ACPI_RESTAG_TYPE                        "_TTP"  /* Translation(1), Static (0) */
10127f7c583Smyers #define ACPI_RESTAG_XFERTYPE                    "_SIZ"  /* 8(0), 8And16(1), 16(2) */
102*cb565728SJerry Jelinek #define ACPI_RESTAG_VENDORDATA                  "_VEN"
1037c478bd9Sstevel@tonic-gate 
1047c478bd9Sstevel@tonic-gate 
1057c478bd9Sstevel@tonic-gate /* Default sizes for "small" resource descriptors */
1067c478bd9Sstevel@tonic-gate 
1077c478bd9Sstevel@tonic-gate #define ASL_RDESC_IRQ_SIZE                      0x02
1087c478bd9Sstevel@tonic-gate #define ASL_RDESC_DMA_SIZE                      0x02
1097c478bd9Sstevel@tonic-gate #define ASL_RDESC_ST_DEPEND_SIZE                0x00
1107c478bd9Sstevel@tonic-gate #define ASL_RDESC_END_DEPEND_SIZE               0x00
1117c478bd9Sstevel@tonic-gate #define ASL_RDESC_IO_SIZE                       0x07
1127c478bd9Sstevel@tonic-gate #define ASL_RDESC_FIXED_IO_SIZE                 0x03
113*cb565728SJerry Jelinek #define ASL_RDESC_FIXED_DMA_SIZE                0x05
1147c478bd9Sstevel@tonic-gate #define ASL_RDESC_END_TAG_SIZE                  0x01
1157c478bd9Sstevel@tonic-gate 
1167c478bd9Sstevel@tonic-gate 
1177c478bd9Sstevel@tonic-gate typedef struct asl_resource_node
1187c478bd9Sstevel@tonic-gate {
1197c478bd9Sstevel@tonic-gate     UINT32                          BufferLength;
1207c478bd9Sstevel@tonic-gate     void                            *Buffer;
1217c478bd9Sstevel@tonic-gate     struct asl_resource_node        *Next;
1227c478bd9Sstevel@tonic-gate 
1237c478bd9Sstevel@tonic-gate } ASL_RESOURCE_NODE;
1247c478bd9Sstevel@tonic-gate 
125*cb565728SJerry Jelinek typedef struct asl_resource_info
126*cb565728SJerry Jelinek {
127*cb565728SJerry Jelinek     ACPI_PARSE_OBJECT               *DescriptorTypeOp;  /* Resource descriptor parse node */
128*cb565728SJerry Jelinek     ACPI_PARSE_OBJECT               *MappingOp;         /* Used for mapfile support */
129*cb565728SJerry Jelinek     UINT32                          CurrentByteOffset;  /* Offset in resource template */
130*cb565728SJerry Jelinek 
131*cb565728SJerry Jelinek } ASL_RESOURCE_INFO;
132*cb565728SJerry Jelinek 
1337c478bd9Sstevel@tonic-gate 
13430082d0cSmyers /* Macros used to generate AML resource length fields */
13530082d0cSmyers 
13630082d0cSmyers #define ACPI_AML_SIZE_LARGE(r)      (sizeof (r) - sizeof (AML_RESOURCE_LARGE_HEADER))
13730082d0cSmyers #define ACPI_AML_SIZE_SMALL(r)      (sizeof (r) - sizeof (AML_RESOURCE_SMALL_HEADER))
13830082d0cSmyers 
1397c478bd9Sstevel@tonic-gate /*
1407c478bd9Sstevel@tonic-gate  * Resource descriptors defined in the ACPI specification.
1417c478bd9Sstevel@tonic-gate  *
1427c478bd9Sstevel@tonic-gate  * Packing/alignment must be BYTE because these descriptors
143186507a7Smyers  * are used to overlay the raw AML byte stream.
1447c478bd9Sstevel@tonic-gate  */
1457c478bd9Sstevel@tonic-gate #pragma pack(1)
1467c478bd9Sstevel@tonic-gate 
147186507a7Smyers /*
148186507a7Smyers  * SMALL descriptors
149186507a7Smyers  */
150186507a7Smyers #define AML_RESOURCE_SMALL_HEADER_COMMON \
1517c478bd9Sstevel@tonic-gate     UINT8                           DescriptorType;
152186507a7Smyers 
153186507a7Smyers typedef struct aml_resource_small_header
154186507a7Smyers {
155186507a7Smyers     AML_RESOURCE_SMALL_HEADER_COMMON
156186507a7Smyers 
157186507a7Smyers } AML_RESOURCE_SMALL_HEADER;
158186507a7Smyers 
159186507a7Smyers 
160186507a7Smyers typedef struct aml_resource_irq
161186507a7Smyers {
162186507a7Smyers     AML_RESOURCE_SMALL_HEADER_COMMON
1637c478bd9Sstevel@tonic-gate     UINT16                          IrqMask;
1647c478bd9Sstevel@tonic-gate     UINT8                           Flags;
1657c478bd9Sstevel@tonic-gate 
166186507a7Smyers } AML_RESOURCE_IRQ;
1677c478bd9Sstevel@tonic-gate 
1687c478bd9Sstevel@tonic-gate 
169186507a7Smyers typedef struct aml_resource_irq_noflags
1707c478bd9Sstevel@tonic-gate {
171186507a7Smyers     AML_RESOURCE_SMALL_HEADER_COMMON
1727c478bd9Sstevel@tonic-gate     UINT16                          IrqMask;
1737c478bd9Sstevel@tonic-gate 
174186507a7Smyers } AML_RESOURCE_IRQ_NOFLAGS;
1757c478bd9Sstevel@tonic-gate 
1767c478bd9Sstevel@tonic-gate 
177186507a7Smyers typedef struct aml_resource_dma
1787c478bd9Sstevel@tonic-gate {
179186507a7Smyers     AML_RESOURCE_SMALL_HEADER_COMMON
1807c478bd9Sstevel@tonic-gate     UINT8                           DmaChannelMask;
1817c478bd9Sstevel@tonic-gate     UINT8                           Flags;
1827c478bd9Sstevel@tonic-gate 
183186507a7Smyers } AML_RESOURCE_DMA;
1847c478bd9Sstevel@tonic-gate 
1857c478bd9Sstevel@tonic-gate 
186186507a7Smyers typedef struct aml_resource_start_dependent
1877c478bd9Sstevel@tonic-gate {
188186507a7Smyers     AML_RESOURCE_SMALL_HEADER_COMMON
1897c478bd9Sstevel@tonic-gate     UINT8                           Flags;
1907c478bd9Sstevel@tonic-gate 
191186507a7Smyers } AML_RESOURCE_START_DEPENDENT;
1927c478bd9Sstevel@tonic-gate 
1937c478bd9Sstevel@tonic-gate 
194186507a7Smyers typedef struct aml_resource_start_dependent_noprio
1957c478bd9Sstevel@tonic-gate {
196186507a7Smyers     AML_RESOURCE_SMALL_HEADER_COMMON
1977c478bd9Sstevel@tonic-gate 
198186507a7Smyers } AML_RESOURCE_START_DEPENDENT_NOPRIO;
1997c478bd9Sstevel@tonic-gate 
2007c478bd9Sstevel@tonic-gate 
201186507a7Smyers typedef struct aml_resource_end_dependent
2027c478bd9Sstevel@tonic-gate {
203186507a7Smyers     AML_RESOURCE_SMALL_HEADER_COMMON
2047c478bd9Sstevel@tonic-gate 
205186507a7Smyers } AML_RESOURCE_END_DEPENDENT;
2067c478bd9Sstevel@tonic-gate 
2077c478bd9Sstevel@tonic-gate 
208186507a7Smyers typedef struct aml_resource_io
2097c478bd9Sstevel@tonic-gate {
210186507a7Smyers     AML_RESOURCE_SMALL_HEADER_COMMON
21130082d0cSmyers     UINT8                           Flags;
212186507a7Smyers     UINT16                          Minimum;
213186507a7Smyers     UINT16                          Maximum;
2147c478bd9Sstevel@tonic-gate     UINT8                           Alignment;
215186507a7Smyers     UINT8                           AddressLength;
2167c478bd9Sstevel@tonic-gate 
217186507a7Smyers } AML_RESOURCE_IO;
2187c478bd9Sstevel@tonic-gate 
2197c478bd9Sstevel@tonic-gate 
220186507a7Smyers typedef struct aml_resource_fixed_io
2217c478bd9Sstevel@tonic-gate {
222186507a7Smyers     AML_RESOURCE_SMALL_HEADER_COMMON
223186507a7Smyers     UINT16                          Address;
224186507a7Smyers     UINT8                           AddressLength;
2257c478bd9Sstevel@tonic-gate 
226186507a7Smyers } AML_RESOURCE_FIXED_IO;
2277c478bd9Sstevel@tonic-gate 
2287c478bd9Sstevel@tonic-gate 
229186507a7Smyers typedef struct aml_resource_vendor_small
2307c478bd9Sstevel@tonic-gate {
231186507a7Smyers     AML_RESOURCE_SMALL_HEADER_COMMON
2327c478bd9Sstevel@tonic-gate 
233186507a7Smyers } AML_RESOURCE_VENDOR_SMALL;
2347c478bd9Sstevel@tonic-gate 
2357c478bd9Sstevel@tonic-gate 
236186507a7Smyers typedef struct aml_resource_end_tag
2377c478bd9Sstevel@tonic-gate {
238186507a7Smyers     AML_RESOURCE_SMALL_HEADER_COMMON
2397c478bd9Sstevel@tonic-gate     UINT8                           Checksum;
2407c478bd9Sstevel@tonic-gate 
241186507a7Smyers } AML_RESOURCE_END_TAG;
2427c478bd9Sstevel@tonic-gate 
2437c478bd9Sstevel@tonic-gate 
244*cb565728SJerry Jelinek typedef struct aml_resource_fixed_dma
245*cb565728SJerry Jelinek {
246*cb565728SJerry Jelinek     AML_RESOURCE_SMALL_HEADER_COMMON
247*cb565728SJerry Jelinek     UINT16                          RequestLines;
248*cb565728SJerry Jelinek     UINT16                          Channels;
249*cb565728SJerry Jelinek     UINT8                           Width;
250*cb565728SJerry Jelinek 
251*cb565728SJerry Jelinek } AML_RESOURCE_FIXED_DMA;
252*cb565728SJerry Jelinek 
253*cb565728SJerry Jelinek 
254186507a7Smyers /*
255186507a7Smyers  * LARGE descriptors
256186507a7Smyers  */
257186507a7Smyers #define AML_RESOURCE_LARGE_HEADER_COMMON \
258186507a7Smyers     UINT8                           DescriptorType;\
259186507a7Smyers     UINT16                          ResourceLength;
2607c478bd9Sstevel@tonic-gate 
261186507a7Smyers typedef struct aml_resource_large_header
2627c478bd9Sstevel@tonic-gate {
263186507a7Smyers     AML_RESOURCE_LARGE_HEADER_COMMON
264186507a7Smyers 
265186507a7Smyers } AML_RESOURCE_LARGE_HEADER;
266186507a7Smyers 
267186507a7Smyers 
26826f3cdf0SGordon Ross /* General Flags for address space resource descriptors */
26926f3cdf0SGordon Ross 
27026f3cdf0SGordon Ross #define ACPI_RESOURCE_FLAG_DEC      2
27126f3cdf0SGordon Ross #define ACPI_RESOURCE_FLAG_MIF      4
27226f3cdf0SGordon Ross #define ACPI_RESOURCE_FLAG_MAF      8
27326f3cdf0SGordon Ross 
274186507a7Smyers typedef struct aml_resource_memory24
275186507a7Smyers {
276186507a7Smyers     AML_RESOURCE_LARGE_HEADER_COMMON
27730082d0cSmyers     UINT8                           Flags;
278186507a7Smyers     UINT16                          Minimum;
279186507a7Smyers     UINT16                          Maximum;
2807c478bd9Sstevel@tonic-gate     UINT16                          Alignment;
281186507a7Smyers     UINT16                          AddressLength;
2827c478bd9Sstevel@tonic-gate 
283186507a7Smyers } AML_RESOURCE_MEMORY24;
2847c478bd9Sstevel@tonic-gate 
2857c478bd9Sstevel@tonic-gate 
286186507a7Smyers typedef struct aml_resource_vendor_large
2877c478bd9Sstevel@tonic-gate {
288186507a7Smyers     AML_RESOURCE_LARGE_HEADER_COMMON
2897c478bd9Sstevel@tonic-gate 
290186507a7Smyers } AML_RESOURCE_VENDOR_LARGE;
2917c478bd9Sstevel@tonic-gate 
2927c478bd9Sstevel@tonic-gate 
293186507a7Smyers typedef struct aml_resource_memory32
2947c478bd9Sstevel@tonic-gate {
295186507a7Smyers     AML_RESOURCE_LARGE_HEADER_COMMON
29630082d0cSmyers     UINT8                           Flags;
297186507a7Smyers     UINT32                          Minimum;
298186507a7Smyers     UINT32                          Maximum;
2997c478bd9Sstevel@tonic-gate     UINT32                          Alignment;
300186507a7Smyers     UINT32                          AddressLength;
3017c478bd9Sstevel@tonic-gate 
302186507a7Smyers } AML_RESOURCE_MEMORY32;
3037c478bd9Sstevel@tonic-gate 
3047c478bd9Sstevel@tonic-gate 
305186507a7Smyers typedef struct aml_resource_fixed_memory32
3067c478bd9Sstevel@tonic-gate {
307186507a7Smyers     AML_RESOURCE_LARGE_HEADER_COMMON
30830082d0cSmyers     UINT8                           Flags;
309186507a7Smyers     UINT32                          Address;
310186507a7Smyers     UINT32                          AddressLength;
3117c478bd9Sstevel@tonic-gate 
312186507a7Smyers } AML_RESOURCE_FIXED_MEMORY32;
3137c478bd9Sstevel@tonic-gate 
3147c478bd9Sstevel@tonic-gate 
315186507a7Smyers #define AML_RESOURCE_ADDRESS_COMMON \
316186507a7Smyers     UINT8                           ResourceType; \
317186507a7Smyers     UINT8                           Flags; \
3187c478bd9Sstevel@tonic-gate     UINT8                           SpecificFlags;
319186507a7Smyers 
320186507a7Smyers 
321186507a7Smyers typedef struct aml_resource_address
322186507a7Smyers {
323186507a7Smyers     AML_RESOURCE_LARGE_HEADER_COMMON
324186507a7Smyers     AML_RESOURCE_ADDRESS_COMMON
325186507a7Smyers 
326186507a7Smyers } AML_RESOURCE_ADDRESS;
327186507a7Smyers 
328186507a7Smyers 
329186507a7Smyers typedef struct aml_resource_extended_address64
330186507a7Smyers {
331186507a7Smyers     AML_RESOURCE_LARGE_HEADER_COMMON
332186507a7Smyers     AML_RESOURCE_ADDRESS_COMMON
3337c478bd9Sstevel@tonic-gate     UINT8                           RevisionID;
3347c478bd9Sstevel@tonic-gate     UINT8                           Reserved;
3357c478bd9Sstevel@tonic-gate     UINT64                          Granularity;
336186507a7Smyers     UINT64                          Minimum;
337186507a7Smyers     UINT64                          Maximum;
3387c478bd9Sstevel@tonic-gate     UINT64                          TranslationOffset;
3397c478bd9Sstevel@tonic-gate     UINT64                          AddressLength;
34030082d0cSmyers     UINT64                          TypeSpecific;
3417c478bd9Sstevel@tonic-gate 
342186507a7Smyers } AML_RESOURCE_EXTENDED_ADDRESS64;
3437c478bd9Sstevel@tonic-gate 
344186507a7Smyers #define AML_RESOURCE_EXTENDED_ADDRESS_REVISION          1       /* ACPI 3.0 */
3457c478bd9Sstevel@tonic-gate 
3467c478bd9Sstevel@tonic-gate 
347186507a7Smyers typedef struct aml_resource_address64
3487c478bd9Sstevel@tonic-gate {
349186507a7Smyers     AML_RESOURCE_LARGE_HEADER_COMMON
350186507a7Smyers     AML_RESOURCE_ADDRESS_COMMON
3517c478bd9Sstevel@tonic-gate     UINT64                          Granularity;
352186507a7Smyers     UINT64                          Minimum;
353186507a7Smyers     UINT64                          Maximum;
3547c478bd9Sstevel@tonic-gate     UINT64                          TranslationOffset;
3557c478bd9Sstevel@tonic-gate     UINT64                          AddressLength;
3567c478bd9Sstevel@tonic-gate 
357186507a7Smyers } AML_RESOURCE_ADDRESS64;
3587c478bd9Sstevel@tonic-gate 
3597c478bd9Sstevel@tonic-gate 
360186507a7Smyers typedef struct aml_resource_address32
3617c478bd9Sstevel@tonic-gate {
362186507a7Smyers     AML_RESOURCE_LARGE_HEADER_COMMON
363186507a7Smyers     AML_RESOURCE_ADDRESS_COMMON
3647c478bd9Sstevel@tonic-gate     UINT32                          Granularity;
365186507a7Smyers     UINT32                          Minimum;
366186507a7Smyers     UINT32                          Maximum;
3677c478bd9Sstevel@tonic-gate     UINT32                          TranslationOffset;
3687c478bd9Sstevel@tonic-gate     UINT32                          AddressLength;
3697c478bd9Sstevel@tonic-gate 
370186507a7Smyers } AML_RESOURCE_ADDRESS32;
3717c478bd9Sstevel@tonic-gate 
3727c478bd9Sstevel@tonic-gate 
373186507a7Smyers typedef struct aml_resource_address16
3747c478bd9Sstevel@tonic-gate {
375186507a7Smyers     AML_RESOURCE_LARGE_HEADER_COMMON
376186507a7Smyers     AML_RESOURCE_ADDRESS_COMMON
3777c478bd9Sstevel@tonic-gate     UINT16                          Granularity;
378186507a7Smyers     UINT16                          Minimum;
379186507a7Smyers     UINT16                          Maximum;
3807c478bd9Sstevel@tonic-gate     UINT16                          TranslationOffset;
3817c478bd9Sstevel@tonic-gate     UINT16                          AddressLength;
3827c478bd9Sstevel@tonic-gate 
383186507a7Smyers } AML_RESOURCE_ADDRESS16;
3847c478bd9Sstevel@tonic-gate 
3857c478bd9Sstevel@tonic-gate 
386186507a7Smyers typedef struct aml_resource_extended_irq
3877c478bd9Sstevel@tonic-gate {
388186507a7Smyers     AML_RESOURCE_LARGE_HEADER_COMMON
3897c478bd9Sstevel@tonic-gate     UINT8                           Flags;
39030082d0cSmyers     UINT8                           InterruptCount;
39130082d0cSmyers     UINT32                          Interrupts[1];
3927c478bd9Sstevel@tonic-gate     /* ResSourceIndex, ResSource optional fields follow */
3937c478bd9Sstevel@tonic-gate 
394186507a7Smyers } AML_RESOURCE_EXTENDED_IRQ;
3957c478bd9Sstevel@tonic-gate 
3967c478bd9Sstevel@tonic-gate 
397186507a7Smyers typedef struct aml_resource_generic_register
3987c478bd9Sstevel@tonic-gate {
399186507a7Smyers     AML_RESOURCE_LARGE_HEADER_COMMON
4007c478bd9Sstevel@tonic-gate     UINT8                           AddressSpaceId;
4017c478bd9Sstevel@tonic-gate     UINT8                           BitWidth;
4027c478bd9Sstevel@tonic-gate     UINT8                           BitOffset;
403186507a7Smyers     UINT8                           AccessSize; /* ACPI 3.0, was previously Reserved */
4047c478bd9Sstevel@tonic-gate     UINT64                          Address;
4057c478bd9Sstevel@tonic-gate 
406186507a7Smyers } AML_RESOURCE_GENERIC_REGISTER;
4077c478bd9Sstevel@tonic-gate 
408*cb565728SJerry Jelinek 
409*cb565728SJerry Jelinek /* Common descriptor for GpioInt and GpioIo (ACPI 5.0) */
410*cb565728SJerry Jelinek 
411*cb565728SJerry Jelinek typedef struct aml_resource_gpio
412*cb565728SJerry Jelinek {
413*cb565728SJerry Jelinek     AML_RESOURCE_LARGE_HEADER_COMMON
414*cb565728SJerry Jelinek     UINT8                           RevisionId;
415*cb565728SJerry Jelinek     UINT8                           ConnectionType;
416*cb565728SJerry Jelinek     UINT16                          Flags;
417*cb565728SJerry Jelinek     UINT16                          IntFlags;
418*cb565728SJerry Jelinek     UINT8                           PinConfig;
419*cb565728SJerry Jelinek     UINT16                          DriveStrength;
420*cb565728SJerry Jelinek     UINT16                          DebounceTimeout;
421*cb565728SJerry Jelinek     UINT16                          PinTableOffset;
422*cb565728SJerry Jelinek     UINT8                           ResSourceIndex;
423*cb565728SJerry Jelinek     UINT16                          ResSourceOffset;
424*cb565728SJerry Jelinek     UINT16                          VendorOffset;
425*cb565728SJerry Jelinek     UINT16                          VendorLength;
426*cb565728SJerry Jelinek     /*
427*cb565728SJerry Jelinek      * Optional fields follow immediately:
428*cb565728SJerry Jelinek      * 1) PIN list (Words)
429*cb565728SJerry Jelinek      * 2) Resource Source String
430*cb565728SJerry Jelinek      * 3) Vendor Data bytes
431*cb565728SJerry Jelinek      */
432*cb565728SJerry Jelinek 
433*cb565728SJerry Jelinek } AML_RESOURCE_GPIO;
434*cb565728SJerry Jelinek 
435*cb565728SJerry Jelinek #define AML_RESOURCE_GPIO_REVISION              1       /* ACPI 5.0 */
436*cb565728SJerry Jelinek 
437*cb565728SJerry Jelinek /* Values for ConnectionType above */
438*cb565728SJerry Jelinek 
439*cb565728SJerry Jelinek #define AML_RESOURCE_GPIO_TYPE_INT              0
440*cb565728SJerry Jelinek #define AML_RESOURCE_GPIO_TYPE_IO               1
441*cb565728SJerry Jelinek #define AML_RESOURCE_MAX_GPIOTYPE               1
442*cb565728SJerry Jelinek 
443*cb565728SJerry Jelinek 
444*cb565728SJerry Jelinek /* Common preamble for all serial descriptors (ACPI 5.0) */
445*cb565728SJerry Jelinek 
446*cb565728SJerry Jelinek #define AML_RESOURCE_SERIAL_COMMON \
447*cb565728SJerry Jelinek     UINT8                           RevisionId; \
448*cb565728SJerry Jelinek     UINT8                           ResSourceIndex; \
449*cb565728SJerry Jelinek     UINT8                           Type; \
450*cb565728SJerry Jelinek     UINT8                           Flags; \
451*cb565728SJerry Jelinek     UINT16                          TypeSpecificFlags; \
452*cb565728SJerry Jelinek     UINT8                           TypeRevisionId; \
453*cb565728SJerry Jelinek     UINT16                          TypeDataLength; \
454*cb565728SJerry Jelinek 
455*cb565728SJerry Jelinek /* Values for the type field above */
456*cb565728SJerry Jelinek 
457*cb565728SJerry Jelinek #define AML_RESOURCE_I2C_SERIALBUSTYPE          1
458*cb565728SJerry Jelinek #define AML_RESOURCE_SPI_SERIALBUSTYPE          2
459*cb565728SJerry Jelinek #define AML_RESOURCE_UART_SERIALBUSTYPE         3
460*cb565728SJerry Jelinek #define AML_RESOURCE_MAX_SERIALBUSTYPE          3
461*cb565728SJerry Jelinek #define AML_RESOURCE_VENDOR_SERIALBUSTYPE       192 /* Vendor defined is 0xC0-0xFF (NOT SUPPORTED) */
462*cb565728SJerry Jelinek 
463*cb565728SJerry Jelinek typedef struct aml_resource_common_serialbus
464*cb565728SJerry Jelinek {
465*cb565728SJerry Jelinek     AML_RESOURCE_LARGE_HEADER_COMMON
466*cb565728SJerry Jelinek     AML_RESOURCE_SERIAL_COMMON
467*cb565728SJerry Jelinek 
468*cb565728SJerry Jelinek } AML_RESOURCE_COMMON_SERIALBUS;
469*cb565728SJerry Jelinek 
470*cb565728SJerry Jelinek typedef struct aml_resource_i2c_serialbus
471*cb565728SJerry Jelinek {
472*cb565728SJerry Jelinek     AML_RESOURCE_LARGE_HEADER_COMMON
473*cb565728SJerry Jelinek     AML_RESOURCE_SERIAL_COMMON
474*cb565728SJerry Jelinek     UINT32                          ConnectionSpeed;
475*cb565728SJerry Jelinek     UINT16                          SlaveAddress;
476*cb565728SJerry Jelinek     /*
477*cb565728SJerry Jelinek      * Optional fields follow immediately:
478*cb565728SJerry Jelinek      * 1) Vendor Data bytes
479*cb565728SJerry Jelinek      * 2) Resource Source String
480*cb565728SJerry Jelinek      */
481*cb565728SJerry Jelinek 
482*cb565728SJerry Jelinek } AML_RESOURCE_I2C_SERIALBUS;
483*cb565728SJerry Jelinek 
484*cb565728SJerry Jelinek #define AML_RESOURCE_I2C_REVISION               1       /* ACPI 5.0 */
485*cb565728SJerry Jelinek #define AML_RESOURCE_I2C_TYPE_REVISION          1       /* ACPI 5.0 */
486*cb565728SJerry Jelinek #define AML_RESOURCE_I2C_MIN_DATA_LEN           6
487*cb565728SJerry Jelinek 
488*cb565728SJerry Jelinek typedef struct aml_resource_spi_serialbus
489*cb565728SJerry Jelinek {
490*cb565728SJerry Jelinek     AML_RESOURCE_LARGE_HEADER_COMMON
491*cb565728SJerry Jelinek     AML_RESOURCE_SERIAL_COMMON
492*cb565728SJerry Jelinek     UINT32                          ConnectionSpeed;
493*cb565728SJerry Jelinek     UINT8                           DataBitLength;
494*cb565728SJerry Jelinek     UINT8                           ClockPhase;
495*cb565728SJerry Jelinek     UINT8                           ClockPolarity;
496*cb565728SJerry Jelinek     UINT16                          DeviceSelection;
497*cb565728SJerry Jelinek     /*
498*cb565728SJerry Jelinek      * Optional fields follow immediately:
499*cb565728SJerry Jelinek      * 1) Vendor Data bytes
500*cb565728SJerry Jelinek      * 2) Resource Source String
501*cb565728SJerry Jelinek      */
502*cb565728SJerry Jelinek 
503*cb565728SJerry Jelinek } AML_RESOURCE_SPI_SERIALBUS;
504*cb565728SJerry Jelinek 
505*cb565728SJerry Jelinek #define AML_RESOURCE_SPI_REVISION               1       /* ACPI 5.0 */
506*cb565728SJerry Jelinek #define AML_RESOURCE_SPI_TYPE_REVISION          1       /* ACPI 5.0 */
507*cb565728SJerry Jelinek #define AML_RESOURCE_SPI_MIN_DATA_LEN           9
508*cb565728SJerry Jelinek 
509*cb565728SJerry Jelinek 
510*cb565728SJerry Jelinek typedef struct aml_resource_uart_serialbus
511*cb565728SJerry Jelinek {
512*cb565728SJerry Jelinek     AML_RESOURCE_LARGE_HEADER_COMMON
513*cb565728SJerry Jelinek     AML_RESOURCE_SERIAL_COMMON
514*cb565728SJerry Jelinek     UINT32                          DefaultBaudRate;
515*cb565728SJerry Jelinek     UINT16                          RxFifoSize;
516*cb565728SJerry Jelinek     UINT16                          TxFifoSize;
517*cb565728SJerry Jelinek     UINT8                           Parity;
518*cb565728SJerry Jelinek     UINT8                           LinesEnabled;
519*cb565728SJerry Jelinek     /*
520*cb565728SJerry Jelinek      * Optional fields follow immediately:
521*cb565728SJerry Jelinek      * 1) Vendor Data bytes
522*cb565728SJerry Jelinek      * 2) Resource Source String
523*cb565728SJerry Jelinek      */
524*cb565728SJerry Jelinek 
525*cb565728SJerry Jelinek } AML_RESOURCE_UART_SERIALBUS;
526*cb565728SJerry Jelinek 
527*cb565728SJerry Jelinek #define AML_RESOURCE_UART_REVISION              1       /* ACPI 5.0 */
528*cb565728SJerry Jelinek #define AML_RESOURCE_UART_TYPE_REVISION         1       /* ACPI 5.0 */
529*cb565728SJerry Jelinek #define AML_RESOURCE_UART_MIN_DATA_LEN          10
530*cb565728SJerry Jelinek 
531*cb565728SJerry Jelinek 
5327c478bd9Sstevel@tonic-gate /* restore default alignment */
5337c478bd9Sstevel@tonic-gate 
5347c478bd9Sstevel@tonic-gate #pragma pack()
5357c478bd9Sstevel@tonic-gate 
5367c478bd9Sstevel@tonic-gate /* Union of all resource descriptors, so we can allocate the worst case */
5377c478bd9Sstevel@tonic-gate 
538186507a7Smyers typedef union aml_resource
5397c478bd9Sstevel@tonic-gate {
540186507a7Smyers     /* Descriptor headers */
5417c478bd9Sstevel@tonic-gate 
54227f7c583Smyers     UINT8                                   DescriptorType;
543186507a7Smyers     AML_RESOURCE_SMALL_HEADER               SmallHeader;
544186507a7Smyers     AML_RESOURCE_LARGE_HEADER               LargeHeader;
545186507a7Smyers 
546186507a7Smyers     /* Small resource descriptors */
547186507a7Smyers 
548186507a7Smyers     AML_RESOURCE_IRQ                        Irq;
549186507a7Smyers     AML_RESOURCE_DMA                        Dma;
550186507a7Smyers     AML_RESOURCE_START_DEPENDENT            StartDpf;
551186507a7Smyers     AML_RESOURCE_END_DEPENDENT              EndDpf;
552186507a7Smyers     AML_RESOURCE_IO                         Io;
553186507a7Smyers     AML_RESOURCE_FIXED_IO                   FixedIo;
554*cb565728SJerry Jelinek     AML_RESOURCE_FIXED_DMA                  FixedDma;
555186507a7Smyers     AML_RESOURCE_VENDOR_SMALL               VendorSmall;
556186507a7Smyers     AML_RESOURCE_END_TAG                    EndTag;
557186507a7Smyers 
558186507a7Smyers     /* Large resource descriptors */
559186507a7Smyers 
560186507a7Smyers     AML_RESOURCE_MEMORY24                   Memory24;
561186507a7Smyers     AML_RESOURCE_GENERIC_REGISTER           GenericReg;
562186507a7Smyers     AML_RESOURCE_VENDOR_LARGE               VendorLarge;
563186507a7Smyers     AML_RESOURCE_MEMORY32                   Memory32;
564186507a7Smyers     AML_RESOURCE_FIXED_MEMORY32             FixedMemory32;
565186507a7Smyers     AML_RESOURCE_ADDRESS16                  Address16;
566186507a7Smyers     AML_RESOURCE_ADDRESS32                  Address32;
567186507a7Smyers     AML_RESOURCE_ADDRESS64                  Address64;
568186507a7Smyers     AML_RESOURCE_EXTENDED_ADDRESS64         ExtAddress64;
569186507a7Smyers     AML_RESOURCE_EXTENDED_IRQ               ExtendedIrq;
570*cb565728SJerry Jelinek     AML_RESOURCE_GPIO                       Gpio;
571*cb565728SJerry Jelinek     AML_RESOURCE_I2C_SERIALBUS              I2cSerialBus;
572*cb565728SJerry Jelinek     AML_RESOURCE_SPI_SERIALBUS              SpiSerialBus;
573*cb565728SJerry Jelinek     AML_RESOURCE_UART_SERIALBUS             UartSerialBus;
574*cb565728SJerry Jelinek     AML_RESOURCE_COMMON_SERIALBUS           CommonSerialBus;
575186507a7Smyers 
576186507a7Smyers     /* Utility overlays */
577186507a7Smyers 
578186507a7Smyers     AML_RESOURCE_ADDRESS                    Address;
57927f7c583Smyers     UINT32                                  DwordItem;
58027f7c583Smyers     UINT16                                  WordItem;
58127f7c583Smyers     UINT8                                   ByteItem;
5827c478bd9Sstevel@tonic-gate 
583186507a7Smyers } AML_RESOURCE;
5847c478bd9Sstevel@tonic-gate 
5857c478bd9Sstevel@tonic-gate 
586*cb565728SJerry Jelinek /* Interfaces used by both the disassembler and compiler */
587*cb565728SJerry Jelinek 
588*cb565728SJerry Jelinek void
589*cb565728SJerry Jelinek MpSaveGpioInfo (
590*cb565728SJerry Jelinek     ACPI_PARSE_OBJECT       *Op,
591*cb565728SJerry Jelinek     AML_RESOURCE            *Resource,
592*cb565728SJerry Jelinek     UINT32                  PinCount,
593*cb565728SJerry Jelinek     UINT16                  *PinList,
594*cb565728SJerry Jelinek     char                    *DeviceName);
595*cb565728SJerry Jelinek 
596*cb565728SJerry Jelinek void
597*cb565728SJerry Jelinek MpSaveSerialInfo (
598*cb565728SJerry Jelinek     ACPI_PARSE_OBJECT       *Op,
599*cb565728SJerry Jelinek     AML_RESOURCE            *Resource,
600*cb565728SJerry Jelinek     char                    *DeviceName);
601*cb565728SJerry Jelinek 
602*cb565728SJerry Jelinek char *
603*cb565728SJerry Jelinek MpGetHidFromParseTree (
604*cb565728SJerry Jelinek     ACPI_NAMESPACE_NODE     *HidNode);
605*cb565728SJerry Jelinek 
606*cb565728SJerry Jelinek char *
607*cb565728SJerry Jelinek MpGetHidViaNamestring (
608*cb565728SJerry Jelinek     char                    *DeviceName);
609*cb565728SJerry Jelinek 
610*cb565728SJerry Jelinek char *
611*cb565728SJerry Jelinek MpGetConnectionInfo (
612*cb565728SJerry Jelinek     ACPI_PARSE_OBJECT       *Op,
613*cb565728SJerry Jelinek     UINT32                  PinIndex,
614*cb565728SJerry Jelinek     ACPI_NAMESPACE_NODE     **TargetNode,
615*cb565728SJerry Jelinek     char                    **TargetName);
616*cb565728SJerry Jelinek 
617*cb565728SJerry Jelinek char *
618*cb565728SJerry Jelinek MpGetParentDeviceHid (
619*cb565728SJerry Jelinek     ACPI_PARSE_OBJECT       *Op,
620*cb565728SJerry Jelinek     ACPI_NAMESPACE_NODE     **TargetNode,
621*cb565728SJerry Jelinek     char                    **ParentDeviceName);
622*cb565728SJerry Jelinek 
623*cb565728SJerry Jelinek char *
624*cb565728SJerry Jelinek MpGetDdnValue (
625*cb565728SJerry Jelinek     char                    *DeviceName);
626*cb565728SJerry Jelinek 
627*cb565728SJerry Jelinek char *
628*cb565728SJerry Jelinek MpGetHidValue (
629*cb565728SJerry Jelinek     ACPI_NAMESPACE_NODE     *DeviceNode);
630*cb565728SJerry Jelinek 
631*cb565728SJerry Jelinek #endif
632