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