1/******************************************************************************
2 *
3 * Module Name: amlresrc.h - AML resource descriptors
4 *
5 *****************************************************************************/
6
7/******************************************************************************
8 *
9 * 1. Copyright Notice
10 *
11 * Some or all of this work - Copyright (c) 1999 - 2018, Intel Corp.
12 * All rights reserved.
13 *
14 * 2. License
15 *
16 * 2.1. This is your license from Intel Corp. under its intellectual property
17 * rights. You may have additional license terms from the party that provided
18 * you this software, covering your right to use that party's intellectual
19 * property rights.
20 *
21 * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a
22 * copy of the source code appearing in this file ("Covered Code") an
23 * irrevocable, perpetual, worldwide license under Intel's copyrights in the
24 * base code distributed originally by Intel ("Original Intel Code") to copy,
25 * make derivatives, distribute, use and display any portion of the Covered
26 * Code in any form, with the right to sublicense such rights; and
27 *
28 * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent
29 * license (with the right to sublicense), under only those claims of Intel
30 * patents that are infringed by the Original Intel Code, to make, use, sell,
31 * offer to sell, and import the Covered Code and derivative works thereof
32 * solely to the minimum extent necessary to exercise the above copyright
33 * license, and in no event shall the patent license extend to any additions
34 * to or modifications of the Original Intel Code. No other license or right
35 * is granted directly or by implication, estoppel or otherwise;
36 *
37 * The above copyright and patent license is granted only if the following
38 * conditions are met:
39 *
40 * 3. Conditions
41 *
42 * 3.1. Redistribution of Source with Rights to Further Distribute Source.
43 * Redistribution of source code of any substantial portion of the Covered
44 * Code or modification with rights to further distribute source must include
45 * the above Copyright Notice, the above License, this list of Conditions,
46 * and the following Disclaimer and Export Compliance provision. In addition,
47 * Licensee must cause all Covered Code to which Licensee contributes to
48 * contain a file documenting the changes Licensee made to create that Covered
49 * Code and the date of any change. Licensee must include in that file the
50 * documentation of any changes made by any predecessor Licensee. Licensee
51 * must include a prominent statement that the modification is derived,
52 * directly or indirectly, from Original Intel Code.
53 *
54 * 3.2. Redistribution of Source with no Rights to Further Distribute Source.
55 * Redistribution of source code of any substantial portion of the Covered
56 * Code or modification without rights to further distribute source must
57 * include the following Disclaimer and Export Compliance provision in the
58 * documentation and/or other materials provided with distribution. In
59 * addition, Licensee may not authorize further sublicense of source of any
60 * portion of the Covered Code, and must include terms to the effect that the
61 * license from Licensee to its licensee is limited to the intellectual
62 * property embodied in the software Licensee provides to its licensee, and
63 * not to intellectual property embodied in modifications its licensee may
64 * make.
65 *
66 * 3.3. Redistribution of Executable. Redistribution in executable form of any
67 * substantial portion of the Covered Code or modification must reproduce the
68 * above Copyright Notice, and the following Disclaimer and Export Compliance
69 * provision in the documentation and/or other materials provided with the
70 * distribution.
71 *
72 * 3.4. Intel retains all right, title, and interest in and to the Original
73 * Intel Code.
74 *
75 * 3.5. Neither the name Intel nor any other trademark owned or controlled by
76 * Intel shall be used in advertising or otherwise to promote the sale, use or
77 * other dealings in products derived from or relating to the Covered Code
78 * without prior written authorization from Intel.
79 *
80 * 4. Disclaimer and Export Compliance
81 *
82 * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED
83 * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE
84 * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE,
85 * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY
86 * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY
87 * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A
88 * PARTICULAR PURPOSE.
89 *
90 * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES
91 * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR
92 * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT,
93 * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY
94 * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL
95 * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS
96 * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY
97 * LIMITED REMEDY.
98 *
99 * 4.3. Licensee shall not export, either directly or indirectly, any of this
100 * software or system incorporating such software without first obtaining any
101 * required license or other approval from the U. S. Department of Commerce or
102 * any other agency or department of the United States Government. In the
103 * event Licensee exports any such software from the United States or
104 * re-exports any such software from a foreign destination, Licensee shall
105 * ensure that the distribution and export/re-export of the software is in
106 * compliance with all laws, regulations, orders, or other restrictions of the
107 * U.S. Export Administration Regulations. Licensee agrees that neither it nor
108 * any of its subsidiaries will export/re-export any technical data, process,
109 * software, or service, directly or indirectly, to any country for which the
110 * United States government or any agency thereof requires an export license,
111 * other governmental approval, or letter of assurance, without first obtaining
112 * such license, approval or letter.
113 *
114 *****************************************************************************
115 *
116 * Alternatively, you may choose to be licensed under the terms of the
117 * following license:
118 *
119 * Redistribution and use in source and binary forms, with or without
120 * modification, are permitted provided that the following conditions
121 * are met:
122 * 1. Redistributions of source code must retain the above copyright
123 *    notice, this list of conditions, and the following disclaimer,
124 *    without modification.
125 * 2. Redistributions in binary form must reproduce at minimum a disclaimer
126 *    substantially similar to the "NO WARRANTY" disclaimer below
127 *    ("Disclaimer") and any redistribution must be conditioned upon
128 *    including a substantially similar Disclaimer requirement for further
129 *    binary redistribution.
130 * 3. Neither the names of the above-listed copyright holders nor the names
131 *    of any contributors may be used to endorse or promote products derived
132 *    from this software without specific prior written permission.
133 *
134 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
135 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
136 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
137 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
138 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
139 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
140 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
141 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
142 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
143 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
144 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
145 *
146 * Alternatively, you may choose to be licensed under the terms of the
147 * GNU General Public License ("GPL") version 2 as published by the Free
148 * Software Foundation.
149 *
150 *****************************************************************************/
151
152/* acpisrc:StructDefs -- for acpisrc conversion */
153
154#ifndef __AMLRESRC_H
155#define __AMLRESRC_H
156
157
158/*
159 * Resource descriptor tags, as defined in the ACPI specification.
160 * Used to symbolically reference fields within a descriptor.
161 */
162#define ACPI_RESTAG_ADDRESS                     "_ADR"
163#define ACPI_RESTAG_ALIGNMENT                   "_ALN"
164#define ACPI_RESTAG_ADDRESSSPACE                "_ASI"
165#define ACPI_RESTAG_ACCESSSIZE                  "_ASZ"
166#define ACPI_RESTAG_TYPESPECIFICATTRIBUTES      "_ATT"
167#define ACPI_RESTAG_BASEADDRESS                 "_BAS"
168#define ACPI_RESTAG_BUSMASTER                   "_BM_"  /* Master(1), Slave(0) */
169#define ACPI_RESTAG_DEBOUNCETIME                "_DBT"
170#define ACPI_RESTAG_DECODE                      "_DEC"
171#define ACPI_RESTAG_DEVICEPOLARITY              "_DPL"
172#define ACPI_RESTAG_DMA                         "_DMA"
173#define ACPI_RESTAG_DMATYPE                     "_TYP"  /* Compatible(0), A(1), B(2), F(3) */
174#define ACPI_RESTAG_DRIVESTRENGTH               "_DRS"
175#define ACPI_RESTAG_ENDIANNESS                  "_END"
176#define ACPI_RESTAG_FLOWCONTROL                 "_FLC"
177#define ACPI_RESTAG_FUNCTION                    "_FUN"
178#define ACPI_RESTAG_GRANULARITY                 "_GRA"
179#define ACPI_RESTAG_INTERRUPT                   "_INT"
180#define ACPI_RESTAG_INTERRUPTLEVEL              "_LL_"  /* ActiveLo(1), ActiveHi(0) */
181#define ACPI_RESTAG_INTERRUPTSHARE              "_SHR"  /* Shareable(1), NoShare(0) */
182#define ACPI_RESTAG_INTERRUPTTYPE               "_HE_"  /* Edge(1), Level(0) */
183#define ACPI_RESTAG_IORESTRICTION               "_IOR"
184#define ACPI_RESTAG_LENGTH                      "_LEN"
185#define ACPI_RESTAG_LINE                        "_LIN"
186#define ACPI_RESTAG_MEMATTRIBUTES               "_MTP"  /* Memory(0), Reserved(1), ACPI(2), NVS(3) */
187#define ACPI_RESTAG_MEMTYPE                     "_MEM"  /* NonCache(0), Cacheable(1) Cache+combine(2), Cache+prefetch(3) */
188#define ACPI_RESTAG_MAXADDR                     "_MAX"
189#define ACPI_RESTAG_MINADDR                     "_MIN"
190#define ACPI_RESTAG_MAXTYPE                     "_MAF"
191#define ACPI_RESTAG_MINTYPE                     "_MIF"
192#define ACPI_RESTAG_MODE                        "_MOD"
193#define ACPI_RESTAG_PARITY                      "_PAR"
194#define ACPI_RESTAG_PHASE                       "_PHA"
195#define ACPI_RESTAG_PIN                         "_PIN"
196#define ACPI_RESTAG_PINCONFIG                   "_PPI"
197#define ACPI_RESTAG_PINCONFIG_TYPE              "_TYP"
198#define ACPI_RESTAG_PINCONFIG_VALUE             "_VAL"
199#define ACPI_RESTAG_POLARITY                    "_POL"
200#define ACPI_RESTAG_REGISTERBITOFFSET           "_RBO"
201#define ACPI_RESTAG_REGISTERBITWIDTH            "_RBW"
202#define ACPI_RESTAG_RANGETYPE                   "_RNG"
203#define ACPI_RESTAG_READWRITETYPE               "_RW_"  /* ReadOnly(0), Writeable (1) */
204#define ACPI_RESTAG_LENGTH_RX                   "_RXL"
205#define ACPI_RESTAG_LENGTH_TX                   "_TXL"
206#define ACPI_RESTAG_SLAVEMODE                   "_SLV"
207#define ACPI_RESTAG_SPEED                       "_SPE"
208#define ACPI_RESTAG_STOPBITS                    "_STB"
209#define ACPI_RESTAG_TRANSLATION                 "_TRA"
210#define ACPI_RESTAG_TRANSTYPE                   "_TRS"  /* Sparse(1), Dense(0) */
211#define ACPI_RESTAG_TYPE                        "_TTP"  /* Translation(1), Static (0) */
212#define ACPI_RESTAG_XFERTYPE                    "_SIZ"  /* 8(0), 8And16(1), 16(2) */
213#define ACPI_RESTAG_VENDORDATA                  "_VEN"
214
215
216/* Default sizes for "small" resource descriptors */
217
218#define ASL_RDESC_IRQ_SIZE                      0x02
219#define ASL_RDESC_DMA_SIZE                      0x02
220#define ASL_RDESC_ST_DEPEND_SIZE                0x00
221#define ASL_RDESC_END_DEPEND_SIZE               0x00
222#define ASL_RDESC_IO_SIZE                       0x07
223#define ASL_RDESC_FIXED_IO_SIZE                 0x03
224#define ASL_RDESC_FIXED_DMA_SIZE                0x05
225#define ASL_RDESC_END_TAG_SIZE                  0x01
226
227
228typedef struct asl_resource_node
229{
230    UINT32                          BufferLength;
231    void                            *Buffer;
232    struct asl_resource_node        *Next;
233
234} ASL_RESOURCE_NODE;
235
236typedef struct asl_resource_info
237{
238    ACPI_PARSE_OBJECT               *DescriptorTypeOp;  /* Resource descriptor parse node */
239    ACPI_PARSE_OBJECT               *MappingOp;         /* Used for mapfile support */
240    UINT32                          CurrentByteOffset;  /* Offset in resource template */
241
242} ASL_RESOURCE_INFO;
243
244
245/* Macros used to generate AML resource length fields */
246
247#define ACPI_AML_SIZE_LARGE(r)      (sizeof (r) - sizeof (AML_RESOURCE_LARGE_HEADER))
248#define ACPI_AML_SIZE_SMALL(r)      (sizeof (r) - sizeof (AML_RESOURCE_SMALL_HEADER))
249
250/*
251 * Resource descriptors defined in the ACPI specification.
252 *
253 * Packing/alignment must be BYTE because these descriptors
254 * are used to overlay the raw AML byte stream.
255 */
256#pragma pack(1)
257
258/*
259 * SMALL descriptors
260 */
261#define AML_RESOURCE_SMALL_HEADER_COMMON \
262    UINT8                           DescriptorType;
263
264typedef struct aml_resource_small_header
265{
266    AML_RESOURCE_SMALL_HEADER_COMMON
267
268} AML_RESOURCE_SMALL_HEADER;
269
270
271typedef struct aml_resource_irq
272{
273    AML_RESOURCE_SMALL_HEADER_COMMON
274    UINT16                          IrqMask;
275    UINT8                           Flags;
276
277} AML_RESOURCE_IRQ;
278
279
280typedef struct aml_resource_irq_noflags
281{
282    AML_RESOURCE_SMALL_HEADER_COMMON
283    UINT16                          IrqMask;
284
285} AML_RESOURCE_IRQ_NOFLAGS;
286
287
288typedef struct aml_resource_dma
289{
290    AML_RESOURCE_SMALL_HEADER_COMMON
291    UINT8                           DmaChannelMask;
292    UINT8                           Flags;
293
294} AML_RESOURCE_DMA;
295
296
297typedef struct aml_resource_start_dependent
298{
299    AML_RESOURCE_SMALL_HEADER_COMMON
300    UINT8                           Flags;
301
302} AML_RESOURCE_START_DEPENDENT;
303
304
305typedef struct aml_resource_start_dependent_noprio
306{
307    AML_RESOURCE_SMALL_HEADER_COMMON
308
309} AML_RESOURCE_START_DEPENDENT_NOPRIO;
310
311
312typedef struct aml_resource_end_dependent
313{
314    AML_RESOURCE_SMALL_HEADER_COMMON
315
316} AML_RESOURCE_END_DEPENDENT;
317
318
319typedef struct aml_resource_io
320{
321    AML_RESOURCE_SMALL_HEADER_COMMON
322    UINT8                           Flags;
323    UINT16                          Minimum;
324    UINT16                          Maximum;
325    UINT8                           Alignment;
326    UINT8                           AddressLength;
327
328} AML_RESOURCE_IO;
329
330
331typedef struct aml_resource_fixed_io
332{
333    AML_RESOURCE_SMALL_HEADER_COMMON
334    UINT16                          Address;
335    UINT8                           AddressLength;
336
337} AML_RESOURCE_FIXED_IO;
338
339
340typedef struct aml_resource_vendor_small
341{
342    AML_RESOURCE_SMALL_HEADER_COMMON
343
344} AML_RESOURCE_VENDOR_SMALL;
345
346
347typedef struct aml_resource_end_tag
348{
349    AML_RESOURCE_SMALL_HEADER_COMMON
350    UINT8                           Checksum;
351
352} AML_RESOURCE_END_TAG;
353
354
355typedef struct aml_resource_fixed_dma
356{
357    AML_RESOURCE_SMALL_HEADER_COMMON
358    UINT16                          RequestLines;
359    UINT16                          Channels;
360    UINT8                           Width;
361
362} AML_RESOURCE_FIXED_DMA;
363
364
365/*
366 * LARGE descriptors
367 */
368#define AML_RESOURCE_LARGE_HEADER_COMMON \
369    UINT8                           DescriptorType;\
370    UINT16                          ResourceLength;
371
372typedef struct aml_resource_large_header
373{
374    AML_RESOURCE_LARGE_HEADER_COMMON
375
376} AML_RESOURCE_LARGE_HEADER;
377
378
379/* General Flags for address space resource descriptors */
380
381#define ACPI_RESOURCE_FLAG_DEC      2
382#define ACPI_RESOURCE_FLAG_MIF      4
383#define ACPI_RESOURCE_FLAG_MAF      8
384
385typedef struct aml_resource_memory24
386{
387    AML_RESOURCE_LARGE_HEADER_COMMON
388    UINT8                           Flags;
389    UINT16                          Minimum;
390    UINT16                          Maximum;
391    UINT16                          Alignment;
392    UINT16                          AddressLength;
393
394} AML_RESOURCE_MEMORY24;
395
396
397typedef struct aml_resource_vendor_large
398{
399    AML_RESOURCE_LARGE_HEADER_COMMON
400
401} AML_RESOURCE_VENDOR_LARGE;
402
403
404typedef struct aml_resource_memory32
405{
406    AML_RESOURCE_LARGE_HEADER_COMMON
407    UINT8                           Flags;
408    UINT32                          Minimum;
409    UINT32                          Maximum;
410    UINT32                          Alignment;
411    UINT32                          AddressLength;
412
413} AML_RESOURCE_MEMORY32;
414
415
416typedef struct aml_resource_fixed_memory32
417{
418    AML_RESOURCE_LARGE_HEADER_COMMON
419    UINT8                           Flags;
420    UINT32                          Address;
421    UINT32                          AddressLength;
422
423} AML_RESOURCE_FIXED_MEMORY32;
424
425
426#define AML_RESOURCE_ADDRESS_COMMON \
427    UINT8                           ResourceType; \
428    UINT8                           Flags; \
429    UINT8                           SpecificFlags;
430
431
432typedef struct aml_resource_address
433{
434    AML_RESOURCE_LARGE_HEADER_COMMON
435    AML_RESOURCE_ADDRESS_COMMON
436
437} AML_RESOURCE_ADDRESS;
438
439
440typedef struct aml_resource_extended_address64
441{
442    AML_RESOURCE_LARGE_HEADER_COMMON
443    AML_RESOURCE_ADDRESS_COMMON
444    UINT8                           RevisionID;
445    UINT8                           Reserved;
446    UINT64                          Granularity;
447    UINT64                          Minimum;
448    UINT64                          Maximum;
449    UINT64                          TranslationOffset;
450    UINT64                          AddressLength;
451    UINT64                          TypeSpecific;
452
453} AML_RESOURCE_EXTENDED_ADDRESS64;
454
455#define AML_RESOURCE_EXTENDED_ADDRESS_REVISION          1       /* ACPI 3.0 */
456
457
458typedef struct aml_resource_address64
459{
460    AML_RESOURCE_LARGE_HEADER_COMMON
461    AML_RESOURCE_ADDRESS_COMMON
462    UINT64                          Granularity;
463    UINT64                          Minimum;
464    UINT64                          Maximum;
465    UINT64                          TranslationOffset;
466    UINT64                          AddressLength;
467
468} AML_RESOURCE_ADDRESS64;
469
470
471typedef struct aml_resource_address32
472{
473    AML_RESOURCE_LARGE_HEADER_COMMON
474    AML_RESOURCE_ADDRESS_COMMON
475    UINT32                          Granularity;
476    UINT32                          Minimum;
477    UINT32                          Maximum;
478    UINT32                          TranslationOffset;
479    UINT32                          AddressLength;
480
481} AML_RESOURCE_ADDRESS32;
482
483
484typedef struct aml_resource_address16
485{
486    AML_RESOURCE_LARGE_HEADER_COMMON
487    AML_RESOURCE_ADDRESS_COMMON
488    UINT16                          Granularity;
489    UINT16                          Minimum;
490    UINT16                          Maximum;
491    UINT16                          TranslationOffset;
492    UINT16                          AddressLength;
493
494} AML_RESOURCE_ADDRESS16;
495
496
497typedef struct aml_resource_extended_irq
498{
499    AML_RESOURCE_LARGE_HEADER_COMMON
500    UINT8                           Flags;
501    UINT8                           InterruptCount;
502    UINT32                          Interrupts[1];
503    /* ResSourceIndex, ResSource optional fields follow */
504
505} AML_RESOURCE_EXTENDED_IRQ;
506
507
508typedef struct aml_resource_generic_register
509{
510    AML_RESOURCE_LARGE_HEADER_COMMON
511    UINT8                           AddressSpaceId;
512    UINT8                           BitWidth;
513    UINT8                           BitOffset;
514    UINT8                           AccessSize; /* ACPI 3.0, was previously Reserved */
515    UINT64                          Address;
516
517} AML_RESOURCE_GENERIC_REGISTER;
518
519
520/* Common descriptor for GpioInt and GpioIo (ACPI 5.0) */
521
522typedef struct aml_resource_gpio
523{
524    AML_RESOURCE_LARGE_HEADER_COMMON
525    UINT8                           RevisionId;
526    UINT8                           ConnectionType;
527    UINT16                          Flags;
528    UINT16                          IntFlags;
529    UINT8                           PinConfig;
530    UINT16                          DriveStrength;
531    UINT16                          DebounceTimeout;
532    UINT16                          PinTableOffset;
533    UINT8                           ResSourceIndex;
534    UINT16                          ResSourceOffset;
535    UINT16                          VendorOffset;
536    UINT16                          VendorLength;
537    /*
538     * Optional fields follow immediately:
539     * 1) PIN list (Words)
540     * 2) Resource Source String
541     * 3) Vendor Data bytes
542     */
543
544} AML_RESOURCE_GPIO;
545
546#define AML_RESOURCE_GPIO_REVISION              1       /* ACPI 5.0 */
547
548/* Values for ConnectionType above */
549
550#define AML_RESOURCE_GPIO_TYPE_INT              0
551#define AML_RESOURCE_GPIO_TYPE_IO               1
552#define AML_RESOURCE_MAX_GPIOTYPE               1
553
554
555/* Common preamble for all serial descriptors (ACPI 5.0) */
556
557#define AML_RESOURCE_SERIAL_COMMON \
558    UINT8                           RevisionId; \
559    UINT8                           ResSourceIndex; \
560    UINT8                           Type; \
561    UINT8                           Flags; \
562    UINT16                          TypeSpecificFlags; \
563    UINT8                           TypeRevisionId; \
564    UINT16                          TypeDataLength; \
565
566/* Values for the type field above */
567
568#define AML_RESOURCE_I2C_SERIALBUSTYPE          1
569#define AML_RESOURCE_SPI_SERIALBUSTYPE          2
570#define AML_RESOURCE_UART_SERIALBUSTYPE         3
571#define AML_RESOURCE_MAX_SERIALBUSTYPE          3
572#define AML_RESOURCE_VENDOR_SERIALBUSTYPE       192 /* Vendor defined is 0xC0-0xFF (NOT SUPPORTED) */
573
574typedef struct aml_resource_common_serialbus
575{
576    AML_RESOURCE_LARGE_HEADER_COMMON
577    AML_RESOURCE_SERIAL_COMMON
578
579} AML_RESOURCE_COMMON_SERIALBUS;
580
581typedef struct aml_resource_i2c_serialbus
582{
583    AML_RESOURCE_LARGE_HEADER_COMMON
584    AML_RESOURCE_SERIAL_COMMON
585    UINT32                          ConnectionSpeed;
586    UINT16                          SlaveAddress;
587    /*
588     * Optional fields follow immediately:
589     * 1) Vendor Data bytes
590     * 2) Resource Source String
591     */
592
593} AML_RESOURCE_I2C_SERIALBUS;
594
595#define AML_RESOURCE_I2C_REVISION               1       /* ACPI 5.0 */
596#define AML_RESOURCE_I2C_TYPE_REVISION          1       /* ACPI 5.0 */
597#define AML_RESOURCE_I2C_MIN_DATA_LEN           6
598
599typedef struct aml_resource_spi_serialbus
600{
601    AML_RESOURCE_LARGE_HEADER_COMMON
602    AML_RESOURCE_SERIAL_COMMON
603    UINT32                          ConnectionSpeed;
604    UINT8                           DataBitLength;
605    UINT8                           ClockPhase;
606    UINT8                           ClockPolarity;
607    UINT16                          DeviceSelection;
608    /*
609     * Optional fields follow immediately:
610     * 1) Vendor Data bytes
611     * 2) Resource Source String
612     */
613
614} AML_RESOURCE_SPI_SERIALBUS;
615
616#define AML_RESOURCE_SPI_REVISION               1       /* ACPI 5.0 */
617#define AML_RESOURCE_SPI_TYPE_REVISION          1       /* ACPI 5.0 */
618#define AML_RESOURCE_SPI_MIN_DATA_LEN           9
619
620
621typedef struct aml_resource_uart_serialbus
622{
623    AML_RESOURCE_LARGE_HEADER_COMMON
624    AML_RESOURCE_SERIAL_COMMON
625    UINT32                          DefaultBaudRate;
626    UINT16                          RxFifoSize;
627    UINT16                          TxFifoSize;
628    UINT8                           Parity;
629    UINT8                           LinesEnabled;
630    /*
631     * Optional fields follow immediately:
632     * 1) Vendor Data bytes
633     * 2) Resource Source String
634     */
635
636} AML_RESOURCE_UART_SERIALBUS;
637
638#define AML_RESOURCE_UART_REVISION              1       /* ACPI 5.0 */
639#define AML_RESOURCE_UART_TYPE_REVISION         1       /* ACPI 5.0 */
640#define AML_RESOURCE_UART_MIN_DATA_LEN          10
641
642typedef struct aml_resource_pin_function
643{
644    AML_RESOURCE_LARGE_HEADER_COMMON
645    UINT8                           RevisionId;
646    UINT16                          Flags;
647    UINT8                           PinConfig;
648    UINT16                          FunctionNumber;
649    UINT16                          PinTableOffset;
650    UINT8                           ResSourceIndex;
651    UINT16                          ResSourceOffset;
652    UINT16                          VendorOffset;
653    UINT16                          VendorLength;
654    /*
655     * Optional fields follow immediately:
656     * 1) PIN list (Words)
657     * 2) Resource Source String
658     * 3) Vendor Data bytes
659     */
660
661} AML_RESOURCE_PIN_FUNCTION;
662
663#define AML_RESOURCE_PIN_FUNCTION_REVISION      1       /* ACPI 6.2 */
664
665typedef struct aml_resource_pin_config
666{
667    AML_RESOURCE_LARGE_HEADER_COMMON
668    UINT8                           RevisionId;
669    UINT16                          Flags;
670    UINT8                           PinConfigType;
671    UINT32                          PinConfigValue;
672    UINT16                          PinTableOffset;
673    UINT8                           ResSourceIndex;
674    UINT16                          ResSourceOffset;
675    UINT16                          VendorOffset;
676    UINT16                          VendorLength;
677    /*
678     * Optional fields follow immediately:
679     * 1) PIN list (Words)
680     * 2) Resource Source String
681     * 3) Vendor Data bytes
682     */
683
684} AML_RESOURCE_PIN_CONFIG;
685
686#define AML_RESOURCE_PIN_CONFIG_REVISION      1       /* ACPI 6.2 */
687
688typedef struct aml_resource_pin_group
689{
690    AML_RESOURCE_LARGE_HEADER_COMMON
691    UINT8                           RevisionId;
692    UINT16                          Flags;
693    UINT16                          PinTableOffset;
694    UINT16                          LabelOffset;
695    UINT16                          VendorOffset;
696    UINT16                          VendorLength;
697    /*
698     * Optional fields follow immediately:
699     * 1) PIN list (Words)
700     * 2) Resource Label String
701     * 3) Vendor Data bytes
702     */
703
704} AML_RESOURCE_PIN_GROUP;
705
706#define AML_RESOURCE_PIN_GROUP_REVISION      1       /* ACPI 6.2 */
707
708typedef struct aml_resource_pin_group_function
709{
710    AML_RESOURCE_LARGE_HEADER_COMMON
711    UINT8                           RevisionId;
712    UINT16                          Flags;
713    UINT16                          FunctionNumber;
714    UINT8                           ResSourceIndex;
715    UINT16                          ResSourceOffset;
716    UINT16                          ResSourceLabelOffset;
717    UINT16                          VendorOffset;
718    UINT16                          VendorLength;
719    /*
720     * Optional fields follow immediately:
721     * 1) Resource Source String
722     * 2) Resource Source Label String
723     * 3) Vendor Data bytes
724     */
725
726} AML_RESOURCE_PIN_GROUP_FUNCTION;
727
728#define AML_RESOURCE_PIN_GROUP_FUNCTION_REVISION    1       /* ACPI 6.2 */
729
730typedef struct aml_resource_pin_group_config
731{
732    AML_RESOURCE_LARGE_HEADER_COMMON
733    UINT8                           RevisionId;
734    UINT16                          Flags;
735    UINT8                           PinConfigType;
736    UINT32                          PinConfigValue;
737    UINT8                           ResSourceIndex;
738    UINT16                          ResSourceOffset;
739    UINT16                          ResSourceLabelOffset;
740    UINT16                          VendorOffset;
741    UINT16                          VendorLength;
742    /*
743     * Optional fields follow immediately:
744     * 1) Resource Source String
745     * 2) Resource Source Label String
746     * 3) Vendor Data bytes
747     */
748
749} AML_RESOURCE_PIN_GROUP_CONFIG;
750
751#define AML_RESOURCE_PIN_GROUP_CONFIG_REVISION    1       /* ACPI 6.2 */
752
753/* restore default alignment */
754
755#pragma pack()
756
757/* Union of all resource descriptors, so we can allocate the worst case */
758
759typedef union aml_resource
760{
761    /* Descriptor headers */
762
763    UINT8                                   DescriptorType;
764    AML_RESOURCE_SMALL_HEADER               SmallHeader;
765    AML_RESOURCE_LARGE_HEADER               LargeHeader;
766
767    /* Small resource descriptors */
768
769    AML_RESOURCE_IRQ                        Irq;
770    AML_RESOURCE_DMA                        Dma;
771    AML_RESOURCE_START_DEPENDENT            StartDpf;
772    AML_RESOURCE_END_DEPENDENT              EndDpf;
773    AML_RESOURCE_IO                         Io;
774    AML_RESOURCE_FIXED_IO                   FixedIo;
775    AML_RESOURCE_FIXED_DMA                  FixedDma;
776    AML_RESOURCE_VENDOR_SMALL               VendorSmall;
777    AML_RESOURCE_END_TAG                    EndTag;
778
779    /* Large resource descriptors */
780
781    AML_RESOURCE_MEMORY24                   Memory24;
782    AML_RESOURCE_GENERIC_REGISTER           GenericReg;
783    AML_RESOURCE_VENDOR_LARGE               VendorLarge;
784    AML_RESOURCE_MEMORY32                   Memory32;
785    AML_RESOURCE_FIXED_MEMORY32             FixedMemory32;
786    AML_RESOURCE_ADDRESS16                  Address16;
787    AML_RESOURCE_ADDRESS32                  Address32;
788    AML_RESOURCE_ADDRESS64                  Address64;
789    AML_RESOURCE_EXTENDED_ADDRESS64         ExtAddress64;
790    AML_RESOURCE_EXTENDED_IRQ               ExtendedIrq;
791    AML_RESOURCE_GPIO                       Gpio;
792    AML_RESOURCE_I2C_SERIALBUS              I2cSerialBus;
793    AML_RESOURCE_SPI_SERIALBUS              SpiSerialBus;
794    AML_RESOURCE_UART_SERIALBUS             UartSerialBus;
795    AML_RESOURCE_COMMON_SERIALBUS           CommonSerialBus;
796    AML_RESOURCE_PIN_FUNCTION               PinFunction;
797    AML_RESOURCE_PIN_CONFIG                 PinConfig;
798    AML_RESOURCE_PIN_GROUP                  PinGroup;
799    AML_RESOURCE_PIN_GROUP_FUNCTION         PinGroupFunction;
800    AML_RESOURCE_PIN_GROUP_CONFIG           PinGroupConfig;
801
802    /* Utility overlays */
803
804    AML_RESOURCE_ADDRESS                    Address;
805    UINT32                                  DwordItem;
806    UINT16                                  WordItem;
807    UINT8                                   ByteItem;
808
809} AML_RESOURCE;
810
811
812/* Interfaces used by both the disassembler and compiler */
813
814void
815MpSaveGpioInfo (
816    ACPI_PARSE_OBJECT       *Op,
817    AML_RESOURCE            *Resource,
818    UINT32                  PinCount,
819    UINT16                  *PinList,
820    char                    *DeviceName);
821
822void
823MpSaveSerialInfo (
824    ACPI_PARSE_OBJECT       *Op,
825    AML_RESOURCE            *Resource,
826    char                    *DeviceName);
827
828char *
829MpGetHidFromParseTree (
830    ACPI_NAMESPACE_NODE     *HidNode);
831
832char *
833MpGetHidViaNamestring (
834    char                    *DeviceName);
835
836char *
837MpGetConnectionInfo (
838    ACPI_PARSE_OBJECT       *Op,
839    UINT32                  PinIndex,
840    ACPI_NAMESPACE_NODE     **TargetNode,
841    char                    **TargetName);
842
843char *
844MpGetParentDeviceHid (
845    ACPI_PARSE_OBJECT       *Op,
846    ACPI_NAMESPACE_NODE     **TargetNode,
847    char                    **ParentDeviceName);
848
849char *
850MpGetDdnValue (
851    char                    *DeviceName);
852
853char *
854MpGetHidValue (
855    ACPI_NAMESPACE_NODE     *DeviceNode);
856
857#endif
858