1 /******************************************************************************
3 * Module Name: amlresrc.h - AML resource descriptors
5 *****************************************************************************/
8 * Copyright (C) 2000 - 2017, Intel Corp.
11 * Redistribution and use in source and binary forms, with or without
12 * modification, are permitted provided that the following conditions
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.
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.
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.
44 /* acpisrc:StructDefs -- for acpisrc conversion */
51 * Resource descriptor tags, as defined in the ACPI specification.
52 * Used to symbolically reference fields within a descriptor.
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_MEMATTRIBUTES "_MTP" /* Memory(0), Reserved(1), ACPI(2), NVS(3) */
79 #define ACPI_RESTAG_MEMTYPE "_MEM" /* NonCache(0), Cacheable(1) Cache+combine(2), Cache+prefetch(3) */
80 #define ACPI_RESTAG_MAXADDR "_MAX"
81 #define ACPI_RESTAG_MINADDR "_MIN"
82 #define ACPI_RESTAG_MAXTYPE "_MAF"
83 #define ACPI_RESTAG_MINTYPE "_MIF"
84 #define ACPI_RESTAG_MODE "_MOD"
85 #define ACPI_RESTAG_PARITY "_PAR"
86 #define ACPI_RESTAG_PHASE "_PHA"
87 #define ACPI_RESTAG_PIN "_PIN"
88 #define ACPI_RESTAG_PINCONFIG "_PPI"
89 #define ACPI_RESTAG_PINCONFIG_TYPE "_TYP"
90 #define ACPI_RESTAG_PINCONFIG_VALUE "_VAL"
91 #define ACPI_RESTAG_POLARITY "_POL"
92 #define ACPI_RESTAG_REGISTERBITOFFSET "_RBO"
93 #define ACPI_RESTAG_REGISTERBITWIDTH "_RBW"
94 #define ACPI_RESTAG_RANGETYPE "_RNG"
95 #define ACPI_RESTAG_READWRITETYPE "_RW_" /* ReadOnly(0), Writeable (1) */
96 #define ACPI_RESTAG_LENGTH_RX "_RXL"
97 #define ACPI_RESTAG_LENGTH_TX "_TXL"
98 #define ACPI_RESTAG_SLAVEMODE "_SLV"
99 #define ACPI_RESTAG_SPEED "_SPE"
100 #define ACPI_RESTAG_STOPBITS "_STB"
101 #define ACPI_RESTAG_TRANSLATION "_TRA"
102 #define ACPI_RESTAG_TRANSTYPE "_TRS" /* Sparse(1), Dense(0) */
103 #define ACPI_RESTAG_TYPE "_TTP" /* Translation(1), Static (0) */
104 #define ACPI_RESTAG_XFERTYPE "_SIZ" /* 8(0), 8And16(1), 16(2) */
105 #define ACPI_RESTAG_VENDORDATA "_VEN"
108 /* Default sizes for "small" resource descriptors */
110 #define ASL_RDESC_IRQ_SIZE 0x02
111 #define ASL_RDESC_DMA_SIZE 0x02
112 #define ASL_RDESC_ST_DEPEND_SIZE 0x00
113 #define ASL_RDESC_END_DEPEND_SIZE 0x00
114 #define ASL_RDESC_IO_SIZE 0x07
115 #define ASL_RDESC_FIXED_IO_SIZE 0x03
116 #define ASL_RDESC_FIXED_DMA_SIZE 0x05
117 #define ASL_RDESC_END_TAG_SIZE 0x01
120 typedef struct asl_resource_node
124 struct asl_resource_node
*Next
;
128 typedef struct asl_resource_info
130 ACPI_PARSE_OBJECT
*DescriptorTypeOp
; /* Resource descriptor parse node */
131 ACPI_PARSE_OBJECT
*MappingOp
; /* Used for mapfile support */
132 UINT32 CurrentByteOffset
; /* Offset in resource template */
137 /* Macros used to generate AML resource length fields */
139 #define ACPI_AML_SIZE_LARGE(r) (sizeof (r) - sizeof (AML_RESOURCE_LARGE_HEADER))
140 #define ACPI_AML_SIZE_SMALL(r) (sizeof (r) - sizeof (AML_RESOURCE_SMALL_HEADER))
143 * Resource descriptors defined in the ACPI specification.
145 * Packing/alignment must be BYTE because these descriptors
146 * are used to overlay the raw AML byte stream.
153 #define AML_RESOURCE_SMALL_HEADER_COMMON \
154 UINT8 DescriptorType;
156 typedef struct aml_resource_small_header
158 AML_RESOURCE_SMALL_HEADER_COMMON
160 } AML_RESOURCE_SMALL_HEADER
;
163 typedef struct aml_resource_irq
165 AML_RESOURCE_SMALL_HEADER_COMMON
172 typedef struct aml_resource_irq_noflags
174 AML_RESOURCE_SMALL_HEADER_COMMON
177 } AML_RESOURCE_IRQ_NOFLAGS
;
180 typedef struct aml_resource_dma
182 AML_RESOURCE_SMALL_HEADER_COMMON
183 UINT8 DmaChannelMask
;
189 typedef struct aml_resource_start_dependent
191 AML_RESOURCE_SMALL_HEADER_COMMON
194 } AML_RESOURCE_START_DEPENDENT
;
197 typedef struct aml_resource_start_dependent_noprio
199 AML_RESOURCE_SMALL_HEADER_COMMON
201 } AML_RESOURCE_START_DEPENDENT_NOPRIO
;
204 typedef struct aml_resource_end_dependent
206 AML_RESOURCE_SMALL_HEADER_COMMON
208 } AML_RESOURCE_END_DEPENDENT
;
211 typedef struct aml_resource_io
213 AML_RESOURCE_SMALL_HEADER_COMMON
223 typedef struct aml_resource_fixed_io
225 AML_RESOURCE_SMALL_HEADER_COMMON
229 } AML_RESOURCE_FIXED_IO
;
232 typedef struct aml_resource_vendor_small
234 AML_RESOURCE_SMALL_HEADER_COMMON
236 } AML_RESOURCE_VENDOR_SMALL
;
239 typedef struct aml_resource_end_tag
241 AML_RESOURCE_SMALL_HEADER_COMMON
244 } AML_RESOURCE_END_TAG
;
247 typedef struct aml_resource_fixed_dma
249 AML_RESOURCE_SMALL_HEADER_COMMON
254 } AML_RESOURCE_FIXED_DMA
;
260 #define AML_RESOURCE_LARGE_HEADER_COMMON \
261 UINT8 DescriptorType;\
262 UINT16 ResourceLength;
264 typedef struct aml_resource_large_header
266 AML_RESOURCE_LARGE_HEADER_COMMON
268 } AML_RESOURCE_LARGE_HEADER
;
271 /* General Flags for address space resource descriptors */
273 #define ACPI_RESOURCE_FLAG_DEC 2
274 #define ACPI_RESOURCE_FLAG_MIF 4
275 #define ACPI_RESOURCE_FLAG_MAF 8
277 typedef struct aml_resource_memory24
279 AML_RESOURCE_LARGE_HEADER_COMMON
284 UINT16 AddressLength
;
286 } AML_RESOURCE_MEMORY24
;
289 typedef struct aml_resource_vendor_large
291 AML_RESOURCE_LARGE_HEADER_COMMON
293 } AML_RESOURCE_VENDOR_LARGE
;
296 typedef struct aml_resource_memory32
298 AML_RESOURCE_LARGE_HEADER_COMMON
303 UINT32 AddressLength
;
305 } AML_RESOURCE_MEMORY32
;
308 typedef struct aml_resource_fixed_memory32
310 AML_RESOURCE_LARGE_HEADER_COMMON
313 UINT32 AddressLength
;
315 } AML_RESOURCE_FIXED_MEMORY32
;
318 #define AML_RESOURCE_ADDRESS_COMMON \
319 UINT8 ResourceType; \
324 typedef struct aml_resource_address
326 AML_RESOURCE_LARGE_HEADER_COMMON
327 AML_RESOURCE_ADDRESS_COMMON
329 } AML_RESOURCE_ADDRESS
;
332 typedef struct aml_resource_extended_address64
334 AML_RESOURCE_LARGE_HEADER_COMMON
335 AML_RESOURCE_ADDRESS_COMMON
341 UINT64 TranslationOffset
;
342 UINT64 AddressLength
;
345 } AML_RESOURCE_EXTENDED_ADDRESS64
;
347 #define AML_RESOURCE_EXTENDED_ADDRESS_REVISION 1 /* ACPI 3.0 */
350 typedef struct aml_resource_address64
352 AML_RESOURCE_LARGE_HEADER_COMMON
353 AML_RESOURCE_ADDRESS_COMMON
357 UINT64 TranslationOffset
;
358 UINT64 AddressLength
;
360 } AML_RESOURCE_ADDRESS64
;
363 typedef struct aml_resource_address32
365 AML_RESOURCE_LARGE_HEADER_COMMON
366 AML_RESOURCE_ADDRESS_COMMON
370 UINT32 TranslationOffset
;
371 UINT32 AddressLength
;
373 } AML_RESOURCE_ADDRESS32
;
376 typedef struct aml_resource_address16
378 AML_RESOURCE_LARGE_HEADER_COMMON
379 AML_RESOURCE_ADDRESS_COMMON
383 UINT16 TranslationOffset
;
384 UINT16 AddressLength
;
386 } AML_RESOURCE_ADDRESS16
;
389 typedef struct aml_resource_extended_irq
391 AML_RESOURCE_LARGE_HEADER_COMMON
393 UINT8 InterruptCount
;
394 UINT32 Interrupts
[1];
395 /* ResSourceIndex, ResSource optional fields follow */
397 } AML_RESOURCE_EXTENDED_IRQ
;
400 typedef struct aml_resource_generic_register
402 AML_RESOURCE_LARGE_HEADER_COMMON
403 UINT8 AddressSpaceId
;
406 UINT8 AccessSize
; /* ACPI 3.0, was previously Reserved */
409 } AML_RESOURCE_GENERIC_REGISTER
;
412 /* Common descriptor for GpioInt and GpioIo (ACPI 5.0) */
414 typedef struct aml_resource_gpio
416 AML_RESOURCE_LARGE_HEADER_COMMON
418 UINT8 ConnectionType
;
422 UINT16 DriveStrength
;
423 UINT16 DebounceTimeout
;
424 UINT16 PinTableOffset
;
425 UINT8 ResSourceIndex
;
426 UINT16 ResSourceOffset
;
430 * Optional fields follow immediately:
431 * 1) PIN list (Words)
432 * 2) Resource Source String
433 * 3) Vendor Data bytes
438 #define AML_RESOURCE_GPIO_REVISION 1 /* ACPI 5.0 */
440 /* Values for ConnectionType above */
442 #define AML_RESOURCE_GPIO_TYPE_INT 0
443 #define AML_RESOURCE_GPIO_TYPE_IO 1
444 #define AML_RESOURCE_MAX_GPIOTYPE 1
447 /* Common preamble for all serial descriptors (ACPI 5.0) */
449 #define AML_RESOURCE_SERIAL_COMMON \
451 UINT8 ResSourceIndex; \
454 UINT16 TypeSpecificFlags; \
455 UINT8 TypeRevisionId; \
456 UINT16 TypeDataLength; \
458 /* Values for the type field above */
460 #define AML_RESOURCE_I2C_SERIALBUSTYPE 1
461 #define AML_RESOURCE_SPI_SERIALBUSTYPE 2
462 #define AML_RESOURCE_UART_SERIALBUSTYPE 3
463 #define AML_RESOURCE_MAX_SERIALBUSTYPE 3
464 #define AML_RESOURCE_VENDOR_SERIALBUSTYPE 192 /* Vendor defined is 0xC0-0xFF (NOT SUPPORTED) */
466 typedef struct aml_resource_common_serialbus
468 AML_RESOURCE_LARGE_HEADER_COMMON
469 AML_RESOURCE_SERIAL_COMMON
471 } AML_RESOURCE_COMMON_SERIALBUS
;
473 typedef struct aml_resource_i2c_serialbus
475 AML_RESOURCE_LARGE_HEADER_COMMON
476 AML_RESOURCE_SERIAL_COMMON
477 UINT32 ConnectionSpeed
;
480 * Optional fields follow immediately:
481 * 1) Vendor Data bytes
482 * 2) Resource Source String
485 } AML_RESOURCE_I2C_SERIALBUS
;
487 #define AML_RESOURCE_I2C_REVISION 1 /* ACPI 5.0 */
488 #define AML_RESOURCE_I2C_TYPE_REVISION 1 /* ACPI 5.0 */
489 #define AML_RESOURCE_I2C_MIN_DATA_LEN 6
491 typedef struct aml_resource_spi_serialbus
493 AML_RESOURCE_LARGE_HEADER_COMMON
494 AML_RESOURCE_SERIAL_COMMON
495 UINT32 ConnectionSpeed
;
499 UINT16 DeviceSelection
;
501 * Optional fields follow immediately:
502 * 1) Vendor Data bytes
503 * 2) Resource Source String
506 } AML_RESOURCE_SPI_SERIALBUS
;
508 #define AML_RESOURCE_SPI_REVISION 1 /* ACPI 5.0 */
509 #define AML_RESOURCE_SPI_TYPE_REVISION 1 /* ACPI 5.0 */
510 #define AML_RESOURCE_SPI_MIN_DATA_LEN 9
513 typedef struct aml_resource_uart_serialbus
515 AML_RESOURCE_LARGE_HEADER_COMMON
516 AML_RESOURCE_SERIAL_COMMON
517 UINT32 DefaultBaudRate
;
523 * Optional fields follow immediately:
524 * 1) Vendor Data bytes
525 * 2) Resource Source String
528 } AML_RESOURCE_UART_SERIALBUS
;
530 #define AML_RESOURCE_UART_REVISION 1 /* ACPI 5.0 */
531 #define AML_RESOURCE_UART_TYPE_REVISION 1 /* ACPI 5.0 */
532 #define AML_RESOURCE_UART_MIN_DATA_LEN 10
534 typedef struct aml_resource_pin_function
536 AML_RESOURCE_LARGE_HEADER_COMMON
540 UINT16 FunctionNumber
;
541 UINT16 PinTableOffset
;
542 UINT8 ResSourceIndex
;
543 UINT16 ResSourceOffset
;
547 * Optional fields follow immediately:
548 * 1) PIN list (Words)
549 * 2) Resource Source String
550 * 3) Vendor Data bytes
553 } AML_RESOURCE_PIN_FUNCTION
;
555 #define AML_RESOURCE_PIN_FUNCTION_REVISION 1 /* ACPI 6.2 */
557 typedef struct aml_resource_pin_config
559 AML_RESOURCE_LARGE_HEADER_COMMON
563 UINT32 PinConfigValue
;
564 UINT16 PinTableOffset
;
565 UINT8 ResSourceIndex
;
566 UINT16 ResSourceOffset
;
570 * Optional fields follow immediately:
571 * 1) PIN list (Words)
572 * 2) Resource Source String
573 * 3) Vendor Data bytes
576 } AML_RESOURCE_PIN_CONFIG
;
578 #define AML_RESOURCE_PIN_CONFIG_REVISION 1 /* ACPI 6.2 */
580 typedef struct aml_resource_pin_group
582 AML_RESOURCE_LARGE_HEADER_COMMON
585 UINT16 PinTableOffset
;
590 * Optional fields follow immediately:
591 * 1) PIN list (Words)
592 * 2) Resource Label String
593 * 3) Vendor Data bytes
596 } AML_RESOURCE_PIN_GROUP
;
598 #define AML_RESOURCE_PIN_GROUP_REVISION 1 /* ACPI 6.2 */
600 typedef struct aml_resource_pin_group_function
602 AML_RESOURCE_LARGE_HEADER_COMMON
605 UINT16 FunctionNumber
;
606 UINT8 ResSourceIndex
;
607 UINT16 ResSourceOffset
;
608 UINT16 ResSourceLabelOffset
;
612 * Optional fields follow immediately:
613 * 1) Resource Source String
614 * 2) Resource Source Label String
615 * 3) Vendor Data bytes
618 } AML_RESOURCE_PIN_GROUP_FUNCTION
;
620 #define AML_RESOURCE_PIN_GROUP_FUNCTION_REVISION 1 /* ACPI 6.2 */
622 typedef struct aml_resource_pin_group_config
624 AML_RESOURCE_LARGE_HEADER_COMMON
628 UINT32 PinConfigValue
;
629 UINT8 ResSourceIndex
;
630 UINT16 ResSourceOffset
;
631 UINT16 ResSourceLabelOffset
;
635 * Optional fields follow immediately:
636 * 1) Resource Source String
637 * 2) Resource Source Label String
638 * 3) Vendor Data bytes
641 } AML_RESOURCE_PIN_GROUP_CONFIG
;
643 #define AML_RESOURCE_PIN_GROUP_CONFIG_REVISION 1 /* ACPI 6.2 */
645 /* restore default alignment */
649 /* Union of all resource descriptors, so we can allocate the worst case */
651 typedef union aml_resource
653 /* Descriptor headers */
655 UINT8 DescriptorType
;
656 AML_RESOURCE_SMALL_HEADER SmallHeader
;
657 AML_RESOURCE_LARGE_HEADER LargeHeader
;
659 /* Small resource descriptors */
661 AML_RESOURCE_IRQ Irq
;
662 AML_RESOURCE_DMA Dma
;
663 AML_RESOURCE_START_DEPENDENT StartDpf
;
664 AML_RESOURCE_END_DEPENDENT EndDpf
;
666 AML_RESOURCE_FIXED_IO FixedIo
;
667 AML_RESOURCE_FIXED_DMA FixedDma
;
668 AML_RESOURCE_VENDOR_SMALL VendorSmall
;
669 AML_RESOURCE_END_TAG EndTag
;
671 /* Large resource descriptors */
673 AML_RESOURCE_MEMORY24 Memory24
;
674 AML_RESOURCE_GENERIC_REGISTER GenericReg
;
675 AML_RESOURCE_VENDOR_LARGE VendorLarge
;
676 AML_RESOURCE_MEMORY32 Memory32
;
677 AML_RESOURCE_FIXED_MEMORY32 FixedMemory32
;
678 AML_RESOURCE_ADDRESS16 Address16
;
679 AML_RESOURCE_ADDRESS32 Address32
;
680 AML_RESOURCE_ADDRESS64 Address64
;
681 AML_RESOURCE_EXTENDED_ADDRESS64 ExtAddress64
;
682 AML_RESOURCE_EXTENDED_IRQ ExtendedIrq
;
683 AML_RESOURCE_GPIO Gpio
;
684 AML_RESOURCE_I2C_SERIALBUS I2cSerialBus
;
685 AML_RESOURCE_SPI_SERIALBUS SpiSerialBus
;
686 AML_RESOURCE_UART_SERIALBUS UartSerialBus
;
687 AML_RESOURCE_COMMON_SERIALBUS CommonSerialBus
;
688 AML_RESOURCE_PIN_FUNCTION PinFunction
;
689 AML_RESOURCE_PIN_CONFIG PinConfig
;
690 AML_RESOURCE_PIN_GROUP PinGroup
;
691 AML_RESOURCE_PIN_GROUP_FUNCTION PinGroupFunction
;
692 AML_RESOURCE_PIN_GROUP_CONFIG PinGroupConfig
;
694 /* Utility overlays */
696 AML_RESOURCE_ADDRESS Address
;
704 /* Interfaces used by both the disassembler and compiler */
708 ACPI_PARSE_OBJECT
*Op
,
709 AML_RESOURCE
*Resource
,
716 ACPI_PARSE_OBJECT
*Op
,
717 AML_RESOURCE
*Resource
,
721 MpGetHidFromParseTree (
722 ACPI_NAMESPACE_NODE
*HidNode
);
725 MpGetHidViaNamestring (
729 MpGetConnectionInfo (
730 ACPI_PARSE_OBJECT
*Op
,
732 ACPI_NAMESPACE_NODE
**TargetNode
,
736 MpGetParentDeviceHid (
737 ACPI_PARSE_OBJECT
*Op
,
738 ACPI_NAMESPACE_NODE
**TargetNode
,
739 char **ParentDeviceName
);
747 ACPI_NAMESPACE_NODE
*DeviceNode
);