1 /******************************************************************************
2  *
3  * Name: acrestyp.h - Defines, types, and structures for resource descriptors
4  *
5  *****************************************************************************/
6 
7 /*
8  * Copyright (C) 2000 - 2014, 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 MERCHANTIBILITY 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 #ifndef __ACRESTYP_H__
45 #define __ACRESTYP_H__
46 
47 
48 #pragma pack(push) /* Set default struct packing */
49 
50 /*
51  * Definitions for Resource Attributes
52  */
53 typedef UINT16                          ACPI_RS_LENGTH;    /* Resource Length field is fixed at 16 bits */
54 typedef UINT32                          ACPI_RSDESC_SIZE;  /* Max Resource Descriptor size is (Length+3) = (64K-1)+3 */
55 
56 /*
57  * Memory Attributes
58  */
59 #define ACPI_READ_ONLY_MEMORY           (UINT8) 0x00
60 #define ACPI_READ_WRITE_MEMORY          (UINT8) 0x01
61 
62 #define ACPI_NON_CACHEABLE_MEMORY       (UINT8) 0x00
63 #define ACPI_CACHABLE_MEMORY            (UINT8) 0x01
64 #define ACPI_WRITE_COMBINING_MEMORY     (UINT8) 0x02
65 #define ACPI_PREFETCHABLE_MEMORY        (UINT8) 0x03
66 
67 /*! [Begin] no source code translation */
68 /*
69  * IO Attributes
70  * The ISA IO ranges are:     n000-n0FFh,  n400-n4FFh, n800-n8FFh, nC00-nCFFh.
71  * The non-ISA IO ranges are: n100-n3FFh,  n500-n7FFh, n900-nBFFh, nCD0-nFFFh.
72  */
73 /*! [End] no source code translation !*/
74 
75 #define ACPI_NON_ISA_ONLY_RANGES        (UINT8) 0x01
76 #define ACPI_ISA_ONLY_RANGES            (UINT8) 0x02
77 #define ACPI_ENTIRE_RANGE               (ACPI_NON_ISA_ONLY_RANGES | ACPI_ISA_ONLY_RANGES)
78 
79 /* Type of translation - 1=Sparse, 0=Dense */
80 
81 #define ACPI_SPARSE_TRANSLATION         (UINT8) 0x01
82 
83 /*
84  * IO Port Descriptor Decode
85  */
86 #define ACPI_DECODE_10                  (UINT8) 0x00    /* 10-bit IO address decode */
87 #define ACPI_DECODE_16                  (UINT8) 0x01    /* 16-bit IO address decode */
88 
89 /*
90  * Interrupt attributes - used in multiple descriptors
91  */
92 
93 /* Triggering */
94 
95 #define ACPI_LEVEL_SENSITIVE            (UINT8) 0x00
96 #define ACPI_EDGE_SENSITIVE             (UINT8) 0x01
97 
98 /* Polarity */
99 
100 #define ACPI_ACTIVE_HIGH                (UINT8) 0x00
101 #define ACPI_ACTIVE_LOW                 (UINT8) 0x01
102 #define ACPI_ACTIVE_BOTH                (UINT8) 0x02
103 
104 /* Sharing */
105 
106 #define ACPI_EXCLUSIVE                  (UINT8) 0x00
107 #define ACPI_SHARED                     (UINT8) 0x01
108 
109 /* Wake */
110 
111 #define ACPI_NOT_WAKE_CAPABLE           (UINT8) 0x00
112 #define ACPI_WAKE_CAPABLE               (UINT8) 0x01
113 
114 /*
115  * DMA Attributes
116  */
117 #define ACPI_COMPATIBILITY              (UINT8) 0x00
118 #define ACPI_TYPE_A                     (UINT8) 0x01
119 #define ACPI_TYPE_B                     (UINT8) 0x02
120 #define ACPI_TYPE_F                     (UINT8) 0x03
121 
122 #define ACPI_NOT_BUS_MASTER             (UINT8) 0x00
123 #define ACPI_BUS_MASTER                 (UINT8) 0x01
124 
125 #define ACPI_TRANSFER_8                 (UINT8) 0x00
126 #define ACPI_TRANSFER_8_16              (UINT8) 0x01
127 #define ACPI_TRANSFER_16                (UINT8) 0x02
128 
129 /*
130  * Start Dependent Functions Priority definitions
131  */
132 #define ACPI_GOOD_CONFIGURATION         (UINT8) 0x00
133 #define ACPI_ACCEPTABLE_CONFIGURATION   (UINT8) 0x01
134 #define ACPI_SUB_OPTIMAL_CONFIGURATION  (UINT8) 0x02
135 
136 /*
137  * 16, 32 and 64-bit Address Descriptor resource types
138  */
139 #define ACPI_MEMORY_RANGE               (UINT8) 0x00
140 #define ACPI_IO_RANGE                   (UINT8) 0x01
141 #define ACPI_BUS_NUMBER_RANGE           (UINT8) 0x02
142 
143 #define ACPI_ADDRESS_NOT_FIXED          (UINT8) 0x00
144 #define ACPI_ADDRESS_FIXED              (UINT8) 0x01
145 
146 #define ACPI_POS_DECODE                 (UINT8) 0x00
147 #define ACPI_SUB_DECODE                 (UINT8) 0x01
148 
149 /* Producer/Consumer */
150 
151 #define ACPI_PRODUCER                   (UINT8) 0x00
152 #define ACPI_CONSUMER                   (UINT8) 0x01
153 
154 
155 /*
156  * If possible, pack the following structures to byte alignment
157  */
158 #ifndef ACPI_MISALIGNMENT_NOT_SUPPORTED
159 #pragma pack(1)
160 #endif
161 
162 /* UUID data structures for use in vendor-defined resource descriptors */
163 
164 typedef struct acpi_uuid
165 {
166     UINT8                           Data[ACPI_UUID_LENGTH];
167 } ACPI_UUID;
168 
169 typedef struct acpi_vendor_uuid
170 {
171     UINT8                           Subtype;
172     UINT8                           Data[ACPI_UUID_LENGTH];
173 
174 } ACPI_VENDOR_UUID;
175 
176 /*
177  * Structures used to describe device resources
178  */
179 typedef struct acpi_resource_irq
180 {
181     UINT8                           DescriptorLength;
182     UINT8                           Triggering;
183     UINT8                           Polarity;
184     UINT8                           Sharable;
185     UINT8                           WakeCapable;
186     UINT8                           InterruptCount;
187     UINT8                           Interrupts[1];
188 
189 } ACPI_RESOURCE_IRQ;
190 
191 typedef struct acpi_resource_dma
192 {
193     UINT8                           Type;
194     UINT8                           BusMaster;
195     UINT8                           Transfer;
196     UINT8                           ChannelCount;
197     UINT8                           Channels[1];
198 
199 } ACPI_RESOURCE_DMA;
200 
201 typedef struct acpi_resource_start_dependent
202 {
203     UINT8                           DescriptorLength;
204     UINT8                           CompatibilityPriority;
205     UINT8                           PerformanceRobustness;
206 
207 } ACPI_RESOURCE_START_DEPENDENT;
208 
209 
210 /*
211  * The END_DEPENDENT_FUNCTIONS_RESOURCE struct is not
212  * needed because it has no fields
213  */
214 
215 
216 typedef struct acpi_resource_io
217 {
218     UINT8                           IoDecode;
219     UINT8                           Alignment;
220     UINT8                           AddressLength;
221     UINT16                          Minimum;
222     UINT16                          Maximum;
223 
224 } ACPI_RESOURCE_IO;
225 
226 typedef struct acpi_resource_fixed_io
227 {
228     UINT16                          Address;
229     UINT8                           AddressLength;
230 
231 } ACPI_RESOURCE_FIXED_IO;
232 
233 typedef struct acpi_resource_fixed_dma
234 {
235     UINT16                          RequestLines;
236     UINT16                          Channels;
237     UINT8                           Width;
238 
239 } ACPI_RESOURCE_FIXED_DMA;
240 
241 /* Values for Width field above */
242 
243 #define ACPI_DMA_WIDTH8                         0
244 #define ACPI_DMA_WIDTH16                        1
245 #define ACPI_DMA_WIDTH32                        2
246 #define ACPI_DMA_WIDTH64                        3
247 #define ACPI_DMA_WIDTH128                       4
248 #define ACPI_DMA_WIDTH256                       5
249 
250 
251 typedef struct acpi_resource_vendor
252 {
253     UINT16                          ByteLength;
254     UINT8                           ByteData[1];
255 
256 } ACPI_RESOURCE_VENDOR;
257 
258 /* Vendor resource with UUID info (introduced in ACPI 3.0) */
259 
260 typedef struct acpi_resource_vendor_typed
261 {
262     UINT16                          ByteLength;
263     UINT8                           UuidSubtype;
264     UINT8                           Uuid[ACPI_UUID_LENGTH];
265     UINT8                           ByteData[1];
266 
267 } ACPI_RESOURCE_VENDOR_TYPED;
268 
269 typedef struct acpi_resource_end_tag
270 {
271     UINT8                           Checksum;
272 
273 } ACPI_RESOURCE_END_TAG;
274 
275 typedef struct acpi_resource_memory24
276 {
277     UINT8                           WriteProtect;
278     UINT16                          Minimum;
279     UINT16                          Maximum;
280     UINT16                          Alignment;
281     UINT16                          AddressLength;
282 
283 } ACPI_RESOURCE_MEMORY24;
284 
285 typedef struct acpi_resource_memory32
286 {
287     UINT8                           WriteProtect;
288     UINT32                          Minimum;
289     UINT32                          Maximum;
290     UINT32                          Alignment;
291     UINT32                          AddressLength;
292 
293 } ACPI_RESOURCE_MEMORY32;
294 
295 typedef struct acpi_resource_fixed_memory32
296 {
297     UINT8                           WriteProtect;
298     UINT32                          Address;
299     UINT32                          AddressLength;
300 
301 } ACPI_RESOURCE_FIXED_MEMORY32;
302 
303 typedef struct acpi_memory_attribute
304 {
305     UINT8                           WriteProtect;
306     UINT8                           Caching;
307     UINT8                           RangeType;
308     UINT8                           Translation;
309 
310 } ACPI_MEMORY_ATTRIBUTE;
311 
312 typedef struct acpi_io_attribute
313 {
314     UINT8                           RangeType;
315     UINT8                           Translation;
316     UINT8                           TranslationType;
317     UINT8                           Reserved1;
318 
319 } ACPI_IO_ATTRIBUTE;
320 
321 typedef union acpi_resource_attribute
322 {
323     ACPI_MEMORY_ATTRIBUTE           Mem;
324     ACPI_IO_ATTRIBUTE               Io;
325 
326     /* Used for the *WordSpace macros */
327 
328     UINT8                           TypeSpecific;
329 
330 } ACPI_RESOURCE_ATTRIBUTE;
331 
332 typedef struct acpi_resource_source
333 {
334     UINT8                           Index;
335     UINT16                          StringLength;
336     char                            *StringPtr;
337 
338 } ACPI_RESOURCE_SOURCE;
339 
340 /* Fields common to all address descriptors, 16/32/64 bit */
341 
342 #define ACPI_RESOURCE_ADDRESS_COMMON \
343     UINT8                           ResourceType; \
344     UINT8                           ProducerConsumer; \
345     UINT8                           Decode; \
346     UINT8                           MinAddressFixed; \
347     UINT8                           MaxAddressFixed; \
348     ACPI_RESOURCE_ATTRIBUTE         Info;
349 
350 typedef struct acpi_resource_address
351 {
352     ACPI_RESOURCE_ADDRESS_COMMON
353 
354 } ACPI_RESOURCE_ADDRESS;
355 
356 typedef struct acpi_resource_address16
357 {
358     ACPI_RESOURCE_ADDRESS_COMMON
359     UINT16                          Granularity;
360     UINT16                          Minimum;
361     UINT16                          Maximum;
362     UINT16                          TranslationOffset;
363     UINT16                          AddressLength;
364     ACPI_RESOURCE_SOURCE            ResourceSource;
365 
366 } ACPI_RESOURCE_ADDRESS16;
367 
368 typedef struct acpi_resource_address32
369 {
370     ACPI_RESOURCE_ADDRESS_COMMON
371     UINT32                          Granularity;
372     UINT32                          Minimum;
373     UINT32                          Maximum;
374     UINT32                          TranslationOffset;
375     UINT32                          AddressLength;
376     ACPI_RESOURCE_SOURCE            ResourceSource;
377 
378 } ACPI_RESOURCE_ADDRESS32;
379 
380 typedef struct acpi_resource_address64
381 {
382     ACPI_RESOURCE_ADDRESS_COMMON
383     UINT64                          Granularity;
384     UINT64                          Minimum;
385     UINT64                          Maximum;
386     UINT64                          TranslationOffset;
387     UINT64                          AddressLength;
388     ACPI_RESOURCE_SOURCE            ResourceSource;
389 
390 } ACPI_RESOURCE_ADDRESS64;
391 
392 typedef struct acpi_resource_extended_address64
393 {
394     ACPI_RESOURCE_ADDRESS_COMMON
395     UINT8                           RevisionID;
396     UINT64                          Granularity;
397     UINT64                          Minimum;
398     UINT64                          Maximum;
399     UINT64                          TranslationOffset;
400     UINT64                          AddressLength;
401     UINT64                          TypeSpecific;
402 
403 } ACPI_RESOURCE_EXTENDED_ADDRESS64;
404 
405 typedef struct acpi_resource_extended_irq
406 {
407     UINT8                           ProducerConsumer;
408     UINT8                           Triggering;
409     UINT8                           Polarity;
410     UINT8                           Sharable;
411     UINT8                           WakeCapable;
412     UINT8                           InterruptCount;
413     ACPI_RESOURCE_SOURCE            ResourceSource;
414     UINT32                          Interrupts[1];
415 
416 } ACPI_RESOURCE_EXTENDED_IRQ;
417 
418 typedef struct acpi_resource_generic_register
419 {
420     UINT8                           SpaceId;
421     UINT8                           BitWidth;
422     UINT8                           BitOffset;
423     UINT8                           AccessSize;
424     UINT64                          Address;
425 
426 } ACPI_RESOURCE_GENERIC_REGISTER;
427 
428 typedef struct acpi_resource_gpio
429 {
430     UINT8                           RevisionId;
431     UINT8                           ConnectionType;
432     UINT8                           ProducerConsumer;   /* For values, see Producer/Consumer above */
433     UINT8                           PinConfig;
434     UINT8                           Sharable;           /* For values, see Interrupt Attributes above */
435     UINT8                           WakeCapable;        /* For values, see Interrupt Attributes above */
436     UINT8                           IoRestriction;
437     UINT8                           Triggering;         /* For values, see Interrupt Attributes above */
438     UINT8                           Polarity;           /* For values, see Interrupt Attributes above */
439     UINT16                          DriveStrength;
440     UINT16                          DebounceTimeout;
441     UINT16                          PinTableLength;
442     UINT16                          VendorLength;
443     ACPI_RESOURCE_SOURCE            ResourceSource;
444     UINT16                          *PinTable;
445     UINT8                           *VendorData;
446 
447 } ACPI_RESOURCE_GPIO;
448 
449 /* Values for GPIO ConnectionType field above */
450 
451 #define ACPI_RESOURCE_GPIO_TYPE_INT             0
452 #define ACPI_RESOURCE_GPIO_TYPE_IO              1
453 
454 /* Values for PinConfig field above */
455 
456 #define ACPI_PIN_CONFIG_DEFAULT                 0
457 #define ACPI_PIN_CONFIG_PULLUP                  1
458 #define ACPI_PIN_CONFIG_PULLDOWN                2
459 #define ACPI_PIN_CONFIG_NOPULL                  3
460 
461 /* Values for IoRestriction field above */
462 
463 #define ACPI_IO_RESTRICT_NONE                   0
464 #define ACPI_IO_RESTRICT_INPUT                  1
465 #define ACPI_IO_RESTRICT_OUTPUT                 2
466 #define ACPI_IO_RESTRICT_NONE_PRESERVE          3
467 
468 
469 /* Common structure for I2C, SPI, and UART serial descriptors */
470 
471 #define ACPI_RESOURCE_SERIAL_COMMON \
472     UINT8                           RevisionId; \
473     UINT8                           Type; \
474     UINT8                           ProducerConsumer;    /* For values, see Producer/Consumer above */\
475     UINT8                           SlaveMode; \
476     UINT8                           TypeRevisionId; \
477     UINT16                          TypeDataLength; \
478     UINT16                          VendorLength; \
479     ACPI_RESOURCE_SOURCE            ResourceSource; \
480     UINT8                           *VendorData;
481 
482 typedef struct acpi_resource_common_serialbus
483 {
484     ACPI_RESOURCE_SERIAL_COMMON
485 
486 } ACPI_RESOURCE_COMMON_SERIALBUS;
487 
488 /* Values for the Type field above */
489 
490 #define ACPI_RESOURCE_SERIAL_TYPE_I2C           1
491 #define ACPI_RESOURCE_SERIAL_TYPE_SPI           2
492 #define ACPI_RESOURCE_SERIAL_TYPE_UART          3
493 
494 /* Values for SlaveMode field above */
495 
496 #define ACPI_CONTROLLER_INITIATED               0
497 #define ACPI_DEVICE_INITIATED                   1
498 
499 
500 typedef struct acpi_resource_i2c_serialbus
501 {
502     ACPI_RESOURCE_SERIAL_COMMON
503     UINT8                           AccessMode;
504     UINT16                          SlaveAddress;
505     UINT32                          ConnectionSpeed;
506 
507 } ACPI_RESOURCE_I2C_SERIALBUS;
508 
509 /* Values for AccessMode field above */
510 
511 #define ACPI_I2C_7BIT_MODE                      0
512 #define ACPI_I2C_10BIT_MODE                     1
513 
514 
515 typedef struct acpi_resource_spi_serialbus
516 {
517     ACPI_RESOURCE_SERIAL_COMMON
518     UINT8                           WireMode;
519     UINT8                           DevicePolarity;
520     UINT8                           DataBitLength;
521     UINT8                           ClockPhase;
522     UINT8                           ClockPolarity;
523     UINT16                          DeviceSelection;
524     UINT32                          ConnectionSpeed;
525 
526 } ACPI_RESOURCE_SPI_SERIALBUS;
527 
528 /* Values for WireMode field above */
529 
530 #define ACPI_SPI_4WIRE_MODE                     0
531 #define ACPI_SPI_3WIRE_MODE                     1
532 
533 /* Values for DevicePolarity field above */
534 
535 #define ACPI_SPI_ACTIVE_LOW                     0
536 #define ACPI_SPI_ACTIVE_HIGH                    1
537 
538 /* Values for ClockPhase field above */
539 
540 #define ACPI_SPI_FIRST_PHASE                    0
541 #define ACPI_SPI_SECOND_PHASE                   1
542 
543 /* Values for ClockPolarity field above */
544 
545 #define ACPI_SPI_START_LOW                      0
546 #define ACPI_SPI_START_HIGH                     1
547 
548 
549 typedef struct acpi_resource_uart_serialbus
550 {
551     ACPI_RESOURCE_SERIAL_COMMON
552     UINT8                           Endian;
553     UINT8                           DataBits;
554     UINT8                           StopBits;
555     UINT8                           FlowControl;
556     UINT8                           Parity;
557     UINT8                           LinesEnabled;
558     UINT16                          RxFifoSize;
559     UINT16                          TxFifoSize;
560     UINT32                          DefaultBaudRate;
561 
562 } ACPI_RESOURCE_UART_SERIALBUS;
563 
564 /* Values for Endian field above */
565 
566 #define ACPI_UART_LITTLE_ENDIAN                 0
567 #define ACPI_UART_BIG_ENDIAN                    1
568 
569 /* Values for DataBits field above */
570 
571 #define ACPI_UART_5_DATA_BITS                   0
572 #define ACPI_UART_6_DATA_BITS                   1
573 #define ACPI_UART_7_DATA_BITS                   2
574 #define ACPI_UART_8_DATA_BITS                   3
575 #define ACPI_UART_9_DATA_BITS                   4
576 
577 /* Values for StopBits field above */
578 
579 #define ACPI_UART_NO_STOP_BITS                  0
580 #define ACPI_UART_1_STOP_BIT                    1
581 #define ACPI_UART_1P5_STOP_BITS                 2
582 #define ACPI_UART_2_STOP_BITS                   3
583 
584 /* Values for FlowControl field above */
585 
586 #define ACPI_UART_FLOW_CONTROL_NONE             0
587 #define ACPI_UART_FLOW_CONTROL_HW               1
588 #define ACPI_UART_FLOW_CONTROL_XON_XOFF         2
589 
590 /* Values for Parity field above */
591 
592 #define ACPI_UART_PARITY_NONE                   0
593 #define ACPI_UART_PARITY_EVEN                   1
594 #define ACPI_UART_PARITY_ODD                    2
595 #define ACPI_UART_PARITY_MARK                   3
596 #define ACPI_UART_PARITY_SPACE                  4
597 
598 /* Values for LinesEnabled bitfield above */
599 
600 #define ACPI_UART_CARRIER_DETECT                (1<<2)
601 #define ACPI_UART_RING_INDICATOR                (1<<3)
602 #define ACPI_UART_DATA_SET_READY                (1<<4)
603 #define ACPI_UART_DATA_TERMINAL_READY           (1<<5)
604 #define ACPI_UART_CLEAR_TO_SEND                 (1<<6)
605 #define ACPI_UART_REQUEST_TO_SEND               (1<<7)
606 
607 
608 /* ACPI_RESOURCE_TYPEs */
609 
610 #define ACPI_RESOURCE_TYPE_IRQ                  0
611 #define ACPI_RESOURCE_TYPE_DMA                  1
612 #define ACPI_RESOURCE_TYPE_START_DEPENDENT      2
613 #define ACPI_RESOURCE_TYPE_END_DEPENDENT        3
614 #define ACPI_RESOURCE_TYPE_IO                   4
615 #define ACPI_RESOURCE_TYPE_FIXED_IO             5
616 #define ACPI_RESOURCE_TYPE_VENDOR               6
617 #define ACPI_RESOURCE_TYPE_END_TAG              7
618 #define ACPI_RESOURCE_TYPE_MEMORY24             8
619 #define ACPI_RESOURCE_TYPE_MEMORY32             9
620 #define ACPI_RESOURCE_TYPE_FIXED_MEMORY32       10
621 #define ACPI_RESOURCE_TYPE_ADDRESS16            11
622 #define ACPI_RESOURCE_TYPE_ADDRESS32            12
623 #define ACPI_RESOURCE_TYPE_ADDRESS64            13
624 #define ACPI_RESOURCE_TYPE_EXTENDED_ADDRESS64   14  /* ACPI 3.0 */
625 #define ACPI_RESOURCE_TYPE_EXTENDED_IRQ         15
626 #define ACPI_RESOURCE_TYPE_GENERIC_REGISTER     16
627 #define ACPI_RESOURCE_TYPE_GPIO                 17  /* ACPI 5.0 */
628 #define ACPI_RESOURCE_TYPE_FIXED_DMA            18  /* ACPI 5.0 */
629 #define ACPI_RESOURCE_TYPE_SERIAL_BUS           19  /* ACPI 5.0 */
630 #define ACPI_RESOURCE_TYPE_MAX                  19
631 
632 /* Master union for resource descriptors */
633 
634 typedef union acpi_resource_data
635 {
636     ACPI_RESOURCE_IRQ                       Irq;
637     ACPI_RESOURCE_DMA                       Dma;
638     ACPI_RESOURCE_START_DEPENDENT           StartDpf;
639     ACPI_RESOURCE_IO                        Io;
640     ACPI_RESOURCE_FIXED_IO                  FixedIo;
641     ACPI_RESOURCE_FIXED_DMA                 FixedDma;
642     ACPI_RESOURCE_VENDOR                    Vendor;
643     ACPI_RESOURCE_VENDOR_TYPED              VendorTyped;
644     ACPI_RESOURCE_END_TAG                   EndTag;
645     ACPI_RESOURCE_MEMORY24                  Memory24;
646     ACPI_RESOURCE_MEMORY32                  Memory32;
647     ACPI_RESOURCE_FIXED_MEMORY32            FixedMemory32;
648     ACPI_RESOURCE_ADDRESS16                 Address16;
649     ACPI_RESOURCE_ADDRESS32                 Address32;
650     ACPI_RESOURCE_ADDRESS64                 Address64;
651     ACPI_RESOURCE_EXTENDED_ADDRESS64        ExtAddress64;
652     ACPI_RESOURCE_EXTENDED_IRQ              ExtendedIrq;
653     ACPI_RESOURCE_GENERIC_REGISTER          GenericReg;
654     ACPI_RESOURCE_GPIO                      Gpio;
655     ACPI_RESOURCE_I2C_SERIALBUS             I2cSerialBus;
656     ACPI_RESOURCE_SPI_SERIALBUS             SpiSerialBus;
657     ACPI_RESOURCE_UART_SERIALBUS            UartSerialBus;
658     ACPI_RESOURCE_COMMON_SERIALBUS          CommonSerialBus;
659 
660     /* Common fields */
661 
662     ACPI_RESOURCE_ADDRESS                   Address;        /* Common 16/32/64 address fields */
663 
664 } ACPI_RESOURCE_DATA;
665 
666 
667 /* Common resource header */
668 
669 typedef struct acpi_resource
670 {
671     UINT32                          Type;
672     UINT32                          Length;
673     ACPI_RESOURCE_DATA              Data;
674 
675 } ACPI_RESOURCE;
676 
677 /* restore default alignment */
678 
679 #pragma pack()
680 
681 
682 #define ACPI_RS_SIZE_NO_DATA                8       /* Id + Length fields */
683 #define ACPI_RS_SIZE_MIN                    (UINT32) ACPI_ROUND_UP_TO_NATIVE_WORD (12)
684 #define ACPI_RS_SIZE(Type)                  (UINT32) (ACPI_RS_SIZE_NO_DATA + sizeof (Type))
685 
686 /* Macro for walking resource templates with multiple descriptors */
687 
688 #define ACPI_NEXT_RESOURCE(Res) \
689     ACPI_ADD_PTR (ACPI_RESOURCE, (Res), (Res)->Length)
690 
691 
692 typedef struct acpi_pci_routing_table
693 {
694     UINT32                          Length;
695     UINT32                          Pin;
696     UINT64                          Address;        /* here for 64-bit alignment */
697     UINT32                          SourceIndex;
698     char                            Source[4];      /* pad to 64 bits so sizeof() works in all cases */
699 
700 } ACPI_PCI_ROUTING_TABLE;
701 
702 #pragma pack(pop) /* Restore original struct packing */
703 
704 #endif /* __ACRESTYP_H__ */
705