162306a36Sopenharmony_ci/* SPDX-License-Identifier: BSD-3-Clause OR GPL-2.0 */
262306a36Sopenharmony_ci/******************************************************************************
362306a36Sopenharmony_ci *
462306a36Sopenharmony_ci * Module Name: amlresrc.h - AML resource descriptors
562306a36Sopenharmony_ci *
662306a36Sopenharmony_ci * Copyright (C) 2000 - 2023, Intel Corp.
762306a36Sopenharmony_ci *
862306a36Sopenharmony_ci *****************************************************************************/
962306a36Sopenharmony_ci
1062306a36Sopenharmony_ci/* acpisrc:struct_defs -- for acpisrc conversion */
1162306a36Sopenharmony_ci
1262306a36Sopenharmony_ci#ifndef __AMLRESRC_H
1362306a36Sopenharmony_ci#define __AMLRESRC_H
1462306a36Sopenharmony_ci
1562306a36Sopenharmony_ci/*
1662306a36Sopenharmony_ci * Resource descriptor tags, as defined in the ACPI specification.
1762306a36Sopenharmony_ci * Used to symbolically reference fields within a descriptor.
1862306a36Sopenharmony_ci */
1962306a36Sopenharmony_ci#define ACPI_RESTAG_ADDRESS                     "_ADR"
2062306a36Sopenharmony_ci#define ACPI_RESTAG_ALIGNMENT                   "_ALN"
2162306a36Sopenharmony_ci#define ACPI_RESTAG_ADDRESSSPACE                "_ASI"
2262306a36Sopenharmony_ci#define ACPI_RESTAG_ACCESSSIZE                  "_ASZ"
2362306a36Sopenharmony_ci#define ACPI_RESTAG_TYPESPECIFICATTRIBUTES      "_ATT"
2462306a36Sopenharmony_ci#define ACPI_RESTAG_BASEADDRESS                 "_BAS"
2562306a36Sopenharmony_ci#define ACPI_RESTAG_BUSMASTER                   "_BM_"	/* Master(1), Slave(0) */
2662306a36Sopenharmony_ci#define ACPI_RESTAG_DEBOUNCETIME                "_DBT"
2762306a36Sopenharmony_ci#define ACPI_RESTAG_DECODE                      "_DEC"
2862306a36Sopenharmony_ci#define ACPI_RESTAG_DEVICEPOLARITY              "_DPL"
2962306a36Sopenharmony_ci#define ACPI_RESTAG_DMA                         "_DMA"
3062306a36Sopenharmony_ci#define ACPI_RESTAG_DMATYPE                     "_TYP"	/* Compatible(0), A(1), B(2), F(3) */
3162306a36Sopenharmony_ci#define ACPI_RESTAG_DRIVESTRENGTH               "_DRS"
3262306a36Sopenharmony_ci#define ACPI_RESTAG_ENDIANNESS                  "_END"
3362306a36Sopenharmony_ci#define ACPI_RESTAG_FLOWCONTROL                 "_FLC"
3462306a36Sopenharmony_ci#define ACPI_RESTAG_FUNCTION                    "_FUN"
3562306a36Sopenharmony_ci#define ACPI_RESTAG_GRANULARITY                 "_GRA"
3662306a36Sopenharmony_ci#define ACPI_RESTAG_INTERRUPT                   "_INT"
3762306a36Sopenharmony_ci#define ACPI_RESTAG_INTERRUPTLEVEL              "_LL_"	/* active_lo(1), active_hi(0) */
3862306a36Sopenharmony_ci#define ACPI_RESTAG_INTERRUPTSHARE              "_SHR"	/* Shareable(1), no_share(0) */
3962306a36Sopenharmony_ci#define ACPI_RESTAG_INTERRUPTTYPE               "_HE_"	/* Edge(1), Level(0) */
4062306a36Sopenharmony_ci#define ACPI_RESTAG_IORESTRICTION               "_IOR"
4162306a36Sopenharmony_ci#define ACPI_RESTAG_LENGTH                      "_LEN"
4262306a36Sopenharmony_ci#define ACPI_RESTAG_LINE                        "_LIN"
4362306a36Sopenharmony_ci#define ACPI_RESTAG_LOCALPORT                   "_PRT"
4462306a36Sopenharmony_ci#define ACPI_RESTAG_MEMATTRIBUTES               "_MTP"	/* Memory(0), Reserved(1), ACPI(2), NVS(3) */
4562306a36Sopenharmony_ci#define ACPI_RESTAG_MEMTYPE                     "_MEM"	/* non_cache(0), Cacheable(1) Cache+combine(2), Cache+prefetch(3) */
4662306a36Sopenharmony_ci#define ACPI_RESTAG_MAXADDR                     "_MAX"
4762306a36Sopenharmony_ci#define ACPI_RESTAG_MINADDR                     "_MIN"
4862306a36Sopenharmony_ci#define ACPI_RESTAG_MAXTYPE                     "_MAF"
4962306a36Sopenharmony_ci#define ACPI_RESTAG_MINTYPE                     "_MIF"
5062306a36Sopenharmony_ci#define ACPI_RESTAG_MODE                        "_MOD"
5162306a36Sopenharmony_ci#define ACPI_RESTAG_PARITY                      "_PAR"
5262306a36Sopenharmony_ci#define ACPI_RESTAG_PHASE                       "_PHA"
5362306a36Sopenharmony_ci#define ACPI_RESTAG_PHYTYPE                     "_PHY"
5462306a36Sopenharmony_ci#define ACPI_RESTAG_PIN                         "_PIN"
5562306a36Sopenharmony_ci#define ACPI_RESTAG_PINCONFIG                   "_PPI"
5662306a36Sopenharmony_ci#define ACPI_RESTAG_PINCONFIG_TYPE              "_TYP"
5762306a36Sopenharmony_ci#define ACPI_RESTAG_PINCONFIG_VALUE             "_VAL"
5862306a36Sopenharmony_ci#define ACPI_RESTAG_POLARITY                    "_POL"
5962306a36Sopenharmony_ci#define ACPI_RESTAG_REGISTERBITOFFSET           "_RBO"
6062306a36Sopenharmony_ci#define ACPI_RESTAG_REGISTERBITWIDTH            "_RBW"
6162306a36Sopenharmony_ci#define ACPI_RESTAG_RANGETYPE                   "_RNG"
6262306a36Sopenharmony_ci#define ACPI_RESTAG_READWRITETYPE               "_RW_"	/* read_only(0), Writeable (1) */
6362306a36Sopenharmony_ci#define ACPI_RESTAG_LENGTH_RX                   "_RXL"
6462306a36Sopenharmony_ci#define ACPI_RESTAG_LENGTH_TX                   "_TXL"
6562306a36Sopenharmony_ci#define ACPI_RESTAG_SLAVEMODE                   "_SLV"
6662306a36Sopenharmony_ci#define ACPI_RESTAG_SPEED                       "_SPE"
6762306a36Sopenharmony_ci#define ACPI_RESTAG_STOPBITS                    "_STB"
6862306a36Sopenharmony_ci#define ACPI_RESTAG_TRANSLATION                 "_TRA"
6962306a36Sopenharmony_ci#define ACPI_RESTAG_TRANSTYPE                   "_TRS"	/* Sparse(1), Dense(0) */
7062306a36Sopenharmony_ci#define ACPI_RESTAG_TYPE                        "_TTP"	/* Translation(1), Static (0) */
7162306a36Sopenharmony_ci#define ACPI_RESTAG_XFERTYPE                    "_SIZ"	/* 8(0), 8And16(1), 16(2) */
7262306a36Sopenharmony_ci#define ACPI_RESTAG_VENDORDATA                  "_VEN"
7362306a36Sopenharmony_ci#define ACPI_RESTAG_FQN                         "_FQN"
7462306a36Sopenharmony_ci#define ACPI_RESTAG_FQD                         "_FQD"
7562306a36Sopenharmony_ci
7662306a36Sopenharmony_ci/* Default sizes for "small" resource descriptors */
7762306a36Sopenharmony_ci
7862306a36Sopenharmony_ci#define ASL_RDESC_IRQ_SIZE                      0x02
7962306a36Sopenharmony_ci#define ASL_RDESC_DMA_SIZE                      0x02
8062306a36Sopenharmony_ci#define ASL_RDESC_ST_DEPEND_SIZE                0x00
8162306a36Sopenharmony_ci#define ASL_RDESC_END_DEPEND_SIZE               0x00
8262306a36Sopenharmony_ci#define ASL_RDESC_IO_SIZE                       0x07
8362306a36Sopenharmony_ci#define ASL_RDESC_FIXED_IO_SIZE                 0x03
8462306a36Sopenharmony_ci#define ASL_RDESC_FIXED_DMA_SIZE                0x05
8562306a36Sopenharmony_ci#define ASL_RDESC_END_TAG_SIZE                  0x01
8662306a36Sopenharmony_ci
8762306a36Sopenharmony_cistruct asl_resource_node {
8862306a36Sopenharmony_ci	u32 buffer_length;
8962306a36Sopenharmony_ci	void *buffer;
9062306a36Sopenharmony_ci	struct asl_resource_node *next;
9162306a36Sopenharmony_ci};
9262306a36Sopenharmony_ci
9362306a36Sopenharmony_cistruct asl_resource_info {
9462306a36Sopenharmony_ci	union acpi_parse_object *descriptor_type_op;	/* Resource descriptor parse node */
9562306a36Sopenharmony_ci	union acpi_parse_object *mapping_op;	/* Used for mapfile support */
9662306a36Sopenharmony_ci	u32 current_byte_offset;	/* Offset in resource template */
9762306a36Sopenharmony_ci};
9862306a36Sopenharmony_ci
9962306a36Sopenharmony_ci/* Macros used to generate AML resource length fields */
10062306a36Sopenharmony_ci
10162306a36Sopenharmony_ci#define ACPI_AML_SIZE_LARGE(r)      (sizeof (r) - sizeof (struct aml_resource_large_header))
10262306a36Sopenharmony_ci#define ACPI_AML_SIZE_SMALL(r)      (sizeof (r) - sizeof (struct aml_resource_small_header))
10362306a36Sopenharmony_ci
10462306a36Sopenharmony_ci/*
10562306a36Sopenharmony_ci * Resource descriptors defined in the ACPI specification.
10662306a36Sopenharmony_ci *
10762306a36Sopenharmony_ci * Packing/alignment must be BYTE because these descriptors
10862306a36Sopenharmony_ci * are used to overlay the raw AML byte stream.
10962306a36Sopenharmony_ci */
11062306a36Sopenharmony_ci#pragma pack(1)
11162306a36Sopenharmony_ci
11262306a36Sopenharmony_ci/*
11362306a36Sopenharmony_ci * SMALL descriptors
11462306a36Sopenharmony_ci */
11562306a36Sopenharmony_ci#define AML_RESOURCE_SMALL_HEADER_COMMON \
11662306a36Sopenharmony_ci	u8                              descriptor_type;
11762306a36Sopenharmony_ci
11862306a36Sopenharmony_cistruct aml_resource_small_header {
11962306a36Sopenharmony_ciAML_RESOURCE_SMALL_HEADER_COMMON};
12062306a36Sopenharmony_ci
12162306a36Sopenharmony_cistruct aml_resource_irq {
12262306a36Sopenharmony_ci	AML_RESOURCE_SMALL_HEADER_COMMON u16 irq_mask;
12362306a36Sopenharmony_ci	u8 flags;
12462306a36Sopenharmony_ci};
12562306a36Sopenharmony_ci
12662306a36Sopenharmony_cistruct aml_resource_irq_noflags {
12762306a36Sopenharmony_ci	AML_RESOURCE_SMALL_HEADER_COMMON u16 irq_mask;
12862306a36Sopenharmony_ci};
12962306a36Sopenharmony_ci
13062306a36Sopenharmony_cistruct aml_resource_dma {
13162306a36Sopenharmony_ci	AML_RESOURCE_SMALL_HEADER_COMMON u8 dma_channel_mask;
13262306a36Sopenharmony_ci	u8 flags;
13362306a36Sopenharmony_ci};
13462306a36Sopenharmony_ci
13562306a36Sopenharmony_cistruct aml_resource_start_dependent {
13662306a36Sopenharmony_ci	AML_RESOURCE_SMALL_HEADER_COMMON u8 flags;
13762306a36Sopenharmony_ci};
13862306a36Sopenharmony_ci
13962306a36Sopenharmony_cistruct aml_resource_start_dependent_noprio {
14062306a36Sopenharmony_ciAML_RESOURCE_SMALL_HEADER_COMMON};
14162306a36Sopenharmony_ci
14262306a36Sopenharmony_cistruct aml_resource_end_dependent {
14362306a36Sopenharmony_ciAML_RESOURCE_SMALL_HEADER_COMMON};
14462306a36Sopenharmony_ci
14562306a36Sopenharmony_cistruct aml_resource_io {
14662306a36Sopenharmony_ci	AML_RESOURCE_SMALL_HEADER_COMMON u8 flags;
14762306a36Sopenharmony_ci	u16 minimum;
14862306a36Sopenharmony_ci	u16 maximum;
14962306a36Sopenharmony_ci	u8 alignment;
15062306a36Sopenharmony_ci	u8 address_length;
15162306a36Sopenharmony_ci};
15262306a36Sopenharmony_ci
15362306a36Sopenharmony_cistruct aml_resource_fixed_io {
15462306a36Sopenharmony_ci	AML_RESOURCE_SMALL_HEADER_COMMON u16 address;
15562306a36Sopenharmony_ci	u8 address_length;
15662306a36Sopenharmony_ci};
15762306a36Sopenharmony_ci
15862306a36Sopenharmony_cistruct aml_resource_vendor_small {
15962306a36Sopenharmony_ciAML_RESOURCE_SMALL_HEADER_COMMON};
16062306a36Sopenharmony_ci
16162306a36Sopenharmony_cistruct aml_resource_end_tag {
16262306a36Sopenharmony_ci	AML_RESOURCE_SMALL_HEADER_COMMON u8 checksum;
16362306a36Sopenharmony_ci};
16462306a36Sopenharmony_ci
16562306a36Sopenharmony_cistruct aml_resource_fixed_dma {
16662306a36Sopenharmony_ci	AML_RESOURCE_SMALL_HEADER_COMMON u16 request_lines;
16762306a36Sopenharmony_ci	u16 channels;
16862306a36Sopenharmony_ci	u8 width;
16962306a36Sopenharmony_ci};
17062306a36Sopenharmony_ci
17162306a36Sopenharmony_ci/*
17262306a36Sopenharmony_ci * LARGE descriptors
17362306a36Sopenharmony_ci */
17462306a36Sopenharmony_ci#define AML_RESOURCE_LARGE_HEADER_COMMON \
17562306a36Sopenharmony_ci	u8                              descriptor_type;\
17662306a36Sopenharmony_ci	u16                             resource_length;
17762306a36Sopenharmony_ci
17862306a36Sopenharmony_cistruct aml_resource_large_header {
17962306a36Sopenharmony_ciAML_RESOURCE_LARGE_HEADER_COMMON};
18062306a36Sopenharmony_ci
18162306a36Sopenharmony_ci/* General Flags for address space resource descriptors */
18262306a36Sopenharmony_ci
18362306a36Sopenharmony_ci#define ACPI_RESOURCE_FLAG_DEC      2
18462306a36Sopenharmony_ci#define ACPI_RESOURCE_FLAG_MIF      4
18562306a36Sopenharmony_ci#define ACPI_RESOURCE_FLAG_MAF      8
18662306a36Sopenharmony_ci
18762306a36Sopenharmony_cistruct aml_resource_memory24 {
18862306a36Sopenharmony_ci	AML_RESOURCE_LARGE_HEADER_COMMON u8 flags;
18962306a36Sopenharmony_ci	u16 minimum;
19062306a36Sopenharmony_ci	u16 maximum;
19162306a36Sopenharmony_ci	u16 alignment;
19262306a36Sopenharmony_ci	u16 address_length;
19362306a36Sopenharmony_ci};
19462306a36Sopenharmony_ci
19562306a36Sopenharmony_cistruct aml_resource_vendor_large {
19662306a36Sopenharmony_ciAML_RESOURCE_LARGE_HEADER_COMMON};
19762306a36Sopenharmony_ci
19862306a36Sopenharmony_cistruct aml_resource_memory32 {
19962306a36Sopenharmony_ci	AML_RESOURCE_LARGE_HEADER_COMMON u8 flags;
20062306a36Sopenharmony_ci	u32 minimum;
20162306a36Sopenharmony_ci	u32 maximum;
20262306a36Sopenharmony_ci	u32 alignment;
20362306a36Sopenharmony_ci	u32 address_length;
20462306a36Sopenharmony_ci};
20562306a36Sopenharmony_ci
20662306a36Sopenharmony_cistruct aml_resource_fixed_memory32 {
20762306a36Sopenharmony_ci	AML_RESOURCE_LARGE_HEADER_COMMON u8 flags;
20862306a36Sopenharmony_ci	u32 address;
20962306a36Sopenharmony_ci	u32 address_length;
21062306a36Sopenharmony_ci};
21162306a36Sopenharmony_ci
21262306a36Sopenharmony_ci#define AML_RESOURCE_ADDRESS_COMMON \
21362306a36Sopenharmony_ci	u8                              resource_type; \
21462306a36Sopenharmony_ci	u8                              flags; \
21562306a36Sopenharmony_ci	u8                              specific_flags;
21662306a36Sopenharmony_ci
21762306a36Sopenharmony_cistruct aml_resource_address {
21862306a36Sopenharmony_ciAML_RESOURCE_LARGE_HEADER_COMMON AML_RESOURCE_ADDRESS_COMMON};
21962306a36Sopenharmony_ci
22062306a36Sopenharmony_cistruct aml_resource_extended_address64 {
22162306a36Sopenharmony_ci	AML_RESOURCE_LARGE_HEADER_COMMON
22262306a36Sopenharmony_ci	    AML_RESOURCE_ADDRESS_COMMON u8 revision_ID;
22362306a36Sopenharmony_ci	u8 reserved;
22462306a36Sopenharmony_ci	u64 granularity;
22562306a36Sopenharmony_ci	u64 minimum;
22662306a36Sopenharmony_ci	u64 maximum;
22762306a36Sopenharmony_ci	u64 translation_offset;
22862306a36Sopenharmony_ci	u64 address_length;
22962306a36Sopenharmony_ci	u64 type_specific;
23062306a36Sopenharmony_ci};
23162306a36Sopenharmony_ci
23262306a36Sopenharmony_ci#define AML_RESOURCE_EXTENDED_ADDRESS_REVISION          1	/* ACPI 3.0 */
23362306a36Sopenharmony_ci
23462306a36Sopenharmony_cistruct aml_resource_address64 {
23562306a36Sopenharmony_ci	AML_RESOURCE_LARGE_HEADER_COMMON
23662306a36Sopenharmony_ci	    AML_RESOURCE_ADDRESS_COMMON u64 granularity;
23762306a36Sopenharmony_ci	u64 minimum;
23862306a36Sopenharmony_ci	u64 maximum;
23962306a36Sopenharmony_ci	u64 translation_offset;
24062306a36Sopenharmony_ci	u64 address_length;
24162306a36Sopenharmony_ci};
24262306a36Sopenharmony_ci
24362306a36Sopenharmony_cistruct aml_resource_address32 {
24462306a36Sopenharmony_ci	AML_RESOURCE_LARGE_HEADER_COMMON
24562306a36Sopenharmony_ci	    AML_RESOURCE_ADDRESS_COMMON u32 granularity;
24662306a36Sopenharmony_ci	u32 minimum;
24762306a36Sopenharmony_ci	u32 maximum;
24862306a36Sopenharmony_ci	u32 translation_offset;
24962306a36Sopenharmony_ci	u32 address_length;
25062306a36Sopenharmony_ci};
25162306a36Sopenharmony_ci
25262306a36Sopenharmony_cistruct aml_resource_address16 {
25362306a36Sopenharmony_ci	AML_RESOURCE_LARGE_HEADER_COMMON
25462306a36Sopenharmony_ci	    AML_RESOURCE_ADDRESS_COMMON u16 granularity;
25562306a36Sopenharmony_ci	u16 minimum;
25662306a36Sopenharmony_ci	u16 maximum;
25762306a36Sopenharmony_ci	u16 translation_offset;
25862306a36Sopenharmony_ci	u16 address_length;
25962306a36Sopenharmony_ci};
26062306a36Sopenharmony_ci
26162306a36Sopenharmony_cistruct aml_resource_extended_irq {
26262306a36Sopenharmony_ci	AML_RESOURCE_LARGE_HEADER_COMMON u8 flags;
26362306a36Sopenharmony_ci	u8 interrupt_count;
26462306a36Sopenharmony_ci	union {
26562306a36Sopenharmony_ci		u32 interrupt;
26662306a36Sopenharmony_ci		 ACPI_FLEX_ARRAY(u32, interrupts);
26762306a36Sopenharmony_ci	};
26862306a36Sopenharmony_ci	/* res_source_index, res_source optional fields follow */
26962306a36Sopenharmony_ci};
27062306a36Sopenharmony_ci
27162306a36Sopenharmony_cistruct aml_resource_generic_register {
27262306a36Sopenharmony_ci	AML_RESOURCE_LARGE_HEADER_COMMON u8 address_space_id;
27362306a36Sopenharmony_ci	u8 bit_width;
27462306a36Sopenharmony_ci	u8 bit_offset;
27562306a36Sopenharmony_ci	u8 access_size;		/* ACPI 3.0, was previously Reserved */
27662306a36Sopenharmony_ci	u64 address;
27762306a36Sopenharmony_ci};
27862306a36Sopenharmony_ci
27962306a36Sopenharmony_ci/* Common descriptor for gpio_int and gpio_io (ACPI 5.0) */
28062306a36Sopenharmony_ci
28162306a36Sopenharmony_cistruct aml_resource_gpio {
28262306a36Sopenharmony_ci	AML_RESOURCE_LARGE_HEADER_COMMON u8 revision_id;
28362306a36Sopenharmony_ci	u8 connection_type;
28462306a36Sopenharmony_ci	u16 flags;
28562306a36Sopenharmony_ci	u16 int_flags;
28662306a36Sopenharmony_ci	u8 pin_config;
28762306a36Sopenharmony_ci	u16 drive_strength;
28862306a36Sopenharmony_ci	u16 debounce_timeout;
28962306a36Sopenharmony_ci	u16 pin_table_offset;
29062306a36Sopenharmony_ci	u8 res_source_index;
29162306a36Sopenharmony_ci	u16 res_source_offset;
29262306a36Sopenharmony_ci	u16 vendor_offset;
29362306a36Sopenharmony_ci	u16 vendor_length;
29462306a36Sopenharmony_ci	/*
29562306a36Sopenharmony_ci	 * Optional fields follow immediately:
29662306a36Sopenharmony_ci	 * 1) PIN list (Words)
29762306a36Sopenharmony_ci	 * 2) Resource Source String
29862306a36Sopenharmony_ci	 * 3) Vendor Data bytes
29962306a36Sopenharmony_ci	 */
30062306a36Sopenharmony_ci};
30162306a36Sopenharmony_ci
30262306a36Sopenharmony_ci#define AML_RESOURCE_GPIO_REVISION              1	/* ACPI 5.0 */
30362306a36Sopenharmony_ci
30462306a36Sopenharmony_ci/* Values for connection_type above */
30562306a36Sopenharmony_ci
30662306a36Sopenharmony_ci#define AML_RESOURCE_GPIO_TYPE_INT              0
30762306a36Sopenharmony_ci#define AML_RESOURCE_GPIO_TYPE_IO               1
30862306a36Sopenharmony_ci#define AML_RESOURCE_MAX_GPIOTYPE               1
30962306a36Sopenharmony_ci
31062306a36Sopenharmony_ci/* Common preamble for all serial descriptors (ACPI 5.0) */
31162306a36Sopenharmony_ci
31262306a36Sopenharmony_ci#define AML_RESOURCE_SERIAL_COMMON \
31362306a36Sopenharmony_ci	u8                              revision_id; \
31462306a36Sopenharmony_ci	u8                              res_source_index; \
31562306a36Sopenharmony_ci	u8                              type; \
31662306a36Sopenharmony_ci	u8                              flags; \
31762306a36Sopenharmony_ci	u16                             type_specific_flags; \
31862306a36Sopenharmony_ci	u8                              type_revision_id; \
31962306a36Sopenharmony_ci	u16                             type_data_length; \
32062306a36Sopenharmony_ci
32162306a36Sopenharmony_ci/* Values for the type field above */
32262306a36Sopenharmony_ci
32362306a36Sopenharmony_ci#define AML_RESOURCE_I2C_SERIALBUSTYPE          1
32462306a36Sopenharmony_ci#define AML_RESOURCE_SPI_SERIALBUSTYPE          2
32562306a36Sopenharmony_ci#define AML_RESOURCE_UART_SERIALBUSTYPE         3
32662306a36Sopenharmony_ci#define AML_RESOURCE_CSI2_SERIALBUSTYPE         4
32762306a36Sopenharmony_ci#define AML_RESOURCE_MAX_SERIALBUSTYPE          4
32862306a36Sopenharmony_ci#define AML_RESOURCE_VENDOR_SERIALBUSTYPE       192	/* Vendor defined is 0xC0-0xFF (NOT SUPPORTED) */
32962306a36Sopenharmony_ci
33062306a36Sopenharmony_cistruct aml_resource_common_serialbus {
33162306a36Sopenharmony_ciAML_RESOURCE_LARGE_HEADER_COMMON AML_RESOURCE_SERIAL_COMMON};
33262306a36Sopenharmony_ci
33362306a36Sopenharmony_cistruct aml_resource_csi2_serialbus {
33462306a36Sopenharmony_ci	AML_RESOURCE_LARGE_HEADER_COMMON AML_RESOURCE_SERIAL_COMMON
33562306a36Sopenharmony_ci	    /*
33662306a36Sopenharmony_ci	     * Optional fields follow immediately:
33762306a36Sopenharmony_ci	     * 1) Vendor Data bytes
33862306a36Sopenharmony_ci	     * 2) Resource Source String
33962306a36Sopenharmony_ci	     */
34062306a36Sopenharmony_ci};
34162306a36Sopenharmony_ci
34262306a36Sopenharmony_ci#define AML_RESOURCE_CSI2_REVISION              1	/* ACPI 6.4 */
34362306a36Sopenharmony_ci#define AML_RESOURCE_CSI2_TYPE_REVISION         1	/* ACPI 6.4 */
34462306a36Sopenharmony_ci#define AML_RESOURCE_CSI2_MIN_DATA_LEN          0	/* ACPI 6.4 */
34562306a36Sopenharmony_ci
34662306a36Sopenharmony_cistruct aml_resource_i2c_serialbus {
34762306a36Sopenharmony_ci	AML_RESOURCE_LARGE_HEADER_COMMON
34862306a36Sopenharmony_ci	    AML_RESOURCE_SERIAL_COMMON u32 connection_speed;
34962306a36Sopenharmony_ci	u16 slave_address;
35062306a36Sopenharmony_ci	/*
35162306a36Sopenharmony_ci	 * Optional fields follow immediately:
35262306a36Sopenharmony_ci	 * 1) Vendor Data bytes
35362306a36Sopenharmony_ci	 * 2) Resource Source String
35462306a36Sopenharmony_ci	 */
35562306a36Sopenharmony_ci};
35662306a36Sopenharmony_ci
35762306a36Sopenharmony_ci#define AML_RESOURCE_I2C_REVISION               1	/* ACPI 5.0 */
35862306a36Sopenharmony_ci#define AML_RESOURCE_I2C_TYPE_REVISION          1	/* ACPI 5.0 */
35962306a36Sopenharmony_ci#define AML_RESOURCE_I2C_MIN_DATA_LEN           6
36062306a36Sopenharmony_ci
36162306a36Sopenharmony_cistruct aml_resource_spi_serialbus {
36262306a36Sopenharmony_ci	AML_RESOURCE_LARGE_HEADER_COMMON
36362306a36Sopenharmony_ci	    AML_RESOURCE_SERIAL_COMMON u32 connection_speed;
36462306a36Sopenharmony_ci	u8 data_bit_length;
36562306a36Sopenharmony_ci	u8 clock_phase;
36662306a36Sopenharmony_ci	u8 clock_polarity;
36762306a36Sopenharmony_ci	u16 device_selection;
36862306a36Sopenharmony_ci	/*
36962306a36Sopenharmony_ci	 * Optional fields follow immediately:
37062306a36Sopenharmony_ci	 * 1) Vendor Data bytes
37162306a36Sopenharmony_ci	 * 2) Resource Source String
37262306a36Sopenharmony_ci	 */
37362306a36Sopenharmony_ci};
37462306a36Sopenharmony_ci
37562306a36Sopenharmony_ci#define AML_RESOURCE_SPI_REVISION               1	/* ACPI 5.0 */
37662306a36Sopenharmony_ci#define AML_RESOURCE_SPI_TYPE_REVISION          1	/* ACPI 5.0 */
37762306a36Sopenharmony_ci#define AML_RESOURCE_SPI_MIN_DATA_LEN           9
37862306a36Sopenharmony_ci
37962306a36Sopenharmony_cistruct aml_resource_uart_serialbus {
38062306a36Sopenharmony_ci	AML_RESOURCE_LARGE_HEADER_COMMON
38162306a36Sopenharmony_ci	    AML_RESOURCE_SERIAL_COMMON u32 default_baud_rate;
38262306a36Sopenharmony_ci	u16 rx_fifo_size;
38362306a36Sopenharmony_ci	u16 tx_fifo_size;
38462306a36Sopenharmony_ci	u8 parity;
38562306a36Sopenharmony_ci	u8 lines_enabled;
38662306a36Sopenharmony_ci	/*
38762306a36Sopenharmony_ci	 * Optional fields follow immediately:
38862306a36Sopenharmony_ci	 * 1) Vendor Data bytes
38962306a36Sopenharmony_ci	 * 2) Resource Source String
39062306a36Sopenharmony_ci	 */
39162306a36Sopenharmony_ci};
39262306a36Sopenharmony_ci
39362306a36Sopenharmony_ci#define AML_RESOURCE_UART_REVISION              1	/* ACPI 5.0 */
39462306a36Sopenharmony_ci#define AML_RESOURCE_UART_TYPE_REVISION         1	/* ACPI 5.0 */
39562306a36Sopenharmony_ci#define AML_RESOURCE_UART_MIN_DATA_LEN          10
39662306a36Sopenharmony_ci
39762306a36Sopenharmony_cistruct aml_resource_pin_function {
39862306a36Sopenharmony_ci	AML_RESOURCE_LARGE_HEADER_COMMON u8 revision_id;
39962306a36Sopenharmony_ci	u16 flags;
40062306a36Sopenharmony_ci	u8 pin_config;
40162306a36Sopenharmony_ci	u16 function_number;
40262306a36Sopenharmony_ci	u16 pin_table_offset;
40362306a36Sopenharmony_ci	u8 res_source_index;
40462306a36Sopenharmony_ci	u16 res_source_offset;
40562306a36Sopenharmony_ci	u16 vendor_offset;
40662306a36Sopenharmony_ci	u16 vendor_length;
40762306a36Sopenharmony_ci	/*
40862306a36Sopenharmony_ci	 * Optional fields follow immediately:
40962306a36Sopenharmony_ci	 * 1) PIN list (Words)
41062306a36Sopenharmony_ci	 * 2) Resource Source String
41162306a36Sopenharmony_ci	 * 3) Vendor Data bytes
41262306a36Sopenharmony_ci	 */
41362306a36Sopenharmony_ci};
41462306a36Sopenharmony_ci
41562306a36Sopenharmony_ci#define AML_RESOURCE_PIN_FUNCTION_REVISION      1	/* ACPI 6.2 */
41662306a36Sopenharmony_ci
41762306a36Sopenharmony_cistruct aml_resource_pin_config {
41862306a36Sopenharmony_ci	AML_RESOURCE_LARGE_HEADER_COMMON u8 revision_id;
41962306a36Sopenharmony_ci	u16 flags;
42062306a36Sopenharmony_ci	u8 pin_config_type;
42162306a36Sopenharmony_ci	u32 pin_config_value;
42262306a36Sopenharmony_ci	u16 pin_table_offset;
42362306a36Sopenharmony_ci	u8 res_source_index;
42462306a36Sopenharmony_ci	u16 res_source_offset;
42562306a36Sopenharmony_ci	u16 vendor_offset;
42662306a36Sopenharmony_ci	u16 vendor_length;
42762306a36Sopenharmony_ci	/*
42862306a36Sopenharmony_ci	 * Optional fields follow immediately:
42962306a36Sopenharmony_ci	 * 1) PIN list (Words)
43062306a36Sopenharmony_ci	 * 2) Resource Source String
43162306a36Sopenharmony_ci	 * 3) Vendor Data bytes
43262306a36Sopenharmony_ci	 */
43362306a36Sopenharmony_ci};
43462306a36Sopenharmony_ci
43562306a36Sopenharmony_ci#define AML_RESOURCE_CLOCK_INPUT_REVISION      1	/* ACPI 6.5 */
43662306a36Sopenharmony_ci
43762306a36Sopenharmony_cistruct aml_resource_clock_input {
43862306a36Sopenharmony_ci	AML_RESOURCE_LARGE_HEADER_COMMON u8 revision_id;
43962306a36Sopenharmony_ci	u16 flags;
44062306a36Sopenharmony_ci	u16 frequency_divisor;
44162306a36Sopenharmony_ci	u32 frequency_numerator;
44262306a36Sopenharmony_ci	/*
44362306a36Sopenharmony_ci	 * Optional fields follow immediately:
44462306a36Sopenharmony_ci	 * 1) Resource Source index
44562306a36Sopenharmony_ci	 * 2) Resource Source String
44662306a36Sopenharmony_ci	 */
44762306a36Sopenharmony_ci};
44862306a36Sopenharmony_ci
44962306a36Sopenharmony_ci#define AML_RESOURCE_PIN_CONFIG_REVISION      1	/* ACPI 6.2 */
45062306a36Sopenharmony_ci
45162306a36Sopenharmony_cistruct aml_resource_pin_group {
45262306a36Sopenharmony_ci	AML_RESOURCE_LARGE_HEADER_COMMON u8 revision_id;
45362306a36Sopenharmony_ci	u16 flags;
45462306a36Sopenharmony_ci	u16 pin_table_offset;
45562306a36Sopenharmony_ci	u16 label_offset;
45662306a36Sopenharmony_ci	u16 vendor_offset;
45762306a36Sopenharmony_ci	u16 vendor_length;
45862306a36Sopenharmony_ci	/*
45962306a36Sopenharmony_ci	 * Optional fields follow immediately:
46062306a36Sopenharmony_ci	 * 1) PIN list (Words)
46162306a36Sopenharmony_ci	 * 2) Resource Label String
46262306a36Sopenharmony_ci	 * 3) Vendor Data bytes
46362306a36Sopenharmony_ci	 */
46462306a36Sopenharmony_ci};
46562306a36Sopenharmony_ci
46662306a36Sopenharmony_ci#define AML_RESOURCE_PIN_GROUP_REVISION      1	/* ACPI 6.2 */
46762306a36Sopenharmony_ci
46862306a36Sopenharmony_cistruct aml_resource_pin_group_function {
46962306a36Sopenharmony_ci	AML_RESOURCE_LARGE_HEADER_COMMON u8 revision_id;
47062306a36Sopenharmony_ci	u16 flags;
47162306a36Sopenharmony_ci	u16 function_number;
47262306a36Sopenharmony_ci	u8 res_source_index;
47362306a36Sopenharmony_ci	u16 res_source_offset;
47462306a36Sopenharmony_ci	u16 res_source_label_offset;
47562306a36Sopenharmony_ci	u16 vendor_offset;
47662306a36Sopenharmony_ci	u16 vendor_length;
47762306a36Sopenharmony_ci	/*
47862306a36Sopenharmony_ci	 * Optional fields follow immediately:
47962306a36Sopenharmony_ci	 * 1) Resource Source String
48062306a36Sopenharmony_ci	 * 2) Resource Source Label String
48162306a36Sopenharmony_ci	 * 3) Vendor Data bytes
48262306a36Sopenharmony_ci	 */
48362306a36Sopenharmony_ci};
48462306a36Sopenharmony_ci
48562306a36Sopenharmony_ci#define AML_RESOURCE_PIN_GROUP_FUNCTION_REVISION    1	/* ACPI 6.2 */
48662306a36Sopenharmony_ci
48762306a36Sopenharmony_cistruct aml_resource_pin_group_config {
48862306a36Sopenharmony_ci	AML_RESOURCE_LARGE_HEADER_COMMON u8 revision_id;
48962306a36Sopenharmony_ci	u16 flags;
49062306a36Sopenharmony_ci	u8 pin_config_type;
49162306a36Sopenharmony_ci	u32 pin_config_value;
49262306a36Sopenharmony_ci	u8 res_source_index;
49362306a36Sopenharmony_ci	u16 res_source_offset;
49462306a36Sopenharmony_ci	u16 res_source_label_offset;
49562306a36Sopenharmony_ci	u16 vendor_offset;
49662306a36Sopenharmony_ci	u16 vendor_length;
49762306a36Sopenharmony_ci	/*
49862306a36Sopenharmony_ci	 * Optional fields follow immediately:
49962306a36Sopenharmony_ci	 * 1) Resource Source String
50062306a36Sopenharmony_ci	 * 2) Resource Source Label String
50162306a36Sopenharmony_ci	 * 3) Vendor Data bytes
50262306a36Sopenharmony_ci	 */
50362306a36Sopenharmony_ci};
50462306a36Sopenharmony_ci
50562306a36Sopenharmony_ci#define AML_RESOURCE_PIN_GROUP_CONFIG_REVISION    1	/* ACPI 6.2 */
50662306a36Sopenharmony_ci
50762306a36Sopenharmony_ci/* restore default alignment */
50862306a36Sopenharmony_ci
50962306a36Sopenharmony_ci#pragma pack()
51062306a36Sopenharmony_ci
51162306a36Sopenharmony_ci/* Union of all resource descriptors, so we can allocate the worst case */
51262306a36Sopenharmony_ci
51362306a36Sopenharmony_ciunion aml_resource {
51462306a36Sopenharmony_ci	/* Descriptor headers */
51562306a36Sopenharmony_ci
51662306a36Sopenharmony_ci	u8 descriptor_type;
51762306a36Sopenharmony_ci	struct aml_resource_small_header small_header;
51862306a36Sopenharmony_ci	struct aml_resource_large_header large_header;
51962306a36Sopenharmony_ci
52062306a36Sopenharmony_ci	/* Small resource descriptors */
52162306a36Sopenharmony_ci
52262306a36Sopenharmony_ci	struct aml_resource_irq irq;
52362306a36Sopenharmony_ci	struct aml_resource_dma dma;
52462306a36Sopenharmony_ci	struct aml_resource_start_dependent start_dpf;
52562306a36Sopenharmony_ci	struct aml_resource_end_dependent end_dpf;
52662306a36Sopenharmony_ci	struct aml_resource_io io;
52762306a36Sopenharmony_ci	struct aml_resource_fixed_io fixed_io;
52862306a36Sopenharmony_ci	struct aml_resource_fixed_dma fixed_dma;
52962306a36Sopenharmony_ci	struct aml_resource_vendor_small vendor_small;
53062306a36Sopenharmony_ci	struct aml_resource_end_tag end_tag;
53162306a36Sopenharmony_ci
53262306a36Sopenharmony_ci	/* Large resource descriptors */
53362306a36Sopenharmony_ci
53462306a36Sopenharmony_ci	struct aml_resource_memory24 memory24;
53562306a36Sopenharmony_ci	struct aml_resource_generic_register generic_reg;
53662306a36Sopenharmony_ci	struct aml_resource_vendor_large vendor_large;
53762306a36Sopenharmony_ci	struct aml_resource_memory32 memory32;
53862306a36Sopenharmony_ci	struct aml_resource_fixed_memory32 fixed_memory32;
53962306a36Sopenharmony_ci	struct aml_resource_address16 address16;
54062306a36Sopenharmony_ci	struct aml_resource_address32 address32;
54162306a36Sopenharmony_ci	struct aml_resource_address64 address64;
54262306a36Sopenharmony_ci	struct aml_resource_extended_address64 ext_address64;
54362306a36Sopenharmony_ci	struct aml_resource_extended_irq extended_irq;
54462306a36Sopenharmony_ci	struct aml_resource_gpio gpio;
54562306a36Sopenharmony_ci	struct aml_resource_i2c_serialbus i2c_serial_bus;
54662306a36Sopenharmony_ci	struct aml_resource_spi_serialbus spi_serial_bus;
54762306a36Sopenharmony_ci	struct aml_resource_uart_serialbus uart_serial_bus;
54862306a36Sopenharmony_ci	struct aml_resource_csi2_serialbus csi2_serial_bus;
54962306a36Sopenharmony_ci	struct aml_resource_common_serialbus common_serial_bus;
55062306a36Sopenharmony_ci	struct aml_resource_pin_function pin_function;
55162306a36Sopenharmony_ci	struct aml_resource_pin_config pin_config;
55262306a36Sopenharmony_ci	struct aml_resource_pin_group pin_group;
55362306a36Sopenharmony_ci	struct aml_resource_pin_group_function pin_group_function;
55462306a36Sopenharmony_ci	struct aml_resource_pin_group_config pin_group_config;
55562306a36Sopenharmony_ci	struct aml_resource_clock_input clock_input;
55662306a36Sopenharmony_ci
55762306a36Sopenharmony_ci	/* Utility overlays */
55862306a36Sopenharmony_ci
55962306a36Sopenharmony_ci	struct aml_resource_address address;
56062306a36Sopenharmony_ci	u32 dword_item;
56162306a36Sopenharmony_ci	u16 word_item;
56262306a36Sopenharmony_ci	u8 byte_item;
56362306a36Sopenharmony_ci};
56462306a36Sopenharmony_ci
56562306a36Sopenharmony_ci/* Interfaces used by both the disassembler and compiler */
56662306a36Sopenharmony_ci
56762306a36Sopenharmony_civoid
56862306a36Sopenharmony_cimp_save_gpio_info(union acpi_parse_object *op,
56962306a36Sopenharmony_ci		  union aml_resource *resource,
57062306a36Sopenharmony_ci		  u32 pin_count, u16 *pin_list, char *device_name);
57162306a36Sopenharmony_ci
57262306a36Sopenharmony_civoid
57362306a36Sopenharmony_cimp_save_serial_info(union acpi_parse_object *op,
57462306a36Sopenharmony_ci		    union aml_resource *resource, char *device_name);
57562306a36Sopenharmony_ci
57662306a36Sopenharmony_cichar *mp_get_hid_from_parse_tree(struct acpi_namespace_node *hid_node);
57762306a36Sopenharmony_ci
57862306a36Sopenharmony_cichar *mp_get_hid_via_namestring(char *device_name);
57962306a36Sopenharmony_ci
58062306a36Sopenharmony_cichar *mp_get_connection_info(union acpi_parse_object *op,
58162306a36Sopenharmony_ci			     u32 pin_index,
58262306a36Sopenharmony_ci			     struct acpi_namespace_node **target_node,
58362306a36Sopenharmony_ci			     char **target_name);
58462306a36Sopenharmony_ci
58562306a36Sopenharmony_cichar *mp_get_parent_device_hid(union acpi_parse_object *op,
58662306a36Sopenharmony_ci			       struct acpi_namespace_node **target_node,
58762306a36Sopenharmony_ci			       char **parent_device_name);
58862306a36Sopenharmony_ci
58962306a36Sopenharmony_cichar *mp_get_ddn_value(char *device_name);
59062306a36Sopenharmony_ci
59162306a36Sopenharmony_cichar *mp_get_hid_value(struct acpi_namespace_node *device_node);
59262306a36Sopenharmony_ci
59362306a36Sopenharmony_ci#endif
594