xref: /openbmc/linux/include/acpi/acrestyp.h (revision 1ac731c529cd4d6adbce134754b51ff7d822b145)
195857638SErik Schmauss /* SPDX-License-Identifier: BSD-3-Clause OR GPL-2.0 */
250df4d8bSBob Moore /******************************************************************************
350df4d8bSBob Moore  *
450df4d8bSBob Moore  * Name: acrestyp.h - Defines, types, and structures for resource descriptors
550df4d8bSBob Moore  *
6612c2932SBob Moore  * Copyright (C) 2000 - 2023, Intel Corp.
750df4d8bSBob Moore  *
895857638SErik Schmauss  *****************************************************************************/
950df4d8bSBob Moore 
1050df4d8bSBob Moore #ifndef __ACRESTYP_H__
1150df4d8bSBob Moore #define __ACRESTYP_H__
1250df4d8bSBob Moore 
1350df4d8bSBob Moore /*
1450df4d8bSBob Moore  * Definitions for Resource Attributes
1550df4d8bSBob Moore  */
1650df4d8bSBob Moore typedef u16 acpi_rs_length;	/* Resource Length field is fixed at 16 bits */
17ba494beeSBob Moore typedef u32 acpi_rsdesc_size;	/* Max Resource Descriptor size is (Length+3) = (64K-1)+3 */
1850df4d8bSBob Moore 
1950df4d8bSBob Moore /*
2050df4d8bSBob Moore  * Memory Attributes
2150df4d8bSBob Moore  */
2250df4d8bSBob Moore #define ACPI_READ_ONLY_MEMORY           (u8) 0x00
2350df4d8bSBob Moore #define ACPI_READ_WRITE_MEMORY          (u8) 0x01
2450df4d8bSBob Moore 
2550df4d8bSBob Moore #define ACPI_NON_CACHEABLE_MEMORY       (u8) 0x00
2650df4d8bSBob Moore #define ACPI_CACHABLE_MEMORY            (u8) 0x01
2750df4d8bSBob Moore #define ACPI_WRITE_COMBINING_MEMORY     (u8) 0x02
2850df4d8bSBob Moore #define ACPI_PREFETCHABLE_MEMORY        (u8) 0x03
2950df4d8bSBob Moore 
30e0fe0a8dSLin Ming /*! [Begin] no source code translation */
3150df4d8bSBob Moore /*
3250df4d8bSBob Moore  * IO Attributes
33e0fe0a8dSLin Ming  * The ISA IO ranges are:     n000-n0FFh,  n400-n4FFh, n800-n8FFh, nC00-nCFFh.
34e0fe0a8dSLin Ming  * The non-ISA IO ranges are: n100-n3FFh,  n500-n7FFh, n900-nBFFh, nCD0-nFFFh.
3550df4d8bSBob Moore  */
36e0fe0a8dSLin Ming /*! [End] no source code translation !*/
37e0fe0a8dSLin Ming 
3850df4d8bSBob Moore #define ACPI_NON_ISA_ONLY_RANGES        (u8) 0x01
3950df4d8bSBob Moore #define ACPI_ISA_ONLY_RANGES            (u8) 0x02
4050df4d8bSBob Moore #define ACPI_ENTIRE_RANGE               (ACPI_NON_ISA_ONLY_RANGES | ACPI_ISA_ONLY_RANGES)
4150df4d8bSBob Moore 
4250df4d8bSBob Moore /* Type of translation - 1=Sparse, 0=Dense */
4350df4d8bSBob Moore 
4450df4d8bSBob Moore #define ACPI_SPARSE_TRANSLATION         (u8) 0x01
4550df4d8bSBob Moore 
4650df4d8bSBob Moore /*
4750df4d8bSBob Moore  * IO Port Descriptor Decode
4850df4d8bSBob Moore  */
4950df4d8bSBob Moore #define ACPI_DECODE_10                  (u8) 0x00	/* 10-bit IO address decode */
5050df4d8bSBob Moore #define ACPI_DECODE_16                  (u8) 0x01	/* 16-bit IO address decode */
5150df4d8bSBob Moore 
5250df4d8bSBob Moore /*
53e0fe0a8dSLin Ming  * Interrupt attributes - used in multiple descriptors
5450df4d8bSBob Moore  */
55e0fe0a8dSLin Ming 
56e0fe0a8dSLin Ming /* Triggering */
57e0fe0a8dSLin Ming 
5850df4d8bSBob Moore #define ACPI_LEVEL_SENSITIVE            (u8) 0x00
5950df4d8bSBob Moore #define ACPI_EDGE_SENSITIVE             (u8) 0x01
6050df4d8bSBob Moore 
61e0fe0a8dSLin Ming /* Polarity */
62e0fe0a8dSLin Ming 
6350df4d8bSBob Moore #define ACPI_ACTIVE_HIGH                (u8) 0x00
6450df4d8bSBob Moore #define ACPI_ACTIVE_LOW                 (u8) 0x01
65e0fe0a8dSLin Ming #define ACPI_ACTIVE_BOTH                (u8) 0x02
66e0fe0a8dSLin Ming 
67e0fe0a8dSLin Ming /* Sharing */
6850df4d8bSBob Moore 
6950df4d8bSBob Moore #define ACPI_EXCLUSIVE                  (u8) 0x00
7050df4d8bSBob Moore #define ACPI_SHARED                     (u8) 0x01
719cea6249SBob Moore 
729cea6249SBob Moore /* Wake */
739cea6249SBob Moore 
749cea6249SBob Moore #define ACPI_NOT_WAKE_CAPABLE           (u8) 0x00
759cea6249SBob Moore #define ACPI_WAKE_CAPABLE               (u8) 0x01
7650df4d8bSBob Moore 
7750df4d8bSBob Moore /*
7850df4d8bSBob Moore  * DMA Attributes
7950df4d8bSBob Moore  */
8050df4d8bSBob Moore #define ACPI_COMPATIBILITY              (u8) 0x00
8150df4d8bSBob Moore #define ACPI_TYPE_A                     (u8) 0x01
8250df4d8bSBob Moore #define ACPI_TYPE_B                     (u8) 0x02
8350df4d8bSBob Moore #define ACPI_TYPE_F                     (u8) 0x03
8450df4d8bSBob Moore 
8550df4d8bSBob Moore #define ACPI_NOT_BUS_MASTER             (u8) 0x00
8650df4d8bSBob Moore #define ACPI_BUS_MASTER                 (u8) 0x01
8750df4d8bSBob Moore 
8850df4d8bSBob Moore #define ACPI_TRANSFER_8                 (u8) 0x00
8950df4d8bSBob Moore #define ACPI_TRANSFER_8_16              (u8) 0x01
9050df4d8bSBob Moore #define ACPI_TRANSFER_16                (u8) 0x02
9150df4d8bSBob Moore 
9250df4d8bSBob Moore /*
9350df4d8bSBob Moore  * Start Dependent Functions Priority definitions
9450df4d8bSBob Moore  */
9550df4d8bSBob Moore #define ACPI_GOOD_CONFIGURATION         (u8) 0x00
9650df4d8bSBob Moore #define ACPI_ACCEPTABLE_CONFIGURATION   (u8) 0x01
9750df4d8bSBob Moore #define ACPI_SUB_OPTIMAL_CONFIGURATION  (u8) 0x02
9850df4d8bSBob Moore 
9950df4d8bSBob Moore /*
10050df4d8bSBob Moore  * 16, 32 and 64-bit Address Descriptor resource types
10150df4d8bSBob Moore  */
10250df4d8bSBob Moore #define ACPI_MEMORY_RANGE               (u8) 0x00
10350df4d8bSBob Moore #define ACPI_IO_RANGE                   (u8) 0x01
10450df4d8bSBob Moore #define ACPI_BUS_NUMBER_RANGE           (u8) 0x02
10550df4d8bSBob Moore 
10650df4d8bSBob Moore #define ACPI_ADDRESS_NOT_FIXED          (u8) 0x00
10750df4d8bSBob Moore #define ACPI_ADDRESS_FIXED              (u8) 0x01
10850df4d8bSBob Moore 
10950df4d8bSBob Moore #define ACPI_POS_DECODE                 (u8) 0x00
11050df4d8bSBob Moore #define ACPI_SUB_DECODE                 (u8) 0x01
11150df4d8bSBob Moore 
112e0fe0a8dSLin Ming /* Producer/Consumer */
113e0fe0a8dSLin Ming 
11450df4d8bSBob Moore #define ACPI_PRODUCER                   (u8) 0x00
11550df4d8bSBob Moore #define ACPI_CONSUMER                   (u8) 0x01
11650df4d8bSBob Moore 
11750df4d8bSBob Moore /*
11850df4d8bSBob Moore  * If possible, pack the following structures to byte alignment
11950df4d8bSBob Moore  */
12050df4d8bSBob Moore #ifndef ACPI_MISALIGNMENT_NOT_SUPPORTED
12150df4d8bSBob Moore #pragma pack(1)
12250df4d8bSBob Moore #endif
12350df4d8bSBob Moore 
12450df4d8bSBob Moore /* UUID data structures for use in vendor-defined resource descriptors */
12550df4d8bSBob Moore 
12650df4d8bSBob Moore struct acpi_uuid {
12750df4d8bSBob Moore 	u8 data[ACPI_UUID_LENGTH];
12850df4d8bSBob Moore };
12950df4d8bSBob Moore 
13050df4d8bSBob Moore struct acpi_vendor_uuid {
13150df4d8bSBob Moore 	u8 subtype;
13250df4d8bSBob Moore 	u8 data[ACPI_UUID_LENGTH];
13350df4d8bSBob Moore };
13450df4d8bSBob Moore 
13550df4d8bSBob Moore /*
13650df4d8bSBob Moore  * Structures used to describe device resources
13750df4d8bSBob Moore  */
13850df4d8bSBob Moore struct acpi_resource_irq {
13950df4d8bSBob Moore 	u8 descriptor_length;
14050df4d8bSBob Moore 	u8 triggering;
14150df4d8bSBob Moore 	u8 polarity;
142c163f90cSErik Schmauss 	u8 shareable;
1439cea6249SBob Moore 	u8 wake_capable;
14450df4d8bSBob Moore 	u8 interrupt_count;
145*376b0fb3SKees Cook 	union {
146*376b0fb3SKees Cook 		u8 interrupt;
147*376b0fb3SKees Cook 		 ACPI_FLEX_ARRAY(u8, interrupts);
148*376b0fb3SKees Cook 	};
14950df4d8bSBob Moore };
15050df4d8bSBob Moore 
15150df4d8bSBob Moore struct acpi_resource_dma {
15250df4d8bSBob Moore 	u8 type;
15350df4d8bSBob Moore 	u8 bus_master;
15450df4d8bSBob Moore 	u8 transfer;
15550df4d8bSBob Moore 	u8 channel_count;
1566671709cSKees Cook 	union {
1576671709cSKees Cook 		u8 channel;
1586671709cSKees Cook 		 ACPI_FLEX_ARRAY(u8, channels);
1596671709cSKees Cook 	};
16050df4d8bSBob Moore };
16150df4d8bSBob Moore 
16250df4d8bSBob Moore struct acpi_resource_start_dependent {
16350df4d8bSBob Moore 	u8 descriptor_length;
16450df4d8bSBob Moore 	u8 compatibility_priority;
16550df4d8bSBob Moore 	u8 performance_robustness;
16650df4d8bSBob Moore };
16750df4d8bSBob Moore 
16850df4d8bSBob Moore /*
16950df4d8bSBob Moore  * The END_DEPENDENT_FUNCTIONS_RESOURCE struct is not
17050df4d8bSBob Moore  * needed because it has no fields
17150df4d8bSBob Moore  */
17250df4d8bSBob Moore 
17350df4d8bSBob Moore struct acpi_resource_io {
17450df4d8bSBob Moore 	u8 io_decode;
17550df4d8bSBob Moore 	u8 alignment;
17650df4d8bSBob Moore 	u8 address_length;
17750df4d8bSBob Moore 	u16 minimum;
17850df4d8bSBob Moore 	u16 maximum;
17950df4d8bSBob Moore };
18050df4d8bSBob Moore 
18150df4d8bSBob Moore struct acpi_resource_fixed_io {
18250df4d8bSBob Moore 	u16 address;
18350df4d8bSBob Moore 	u8 address_length;
18450df4d8bSBob Moore };
18550df4d8bSBob Moore 
186e0fe0a8dSLin Ming struct acpi_resource_fixed_dma {
187e0fe0a8dSLin Ming 	u16 request_lines;
188e0fe0a8dSLin Ming 	u16 channels;
189e0fe0a8dSLin Ming 	u8 width;
190e0fe0a8dSLin Ming };
191e0fe0a8dSLin Ming 
192e0fe0a8dSLin Ming /* Values for Width field above */
193e0fe0a8dSLin Ming 
194e0fe0a8dSLin Ming #define ACPI_DMA_WIDTH8                         0
195e0fe0a8dSLin Ming #define ACPI_DMA_WIDTH16                        1
196e0fe0a8dSLin Ming #define ACPI_DMA_WIDTH32                        2
197e0fe0a8dSLin Ming #define ACPI_DMA_WIDTH64                        3
198e0fe0a8dSLin Ming #define ACPI_DMA_WIDTH128                       4
199e0fe0a8dSLin Ming #define ACPI_DMA_WIDTH256                       5
200e0fe0a8dSLin Ming 
20150df4d8bSBob Moore struct acpi_resource_vendor {
20250df4d8bSBob Moore 	u16 byte_length;
20394bf7c8aSKees Cook 	u8 byte_data[];
20450df4d8bSBob Moore };
20550df4d8bSBob Moore 
20650df4d8bSBob Moore /* Vendor resource with UUID info (introduced in ACPI 3.0) */
20750df4d8bSBob Moore 
20850df4d8bSBob Moore struct acpi_resource_vendor_typed {
20950df4d8bSBob Moore 	u16 byte_length;
21050df4d8bSBob Moore 	u8 uuid_subtype;
21150df4d8bSBob Moore 	u8 uuid[ACPI_UUID_LENGTH];
21294bf7c8aSKees Cook 	u8 byte_data[];
21350df4d8bSBob Moore };
21450df4d8bSBob Moore 
21550df4d8bSBob Moore struct acpi_resource_end_tag {
21650df4d8bSBob Moore 	u8 checksum;
21750df4d8bSBob Moore };
21850df4d8bSBob Moore 
21950df4d8bSBob Moore struct acpi_resource_memory24 {
22050df4d8bSBob Moore 	u8 write_protect;
22150df4d8bSBob Moore 	u16 minimum;
22250df4d8bSBob Moore 	u16 maximum;
22350df4d8bSBob Moore 	u16 alignment;
22450df4d8bSBob Moore 	u16 address_length;
22550df4d8bSBob Moore };
22650df4d8bSBob Moore 
22750df4d8bSBob Moore struct acpi_resource_memory32 {
22850df4d8bSBob Moore 	u8 write_protect;
22950df4d8bSBob Moore 	u32 minimum;
23050df4d8bSBob Moore 	u32 maximum;
23150df4d8bSBob Moore 	u32 alignment;
23250df4d8bSBob Moore 	u32 address_length;
23350df4d8bSBob Moore };
23450df4d8bSBob Moore 
23550df4d8bSBob Moore struct acpi_resource_fixed_memory32 {
23650df4d8bSBob Moore 	u8 write_protect;
23750df4d8bSBob Moore 	u32 address;
23850df4d8bSBob Moore 	u32 address_length;
23950df4d8bSBob Moore };
24050df4d8bSBob Moore 
24150df4d8bSBob Moore struct acpi_memory_attribute {
24250df4d8bSBob Moore 	u8 write_protect;
24350df4d8bSBob Moore 	u8 caching;
24450df4d8bSBob Moore 	u8 range_type;
24550df4d8bSBob Moore 	u8 translation;
24650df4d8bSBob Moore };
24750df4d8bSBob Moore 
24850df4d8bSBob Moore struct acpi_io_attribute {
24950df4d8bSBob Moore 	u8 range_type;
25050df4d8bSBob Moore 	u8 translation;
25150df4d8bSBob Moore 	u8 translation_type;
25250df4d8bSBob Moore 	u8 reserved1;
25350df4d8bSBob Moore };
25450df4d8bSBob Moore 
25550df4d8bSBob Moore union acpi_resource_attribute {
25650df4d8bSBob Moore 	struct acpi_memory_attribute mem;
25750df4d8bSBob Moore 	struct acpi_io_attribute io;
25850df4d8bSBob Moore 
25950df4d8bSBob Moore 	/* Used for the *word_space macros */
26050df4d8bSBob Moore 
26150df4d8bSBob Moore 	u8 type_specific;
26250df4d8bSBob Moore };
26350df4d8bSBob Moore 
264fdaa0980SMika Westerberg struct acpi_resource_label {
265fdaa0980SMika Westerberg 	u16 string_length;
266fdaa0980SMika Westerberg 	char *string_ptr;
267fdaa0980SMika Westerberg };
268fdaa0980SMika Westerberg 
26950df4d8bSBob Moore struct acpi_resource_source {
27050df4d8bSBob Moore 	u8 index;
27150df4d8bSBob Moore 	u16 string_length;
27250df4d8bSBob Moore 	char *string_ptr;
27350df4d8bSBob Moore };
27450df4d8bSBob Moore 
27550df4d8bSBob Moore /* Fields common to all address descriptors, 16/32/64 bit */
27650df4d8bSBob Moore 
27750df4d8bSBob Moore #define ACPI_RESOURCE_ADDRESS_COMMON \
27850df4d8bSBob Moore 	u8                                      resource_type; \
27950df4d8bSBob Moore 	u8                                      producer_consumer; \
28050df4d8bSBob Moore 	u8                                      decode; \
28150df4d8bSBob Moore 	u8                                      min_address_fixed; \
28250df4d8bSBob Moore 	u8                                      max_address_fixed; \
28350df4d8bSBob Moore 	union acpi_resource_attribute           info;
28450df4d8bSBob Moore 
285a45de93eSLv Zheng struct acpi_address16_attribute {
286a45de93eSLv Zheng 	u16 granularity;
28750df4d8bSBob Moore 	u16 minimum;
28850df4d8bSBob Moore 	u16 maximum;
28950df4d8bSBob Moore 	u16 translation_offset;
29050df4d8bSBob Moore 	u16 address_length;
29150df4d8bSBob Moore };
29250df4d8bSBob Moore 
293a45de93eSLv Zheng struct acpi_address32_attribute {
294a45de93eSLv Zheng 	u32 granularity;
29550df4d8bSBob Moore 	u32 minimum;
29650df4d8bSBob Moore 	u32 maximum;
29750df4d8bSBob Moore 	u32 translation_offset;
29850df4d8bSBob Moore 	u32 address_length;
29950df4d8bSBob Moore };
30050df4d8bSBob Moore 
301a45de93eSLv Zheng struct acpi_address64_attribute {
30250df4d8bSBob Moore 	u64 granularity;
30350df4d8bSBob Moore 	u64 minimum;
30450df4d8bSBob Moore 	u64 maximum;
30550df4d8bSBob Moore 	u64 translation_offset;
30650df4d8bSBob Moore 	u64 address_length;
307a45de93eSLv Zheng };
308a45de93eSLv Zheng 
309a45de93eSLv Zheng struct acpi_resource_address {
310a45de93eSLv Zheng ACPI_RESOURCE_ADDRESS_COMMON};
311a45de93eSLv Zheng 
312a45de93eSLv Zheng struct acpi_resource_address16 {
313a45de93eSLv Zheng 	ACPI_RESOURCE_ADDRESS_COMMON struct acpi_address16_attribute address;
314a45de93eSLv Zheng 	struct acpi_resource_source resource_source;
315a45de93eSLv Zheng };
316a45de93eSLv Zheng 
317a45de93eSLv Zheng struct acpi_resource_address32 {
318a45de93eSLv Zheng 	ACPI_RESOURCE_ADDRESS_COMMON struct acpi_address32_attribute address;
319a45de93eSLv Zheng 	struct acpi_resource_source resource_source;
320a45de93eSLv Zheng };
321a45de93eSLv Zheng 
322a45de93eSLv Zheng struct acpi_resource_address64 {
323a45de93eSLv Zheng 	ACPI_RESOURCE_ADDRESS_COMMON struct acpi_address64_attribute address;
324a45de93eSLv Zheng 	struct acpi_resource_source resource_source;
325a45de93eSLv Zheng };
326a45de93eSLv Zheng 
327a45de93eSLv Zheng struct acpi_resource_extended_address64 {
328a45de93eSLv Zheng 	ACPI_RESOURCE_ADDRESS_COMMON u8 revision_ID;
329a45de93eSLv Zheng 	struct acpi_address64_attribute address;
33050df4d8bSBob Moore 	u64 type_specific;
33150df4d8bSBob Moore };
33250df4d8bSBob Moore 
33350df4d8bSBob Moore struct acpi_resource_extended_irq {
33450df4d8bSBob Moore 	u8 producer_consumer;
33550df4d8bSBob Moore 	u8 triggering;
33650df4d8bSBob Moore 	u8 polarity;
337c163f90cSErik Schmauss 	u8 shareable;
3389cea6249SBob Moore 	u8 wake_capable;
33950df4d8bSBob Moore 	u8 interrupt_count;
34050df4d8bSBob Moore 	struct acpi_resource_source resource_source;
341*376b0fb3SKees Cook 	union {
342*376b0fb3SKees Cook 		u32 interrupt;
343*376b0fb3SKees Cook 		 ACPI_FLEX_ARRAY(u32, interrupts);
344*376b0fb3SKees Cook 	};
34550df4d8bSBob Moore };
34650df4d8bSBob Moore 
34750df4d8bSBob Moore struct acpi_resource_generic_register {
34850df4d8bSBob Moore 	u8 space_id;
34950df4d8bSBob Moore 	u8 bit_width;
35050df4d8bSBob Moore 	u8 bit_offset;
35150df4d8bSBob Moore 	u8 access_size;
35250df4d8bSBob Moore 	u64 address;
35350df4d8bSBob Moore };
35450df4d8bSBob Moore 
355e0fe0a8dSLin Ming struct acpi_resource_gpio {
356e0fe0a8dSLin Ming 	u8 revision_id;
357e0fe0a8dSLin Ming 	u8 connection_type;
358e0fe0a8dSLin Ming 	u8 producer_consumer;	/* For values, see Producer/Consumer above */
359e0fe0a8dSLin Ming 	u8 pin_config;
360c163f90cSErik Schmauss 	u8 shareable;		/* For values, see Interrupt Attributes above */
3619cea6249SBob Moore 	u8 wake_capable;	/* For values, see Interrupt Attributes above */
362e0fe0a8dSLin Ming 	u8 io_restriction;
363e0fe0a8dSLin Ming 	u8 triggering;		/* For values, see Interrupt Attributes above */
364e0fe0a8dSLin Ming 	u8 polarity;		/* For values, see Interrupt Attributes above */
365e0fe0a8dSLin Ming 	u16 drive_strength;
366e0fe0a8dSLin Ming 	u16 debounce_timeout;
367e0fe0a8dSLin Ming 	u16 pin_table_length;
368e0fe0a8dSLin Ming 	u16 vendor_length;
369e0fe0a8dSLin Ming 	struct acpi_resource_source resource_source;
370e0fe0a8dSLin Ming 	u16 *pin_table;
371e0fe0a8dSLin Ming 	u8 *vendor_data;
372e0fe0a8dSLin Ming };
373e0fe0a8dSLin Ming 
374e0fe0a8dSLin Ming /* Values for GPIO connection_type field above */
375e0fe0a8dSLin Ming 
376e0fe0a8dSLin Ming #define ACPI_RESOURCE_GPIO_TYPE_INT             0
377e0fe0a8dSLin Ming #define ACPI_RESOURCE_GPIO_TYPE_IO              1
378e0fe0a8dSLin Ming 
379e0fe0a8dSLin Ming /* Values for pin_config field above */
380e0fe0a8dSLin Ming 
381e0fe0a8dSLin Ming #define ACPI_PIN_CONFIG_DEFAULT                 0
382e0fe0a8dSLin Ming #define ACPI_PIN_CONFIG_PULLUP                  1
383e0fe0a8dSLin Ming #define ACPI_PIN_CONFIG_PULLDOWN                2
384e0fe0a8dSLin Ming #define ACPI_PIN_CONFIG_NOPULL                  3
385e0fe0a8dSLin Ming 
386e0fe0a8dSLin Ming /* Values for io_restriction field above */
387e0fe0a8dSLin Ming 
388e0fe0a8dSLin Ming #define ACPI_IO_RESTRICT_NONE                   0
389e0fe0a8dSLin Ming #define ACPI_IO_RESTRICT_INPUT                  1
390e0fe0a8dSLin Ming #define ACPI_IO_RESTRICT_OUTPUT                 2
391e0fe0a8dSLin Ming #define ACPI_IO_RESTRICT_NONE_PRESERVE          3
392e0fe0a8dSLin Ming 
393a2befbb2SBob Moore /* Common structure for I2C, SPI, UART, CSI2 serial descriptors */
394e0fe0a8dSLin Ming 
395e0fe0a8dSLin Ming #define ACPI_RESOURCE_SERIAL_COMMON \
396e0fe0a8dSLin Ming 	u8                                      revision_id; \
397e0fe0a8dSLin Ming 	u8                                      type; \
398e0fe0a8dSLin Ming 	u8                                      producer_consumer;   /* For values, see Producer/Consumer above */\
399e0fe0a8dSLin Ming 	u8                                      slave_mode; \
40014f98579SBob Moore 	u8                                      connection_sharing; \
401e0fe0a8dSLin Ming 	u8                                      type_revision_id; \
402e0fe0a8dSLin Ming 	u16                                     type_data_length; \
403e0fe0a8dSLin Ming 	u16                                     vendor_length; \
404e0fe0a8dSLin Ming 	struct acpi_resource_source             resource_source; \
405e0fe0a8dSLin Ming 	u8                                      *vendor_data;
406e0fe0a8dSLin Ming 
407e0fe0a8dSLin Ming struct acpi_resource_common_serialbus {
408e0fe0a8dSLin Ming ACPI_RESOURCE_SERIAL_COMMON};
409e0fe0a8dSLin Ming 
410e0fe0a8dSLin Ming /* Values for the Type field above */
411e0fe0a8dSLin Ming 
412e0fe0a8dSLin Ming #define ACPI_RESOURCE_SERIAL_TYPE_I2C           1
413e0fe0a8dSLin Ming #define ACPI_RESOURCE_SERIAL_TYPE_SPI           2
414e0fe0a8dSLin Ming #define ACPI_RESOURCE_SERIAL_TYPE_UART          3
415a2befbb2SBob Moore #define ACPI_RESOURCE_SERIAL_TYPE_CSI2          4
416e0fe0a8dSLin Ming 
417e0fe0a8dSLin Ming /* Values for slave_mode field above */
418e0fe0a8dSLin Ming 
419e0fe0a8dSLin Ming #define ACPI_CONTROLLER_INITIATED               0
420e0fe0a8dSLin Ming #define ACPI_DEVICE_INITIATED                   1
421e0fe0a8dSLin Ming 
422e0fe0a8dSLin Ming struct acpi_resource_i2c_serialbus {
423e0fe0a8dSLin Ming 	ACPI_RESOURCE_SERIAL_COMMON u8 access_mode;
424e0fe0a8dSLin Ming 	u16 slave_address;
425e0fe0a8dSLin Ming 	u32 connection_speed;
426e0fe0a8dSLin Ming };
427e0fe0a8dSLin Ming 
428e0fe0a8dSLin Ming /* Values for access_mode field above */
429e0fe0a8dSLin Ming 
430e0fe0a8dSLin Ming #define ACPI_I2C_7BIT_MODE                      0
431e0fe0a8dSLin Ming #define ACPI_I2C_10BIT_MODE                     1
432e0fe0a8dSLin Ming 
433e0fe0a8dSLin Ming struct acpi_resource_spi_serialbus {
434e0fe0a8dSLin Ming 	ACPI_RESOURCE_SERIAL_COMMON u8 wire_mode;
435e0fe0a8dSLin Ming 	u8 device_polarity;
436e0fe0a8dSLin Ming 	u8 data_bit_length;
437e0fe0a8dSLin Ming 	u8 clock_phase;
438e0fe0a8dSLin Ming 	u8 clock_polarity;
439e0fe0a8dSLin Ming 	u16 device_selection;
440e0fe0a8dSLin Ming 	u32 connection_speed;
441e0fe0a8dSLin Ming };
442e0fe0a8dSLin Ming 
443e0fe0a8dSLin Ming /* Values for wire_mode field above */
444e0fe0a8dSLin Ming 
445e0fe0a8dSLin Ming #define ACPI_SPI_4WIRE_MODE                     0
446e0fe0a8dSLin Ming #define ACPI_SPI_3WIRE_MODE                     1
447e0fe0a8dSLin Ming 
448e0fe0a8dSLin Ming /* Values for device_polarity field above */
449e0fe0a8dSLin Ming 
450e0fe0a8dSLin Ming #define ACPI_SPI_ACTIVE_LOW                     0
451e0fe0a8dSLin Ming #define ACPI_SPI_ACTIVE_HIGH                    1
452e0fe0a8dSLin Ming 
453e0fe0a8dSLin Ming /* Values for clock_phase field above */
454e0fe0a8dSLin Ming 
455e0fe0a8dSLin Ming #define ACPI_SPI_FIRST_PHASE                    0
456e0fe0a8dSLin Ming #define ACPI_SPI_SECOND_PHASE                   1
457e0fe0a8dSLin Ming 
458e0fe0a8dSLin Ming /* Values for clock_polarity field above */
459e0fe0a8dSLin Ming 
460e0fe0a8dSLin Ming #define ACPI_SPI_START_LOW                      0
461e0fe0a8dSLin Ming #define ACPI_SPI_START_HIGH                     1
462e0fe0a8dSLin Ming 
463e0fe0a8dSLin Ming struct acpi_resource_uart_serialbus {
464e0fe0a8dSLin Ming 	ACPI_RESOURCE_SERIAL_COMMON u8 endian;
465e0fe0a8dSLin Ming 	u8 data_bits;
466e0fe0a8dSLin Ming 	u8 stop_bits;
467e0fe0a8dSLin Ming 	u8 flow_control;
468e0fe0a8dSLin Ming 	u8 parity;
469e0fe0a8dSLin Ming 	u8 lines_enabled;
470e0fe0a8dSLin Ming 	u16 rx_fifo_size;
471e0fe0a8dSLin Ming 	u16 tx_fifo_size;
472e0fe0a8dSLin Ming 	u32 default_baud_rate;
473e0fe0a8dSLin Ming };
474e0fe0a8dSLin Ming 
475e0fe0a8dSLin Ming /* Values for Endian field above */
476e0fe0a8dSLin Ming 
477e0fe0a8dSLin Ming #define ACPI_UART_LITTLE_ENDIAN                 0
478e0fe0a8dSLin Ming #define ACPI_UART_BIG_ENDIAN                    1
479e0fe0a8dSLin Ming 
480e0fe0a8dSLin Ming /* Values for data_bits field above */
481e0fe0a8dSLin Ming 
482e0fe0a8dSLin Ming #define ACPI_UART_5_DATA_BITS                   0
483e0fe0a8dSLin Ming #define ACPI_UART_6_DATA_BITS                   1
484e0fe0a8dSLin Ming #define ACPI_UART_7_DATA_BITS                   2
485e0fe0a8dSLin Ming #define ACPI_UART_8_DATA_BITS                   3
486e0fe0a8dSLin Ming #define ACPI_UART_9_DATA_BITS                   4
487e0fe0a8dSLin Ming 
488e0fe0a8dSLin Ming /* Values for stop_bits field above */
489e0fe0a8dSLin Ming 
490e0fe0a8dSLin Ming #define ACPI_UART_NO_STOP_BITS                  0
491e0fe0a8dSLin Ming #define ACPI_UART_1_STOP_BIT                    1
492e0fe0a8dSLin Ming #define ACPI_UART_1P5_STOP_BITS                 2
493e0fe0a8dSLin Ming #define ACPI_UART_2_STOP_BITS                   3
494e0fe0a8dSLin Ming 
495e0fe0a8dSLin Ming /* Values for flow_control field above */
496e0fe0a8dSLin Ming 
497e0fe0a8dSLin Ming #define ACPI_UART_FLOW_CONTROL_NONE             0
498e0fe0a8dSLin Ming #define ACPI_UART_FLOW_CONTROL_HW               1
499e0fe0a8dSLin Ming #define ACPI_UART_FLOW_CONTROL_XON_XOFF         2
500e0fe0a8dSLin Ming 
501e0fe0a8dSLin Ming /* Values for Parity field above */
502e0fe0a8dSLin Ming 
503e0fe0a8dSLin Ming #define ACPI_UART_PARITY_NONE                   0
504e0fe0a8dSLin Ming #define ACPI_UART_PARITY_EVEN                   1
505e0fe0a8dSLin Ming #define ACPI_UART_PARITY_ODD                    2
506e0fe0a8dSLin Ming #define ACPI_UART_PARITY_MARK                   3
507e0fe0a8dSLin Ming #define ACPI_UART_PARITY_SPACE                  4
508e0fe0a8dSLin Ming 
509e0fe0a8dSLin Ming /* Values for lines_enabled bitfield above */
510e0fe0a8dSLin Ming 
511e0fe0a8dSLin Ming #define ACPI_UART_CARRIER_DETECT                (1<<2)
512e0fe0a8dSLin Ming #define ACPI_UART_RING_INDICATOR                (1<<3)
513e0fe0a8dSLin Ming #define ACPI_UART_DATA_SET_READY                (1<<4)
514e0fe0a8dSLin Ming #define ACPI_UART_DATA_TERMINAL_READY           (1<<5)
515e0fe0a8dSLin Ming #define ACPI_UART_CLEAR_TO_SEND                 (1<<6)
516e0fe0a8dSLin Ming #define ACPI_UART_REQUEST_TO_SEND               (1<<7)
517e0fe0a8dSLin Ming 
518a2befbb2SBob Moore struct acpi_resource_csi2_serialbus {
519a2befbb2SBob Moore 	ACPI_RESOURCE_SERIAL_COMMON u8 local_port_instance;
520a2befbb2SBob Moore 	u8 phy_type;
521a2befbb2SBob Moore };
522a2befbb2SBob Moore 
5232b726930SMika Westerberg struct acpi_resource_pin_function {
5242b726930SMika Westerberg 	u8 revision_id;
5252b726930SMika Westerberg 	u8 pin_config;
526c163f90cSErik Schmauss 	u8 shareable;		/* For values, see Interrupt Attributes above */
5272b726930SMika Westerberg 	u16 function_number;
5282b726930SMika Westerberg 	u16 pin_table_length;
5292b726930SMika Westerberg 	u16 vendor_length;
5302b726930SMika Westerberg 	struct acpi_resource_source resource_source;
5312b726930SMika Westerberg 	u16 *pin_table;
5322b726930SMika Westerberg 	u8 *vendor_data;
5332b726930SMika Westerberg };
5342b726930SMika Westerberg 
53597028ce6SMika Westerberg struct acpi_resource_pin_config {
53697028ce6SMika Westerberg 	u8 revision_id;
53797028ce6SMika Westerberg 	u8 producer_consumer;	/* For values, see Producer/Consumer above */
538c163f90cSErik Schmauss 	u8 shareable;		/* For values, see Interrupt Attributes above */
53997028ce6SMika Westerberg 	u8 pin_config_type;
54097028ce6SMika Westerberg 	u32 pin_config_value;
54197028ce6SMika Westerberg 	u16 pin_table_length;
54297028ce6SMika Westerberg 	u16 vendor_length;
54397028ce6SMika Westerberg 	struct acpi_resource_source resource_source;
54497028ce6SMika Westerberg 	u16 *pin_table;
54597028ce6SMika Westerberg 	u8 *vendor_data;
54697028ce6SMika Westerberg };
54797028ce6SMika Westerberg 
548520d4a0eSNiyas Sait struct acpi_resource_clock_input {
549520d4a0eSNiyas Sait 	u8 revision_id;
550520d4a0eSNiyas Sait 	u8 mode;
551520d4a0eSNiyas Sait 	u8 scale;
552520d4a0eSNiyas Sait 	u16 frequency_divisor;
553520d4a0eSNiyas Sait 	u32 frequency_numerator;
554520d4a0eSNiyas Sait 	struct acpi_resource_source resource_source;
555520d4a0eSNiyas Sait };
556520d4a0eSNiyas Sait 
55797028ce6SMika Westerberg /* Values for pin_config_type field above */
55897028ce6SMika Westerberg 
55997028ce6SMika Westerberg #define ACPI_PIN_CONFIG_DEFAULT                 0
56097028ce6SMika Westerberg #define ACPI_PIN_CONFIG_BIAS_PULL_UP            1
56197028ce6SMika Westerberg #define ACPI_PIN_CONFIG_BIAS_PULL_DOWN          2
56297028ce6SMika Westerberg #define ACPI_PIN_CONFIG_BIAS_DEFAULT            3
56397028ce6SMika Westerberg #define ACPI_PIN_CONFIG_BIAS_DISABLE            4
56497028ce6SMika Westerberg #define ACPI_PIN_CONFIG_BIAS_HIGH_IMPEDANCE     5
56597028ce6SMika Westerberg #define ACPI_PIN_CONFIG_BIAS_BUS_HOLD           6
56697028ce6SMika Westerberg #define ACPI_PIN_CONFIG_DRIVE_OPEN_DRAIN        7
56797028ce6SMika Westerberg #define ACPI_PIN_CONFIG_DRIVE_OPEN_SOURCE       8
56897028ce6SMika Westerberg #define ACPI_PIN_CONFIG_DRIVE_PUSH_PULL         9
56997028ce6SMika Westerberg #define ACPI_PIN_CONFIG_DRIVE_STRENGTH          10
57097028ce6SMika Westerberg #define ACPI_PIN_CONFIG_SLEW_RATE               11
57197028ce6SMika Westerberg #define ACPI_PIN_CONFIG_INPUT_DEBOUNCE          12
57297028ce6SMika Westerberg #define ACPI_PIN_CONFIG_INPUT_SCHMITT_TRIGGER   13
57397028ce6SMika Westerberg 
574fdaa0980SMika Westerberg struct acpi_resource_pin_group {
575fdaa0980SMika Westerberg 	u8 revision_id;
576fdaa0980SMika Westerberg 	u8 producer_consumer;	/* For values, see Producer/Consumer above */
577fdaa0980SMika Westerberg 	u16 pin_table_length;
578fdaa0980SMika Westerberg 	u16 vendor_length;
579fdaa0980SMika Westerberg 	u16 *pin_table;
580fdaa0980SMika Westerberg 	struct acpi_resource_label resource_label;
581fdaa0980SMika Westerberg 	u8 *vendor_data;
582fdaa0980SMika Westerberg };
583fdaa0980SMika Westerberg 
584f8a6c866SMika Westerberg struct acpi_resource_pin_group_function {
585f8a6c866SMika Westerberg 	u8 revision_id;
586f8a6c866SMika Westerberg 	u8 producer_consumer;	/* For values, see Producer/Consumer above */
587c163f90cSErik Schmauss 	u8 shareable;		/* For values, see Interrupt Attributes above */
588f8a6c866SMika Westerberg 	u16 function_number;
589f8a6c866SMika Westerberg 	u16 vendor_length;
590f8a6c866SMika Westerberg 	struct acpi_resource_source resource_source;
591f8a6c866SMika Westerberg 	struct acpi_resource_label resource_source_label;
592f8a6c866SMika Westerberg 	u8 *vendor_data;
593f8a6c866SMika Westerberg };
594f8a6c866SMika Westerberg 
595044b7239SMika Westerberg struct acpi_resource_pin_group_config {
596044b7239SMika Westerberg 	u8 revision_id;
597044b7239SMika Westerberg 	u8 producer_consumer;	/* For values, see Producer/Consumer above */
598c163f90cSErik Schmauss 	u8 shareable;		/* For values, see Interrupt Attributes above */
599044b7239SMika Westerberg 	u8 pin_config_type;	/* For values, see pin_config_type above */
600044b7239SMika Westerberg 	u32 pin_config_value;
601044b7239SMika Westerberg 	u16 vendor_length;
602044b7239SMika Westerberg 	struct acpi_resource_source resource_source;
603044b7239SMika Westerberg 	struct acpi_resource_label resource_source_label;
604044b7239SMika Westerberg 	u8 *vendor_data;
605044b7239SMika Westerberg };
606044b7239SMika Westerberg 
60750df4d8bSBob Moore /* ACPI_RESOURCE_TYPEs */
60850df4d8bSBob Moore 
60950df4d8bSBob Moore #define ACPI_RESOURCE_TYPE_IRQ                  0
61050df4d8bSBob Moore #define ACPI_RESOURCE_TYPE_DMA                  1
61150df4d8bSBob Moore #define ACPI_RESOURCE_TYPE_START_DEPENDENT      2
61250df4d8bSBob Moore #define ACPI_RESOURCE_TYPE_END_DEPENDENT        3
61350df4d8bSBob Moore #define ACPI_RESOURCE_TYPE_IO                   4
61450df4d8bSBob Moore #define ACPI_RESOURCE_TYPE_FIXED_IO             5
61550df4d8bSBob Moore #define ACPI_RESOURCE_TYPE_VENDOR               6
61650df4d8bSBob Moore #define ACPI_RESOURCE_TYPE_END_TAG              7
61750df4d8bSBob Moore #define ACPI_RESOURCE_TYPE_MEMORY24             8
61850df4d8bSBob Moore #define ACPI_RESOURCE_TYPE_MEMORY32             9
61950df4d8bSBob Moore #define ACPI_RESOURCE_TYPE_FIXED_MEMORY32       10
62050df4d8bSBob Moore #define ACPI_RESOURCE_TYPE_ADDRESS16            11
62150df4d8bSBob Moore #define ACPI_RESOURCE_TYPE_ADDRESS32            12
62250df4d8bSBob Moore #define ACPI_RESOURCE_TYPE_ADDRESS64            13
62350df4d8bSBob Moore #define ACPI_RESOURCE_TYPE_EXTENDED_ADDRESS64   14	/* ACPI 3.0 */
62450df4d8bSBob Moore #define ACPI_RESOURCE_TYPE_EXTENDED_IRQ         15
62550df4d8bSBob Moore #define ACPI_RESOURCE_TYPE_GENERIC_REGISTER     16
626e0fe0a8dSLin Ming #define ACPI_RESOURCE_TYPE_GPIO                 17	/* ACPI 5.0 */
627e0fe0a8dSLin Ming #define ACPI_RESOURCE_TYPE_FIXED_DMA            18	/* ACPI 5.0 */
628e0fe0a8dSLin Ming #define ACPI_RESOURCE_TYPE_SERIAL_BUS           19	/* ACPI 5.0 */
6292b726930SMika Westerberg #define ACPI_RESOURCE_TYPE_PIN_FUNCTION         20	/* ACPI 6.2 */
63097028ce6SMika Westerberg #define ACPI_RESOURCE_TYPE_PIN_CONFIG           21	/* ACPI 6.2 */
631fdaa0980SMika Westerberg #define ACPI_RESOURCE_TYPE_PIN_GROUP            22	/* ACPI 6.2 */
632f8a6c866SMika Westerberg #define ACPI_RESOURCE_TYPE_PIN_GROUP_FUNCTION   23	/* ACPI 6.2 */
633044b7239SMika Westerberg #define ACPI_RESOURCE_TYPE_PIN_GROUP_CONFIG     24	/* ACPI 6.2 */
634520d4a0eSNiyas Sait #define ACPI_RESOURCE_TYPE_CLOCK_INPUT          25	/* ACPI 6.5 */
635520d4a0eSNiyas Sait #define ACPI_RESOURCE_TYPE_MAX                  25
63650df4d8bSBob Moore 
63750df4d8bSBob Moore /* Master union for resource descriptors */
63850df4d8bSBob Moore 
63950df4d8bSBob Moore union acpi_resource_data {
64050df4d8bSBob Moore 	struct acpi_resource_irq irq;
64150df4d8bSBob Moore 	struct acpi_resource_dma dma;
64250df4d8bSBob Moore 	struct acpi_resource_start_dependent start_dpf;
64350df4d8bSBob Moore 	struct acpi_resource_io io;
64450df4d8bSBob Moore 	struct acpi_resource_fixed_io fixed_io;
645e0fe0a8dSLin Ming 	struct acpi_resource_fixed_dma fixed_dma;
64650df4d8bSBob Moore 	struct acpi_resource_vendor vendor;
64750df4d8bSBob Moore 	struct acpi_resource_vendor_typed vendor_typed;
64850df4d8bSBob Moore 	struct acpi_resource_end_tag end_tag;
64950df4d8bSBob Moore 	struct acpi_resource_memory24 memory24;
65050df4d8bSBob Moore 	struct acpi_resource_memory32 memory32;
65150df4d8bSBob Moore 	struct acpi_resource_fixed_memory32 fixed_memory32;
65250df4d8bSBob Moore 	struct acpi_resource_address16 address16;
65350df4d8bSBob Moore 	struct acpi_resource_address32 address32;
65450df4d8bSBob Moore 	struct acpi_resource_address64 address64;
65550df4d8bSBob Moore 	struct acpi_resource_extended_address64 ext_address64;
65650df4d8bSBob Moore 	struct acpi_resource_extended_irq extended_irq;
65750df4d8bSBob Moore 	struct acpi_resource_generic_register generic_reg;
658e0fe0a8dSLin Ming 	struct acpi_resource_gpio gpio;
659e0fe0a8dSLin Ming 	struct acpi_resource_i2c_serialbus i2c_serial_bus;
660e0fe0a8dSLin Ming 	struct acpi_resource_spi_serialbus spi_serial_bus;
661e0fe0a8dSLin Ming 	struct acpi_resource_uart_serialbus uart_serial_bus;
662a2befbb2SBob Moore 	struct acpi_resource_csi2_serialbus csi2_serial_bus;
663e0fe0a8dSLin Ming 	struct acpi_resource_common_serialbus common_serial_bus;
6642b726930SMika Westerberg 	struct acpi_resource_pin_function pin_function;
66597028ce6SMika Westerberg 	struct acpi_resource_pin_config pin_config;
666fdaa0980SMika Westerberg 	struct acpi_resource_pin_group pin_group;
667f8a6c866SMika Westerberg 	struct acpi_resource_pin_group_function pin_group_function;
668044b7239SMika Westerberg 	struct acpi_resource_pin_group_config pin_group_config;
669520d4a0eSNiyas Sait 	struct acpi_resource_clock_input clock_input;
67050df4d8bSBob Moore 
67150df4d8bSBob Moore 	/* Common fields */
67250df4d8bSBob Moore 
67350df4d8bSBob Moore 	struct acpi_resource_address address;	/* Common 16/32/64 address fields */
67450df4d8bSBob Moore };
67550df4d8bSBob Moore 
67650df4d8bSBob Moore /* Common resource header */
67750df4d8bSBob Moore 
67850df4d8bSBob Moore struct acpi_resource {
67950df4d8bSBob Moore 	u32 type;
68050df4d8bSBob Moore 	u32 length;
68150df4d8bSBob Moore 	union acpi_resource_data data;
68250df4d8bSBob Moore };
68350df4d8bSBob Moore 
68450df4d8bSBob Moore /* restore default alignment */
68550df4d8bSBob Moore 
68650df4d8bSBob Moore #pragma pack()
68750df4d8bSBob Moore 
68850df4d8bSBob Moore #define ACPI_RS_SIZE_NO_DATA                8	/* Id + Length fields */
68950df4d8bSBob Moore #define ACPI_RS_SIZE_MIN                    (u32) ACPI_ROUND_UP_TO_NATIVE_WORD (12)
69050df4d8bSBob Moore #define ACPI_RS_SIZE(type)                  (u32) (ACPI_RS_SIZE_NO_DATA + sizeof (type))
69150df4d8bSBob Moore 
692fb4e5026SLv Zheng /* Macro for walking resource templates with multiple descriptors */
693fb4e5026SLv Zheng 
694fb4e5026SLv Zheng #define ACPI_NEXT_RESOURCE(res) \
695fb4e5026SLv Zheng 	ACPI_ADD_PTR (struct acpi_resource, (res), (res)->length)
69650df4d8bSBob Moore 
69750df4d8bSBob Moore struct acpi_pci_routing_table {
69850df4d8bSBob Moore 	u32 length;
69950df4d8bSBob Moore 	u32 pin;
7005df7e6cbSBob Moore 	u64 address;		/* here for 64-bit alignment */
70150df4d8bSBob Moore 	u32 source_index;
7023a287932SKees Cook 	union {
7033a287932SKees Cook 		char pad[4];	/* pad to 64 bits so sizeof() works in all cases */
7043a287932SKees Cook 		 ACPI_FLEX_ARRAY(char, source);
7053a287932SKees Cook 	};
70650df4d8bSBob Moore };
70750df4d8bSBob Moore 
70850df4d8bSBob Moore #endif				/* __ACRESTYP_H__ */
709