162306a36Sopenharmony_ci/* SPDX-License-Identifier: BSD-3-Clause OR GPL-2.0 */
262306a36Sopenharmony_ci/******************************************************************************
362306a36Sopenharmony_ci *
462306a36Sopenharmony_ci * Name: actbl2.h - ACPI Table Definitions (tables not in ACPI spec)
562306a36Sopenharmony_ci *
662306a36Sopenharmony_ci * Copyright (C) 2000 - 2023, Intel Corp.
762306a36Sopenharmony_ci *
862306a36Sopenharmony_ci *****************************************************************************/
962306a36Sopenharmony_ci
1062306a36Sopenharmony_ci#ifndef __ACTBL2_H__
1162306a36Sopenharmony_ci#define __ACTBL2_H__
1262306a36Sopenharmony_ci
1362306a36Sopenharmony_ci/*******************************************************************************
1462306a36Sopenharmony_ci *
1562306a36Sopenharmony_ci * Additional ACPI Tables (2)
1662306a36Sopenharmony_ci *
1762306a36Sopenharmony_ci * These tables are not consumed directly by the ACPICA subsystem, but are
1862306a36Sopenharmony_ci * included here to support device drivers and the AML disassembler.
1962306a36Sopenharmony_ci *
2062306a36Sopenharmony_ci ******************************************************************************/
2162306a36Sopenharmony_ci
2262306a36Sopenharmony_ci/*
2362306a36Sopenharmony_ci * Values for description table header signatures for tables defined in this
2462306a36Sopenharmony_ci * file. Useful because they make it more difficult to inadvertently type in
2562306a36Sopenharmony_ci * the wrong signature.
2662306a36Sopenharmony_ci */
2762306a36Sopenharmony_ci#define ACPI_SIG_AGDI           "AGDI"	/* Arm Generic Diagnostic Dump and Reset Device Interface */
2862306a36Sopenharmony_ci#define ACPI_SIG_APMT           "APMT"	/* Arm Performance Monitoring Unit table */
2962306a36Sopenharmony_ci#define ACPI_SIG_BDAT           "BDAT"	/* BIOS Data ACPI Table */
3062306a36Sopenharmony_ci#define ACPI_SIG_CCEL           "CCEL"	/* CC Event Log Table */
3162306a36Sopenharmony_ci#define ACPI_SIG_CDAT           "CDAT"	/* Coherent Device Attribute Table */
3262306a36Sopenharmony_ci#define ACPI_SIG_IORT           "IORT"	/* IO Remapping Table */
3362306a36Sopenharmony_ci#define ACPI_SIG_IVRS           "IVRS"	/* I/O Virtualization Reporting Structure */
3462306a36Sopenharmony_ci#define ACPI_SIG_LPIT           "LPIT"	/* Low Power Idle Table */
3562306a36Sopenharmony_ci#define ACPI_SIG_MADT           "APIC"	/* Multiple APIC Description Table */
3662306a36Sopenharmony_ci#define ACPI_SIG_MCFG           "MCFG"	/* PCI Memory Mapped Configuration table */
3762306a36Sopenharmony_ci#define ACPI_SIG_MCHI           "MCHI"	/* Management Controller Host Interface table */
3862306a36Sopenharmony_ci#define ACPI_SIG_MPAM           "MPAM"	/* Memory System Resource Partitioning and Monitoring Table */
3962306a36Sopenharmony_ci#define ACPI_SIG_MPST           "MPST"	/* Memory Power State Table */
4062306a36Sopenharmony_ci#define ACPI_SIG_MSDM           "MSDM"	/* Microsoft Data Management Table */
4162306a36Sopenharmony_ci#define ACPI_SIG_NFIT           "NFIT"	/* NVDIMM Firmware Interface Table */
4262306a36Sopenharmony_ci#define ACPI_SIG_NHLT           "NHLT"	/* Non HD Audio Link Table */
4362306a36Sopenharmony_ci#define ACPI_SIG_PCCT           "PCCT"	/* Platform Communications Channel Table */
4462306a36Sopenharmony_ci#define ACPI_SIG_PDTT           "PDTT"	/* Platform Debug Trigger Table */
4562306a36Sopenharmony_ci#define ACPI_SIG_PHAT           "PHAT"	/* Platform Health Assessment Table */
4662306a36Sopenharmony_ci#define ACPI_SIG_PMTT           "PMTT"	/* Platform Memory Topology Table */
4762306a36Sopenharmony_ci#define ACPI_SIG_PPTT           "PPTT"	/* Processor Properties Topology Table */
4862306a36Sopenharmony_ci#define ACPI_SIG_PRMT           "PRMT"	/* Platform Runtime Mechanism Table */
4962306a36Sopenharmony_ci#define ACPI_SIG_RASF           "RASF"	/* RAS Feature table */
5062306a36Sopenharmony_ci#define ACPI_SIG_RGRT           "RGRT"	/* Regulatory Graphics Resource Table */
5162306a36Sopenharmony_ci#define ACPI_SIG_RHCT           "RHCT"	/* RISC-V Hart Capabilities Table */
5262306a36Sopenharmony_ci#define ACPI_SIG_SBST           "SBST"	/* Smart Battery Specification Table */
5362306a36Sopenharmony_ci#define ACPI_SIG_SDEI           "SDEI"	/* Software Delegated Exception Interface Table */
5462306a36Sopenharmony_ci#define ACPI_SIG_SDEV           "SDEV"	/* Secure Devices table */
5562306a36Sopenharmony_ci#define ACPI_SIG_SVKL           "SVKL"	/* Storage Volume Key Location Table */
5662306a36Sopenharmony_ci#define ACPI_SIG_TDEL           "TDEL"	/* TD Event Log Table */
5762306a36Sopenharmony_ci
5862306a36Sopenharmony_ci/*
5962306a36Sopenharmony_ci * All tables must be byte-packed to match the ACPI specification, since
6062306a36Sopenharmony_ci * the tables are provided by the system BIOS.
6162306a36Sopenharmony_ci */
6262306a36Sopenharmony_ci#pragma pack(1)
6362306a36Sopenharmony_ci
6462306a36Sopenharmony_ci/*
6562306a36Sopenharmony_ci * Note: C bitfields are not used for this reason:
6662306a36Sopenharmony_ci *
6762306a36Sopenharmony_ci * "Bitfields are great and easy to read, but unfortunately the C language
6862306a36Sopenharmony_ci * does not specify the layout of bitfields in memory, which means they are
6962306a36Sopenharmony_ci * essentially useless for dealing with packed data in on-disk formats or
7062306a36Sopenharmony_ci * binary wire protocols." (Or ACPI tables and buffers.) "If you ask me,
7162306a36Sopenharmony_ci * this decision was a design error in C. Ritchie could have picked an order
7262306a36Sopenharmony_ci * and stuck with it." Norman Ramsey.
7362306a36Sopenharmony_ci * See http://stackoverflow.com/a/1053662/41661
7462306a36Sopenharmony_ci */
7562306a36Sopenharmony_ci
7662306a36Sopenharmony_ci/*******************************************************************************
7762306a36Sopenharmony_ci *
7862306a36Sopenharmony_ci * AEST - Arm Error Source Table
7962306a36Sopenharmony_ci *
8062306a36Sopenharmony_ci * Conforms to: ACPI for the Armv8 RAS Extensions 1.1 Platform Design Document
8162306a36Sopenharmony_ci * September 2020.
8262306a36Sopenharmony_ci *
8362306a36Sopenharmony_ci ******************************************************************************/
8462306a36Sopenharmony_ci
8562306a36Sopenharmony_cistruct acpi_table_aest {
8662306a36Sopenharmony_ci	struct acpi_table_header header;
8762306a36Sopenharmony_ci};
8862306a36Sopenharmony_ci
8962306a36Sopenharmony_ci/* Common Subtable header - one per Node Structure (Subtable) */
9062306a36Sopenharmony_ci
9162306a36Sopenharmony_cistruct acpi_aest_hdr {
9262306a36Sopenharmony_ci	u8 type;
9362306a36Sopenharmony_ci	u16 length;
9462306a36Sopenharmony_ci	u8 reserved;
9562306a36Sopenharmony_ci	u32 node_specific_offset;
9662306a36Sopenharmony_ci	u32 node_interface_offset;
9762306a36Sopenharmony_ci	u32 node_interrupt_offset;
9862306a36Sopenharmony_ci	u32 node_interrupt_count;
9962306a36Sopenharmony_ci	u64 timestamp_rate;
10062306a36Sopenharmony_ci	u64 reserved1;
10162306a36Sopenharmony_ci	u64 error_injection_rate;
10262306a36Sopenharmony_ci};
10362306a36Sopenharmony_ci
10462306a36Sopenharmony_ci/* Values for Type above */
10562306a36Sopenharmony_ci
10662306a36Sopenharmony_ci#define ACPI_AEST_PROCESSOR_ERROR_NODE      0
10762306a36Sopenharmony_ci#define ACPI_AEST_MEMORY_ERROR_NODE         1
10862306a36Sopenharmony_ci#define ACPI_AEST_SMMU_ERROR_NODE           2
10962306a36Sopenharmony_ci#define ACPI_AEST_VENDOR_ERROR_NODE         3
11062306a36Sopenharmony_ci#define ACPI_AEST_GIC_ERROR_NODE            4
11162306a36Sopenharmony_ci#define ACPI_AEST_NODE_TYPE_RESERVED        5	/* 5 and above are reserved */
11262306a36Sopenharmony_ci
11362306a36Sopenharmony_ci/*
11462306a36Sopenharmony_ci * AEST subtables (Error nodes)
11562306a36Sopenharmony_ci */
11662306a36Sopenharmony_ci
11762306a36Sopenharmony_ci/* 0: Processor Error */
11862306a36Sopenharmony_ci
11962306a36Sopenharmony_citypedef struct acpi_aest_processor {
12062306a36Sopenharmony_ci	u32 processor_id;
12162306a36Sopenharmony_ci	u8 resource_type;
12262306a36Sopenharmony_ci	u8 reserved;
12362306a36Sopenharmony_ci	u8 flags;
12462306a36Sopenharmony_ci	u8 revision;
12562306a36Sopenharmony_ci	u64 processor_affinity;
12662306a36Sopenharmony_ci
12762306a36Sopenharmony_ci} acpi_aest_processor;
12862306a36Sopenharmony_ci
12962306a36Sopenharmony_ci/* Values for resource_type above, related structs below */
13062306a36Sopenharmony_ci
13162306a36Sopenharmony_ci#define ACPI_AEST_CACHE_RESOURCE            0
13262306a36Sopenharmony_ci#define ACPI_AEST_TLB_RESOURCE              1
13362306a36Sopenharmony_ci#define ACPI_AEST_GENERIC_RESOURCE          2
13462306a36Sopenharmony_ci#define ACPI_AEST_RESOURCE_RESERVED         3	/* 3 and above are reserved */
13562306a36Sopenharmony_ci
13662306a36Sopenharmony_ci/* 0R: Processor Cache Resource Substructure */
13762306a36Sopenharmony_ci
13862306a36Sopenharmony_citypedef struct acpi_aest_processor_cache {
13962306a36Sopenharmony_ci	u32 cache_reference;
14062306a36Sopenharmony_ci	u32 reserved;
14162306a36Sopenharmony_ci
14262306a36Sopenharmony_ci} acpi_aest_processor_cache;
14362306a36Sopenharmony_ci
14462306a36Sopenharmony_ci/* Values for cache_type above */
14562306a36Sopenharmony_ci
14662306a36Sopenharmony_ci#define ACPI_AEST_CACHE_DATA                0
14762306a36Sopenharmony_ci#define ACPI_AEST_CACHE_INSTRUCTION         1
14862306a36Sopenharmony_ci#define ACPI_AEST_CACHE_UNIFIED             2
14962306a36Sopenharmony_ci#define ACPI_AEST_CACHE_RESERVED            3	/* 3 and above are reserved */
15062306a36Sopenharmony_ci
15162306a36Sopenharmony_ci/* 1R: Processor TLB Resource Substructure */
15262306a36Sopenharmony_ci
15362306a36Sopenharmony_citypedef struct acpi_aest_processor_tlb {
15462306a36Sopenharmony_ci	u32 tlb_level;
15562306a36Sopenharmony_ci	u32 reserved;
15662306a36Sopenharmony_ci
15762306a36Sopenharmony_ci} acpi_aest_processor_tlb;
15862306a36Sopenharmony_ci
15962306a36Sopenharmony_ci/* 2R: Processor Generic Resource Substructure */
16062306a36Sopenharmony_ci
16162306a36Sopenharmony_citypedef struct acpi_aest_processor_generic {
16262306a36Sopenharmony_ci	u32 resource;
16362306a36Sopenharmony_ci
16462306a36Sopenharmony_ci} acpi_aest_processor_generic;
16562306a36Sopenharmony_ci
16662306a36Sopenharmony_ci/* 1: Memory Error */
16762306a36Sopenharmony_ci
16862306a36Sopenharmony_citypedef struct acpi_aest_memory {
16962306a36Sopenharmony_ci	u32 srat_proximity_domain;
17062306a36Sopenharmony_ci
17162306a36Sopenharmony_ci} acpi_aest_memory;
17262306a36Sopenharmony_ci
17362306a36Sopenharmony_ci/* 2: Smmu Error */
17462306a36Sopenharmony_ci
17562306a36Sopenharmony_citypedef struct acpi_aest_smmu {
17662306a36Sopenharmony_ci	u32 iort_node_reference;
17762306a36Sopenharmony_ci	u32 subcomponent_reference;
17862306a36Sopenharmony_ci
17962306a36Sopenharmony_ci} acpi_aest_smmu;
18062306a36Sopenharmony_ci
18162306a36Sopenharmony_ci/* 3: Vendor Defined */
18262306a36Sopenharmony_ci
18362306a36Sopenharmony_citypedef struct acpi_aest_vendor {
18462306a36Sopenharmony_ci	u32 acpi_hid;
18562306a36Sopenharmony_ci	u32 acpi_uid;
18662306a36Sopenharmony_ci	u8 vendor_specific_data[16];
18762306a36Sopenharmony_ci
18862306a36Sopenharmony_ci} acpi_aest_vendor;
18962306a36Sopenharmony_ci
19062306a36Sopenharmony_ci/* 4: Gic Error */
19162306a36Sopenharmony_ci
19262306a36Sopenharmony_citypedef struct acpi_aest_gic {
19362306a36Sopenharmony_ci	u32 interface_type;
19462306a36Sopenharmony_ci	u32 instance_id;
19562306a36Sopenharmony_ci
19662306a36Sopenharmony_ci} acpi_aest_gic;
19762306a36Sopenharmony_ci
19862306a36Sopenharmony_ci/* Values for interface_type above */
19962306a36Sopenharmony_ci
20062306a36Sopenharmony_ci#define ACPI_AEST_GIC_CPU                   0
20162306a36Sopenharmony_ci#define ACPI_AEST_GIC_DISTRIBUTOR           1
20262306a36Sopenharmony_ci#define ACPI_AEST_GIC_REDISTRIBUTOR         2
20362306a36Sopenharmony_ci#define ACPI_AEST_GIC_ITS                   3
20462306a36Sopenharmony_ci#define ACPI_AEST_GIC_RESERVED              4	/* 4 and above are reserved */
20562306a36Sopenharmony_ci
20662306a36Sopenharmony_ci/* Node Interface Structure */
20762306a36Sopenharmony_ci
20862306a36Sopenharmony_citypedef struct acpi_aest_node_interface {
20962306a36Sopenharmony_ci	u8 type;
21062306a36Sopenharmony_ci	u8 reserved[3];
21162306a36Sopenharmony_ci	u32 flags;
21262306a36Sopenharmony_ci	u64 address;
21362306a36Sopenharmony_ci	u32 error_record_index;
21462306a36Sopenharmony_ci	u32 error_record_count;
21562306a36Sopenharmony_ci	u64 error_record_implemented;
21662306a36Sopenharmony_ci	u64 error_status_reporting;
21762306a36Sopenharmony_ci	u64 addressing_mode;
21862306a36Sopenharmony_ci
21962306a36Sopenharmony_ci} acpi_aest_node_interface;
22062306a36Sopenharmony_ci
22162306a36Sopenharmony_ci/* Values for Type field above */
22262306a36Sopenharmony_ci
22362306a36Sopenharmony_ci#define ACPI_AEST_NODE_SYSTEM_REGISTER      0
22462306a36Sopenharmony_ci#define ACPI_AEST_NODE_MEMORY_MAPPED        1
22562306a36Sopenharmony_ci#define ACPI_AEST_XFACE_RESERVED            2	/* 2 and above are reserved */
22662306a36Sopenharmony_ci
22762306a36Sopenharmony_ci/* Node Interrupt Structure */
22862306a36Sopenharmony_ci
22962306a36Sopenharmony_citypedef struct acpi_aest_node_interrupt {
23062306a36Sopenharmony_ci	u8 type;
23162306a36Sopenharmony_ci	u8 reserved[2];
23262306a36Sopenharmony_ci	u8 flags;
23362306a36Sopenharmony_ci	u32 gsiv;
23462306a36Sopenharmony_ci	u8 iort_id;
23562306a36Sopenharmony_ci	u8 reserved1[3];
23662306a36Sopenharmony_ci
23762306a36Sopenharmony_ci} acpi_aest_node_interrupt;
23862306a36Sopenharmony_ci
23962306a36Sopenharmony_ci/* Values for Type field above */
24062306a36Sopenharmony_ci
24162306a36Sopenharmony_ci#define ACPI_AEST_NODE_FAULT_HANDLING       0
24262306a36Sopenharmony_ci#define ACPI_AEST_NODE_ERROR_RECOVERY       1
24362306a36Sopenharmony_ci#define ACPI_AEST_XRUPT_RESERVED            2	/* 2 and above are reserved */
24462306a36Sopenharmony_ci
24562306a36Sopenharmony_ci/*******************************************************************************
24662306a36Sopenharmony_ci * AGDI - Arm Generic Diagnostic Dump and Reset Device Interface
24762306a36Sopenharmony_ci *
24862306a36Sopenharmony_ci * Conforms to "ACPI for Arm Components 1.1, Platform Design Document"
24962306a36Sopenharmony_ci * ARM DEN0093 v1.1
25062306a36Sopenharmony_ci *
25162306a36Sopenharmony_ci ******************************************************************************/
25262306a36Sopenharmony_cistruct acpi_table_agdi {
25362306a36Sopenharmony_ci	struct acpi_table_header header;	/* Common ACPI table header */
25462306a36Sopenharmony_ci	u8 flags;
25562306a36Sopenharmony_ci	u8 reserved[3];
25662306a36Sopenharmony_ci	u32 sdei_event;
25762306a36Sopenharmony_ci	u32 gsiv;
25862306a36Sopenharmony_ci};
25962306a36Sopenharmony_ci
26062306a36Sopenharmony_ci/* Mask for Flags field above */
26162306a36Sopenharmony_ci
26262306a36Sopenharmony_ci#define ACPI_AGDI_SIGNALING_MODE (1)
26362306a36Sopenharmony_ci
26462306a36Sopenharmony_ci/*******************************************************************************
26562306a36Sopenharmony_ci *
26662306a36Sopenharmony_ci * APMT - ARM Performance Monitoring Unit Table
26762306a36Sopenharmony_ci *
26862306a36Sopenharmony_ci * Conforms to:
26962306a36Sopenharmony_ci * ARM Performance Monitoring Unit Architecture 1.0 Platform Design Document
27062306a36Sopenharmony_ci * ARM DEN0117 v1.0 November 25, 2021
27162306a36Sopenharmony_ci *
27262306a36Sopenharmony_ci ******************************************************************************/
27362306a36Sopenharmony_ci
27462306a36Sopenharmony_cistruct acpi_table_apmt {
27562306a36Sopenharmony_ci	struct acpi_table_header header;	/* Common ACPI table header */
27662306a36Sopenharmony_ci};
27762306a36Sopenharmony_ci
27862306a36Sopenharmony_ci#define ACPI_APMT_NODE_ID_LENGTH                4
27962306a36Sopenharmony_ci
28062306a36Sopenharmony_ci/*
28162306a36Sopenharmony_ci * APMT subtables
28262306a36Sopenharmony_ci */
28362306a36Sopenharmony_cistruct acpi_apmt_node {
28462306a36Sopenharmony_ci	u16 length;
28562306a36Sopenharmony_ci	u8 flags;
28662306a36Sopenharmony_ci	u8 type;
28762306a36Sopenharmony_ci	u32 id;
28862306a36Sopenharmony_ci	u64 inst_primary;
28962306a36Sopenharmony_ci	u32 inst_secondary;
29062306a36Sopenharmony_ci	u64 base_address0;
29162306a36Sopenharmony_ci	u64 base_address1;
29262306a36Sopenharmony_ci	u32 ovflw_irq;
29362306a36Sopenharmony_ci	u32 reserved;
29462306a36Sopenharmony_ci	u32 ovflw_irq_flags;
29562306a36Sopenharmony_ci	u32 proc_affinity;
29662306a36Sopenharmony_ci	u32 impl_id;
29762306a36Sopenharmony_ci};
29862306a36Sopenharmony_ci
29962306a36Sopenharmony_ci/* Masks for Flags field above */
30062306a36Sopenharmony_ci
30162306a36Sopenharmony_ci#define ACPI_APMT_FLAGS_DUAL_PAGE               (1<<0)
30262306a36Sopenharmony_ci#define ACPI_APMT_FLAGS_AFFINITY                (1<<1)
30362306a36Sopenharmony_ci#define ACPI_APMT_FLAGS_ATOMIC                  (1<<2)
30462306a36Sopenharmony_ci
30562306a36Sopenharmony_ci/* Values for Flags dual page field above */
30662306a36Sopenharmony_ci
30762306a36Sopenharmony_ci#define ACPI_APMT_FLAGS_DUAL_PAGE_NSUPP         (0<<0)
30862306a36Sopenharmony_ci#define ACPI_APMT_FLAGS_DUAL_PAGE_SUPP          (1<<0)
30962306a36Sopenharmony_ci
31062306a36Sopenharmony_ci/* Values for Flags processor affinity field above */
31162306a36Sopenharmony_ci#define ACPI_APMT_FLAGS_AFFINITY_PROC           (0<<1)
31262306a36Sopenharmony_ci#define ACPI_APMT_FLAGS_AFFINITY_PROC_CONTAINER (1<<1)
31362306a36Sopenharmony_ci
31462306a36Sopenharmony_ci/* Values for Flags 64-bit atomic field above */
31562306a36Sopenharmony_ci#define ACPI_APMT_FLAGS_ATOMIC_NSUPP            (0<<2)
31662306a36Sopenharmony_ci#define ACPI_APMT_FLAGS_ATOMIC_SUPP             (1<<2)
31762306a36Sopenharmony_ci
31862306a36Sopenharmony_ci/* Values for Type field above */
31962306a36Sopenharmony_ci
32062306a36Sopenharmony_cienum acpi_apmt_node_type {
32162306a36Sopenharmony_ci	ACPI_APMT_NODE_TYPE_MC = 0x00,
32262306a36Sopenharmony_ci	ACPI_APMT_NODE_TYPE_SMMU = 0x01,
32362306a36Sopenharmony_ci	ACPI_APMT_NODE_TYPE_PCIE_ROOT = 0x02,
32462306a36Sopenharmony_ci	ACPI_APMT_NODE_TYPE_ACPI = 0x03,
32562306a36Sopenharmony_ci	ACPI_APMT_NODE_TYPE_CACHE = 0x04,
32662306a36Sopenharmony_ci	ACPI_APMT_NODE_TYPE_COUNT
32762306a36Sopenharmony_ci};
32862306a36Sopenharmony_ci
32962306a36Sopenharmony_ci/* Masks for ovflw_irq_flags field above */
33062306a36Sopenharmony_ci
33162306a36Sopenharmony_ci#define ACPI_APMT_OVFLW_IRQ_FLAGS_MODE          (1<<0)
33262306a36Sopenharmony_ci#define ACPI_APMT_OVFLW_IRQ_FLAGS_TYPE          (1<<1)
33362306a36Sopenharmony_ci
33462306a36Sopenharmony_ci/* Values for ovflw_irq_flags mode field above */
33562306a36Sopenharmony_ci
33662306a36Sopenharmony_ci#define ACPI_APMT_OVFLW_IRQ_FLAGS_MODE_LEVEL    (0<<0)
33762306a36Sopenharmony_ci#define ACPI_APMT_OVFLW_IRQ_FLAGS_MODE_EDGE     (1<<0)
33862306a36Sopenharmony_ci
33962306a36Sopenharmony_ci/* Values for ovflw_irq_flags type field above */
34062306a36Sopenharmony_ci
34162306a36Sopenharmony_ci#define ACPI_APMT_OVFLW_IRQ_FLAGS_TYPE_WIRED    (0<<1)
34262306a36Sopenharmony_ci
34362306a36Sopenharmony_ci/*******************************************************************************
34462306a36Sopenharmony_ci *
34562306a36Sopenharmony_ci * BDAT - BIOS Data ACPI Table
34662306a36Sopenharmony_ci *
34762306a36Sopenharmony_ci * Conforms to "BIOS Data ACPI Table", Interface Specification v4.0 Draft 5
34862306a36Sopenharmony_ci * Nov 2020
34962306a36Sopenharmony_ci *
35062306a36Sopenharmony_ci ******************************************************************************/
35162306a36Sopenharmony_ci
35262306a36Sopenharmony_cistruct acpi_table_bdat {
35362306a36Sopenharmony_ci	struct acpi_table_header header;
35462306a36Sopenharmony_ci	struct acpi_generic_address gas;
35562306a36Sopenharmony_ci};
35662306a36Sopenharmony_ci
35762306a36Sopenharmony_ci/*******************************************************************************
35862306a36Sopenharmony_ci *
35962306a36Sopenharmony_ci * CCEL - CC-Event Log
36062306a36Sopenharmony_ci *        From: "Guest-Host-Communication Interface (GHCI) for Intel
36162306a36Sopenharmony_ci *        Trust Domain Extensions (Intel TDX)". Feb 2022
36262306a36Sopenharmony_ci *
36362306a36Sopenharmony_ci ******************************************************************************/
36462306a36Sopenharmony_ci
36562306a36Sopenharmony_cistruct acpi_table_ccel {
36662306a36Sopenharmony_ci	struct acpi_table_header header;	/* Common ACPI table header */
36762306a36Sopenharmony_ci	u8 CCtype;
36862306a36Sopenharmony_ci	u8 Ccsub_type;
36962306a36Sopenharmony_ci	u16 reserved;
37062306a36Sopenharmony_ci	u64 log_area_minimum_length;
37162306a36Sopenharmony_ci	u64 log_area_start_address;
37262306a36Sopenharmony_ci};
37362306a36Sopenharmony_ci
37462306a36Sopenharmony_ci/*******************************************************************************
37562306a36Sopenharmony_ci *
37662306a36Sopenharmony_ci * IORT - IO Remapping Table
37762306a36Sopenharmony_ci *
37862306a36Sopenharmony_ci * Conforms to "IO Remapping Table System Software on ARM Platforms",
37962306a36Sopenharmony_ci * Document number: ARM DEN 0049E.e, Sep 2022
38062306a36Sopenharmony_ci *
38162306a36Sopenharmony_ci ******************************************************************************/
38262306a36Sopenharmony_ci
38362306a36Sopenharmony_cistruct acpi_table_iort {
38462306a36Sopenharmony_ci	struct acpi_table_header header;
38562306a36Sopenharmony_ci	u32 node_count;
38662306a36Sopenharmony_ci	u32 node_offset;
38762306a36Sopenharmony_ci	u32 reserved;
38862306a36Sopenharmony_ci};
38962306a36Sopenharmony_ci
39062306a36Sopenharmony_ci/*
39162306a36Sopenharmony_ci * IORT subtables
39262306a36Sopenharmony_ci */
39362306a36Sopenharmony_cistruct acpi_iort_node {
39462306a36Sopenharmony_ci	u8 type;
39562306a36Sopenharmony_ci	u16 length;
39662306a36Sopenharmony_ci	u8 revision;
39762306a36Sopenharmony_ci	u32 identifier;
39862306a36Sopenharmony_ci	u32 mapping_count;
39962306a36Sopenharmony_ci	u32 mapping_offset;
40062306a36Sopenharmony_ci	char node_data[];
40162306a36Sopenharmony_ci};
40262306a36Sopenharmony_ci
40362306a36Sopenharmony_ci/* Values for subtable Type above */
40462306a36Sopenharmony_ci
40562306a36Sopenharmony_cienum acpi_iort_node_type {
40662306a36Sopenharmony_ci	ACPI_IORT_NODE_ITS_GROUP = 0x00,
40762306a36Sopenharmony_ci	ACPI_IORT_NODE_NAMED_COMPONENT = 0x01,
40862306a36Sopenharmony_ci	ACPI_IORT_NODE_PCI_ROOT_COMPLEX = 0x02,
40962306a36Sopenharmony_ci	ACPI_IORT_NODE_SMMU = 0x03,
41062306a36Sopenharmony_ci	ACPI_IORT_NODE_SMMU_V3 = 0x04,
41162306a36Sopenharmony_ci	ACPI_IORT_NODE_PMCG = 0x05,
41262306a36Sopenharmony_ci	ACPI_IORT_NODE_RMR = 0x06,
41362306a36Sopenharmony_ci};
41462306a36Sopenharmony_ci
41562306a36Sopenharmony_cistruct acpi_iort_id_mapping {
41662306a36Sopenharmony_ci	u32 input_base;		/* Lowest value in input range */
41762306a36Sopenharmony_ci	u32 id_count;		/* Number of IDs */
41862306a36Sopenharmony_ci	u32 output_base;	/* Lowest value in output range */
41962306a36Sopenharmony_ci	u32 output_reference;	/* A reference to the output node */
42062306a36Sopenharmony_ci	u32 flags;
42162306a36Sopenharmony_ci};
42262306a36Sopenharmony_ci
42362306a36Sopenharmony_ci/* Masks for Flags field above for IORT subtable */
42462306a36Sopenharmony_ci
42562306a36Sopenharmony_ci#define ACPI_IORT_ID_SINGLE_MAPPING (1)
42662306a36Sopenharmony_ci
42762306a36Sopenharmony_cistruct acpi_iort_memory_access {
42862306a36Sopenharmony_ci	u32 cache_coherency;
42962306a36Sopenharmony_ci	u8 hints;
43062306a36Sopenharmony_ci	u16 reserved;
43162306a36Sopenharmony_ci	u8 memory_flags;
43262306a36Sopenharmony_ci};
43362306a36Sopenharmony_ci
43462306a36Sopenharmony_ci/* Values for cache_coherency field above */
43562306a36Sopenharmony_ci
43662306a36Sopenharmony_ci#define ACPI_IORT_NODE_COHERENT         0x00000001	/* The device node is fully coherent */
43762306a36Sopenharmony_ci#define ACPI_IORT_NODE_NOT_COHERENT     0x00000000	/* The device node is not coherent */
43862306a36Sopenharmony_ci
43962306a36Sopenharmony_ci/* Masks for Hints field above */
44062306a36Sopenharmony_ci
44162306a36Sopenharmony_ci#define ACPI_IORT_HT_TRANSIENT          (1)
44262306a36Sopenharmony_ci#define ACPI_IORT_HT_WRITE              (1<<1)
44362306a36Sopenharmony_ci#define ACPI_IORT_HT_READ               (1<<2)
44462306a36Sopenharmony_ci#define ACPI_IORT_HT_OVERRIDE           (1<<3)
44562306a36Sopenharmony_ci
44662306a36Sopenharmony_ci/* Masks for memory_flags field above */
44762306a36Sopenharmony_ci
44862306a36Sopenharmony_ci#define ACPI_IORT_MF_COHERENCY          (1)
44962306a36Sopenharmony_ci#define ACPI_IORT_MF_ATTRIBUTES         (1<<1)
45062306a36Sopenharmony_ci
45162306a36Sopenharmony_ci/*
45262306a36Sopenharmony_ci * IORT node specific subtables
45362306a36Sopenharmony_ci */
45462306a36Sopenharmony_cistruct acpi_iort_its_group {
45562306a36Sopenharmony_ci	u32 its_count;
45662306a36Sopenharmony_ci	u32 identifiers[];	/* GIC ITS identifier array */
45762306a36Sopenharmony_ci};
45862306a36Sopenharmony_ci
45962306a36Sopenharmony_cistruct acpi_iort_named_component {
46062306a36Sopenharmony_ci	u32 node_flags;
46162306a36Sopenharmony_ci	u64 memory_properties;	/* Memory access properties */
46262306a36Sopenharmony_ci	u8 memory_address_limit;	/* Memory address size limit */
46362306a36Sopenharmony_ci	char device_name[];	/* Path of namespace object */
46462306a36Sopenharmony_ci};
46562306a36Sopenharmony_ci
46662306a36Sopenharmony_ci/* Masks for Flags field above */
46762306a36Sopenharmony_ci
46862306a36Sopenharmony_ci#define ACPI_IORT_NC_STALL_SUPPORTED    (1)
46962306a36Sopenharmony_ci#define ACPI_IORT_NC_PASID_BITS         (31<<1)
47062306a36Sopenharmony_ci
47162306a36Sopenharmony_cistruct acpi_iort_root_complex {
47262306a36Sopenharmony_ci	u64 memory_properties;	/* Memory access properties */
47362306a36Sopenharmony_ci	u32 ats_attribute;
47462306a36Sopenharmony_ci	u32 pci_segment_number;
47562306a36Sopenharmony_ci	u8 memory_address_limit;	/* Memory address size limit */
47662306a36Sopenharmony_ci	u16 pasid_capabilities;	/* PASID Capabilities */
47762306a36Sopenharmony_ci	u8 reserved[];		/* Reserved, must be zero */
47862306a36Sopenharmony_ci};
47962306a36Sopenharmony_ci
48062306a36Sopenharmony_ci/* Masks for ats_attribute field above */
48162306a36Sopenharmony_ci
48262306a36Sopenharmony_ci#define ACPI_IORT_ATS_SUPPORTED         (1)	/* The root complex ATS support */
48362306a36Sopenharmony_ci#define ACPI_IORT_PRI_SUPPORTED         (1<<1)	/* The root complex PRI support */
48462306a36Sopenharmony_ci#define ACPI_IORT_PASID_FWD_SUPPORTED   (1<<2)	/* The root complex PASID forward support */
48562306a36Sopenharmony_ci
48662306a36Sopenharmony_ci/* Masks for pasid_capabilities field above */
48762306a36Sopenharmony_ci#define ACPI_IORT_PASID_MAX_WIDTH       (0x1F)	/* Bits 0-4 */
48862306a36Sopenharmony_ci
48962306a36Sopenharmony_cistruct acpi_iort_smmu {
49062306a36Sopenharmony_ci	u64 base_address;	/* SMMU base address */
49162306a36Sopenharmony_ci	u64 span;		/* Length of memory range */
49262306a36Sopenharmony_ci	u32 model;
49362306a36Sopenharmony_ci	u32 flags;
49462306a36Sopenharmony_ci	u32 global_interrupt_offset;
49562306a36Sopenharmony_ci	u32 context_interrupt_count;
49662306a36Sopenharmony_ci	u32 context_interrupt_offset;
49762306a36Sopenharmony_ci	u32 pmu_interrupt_count;
49862306a36Sopenharmony_ci	u32 pmu_interrupt_offset;
49962306a36Sopenharmony_ci	u64 interrupts[];	/* Interrupt array */
50062306a36Sopenharmony_ci};
50162306a36Sopenharmony_ci
50262306a36Sopenharmony_ci/* Values for Model field above */
50362306a36Sopenharmony_ci
50462306a36Sopenharmony_ci#define ACPI_IORT_SMMU_V1               0x00000000	/* Generic SMMUv1 */
50562306a36Sopenharmony_ci#define ACPI_IORT_SMMU_V2               0x00000001	/* Generic SMMUv2 */
50662306a36Sopenharmony_ci#define ACPI_IORT_SMMU_CORELINK_MMU400  0x00000002	/* ARM Corelink MMU-400 */
50762306a36Sopenharmony_ci#define ACPI_IORT_SMMU_CORELINK_MMU500  0x00000003	/* ARM Corelink MMU-500 */
50862306a36Sopenharmony_ci#define ACPI_IORT_SMMU_CORELINK_MMU401  0x00000004	/* ARM Corelink MMU-401 */
50962306a36Sopenharmony_ci#define ACPI_IORT_SMMU_CAVIUM_THUNDERX  0x00000005	/* Cavium thunder_x SMMUv2 */
51062306a36Sopenharmony_ci
51162306a36Sopenharmony_ci/* Masks for Flags field above */
51262306a36Sopenharmony_ci
51362306a36Sopenharmony_ci#define ACPI_IORT_SMMU_DVM_SUPPORTED    (1)
51462306a36Sopenharmony_ci#define ACPI_IORT_SMMU_COHERENT_WALK    (1<<1)
51562306a36Sopenharmony_ci
51662306a36Sopenharmony_ci/* Global interrupt format */
51762306a36Sopenharmony_ci
51862306a36Sopenharmony_cistruct acpi_iort_smmu_gsi {
51962306a36Sopenharmony_ci	u32 nsg_irpt;
52062306a36Sopenharmony_ci	u32 nsg_irpt_flags;
52162306a36Sopenharmony_ci	u32 nsg_cfg_irpt;
52262306a36Sopenharmony_ci	u32 nsg_cfg_irpt_flags;
52362306a36Sopenharmony_ci};
52462306a36Sopenharmony_ci
52562306a36Sopenharmony_cistruct acpi_iort_smmu_v3 {
52662306a36Sopenharmony_ci	u64 base_address;	/* SMMUv3 base address */
52762306a36Sopenharmony_ci	u32 flags;
52862306a36Sopenharmony_ci	u32 reserved;
52962306a36Sopenharmony_ci	u64 vatos_address;
53062306a36Sopenharmony_ci	u32 model;
53162306a36Sopenharmony_ci	u32 event_gsiv;
53262306a36Sopenharmony_ci	u32 pri_gsiv;
53362306a36Sopenharmony_ci	u32 gerr_gsiv;
53462306a36Sopenharmony_ci	u32 sync_gsiv;
53562306a36Sopenharmony_ci	u32 pxm;
53662306a36Sopenharmony_ci	u32 id_mapping_index;
53762306a36Sopenharmony_ci};
53862306a36Sopenharmony_ci
53962306a36Sopenharmony_ci/* Values for Model field above */
54062306a36Sopenharmony_ci
54162306a36Sopenharmony_ci#define ACPI_IORT_SMMU_V3_GENERIC           0x00000000	/* Generic SMMUv3 */
54262306a36Sopenharmony_ci#define ACPI_IORT_SMMU_V3_HISILICON_HI161X  0x00000001	/* hi_silicon Hi161x SMMUv3 */
54362306a36Sopenharmony_ci#define ACPI_IORT_SMMU_V3_CAVIUM_CN99XX     0x00000002	/* Cavium CN99xx SMMUv3 */
54462306a36Sopenharmony_ci
54562306a36Sopenharmony_ci/* Masks for Flags field above */
54662306a36Sopenharmony_ci
54762306a36Sopenharmony_ci#define ACPI_IORT_SMMU_V3_COHACC_OVERRIDE   (1)
54862306a36Sopenharmony_ci#define ACPI_IORT_SMMU_V3_HTTU_OVERRIDE     (3<<1)
54962306a36Sopenharmony_ci#define ACPI_IORT_SMMU_V3_PXM_VALID         (1<<3)
55062306a36Sopenharmony_ci#define ACPI_IORT_SMMU_V3_DEVICEID_VALID    (1<<4)
55162306a36Sopenharmony_ci
55262306a36Sopenharmony_cistruct acpi_iort_pmcg {
55362306a36Sopenharmony_ci	u64 page0_base_address;
55462306a36Sopenharmony_ci	u32 overflow_gsiv;
55562306a36Sopenharmony_ci	u32 node_reference;
55662306a36Sopenharmony_ci	u64 page1_base_address;
55762306a36Sopenharmony_ci};
55862306a36Sopenharmony_ci
55962306a36Sopenharmony_cistruct acpi_iort_rmr {
56062306a36Sopenharmony_ci	u32 flags;
56162306a36Sopenharmony_ci	u32 rmr_count;
56262306a36Sopenharmony_ci	u32 rmr_offset;
56362306a36Sopenharmony_ci};
56462306a36Sopenharmony_ci
56562306a36Sopenharmony_ci/* Masks for Flags field above */
56662306a36Sopenharmony_ci#define ACPI_IORT_RMR_REMAP_PERMITTED      (1)
56762306a36Sopenharmony_ci#define ACPI_IORT_RMR_ACCESS_PRIVILEGE     (1<<1)
56862306a36Sopenharmony_ci
56962306a36Sopenharmony_ci/*
57062306a36Sopenharmony_ci * Macro to access the Access Attributes in flags field above:
57162306a36Sopenharmony_ci *  Access Attributes is encoded in bits 9:2
57262306a36Sopenharmony_ci */
57362306a36Sopenharmony_ci#define ACPI_IORT_RMR_ACCESS_ATTRIBUTES(flags)          (((flags) >> 2) & 0xFF)
57462306a36Sopenharmony_ci
57562306a36Sopenharmony_ci/* Values for above Access Attributes */
57662306a36Sopenharmony_ci
57762306a36Sopenharmony_ci#define ACPI_IORT_RMR_ATTR_DEVICE_NGNRNE   0x00
57862306a36Sopenharmony_ci#define ACPI_IORT_RMR_ATTR_DEVICE_NGNRE    0x01
57962306a36Sopenharmony_ci#define ACPI_IORT_RMR_ATTR_DEVICE_NGRE     0x02
58062306a36Sopenharmony_ci#define ACPI_IORT_RMR_ATTR_DEVICE_GRE      0x03
58162306a36Sopenharmony_ci#define ACPI_IORT_RMR_ATTR_NORMAL_NC       0x04
58262306a36Sopenharmony_ci#define ACPI_IORT_RMR_ATTR_NORMAL_IWB_OWB  0x05
58362306a36Sopenharmony_ci
58462306a36Sopenharmony_cistruct acpi_iort_rmr_desc {
58562306a36Sopenharmony_ci	u64 base_address;
58662306a36Sopenharmony_ci	u64 length;
58762306a36Sopenharmony_ci	u32 reserved;
58862306a36Sopenharmony_ci};
58962306a36Sopenharmony_ci
59062306a36Sopenharmony_ci/*******************************************************************************
59162306a36Sopenharmony_ci *
59262306a36Sopenharmony_ci * IVRS - I/O Virtualization Reporting Structure
59362306a36Sopenharmony_ci *        Version 1
59462306a36Sopenharmony_ci *
59562306a36Sopenharmony_ci * Conforms to "AMD I/O Virtualization Technology (IOMMU) Specification",
59662306a36Sopenharmony_ci * Revision 1.26, February 2009.
59762306a36Sopenharmony_ci *
59862306a36Sopenharmony_ci ******************************************************************************/
59962306a36Sopenharmony_ci
60062306a36Sopenharmony_cistruct acpi_table_ivrs {
60162306a36Sopenharmony_ci	struct acpi_table_header header;	/* Common ACPI table header */
60262306a36Sopenharmony_ci	u32 info;		/* Common virtualization info */
60362306a36Sopenharmony_ci	u64 reserved;
60462306a36Sopenharmony_ci};
60562306a36Sopenharmony_ci
60662306a36Sopenharmony_ci/* Values for Info field above */
60762306a36Sopenharmony_ci
60862306a36Sopenharmony_ci#define ACPI_IVRS_PHYSICAL_SIZE     0x00007F00	/* 7 bits, physical address size */
60962306a36Sopenharmony_ci#define ACPI_IVRS_VIRTUAL_SIZE      0x003F8000	/* 7 bits, virtual address size */
61062306a36Sopenharmony_ci#define ACPI_IVRS_ATS_RESERVED      0x00400000	/* ATS address translation range reserved */
61162306a36Sopenharmony_ci
61262306a36Sopenharmony_ci/* IVRS subtable header */
61362306a36Sopenharmony_ci
61462306a36Sopenharmony_cistruct acpi_ivrs_header {
61562306a36Sopenharmony_ci	u8 type;		/* Subtable type */
61662306a36Sopenharmony_ci	u8 flags;
61762306a36Sopenharmony_ci	u16 length;		/* Subtable length */
61862306a36Sopenharmony_ci	u16 device_id;		/* ID of IOMMU */
61962306a36Sopenharmony_ci};
62062306a36Sopenharmony_ci
62162306a36Sopenharmony_ci/* Values for subtable Type above */
62262306a36Sopenharmony_ci
62362306a36Sopenharmony_cienum acpi_ivrs_type {
62462306a36Sopenharmony_ci	ACPI_IVRS_TYPE_HARDWARE1 = 0x10,
62562306a36Sopenharmony_ci	ACPI_IVRS_TYPE_HARDWARE2 = 0x11,
62662306a36Sopenharmony_ci	ACPI_IVRS_TYPE_HARDWARE3 = 0x40,
62762306a36Sopenharmony_ci	ACPI_IVRS_TYPE_MEMORY1 = 0x20,
62862306a36Sopenharmony_ci	ACPI_IVRS_TYPE_MEMORY2 = 0x21,
62962306a36Sopenharmony_ci	ACPI_IVRS_TYPE_MEMORY3 = 0x22
63062306a36Sopenharmony_ci};
63162306a36Sopenharmony_ci
63262306a36Sopenharmony_ci/* Masks for Flags field above for IVHD subtable */
63362306a36Sopenharmony_ci
63462306a36Sopenharmony_ci#define ACPI_IVHD_TT_ENABLE         (1)
63562306a36Sopenharmony_ci#define ACPI_IVHD_PASS_PW           (1<<1)
63662306a36Sopenharmony_ci#define ACPI_IVHD_RES_PASS_PW       (1<<2)
63762306a36Sopenharmony_ci#define ACPI_IVHD_ISOC              (1<<3)
63862306a36Sopenharmony_ci#define ACPI_IVHD_IOTLB             (1<<4)
63962306a36Sopenharmony_ci
64062306a36Sopenharmony_ci/* Masks for Flags field above for IVMD subtable */
64162306a36Sopenharmony_ci
64262306a36Sopenharmony_ci#define ACPI_IVMD_UNITY             (1)
64362306a36Sopenharmony_ci#define ACPI_IVMD_READ              (1<<1)
64462306a36Sopenharmony_ci#define ACPI_IVMD_WRITE             (1<<2)
64562306a36Sopenharmony_ci#define ACPI_IVMD_EXCLUSION_RANGE   (1<<3)
64662306a36Sopenharmony_ci
64762306a36Sopenharmony_ci/*
64862306a36Sopenharmony_ci * IVRS subtables, correspond to Type in struct acpi_ivrs_header
64962306a36Sopenharmony_ci */
65062306a36Sopenharmony_ci
65162306a36Sopenharmony_ci/* 0x10: I/O Virtualization Hardware Definition Block (IVHD) */
65262306a36Sopenharmony_ci
65362306a36Sopenharmony_cistruct acpi_ivrs_hardware_10 {
65462306a36Sopenharmony_ci	struct acpi_ivrs_header header;
65562306a36Sopenharmony_ci	u16 capability_offset;	/* Offset for IOMMU control fields */
65662306a36Sopenharmony_ci	u64 base_address;	/* IOMMU control registers */
65762306a36Sopenharmony_ci	u16 pci_segment_group;
65862306a36Sopenharmony_ci	u16 info;		/* MSI number and unit ID */
65962306a36Sopenharmony_ci	u32 feature_reporting;
66062306a36Sopenharmony_ci};
66162306a36Sopenharmony_ci
66262306a36Sopenharmony_ci/* 0x11: I/O Virtualization Hardware Definition Block (IVHD) */
66362306a36Sopenharmony_ci
66462306a36Sopenharmony_cistruct acpi_ivrs_hardware_11 {
66562306a36Sopenharmony_ci	struct acpi_ivrs_header header;
66662306a36Sopenharmony_ci	u16 capability_offset;	/* Offset for IOMMU control fields */
66762306a36Sopenharmony_ci	u64 base_address;	/* IOMMU control registers */
66862306a36Sopenharmony_ci	u16 pci_segment_group;
66962306a36Sopenharmony_ci	u16 info;		/* MSI number and unit ID */
67062306a36Sopenharmony_ci	u32 attributes;
67162306a36Sopenharmony_ci	u64 efr_register_image;
67262306a36Sopenharmony_ci	u64 reserved;
67362306a36Sopenharmony_ci};
67462306a36Sopenharmony_ci
67562306a36Sopenharmony_ci/* Masks for Info field above */
67662306a36Sopenharmony_ci
67762306a36Sopenharmony_ci#define ACPI_IVHD_MSI_NUMBER_MASK   0x001F	/* 5 bits, MSI message number */
67862306a36Sopenharmony_ci#define ACPI_IVHD_UNIT_ID_MASK      0x1F00	/* 5 bits, unit_ID */
67962306a36Sopenharmony_ci
68062306a36Sopenharmony_ci/*
68162306a36Sopenharmony_ci * Device Entries for IVHD subtable, appear after struct acpi_ivrs_hardware structure.
68262306a36Sopenharmony_ci * Upper two bits of the Type field are the (encoded) length of the structure.
68362306a36Sopenharmony_ci * Currently, only 4 and 8 byte entries are defined. 16 and 32 byte entries
68462306a36Sopenharmony_ci * are reserved for future use but not defined.
68562306a36Sopenharmony_ci */
68662306a36Sopenharmony_cistruct acpi_ivrs_de_header {
68762306a36Sopenharmony_ci	u8 type;
68862306a36Sopenharmony_ci	u16 id;
68962306a36Sopenharmony_ci	u8 data_setting;
69062306a36Sopenharmony_ci};
69162306a36Sopenharmony_ci
69262306a36Sopenharmony_ci/* Length of device entry is in the top two bits of Type field above */
69362306a36Sopenharmony_ci
69462306a36Sopenharmony_ci#define ACPI_IVHD_ENTRY_LENGTH      0xC0
69562306a36Sopenharmony_ci
69662306a36Sopenharmony_ci/* Values for device entry Type field above */
69762306a36Sopenharmony_ci
69862306a36Sopenharmony_cienum acpi_ivrs_device_entry_type {
69962306a36Sopenharmony_ci	/* 4-byte device entries, all use struct acpi_ivrs_device4 */
70062306a36Sopenharmony_ci
70162306a36Sopenharmony_ci	ACPI_IVRS_TYPE_PAD4 = 0,
70262306a36Sopenharmony_ci	ACPI_IVRS_TYPE_ALL = 1,
70362306a36Sopenharmony_ci	ACPI_IVRS_TYPE_SELECT = 2,
70462306a36Sopenharmony_ci	ACPI_IVRS_TYPE_START = 3,
70562306a36Sopenharmony_ci	ACPI_IVRS_TYPE_END = 4,
70662306a36Sopenharmony_ci
70762306a36Sopenharmony_ci	/* 8-byte device entries */
70862306a36Sopenharmony_ci
70962306a36Sopenharmony_ci	ACPI_IVRS_TYPE_PAD8 = 64,
71062306a36Sopenharmony_ci	ACPI_IVRS_TYPE_NOT_USED = 65,
71162306a36Sopenharmony_ci	ACPI_IVRS_TYPE_ALIAS_SELECT = 66,	/* Uses struct acpi_ivrs_device8a */
71262306a36Sopenharmony_ci	ACPI_IVRS_TYPE_ALIAS_START = 67,	/* Uses struct acpi_ivrs_device8a */
71362306a36Sopenharmony_ci	ACPI_IVRS_TYPE_EXT_SELECT = 70,	/* Uses struct acpi_ivrs_device8b */
71462306a36Sopenharmony_ci	ACPI_IVRS_TYPE_EXT_START = 71,	/* Uses struct acpi_ivrs_device8b */
71562306a36Sopenharmony_ci	ACPI_IVRS_TYPE_SPECIAL = 72,	/* Uses struct acpi_ivrs_device8c */
71662306a36Sopenharmony_ci
71762306a36Sopenharmony_ci	/* Variable-length device entries */
71862306a36Sopenharmony_ci
71962306a36Sopenharmony_ci	ACPI_IVRS_TYPE_HID = 240	/* Uses ACPI_IVRS_DEVICE_HID */
72062306a36Sopenharmony_ci};
72162306a36Sopenharmony_ci
72262306a36Sopenharmony_ci/* Values for Data field above */
72362306a36Sopenharmony_ci
72462306a36Sopenharmony_ci#define ACPI_IVHD_INIT_PASS         (1)
72562306a36Sopenharmony_ci#define ACPI_IVHD_EINT_PASS         (1<<1)
72662306a36Sopenharmony_ci#define ACPI_IVHD_NMI_PASS          (1<<2)
72762306a36Sopenharmony_ci#define ACPI_IVHD_SYSTEM_MGMT       (3<<4)
72862306a36Sopenharmony_ci#define ACPI_IVHD_LINT0_PASS        (1<<6)
72962306a36Sopenharmony_ci#define ACPI_IVHD_LINT1_PASS        (1<<7)
73062306a36Sopenharmony_ci
73162306a36Sopenharmony_ci/* Types 0-4: 4-byte device entry */
73262306a36Sopenharmony_ci
73362306a36Sopenharmony_cistruct acpi_ivrs_device4 {
73462306a36Sopenharmony_ci	struct acpi_ivrs_de_header header;
73562306a36Sopenharmony_ci};
73662306a36Sopenharmony_ci
73762306a36Sopenharmony_ci/* Types 66-67: 8-byte device entry */
73862306a36Sopenharmony_ci
73962306a36Sopenharmony_cistruct acpi_ivrs_device8a {
74062306a36Sopenharmony_ci	struct acpi_ivrs_de_header header;
74162306a36Sopenharmony_ci	u8 reserved1;
74262306a36Sopenharmony_ci	u16 used_id;
74362306a36Sopenharmony_ci	u8 reserved2;
74462306a36Sopenharmony_ci};
74562306a36Sopenharmony_ci
74662306a36Sopenharmony_ci/* Types 70-71: 8-byte device entry */
74762306a36Sopenharmony_ci
74862306a36Sopenharmony_cistruct acpi_ivrs_device8b {
74962306a36Sopenharmony_ci	struct acpi_ivrs_de_header header;
75062306a36Sopenharmony_ci	u32 extended_data;
75162306a36Sopenharmony_ci};
75262306a36Sopenharmony_ci
75362306a36Sopenharmony_ci/* Values for extended_data above */
75462306a36Sopenharmony_ci
75562306a36Sopenharmony_ci#define ACPI_IVHD_ATS_DISABLED      (1<<31)
75662306a36Sopenharmony_ci
75762306a36Sopenharmony_ci/* Type 72: 8-byte device entry */
75862306a36Sopenharmony_ci
75962306a36Sopenharmony_cistruct acpi_ivrs_device8c {
76062306a36Sopenharmony_ci	struct acpi_ivrs_de_header header;
76162306a36Sopenharmony_ci	u8 handle;
76262306a36Sopenharmony_ci	u16 used_id;
76362306a36Sopenharmony_ci	u8 variety;
76462306a36Sopenharmony_ci};
76562306a36Sopenharmony_ci
76662306a36Sopenharmony_ci/* Values for Variety field above */
76762306a36Sopenharmony_ci
76862306a36Sopenharmony_ci#define ACPI_IVHD_IOAPIC            1
76962306a36Sopenharmony_ci#define ACPI_IVHD_HPET              2
77062306a36Sopenharmony_ci
77162306a36Sopenharmony_ci/* Type 240: variable-length device entry */
77262306a36Sopenharmony_ci
77362306a36Sopenharmony_cistruct acpi_ivrs_device_hid {
77462306a36Sopenharmony_ci	struct acpi_ivrs_de_header header;
77562306a36Sopenharmony_ci	u64 acpi_hid;
77662306a36Sopenharmony_ci	u64 acpi_cid;
77762306a36Sopenharmony_ci	u8 uid_type;
77862306a36Sopenharmony_ci	u8 uid_length;
77962306a36Sopenharmony_ci};
78062306a36Sopenharmony_ci
78162306a36Sopenharmony_ci/* Values for uid_type above */
78262306a36Sopenharmony_ci
78362306a36Sopenharmony_ci#define ACPI_IVRS_UID_NOT_PRESENT   0
78462306a36Sopenharmony_ci#define ACPI_IVRS_UID_IS_INTEGER    1
78562306a36Sopenharmony_ci#define ACPI_IVRS_UID_IS_STRING     2
78662306a36Sopenharmony_ci
78762306a36Sopenharmony_ci/* 0x20, 0x21, 0x22: I/O Virtualization Memory Definition Block (IVMD) */
78862306a36Sopenharmony_ci
78962306a36Sopenharmony_cistruct acpi_ivrs_memory {
79062306a36Sopenharmony_ci	struct acpi_ivrs_header header;
79162306a36Sopenharmony_ci	u16 aux_data;
79262306a36Sopenharmony_ci	u64 reserved;
79362306a36Sopenharmony_ci	u64 start_address;
79462306a36Sopenharmony_ci	u64 memory_length;
79562306a36Sopenharmony_ci};
79662306a36Sopenharmony_ci
79762306a36Sopenharmony_ci/*******************************************************************************
79862306a36Sopenharmony_ci *
79962306a36Sopenharmony_ci * LPIT - Low Power Idle Table
80062306a36Sopenharmony_ci *
80162306a36Sopenharmony_ci * Conforms to "ACPI Low Power Idle Table (LPIT)" July 2014.
80262306a36Sopenharmony_ci *
80362306a36Sopenharmony_ci ******************************************************************************/
80462306a36Sopenharmony_ci
80562306a36Sopenharmony_cistruct acpi_table_lpit {
80662306a36Sopenharmony_ci	struct acpi_table_header header;	/* Common ACPI table header */
80762306a36Sopenharmony_ci};
80862306a36Sopenharmony_ci
80962306a36Sopenharmony_ci/* LPIT subtable header */
81062306a36Sopenharmony_ci
81162306a36Sopenharmony_cistruct acpi_lpit_header {
81262306a36Sopenharmony_ci	u32 type;		/* Subtable type */
81362306a36Sopenharmony_ci	u32 length;		/* Subtable length */
81462306a36Sopenharmony_ci	u16 unique_id;
81562306a36Sopenharmony_ci	u16 reserved;
81662306a36Sopenharmony_ci	u32 flags;
81762306a36Sopenharmony_ci};
81862306a36Sopenharmony_ci
81962306a36Sopenharmony_ci/* Values for subtable Type above */
82062306a36Sopenharmony_ci
82162306a36Sopenharmony_cienum acpi_lpit_type {
82262306a36Sopenharmony_ci	ACPI_LPIT_TYPE_NATIVE_CSTATE = 0x00,
82362306a36Sopenharmony_ci	ACPI_LPIT_TYPE_RESERVED = 0x01	/* 1 and above are reserved */
82462306a36Sopenharmony_ci};
82562306a36Sopenharmony_ci
82662306a36Sopenharmony_ci/* Masks for Flags field above  */
82762306a36Sopenharmony_ci
82862306a36Sopenharmony_ci#define ACPI_LPIT_STATE_DISABLED    (1)
82962306a36Sopenharmony_ci#define ACPI_LPIT_NO_COUNTER        (1<<1)
83062306a36Sopenharmony_ci
83162306a36Sopenharmony_ci/*
83262306a36Sopenharmony_ci * LPIT subtables, correspond to Type in struct acpi_lpit_header
83362306a36Sopenharmony_ci */
83462306a36Sopenharmony_ci
83562306a36Sopenharmony_ci/* 0x00: Native C-state instruction based LPI structure */
83662306a36Sopenharmony_ci
83762306a36Sopenharmony_cistruct acpi_lpit_native {
83862306a36Sopenharmony_ci	struct acpi_lpit_header header;
83962306a36Sopenharmony_ci	struct acpi_generic_address entry_trigger;
84062306a36Sopenharmony_ci	u32 residency;
84162306a36Sopenharmony_ci	u32 latency;
84262306a36Sopenharmony_ci	struct acpi_generic_address residency_counter;
84362306a36Sopenharmony_ci	u64 counter_frequency;
84462306a36Sopenharmony_ci};
84562306a36Sopenharmony_ci
84662306a36Sopenharmony_ci/*******************************************************************************
84762306a36Sopenharmony_ci *
84862306a36Sopenharmony_ci * MADT - Multiple APIC Description Table
84962306a36Sopenharmony_ci *        Version 3
85062306a36Sopenharmony_ci *
85162306a36Sopenharmony_ci ******************************************************************************/
85262306a36Sopenharmony_ci
85362306a36Sopenharmony_cistruct acpi_table_madt {
85462306a36Sopenharmony_ci	struct acpi_table_header header;	/* Common ACPI table header */
85562306a36Sopenharmony_ci	u32 address;		/* Physical address of local APIC */
85662306a36Sopenharmony_ci	u32 flags;
85762306a36Sopenharmony_ci};
85862306a36Sopenharmony_ci
85962306a36Sopenharmony_ci/* Masks for Flags field above */
86062306a36Sopenharmony_ci
86162306a36Sopenharmony_ci#define ACPI_MADT_PCAT_COMPAT       (1)	/* 00: System also has dual 8259s */
86262306a36Sopenharmony_ci
86362306a36Sopenharmony_ci/* Values for PCATCompat flag */
86462306a36Sopenharmony_ci
86562306a36Sopenharmony_ci#define ACPI_MADT_DUAL_PIC          1
86662306a36Sopenharmony_ci#define ACPI_MADT_MULTIPLE_APIC     0
86762306a36Sopenharmony_ci
86862306a36Sopenharmony_ci/* Values for MADT subtable type in struct acpi_subtable_header */
86962306a36Sopenharmony_ci
87062306a36Sopenharmony_cienum acpi_madt_type {
87162306a36Sopenharmony_ci	ACPI_MADT_TYPE_LOCAL_APIC = 0,
87262306a36Sopenharmony_ci	ACPI_MADT_TYPE_IO_APIC = 1,
87362306a36Sopenharmony_ci	ACPI_MADT_TYPE_INTERRUPT_OVERRIDE = 2,
87462306a36Sopenharmony_ci	ACPI_MADT_TYPE_NMI_SOURCE = 3,
87562306a36Sopenharmony_ci	ACPI_MADT_TYPE_LOCAL_APIC_NMI = 4,
87662306a36Sopenharmony_ci	ACPI_MADT_TYPE_LOCAL_APIC_OVERRIDE = 5,
87762306a36Sopenharmony_ci	ACPI_MADT_TYPE_IO_SAPIC = 6,
87862306a36Sopenharmony_ci	ACPI_MADT_TYPE_LOCAL_SAPIC = 7,
87962306a36Sopenharmony_ci	ACPI_MADT_TYPE_INTERRUPT_SOURCE = 8,
88062306a36Sopenharmony_ci	ACPI_MADT_TYPE_LOCAL_X2APIC = 9,
88162306a36Sopenharmony_ci	ACPI_MADT_TYPE_LOCAL_X2APIC_NMI = 10,
88262306a36Sopenharmony_ci	ACPI_MADT_TYPE_GENERIC_INTERRUPT = 11,
88362306a36Sopenharmony_ci	ACPI_MADT_TYPE_GENERIC_DISTRIBUTOR = 12,
88462306a36Sopenharmony_ci	ACPI_MADT_TYPE_GENERIC_MSI_FRAME = 13,
88562306a36Sopenharmony_ci	ACPI_MADT_TYPE_GENERIC_REDISTRIBUTOR = 14,
88662306a36Sopenharmony_ci	ACPI_MADT_TYPE_GENERIC_TRANSLATOR = 15,
88762306a36Sopenharmony_ci	ACPI_MADT_TYPE_MULTIPROC_WAKEUP = 16,
88862306a36Sopenharmony_ci	ACPI_MADT_TYPE_CORE_PIC = 17,
88962306a36Sopenharmony_ci	ACPI_MADT_TYPE_LIO_PIC = 18,
89062306a36Sopenharmony_ci	ACPI_MADT_TYPE_HT_PIC = 19,
89162306a36Sopenharmony_ci	ACPI_MADT_TYPE_EIO_PIC = 20,
89262306a36Sopenharmony_ci	ACPI_MADT_TYPE_MSI_PIC = 21,
89362306a36Sopenharmony_ci	ACPI_MADT_TYPE_BIO_PIC = 22,
89462306a36Sopenharmony_ci	ACPI_MADT_TYPE_LPC_PIC = 23,
89562306a36Sopenharmony_ci	ACPI_MADT_TYPE_RINTC = 24,
89662306a36Sopenharmony_ci	ACPI_MADT_TYPE_IMSIC = 25,
89762306a36Sopenharmony_ci	ACPI_MADT_TYPE_APLIC = 26,
89862306a36Sopenharmony_ci	ACPI_MADT_TYPE_PLIC = 27,
89962306a36Sopenharmony_ci	ACPI_MADT_TYPE_RESERVED = 28,	/* 28 to 0x7F are reserved */
90062306a36Sopenharmony_ci	ACPI_MADT_TYPE_OEM_RESERVED = 0x80	/* 0x80 to 0xFF are reserved for OEM use */
90162306a36Sopenharmony_ci};
90262306a36Sopenharmony_ci
90362306a36Sopenharmony_ci/*
90462306a36Sopenharmony_ci * MADT Subtables, correspond to Type in struct acpi_subtable_header
90562306a36Sopenharmony_ci */
90662306a36Sopenharmony_ci
90762306a36Sopenharmony_ci/* 0: Processor Local APIC */
90862306a36Sopenharmony_ci
90962306a36Sopenharmony_cistruct acpi_madt_local_apic {
91062306a36Sopenharmony_ci	struct acpi_subtable_header header;
91162306a36Sopenharmony_ci	u8 processor_id;	/* ACPI processor id */
91262306a36Sopenharmony_ci	u8 id;			/* Processor's local APIC id */
91362306a36Sopenharmony_ci	u32 lapic_flags;
91462306a36Sopenharmony_ci};
91562306a36Sopenharmony_ci
91662306a36Sopenharmony_ci/* 1: IO APIC */
91762306a36Sopenharmony_ci
91862306a36Sopenharmony_cistruct acpi_madt_io_apic {
91962306a36Sopenharmony_ci	struct acpi_subtable_header header;
92062306a36Sopenharmony_ci	u8 id;			/* I/O APIC ID */
92162306a36Sopenharmony_ci	u8 reserved;		/* reserved - must be zero */
92262306a36Sopenharmony_ci	u32 address;		/* APIC physical address */
92362306a36Sopenharmony_ci	u32 global_irq_base;	/* Global system interrupt where INTI lines start */
92462306a36Sopenharmony_ci};
92562306a36Sopenharmony_ci
92662306a36Sopenharmony_ci/* 2: Interrupt Override */
92762306a36Sopenharmony_ci
92862306a36Sopenharmony_cistruct acpi_madt_interrupt_override {
92962306a36Sopenharmony_ci	struct acpi_subtable_header header;
93062306a36Sopenharmony_ci	u8 bus;			/* 0 - ISA */
93162306a36Sopenharmony_ci	u8 source_irq;		/* Interrupt source (IRQ) */
93262306a36Sopenharmony_ci	u32 global_irq;		/* Global system interrupt */
93362306a36Sopenharmony_ci	u16 inti_flags;
93462306a36Sopenharmony_ci};
93562306a36Sopenharmony_ci
93662306a36Sopenharmony_ci/* 3: NMI Source */
93762306a36Sopenharmony_ci
93862306a36Sopenharmony_cistruct acpi_madt_nmi_source {
93962306a36Sopenharmony_ci	struct acpi_subtable_header header;
94062306a36Sopenharmony_ci	u16 inti_flags;
94162306a36Sopenharmony_ci	u32 global_irq;		/* Global system interrupt */
94262306a36Sopenharmony_ci};
94362306a36Sopenharmony_ci
94462306a36Sopenharmony_ci/* 4: Local APIC NMI */
94562306a36Sopenharmony_ci
94662306a36Sopenharmony_cistruct acpi_madt_local_apic_nmi {
94762306a36Sopenharmony_ci	struct acpi_subtable_header header;
94862306a36Sopenharmony_ci	u8 processor_id;	/* ACPI processor id */
94962306a36Sopenharmony_ci	u16 inti_flags;
95062306a36Sopenharmony_ci	u8 lint;		/* LINTn to which NMI is connected */
95162306a36Sopenharmony_ci};
95262306a36Sopenharmony_ci
95362306a36Sopenharmony_ci/* 5: Address Override */
95462306a36Sopenharmony_ci
95562306a36Sopenharmony_cistruct acpi_madt_local_apic_override {
95662306a36Sopenharmony_ci	struct acpi_subtable_header header;
95762306a36Sopenharmony_ci	u16 reserved;		/* Reserved, must be zero */
95862306a36Sopenharmony_ci	u64 address;		/* APIC physical address */
95962306a36Sopenharmony_ci};
96062306a36Sopenharmony_ci
96162306a36Sopenharmony_ci/* 6: I/O Sapic */
96262306a36Sopenharmony_ci
96362306a36Sopenharmony_cistruct acpi_madt_io_sapic {
96462306a36Sopenharmony_ci	struct acpi_subtable_header header;
96562306a36Sopenharmony_ci	u8 id;			/* I/O SAPIC ID */
96662306a36Sopenharmony_ci	u8 reserved;		/* Reserved, must be zero */
96762306a36Sopenharmony_ci	u32 global_irq_base;	/* Global interrupt for SAPIC start */
96862306a36Sopenharmony_ci	u64 address;		/* SAPIC physical address */
96962306a36Sopenharmony_ci};
97062306a36Sopenharmony_ci
97162306a36Sopenharmony_ci/* 7: Local Sapic */
97262306a36Sopenharmony_ci
97362306a36Sopenharmony_cistruct acpi_madt_local_sapic {
97462306a36Sopenharmony_ci	struct acpi_subtable_header header;
97562306a36Sopenharmony_ci	u8 processor_id;	/* ACPI processor id */
97662306a36Sopenharmony_ci	u8 id;			/* SAPIC ID */
97762306a36Sopenharmony_ci	u8 eid;			/* SAPIC EID */
97862306a36Sopenharmony_ci	u8 reserved[3];		/* Reserved, must be zero */
97962306a36Sopenharmony_ci	u32 lapic_flags;
98062306a36Sopenharmony_ci	u32 uid;		/* Numeric UID - ACPI 3.0 */
98162306a36Sopenharmony_ci	char uid_string[];	/* String UID  - ACPI 3.0 */
98262306a36Sopenharmony_ci};
98362306a36Sopenharmony_ci
98462306a36Sopenharmony_ci/* 8: Platform Interrupt Source */
98562306a36Sopenharmony_ci
98662306a36Sopenharmony_cistruct acpi_madt_interrupt_source {
98762306a36Sopenharmony_ci	struct acpi_subtable_header header;
98862306a36Sopenharmony_ci	u16 inti_flags;
98962306a36Sopenharmony_ci	u8 type;		/* 1=PMI, 2=INIT, 3=corrected */
99062306a36Sopenharmony_ci	u8 id;			/* Processor ID */
99162306a36Sopenharmony_ci	u8 eid;			/* Processor EID */
99262306a36Sopenharmony_ci	u8 io_sapic_vector;	/* Vector value for PMI interrupts */
99362306a36Sopenharmony_ci	u32 global_irq;		/* Global system interrupt */
99462306a36Sopenharmony_ci	u32 flags;		/* Interrupt Source Flags */
99562306a36Sopenharmony_ci};
99662306a36Sopenharmony_ci
99762306a36Sopenharmony_ci/* Masks for Flags field above */
99862306a36Sopenharmony_ci
99962306a36Sopenharmony_ci#define ACPI_MADT_CPEI_OVERRIDE     (1)
100062306a36Sopenharmony_ci
100162306a36Sopenharmony_ci/* 9: Processor Local X2APIC (ACPI 4.0) */
100262306a36Sopenharmony_ci
100362306a36Sopenharmony_cistruct acpi_madt_local_x2apic {
100462306a36Sopenharmony_ci	struct acpi_subtable_header header;
100562306a36Sopenharmony_ci	u16 reserved;		/* reserved - must be zero */
100662306a36Sopenharmony_ci	u32 local_apic_id;	/* Processor x2APIC ID  */
100762306a36Sopenharmony_ci	u32 lapic_flags;
100862306a36Sopenharmony_ci	u32 uid;		/* ACPI processor UID */
100962306a36Sopenharmony_ci};
101062306a36Sopenharmony_ci
101162306a36Sopenharmony_ci/* 10: Local X2APIC NMI (ACPI 4.0) */
101262306a36Sopenharmony_ci
101362306a36Sopenharmony_cistruct acpi_madt_local_x2apic_nmi {
101462306a36Sopenharmony_ci	struct acpi_subtable_header header;
101562306a36Sopenharmony_ci	u16 inti_flags;
101662306a36Sopenharmony_ci	u32 uid;		/* ACPI processor UID */
101762306a36Sopenharmony_ci	u8 lint;		/* LINTn to which NMI is connected */
101862306a36Sopenharmony_ci	u8 reserved[3];		/* reserved - must be zero */
101962306a36Sopenharmony_ci};
102062306a36Sopenharmony_ci
102162306a36Sopenharmony_ci/* 11: Generic interrupt - GICC (ACPI 5.0 + ACPI 6.0 + ACPI 6.3 + ACPI 6.5 changes) */
102262306a36Sopenharmony_ci
102362306a36Sopenharmony_cistruct acpi_madt_generic_interrupt {
102462306a36Sopenharmony_ci	struct acpi_subtable_header header;
102562306a36Sopenharmony_ci	u16 reserved;		/* reserved - must be zero */
102662306a36Sopenharmony_ci	u32 cpu_interface_number;
102762306a36Sopenharmony_ci	u32 uid;
102862306a36Sopenharmony_ci	u32 flags;
102962306a36Sopenharmony_ci	u32 parking_version;
103062306a36Sopenharmony_ci	u32 performance_interrupt;
103162306a36Sopenharmony_ci	u64 parked_address;
103262306a36Sopenharmony_ci	u64 base_address;
103362306a36Sopenharmony_ci	u64 gicv_base_address;
103462306a36Sopenharmony_ci	u64 gich_base_address;
103562306a36Sopenharmony_ci	u32 vgic_interrupt;
103662306a36Sopenharmony_ci	u64 gicr_base_address;
103762306a36Sopenharmony_ci	u64 arm_mpidr;
103862306a36Sopenharmony_ci	u8 efficiency_class;
103962306a36Sopenharmony_ci	u8 reserved2[1];
104062306a36Sopenharmony_ci	u16 spe_interrupt;	/* ACPI 6.3 */
104162306a36Sopenharmony_ci	u16 trbe_interrupt;	/* ACPI 6.5 */
104262306a36Sopenharmony_ci};
104362306a36Sopenharmony_ci
104462306a36Sopenharmony_ci/* Masks for Flags field above */
104562306a36Sopenharmony_ci
104662306a36Sopenharmony_ci/* ACPI_MADT_ENABLED                    (1)      Processor is usable if set */
104762306a36Sopenharmony_ci#define ACPI_MADT_PERFORMANCE_IRQ_MODE  (1<<1)	/* 01: Performance Interrupt Mode */
104862306a36Sopenharmony_ci#define ACPI_MADT_VGIC_IRQ_MODE         (1<<2)	/* 02: VGIC Maintenance Interrupt mode */
104962306a36Sopenharmony_ci
105062306a36Sopenharmony_ci/* 12: Generic Distributor (ACPI 5.0 + ACPI 6.0 changes) */
105162306a36Sopenharmony_ci
105262306a36Sopenharmony_cistruct acpi_madt_generic_distributor {
105362306a36Sopenharmony_ci	struct acpi_subtable_header header;
105462306a36Sopenharmony_ci	u16 reserved;		/* reserved - must be zero */
105562306a36Sopenharmony_ci	u32 gic_id;
105662306a36Sopenharmony_ci	u64 base_address;
105762306a36Sopenharmony_ci	u32 global_irq_base;
105862306a36Sopenharmony_ci	u8 version;
105962306a36Sopenharmony_ci	u8 reserved2[3];	/* reserved - must be zero */
106062306a36Sopenharmony_ci};
106162306a36Sopenharmony_ci
106262306a36Sopenharmony_ci/* Values for Version field above */
106362306a36Sopenharmony_ci
106462306a36Sopenharmony_cienum acpi_madt_gic_version {
106562306a36Sopenharmony_ci	ACPI_MADT_GIC_VERSION_NONE = 0,
106662306a36Sopenharmony_ci	ACPI_MADT_GIC_VERSION_V1 = 1,
106762306a36Sopenharmony_ci	ACPI_MADT_GIC_VERSION_V2 = 2,
106862306a36Sopenharmony_ci	ACPI_MADT_GIC_VERSION_V3 = 3,
106962306a36Sopenharmony_ci	ACPI_MADT_GIC_VERSION_V4 = 4,
107062306a36Sopenharmony_ci	ACPI_MADT_GIC_VERSION_RESERVED = 5	/* 5 and greater are reserved */
107162306a36Sopenharmony_ci};
107262306a36Sopenharmony_ci
107362306a36Sopenharmony_ci/* 13: Generic MSI Frame (ACPI 5.1) */
107462306a36Sopenharmony_ci
107562306a36Sopenharmony_cistruct acpi_madt_generic_msi_frame {
107662306a36Sopenharmony_ci	struct acpi_subtable_header header;
107762306a36Sopenharmony_ci	u16 reserved;		/* reserved - must be zero */
107862306a36Sopenharmony_ci	u32 msi_frame_id;
107962306a36Sopenharmony_ci	u64 base_address;
108062306a36Sopenharmony_ci	u32 flags;
108162306a36Sopenharmony_ci	u16 spi_count;
108262306a36Sopenharmony_ci	u16 spi_base;
108362306a36Sopenharmony_ci};
108462306a36Sopenharmony_ci
108562306a36Sopenharmony_ci/* Masks for Flags field above */
108662306a36Sopenharmony_ci
108762306a36Sopenharmony_ci#define ACPI_MADT_OVERRIDE_SPI_VALUES   (1)
108862306a36Sopenharmony_ci
108962306a36Sopenharmony_ci/* 14: Generic Redistributor (ACPI 5.1) */
109062306a36Sopenharmony_ci
109162306a36Sopenharmony_cistruct acpi_madt_generic_redistributor {
109262306a36Sopenharmony_ci	struct acpi_subtable_header header;
109362306a36Sopenharmony_ci	u16 reserved;		/* reserved - must be zero */
109462306a36Sopenharmony_ci	u64 base_address;
109562306a36Sopenharmony_ci	u32 length;
109662306a36Sopenharmony_ci};
109762306a36Sopenharmony_ci
109862306a36Sopenharmony_ci/* 15: Generic Translator (ACPI 6.0) */
109962306a36Sopenharmony_ci
110062306a36Sopenharmony_cistruct acpi_madt_generic_translator {
110162306a36Sopenharmony_ci	struct acpi_subtable_header header;
110262306a36Sopenharmony_ci	u16 reserved;		/* reserved - must be zero */
110362306a36Sopenharmony_ci	u32 translation_id;
110462306a36Sopenharmony_ci	u64 base_address;
110562306a36Sopenharmony_ci	u32 reserved2;
110662306a36Sopenharmony_ci};
110762306a36Sopenharmony_ci
110862306a36Sopenharmony_ci/* 16: Multiprocessor wakeup (ACPI 6.4) */
110962306a36Sopenharmony_ci
111062306a36Sopenharmony_cistruct acpi_madt_multiproc_wakeup {
111162306a36Sopenharmony_ci	struct acpi_subtable_header header;
111262306a36Sopenharmony_ci	u16 mailbox_version;
111362306a36Sopenharmony_ci	u32 reserved;		/* reserved - must be zero */
111462306a36Sopenharmony_ci	u64 base_address;
111562306a36Sopenharmony_ci};
111662306a36Sopenharmony_ci
111762306a36Sopenharmony_ci#define ACPI_MULTIPROC_WAKEUP_MB_OS_SIZE        2032
111862306a36Sopenharmony_ci#define ACPI_MULTIPROC_WAKEUP_MB_FIRMWARE_SIZE  2048
111962306a36Sopenharmony_ci
112062306a36Sopenharmony_cistruct acpi_madt_multiproc_wakeup_mailbox {
112162306a36Sopenharmony_ci	u16 command;
112262306a36Sopenharmony_ci	u16 reserved;		/* reserved - must be zero */
112362306a36Sopenharmony_ci	u32 apic_id;
112462306a36Sopenharmony_ci	u64 wakeup_vector;
112562306a36Sopenharmony_ci	u8 reserved_os[ACPI_MULTIPROC_WAKEUP_MB_OS_SIZE];	/* reserved for OS use */
112662306a36Sopenharmony_ci	u8 reserved_firmware[ACPI_MULTIPROC_WAKEUP_MB_FIRMWARE_SIZE];	/* reserved for firmware use */
112762306a36Sopenharmony_ci};
112862306a36Sopenharmony_ci
112962306a36Sopenharmony_ci#define ACPI_MP_WAKE_COMMAND_WAKEUP    1
113062306a36Sopenharmony_ci
113162306a36Sopenharmony_ci/* 17: CPU Core Interrupt Controller (ACPI 6.5) */
113262306a36Sopenharmony_ci
113362306a36Sopenharmony_cistruct acpi_madt_core_pic {
113462306a36Sopenharmony_ci	struct acpi_subtable_header header;
113562306a36Sopenharmony_ci	u8 version;
113662306a36Sopenharmony_ci	u32 processor_id;
113762306a36Sopenharmony_ci	u32 core_id;
113862306a36Sopenharmony_ci	u32 flags;
113962306a36Sopenharmony_ci};
114062306a36Sopenharmony_ci
114162306a36Sopenharmony_ci/* Values for Version field above */
114262306a36Sopenharmony_ci
114362306a36Sopenharmony_cienum acpi_madt_core_pic_version {
114462306a36Sopenharmony_ci	ACPI_MADT_CORE_PIC_VERSION_NONE = 0,
114562306a36Sopenharmony_ci	ACPI_MADT_CORE_PIC_VERSION_V1 = 1,
114662306a36Sopenharmony_ci	ACPI_MADT_CORE_PIC_VERSION_RESERVED = 2	/* 2 and greater are reserved */
114762306a36Sopenharmony_ci};
114862306a36Sopenharmony_ci
114962306a36Sopenharmony_ci/* 18: Legacy I/O Interrupt Controller (ACPI 6.5) */
115062306a36Sopenharmony_ci
115162306a36Sopenharmony_cistruct acpi_madt_lio_pic {
115262306a36Sopenharmony_ci	struct acpi_subtable_header header;
115362306a36Sopenharmony_ci	u8 version;
115462306a36Sopenharmony_ci	u64 address;
115562306a36Sopenharmony_ci	u16 size;
115662306a36Sopenharmony_ci	u8 cascade[2];
115762306a36Sopenharmony_ci	u32 cascade_map[2];
115862306a36Sopenharmony_ci};
115962306a36Sopenharmony_ci
116062306a36Sopenharmony_ci/* Values for Version field above */
116162306a36Sopenharmony_ci
116262306a36Sopenharmony_cienum acpi_madt_lio_pic_version {
116362306a36Sopenharmony_ci	ACPI_MADT_LIO_PIC_VERSION_NONE = 0,
116462306a36Sopenharmony_ci	ACPI_MADT_LIO_PIC_VERSION_V1 = 1,
116562306a36Sopenharmony_ci	ACPI_MADT_LIO_PIC_VERSION_RESERVED = 2	/* 2 and greater are reserved */
116662306a36Sopenharmony_ci};
116762306a36Sopenharmony_ci
116862306a36Sopenharmony_ci/* 19: HT Interrupt Controller (ACPI 6.5) */
116962306a36Sopenharmony_ci
117062306a36Sopenharmony_cistruct acpi_madt_ht_pic {
117162306a36Sopenharmony_ci	struct acpi_subtable_header header;
117262306a36Sopenharmony_ci	u8 version;
117362306a36Sopenharmony_ci	u64 address;
117462306a36Sopenharmony_ci	u16 size;
117562306a36Sopenharmony_ci	u8 cascade[8];
117662306a36Sopenharmony_ci};
117762306a36Sopenharmony_ci
117862306a36Sopenharmony_ci/* Values for Version field above */
117962306a36Sopenharmony_ci
118062306a36Sopenharmony_cienum acpi_madt_ht_pic_version {
118162306a36Sopenharmony_ci	ACPI_MADT_HT_PIC_VERSION_NONE = 0,
118262306a36Sopenharmony_ci	ACPI_MADT_HT_PIC_VERSION_V1 = 1,
118362306a36Sopenharmony_ci	ACPI_MADT_HT_PIC_VERSION_RESERVED = 2	/* 2 and greater are reserved */
118462306a36Sopenharmony_ci};
118562306a36Sopenharmony_ci
118662306a36Sopenharmony_ci/* 20: Extend I/O Interrupt Controller (ACPI 6.5) */
118762306a36Sopenharmony_ci
118862306a36Sopenharmony_cistruct acpi_madt_eio_pic {
118962306a36Sopenharmony_ci	struct acpi_subtable_header header;
119062306a36Sopenharmony_ci	u8 version;
119162306a36Sopenharmony_ci	u8 cascade;
119262306a36Sopenharmony_ci	u8 node;
119362306a36Sopenharmony_ci	u64 node_map;
119462306a36Sopenharmony_ci};
119562306a36Sopenharmony_ci
119662306a36Sopenharmony_ci/* Values for Version field above */
119762306a36Sopenharmony_ci
119862306a36Sopenharmony_cienum acpi_madt_eio_pic_version {
119962306a36Sopenharmony_ci	ACPI_MADT_EIO_PIC_VERSION_NONE = 0,
120062306a36Sopenharmony_ci	ACPI_MADT_EIO_PIC_VERSION_V1 = 1,
120162306a36Sopenharmony_ci	ACPI_MADT_EIO_PIC_VERSION_RESERVED = 2	/* 2 and greater are reserved */
120262306a36Sopenharmony_ci};
120362306a36Sopenharmony_ci
120462306a36Sopenharmony_ci/* 21: MSI Interrupt Controller (ACPI 6.5) */
120562306a36Sopenharmony_ci
120662306a36Sopenharmony_cistruct acpi_madt_msi_pic {
120762306a36Sopenharmony_ci	struct acpi_subtable_header header;
120862306a36Sopenharmony_ci	u8 version;
120962306a36Sopenharmony_ci	u64 msg_address;
121062306a36Sopenharmony_ci	u32 start;
121162306a36Sopenharmony_ci	u32 count;
121262306a36Sopenharmony_ci};
121362306a36Sopenharmony_ci
121462306a36Sopenharmony_ci/* Values for Version field above */
121562306a36Sopenharmony_ci
121662306a36Sopenharmony_cienum acpi_madt_msi_pic_version {
121762306a36Sopenharmony_ci	ACPI_MADT_MSI_PIC_VERSION_NONE = 0,
121862306a36Sopenharmony_ci	ACPI_MADT_MSI_PIC_VERSION_V1 = 1,
121962306a36Sopenharmony_ci	ACPI_MADT_MSI_PIC_VERSION_RESERVED = 2	/* 2 and greater are reserved */
122062306a36Sopenharmony_ci};
122162306a36Sopenharmony_ci
122262306a36Sopenharmony_ci/* 22: Bridge I/O Interrupt Controller (ACPI 6.5) */
122362306a36Sopenharmony_ci
122462306a36Sopenharmony_cistruct acpi_madt_bio_pic {
122562306a36Sopenharmony_ci	struct acpi_subtable_header header;
122662306a36Sopenharmony_ci	u8 version;
122762306a36Sopenharmony_ci	u64 address;
122862306a36Sopenharmony_ci	u16 size;
122962306a36Sopenharmony_ci	u16 id;
123062306a36Sopenharmony_ci	u16 gsi_base;
123162306a36Sopenharmony_ci};
123262306a36Sopenharmony_ci
123362306a36Sopenharmony_ci/* Values for Version field above */
123462306a36Sopenharmony_ci
123562306a36Sopenharmony_cienum acpi_madt_bio_pic_version {
123662306a36Sopenharmony_ci	ACPI_MADT_BIO_PIC_VERSION_NONE = 0,
123762306a36Sopenharmony_ci	ACPI_MADT_BIO_PIC_VERSION_V1 = 1,
123862306a36Sopenharmony_ci	ACPI_MADT_BIO_PIC_VERSION_RESERVED = 2	/* 2 and greater are reserved */
123962306a36Sopenharmony_ci};
124062306a36Sopenharmony_ci
124162306a36Sopenharmony_ci/* 23: LPC Interrupt Controller (ACPI 6.5) */
124262306a36Sopenharmony_ci
124362306a36Sopenharmony_cistruct acpi_madt_lpc_pic {
124462306a36Sopenharmony_ci	struct acpi_subtable_header header;
124562306a36Sopenharmony_ci	u8 version;
124662306a36Sopenharmony_ci	u64 address;
124762306a36Sopenharmony_ci	u16 size;
124862306a36Sopenharmony_ci	u8 cascade;
124962306a36Sopenharmony_ci};
125062306a36Sopenharmony_ci
125162306a36Sopenharmony_ci/* Values for Version field above */
125262306a36Sopenharmony_ci
125362306a36Sopenharmony_cienum acpi_madt_lpc_pic_version {
125462306a36Sopenharmony_ci	ACPI_MADT_LPC_PIC_VERSION_NONE = 0,
125562306a36Sopenharmony_ci	ACPI_MADT_LPC_PIC_VERSION_V1 = 1,
125662306a36Sopenharmony_ci	ACPI_MADT_LPC_PIC_VERSION_RESERVED = 2	/* 2 and greater are reserved */
125762306a36Sopenharmony_ci};
125862306a36Sopenharmony_ci
125962306a36Sopenharmony_ci/* 24: RISC-V INTC */
126062306a36Sopenharmony_cistruct acpi_madt_rintc {
126162306a36Sopenharmony_ci	struct acpi_subtable_header header;
126262306a36Sopenharmony_ci	u8 version;
126362306a36Sopenharmony_ci	u8 reserved;
126462306a36Sopenharmony_ci	u32 flags;
126562306a36Sopenharmony_ci	u64 hart_id;
126662306a36Sopenharmony_ci	u32 uid;		/* ACPI processor UID */
126762306a36Sopenharmony_ci	u32 ext_intc_id;	/* External INTC Id */
126862306a36Sopenharmony_ci	u64 imsic_addr;		/* IMSIC base address */
126962306a36Sopenharmony_ci	u32 imsic_size;		/* IMSIC size */
127062306a36Sopenharmony_ci};
127162306a36Sopenharmony_ci
127262306a36Sopenharmony_ci/* Values for RISC-V INTC Version field above */
127362306a36Sopenharmony_ci
127462306a36Sopenharmony_cienum acpi_madt_rintc_version {
127562306a36Sopenharmony_ci	ACPI_MADT_RINTC_VERSION_NONE = 0,
127662306a36Sopenharmony_ci	ACPI_MADT_RINTC_VERSION_V1 = 1,
127762306a36Sopenharmony_ci	ACPI_MADT_RINTC_VERSION_RESERVED = 2	/* 2 and greater are reserved */
127862306a36Sopenharmony_ci};
127962306a36Sopenharmony_ci
128062306a36Sopenharmony_ci/* 25: RISC-V IMSIC */
128162306a36Sopenharmony_cistruct acpi_madt_imsic {
128262306a36Sopenharmony_ci	struct acpi_subtable_header header;
128362306a36Sopenharmony_ci	u8 version;
128462306a36Sopenharmony_ci	u8 reserved;
128562306a36Sopenharmony_ci	u32 flags;
128662306a36Sopenharmony_ci	u16 num_ids;
128762306a36Sopenharmony_ci	u16 num_guest_ids;
128862306a36Sopenharmony_ci	u8 guest_index_bits;
128962306a36Sopenharmony_ci	u8 hart_index_bits;
129062306a36Sopenharmony_ci	u8 group_index_bits;
129162306a36Sopenharmony_ci	u8 group_index_shift;
129262306a36Sopenharmony_ci};
129362306a36Sopenharmony_ci
129462306a36Sopenharmony_ci/* 26: RISC-V APLIC */
129562306a36Sopenharmony_cistruct acpi_madt_aplic {
129662306a36Sopenharmony_ci	struct acpi_subtable_header header;
129762306a36Sopenharmony_ci	u8 version;
129862306a36Sopenharmony_ci	u8 id;
129962306a36Sopenharmony_ci	u32 flags;
130062306a36Sopenharmony_ci	u8 hw_id[8];
130162306a36Sopenharmony_ci	u16 num_idcs;
130262306a36Sopenharmony_ci	u16 num_sources;
130362306a36Sopenharmony_ci	u32 gsi_base;
130462306a36Sopenharmony_ci	u64 base_addr;
130562306a36Sopenharmony_ci	u32 size;
130662306a36Sopenharmony_ci};
130762306a36Sopenharmony_ci
130862306a36Sopenharmony_ci/* 27: RISC-V PLIC */
130962306a36Sopenharmony_cistruct acpi_madt_plic {
131062306a36Sopenharmony_ci	struct acpi_subtable_header header;
131162306a36Sopenharmony_ci	u8 version;
131262306a36Sopenharmony_ci	u8 id;
131362306a36Sopenharmony_ci	u8 hw_id[8];
131462306a36Sopenharmony_ci	u16 num_irqs;
131562306a36Sopenharmony_ci	u16 max_prio;
131662306a36Sopenharmony_ci	u32 flags;
131762306a36Sopenharmony_ci	u32 size;
131862306a36Sopenharmony_ci	u64 base_addr;
131962306a36Sopenharmony_ci	u32 gsi_base;
132062306a36Sopenharmony_ci};
132162306a36Sopenharmony_ci
132262306a36Sopenharmony_ci/* 80: OEM data */
132362306a36Sopenharmony_ci
132462306a36Sopenharmony_cistruct acpi_madt_oem_data {
132562306a36Sopenharmony_ci	ACPI_FLEX_ARRAY(u8, oem_data);
132662306a36Sopenharmony_ci};
132762306a36Sopenharmony_ci
132862306a36Sopenharmony_ci/*
132962306a36Sopenharmony_ci * Common flags fields for MADT subtables
133062306a36Sopenharmony_ci */
133162306a36Sopenharmony_ci
133262306a36Sopenharmony_ci/* MADT Local APIC flags */
133362306a36Sopenharmony_ci
133462306a36Sopenharmony_ci#define ACPI_MADT_ENABLED           (1)	/* 00: Processor is usable if set */
133562306a36Sopenharmony_ci#define ACPI_MADT_ONLINE_CAPABLE    (2)	/* 01: System HW supports enabling processor at runtime */
133662306a36Sopenharmony_ci
133762306a36Sopenharmony_ci/* MADT MPS INTI flags (inti_flags) */
133862306a36Sopenharmony_ci
133962306a36Sopenharmony_ci#define ACPI_MADT_POLARITY_MASK     (3)	/* 00-01: Polarity of APIC I/O input signals */
134062306a36Sopenharmony_ci#define ACPI_MADT_TRIGGER_MASK      (3<<2)	/* 02-03: Trigger mode of APIC input signals */
134162306a36Sopenharmony_ci
134262306a36Sopenharmony_ci/* Values for MPS INTI flags */
134362306a36Sopenharmony_ci
134462306a36Sopenharmony_ci#define ACPI_MADT_POLARITY_CONFORMS       0
134562306a36Sopenharmony_ci#define ACPI_MADT_POLARITY_ACTIVE_HIGH    1
134662306a36Sopenharmony_ci#define ACPI_MADT_POLARITY_RESERVED       2
134762306a36Sopenharmony_ci#define ACPI_MADT_POLARITY_ACTIVE_LOW     3
134862306a36Sopenharmony_ci
134962306a36Sopenharmony_ci#define ACPI_MADT_TRIGGER_CONFORMS        (0)
135062306a36Sopenharmony_ci#define ACPI_MADT_TRIGGER_EDGE            (1<<2)
135162306a36Sopenharmony_ci#define ACPI_MADT_TRIGGER_RESERVED        (2<<2)
135262306a36Sopenharmony_ci#define ACPI_MADT_TRIGGER_LEVEL           (3<<2)
135362306a36Sopenharmony_ci
135462306a36Sopenharmony_ci/*******************************************************************************
135562306a36Sopenharmony_ci *
135662306a36Sopenharmony_ci * MCFG - PCI Memory Mapped Configuration table and subtable
135762306a36Sopenharmony_ci *        Version 1
135862306a36Sopenharmony_ci *
135962306a36Sopenharmony_ci * Conforms to "PCI Firmware Specification", Revision 3.0, June 20, 2005
136062306a36Sopenharmony_ci *
136162306a36Sopenharmony_ci ******************************************************************************/
136262306a36Sopenharmony_ci
136362306a36Sopenharmony_cistruct acpi_table_mcfg {
136462306a36Sopenharmony_ci	struct acpi_table_header header;	/* Common ACPI table header */
136562306a36Sopenharmony_ci	u8 reserved[8];
136662306a36Sopenharmony_ci};
136762306a36Sopenharmony_ci
136862306a36Sopenharmony_ci/* Subtable */
136962306a36Sopenharmony_ci
137062306a36Sopenharmony_cistruct acpi_mcfg_allocation {
137162306a36Sopenharmony_ci	u64 address;		/* Base address, processor-relative */
137262306a36Sopenharmony_ci	u16 pci_segment;	/* PCI segment group number */
137362306a36Sopenharmony_ci	u8 start_bus_number;	/* Starting PCI Bus number */
137462306a36Sopenharmony_ci	u8 end_bus_number;	/* Final PCI Bus number */
137562306a36Sopenharmony_ci	u32 reserved;
137662306a36Sopenharmony_ci};
137762306a36Sopenharmony_ci
137862306a36Sopenharmony_ci/*******************************************************************************
137962306a36Sopenharmony_ci *
138062306a36Sopenharmony_ci * MCHI - Management Controller Host Interface Table
138162306a36Sopenharmony_ci *        Version 1
138262306a36Sopenharmony_ci *
138362306a36Sopenharmony_ci * Conforms to "Management Component Transport Protocol (MCTP) Host
138462306a36Sopenharmony_ci * Interface Specification", Revision 1.0.0a, October 13, 2009
138562306a36Sopenharmony_ci *
138662306a36Sopenharmony_ci ******************************************************************************/
138762306a36Sopenharmony_ci
138862306a36Sopenharmony_cistruct acpi_table_mchi {
138962306a36Sopenharmony_ci	struct acpi_table_header header;	/* Common ACPI table header */
139062306a36Sopenharmony_ci	u8 interface_type;
139162306a36Sopenharmony_ci	u8 protocol;
139262306a36Sopenharmony_ci	u64 protocol_data;
139362306a36Sopenharmony_ci	u8 interrupt_type;
139462306a36Sopenharmony_ci	u8 gpe;
139562306a36Sopenharmony_ci	u8 pci_device_flag;
139662306a36Sopenharmony_ci	u32 global_interrupt;
139762306a36Sopenharmony_ci	struct acpi_generic_address control_register;
139862306a36Sopenharmony_ci	u8 pci_segment;
139962306a36Sopenharmony_ci	u8 pci_bus;
140062306a36Sopenharmony_ci	u8 pci_device;
140162306a36Sopenharmony_ci	u8 pci_function;
140262306a36Sopenharmony_ci};
140362306a36Sopenharmony_ci
140462306a36Sopenharmony_ci/*******************************************************************************
140562306a36Sopenharmony_ci *
140662306a36Sopenharmony_ci * MPAM - Memory System Resource Partitioning and Monitoring
140762306a36Sopenharmony_ci *
140862306a36Sopenharmony_ci * Conforms to "ACPI for Memory System Resource Partitioning and Monitoring 2.0"
140962306a36Sopenharmony_ci * Document number: ARM DEN 0065, December, 2022.
141062306a36Sopenharmony_ci *
141162306a36Sopenharmony_ci ******************************************************************************/
141262306a36Sopenharmony_ci
141362306a36Sopenharmony_ci/* MPAM RIS locator types. Table 11, Location types */
141462306a36Sopenharmony_cienum acpi_mpam_locator_type {
141562306a36Sopenharmony_ci	ACPI_MPAM_LOCATION_TYPE_PROCESSOR_CACHE = 0,
141662306a36Sopenharmony_ci	ACPI_MPAM_LOCATION_TYPE_MEMORY = 1,
141762306a36Sopenharmony_ci	ACPI_MPAM_LOCATION_TYPE_SMMU = 2,
141862306a36Sopenharmony_ci	ACPI_MPAM_LOCATION_TYPE_MEMORY_CACHE = 3,
141962306a36Sopenharmony_ci	ACPI_MPAM_LOCATION_TYPE_ACPI_DEVICE = 4,
142062306a36Sopenharmony_ci	ACPI_MPAM_LOCATION_TYPE_INTERCONNECT = 5,
142162306a36Sopenharmony_ci	ACPI_MPAM_LOCATION_TYPE_UNKNOWN = 0xFF
142262306a36Sopenharmony_ci};
142362306a36Sopenharmony_ci
142462306a36Sopenharmony_ci/* MPAM Functional dependency descriptor. Table 10 */
142562306a36Sopenharmony_cistruct acpi_mpam_func_deps {
142662306a36Sopenharmony_ci	u32 producer;
142762306a36Sopenharmony_ci	u32 reserved;
142862306a36Sopenharmony_ci};
142962306a36Sopenharmony_ci
143062306a36Sopenharmony_ci/* MPAM Processor cache locator descriptor. Table 13 */
143162306a36Sopenharmony_cistruct acpi_mpam_resource_cache_locator {
143262306a36Sopenharmony_ci	u64 cache_reference;
143362306a36Sopenharmony_ci	u32 reserved;
143462306a36Sopenharmony_ci};
143562306a36Sopenharmony_ci
143662306a36Sopenharmony_ci/* MPAM Memory locator descriptor. Table 14 */
143762306a36Sopenharmony_cistruct acpi_mpam_resource_memory_locator {
143862306a36Sopenharmony_ci	u64 proximity_domain;
143962306a36Sopenharmony_ci	u32 reserved;
144062306a36Sopenharmony_ci};
144162306a36Sopenharmony_ci
144262306a36Sopenharmony_ci/* MPAM SMMU locator descriptor. Table 15 */
144362306a36Sopenharmony_cistruct acpi_mpam_resource_smmu_locator {
144462306a36Sopenharmony_ci	u64 smmu_interface;
144562306a36Sopenharmony_ci	u32 reserved;
144662306a36Sopenharmony_ci};
144762306a36Sopenharmony_ci
144862306a36Sopenharmony_ci/* MPAM Memory-side cache locator descriptor. Table 16 */
144962306a36Sopenharmony_cistruct acpi_mpam_resource_memcache_locator {
145062306a36Sopenharmony_ci	u8 reserved[7];
145162306a36Sopenharmony_ci	u8 level;
145262306a36Sopenharmony_ci	u32 reference;
145362306a36Sopenharmony_ci};
145462306a36Sopenharmony_ci
145562306a36Sopenharmony_ci/* MPAM ACPI device locator descriptor. Table 17 */
145662306a36Sopenharmony_cistruct acpi_mpam_resource_acpi_locator {
145762306a36Sopenharmony_ci	u64 acpi_hw_id;
145862306a36Sopenharmony_ci	u32 acpi_unique_id;
145962306a36Sopenharmony_ci};
146062306a36Sopenharmony_ci
146162306a36Sopenharmony_ci/* MPAM Interconnect locator descriptor. Table 18 */
146262306a36Sopenharmony_cistruct acpi_mpam_resource_interconnect_locator {
146362306a36Sopenharmony_ci	u64 inter_connect_desc_tbl_off;
146462306a36Sopenharmony_ci	u32 reserved;
146562306a36Sopenharmony_ci};
146662306a36Sopenharmony_ci
146762306a36Sopenharmony_ci/* MPAM Locator structure. Table 12 */
146862306a36Sopenharmony_cistruct acpi_mpam_resource_generic_locator {
146962306a36Sopenharmony_ci	u64 descriptor1;
147062306a36Sopenharmony_ci	u32 descriptor2;
147162306a36Sopenharmony_ci};
147262306a36Sopenharmony_ci
147362306a36Sopenharmony_ciunion acpi_mpam_resource_locator {
147462306a36Sopenharmony_ci	struct acpi_mpam_resource_cache_locator cache_locator;
147562306a36Sopenharmony_ci	struct acpi_mpam_resource_memory_locator memory_locator;
147662306a36Sopenharmony_ci	struct acpi_mpam_resource_smmu_locator smmu_locator;
147762306a36Sopenharmony_ci	struct acpi_mpam_resource_memcache_locator mem_cache_locator;
147862306a36Sopenharmony_ci	struct acpi_mpam_resource_acpi_locator acpi_locator;
147962306a36Sopenharmony_ci	struct acpi_mpam_resource_interconnect_locator interconnect_ifc_locator;
148062306a36Sopenharmony_ci	struct acpi_mpam_resource_generic_locator generic_locator;
148162306a36Sopenharmony_ci};
148262306a36Sopenharmony_ci
148362306a36Sopenharmony_ci/* Memory System Component Resource Node Structure Table 9 */
148462306a36Sopenharmony_cistruct acpi_mpam_resource_node {
148562306a36Sopenharmony_ci	u32 identifier;
148662306a36Sopenharmony_ci	u8 ris_index;
148762306a36Sopenharmony_ci	u16 reserved1;
148862306a36Sopenharmony_ci	u8 locator_type;
148962306a36Sopenharmony_ci	union acpi_mpam_resource_locator locator;
149062306a36Sopenharmony_ci	u32 num_functional_deps;
149162306a36Sopenharmony_ci};
149262306a36Sopenharmony_ci
149362306a36Sopenharmony_ci/* Memory System Component (MSC) Node Structure. Table 4 */
149462306a36Sopenharmony_cistruct acpi_mpam_msc_node {
149562306a36Sopenharmony_ci	u16 length;
149662306a36Sopenharmony_ci	u8 interface_type;
149762306a36Sopenharmony_ci	u8 reserved;
149862306a36Sopenharmony_ci	u32 identifier;
149962306a36Sopenharmony_ci	u64 base_address;
150062306a36Sopenharmony_ci	u32 mmio_size;
150162306a36Sopenharmony_ci	u32 overflow_interrupt;
150262306a36Sopenharmony_ci	u32 overflow_interrupt_flags;
150362306a36Sopenharmony_ci	u32 reserved1;
150462306a36Sopenharmony_ci	u32 overflow_interrupt_affinity;
150562306a36Sopenharmony_ci	u32 error_interrupt;
150662306a36Sopenharmony_ci	u32 error_interrupt_flags;
150762306a36Sopenharmony_ci	u32 reserved2;
150862306a36Sopenharmony_ci	u32 error_interrupt_affinity;
150962306a36Sopenharmony_ci	u32 max_nrdy_usec;
151062306a36Sopenharmony_ci	u64 hardware_id_linked_device;
151162306a36Sopenharmony_ci	u32 instance_id_linked_device;
151262306a36Sopenharmony_ci	u32 num_resouce_nodes;
151362306a36Sopenharmony_ci};
151462306a36Sopenharmony_ci
151562306a36Sopenharmony_cistruct acpi_table_mpam {
151662306a36Sopenharmony_ci	struct acpi_table_header header;	/* Common ACPI table header */
151762306a36Sopenharmony_ci};
151862306a36Sopenharmony_ci
151962306a36Sopenharmony_ci/*******************************************************************************
152062306a36Sopenharmony_ci *
152162306a36Sopenharmony_ci * MPST - Memory Power State Table (ACPI 5.0)
152262306a36Sopenharmony_ci *        Version 1
152362306a36Sopenharmony_ci *
152462306a36Sopenharmony_ci ******************************************************************************/
152562306a36Sopenharmony_ci
152662306a36Sopenharmony_ci#define ACPI_MPST_CHANNEL_INFO \
152762306a36Sopenharmony_ci	u8                              channel_id; \
152862306a36Sopenharmony_ci	u8                              reserved1[3]; \
152962306a36Sopenharmony_ci	u16                             power_node_count; \
153062306a36Sopenharmony_ci	u16                             reserved2;
153162306a36Sopenharmony_ci
153262306a36Sopenharmony_ci/* Main table */
153362306a36Sopenharmony_ci
153462306a36Sopenharmony_cistruct acpi_table_mpst {
153562306a36Sopenharmony_ci	struct acpi_table_header header;	/* Common ACPI table header */
153662306a36Sopenharmony_ci	 ACPI_MPST_CHANNEL_INFO	/* Platform Communication Channel */
153762306a36Sopenharmony_ci};
153862306a36Sopenharmony_ci
153962306a36Sopenharmony_ci/* Memory Platform Communication Channel Info */
154062306a36Sopenharmony_ci
154162306a36Sopenharmony_cistruct acpi_mpst_channel {
154262306a36Sopenharmony_ci	ACPI_MPST_CHANNEL_INFO	/* Platform Communication Channel */
154362306a36Sopenharmony_ci};
154462306a36Sopenharmony_ci
154562306a36Sopenharmony_ci/* Memory Power Node Structure */
154662306a36Sopenharmony_ci
154762306a36Sopenharmony_cistruct acpi_mpst_power_node {
154862306a36Sopenharmony_ci	u8 flags;
154962306a36Sopenharmony_ci	u8 reserved1;
155062306a36Sopenharmony_ci	u16 node_id;
155162306a36Sopenharmony_ci	u32 length;
155262306a36Sopenharmony_ci	u64 range_address;
155362306a36Sopenharmony_ci	u64 range_length;
155462306a36Sopenharmony_ci	u32 num_power_states;
155562306a36Sopenharmony_ci	u32 num_physical_components;
155662306a36Sopenharmony_ci};
155762306a36Sopenharmony_ci
155862306a36Sopenharmony_ci/* Values for Flags field above */
155962306a36Sopenharmony_ci
156062306a36Sopenharmony_ci#define ACPI_MPST_ENABLED               1
156162306a36Sopenharmony_ci#define ACPI_MPST_POWER_MANAGED         2
156262306a36Sopenharmony_ci#define ACPI_MPST_HOT_PLUG_CAPABLE      4
156362306a36Sopenharmony_ci
156462306a36Sopenharmony_ci/* Memory Power State Structure (follows POWER_NODE above) */
156562306a36Sopenharmony_ci
156662306a36Sopenharmony_cistruct acpi_mpst_power_state {
156762306a36Sopenharmony_ci	u8 power_state;
156862306a36Sopenharmony_ci	u8 info_index;
156962306a36Sopenharmony_ci};
157062306a36Sopenharmony_ci
157162306a36Sopenharmony_ci/* Physical Component ID Structure (follows POWER_STATE above) */
157262306a36Sopenharmony_ci
157362306a36Sopenharmony_cistruct acpi_mpst_component {
157462306a36Sopenharmony_ci	u16 component_id;
157562306a36Sopenharmony_ci};
157662306a36Sopenharmony_ci
157762306a36Sopenharmony_ci/* Memory Power State Characteristics Structure (follows all POWER_NODEs) */
157862306a36Sopenharmony_ci
157962306a36Sopenharmony_cistruct acpi_mpst_data_hdr {
158062306a36Sopenharmony_ci	u16 characteristics_count;
158162306a36Sopenharmony_ci	u16 reserved;
158262306a36Sopenharmony_ci};
158362306a36Sopenharmony_ci
158462306a36Sopenharmony_cistruct acpi_mpst_power_data {
158562306a36Sopenharmony_ci	u8 structure_id;
158662306a36Sopenharmony_ci	u8 flags;
158762306a36Sopenharmony_ci	u16 reserved1;
158862306a36Sopenharmony_ci	u32 average_power;
158962306a36Sopenharmony_ci	u32 power_saving;
159062306a36Sopenharmony_ci	u64 exit_latency;
159162306a36Sopenharmony_ci	u64 reserved2;
159262306a36Sopenharmony_ci};
159362306a36Sopenharmony_ci
159462306a36Sopenharmony_ci/* Values for Flags field above */
159562306a36Sopenharmony_ci
159662306a36Sopenharmony_ci#define ACPI_MPST_PRESERVE              1
159762306a36Sopenharmony_ci#define ACPI_MPST_AUTOENTRY             2
159862306a36Sopenharmony_ci#define ACPI_MPST_AUTOEXIT              4
159962306a36Sopenharmony_ci
160062306a36Sopenharmony_ci/* Shared Memory Region (not part of an ACPI table) */
160162306a36Sopenharmony_ci
160262306a36Sopenharmony_cistruct acpi_mpst_shared {
160362306a36Sopenharmony_ci	u32 signature;
160462306a36Sopenharmony_ci	u16 pcc_command;
160562306a36Sopenharmony_ci	u16 pcc_status;
160662306a36Sopenharmony_ci	u32 command_register;
160762306a36Sopenharmony_ci	u32 status_register;
160862306a36Sopenharmony_ci	u32 power_state_id;
160962306a36Sopenharmony_ci	u32 power_node_id;
161062306a36Sopenharmony_ci	u64 energy_consumed;
161162306a36Sopenharmony_ci	u64 average_power;
161262306a36Sopenharmony_ci};
161362306a36Sopenharmony_ci
161462306a36Sopenharmony_ci/*******************************************************************************
161562306a36Sopenharmony_ci *
161662306a36Sopenharmony_ci * MSCT - Maximum System Characteristics Table (ACPI 4.0)
161762306a36Sopenharmony_ci *        Version 1
161862306a36Sopenharmony_ci *
161962306a36Sopenharmony_ci ******************************************************************************/
162062306a36Sopenharmony_ci
162162306a36Sopenharmony_cistruct acpi_table_msct {
162262306a36Sopenharmony_ci	struct acpi_table_header header;	/* Common ACPI table header */
162362306a36Sopenharmony_ci	u32 proximity_offset;	/* Location of proximity info struct(s) */
162462306a36Sopenharmony_ci	u32 max_proximity_domains;	/* Max number of proximity domains */
162562306a36Sopenharmony_ci	u32 max_clock_domains;	/* Max number of clock domains */
162662306a36Sopenharmony_ci	u64 max_address;	/* Max physical address in system */
162762306a36Sopenharmony_ci};
162862306a36Sopenharmony_ci
162962306a36Sopenharmony_ci/* subtable - Maximum Proximity Domain Information. Version 1 */
163062306a36Sopenharmony_ci
163162306a36Sopenharmony_cistruct acpi_msct_proximity {
163262306a36Sopenharmony_ci	u8 revision;
163362306a36Sopenharmony_ci	u8 length;
163462306a36Sopenharmony_ci	u32 range_start;	/* Start of domain range */
163562306a36Sopenharmony_ci	u32 range_end;		/* End of domain range */
163662306a36Sopenharmony_ci	u32 processor_capacity;
163762306a36Sopenharmony_ci	u64 memory_capacity;	/* In bytes */
163862306a36Sopenharmony_ci};
163962306a36Sopenharmony_ci
164062306a36Sopenharmony_ci/*******************************************************************************
164162306a36Sopenharmony_ci *
164262306a36Sopenharmony_ci * MSDM - Microsoft Data Management table
164362306a36Sopenharmony_ci *
164462306a36Sopenharmony_ci * Conforms to "Microsoft Software Licensing Tables (SLIC and MSDM)",
164562306a36Sopenharmony_ci * November 29, 2011. Copyright 2011 Microsoft
164662306a36Sopenharmony_ci *
164762306a36Sopenharmony_ci ******************************************************************************/
164862306a36Sopenharmony_ci
164962306a36Sopenharmony_ci/* Basic MSDM table is only the common ACPI header */
165062306a36Sopenharmony_ci
165162306a36Sopenharmony_cistruct acpi_table_msdm {
165262306a36Sopenharmony_ci	struct acpi_table_header header;	/* Common ACPI table header */
165362306a36Sopenharmony_ci};
165462306a36Sopenharmony_ci
165562306a36Sopenharmony_ci/*******************************************************************************
165662306a36Sopenharmony_ci *
165762306a36Sopenharmony_ci * NFIT - NVDIMM Interface Table (ACPI 6.0+)
165862306a36Sopenharmony_ci *        Version 1
165962306a36Sopenharmony_ci *
166062306a36Sopenharmony_ci ******************************************************************************/
166162306a36Sopenharmony_ci
166262306a36Sopenharmony_cistruct acpi_table_nfit {
166362306a36Sopenharmony_ci	struct acpi_table_header header;	/* Common ACPI table header */
166462306a36Sopenharmony_ci	u32 reserved;		/* Reserved, must be zero */
166562306a36Sopenharmony_ci};
166662306a36Sopenharmony_ci
166762306a36Sopenharmony_ci/* Subtable header for NFIT */
166862306a36Sopenharmony_ci
166962306a36Sopenharmony_cistruct acpi_nfit_header {
167062306a36Sopenharmony_ci	u16 type;
167162306a36Sopenharmony_ci	u16 length;
167262306a36Sopenharmony_ci};
167362306a36Sopenharmony_ci
167462306a36Sopenharmony_ci/* Values for subtable type in struct acpi_nfit_header */
167562306a36Sopenharmony_ci
167662306a36Sopenharmony_cienum acpi_nfit_type {
167762306a36Sopenharmony_ci	ACPI_NFIT_TYPE_SYSTEM_ADDRESS = 0,
167862306a36Sopenharmony_ci	ACPI_NFIT_TYPE_MEMORY_MAP = 1,
167962306a36Sopenharmony_ci	ACPI_NFIT_TYPE_INTERLEAVE = 2,
168062306a36Sopenharmony_ci	ACPI_NFIT_TYPE_SMBIOS = 3,
168162306a36Sopenharmony_ci	ACPI_NFIT_TYPE_CONTROL_REGION = 4,
168262306a36Sopenharmony_ci	ACPI_NFIT_TYPE_DATA_REGION = 5,
168362306a36Sopenharmony_ci	ACPI_NFIT_TYPE_FLUSH_ADDRESS = 6,
168462306a36Sopenharmony_ci	ACPI_NFIT_TYPE_CAPABILITIES = 7,
168562306a36Sopenharmony_ci	ACPI_NFIT_TYPE_RESERVED = 8	/* 8 and greater are reserved */
168662306a36Sopenharmony_ci};
168762306a36Sopenharmony_ci
168862306a36Sopenharmony_ci/*
168962306a36Sopenharmony_ci * NFIT Subtables
169062306a36Sopenharmony_ci */
169162306a36Sopenharmony_ci
169262306a36Sopenharmony_ci/* 0: System Physical Address Range Structure */
169362306a36Sopenharmony_ci
169462306a36Sopenharmony_cistruct acpi_nfit_system_address {
169562306a36Sopenharmony_ci	struct acpi_nfit_header header;
169662306a36Sopenharmony_ci	u16 range_index;
169762306a36Sopenharmony_ci	u16 flags;
169862306a36Sopenharmony_ci	u32 reserved;		/* Reserved, must be zero */
169962306a36Sopenharmony_ci	u32 proximity_domain;
170062306a36Sopenharmony_ci	u8 range_guid[16];
170162306a36Sopenharmony_ci	u64 address;
170262306a36Sopenharmony_ci	u64 length;
170362306a36Sopenharmony_ci	u64 memory_mapping;
170462306a36Sopenharmony_ci	u64 location_cookie;	/* ACPI 6.4 */
170562306a36Sopenharmony_ci};
170662306a36Sopenharmony_ci
170762306a36Sopenharmony_ci/* Flags */
170862306a36Sopenharmony_ci
170962306a36Sopenharmony_ci#define ACPI_NFIT_ADD_ONLINE_ONLY       (1)	/* 00: Add/Online Operation Only */
171062306a36Sopenharmony_ci#define ACPI_NFIT_PROXIMITY_VALID       (1<<1)	/* 01: Proximity Domain Valid */
171162306a36Sopenharmony_ci#define ACPI_NFIT_LOCATION_COOKIE_VALID (1<<2)	/* 02: SPA location cookie valid (ACPI 6.4) */
171262306a36Sopenharmony_ci
171362306a36Sopenharmony_ci/* Range Type GUIDs appear in the include/acuuid.h file */
171462306a36Sopenharmony_ci
171562306a36Sopenharmony_ci/* 1: Memory Device to System Address Range Map Structure */
171662306a36Sopenharmony_ci
171762306a36Sopenharmony_cistruct acpi_nfit_memory_map {
171862306a36Sopenharmony_ci	struct acpi_nfit_header header;
171962306a36Sopenharmony_ci	u32 device_handle;
172062306a36Sopenharmony_ci	u16 physical_id;
172162306a36Sopenharmony_ci	u16 region_id;
172262306a36Sopenharmony_ci	u16 range_index;
172362306a36Sopenharmony_ci	u16 region_index;
172462306a36Sopenharmony_ci	u64 region_size;
172562306a36Sopenharmony_ci	u64 region_offset;
172662306a36Sopenharmony_ci	u64 address;
172762306a36Sopenharmony_ci	u16 interleave_index;
172862306a36Sopenharmony_ci	u16 interleave_ways;
172962306a36Sopenharmony_ci	u16 flags;
173062306a36Sopenharmony_ci	u16 reserved;		/* Reserved, must be zero */
173162306a36Sopenharmony_ci};
173262306a36Sopenharmony_ci
173362306a36Sopenharmony_ci/* Flags */
173462306a36Sopenharmony_ci
173562306a36Sopenharmony_ci#define ACPI_NFIT_MEM_SAVE_FAILED       (1)	/* 00: Last SAVE to Memory Device failed */
173662306a36Sopenharmony_ci#define ACPI_NFIT_MEM_RESTORE_FAILED    (1<<1)	/* 01: Last RESTORE from Memory Device failed */
173762306a36Sopenharmony_ci#define ACPI_NFIT_MEM_FLUSH_FAILED      (1<<2)	/* 02: Platform flush failed */
173862306a36Sopenharmony_ci#define ACPI_NFIT_MEM_NOT_ARMED         (1<<3)	/* 03: Memory Device is not armed */
173962306a36Sopenharmony_ci#define ACPI_NFIT_MEM_HEALTH_OBSERVED   (1<<4)	/* 04: Memory Device observed SMART/health events */
174062306a36Sopenharmony_ci#define ACPI_NFIT_MEM_HEALTH_ENABLED    (1<<5)	/* 05: SMART/health events enabled */
174162306a36Sopenharmony_ci#define ACPI_NFIT_MEM_MAP_FAILED        (1<<6)	/* 06: Mapping to SPA failed */
174262306a36Sopenharmony_ci
174362306a36Sopenharmony_ci/* 2: Interleave Structure */
174462306a36Sopenharmony_ci
174562306a36Sopenharmony_cistruct acpi_nfit_interleave {
174662306a36Sopenharmony_ci	struct acpi_nfit_header header;
174762306a36Sopenharmony_ci	u16 interleave_index;
174862306a36Sopenharmony_ci	u16 reserved;		/* Reserved, must be zero */
174962306a36Sopenharmony_ci	u32 line_count;
175062306a36Sopenharmony_ci	u32 line_size;
175162306a36Sopenharmony_ci	u32 line_offset[];	/* Variable length */
175262306a36Sopenharmony_ci};
175362306a36Sopenharmony_ci
175462306a36Sopenharmony_ci/* 3: SMBIOS Management Information Structure */
175562306a36Sopenharmony_ci
175662306a36Sopenharmony_cistruct acpi_nfit_smbios {
175762306a36Sopenharmony_ci	struct acpi_nfit_header header;
175862306a36Sopenharmony_ci	u32 reserved;		/* Reserved, must be zero */
175962306a36Sopenharmony_ci	u8 data[];		/* Variable length */
176062306a36Sopenharmony_ci};
176162306a36Sopenharmony_ci
176262306a36Sopenharmony_ci/* 4: NVDIMM Control Region Structure */
176362306a36Sopenharmony_ci
176462306a36Sopenharmony_cistruct acpi_nfit_control_region {
176562306a36Sopenharmony_ci	struct acpi_nfit_header header;
176662306a36Sopenharmony_ci	u16 region_index;
176762306a36Sopenharmony_ci	u16 vendor_id;
176862306a36Sopenharmony_ci	u16 device_id;
176962306a36Sopenharmony_ci	u16 revision_id;
177062306a36Sopenharmony_ci	u16 subsystem_vendor_id;
177162306a36Sopenharmony_ci	u16 subsystem_device_id;
177262306a36Sopenharmony_ci	u16 subsystem_revision_id;
177362306a36Sopenharmony_ci	u8 valid_fields;
177462306a36Sopenharmony_ci	u8 manufacturing_location;
177562306a36Sopenharmony_ci	u16 manufacturing_date;
177662306a36Sopenharmony_ci	u8 reserved[2];		/* Reserved, must be zero */
177762306a36Sopenharmony_ci	u32 serial_number;
177862306a36Sopenharmony_ci	u16 code;
177962306a36Sopenharmony_ci	u16 windows;
178062306a36Sopenharmony_ci	u64 window_size;
178162306a36Sopenharmony_ci	u64 command_offset;
178262306a36Sopenharmony_ci	u64 command_size;
178362306a36Sopenharmony_ci	u64 status_offset;
178462306a36Sopenharmony_ci	u64 status_size;
178562306a36Sopenharmony_ci	u16 flags;
178662306a36Sopenharmony_ci	u8 reserved1[6];	/* Reserved, must be zero */
178762306a36Sopenharmony_ci};
178862306a36Sopenharmony_ci
178962306a36Sopenharmony_ci/* Flags */
179062306a36Sopenharmony_ci
179162306a36Sopenharmony_ci#define ACPI_NFIT_CONTROL_BUFFERED          (1)	/* Block Data Windows implementation is buffered */
179262306a36Sopenharmony_ci
179362306a36Sopenharmony_ci/* valid_fields bits */
179462306a36Sopenharmony_ci
179562306a36Sopenharmony_ci#define ACPI_NFIT_CONTROL_MFG_INFO_VALID    (1)	/* Manufacturing fields are valid */
179662306a36Sopenharmony_ci
179762306a36Sopenharmony_ci/* 5: NVDIMM Block Data Window Region Structure */
179862306a36Sopenharmony_ci
179962306a36Sopenharmony_cistruct acpi_nfit_data_region {
180062306a36Sopenharmony_ci	struct acpi_nfit_header header;
180162306a36Sopenharmony_ci	u16 region_index;
180262306a36Sopenharmony_ci	u16 windows;
180362306a36Sopenharmony_ci	u64 offset;
180462306a36Sopenharmony_ci	u64 size;
180562306a36Sopenharmony_ci	u64 capacity;
180662306a36Sopenharmony_ci	u64 start_address;
180762306a36Sopenharmony_ci};
180862306a36Sopenharmony_ci
180962306a36Sopenharmony_ci/* 6: Flush Hint Address Structure */
181062306a36Sopenharmony_ci
181162306a36Sopenharmony_cistruct acpi_nfit_flush_address {
181262306a36Sopenharmony_ci	struct acpi_nfit_header header;
181362306a36Sopenharmony_ci	u32 device_handle;
181462306a36Sopenharmony_ci	u16 hint_count;
181562306a36Sopenharmony_ci	u8 reserved[6];		/* Reserved, must be zero */
181662306a36Sopenharmony_ci	u64 hint_address[];	/* Variable length */
181762306a36Sopenharmony_ci};
181862306a36Sopenharmony_ci
181962306a36Sopenharmony_ci/* 7: Platform Capabilities Structure */
182062306a36Sopenharmony_ci
182162306a36Sopenharmony_cistruct acpi_nfit_capabilities {
182262306a36Sopenharmony_ci	struct acpi_nfit_header header;
182362306a36Sopenharmony_ci	u8 highest_capability;
182462306a36Sopenharmony_ci	u8 reserved[3];		/* Reserved, must be zero */
182562306a36Sopenharmony_ci	u32 capabilities;
182662306a36Sopenharmony_ci	u32 reserved2;
182762306a36Sopenharmony_ci};
182862306a36Sopenharmony_ci
182962306a36Sopenharmony_ci/* Capabilities Flags */
183062306a36Sopenharmony_ci
183162306a36Sopenharmony_ci#define ACPI_NFIT_CAPABILITY_CACHE_FLUSH       (1)	/* 00: Cache Flush to NVDIMM capable */
183262306a36Sopenharmony_ci#define ACPI_NFIT_CAPABILITY_MEM_FLUSH         (1<<1)	/* 01: Memory Flush to NVDIMM capable */
183362306a36Sopenharmony_ci#define ACPI_NFIT_CAPABILITY_MEM_MIRRORING     (1<<2)	/* 02: Memory Mirroring capable */
183462306a36Sopenharmony_ci
183562306a36Sopenharmony_ci/*
183662306a36Sopenharmony_ci * NFIT/DVDIMM device handle support - used as the _ADR for each NVDIMM
183762306a36Sopenharmony_ci */
183862306a36Sopenharmony_cistruct nfit_device_handle {
183962306a36Sopenharmony_ci	u32 handle;
184062306a36Sopenharmony_ci};
184162306a36Sopenharmony_ci
184262306a36Sopenharmony_ci/* Device handle construction and extraction macros */
184362306a36Sopenharmony_ci
184462306a36Sopenharmony_ci#define ACPI_NFIT_DIMM_NUMBER_MASK              0x0000000F
184562306a36Sopenharmony_ci#define ACPI_NFIT_CHANNEL_NUMBER_MASK           0x000000F0
184662306a36Sopenharmony_ci#define ACPI_NFIT_MEMORY_ID_MASK                0x00000F00
184762306a36Sopenharmony_ci#define ACPI_NFIT_SOCKET_ID_MASK                0x0000F000
184862306a36Sopenharmony_ci#define ACPI_NFIT_NODE_ID_MASK                  0x0FFF0000
184962306a36Sopenharmony_ci
185062306a36Sopenharmony_ci#define ACPI_NFIT_DIMM_NUMBER_OFFSET            0
185162306a36Sopenharmony_ci#define ACPI_NFIT_CHANNEL_NUMBER_OFFSET         4
185262306a36Sopenharmony_ci#define ACPI_NFIT_MEMORY_ID_OFFSET              8
185362306a36Sopenharmony_ci#define ACPI_NFIT_SOCKET_ID_OFFSET              12
185462306a36Sopenharmony_ci#define ACPI_NFIT_NODE_ID_OFFSET                16
185562306a36Sopenharmony_ci
185662306a36Sopenharmony_ci/* Macro to construct a NFIT/NVDIMM device handle */
185762306a36Sopenharmony_ci
185862306a36Sopenharmony_ci#define ACPI_NFIT_BUILD_DEVICE_HANDLE(dimm, channel, memory, socket, node) \
185962306a36Sopenharmony_ci	((dimm)                                         | \
186062306a36Sopenharmony_ci	((channel) << ACPI_NFIT_CHANNEL_NUMBER_OFFSET)  | \
186162306a36Sopenharmony_ci	((memory)  << ACPI_NFIT_MEMORY_ID_OFFSET)       | \
186262306a36Sopenharmony_ci	((socket)  << ACPI_NFIT_SOCKET_ID_OFFSET)       | \
186362306a36Sopenharmony_ci	((node)    << ACPI_NFIT_NODE_ID_OFFSET))
186462306a36Sopenharmony_ci
186562306a36Sopenharmony_ci/* Macros to extract individual fields from a NFIT/NVDIMM device handle */
186662306a36Sopenharmony_ci
186762306a36Sopenharmony_ci#define ACPI_NFIT_GET_DIMM_NUMBER(handle) \
186862306a36Sopenharmony_ci	((handle) & ACPI_NFIT_DIMM_NUMBER_MASK)
186962306a36Sopenharmony_ci
187062306a36Sopenharmony_ci#define ACPI_NFIT_GET_CHANNEL_NUMBER(handle) \
187162306a36Sopenharmony_ci	(((handle) & ACPI_NFIT_CHANNEL_NUMBER_MASK) >> ACPI_NFIT_CHANNEL_NUMBER_OFFSET)
187262306a36Sopenharmony_ci
187362306a36Sopenharmony_ci#define ACPI_NFIT_GET_MEMORY_ID(handle) \
187462306a36Sopenharmony_ci	(((handle) & ACPI_NFIT_MEMORY_ID_MASK)      >> ACPI_NFIT_MEMORY_ID_OFFSET)
187562306a36Sopenharmony_ci
187662306a36Sopenharmony_ci#define ACPI_NFIT_GET_SOCKET_ID(handle) \
187762306a36Sopenharmony_ci	(((handle) & ACPI_NFIT_SOCKET_ID_MASK)      >> ACPI_NFIT_SOCKET_ID_OFFSET)
187862306a36Sopenharmony_ci
187962306a36Sopenharmony_ci#define ACPI_NFIT_GET_NODE_ID(handle) \
188062306a36Sopenharmony_ci	(((handle) & ACPI_NFIT_NODE_ID_MASK)        >> ACPI_NFIT_NODE_ID_OFFSET)
188162306a36Sopenharmony_ci
188262306a36Sopenharmony_ci/*******************************************************************************
188362306a36Sopenharmony_ci *
188462306a36Sopenharmony_ci * NHLT - Non HD Audio Link Table
188562306a36Sopenharmony_ci *
188662306a36Sopenharmony_ci * Conforms to: Intel Smart Sound Technology NHLT Specification
188762306a36Sopenharmony_ci * Version 0.8.1, January 2020.
188862306a36Sopenharmony_ci *
188962306a36Sopenharmony_ci ******************************************************************************/
189062306a36Sopenharmony_ci
189162306a36Sopenharmony_ci/* Main table */
189262306a36Sopenharmony_ci
189362306a36Sopenharmony_cistruct acpi_table_nhlt {
189462306a36Sopenharmony_ci	struct acpi_table_header header;	/* Common ACPI table header */
189562306a36Sopenharmony_ci	u8 endpoint_count;
189662306a36Sopenharmony_ci};
189762306a36Sopenharmony_ci
189862306a36Sopenharmony_cistruct acpi_nhlt_endpoint {
189962306a36Sopenharmony_ci	u32 descriptor_length;
190062306a36Sopenharmony_ci	u8 link_type;
190162306a36Sopenharmony_ci	u8 instance_id;
190262306a36Sopenharmony_ci	u16 vendor_id;
190362306a36Sopenharmony_ci	u16 device_id;
190462306a36Sopenharmony_ci	u16 revision_id;
190562306a36Sopenharmony_ci	u32 subsystem_id;
190662306a36Sopenharmony_ci	u8 device_type;
190762306a36Sopenharmony_ci	u8 direction;
190862306a36Sopenharmony_ci	u8 virtual_bus_id;
190962306a36Sopenharmony_ci};
191062306a36Sopenharmony_ci
191162306a36Sopenharmony_ci/* Types for link_type field above */
191262306a36Sopenharmony_ci
191362306a36Sopenharmony_ci#define ACPI_NHLT_RESERVED_HD_AUDIO         0
191462306a36Sopenharmony_ci#define ACPI_NHLT_RESERVED_DSP              1
191562306a36Sopenharmony_ci#define ACPI_NHLT_PDM                       2
191662306a36Sopenharmony_ci#define ACPI_NHLT_SSP                       3
191762306a36Sopenharmony_ci#define ACPI_NHLT_RESERVED_SLIMBUS          4
191862306a36Sopenharmony_ci#define ACPI_NHLT_RESERVED_SOUNDWIRE        5
191962306a36Sopenharmony_ci#define ACPI_NHLT_TYPE_RESERVED             6	/* 6 and above are reserved */
192062306a36Sopenharmony_ci
192162306a36Sopenharmony_ci/* All other values above are reserved */
192262306a36Sopenharmony_ci
192362306a36Sopenharmony_ci/* Values for device_id field above */
192462306a36Sopenharmony_ci
192562306a36Sopenharmony_ci#define ACPI_NHLT_PDM_DMIC                  0xAE20
192662306a36Sopenharmony_ci#define ACPI_NHLT_BT_SIDEBAND               0xAE30
192762306a36Sopenharmony_ci#define ACPI_NHLT_I2S_TDM_CODECS            0xAE23
192862306a36Sopenharmony_ci
192962306a36Sopenharmony_ci/* Values for device_type field above */
193062306a36Sopenharmony_ci
193162306a36Sopenharmony_ci/* SSP Link */
193262306a36Sopenharmony_ci
193362306a36Sopenharmony_ci#define ACPI_NHLT_LINK_BT_SIDEBAND          0
193462306a36Sopenharmony_ci#define ACPI_NHLT_LINK_FM                   1
193562306a36Sopenharmony_ci#define ACPI_NHLT_LINK_MODEM                2
193662306a36Sopenharmony_ci/* 3 is reserved */
193762306a36Sopenharmony_ci#define ACPI_NHLT_LINK_SSP_ANALOG_CODEC     4
193862306a36Sopenharmony_ci
193962306a36Sopenharmony_ci/* PDM Link */
194062306a36Sopenharmony_ci
194162306a36Sopenharmony_ci#define ACPI_NHLT_PDM_ON_CAVS_1P8           0
194262306a36Sopenharmony_ci#define ACPI_NHLT_PDM_ON_CAVS_1P5           1
194362306a36Sopenharmony_ci
194462306a36Sopenharmony_ci/* Values for Direction field above */
194562306a36Sopenharmony_ci
194662306a36Sopenharmony_ci#define ACPI_NHLT_DIR_RENDER                0
194762306a36Sopenharmony_ci#define ACPI_NHLT_DIR_CAPTURE               1
194862306a36Sopenharmony_ci#define ACPI_NHLT_DIR_RENDER_LOOPBACK       2
194962306a36Sopenharmony_ci#define ACPI_NHLT_DIR_RENDER_FEEDBACK       3
195062306a36Sopenharmony_ci#define ACPI_NHLT_DIR_RESERVED              4	/* 4 and above are reserved */
195162306a36Sopenharmony_ci
195262306a36Sopenharmony_cistruct acpi_nhlt_device_specific_config {
195362306a36Sopenharmony_ci	u32 capabilities_size;
195462306a36Sopenharmony_ci	u8 virtual_slot;
195562306a36Sopenharmony_ci	u8 config_type;
195662306a36Sopenharmony_ci};
195762306a36Sopenharmony_ci
195862306a36Sopenharmony_cistruct acpi_nhlt_device_specific_config_a {
195962306a36Sopenharmony_ci	u32 capabilities_size;
196062306a36Sopenharmony_ci	u8 virtual_slot;
196162306a36Sopenharmony_ci	u8 config_type;
196262306a36Sopenharmony_ci	u8 array_type;
196362306a36Sopenharmony_ci};
196462306a36Sopenharmony_ci
196562306a36Sopenharmony_ci/* Values for Config Type above */
196662306a36Sopenharmony_ci
196762306a36Sopenharmony_ci#define ACPI_NHLT_CONFIG_TYPE_GENERIC              0x00
196862306a36Sopenharmony_ci#define ACPI_NHLT_CONFIG_TYPE_MIC_ARRAY            0x01
196962306a36Sopenharmony_ci#define ACPI_NHLT_CONFIG_TYPE_RENDER_FEEDBACK      0x03
197062306a36Sopenharmony_ci#define ACPI_NHLT_CONFIG_TYPE_RESERVED             0x04	/* 4 and above are reserved */
197162306a36Sopenharmony_ci
197262306a36Sopenharmony_cistruct acpi_nhlt_device_specific_config_b {
197362306a36Sopenharmony_ci	u32 capabilities_size;
197462306a36Sopenharmony_ci};
197562306a36Sopenharmony_ci
197662306a36Sopenharmony_cistruct acpi_nhlt_device_specific_config_c {
197762306a36Sopenharmony_ci	u32 capabilities_size;
197862306a36Sopenharmony_ci	u8 virtual_slot;
197962306a36Sopenharmony_ci};
198062306a36Sopenharmony_ci
198162306a36Sopenharmony_cistruct acpi_nhlt_render_device_specific_config {
198262306a36Sopenharmony_ci	u32 capabilities_size;
198362306a36Sopenharmony_ci	u8 virtual_slot;
198462306a36Sopenharmony_ci};
198562306a36Sopenharmony_ci
198662306a36Sopenharmony_cistruct acpi_nhlt_wave_extensible {
198762306a36Sopenharmony_ci	u16 format_tag;
198862306a36Sopenharmony_ci	u16 channel_count;
198962306a36Sopenharmony_ci	u32 samples_per_sec;
199062306a36Sopenharmony_ci	u32 avg_bytes_per_sec;
199162306a36Sopenharmony_ci	u16 block_align;
199262306a36Sopenharmony_ci	u16 bits_per_sample;
199362306a36Sopenharmony_ci	u16 extra_format_size;
199462306a36Sopenharmony_ci	u16 valid_bits_per_sample;
199562306a36Sopenharmony_ci	u32 channel_mask;
199662306a36Sopenharmony_ci	u8 sub_format_guid[16];
199762306a36Sopenharmony_ci};
199862306a36Sopenharmony_ci
199962306a36Sopenharmony_ci/* Values for channel_mask above */
200062306a36Sopenharmony_ci
200162306a36Sopenharmony_ci#define ACPI_NHLT_SPKR_FRONT_LEFT             0x1
200262306a36Sopenharmony_ci#define ACPI_NHLT_SPKR_FRONT_RIGHT            0x2
200362306a36Sopenharmony_ci#define ACPI_NHLT_SPKR_FRONT_CENTER           0x4
200462306a36Sopenharmony_ci#define ACPI_NHLT_SPKR_LOW_FREQ               0x8
200562306a36Sopenharmony_ci#define ACPI_NHLT_SPKR_BACK_LEFT              0x10
200662306a36Sopenharmony_ci#define ACPI_NHLT_SPKR_BACK_RIGHT             0x20
200762306a36Sopenharmony_ci#define ACPI_NHLT_SPKR_FRONT_LEFT_OF_CENTER   0x40
200862306a36Sopenharmony_ci#define ACPI_NHLT_SPKR_FRONT_RIGHT_OF_CENTER  0x80
200962306a36Sopenharmony_ci#define ACPI_NHLT_SPKR_BACK_CENTER            0x100
201062306a36Sopenharmony_ci#define ACPI_NHLT_SPKR_SIDE_LEFT              0x200
201162306a36Sopenharmony_ci#define ACPI_NHLT_SPKR_SIDE_RIGHT             0x400
201262306a36Sopenharmony_ci#define ACPI_NHLT_SPKR_TOP_CENTER             0x800
201362306a36Sopenharmony_ci#define ACPI_NHLT_SPKR_TOP_FRONT_LEFT         0x1000
201462306a36Sopenharmony_ci#define ACPI_NHLT_SPKR_TOP_FRONT_CENTER       0x2000
201562306a36Sopenharmony_ci#define ACPI_NHLT_SPKR_TOP_FRONT_RIGHT        0x4000
201662306a36Sopenharmony_ci#define ACPI_NHLT_SPKR_TOP_BACK_LEFT          0x8000
201762306a36Sopenharmony_ci#define ACPI_NHLT_SPKR_TOP_BACK_CENTER        0x10000
201862306a36Sopenharmony_ci#define ACPI_NHLT_SPKR_TOP_BACK_RIGHT         0x20000
201962306a36Sopenharmony_ci
202062306a36Sopenharmony_cistruct acpi_nhlt_format_config {
202162306a36Sopenharmony_ci	struct acpi_nhlt_wave_extensible format;
202262306a36Sopenharmony_ci	u32 capability_size;
202362306a36Sopenharmony_ci	u8 capabilities[];
202462306a36Sopenharmony_ci};
202562306a36Sopenharmony_ci
202662306a36Sopenharmony_cistruct acpi_nhlt_formats_config {
202762306a36Sopenharmony_ci	u8 formats_count;
202862306a36Sopenharmony_ci};
202962306a36Sopenharmony_ci
203062306a36Sopenharmony_cistruct acpi_nhlt_device_specific_hdr {
203162306a36Sopenharmony_ci	u8 virtual_slot;
203262306a36Sopenharmony_ci	u8 config_type;
203362306a36Sopenharmony_ci};
203462306a36Sopenharmony_ci
203562306a36Sopenharmony_ci/* Types for config_type above */
203662306a36Sopenharmony_ci
203762306a36Sopenharmony_ci#define ACPI_NHLT_GENERIC                   0
203862306a36Sopenharmony_ci#define ACPI_NHLT_MIC                       1
203962306a36Sopenharmony_ci#define ACPI_NHLT_RENDER                    3
204062306a36Sopenharmony_ci
204162306a36Sopenharmony_cistruct acpi_nhlt_mic_device_specific_config {
204262306a36Sopenharmony_ci	struct acpi_nhlt_device_specific_hdr device_config;
204362306a36Sopenharmony_ci	u8 array_type_ext;
204462306a36Sopenharmony_ci};
204562306a36Sopenharmony_ci
204662306a36Sopenharmony_ci/* Values for array_type_ext above */
204762306a36Sopenharmony_ci
204862306a36Sopenharmony_ci#define ACPI_NHLT_ARRAY_TYPE_RESERVED               0x09	/* 9 and below are reserved */
204962306a36Sopenharmony_ci#define ACPI_NHLT_SMALL_LINEAR_2ELEMENT             0x0A
205062306a36Sopenharmony_ci#define ACPI_NHLT_BIG_LINEAR_2ELEMENT               0x0B
205162306a36Sopenharmony_ci#define ACPI_NHLT_FIRST_GEOMETRY_LINEAR_4ELEMENT    0x0C
205262306a36Sopenharmony_ci#define ACPI_NHLT_PLANAR_LSHAPED_4ELEMENT           0x0D
205362306a36Sopenharmony_ci#define ACPI_NHLT_SECOND_GEOMETRY_LINEAR_4ELEMENT   0x0E
205462306a36Sopenharmony_ci#define ACPI_NHLT_VENDOR_DEFINED                    0x0F
205562306a36Sopenharmony_ci#define ACPI_NHLT_ARRAY_TYPE_MASK                   0x0F
205662306a36Sopenharmony_ci#define ACPI_NHLT_ARRAY_TYPE_EXT_MASK               0x10
205762306a36Sopenharmony_ci
205862306a36Sopenharmony_ci#define ACPI_NHLT_NO_EXTENSION                      0x0
205962306a36Sopenharmony_ci#define ACPI_NHLT_MIC_SNR_SENSITIVITY_EXT           (1<<4)
206062306a36Sopenharmony_ci
206162306a36Sopenharmony_cistruct acpi_nhlt_vendor_mic_count {
206262306a36Sopenharmony_ci	u8 microphone_count;
206362306a36Sopenharmony_ci};
206462306a36Sopenharmony_ci
206562306a36Sopenharmony_cistruct acpi_nhlt_vendor_mic_config {
206662306a36Sopenharmony_ci	u8 type;
206762306a36Sopenharmony_ci	u8 panel;
206862306a36Sopenharmony_ci	u16 speaker_position_distance;	/* mm */
206962306a36Sopenharmony_ci	u16 horizontal_offset;	/* mm */
207062306a36Sopenharmony_ci	u16 vertical_offset;	/* mm */
207162306a36Sopenharmony_ci	u8 frequency_low_band;	/* 5*Hz */
207262306a36Sopenharmony_ci	u8 frequency_high_band;	/* 500*Hz */
207362306a36Sopenharmony_ci	u16 direction_angle;	/* -180 - + 180 */
207462306a36Sopenharmony_ci	u16 elevation_angle;	/* -180 - + 180 */
207562306a36Sopenharmony_ci	u16 work_vertical_angle_begin;	/* -180 - + 180 with 2 deg step */
207662306a36Sopenharmony_ci	u16 work_vertical_angle_end;	/* -180 - + 180 with 2 deg step */
207762306a36Sopenharmony_ci	u16 work_horizontal_angle_begin;	/* -180 - + 180 with 2 deg step */
207862306a36Sopenharmony_ci	u16 work_horizontal_angle_end;	/* -180 - + 180 with 2 deg step */
207962306a36Sopenharmony_ci};
208062306a36Sopenharmony_ci
208162306a36Sopenharmony_ci/* Values for Type field above */
208262306a36Sopenharmony_ci
208362306a36Sopenharmony_ci#define ACPI_NHLT_MIC_OMNIDIRECTIONAL       0
208462306a36Sopenharmony_ci#define ACPI_NHLT_MIC_SUBCARDIOID           1
208562306a36Sopenharmony_ci#define ACPI_NHLT_MIC_CARDIOID              2
208662306a36Sopenharmony_ci#define ACPI_NHLT_MIC_SUPER_CARDIOID        3
208762306a36Sopenharmony_ci#define ACPI_NHLT_MIC_HYPER_CARDIOID        4
208862306a36Sopenharmony_ci#define ACPI_NHLT_MIC_8_SHAPED              5
208962306a36Sopenharmony_ci#define ACPI_NHLT_MIC_RESERVED6             6	/* 6 is reserved */
209062306a36Sopenharmony_ci#define ACPI_NHLT_MIC_VENDOR_DEFINED        7
209162306a36Sopenharmony_ci#define ACPI_NHLT_MIC_RESERVED              8	/* 8 and above are reserved */
209262306a36Sopenharmony_ci
209362306a36Sopenharmony_ci/* Values for Panel field above */
209462306a36Sopenharmony_ci
209562306a36Sopenharmony_ci#define ACPI_NHLT_MIC_POSITION_TOP          0
209662306a36Sopenharmony_ci#define ACPI_NHLT_MIC_POSITION_BOTTOM       1
209762306a36Sopenharmony_ci#define ACPI_NHLT_MIC_POSITION_LEFT         2
209862306a36Sopenharmony_ci#define ACPI_NHLT_MIC_POSITION_RIGHT        3
209962306a36Sopenharmony_ci#define ACPI_NHLT_MIC_POSITION_FRONT        4
210062306a36Sopenharmony_ci#define ACPI_NHLT_MIC_POSITION_BACK         5
210162306a36Sopenharmony_ci#define ACPI_NHLT_MIC_POSITION_RESERVED     6	/* 6 and above are reserved */
210262306a36Sopenharmony_ci
210362306a36Sopenharmony_cistruct acpi_nhlt_vendor_mic_device_specific_config {
210462306a36Sopenharmony_ci	struct acpi_nhlt_mic_device_specific_config mic_array_device_config;
210562306a36Sopenharmony_ci	u8 number_of_microphones;
210662306a36Sopenharmony_ci	struct acpi_nhlt_vendor_mic_config mic_config[];	/* Indexed by number_of_microphones */
210762306a36Sopenharmony_ci};
210862306a36Sopenharmony_ci
210962306a36Sopenharmony_ci/* Microphone SNR and Sensitivity extension */
211062306a36Sopenharmony_ci
211162306a36Sopenharmony_cistruct acpi_nhlt_mic_snr_sensitivity_extension {
211262306a36Sopenharmony_ci	u32 SNR;
211362306a36Sopenharmony_ci	u32 sensitivity;
211462306a36Sopenharmony_ci};
211562306a36Sopenharmony_ci
211662306a36Sopenharmony_ci/* Render device with feedback */
211762306a36Sopenharmony_ci
211862306a36Sopenharmony_cistruct acpi_nhlt_render_feedback_device_specific_config {
211962306a36Sopenharmony_ci	u8 feedback_virtual_slot;	/* Render slot in case of capture */
212062306a36Sopenharmony_ci	u16 feedback_channels;	/* Informative only */
212162306a36Sopenharmony_ci	u16 feedback_valid_bits_per_sample;
212262306a36Sopenharmony_ci};
212362306a36Sopenharmony_ci
212462306a36Sopenharmony_ci/* Non documented structures */
212562306a36Sopenharmony_ci
212662306a36Sopenharmony_cistruct acpi_nhlt_device_info_count {
212762306a36Sopenharmony_ci	u8 structure_count;
212862306a36Sopenharmony_ci};
212962306a36Sopenharmony_ci
213062306a36Sopenharmony_cistruct acpi_nhlt_device_info {
213162306a36Sopenharmony_ci	u8 device_id[16];
213262306a36Sopenharmony_ci	u8 device_instance_id;
213362306a36Sopenharmony_ci	u8 device_port_id;
213462306a36Sopenharmony_ci};
213562306a36Sopenharmony_ci
213662306a36Sopenharmony_ci/*******************************************************************************
213762306a36Sopenharmony_ci *
213862306a36Sopenharmony_ci * PCCT - Platform Communications Channel Table (ACPI 5.0)
213962306a36Sopenharmony_ci *        Version 2 (ACPI 6.2)
214062306a36Sopenharmony_ci *
214162306a36Sopenharmony_ci ******************************************************************************/
214262306a36Sopenharmony_ci
214362306a36Sopenharmony_cistruct acpi_table_pcct {
214462306a36Sopenharmony_ci	struct acpi_table_header header;	/* Common ACPI table header */
214562306a36Sopenharmony_ci	u32 flags;
214662306a36Sopenharmony_ci	u64 reserved;
214762306a36Sopenharmony_ci};
214862306a36Sopenharmony_ci
214962306a36Sopenharmony_ci/* Values for Flags field above */
215062306a36Sopenharmony_ci
215162306a36Sopenharmony_ci#define ACPI_PCCT_DOORBELL              1
215262306a36Sopenharmony_ci
215362306a36Sopenharmony_ci/* Values for subtable type in struct acpi_subtable_header */
215462306a36Sopenharmony_ci
215562306a36Sopenharmony_cienum acpi_pcct_type {
215662306a36Sopenharmony_ci	ACPI_PCCT_TYPE_GENERIC_SUBSPACE = 0,
215762306a36Sopenharmony_ci	ACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE = 1,
215862306a36Sopenharmony_ci	ACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE_TYPE2 = 2,	/* ACPI 6.1 */
215962306a36Sopenharmony_ci	ACPI_PCCT_TYPE_EXT_PCC_MASTER_SUBSPACE = 3,	/* ACPI 6.2 */
216062306a36Sopenharmony_ci	ACPI_PCCT_TYPE_EXT_PCC_SLAVE_SUBSPACE = 4,	/* ACPI 6.2 */
216162306a36Sopenharmony_ci	ACPI_PCCT_TYPE_HW_REG_COMM_SUBSPACE = 5,	/* ACPI 6.4 */
216262306a36Sopenharmony_ci	ACPI_PCCT_TYPE_RESERVED = 6	/* 6 and greater are reserved */
216362306a36Sopenharmony_ci};
216462306a36Sopenharmony_ci
216562306a36Sopenharmony_ci/*
216662306a36Sopenharmony_ci * PCCT Subtables, correspond to Type in struct acpi_subtable_header
216762306a36Sopenharmony_ci */
216862306a36Sopenharmony_ci
216962306a36Sopenharmony_ci/* 0: Generic Communications Subspace */
217062306a36Sopenharmony_ci
217162306a36Sopenharmony_cistruct acpi_pcct_subspace {
217262306a36Sopenharmony_ci	struct acpi_subtable_header header;
217362306a36Sopenharmony_ci	u8 reserved[6];
217462306a36Sopenharmony_ci	u64 base_address;
217562306a36Sopenharmony_ci	u64 length;
217662306a36Sopenharmony_ci	struct acpi_generic_address doorbell_register;
217762306a36Sopenharmony_ci	u64 preserve_mask;
217862306a36Sopenharmony_ci	u64 write_mask;
217962306a36Sopenharmony_ci	u32 latency;
218062306a36Sopenharmony_ci	u32 max_access_rate;
218162306a36Sopenharmony_ci	u16 min_turnaround_time;
218262306a36Sopenharmony_ci};
218362306a36Sopenharmony_ci
218462306a36Sopenharmony_ci/* 1: HW-reduced Communications Subspace (ACPI 5.1) */
218562306a36Sopenharmony_ci
218662306a36Sopenharmony_cistruct acpi_pcct_hw_reduced {
218762306a36Sopenharmony_ci	struct acpi_subtable_header header;
218862306a36Sopenharmony_ci	u32 platform_interrupt;
218962306a36Sopenharmony_ci	u8 flags;
219062306a36Sopenharmony_ci	u8 reserved;
219162306a36Sopenharmony_ci	u64 base_address;
219262306a36Sopenharmony_ci	u64 length;
219362306a36Sopenharmony_ci	struct acpi_generic_address doorbell_register;
219462306a36Sopenharmony_ci	u64 preserve_mask;
219562306a36Sopenharmony_ci	u64 write_mask;
219662306a36Sopenharmony_ci	u32 latency;
219762306a36Sopenharmony_ci	u32 max_access_rate;
219862306a36Sopenharmony_ci	u16 min_turnaround_time;
219962306a36Sopenharmony_ci};
220062306a36Sopenharmony_ci
220162306a36Sopenharmony_ci/* 2: HW-reduced Communications Subspace Type 2 (ACPI 6.1) */
220262306a36Sopenharmony_ci
220362306a36Sopenharmony_cistruct acpi_pcct_hw_reduced_type2 {
220462306a36Sopenharmony_ci	struct acpi_subtable_header header;
220562306a36Sopenharmony_ci	u32 platform_interrupt;
220662306a36Sopenharmony_ci	u8 flags;
220762306a36Sopenharmony_ci	u8 reserved;
220862306a36Sopenharmony_ci	u64 base_address;
220962306a36Sopenharmony_ci	u64 length;
221062306a36Sopenharmony_ci	struct acpi_generic_address doorbell_register;
221162306a36Sopenharmony_ci	u64 preserve_mask;
221262306a36Sopenharmony_ci	u64 write_mask;
221362306a36Sopenharmony_ci	u32 latency;
221462306a36Sopenharmony_ci	u32 max_access_rate;
221562306a36Sopenharmony_ci	u16 min_turnaround_time;
221662306a36Sopenharmony_ci	struct acpi_generic_address platform_ack_register;
221762306a36Sopenharmony_ci	u64 ack_preserve_mask;
221862306a36Sopenharmony_ci	u64 ack_write_mask;
221962306a36Sopenharmony_ci};
222062306a36Sopenharmony_ci
222162306a36Sopenharmony_ci/* 3: Extended PCC Master Subspace Type 3 (ACPI 6.2) */
222262306a36Sopenharmony_ci
222362306a36Sopenharmony_cistruct acpi_pcct_ext_pcc_master {
222462306a36Sopenharmony_ci	struct acpi_subtable_header header;
222562306a36Sopenharmony_ci	u32 platform_interrupt;
222662306a36Sopenharmony_ci	u8 flags;
222762306a36Sopenharmony_ci	u8 reserved1;
222862306a36Sopenharmony_ci	u64 base_address;
222962306a36Sopenharmony_ci	u32 length;
223062306a36Sopenharmony_ci	struct acpi_generic_address doorbell_register;
223162306a36Sopenharmony_ci	u64 preserve_mask;
223262306a36Sopenharmony_ci	u64 write_mask;
223362306a36Sopenharmony_ci	u32 latency;
223462306a36Sopenharmony_ci	u32 max_access_rate;
223562306a36Sopenharmony_ci	u32 min_turnaround_time;
223662306a36Sopenharmony_ci	struct acpi_generic_address platform_ack_register;
223762306a36Sopenharmony_ci	u64 ack_preserve_mask;
223862306a36Sopenharmony_ci	u64 ack_set_mask;
223962306a36Sopenharmony_ci	u64 reserved2;
224062306a36Sopenharmony_ci	struct acpi_generic_address cmd_complete_register;
224162306a36Sopenharmony_ci	u64 cmd_complete_mask;
224262306a36Sopenharmony_ci	struct acpi_generic_address cmd_update_register;
224362306a36Sopenharmony_ci	u64 cmd_update_preserve_mask;
224462306a36Sopenharmony_ci	u64 cmd_update_set_mask;
224562306a36Sopenharmony_ci	struct acpi_generic_address error_status_register;
224662306a36Sopenharmony_ci	u64 error_status_mask;
224762306a36Sopenharmony_ci};
224862306a36Sopenharmony_ci
224962306a36Sopenharmony_ci/* 4: Extended PCC Slave Subspace Type 4 (ACPI 6.2) */
225062306a36Sopenharmony_ci
225162306a36Sopenharmony_cistruct acpi_pcct_ext_pcc_slave {
225262306a36Sopenharmony_ci	struct acpi_subtable_header header;
225362306a36Sopenharmony_ci	u32 platform_interrupt;
225462306a36Sopenharmony_ci	u8 flags;
225562306a36Sopenharmony_ci	u8 reserved1;
225662306a36Sopenharmony_ci	u64 base_address;
225762306a36Sopenharmony_ci	u32 length;
225862306a36Sopenharmony_ci	struct acpi_generic_address doorbell_register;
225962306a36Sopenharmony_ci	u64 preserve_mask;
226062306a36Sopenharmony_ci	u64 write_mask;
226162306a36Sopenharmony_ci	u32 latency;
226262306a36Sopenharmony_ci	u32 max_access_rate;
226362306a36Sopenharmony_ci	u32 min_turnaround_time;
226462306a36Sopenharmony_ci	struct acpi_generic_address platform_ack_register;
226562306a36Sopenharmony_ci	u64 ack_preserve_mask;
226662306a36Sopenharmony_ci	u64 ack_set_mask;
226762306a36Sopenharmony_ci	u64 reserved2;
226862306a36Sopenharmony_ci	struct acpi_generic_address cmd_complete_register;
226962306a36Sopenharmony_ci	u64 cmd_complete_mask;
227062306a36Sopenharmony_ci	struct acpi_generic_address cmd_update_register;
227162306a36Sopenharmony_ci	u64 cmd_update_preserve_mask;
227262306a36Sopenharmony_ci	u64 cmd_update_set_mask;
227362306a36Sopenharmony_ci	struct acpi_generic_address error_status_register;
227462306a36Sopenharmony_ci	u64 error_status_mask;
227562306a36Sopenharmony_ci};
227662306a36Sopenharmony_ci
227762306a36Sopenharmony_ci/* 5: HW Registers based Communications Subspace */
227862306a36Sopenharmony_ci
227962306a36Sopenharmony_cistruct acpi_pcct_hw_reg {
228062306a36Sopenharmony_ci	struct acpi_subtable_header header;
228162306a36Sopenharmony_ci	u16 version;
228262306a36Sopenharmony_ci	u64 base_address;
228362306a36Sopenharmony_ci	u64 length;
228462306a36Sopenharmony_ci	struct acpi_generic_address doorbell_register;
228562306a36Sopenharmony_ci	u64 doorbell_preserve;
228662306a36Sopenharmony_ci	u64 doorbell_write;
228762306a36Sopenharmony_ci	struct acpi_generic_address cmd_complete_register;
228862306a36Sopenharmony_ci	u64 cmd_complete_mask;
228962306a36Sopenharmony_ci	struct acpi_generic_address error_status_register;
229062306a36Sopenharmony_ci	u64 error_status_mask;
229162306a36Sopenharmony_ci	u32 nominal_latency;
229262306a36Sopenharmony_ci	u32 min_turnaround_time;
229362306a36Sopenharmony_ci};
229462306a36Sopenharmony_ci
229562306a36Sopenharmony_ci/* Values for doorbell flags above */
229662306a36Sopenharmony_ci
229762306a36Sopenharmony_ci#define ACPI_PCCT_INTERRUPT_POLARITY    (1)
229862306a36Sopenharmony_ci#define ACPI_PCCT_INTERRUPT_MODE        (1<<1)
229962306a36Sopenharmony_ci
230062306a36Sopenharmony_ci/*
230162306a36Sopenharmony_ci * PCC memory structures (not part of the ACPI table)
230262306a36Sopenharmony_ci */
230362306a36Sopenharmony_ci
230462306a36Sopenharmony_ci/* Shared Memory Region */
230562306a36Sopenharmony_ci
230662306a36Sopenharmony_cistruct acpi_pcct_shared_memory {
230762306a36Sopenharmony_ci	u32 signature;
230862306a36Sopenharmony_ci	u16 command;
230962306a36Sopenharmony_ci	u16 status;
231062306a36Sopenharmony_ci};
231162306a36Sopenharmony_ci
231262306a36Sopenharmony_ci/* Extended PCC Subspace Shared Memory Region (ACPI 6.2) */
231362306a36Sopenharmony_ci
231462306a36Sopenharmony_cistruct acpi_pcct_ext_pcc_shared_memory {
231562306a36Sopenharmony_ci	u32 signature;
231662306a36Sopenharmony_ci	u32 flags;
231762306a36Sopenharmony_ci	u32 length;
231862306a36Sopenharmony_ci	u32 command;
231962306a36Sopenharmony_ci};
232062306a36Sopenharmony_ci
232162306a36Sopenharmony_ci/*******************************************************************************
232262306a36Sopenharmony_ci *
232362306a36Sopenharmony_ci * PDTT - Platform Debug Trigger Table (ACPI 6.2)
232462306a36Sopenharmony_ci *        Version 0
232562306a36Sopenharmony_ci *
232662306a36Sopenharmony_ci ******************************************************************************/
232762306a36Sopenharmony_ci
232862306a36Sopenharmony_cistruct acpi_table_pdtt {
232962306a36Sopenharmony_ci	struct acpi_table_header header;	/* Common ACPI table header */
233062306a36Sopenharmony_ci	u8 trigger_count;
233162306a36Sopenharmony_ci	u8 reserved[3];
233262306a36Sopenharmony_ci	u32 array_offset;
233362306a36Sopenharmony_ci};
233462306a36Sopenharmony_ci
233562306a36Sopenharmony_ci/*
233662306a36Sopenharmony_ci * PDTT Communication Channel Identifier Structure.
233762306a36Sopenharmony_ci * The number of these structures is defined by trigger_count above,
233862306a36Sopenharmony_ci * starting at array_offset.
233962306a36Sopenharmony_ci */
234062306a36Sopenharmony_cistruct acpi_pdtt_channel {
234162306a36Sopenharmony_ci	u8 subchannel_id;
234262306a36Sopenharmony_ci	u8 flags;
234362306a36Sopenharmony_ci};
234462306a36Sopenharmony_ci
234562306a36Sopenharmony_ci/* Flags for above */
234662306a36Sopenharmony_ci
234762306a36Sopenharmony_ci#define ACPI_PDTT_RUNTIME_TRIGGER           (1)
234862306a36Sopenharmony_ci#define ACPI_PDTT_WAIT_COMPLETION           (1<<1)
234962306a36Sopenharmony_ci#define ACPI_PDTT_TRIGGER_ORDER             (1<<2)
235062306a36Sopenharmony_ci
235162306a36Sopenharmony_ci/*******************************************************************************
235262306a36Sopenharmony_ci *
235362306a36Sopenharmony_ci * PHAT - Platform Health Assessment Table (ACPI 6.4)
235462306a36Sopenharmony_ci *        Version 1
235562306a36Sopenharmony_ci *
235662306a36Sopenharmony_ci ******************************************************************************/
235762306a36Sopenharmony_ci
235862306a36Sopenharmony_cistruct acpi_table_phat {
235962306a36Sopenharmony_ci	struct acpi_table_header header;	/* Common ACPI table header */
236062306a36Sopenharmony_ci};
236162306a36Sopenharmony_ci
236262306a36Sopenharmony_ci/* Common header for PHAT subtables that follow main table */
236362306a36Sopenharmony_ci
236462306a36Sopenharmony_cistruct acpi_phat_header {
236562306a36Sopenharmony_ci	u16 type;
236662306a36Sopenharmony_ci	u16 length;
236762306a36Sopenharmony_ci	u8 revision;
236862306a36Sopenharmony_ci};
236962306a36Sopenharmony_ci
237062306a36Sopenharmony_ci/* Values for Type field above */
237162306a36Sopenharmony_ci
237262306a36Sopenharmony_ci#define ACPI_PHAT_TYPE_FW_VERSION_DATA  0
237362306a36Sopenharmony_ci#define ACPI_PHAT_TYPE_FW_HEALTH_DATA   1
237462306a36Sopenharmony_ci#define ACPI_PHAT_TYPE_RESERVED         2	/* 0x02-0xFFFF are reserved */
237562306a36Sopenharmony_ci
237662306a36Sopenharmony_ci/*
237762306a36Sopenharmony_ci * PHAT subtables, correspond to Type in struct acpi_phat_header
237862306a36Sopenharmony_ci */
237962306a36Sopenharmony_ci
238062306a36Sopenharmony_ci/* 0: Firmware Version Data Record */
238162306a36Sopenharmony_ci
238262306a36Sopenharmony_cistruct acpi_phat_version_data {
238362306a36Sopenharmony_ci	struct acpi_phat_header header;
238462306a36Sopenharmony_ci	u8 reserved[3];
238562306a36Sopenharmony_ci	u32 element_count;
238662306a36Sopenharmony_ci};
238762306a36Sopenharmony_ci
238862306a36Sopenharmony_cistruct acpi_phat_version_element {
238962306a36Sopenharmony_ci	u8 guid[16];
239062306a36Sopenharmony_ci	u64 version_value;
239162306a36Sopenharmony_ci	u32 producer_id;
239262306a36Sopenharmony_ci};
239362306a36Sopenharmony_ci
239462306a36Sopenharmony_ci/* 1: Firmware Health Data Record */
239562306a36Sopenharmony_ci
239662306a36Sopenharmony_cistruct acpi_phat_health_data {
239762306a36Sopenharmony_ci	struct acpi_phat_header header;
239862306a36Sopenharmony_ci	u8 reserved[2];
239962306a36Sopenharmony_ci	u8 health;
240062306a36Sopenharmony_ci	u8 device_guid[16];
240162306a36Sopenharmony_ci	u32 device_specific_offset;	/* Zero if no Device-specific data */
240262306a36Sopenharmony_ci};
240362306a36Sopenharmony_ci
240462306a36Sopenharmony_ci/* Values for Health field above */
240562306a36Sopenharmony_ci
240662306a36Sopenharmony_ci#define ACPI_PHAT_ERRORS_FOUND          0
240762306a36Sopenharmony_ci#define ACPI_PHAT_NO_ERRORS             1
240862306a36Sopenharmony_ci#define ACPI_PHAT_UNKNOWN_ERRORS        2
240962306a36Sopenharmony_ci#define ACPI_PHAT_ADVISORY              3
241062306a36Sopenharmony_ci
241162306a36Sopenharmony_ci/*******************************************************************************
241262306a36Sopenharmony_ci *
241362306a36Sopenharmony_ci * PMTT - Platform Memory Topology Table (ACPI 5.0)
241462306a36Sopenharmony_ci *        Version 1
241562306a36Sopenharmony_ci *
241662306a36Sopenharmony_ci ******************************************************************************/
241762306a36Sopenharmony_ci
241862306a36Sopenharmony_cistruct acpi_table_pmtt {
241962306a36Sopenharmony_ci	struct acpi_table_header header;	/* Common ACPI table header */
242062306a36Sopenharmony_ci	u32 memory_device_count;
242162306a36Sopenharmony_ci	/*
242262306a36Sopenharmony_ci	 * Immediately followed by:
242362306a36Sopenharmony_ci	 * MEMORY_DEVICE memory_device_struct[memory_device_count];
242462306a36Sopenharmony_ci	 */
242562306a36Sopenharmony_ci};
242662306a36Sopenharmony_ci
242762306a36Sopenharmony_ci/* Common header for PMTT subtables that follow main table */
242862306a36Sopenharmony_ci
242962306a36Sopenharmony_cistruct acpi_pmtt_header {
243062306a36Sopenharmony_ci	u8 type;
243162306a36Sopenharmony_ci	u8 reserved1;
243262306a36Sopenharmony_ci	u16 length;
243362306a36Sopenharmony_ci	u16 flags;
243462306a36Sopenharmony_ci	u16 reserved2;
243562306a36Sopenharmony_ci	u32 memory_device_count;	/* Zero means no memory device structs follow */
243662306a36Sopenharmony_ci	/*
243762306a36Sopenharmony_ci	 * Immediately followed by:
243862306a36Sopenharmony_ci	 * u8 type_specific_data[]
243962306a36Sopenharmony_ci	 * MEMORY_DEVICE memory_device_struct[memory_device_count];
244062306a36Sopenharmony_ci	 */
244162306a36Sopenharmony_ci};
244262306a36Sopenharmony_ci
244362306a36Sopenharmony_ci/* Values for Type field above */
244462306a36Sopenharmony_ci
244562306a36Sopenharmony_ci#define ACPI_PMTT_TYPE_SOCKET           0
244662306a36Sopenharmony_ci#define ACPI_PMTT_TYPE_CONTROLLER       1
244762306a36Sopenharmony_ci#define ACPI_PMTT_TYPE_DIMM             2
244862306a36Sopenharmony_ci#define ACPI_PMTT_TYPE_RESERVED         3	/* 0x03-0xFE are reserved */
244962306a36Sopenharmony_ci#define ACPI_PMTT_TYPE_VENDOR           0xFF
245062306a36Sopenharmony_ci
245162306a36Sopenharmony_ci/* Values for Flags field above */
245262306a36Sopenharmony_ci
245362306a36Sopenharmony_ci#define ACPI_PMTT_TOP_LEVEL             0x0001
245462306a36Sopenharmony_ci#define ACPI_PMTT_PHYSICAL              0x0002
245562306a36Sopenharmony_ci#define ACPI_PMTT_MEMORY_TYPE           0x000C
245662306a36Sopenharmony_ci
245762306a36Sopenharmony_ci/*
245862306a36Sopenharmony_ci * PMTT subtables, correspond to Type in struct acpi_pmtt_header
245962306a36Sopenharmony_ci */
246062306a36Sopenharmony_ci
246162306a36Sopenharmony_ci/* 0: Socket Structure */
246262306a36Sopenharmony_ci
246362306a36Sopenharmony_cistruct acpi_pmtt_socket {
246462306a36Sopenharmony_ci	struct acpi_pmtt_header header;
246562306a36Sopenharmony_ci	u16 socket_id;
246662306a36Sopenharmony_ci	u16 reserved;
246762306a36Sopenharmony_ci};
246862306a36Sopenharmony_ci	/*
246962306a36Sopenharmony_ci	 * Immediately followed by:
247062306a36Sopenharmony_ci	 * MEMORY_DEVICE memory_device_struct[memory_device_count];
247162306a36Sopenharmony_ci	 */
247262306a36Sopenharmony_ci
247362306a36Sopenharmony_ci/* 1: Memory Controller subtable */
247462306a36Sopenharmony_ci
247562306a36Sopenharmony_cistruct acpi_pmtt_controller {
247662306a36Sopenharmony_ci	struct acpi_pmtt_header header;
247762306a36Sopenharmony_ci	u16 controller_id;
247862306a36Sopenharmony_ci	u16 reserved;
247962306a36Sopenharmony_ci};
248062306a36Sopenharmony_ci	/*
248162306a36Sopenharmony_ci	 * Immediately followed by:
248262306a36Sopenharmony_ci	 * MEMORY_DEVICE memory_device_struct[memory_device_count];
248362306a36Sopenharmony_ci	 */
248462306a36Sopenharmony_ci
248562306a36Sopenharmony_ci/* 2: Physical Component Identifier (DIMM) */
248662306a36Sopenharmony_ci
248762306a36Sopenharmony_cistruct acpi_pmtt_physical_component {
248862306a36Sopenharmony_ci	struct acpi_pmtt_header header;
248962306a36Sopenharmony_ci	u32 bios_handle;
249062306a36Sopenharmony_ci};
249162306a36Sopenharmony_ci
249262306a36Sopenharmony_ci/* 0xFF: Vendor Specific Data */
249362306a36Sopenharmony_ci
249462306a36Sopenharmony_cistruct acpi_pmtt_vendor_specific {
249562306a36Sopenharmony_ci	struct acpi_pmtt_header header;
249662306a36Sopenharmony_ci	u8 type_uuid[16];
249762306a36Sopenharmony_ci	u8 specific[];
249862306a36Sopenharmony_ci	/*
249962306a36Sopenharmony_ci	 * Immediately followed by:
250062306a36Sopenharmony_ci	 * u8 vendor_specific_data[];
250162306a36Sopenharmony_ci	 * MEMORY_DEVICE memory_device_struct[memory_device_count];
250262306a36Sopenharmony_ci	 */
250362306a36Sopenharmony_ci};
250462306a36Sopenharmony_ci
250562306a36Sopenharmony_ci/*******************************************************************************
250662306a36Sopenharmony_ci *
250762306a36Sopenharmony_ci * PPTT - Processor Properties Topology Table (ACPI 6.2)
250862306a36Sopenharmony_ci *        Version 1
250962306a36Sopenharmony_ci *
251062306a36Sopenharmony_ci ******************************************************************************/
251162306a36Sopenharmony_ci
251262306a36Sopenharmony_cistruct acpi_table_pptt {
251362306a36Sopenharmony_ci	struct acpi_table_header header;	/* Common ACPI table header */
251462306a36Sopenharmony_ci};
251562306a36Sopenharmony_ci
251662306a36Sopenharmony_ci/* Values for Type field above */
251762306a36Sopenharmony_ci
251862306a36Sopenharmony_cienum acpi_pptt_type {
251962306a36Sopenharmony_ci	ACPI_PPTT_TYPE_PROCESSOR = 0,
252062306a36Sopenharmony_ci	ACPI_PPTT_TYPE_CACHE = 1,
252162306a36Sopenharmony_ci	ACPI_PPTT_TYPE_ID = 2,
252262306a36Sopenharmony_ci	ACPI_PPTT_TYPE_RESERVED = 3
252362306a36Sopenharmony_ci};
252462306a36Sopenharmony_ci
252562306a36Sopenharmony_ci/* 0: Processor Hierarchy Node Structure */
252662306a36Sopenharmony_ci
252762306a36Sopenharmony_cistruct acpi_pptt_processor {
252862306a36Sopenharmony_ci	struct acpi_subtable_header header;
252962306a36Sopenharmony_ci	u16 reserved;
253062306a36Sopenharmony_ci	u32 flags;
253162306a36Sopenharmony_ci	u32 parent;
253262306a36Sopenharmony_ci	u32 acpi_processor_id;
253362306a36Sopenharmony_ci	u32 number_of_priv_resources;
253462306a36Sopenharmony_ci};
253562306a36Sopenharmony_ci
253662306a36Sopenharmony_ci/* Flags */
253762306a36Sopenharmony_ci
253862306a36Sopenharmony_ci#define ACPI_PPTT_PHYSICAL_PACKAGE          (1)
253962306a36Sopenharmony_ci#define ACPI_PPTT_ACPI_PROCESSOR_ID_VALID   (1<<1)
254062306a36Sopenharmony_ci#define ACPI_PPTT_ACPI_PROCESSOR_IS_THREAD  (1<<2)	/* ACPI 6.3 */
254162306a36Sopenharmony_ci#define ACPI_PPTT_ACPI_LEAF_NODE            (1<<3)	/* ACPI 6.3 */
254262306a36Sopenharmony_ci#define ACPI_PPTT_ACPI_IDENTICAL            (1<<4)	/* ACPI 6.3 */
254362306a36Sopenharmony_ci
254462306a36Sopenharmony_ci/* 1: Cache Type Structure */
254562306a36Sopenharmony_ci
254662306a36Sopenharmony_cistruct acpi_pptt_cache {
254762306a36Sopenharmony_ci	struct acpi_subtable_header header;
254862306a36Sopenharmony_ci	u16 reserved;
254962306a36Sopenharmony_ci	u32 flags;
255062306a36Sopenharmony_ci	u32 next_level_of_cache;
255162306a36Sopenharmony_ci	u32 size;
255262306a36Sopenharmony_ci	u32 number_of_sets;
255362306a36Sopenharmony_ci	u8 associativity;
255462306a36Sopenharmony_ci	u8 attributes;
255562306a36Sopenharmony_ci	u16 line_size;
255662306a36Sopenharmony_ci};
255762306a36Sopenharmony_ci
255862306a36Sopenharmony_ci/* 1: Cache Type Structure for PPTT version 3 */
255962306a36Sopenharmony_ci
256062306a36Sopenharmony_cistruct acpi_pptt_cache_v1 {
256162306a36Sopenharmony_ci	u32 cache_id;
256262306a36Sopenharmony_ci};
256362306a36Sopenharmony_ci
256462306a36Sopenharmony_ci/* Flags */
256562306a36Sopenharmony_ci
256662306a36Sopenharmony_ci#define ACPI_PPTT_SIZE_PROPERTY_VALID       (1)	/* Physical property valid */
256762306a36Sopenharmony_ci#define ACPI_PPTT_NUMBER_OF_SETS_VALID      (1<<1)	/* Number of sets valid */
256862306a36Sopenharmony_ci#define ACPI_PPTT_ASSOCIATIVITY_VALID       (1<<2)	/* Associativity valid */
256962306a36Sopenharmony_ci#define ACPI_PPTT_ALLOCATION_TYPE_VALID     (1<<3)	/* Allocation type valid */
257062306a36Sopenharmony_ci#define ACPI_PPTT_CACHE_TYPE_VALID          (1<<4)	/* Cache type valid */
257162306a36Sopenharmony_ci#define ACPI_PPTT_WRITE_POLICY_VALID        (1<<5)	/* Write policy valid */
257262306a36Sopenharmony_ci#define ACPI_PPTT_LINE_SIZE_VALID           (1<<6)	/* Line size valid */
257362306a36Sopenharmony_ci#define ACPI_PPTT_CACHE_ID_VALID            (1<<7)	/* Cache ID valid */
257462306a36Sopenharmony_ci
257562306a36Sopenharmony_ci/* Masks for Attributes */
257662306a36Sopenharmony_ci
257762306a36Sopenharmony_ci#define ACPI_PPTT_MASK_ALLOCATION_TYPE      (0x03)	/* Allocation type */
257862306a36Sopenharmony_ci#define ACPI_PPTT_MASK_CACHE_TYPE           (0x0C)	/* Cache type */
257962306a36Sopenharmony_ci#define ACPI_PPTT_MASK_WRITE_POLICY         (0x10)	/* Write policy */
258062306a36Sopenharmony_ci
258162306a36Sopenharmony_ci/* Attributes describing cache */
258262306a36Sopenharmony_ci#define ACPI_PPTT_CACHE_READ_ALLOCATE       (0x0)	/* Cache line is allocated on read */
258362306a36Sopenharmony_ci#define ACPI_PPTT_CACHE_WRITE_ALLOCATE      (0x01)	/* Cache line is allocated on write */
258462306a36Sopenharmony_ci#define ACPI_PPTT_CACHE_RW_ALLOCATE         (0x02)	/* Cache line is allocated on read and write */
258562306a36Sopenharmony_ci#define ACPI_PPTT_CACHE_RW_ALLOCATE_ALT     (0x03)	/* Alternate representation of above */
258662306a36Sopenharmony_ci
258762306a36Sopenharmony_ci#define ACPI_PPTT_CACHE_TYPE_DATA           (0x0)	/* Data cache */
258862306a36Sopenharmony_ci#define ACPI_PPTT_CACHE_TYPE_INSTR          (1<<2)	/* Instruction cache */
258962306a36Sopenharmony_ci#define ACPI_PPTT_CACHE_TYPE_UNIFIED        (2<<2)	/* Unified I & D cache */
259062306a36Sopenharmony_ci#define ACPI_PPTT_CACHE_TYPE_UNIFIED_ALT    (3<<2)	/* Alternate representation of above */
259162306a36Sopenharmony_ci
259262306a36Sopenharmony_ci#define ACPI_PPTT_CACHE_POLICY_WB           (0x0)	/* Cache is write back */
259362306a36Sopenharmony_ci#define ACPI_PPTT_CACHE_POLICY_WT           (1<<4)	/* Cache is write through */
259462306a36Sopenharmony_ci
259562306a36Sopenharmony_ci/* 2: ID Structure */
259662306a36Sopenharmony_ci
259762306a36Sopenharmony_cistruct acpi_pptt_id {
259862306a36Sopenharmony_ci	struct acpi_subtable_header header;
259962306a36Sopenharmony_ci	u16 reserved;
260062306a36Sopenharmony_ci	u32 vendor_id;
260162306a36Sopenharmony_ci	u64 level1_id;
260262306a36Sopenharmony_ci	u64 level2_id;
260362306a36Sopenharmony_ci	u16 major_rev;
260462306a36Sopenharmony_ci	u16 minor_rev;
260562306a36Sopenharmony_ci	u16 spin_rev;
260662306a36Sopenharmony_ci};
260762306a36Sopenharmony_ci
260862306a36Sopenharmony_ci/*******************************************************************************
260962306a36Sopenharmony_ci *
261062306a36Sopenharmony_ci * PRMT - Platform Runtime Mechanism Table
261162306a36Sopenharmony_ci *        Version 1
261262306a36Sopenharmony_ci *
261362306a36Sopenharmony_ci ******************************************************************************/
261462306a36Sopenharmony_ci
261562306a36Sopenharmony_cistruct acpi_table_prmt {
261662306a36Sopenharmony_ci	struct acpi_table_header header;	/* Common ACPI table header */
261762306a36Sopenharmony_ci};
261862306a36Sopenharmony_ci
261962306a36Sopenharmony_cistruct acpi_table_prmt_header {
262062306a36Sopenharmony_ci	u8 platform_guid[16];
262162306a36Sopenharmony_ci	u32 module_info_offset;
262262306a36Sopenharmony_ci	u32 module_info_count;
262362306a36Sopenharmony_ci};
262462306a36Sopenharmony_ci
262562306a36Sopenharmony_cistruct acpi_prmt_module_header {
262662306a36Sopenharmony_ci	u16 revision;
262762306a36Sopenharmony_ci	u16 length;
262862306a36Sopenharmony_ci};
262962306a36Sopenharmony_ci
263062306a36Sopenharmony_cistruct acpi_prmt_module_info {
263162306a36Sopenharmony_ci	u16 revision;
263262306a36Sopenharmony_ci	u16 length;
263362306a36Sopenharmony_ci	u8 module_guid[16];
263462306a36Sopenharmony_ci	u16 major_rev;
263562306a36Sopenharmony_ci	u16 minor_rev;
263662306a36Sopenharmony_ci	u16 handler_info_count;
263762306a36Sopenharmony_ci	u32 handler_info_offset;
263862306a36Sopenharmony_ci	u64 mmio_list_pointer;
263962306a36Sopenharmony_ci};
264062306a36Sopenharmony_ci
264162306a36Sopenharmony_cistruct acpi_prmt_handler_info {
264262306a36Sopenharmony_ci	u16 revision;
264362306a36Sopenharmony_ci	u16 length;
264462306a36Sopenharmony_ci	u8 handler_guid[16];
264562306a36Sopenharmony_ci	u64 handler_address;
264662306a36Sopenharmony_ci	u64 static_data_buffer_address;
264762306a36Sopenharmony_ci	u64 acpi_param_buffer_address;
264862306a36Sopenharmony_ci};
264962306a36Sopenharmony_ci
265062306a36Sopenharmony_ci/*******************************************************************************
265162306a36Sopenharmony_ci *
265262306a36Sopenharmony_ci * RASF - RAS Feature Table (ACPI 5.0)
265362306a36Sopenharmony_ci *        Version 1
265462306a36Sopenharmony_ci *
265562306a36Sopenharmony_ci ******************************************************************************/
265662306a36Sopenharmony_ci
265762306a36Sopenharmony_cistruct acpi_table_rasf {
265862306a36Sopenharmony_ci	struct acpi_table_header header;	/* Common ACPI table header */
265962306a36Sopenharmony_ci	u8 channel_id[12];
266062306a36Sopenharmony_ci};
266162306a36Sopenharmony_ci
266262306a36Sopenharmony_ci/* RASF Platform Communication Channel Shared Memory Region */
266362306a36Sopenharmony_ci
266462306a36Sopenharmony_cistruct acpi_rasf_shared_memory {
266562306a36Sopenharmony_ci	u32 signature;
266662306a36Sopenharmony_ci	u16 command;
266762306a36Sopenharmony_ci	u16 status;
266862306a36Sopenharmony_ci	u16 version;
266962306a36Sopenharmony_ci	u8 capabilities[16];
267062306a36Sopenharmony_ci	u8 set_capabilities[16];
267162306a36Sopenharmony_ci	u16 num_parameter_blocks;
267262306a36Sopenharmony_ci	u32 set_capabilities_status;
267362306a36Sopenharmony_ci};
267462306a36Sopenharmony_ci
267562306a36Sopenharmony_ci/* RASF Parameter Block Structure Header */
267662306a36Sopenharmony_ci
267762306a36Sopenharmony_cistruct acpi_rasf_parameter_block {
267862306a36Sopenharmony_ci	u16 type;
267962306a36Sopenharmony_ci	u16 version;
268062306a36Sopenharmony_ci	u16 length;
268162306a36Sopenharmony_ci};
268262306a36Sopenharmony_ci
268362306a36Sopenharmony_ci/* RASF Parameter Block Structure for PATROL_SCRUB */
268462306a36Sopenharmony_ci
268562306a36Sopenharmony_cistruct acpi_rasf_patrol_scrub_parameter {
268662306a36Sopenharmony_ci	struct acpi_rasf_parameter_block header;
268762306a36Sopenharmony_ci	u16 patrol_scrub_command;
268862306a36Sopenharmony_ci	u64 requested_address_range[2];
268962306a36Sopenharmony_ci	u64 actual_address_range[2];
269062306a36Sopenharmony_ci	u16 flags;
269162306a36Sopenharmony_ci	u8 requested_speed;
269262306a36Sopenharmony_ci};
269362306a36Sopenharmony_ci
269462306a36Sopenharmony_ci/* Masks for Flags and Speed fields above */
269562306a36Sopenharmony_ci
269662306a36Sopenharmony_ci#define ACPI_RASF_SCRUBBER_RUNNING      1
269762306a36Sopenharmony_ci#define ACPI_RASF_SPEED                 (7<<1)
269862306a36Sopenharmony_ci#define ACPI_RASF_SPEED_SLOW            (0<<1)
269962306a36Sopenharmony_ci#define ACPI_RASF_SPEED_MEDIUM          (4<<1)
270062306a36Sopenharmony_ci#define ACPI_RASF_SPEED_FAST            (7<<1)
270162306a36Sopenharmony_ci
270262306a36Sopenharmony_ci/* Channel Commands */
270362306a36Sopenharmony_ci
270462306a36Sopenharmony_cienum acpi_rasf_commands {
270562306a36Sopenharmony_ci	ACPI_RASF_EXECUTE_RASF_COMMAND = 1
270662306a36Sopenharmony_ci};
270762306a36Sopenharmony_ci
270862306a36Sopenharmony_ci/* Platform RAS Capabilities */
270962306a36Sopenharmony_ci
271062306a36Sopenharmony_cienum acpi_rasf_capabiliities {
271162306a36Sopenharmony_ci	ACPI_HW_PATROL_SCRUB_SUPPORTED = 0,
271262306a36Sopenharmony_ci	ACPI_SW_PATROL_SCRUB_EXPOSED = 1
271362306a36Sopenharmony_ci};
271462306a36Sopenharmony_ci
271562306a36Sopenharmony_ci/* Patrol Scrub Commands */
271662306a36Sopenharmony_ci
271762306a36Sopenharmony_cienum acpi_rasf_patrol_scrub_commands {
271862306a36Sopenharmony_ci	ACPI_RASF_GET_PATROL_PARAMETERS = 1,
271962306a36Sopenharmony_ci	ACPI_RASF_START_PATROL_SCRUBBER = 2,
272062306a36Sopenharmony_ci	ACPI_RASF_STOP_PATROL_SCRUBBER = 3
272162306a36Sopenharmony_ci};
272262306a36Sopenharmony_ci
272362306a36Sopenharmony_ci/* Channel Command flags */
272462306a36Sopenharmony_ci
272562306a36Sopenharmony_ci#define ACPI_RASF_GENERATE_SCI          (1<<15)
272662306a36Sopenharmony_ci
272762306a36Sopenharmony_ci/* Status values */
272862306a36Sopenharmony_ci
272962306a36Sopenharmony_cienum acpi_rasf_status {
273062306a36Sopenharmony_ci	ACPI_RASF_SUCCESS = 0,
273162306a36Sopenharmony_ci	ACPI_RASF_NOT_VALID = 1,
273262306a36Sopenharmony_ci	ACPI_RASF_NOT_SUPPORTED = 2,
273362306a36Sopenharmony_ci	ACPI_RASF_BUSY = 3,
273462306a36Sopenharmony_ci	ACPI_RASF_FAILED = 4,
273562306a36Sopenharmony_ci	ACPI_RASF_ABORTED = 5,
273662306a36Sopenharmony_ci	ACPI_RASF_INVALID_DATA = 6
273762306a36Sopenharmony_ci};
273862306a36Sopenharmony_ci
273962306a36Sopenharmony_ci/* Status flags */
274062306a36Sopenharmony_ci
274162306a36Sopenharmony_ci#define ACPI_RASF_COMMAND_COMPLETE      (1)
274262306a36Sopenharmony_ci#define ACPI_RASF_SCI_DOORBELL          (1<<1)
274362306a36Sopenharmony_ci#define ACPI_RASF_ERROR                 (1<<2)
274462306a36Sopenharmony_ci#define ACPI_RASF_STATUS                (0x1F<<3)
274562306a36Sopenharmony_ci
274662306a36Sopenharmony_ci/*******************************************************************************
274762306a36Sopenharmony_ci *
274862306a36Sopenharmony_ci * RGRT - Regulatory Graphics Resource Table
274962306a36Sopenharmony_ci *        Version 1
275062306a36Sopenharmony_ci *
275162306a36Sopenharmony_ci * Conforms to "ACPI RGRT" available at:
275262306a36Sopenharmony_ci * https://microsoft.github.io/mu/dyn/mu_plus/ms_core_pkg/acpi_RGRT/feature_acpi_rgrt/
275362306a36Sopenharmony_ci *
275462306a36Sopenharmony_ci ******************************************************************************/
275562306a36Sopenharmony_ci
275662306a36Sopenharmony_cistruct acpi_table_rgrt {
275762306a36Sopenharmony_ci	struct acpi_table_header header;	/* Common ACPI table header */
275862306a36Sopenharmony_ci	u16 version;
275962306a36Sopenharmony_ci	u8 image_type;
276062306a36Sopenharmony_ci	u8 reserved;
276162306a36Sopenharmony_ci	u8 image[];
276262306a36Sopenharmony_ci};
276362306a36Sopenharmony_ci
276462306a36Sopenharmony_ci/* image_type values */
276562306a36Sopenharmony_ci
276662306a36Sopenharmony_cienum acpi_rgrt_image_type {
276762306a36Sopenharmony_ci	ACPI_RGRT_TYPE_RESERVED0 = 0,
276862306a36Sopenharmony_ci	ACPI_RGRT_IMAGE_TYPE_PNG = 1,
276962306a36Sopenharmony_ci	ACPI_RGRT_TYPE_RESERVED = 2	/* 2 and greater are reserved */
277062306a36Sopenharmony_ci};
277162306a36Sopenharmony_ci
277262306a36Sopenharmony_ci/*******************************************************************************
277362306a36Sopenharmony_ci *
277462306a36Sopenharmony_ci * RHCT - RISC-V Hart Capabilities Table
277562306a36Sopenharmony_ci *        Version 1
277662306a36Sopenharmony_ci *
277762306a36Sopenharmony_ci ******************************************************************************/
277862306a36Sopenharmony_ci
277962306a36Sopenharmony_cistruct acpi_table_rhct {
278062306a36Sopenharmony_ci	struct acpi_table_header header;	/* Common ACPI table header */
278162306a36Sopenharmony_ci	u32 flags;		/* RHCT flags */
278262306a36Sopenharmony_ci	u64 time_base_freq;
278362306a36Sopenharmony_ci	u32 node_count;
278462306a36Sopenharmony_ci	u32 node_offset;
278562306a36Sopenharmony_ci};
278662306a36Sopenharmony_ci
278762306a36Sopenharmony_ci/* RHCT Flags */
278862306a36Sopenharmony_ci
278962306a36Sopenharmony_ci#define ACPI_RHCT_TIMER_CANNOT_WAKEUP_CPU       (1)
279062306a36Sopenharmony_ci/*
279162306a36Sopenharmony_ci * RHCT subtables
279262306a36Sopenharmony_ci */
279362306a36Sopenharmony_cistruct acpi_rhct_node_header {
279462306a36Sopenharmony_ci	u16 type;
279562306a36Sopenharmony_ci	u16 length;
279662306a36Sopenharmony_ci	u16 revision;
279762306a36Sopenharmony_ci};
279862306a36Sopenharmony_ci
279962306a36Sopenharmony_ci/* Values for RHCT subtable Type above */
280062306a36Sopenharmony_ci
280162306a36Sopenharmony_cienum acpi_rhct_node_type {
280262306a36Sopenharmony_ci	ACPI_RHCT_NODE_TYPE_ISA_STRING = 0x0000,
280362306a36Sopenharmony_ci	ACPI_RHCT_NODE_TYPE_CMO = 0x0001,
280462306a36Sopenharmony_ci	ACPI_RHCT_NODE_TYPE_MMU = 0x0002,
280562306a36Sopenharmony_ci	ACPI_RHCT_NODE_TYPE_RESERVED = 0x0003,
280662306a36Sopenharmony_ci	ACPI_RHCT_NODE_TYPE_HART_INFO = 0xFFFF,
280762306a36Sopenharmony_ci};
280862306a36Sopenharmony_ci
280962306a36Sopenharmony_ci/*
281062306a36Sopenharmony_ci * RHCT node specific subtables
281162306a36Sopenharmony_ci */
281262306a36Sopenharmony_ci
281362306a36Sopenharmony_ci/* ISA string node structure */
281462306a36Sopenharmony_cistruct acpi_rhct_isa_string {
281562306a36Sopenharmony_ci	u16 isa_length;
281662306a36Sopenharmony_ci	char isa[];
281762306a36Sopenharmony_ci};
281862306a36Sopenharmony_ci
281962306a36Sopenharmony_cistruct acpi_rhct_cmo_node {
282062306a36Sopenharmony_ci	u8 reserved;		/* Must be zero */
282162306a36Sopenharmony_ci	u8 cbom_size;		/* CBOM size in powerof 2 */
282262306a36Sopenharmony_ci	u8 cbop_size;		/* CBOP size in powerof 2 */
282362306a36Sopenharmony_ci	u8 cboz_size;		/* CBOZ size in powerof 2 */
282462306a36Sopenharmony_ci};
282562306a36Sopenharmony_ci
282662306a36Sopenharmony_cistruct acpi_rhct_mmu_node {
282762306a36Sopenharmony_ci	u8 reserved;		/* Must be zero */
282862306a36Sopenharmony_ci	u8 mmu_type;		/* Virtual Address Scheme */
282962306a36Sopenharmony_ci};
283062306a36Sopenharmony_ci
283162306a36Sopenharmony_cienum acpi_rhct_mmu_type {
283262306a36Sopenharmony_ci	ACPI_RHCT_MMU_TYPE_SV39 = 0,
283362306a36Sopenharmony_ci	ACPI_RHCT_MMU_TYPE_SV48 = 1,
283462306a36Sopenharmony_ci	ACPI_RHCT_MMU_TYPE_SV57 = 2
283562306a36Sopenharmony_ci};
283662306a36Sopenharmony_ci
283762306a36Sopenharmony_ci/* Hart Info node structure */
283862306a36Sopenharmony_cistruct acpi_rhct_hart_info {
283962306a36Sopenharmony_ci	u16 num_offsets;
284062306a36Sopenharmony_ci	u32 uid;		/* ACPI processor UID */
284162306a36Sopenharmony_ci};
284262306a36Sopenharmony_ci
284362306a36Sopenharmony_ci/*******************************************************************************
284462306a36Sopenharmony_ci *
284562306a36Sopenharmony_ci * SBST - Smart Battery Specification Table
284662306a36Sopenharmony_ci *        Version 1
284762306a36Sopenharmony_ci *
284862306a36Sopenharmony_ci ******************************************************************************/
284962306a36Sopenharmony_ci
285062306a36Sopenharmony_cistruct acpi_table_sbst {
285162306a36Sopenharmony_ci	struct acpi_table_header header;	/* Common ACPI table header */
285262306a36Sopenharmony_ci	u32 warning_level;
285362306a36Sopenharmony_ci	u32 low_level;
285462306a36Sopenharmony_ci	u32 critical_level;
285562306a36Sopenharmony_ci};
285662306a36Sopenharmony_ci
285762306a36Sopenharmony_ci/*******************************************************************************
285862306a36Sopenharmony_ci *
285962306a36Sopenharmony_ci * SDEI - Software Delegated Exception Interface Descriptor Table
286062306a36Sopenharmony_ci *
286162306a36Sopenharmony_ci * Conforms to "Software Delegated Exception Interface (SDEI)" ARM DEN0054A,
286262306a36Sopenharmony_ci * May 8th, 2017. Copyright 2017 ARM Ltd.
286362306a36Sopenharmony_ci *
286462306a36Sopenharmony_ci ******************************************************************************/
286562306a36Sopenharmony_ci
286662306a36Sopenharmony_cistruct acpi_table_sdei {
286762306a36Sopenharmony_ci	struct acpi_table_header header;	/* Common ACPI table header */
286862306a36Sopenharmony_ci};
286962306a36Sopenharmony_ci
287062306a36Sopenharmony_ci/*******************************************************************************
287162306a36Sopenharmony_ci *
287262306a36Sopenharmony_ci * SDEV - Secure Devices Table (ACPI 6.2)
287362306a36Sopenharmony_ci *        Version 1
287462306a36Sopenharmony_ci *
287562306a36Sopenharmony_ci ******************************************************************************/
287662306a36Sopenharmony_ci
287762306a36Sopenharmony_cistruct acpi_table_sdev {
287862306a36Sopenharmony_ci	struct acpi_table_header header;	/* Common ACPI table header */
287962306a36Sopenharmony_ci};
288062306a36Sopenharmony_ci
288162306a36Sopenharmony_cistruct acpi_sdev_header {
288262306a36Sopenharmony_ci	u8 type;
288362306a36Sopenharmony_ci	u8 flags;
288462306a36Sopenharmony_ci	u16 length;
288562306a36Sopenharmony_ci};
288662306a36Sopenharmony_ci
288762306a36Sopenharmony_ci/* Values for subtable type above */
288862306a36Sopenharmony_ci
288962306a36Sopenharmony_cienum acpi_sdev_type {
289062306a36Sopenharmony_ci	ACPI_SDEV_TYPE_NAMESPACE_DEVICE = 0,
289162306a36Sopenharmony_ci	ACPI_SDEV_TYPE_PCIE_ENDPOINT_DEVICE = 1,
289262306a36Sopenharmony_ci	ACPI_SDEV_TYPE_RESERVED = 2	/* 2 and greater are reserved */
289362306a36Sopenharmony_ci};
289462306a36Sopenharmony_ci
289562306a36Sopenharmony_ci/* Values for flags above */
289662306a36Sopenharmony_ci
289762306a36Sopenharmony_ci#define ACPI_SDEV_HANDOFF_TO_UNSECURE_OS    (1)
289862306a36Sopenharmony_ci#define ACPI_SDEV_SECURE_COMPONENTS_PRESENT (1<<1)
289962306a36Sopenharmony_ci
290062306a36Sopenharmony_ci/*
290162306a36Sopenharmony_ci * SDEV subtables
290262306a36Sopenharmony_ci */
290362306a36Sopenharmony_ci
290462306a36Sopenharmony_ci/* 0: Namespace Device Based Secure Device Structure */
290562306a36Sopenharmony_ci
290662306a36Sopenharmony_cistruct acpi_sdev_namespace {
290762306a36Sopenharmony_ci	struct acpi_sdev_header header;
290862306a36Sopenharmony_ci	u16 device_id_offset;
290962306a36Sopenharmony_ci	u16 device_id_length;
291062306a36Sopenharmony_ci	u16 vendor_data_offset;
291162306a36Sopenharmony_ci	u16 vendor_data_length;
291262306a36Sopenharmony_ci};
291362306a36Sopenharmony_ci
291462306a36Sopenharmony_cistruct acpi_sdev_secure_component {
291562306a36Sopenharmony_ci	u16 secure_component_offset;
291662306a36Sopenharmony_ci	u16 secure_component_length;
291762306a36Sopenharmony_ci};
291862306a36Sopenharmony_ci
291962306a36Sopenharmony_ci/*
292062306a36Sopenharmony_ci * SDEV sub-subtables ("Components") for above
292162306a36Sopenharmony_ci */
292262306a36Sopenharmony_cistruct acpi_sdev_component {
292362306a36Sopenharmony_ci	struct acpi_sdev_header header;
292462306a36Sopenharmony_ci};
292562306a36Sopenharmony_ci
292662306a36Sopenharmony_ci/* Values for sub-subtable type above */
292762306a36Sopenharmony_ci
292862306a36Sopenharmony_cienum acpi_sac_type {
292962306a36Sopenharmony_ci	ACPI_SDEV_TYPE_ID_COMPONENT = 0,
293062306a36Sopenharmony_ci	ACPI_SDEV_TYPE_MEM_COMPONENT = 1
293162306a36Sopenharmony_ci};
293262306a36Sopenharmony_ci
293362306a36Sopenharmony_cistruct acpi_sdev_id_component {
293462306a36Sopenharmony_ci	struct acpi_sdev_header header;
293562306a36Sopenharmony_ci	u16 hardware_id_offset;
293662306a36Sopenharmony_ci	u16 hardware_id_length;
293762306a36Sopenharmony_ci	u16 subsystem_id_offset;
293862306a36Sopenharmony_ci	u16 subsystem_id_length;
293962306a36Sopenharmony_ci	u16 hardware_revision;
294062306a36Sopenharmony_ci	u8 hardware_rev_present;
294162306a36Sopenharmony_ci	u8 class_code_present;
294262306a36Sopenharmony_ci	u8 pci_base_class;
294362306a36Sopenharmony_ci	u8 pci_sub_class;
294462306a36Sopenharmony_ci	u8 pci_programming_xface;
294562306a36Sopenharmony_ci};
294662306a36Sopenharmony_ci
294762306a36Sopenharmony_cistruct acpi_sdev_mem_component {
294862306a36Sopenharmony_ci	struct acpi_sdev_header header;
294962306a36Sopenharmony_ci	u32 reserved;
295062306a36Sopenharmony_ci	u64 memory_base_address;
295162306a36Sopenharmony_ci	u64 memory_length;
295262306a36Sopenharmony_ci};
295362306a36Sopenharmony_ci
295462306a36Sopenharmony_ci/* 1: PCIe Endpoint Device Based Device Structure */
295562306a36Sopenharmony_ci
295662306a36Sopenharmony_cistruct acpi_sdev_pcie {
295762306a36Sopenharmony_ci	struct acpi_sdev_header header;
295862306a36Sopenharmony_ci	u16 segment;
295962306a36Sopenharmony_ci	u16 start_bus;
296062306a36Sopenharmony_ci	u16 path_offset;
296162306a36Sopenharmony_ci	u16 path_length;
296262306a36Sopenharmony_ci	u16 vendor_data_offset;
296362306a36Sopenharmony_ci	u16 vendor_data_length;
296462306a36Sopenharmony_ci};
296562306a36Sopenharmony_ci
296662306a36Sopenharmony_ci/* 1a: PCIe Endpoint path entry */
296762306a36Sopenharmony_ci
296862306a36Sopenharmony_cistruct acpi_sdev_pcie_path {
296962306a36Sopenharmony_ci	u8 device;
297062306a36Sopenharmony_ci	u8 function;
297162306a36Sopenharmony_ci};
297262306a36Sopenharmony_ci
297362306a36Sopenharmony_ci/*******************************************************************************
297462306a36Sopenharmony_ci *
297562306a36Sopenharmony_ci * SVKL - Storage Volume Key Location Table (ACPI 6.4)
297662306a36Sopenharmony_ci *        From: "Guest-Host-Communication Interface (GHCI) for Intel
297762306a36Sopenharmony_ci *        Trust Domain Extensions (Intel TDX)".
297862306a36Sopenharmony_ci *        Version 1
297962306a36Sopenharmony_ci *
298062306a36Sopenharmony_ci ******************************************************************************/
298162306a36Sopenharmony_ci
298262306a36Sopenharmony_cistruct acpi_table_svkl {
298362306a36Sopenharmony_ci	struct acpi_table_header header;	/* Common ACPI table header */
298462306a36Sopenharmony_ci	u32 count;
298562306a36Sopenharmony_ci};
298662306a36Sopenharmony_ci
298762306a36Sopenharmony_cistruct acpi_svkl_key {
298862306a36Sopenharmony_ci	u16 type;
298962306a36Sopenharmony_ci	u16 format;
299062306a36Sopenharmony_ci	u32 size;
299162306a36Sopenharmony_ci	u64 address;
299262306a36Sopenharmony_ci};
299362306a36Sopenharmony_ci
299462306a36Sopenharmony_cienum acpi_svkl_type {
299562306a36Sopenharmony_ci	ACPI_SVKL_TYPE_MAIN_STORAGE = 0,
299662306a36Sopenharmony_ci	ACPI_SVKL_TYPE_RESERVED = 1	/* 1 and greater are reserved */
299762306a36Sopenharmony_ci};
299862306a36Sopenharmony_ci
299962306a36Sopenharmony_cienum acpi_svkl_format {
300062306a36Sopenharmony_ci	ACPI_SVKL_FORMAT_RAW_BINARY = 0,
300162306a36Sopenharmony_ci	ACPI_SVKL_FORMAT_RESERVED = 1	/* 1 and greater are reserved */
300262306a36Sopenharmony_ci};
300362306a36Sopenharmony_ci
300462306a36Sopenharmony_ci/*******************************************************************************
300562306a36Sopenharmony_ci *
300662306a36Sopenharmony_ci * TDEL - TD-Event Log
300762306a36Sopenharmony_ci *        From: "Guest-Host-Communication Interface (GHCI) for Intel
300862306a36Sopenharmony_ci *        Trust Domain Extensions (Intel TDX)".
300962306a36Sopenharmony_ci *        September 2020
301062306a36Sopenharmony_ci *
301162306a36Sopenharmony_ci ******************************************************************************/
301262306a36Sopenharmony_ci
301362306a36Sopenharmony_cistruct acpi_table_tdel {
301462306a36Sopenharmony_ci	struct acpi_table_header header;	/* Common ACPI table header */
301562306a36Sopenharmony_ci	u32 reserved;
301662306a36Sopenharmony_ci	u64 log_area_minimum_length;
301762306a36Sopenharmony_ci	u64 log_area_start_address;
301862306a36Sopenharmony_ci};
301962306a36Sopenharmony_ci
302062306a36Sopenharmony_ci/* Reset to default packing */
302162306a36Sopenharmony_ci
302262306a36Sopenharmony_ci#pragma pack()
302362306a36Sopenharmony_ci
302462306a36Sopenharmony_ci#endif				/* __ACTBL2_H__ */
3025