18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: BSD-3-Clause OR GPL-2.0 */
28c2ecf20Sopenharmony_ci/******************************************************************************
38c2ecf20Sopenharmony_ci *
48c2ecf20Sopenharmony_ci * Name: actbl2.h - ACPI Table Definitions (tables not in ACPI spec)
58c2ecf20Sopenharmony_ci *
68c2ecf20Sopenharmony_ci * Copyright (C) 2000 - 2020, Intel Corp.
78c2ecf20Sopenharmony_ci *
88c2ecf20Sopenharmony_ci *****************************************************************************/
98c2ecf20Sopenharmony_ci
108c2ecf20Sopenharmony_ci#ifndef __ACTBL2_H__
118c2ecf20Sopenharmony_ci#define __ACTBL2_H__
128c2ecf20Sopenharmony_ci
138c2ecf20Sopenharmony_ci/*******************************************************************************
148c2ecf20Sopenharmony_ci *
158c2ecf20Sopenharmony_ci * Additional ACPI Tables (2)
168c2ecf20Sopenharmony_ci *
178c2ecf20Sopenharmony_ci * These tables are not consumed directly by the ACPICA subsystem, but are
188c2ecf20Sopenharmony_ci * included here to support device drivers and the AML disassembler.
198c2ecf20Sopenharmony_ci *
208c2ecf20Sopenharmony_ci ******************************************************************************/
218c2ecf20Sopenharmony_ci
228c2ecf20Sopenharmony_ci/*
238c2ecf20Sopenharmony_ci * Values for description table header signatures for tables defined in this
248c2ecf20Sopenharmony_ci * file. Useful because they make it more difficult to inadvertently type in
258c2ecf20Sopenharmony_ci * the wrong signature.
268c2ecf20Sopenharmony_ci */
278c2ecf20Sopenharmony_ci#define ACPI_SIG_IORT           "IORT"	/* IO Remapping Table */
288c2ecf20Sopenharmony_ci#define ACPI_SIG_IVRS           "IVRS"	/* I/O Virtualization Reporting Structure */
298c2ecf20Sopenharmony_ci#define ACPI_SIG_LPIT           "LPIT"	/* Low Power Idle Table */
308c2ecf20Sopenharmony_ci#define ACPI_SIG_MADT           "APIC"	/* Multiple APIC Description Table */
318c2ecf20Sopenharmony_ci#define ACPI_SIG_MCFG           "MCFG"	/* PCI Memory Mapped Configuration table */
328c2ecf20Sopenharmony_ci#define ACPI_SIG_MCHI           "MCHI"	/* Management Controller Host Interface table */
338c2ecf20Sopenharmony_ci#define ACPI_SIG_MPST           "MPST"	/* Memory Power State Table */
348c2ecf20Sopenharmony_ci#define ACPI_SIG_MSCT           "MSCT"	/* Maximum System Characteristics Table */
358c2ecf20Sopenharmony_ci#define ACPI_SIG_MSDM           "MSDM"	/* Microsoft Data Management Table */
368c2ecf20Sopenharmony_ci#define ACPI_SIG_MTMR           "MTMR"	/* MID Timer table */
378c2ecf20Sopenharmony_ci#define ACPI_SIG_NFIT           "NFIT"	/* NVDIMM Firmware Interface Table */
388c2ecf20Sopenharmony_ci#define ACPI_SIG_PCCT           "PCCT"	/* Platform Communications Channel Table */
398c2ecf20Sopenharmony_ci#define ACPI_SIG_PDTT           "PDTT"	/* Platform Debug Trigger Table */
408c2ecf20Sopenharmony_ci#define ACPI_SIG_PMTT           "PMTT"	/* Platform Memory Topology Table */
418c2ecf20Sopenharmony_ci#define ACPI_SIG_PPTT           "PPTT"	/* Processor Properties Topology Table */
428c2ecf20Sopenharmony_ci#define ACPI_SIG_RASF           "RASF"	/* RAS Feature table */
438c2ecf20Sopenharmony_ci#define ACPI_SIG_SBST           "SBST"	/* Smart Battery Specification Table */
448c2ecf20Sopenharmony_ci#define ACPI_SIG_SDEI           "SDEI"	/* Software Delegated Exception Interface Table */
458c2ecf20Sopenharmony_ci#define ACPI_SIG_SDEV           "SDEV"	/* Secure Devices table */
468c2ecf20Sopenharmony_ci#define ACPI_SIG_NHLT           "NHLT"	/* Non-HDAudio Link Table */
478c2ecf20Sopenharmony_ci
488c2ecf20Sopenharmony_ci/*
498c2ecf20Sopenharmony_ci * All tables must be byte-packed to match the ACPI specification, since
508c2ecf20Sopenharmony_ci * the tables are provided by the system BIOS.
518c2ecf20Sopenharmony_ci */
528c2ecf20Sopenharmony_ci#pragma pack(1)
538c2ecf20Sopenharmony_ci
548c2ecf20Sopenharmony_ci/*
558c2ecf20Sopenharmony_ci * Note: C bitfields are not used for this reason:
568c2ecf20Sopenharmony_ci *
578c2ecf20Sopenharmony_ci * "Bitfields are great and easy to read, but unfortunately the C language
588c2ecf20Sopenharmony_ci * does not specify the layout of bitfields in memory, which means they are
598c2ecf20Sopenharmony_ci * essentially useless for dealing with packed data in on-disk formats or
608c2ecf20Sopenharmony_ci * binary wire protocols." (Or ACPI tables and buffers.) "If you ask me,
618c2ecf20Sopenharmony_ci * this decision was a design error in C. Ritchie could have picked an order
628c2ecf20Sopenharmony_ci * and stuck with it." Norman Ramsey.
638c2ecf20Sopenharmony_ci * See http://stackoverflow.com/a/1053662/41661
648c2ecf20Sopenharmony_ci */
658c2ecf20Sopenharmony_ci
668c2ecf20Sopenharmony_ci/*******************************************************************************
678c2ecf20Sopenharmony_ci *
688c2ecf20Sopenharmony_ci * IORT - IO Remapping Table
698c2ecf20Sopenharmony_ci *
708c2ecf20Sopenharmony_ci * Conforms to "IO Remapping Table System Software on ARM Platforms",
718c2ecf20Sopenharmony_ci * Document number: ARM DEN 0049D, March 2018
728c2ecf20Sopenharmony_ci *
738c2ecf20Sopenharmony_ci ******************************************************************************/
748c2ecf20Sopenharmony_ci
758c2ecf20Sopenharmony_cistruct acpi_table_iort {
768c2ecf20Sopenharmony_ci	struct acpi_table_header header;
778c2ecf20Sopenharmony_ci	u32 node_count;
788c2ecf20Sopenharmony_ci	u32 node_offset;
798c2ecf20Sopenharmony_ci	u32 reserved;
808c2ecf20Sopenharmony_ci};
818c2ecf20Sopenharmony_ci
828c2ecf20Sopenharmony_ci/*
838c2ecf20Sopenharmony_ci * IORT subtables
848c2ecf20Sopenharmony_ci */
858c2ecf20Sopenharmony_cistruct acpi_iort_node {
868c2ecf20Sopenharmony_ci	u8 type;
878c2ecf20Sopenharmony_ci	u16 length;
888c2ecf20Sopenharmony_ci	u8 revision;
898c2ecf20Sopenharmony_ci	u32 reserved;
908c2ecf20Sopenharmony_ci	u32 mapping_count;
918c2ecf20Sopenharmony_ci	u32 mapping_offset;
928c2ecf20Sopenharmony_ci	char node_data[1];
938c2ecf20Sopenharmony_ci};
948c2ecf20Sopenharmony_ci
958c2ecf20Sopenharmony_ci/* Values for subtable Type above */
968c2ecf20Sopenharmony_ci
978c2ecf20Sopenharmony_cienum acpi_iort_node_type {
988c2ecf20Sopenharmony_ci	ACPI_IORT_NODE_ITS_GROUP = 0x00,
998c2ecf20Sopenharmony_ci	ACPI_IORT_NODE_NAMED_COMPONENT = 0x01,
1008c2ecf20Sopenharmony_ci	ACPI_IORT_NODE_PCI_ROOT_COMPLEX = 0x02,
1018c2ecf20Sopenharmony_ci	ACPI_IORT_NODE_SMMU = 0x03,
1028c2ecf20Sopenharmony_ci	ACPI_IORT_NODE_SMMU_V3 = 0x04,
1038c2ecf20Sopenharmony_ci	ACPI_IORT_NODE_PMCG = 0x05
1048c2ecf20Sopenharmony_ci};
1058c2ecf20Sopenharmony_ci
1068c2ecf20Sopenharmony_cistruct acpi_iort_id_mapping {
1078c2ecf20Sopenharmony_ci	u32 input_base;		/* Lowest value in input range */
1088c2ecf20Sopenharmony_ci	u32 id_count;		/* Number of IDs */
1098c2ecf20Sopenharmony_ci	u32 output_base;	/* Lowest value in output range */
1108c2ecf20Sopenharmony_ci	u32 output_reference;	/* A reference to the output node */
1118c2ecf20Sopenharmony_ci	u32 flags;
1128c2ecf20Sopenharmony_ci};
1138c2ecf20Sopenharmony_ci
1148c2ecf20Sopenharmony_ci/* Masks for Flags field above for IORT subtable */
1158c2ecf20Sopenharmony_ci
1168c2ecf20Sopenharmony_ci#define ACPI_IORT_ID_SINGLE_MAPPING (1)
1178c2ecf20Sopenharmony_ci
1188c2ecf20Sopenharmony_cistruct acpi_iort_memory_access {
1198c2ecf20Sopenharmony_ci	u32 cache_coherency;
1208c2ecf20Sopenharmony_ci	u8 hints;
1218c2ecf20Sopenharmony_ci	u16 reserved;
1228c2ecf20Sopenharmony_ci	u8 memory_flags;
1238c2ecf20Sopenharmony_ci};
1248c2ecf20Sopenharmony_ci
1258c2ecf20Sopenharmony_ci/* Values for cache_coherency field above */
1268c2ecf20Sopenharmony_ci
1278c2ecf20Sopenharmony_ci#define ACPI_IORT_NODE_COHERENT         0x00000001	/* The device node is fully coherent */
1288c2ecf20Sopenharmony_ci#define ACPI_IORT_NODE_NOT_COHERENT     0x00000000	/* The device node is not coherent */
1298c2ecf20Sopenharmony_ci
1308c2ecf20Sopenharmony_ci/* Masks for Hints field above */
1318c2ecf20Sopenharmony_ci
1328c2ecf20Sopenharmony_ci#define ACPI_IORT_HT_TRANSIENT          (1)
1338c2ecf20Sopenharmony_ci#define ACPI_IORT_HT_WRITE              (1<<1)
1348c2ecf20Sopenharmony_ci#define ACPI_IORT_HT_READ               (1<<2)
1358c2ecf20Sopenharmony_ci#define ACPI_IORT_HT_OVERRIDE           (1<<3)
1368c2ecf20Sopenharmony_ci
1378c2ecf20Sopenharmony_ci/* Masks for memory_flags field above */
1388c2ecf20Sopenharmony_ci
1398c2ecf20Sopenharmony_ci#define ACPI_IORT_MF_COHERENCY          (1)
1408c2ecf20Sopenharmony_ci#define ACPI_IORT_MF_ATTRIBUTES         (1<<1)
1418c2ecf20Sopenharmony_ci
1428c2ecf20Sopenharmony_ci/*
1438c2ecf20Sopenharmony_ci * IORT node specific subtables
1448c2ecf20Sopenharmony_ci */
1458c2ecf20Sopenharmony_cistruct acpi_iort_its_group {
1468c2ecf20Sopenharmony_ci	u32 its_count;
1478c2ecf20Sopenharmony_ci	u32 identifiers[1];	/* GIC ITS identifier array */
1488c2ecf20Sopenharmony_ci};
1498c2ecf20Sopenharmony_ci
1508c2ecf20Sopenharmony_cistruct acpi_iort_named_component {
1518c2ecf20Sopenharmony_ci	u32 node_flags;
1528c2ecf20Sopenharmony_ci	u64 memory_properties;	/* Memory access properties */
1538c2ecf20Sopenharmony_ci	u8 memory_address_limit;	/* Memory address size limit */
1548c2ecf20Sopenharmony_ci	char device_name[1];	/* Path of namespace object */
1558c2ecf20Sopenharmony_ci};
1568c2ecf20Sopenharmony_ci
1578c2ecf20Sopenharmony_ci/* Masks for Flags field above */
1588c2ecf20Sopenharmony_ci
1598c2ecf20Sopenharmony_ci#define ACPI_IORT_NC_STALL_SUPPORTED    (1)
1608c2ecf20Sopenharmony_ci#define ACPI_IORT_NC_PASID_BITS         (31<<1)
1618c2ecf20Sopenharmony_ci
1628c2ecf20Sopenharmony_cistruct acpi_iort_root_complex {
1638c2ecf20Sopenharmony_ci	u64 memory_properties;	/* Memory access properties */
1648c2ecf20Sopenharmony_ci	u32 ats_attribute;
1658c2ecf20Sopenharmony_ci	u32 pci_segment_number;
1668c2ecf20Sopenharmony_ci	u8 memory_address_limit;	/* Memory address size limit */
1678c2ecf20Sopenharmony_ci	u8 reserved[3];		/* Reserved, must be zero */
1688c2ecf20Sopenharmony_ci};
1698c2ecf20Sopenharmony_ci
1708c2ecf20Sopenharmony_ci/* Values for ats_attribute field above */
1718c2ecf20Sopenharmony_ci
1728c2ecf20Sopenharmony_ci#define ACPI_IORT_ATS_SUPPORTED         0x00000001	/* The root complex supports ATS */
1738c2ecf20Sopenharmony_ci#define ACPI_IORT_ATS_UNSUPPORTED       0x00000000	/* The root complex doesn't support ATS */
1748c2ecf20Sopenharmony_ci
1758c2ecf20Sopenharmony_cistruct acpi_iort_smmu {
1768c2ecf20Sopenharmony_ci	u64 base_address;	/* SMMU base address */
1778c2ecf20Sopenharmony_ci	u64 span;		/* Length of memory range */
1788c2ecf20Sopenharmony_ci	u32 model;
1798c2ecf20Sopenharmony_ci	u32 flags;
1808c2ecf20Sopenharmony_ci	u32 global_interrupt_offset;
1818c2ecf20Sopenharmony_ci	u32 context_interrupt_count;
1828c2ecf20Sopenharmony_ci	u32 context_interrupt_offset;
1838c2ecf20Sopenharmony_ci	u32 pmu_interrupt_count;
1848c2ecf20Sopenharmony_ci	u32 pmu_interrupt_offset;
1858c2ecf20Sopenharmony_ci	u64 interrupts[1];	/* Interrupt array */
1868c2ecf20Sopenharmony_ci};
1878c2ecf20Sopenharmony_ci
1888c2ecf20Sopenharmony_ci/* Values for Model field above */
1898c2ecf20Sopenharmony_ci
1908c2ecf20Sopenharmony_ci#define ACPI_IORT_SMMU_V1               0x00000000	/* Generic SMMUv1 */
1918c2ecf20Sopenharmony_ci#define ACPI_IORT_SMMU_V2               0x00000001	/* Generic SMMUv2 */
1928c2ecf20Sopenharmony_ci#define ACPI_IORT_SMMU_CORELINK_MMU400  0x00000002	/* ARM Corelink MMU-400 */
1938c2ecf20Sopenharmony_ci#define ACPI_IORT_SMMU_CORELINK_MMU500  0x00000003	/* ARM Corelink MMU-500 */
1948c2ecf20Sopenharmony_ci#define ACPI_IORT_SMMU_CORELINK_MMU401  0x00000004	/* ARM Corelink MMU-401 */
1958c2ecf20Sopenharmony_ci#define ACPI_IORT_SMMU_CAVIUM_THUNDERX  0x00000005	/* Cavium thunder_x SMMUv2 */
1968c2ecf20Sopenharmony_ci
1978c2ecf20Sopenharmony_ci/* Masks for Flags field above */
1988c2ecf20Sopenharmony_ci
1998c2ecf20Sopenharmony_ci#define ACPI_IORT_SMMU_DVM_SUPPORTED    (1)
2008c2ecf20Sopenharmony_ci#define ACPI_IORT_SMMU_COHERENT_WALK    (1<<1)
2018c2ecf20Sopenharmony_ci
2028c2ecf20Sopenharmony_ci/* Global interrupt format */
2038c2ecf20Sopenharmony_ci
2048c2ecf20Sopenharmony_cistruct acpi_iort_smmu_gsi {
2058c2ecf20Sopenharmony_ci	u32 nsg_irpt;
2068c2ecf20Sopenharmony_ci	u32 nsg_irpt_flags;
2078c2ecf20Sopenharmony_ci	u32 nsg_cfg_irpt;
2088c2ecf20Sopenharmony_ci	u32 nsg_cfg_irpt_flags;
2098c2ecf20Sopenharmony_ci};
2108c2ecf20Sopenharmony_ci
2118c2ecf20Sopenharmony_cistruct acpi_iort_smmu_v3 {
2128c2ecf20Sopenharmony_ci	u64 base_address;	/* SMMUv3 base address */
2138c2ecf20Sopenharmony_ci	u32 flags;
2148c2ecf20Sopenharmony_ci	u32 reserved;
2158c2ecf20Sopenharmony_ci	u64 vatos_address;
2168c2ecf20Sopenharmony_ci	u32 model;
2178c2ecf20Sopenharmony_ci	u32 event_gsiv;
2188c2ecf20Sopenharmony_ci	u32 pri_gsiv;
2198c2ecf20Sopenharmony_ci	u32 gerr_gsiv;
2208c2ecf20Sopenharmony_ci	u32 sync_gsiv;
2218c2ecf20Sopenharmony_ci	u32 pxm;
2228c2ecf20Sopenharmony_ci	u32 id_mapping_index;
2238c2ecf20Sopenharmony_ci};
2248c2ecf20Sopenharmony_ci
2258c2ecf20Sopenharmony_ci/* Values for Model field above */
2268c2ecf20Sopenharmony_ci
2278c2ecf20Sopenharmony_ci#define ACPI_IORT_SMMU_V3_GENERIC           0x00000000	/* Generic SMMUv3 */
2288c2ecf20Sopenharmony_ci#define ACPI_IORT_SMMU_V3_HISILICON_HI161X  0x00000001	/* hi_silicon Hi161x SMMUv3 */
2298c2ecf20Sopenharmony_ci#define ACPI_IORT_SMMU_V3_CAVIUM_CN99XX     0x00000002	/* Cavium CN99xx SMMUv3 */
2308c2ecf20Sopenharmony_ci
2318c2ecf20Sopenharmony_ci/* Masks for Flags field above */
2328c2ecf20Sopenharmony_ci
2338c2ecf20Sopenharmony_ci#define ACPI_IORT_SMMU_V3_COHACC_OVERRIDE   (1)
2348c2ecf20Sopenharmony_ci#define ACPI_IORT_SMMU_V3_HTTU_OVERRIDE     (3<<1)
2358c2ecf20Sopenharmony_ci#define ACPI_IORT_SMMU_V3_PXM_VALID         (1<<3)
2368c2ecf20Sopenharmony_ci
2378c2ecf20Sopenharmony_cistruct acpi_iort_pmcg {
2388c2ecf20Sopenharmony_ci	u64 page0_base_address;
2398c2ecf20Sopenharmony_ci	u32 overflow_gsiv;
2408c2ecf20Sopenharmony_ci	u32 node_reference;
2418c2ecf20Sopenharmony_ci	u64 page1_base_address;
2428c2ecf20Sopenharmony_ci};
2438c2ecf20Sopenharmony_ci
2448c2ecf20Sopenharmony_ci/*******************************************************************************
2458c2ecf20Sopenharmony_ci *
2468c2ecf20Sopenharmony_ci * IVRS - I/O Virtualization Reporting Structure
2478c2ecf20Sopenharmony_ci *        Version 1
2488c2ecf20Sopenharmony_ci *
2498c2ecf20Sopenharmony_ci * Conforms to "AMD I/O Virtualization Technology (IOMMU) Specification",
2508c2ecf20Sopenharmony_ci * Revision 1.26, February 2009.
2518c2ecf20Sopenharmony_ci *
2528c2ecf20Sopenharmony_ci ******************************************************************************/
2538c2ecf20Sopenharmony_ci
2548c2ecf20Sopenharmony_cistruct acpi_table_ivrs {
2558c2ecf20Sopenharmony_ci	struct acpi_table_header header;	/* Common ACPI table header */
2568c2ecf20Sopenharmony_ci	u32 info;		/* Common virtualization info */
2578c2ecf20Sopenharmony_ci	u64 reserved;
2588c2ecf20Sopenharmony_ci};
2598c2ecf20Sopenharmony_ci
2608c2ecf20Sopenharmony_ci/* Values for Info field above */
2618c2ecf20Sopenharmony_ci
2628c2ecf20Sopenharmony_ci#define ACPI_IVRS_PHYSICAL_SIZE     0x00007F00	/* 7 bits, physical address size */
2638c2ecf20Sopenharmony_ci#define ACPI_IVRS_VIRTUAL_SIZE      0x003F8000	/* 7 bits, virtual address size */
2648c2ecf20Sopenharmony_ci#define ACPI_IVRS_ATS_RESERVED      0x00400000	/* ATS address translation range reserved */
2658c2ecf20Sopenharmony_ci
2668c2ecf20Sopenharmony_ci/* IVRS subtable header */
2678c2ecf20Sopenharmony_ci
2688c2ecf20Sopenharmony_cistruct acpi_ivrs_header {
2698c2ecf20Sopenharmony_ci	u8 type;		/* Subtable type */
2708c2ecf20Sopenharmony_ci	u8 flags;
2718c2ecf20Sopenharmony_ci	u16 length;		/* Subtable length */
2728c2ecf20Sopenharmony_ci	u16 device_id;		/* ID of IOMMU */
2738c2ecf20Sopenharmony_ci};
2748c2ecf20Sopenharmony_ci
2758c2ecf20Sopenharmony_ci/* Values for subtable Type above */
2768c2ecf20Sopenharmony_ci
2778c2ecf20Sopenharmony_cienum acpi_ivrs_type {
2788c2ecf20Sopenharmony_ci	ACPI_IVRS_TYPE_HARDWARE1 = 0x10,
2798c2ecf20Sopenharmony_ci	ACPI_IVRS_TYPE_HARDWARE2 = 0x11,
2808c2ecf20Sopenharmony_ci	ACPI_IVRS_TYPE_MEMORY1 = 0x20,
2818c2ecf20Sopenharmony_ci	ACPI_IVRS_TYPE_MEMORY2 = 0x21,
2828c2ecf20Sopenharmony_ci	ACPI_IVRS_TYPE_MEMORY3 = 0x22
2838c2ecf20Sopenharmony_ci};
2848c2ecf20Sopenharmony_ci
2858c2ecf20Sopenharmony_ci/* Masks for Flags field above for IVHD subtable */
2868c2ecf20Sopenharmony_ci
2878c2ecf20Sopenharmony_ci#define ACPI_IVHD_TT_ENABLE         (1)
2888c2ecf20Sopenharmony_ci#define ACPI_IVHD_PASS_PW           (1<<1)
2898c2ecf20Sopenharmony_ci#define ACPI_IVHD_RES_PASS_PW       (1<<2)
2908c2ecf20Sopenharmony_ci#define ACPI_IVHD_ISOC              (1<<3)
2918c2ecf20Sopenharmony_ci#define ACPI_IVHD_IOTLB             (1<<4)
2928c2ecf20Sopenharmony_ci
2938c2ecf20Sopenharmony_ci/* Masks for Flags field above for IVMD subtable */
2948c2ecf20Sopenharmony_ci
2958c2ecf20Sopenharmony_ci#define ACPI_IVMD_UNITY             (1)
2968c2ecf20Sopenharmony_ci#define ACPI_IVMD_READ              (1<<1)
2978c2ecf20Sopenharmony_ci#define ACPI_IVMD_WRITE             (1<<2)
2988c2ecf20Sopenharmony_ci#define ACPI_IVMD_EXCLUSION_RANGE   (1<<3)
2998c2ecf20Sopenharmony_ci
3008c2ecf20Sopenharmony_ci/*
3018c2ecf20Sopenharmony_ci * IVRS subtables, correspond to Type in struct acpi_ivrs_header
3028c2ecf20Sopenharmony_ci */
3038c2ecf20Sopenharmony_ci
3048c2ecf20Sopenharmony_ci/* 0x10: I/O Virtualization Hardware Definition Block (IVHD) */
3058c2ecf20Sopenharmony_ci
3068c2ecf20Sopenharmony_cistruct acpi_ivrs_hardware_10 {
3078c2ecf20Sopenharmony_ci	struct acpi_ivrs_header header;
3088c2ecf20Sopenharmony_ci	u16 capability_offset;	/* Offset for IOMMU control fields */
3098c2ecf20Sopenharmony_ci	u64 base_address;	/* IOMMU control registers */
3108c2ecf20Sopenharmony_ci	u16 pci_segment_group;
3118c2ecf20Sopenharmony_ci	u16 info;		/* MSI number and unit ID */
3128c2ecf20Sopenharmony_ci	u32 feature_reporting;
3138c2ecf20Sopenharmony_ci};
3148c2ecf20Sopenharmony_ci
3158c2ecf20Sopenharmony_ci/* 0x11: I/O Virtualization Hardware Definition Block (IVHD) */
3168c2ecf20Sopenharmony_ci
3178c2ecf20Sopenharmony_cistruct acpi_ivrs_hardware_11 {
3188c2ecf20Sopenharmony_ci	struct acpi_ivrs_header header;
3198c2ecf20Sopenharmony_ci	u16 capability_offset;	/* Offset for IOMMU control fields */
3208c2ecf20Sopenharmony_ci	u64 base_address;	/* IOMMU control registers */
3218c2ecf20Sopenharmony_ci	u16 pci_segment_group;
3228c2ecf20Sopenharmony_ci	u16 info;		/* MSI number and unit ID */
3238c2ecf20Sopenharmony_ci	u32 attributes;
3248c2ecf20Sopenharmony_ci	u64 efr_register_image;
3258c2ecf20Sopenharmony_ci	u64 reserved;
3268c2ecf20Sopenharmony_ci};
3278c2ecf20Sopenharmony_ci
3288c2ecf20Sopenharmony_ci/* Masks for Info field above */
3298c2ecf20Sopenharmony_ci
3308c2ecf20Sopenharmony_ci#define ACPI_IVHD_MSI_NUMBER_MASK   0x001F	/* 5 bits, MSI message number */
3318c2ecf20Sopenharmony_ci#define ACPI_IVHD_UNIT_ID_MASK      0x1F00	/* 5 bits, unit_ID */
3328c2ecf20Sopenharmony_ci
3338c2ecf20Sopenharmony_ci/*
3348c2ecf20Sopenharmony_ci * Device Entries for IVHD subtable, appear after struct acpi_ivrs_hardware structure.
3358c2ecf20Sopenharmony_ci * Upper two bits of the Type field are the (encoded) length of the structure.
3368c2ecf20Sopenharmony_ci * Currently, only 4 and 8 byte entries are defined. 16 and 32 byte entries
3378c2ecf20Sopenharmony_ci * are reserved for future use but not defined.
3388c2ecf20Sopenharmony_ci */
3398c2ecf20Sopenharmony_cistruct acpi_ivrs_de_header {
3408c2ecf20Sopenharmony_ci	u8 type;
3418c2ecf20Sopenharmony_ci	u16 id;
3428c2ecf20Sopenharmony_ci	u8 data_setting;
3438c2ecf20Sopenharmony_ci};
3448c2ecf20Sopenharmony_ci
3458c2ecf20Sopenharmony_ci/* Length of device entry is in the top two bits of Type field above */
3468c2ecf20Sopenharmony_ci
3478c2ecf20Sopenharmony_ci#define ACPI_IVHD_ENTRY_LENGTH      0xC0
3488c2ecf20Sopenharmony_ci
3498c2ecf20Sopenharmony_ci/* Values for device entry Type field above */
3508c2ecf20Sopenharmony_ci
3518c2ecf20Sopenharmony_cienum acpi_ivrs_device_entry_type {
3528c2ecf20Sopenharmony_ci	/* 4-byte device entries, all use struct acpi_ivrs_device4 */
3538c2ecf20Sopenharmony_ci
3548c2ecf20Sopenharmony_ci	ACPI_IVRS_TYPE_PAD4 = 0,
3558c2ecf20Sopenharmony_ci	ACPI_IVRS_TYPE_ALL = 1,
3568c2ecf20Sopenharmony_ci	ACPI_IVRS_TYPE_SELECT = 2,
3578c2ecf20Sopenharmony_ci	ACPI_IVRS_TYPE_START = 3,
3588c2ecf20Sopenharmony_ci	ACPI_IVRS_TYPE_END = 4,
3598c2ecf20Sopenharmony_ci
3608c2ecf20Sopenharmony_ci	/* 8-byte device entries */
3618c2ecf20Sopenharmony_ci
3628c2ecf20Sopenharmony_ci	ACPI_IVRS_TYPE_PAD8 = 64,
3638c2ecf20Sopenharmony_ci	ACPI_IVRS_TYPE_NOT_USED = 65,
3648c2ecf20Sopenharmony_ci	ACPI_IVRS_TYPE_ALIAS_SELECT = 66,	/* Uses struct acpi_ivrs_device8a */
3658c2ecf20Sopenharmony_ci	ACPI_IVRS_TYPE_ALIAS_START = 67,	/* Uses struct acpi_ivrs_device8a */
3668c2ecf20Sopenharmony_ci	ACPI_IVRS_TYPE_EXT_SELECT = 70,	/* Uses struct acpi_ivrs_device8b */
3678c2ecf20Sopenharmony_ci	ACPI_IVRS_TYPE_EXT_START = 71,	/* Uses struct acpi_ivrs_device8b */
3688c2ecf20Sopenharmony_ci	ACPI_IVRS_TYPE_SPECIAL = 72	/* Uses struct acpi_ivrs_device8c */
3698c2ecf20Sopenharmony_ci};
3708c2ecf20Sopenharmony_ci
3718c2ecf20Sopenharmony_ci/* Values for Data field above */
3728c2ecf20Sopenharmony_ci
3738c2ecf20Sopenharmony_ci#define ACPI_IVHD_INIT_PASS         (1)
3748c2ecf20Sopenharmony_ci#define ACPI_IVHD_EINT_PASS         (1<<1)
3758c2ecf20Sopenharmony_ci#define ACPI_IVHD_NMI_PASS          (1<<2)
3768c2ecf20Sopenharmony_ci#define ACPI_IVHD_SYSTEM_MGMT       (3<<4)
3778c2ecf20Sopenharmony_ci#define ACPI_IVHD_LINT0_PASS        (1<<6)
3788c2ecf20Sopenharmony_ci#define ACPI_IVHD_LINT1_PASS        (1<<7)
3798c2ecf20Sopenharmony_ci
3808c2ecf20Sopenharmony_ci/* Types 0-4: 4-byte device entry */
3818c2ecf20Sopenharmony_ci
3828c2ecf20Sopenharmony_cistruct acpi_ivrs_device4 {
3838c2ecf20Sopenharmony_ci	struct acpi_ivrs_de_header header;
3848c2ecf20Sopenharmony_ci};
3858c2ecf20Sopenharmony_ci
3868c2ecf20Sopenharmony_ci/* Types 66-67: 8-byte device entry */
3878c2ecf20Sopenharmony_ci
3888c2ecf20Sopenharmony_cistruct acpi_ivrs_device8a {
3898c2ecf20Sopenharmony_ci	struct acpi_ivrs_de_header header;
3908c2ecf20Sopenharmony_ci	u8 reserved1;
3918c2ecf20Sopenharmony_ci	u16 used_id;
3928c2ecf20Sopenharmony_ci	u8 reserved2;
3938c2ecf20Sopenharmony_ci};
3948c2ecf20Sopenharmony_ci
3958c2ecf20Sopenharmony_ci/* Types 70-71: 8-byte device entry */
3968c2ecf20Sopenharmony_ci
3978c2ecf20Sopenharmony_cistruct acpi_ivrs_device8b {
3988c2ecf20Sopenharmony_ci	struct acpi_ivrs_de_header header;
3998c2ecf20Sopenharmony_ci	u32 extended_data;
4008c2ecf20Sopenharmony_ci};
4018c2ecf20Sopenharmony_ci
4028c2ecf20Sopenharmony_ci/* Values for extended_data above */
4038c2ecf20Sopenharmony_ci
4048c2ecf20Sopenharmony_ci#define ACPI_IVHD_ATS_DISABLED      (1<<31)
4058c2ecf20Sopenharmony_ci
4068c2ecf20Sopenharmony_ci/* Type 72: 8-byte device entry */
4078c2ecf20Sopenharmony_ci
4088c2ecf20Sopenharmony_cistruct acpi_ivrs_device8c {
4098c2ecf20Sopenharmony_ci	struct acpi_ivrs_de_header header;
4108c2ecf20Sopenharmony_ci	u8 handle;
4118c2ecf20Sopenharmony_ci	u16 used_id;
4128c2ecf20Sopenharmony_ci	u8 variety;
4138c2ecf20Sopenharmony_ci};
4148c2ecf20Sopenharmony_ci
4158c2ecf20Sopenharmony_ci/* Values for Variety field above */
4168c2ecf20Sopenharmony_ci
4178c2ecf20Sopenharmony_ci#define ACPI_IVHD_IOAPIC            1
4188c2ecf20Sopenharmony_ci#define ACPI_IVHD_HPET              2
4198c2ecf20Sopenharmony_ci
4208c2ecf20Sopenharmony_ci/* 0x20, 0x21, 0x22: I/O Virtualization Memory Definition Block (IVMD) */
4218c2ecf20Sopenharmony_ci
4228c2ecf20Sopenharmony_cistruct acpi_ivrs_memory {
4238c2ecf20Sopenharmony_ci	struct acpi_ivrs_header header;
4248c2ecf20Sopenharmony_ci	u16 aux_data;
4258c2ecf20Sopenharmony_ci	u64 reserved;
4268c2ecf20Sopenharmony_ci	u64 start_address;
4278c2ecf20Sopenharmony_ci	u64 memory_length;
4288c2ecf20Sopenharmony_ci};
4298c2ecf20Sopenharmony_ci
4308c2ecf20Sopenharmony_ci/*******************************************************************************
4318c2ecf20Sopenharmony_ci *
4328c2ecf20Sopenharmony_ci * LPIT - Low Power Idle Table
4338c2ecf20Sopenharmony_ci *
4348c2ecf20Sopenharmony_ci * Conforms to "ACPI Low Power Idle Table (LPIT)" July 2014.
4358c2ecf20Sopenharmony_ci *
4368c2ecf20Sopenharmony_ci ******************************************************************************/
4378c2ecf20Sopenharmony_ci
4388c2ecf20Sopenharmony_cistruct acpi_table_lpit {
4398c2ecf20Sopenharmony_ci	struct acpi_table_header header;	/* Common ACPI table header */
4408c2ecf20Sopenharmony_ci};
4418c2ecf20Sopenharmony_ci
4428c2ecf20Sopenharmony_ci/* LPIT subtable header */
4438c2ecf20Sopenharmony_ci
4448c2ecf20Sopenharmony_cistruct acpi_lpit_header {
4458c2ecf20Sopenharmony_ci	u32 type;		/* Subtable type */
4468c2ecf20Sopenharmony_ci	u32 length;		/* Subtable length */
4478c2ecf20Sopenharmony_ci	u16 unique_id;
4488c2ecf20Sopenharmony_ci	u16 reserved;
4498c2ecf20Sopenharmony_ci	u32 flags;
4508c2ecf20Sopenharmony_ci};
4518c2ecf20Sopenharmony_ci
4528c2ecf20Sopenharmony_ci/* Values for subtable Type above */
4538c2ecf20Sopenharmony_ci
4548c2ecf20Sopenharmony_cienum acpi_lpit_type {
4558c2ecf20Sopenharmony_ci	ACPI_LPIT_TYPE_NATIVE_CSTATE = 0x00,
4568c2ecf20Sopenharmony_ci	ACPI_LPIT_TYPE_RESERVED = 0x01	/* 1 and above are reserved */
4578c2ecf20Sopenharmony_ci};
4588c2ecf20Sopenharmony_ci
4598c2ecf20Sopenharmony_ci/* Masks for Flags field above  */
4608c2ecf20Sopenharmony_ci
4618c2ecf20Sopenharmony_ci#define ACPI_LPIT_STATE_DISABLED    (1)
4628c2ecf20Sopenharmony_ci#define ACPI_LPIT_NO_COUNTER        (1<<1)
4638c2ecf20Sopenharmony_ci
4648c2ecf20Sopenharmony_ci/*
4658c2ecf20Sopenharmony_ci * LPIT subtables, correspond to Type in struct acpi_lpit_header
4668c2ecf20Sopenharmony_ci */
4678c2ecf20Sopenharmony_ci
4688c2ecf20Sopenharmony_ci/* 0x00: Native C-state instruction based LPI structure */
4698c2ecf20Sopenharmony_ci
4708c2ecf20Sopenharmony_cistruct acpi_lpit_native {
4718c2ecf20Sopenharmony_ci	struct acpi_lpit_header header;
4728c2ecf20Sopenharmony_ci	struct acpi_generic_address entry_trigger;
4738c2ecf20Sopenharmony_ci	u32 residency;
4748c2ecf20Sopenharmony_ci	u32 latency;
4758c2ecf20Sopenharmony_ci	struct acpi_generic_address residency_counter;
4768c2ecf20Sopenharmony_ci	u64 counter_frequency;
4778c2ecf20Sopenharmony_ci};
4788c2ecf20Sopenharmony_ci
4798c2ecf20Sopenharmony_ci/*******************************************************************************
4808c2ecf20Sopenharmony_ci *
4818c2ecf20Sopenharmony_ci * MADT - Multiple APIC Description Table
4828c2ecf20Sopenharmony_ci *        Version 3
4838c2ecf20Sopenharmony_ci *
4848c2ecf20Sopenharmony_ci ******************************************************************************/
4858c2ecf20Sopenharmony_ci
4868c2ecf20Sopenharmony_cistruct acpi_table_madt {
4878c2ecf20Sopenharmony_ci	struct acpi_table_header header;	/* Common ACPI table header */
4888c2ecf20Sopenharmony_ci	u32 address;		/* Physical address of local APIC */
4898c2ecf20Sopenharmony_ci	u32 flags;
4908c2ecf20Sopenharmony_ci};
4918c2ecf20Sopenharmony_ci
4928c2ecf20Sopenharmony_ci/* Masks for Flags field above */
4938c2ecf20Sopenharmony_ci
4948c2ecf20Sopenharmony_ci#define ACPI_MADT_PCAT_COMPAT       (1)	/* 00: System also has dual 8259s */
4958c2ecf20Sopenharmony_ci
4968c2ecf20Sopenharmony_ci/* Values for PCATCompat flag */
4978c2ecf20Sopenharmony_ci
4988c2ecf20Sopenharmony_ci#define ACPI_MADT_DUAL_PIC          1
4998c2ecf20Sopenharmony_ci#define ACPI_MADT_MULTIPLE_APIC     0
5008c2ecf20Sopenharmony_ci
5018c2ecf20Sopenharmony_ci/* Values for MADT subtable type in struct acpi_subtable_header */
5028c2ecf20Sopenharmony_ci
5038c2ecf20Sopenharmony_cienum acpi_madt_type {
5048c2ecf20Sopenharmony_ci	ACPI_MADT_TYPE_LOCAL_APIC = 0,
5058c2ecf20Sopenharmony_ci	ACPI_MADT_TYPE_IO_APIC = 1,
5068c2ecf20Sopenharmony_ci	ACPI_MADT_TYPE_INTERRUPT_OVERRIDE = 2,
5078c2ecf20Sopenharmony_ci	ACPI_MADT_TYPE_NMI_SOURCE = 3,
5088c2ecf20Sopenharmony_ci	ACPI_MADT_TYPE_LOCAL_APIC_NMI = 4,
5098c2ecf20Sopenharmony_ci	ACPI_MADT_TYPE_LOCAL_APIC_OVERRIDE = 5,
5108c2ecf20Sopenharmony_ci	ACPI_MADT_TYPE_IO_SAPIC = 6,
5118c2ecf20Sopenharmony_ci	ACPI_MADT_TYPE_LOCAL_SAPIC = 7,
5128c2ecf20Sopenharmony_ci	ACPI_MADT_TYPE_INTERRUPT_SOURCE = 8,
5138c2ecf20Sopenharmony_ci	ACPI_MADT_TYPE_LOCAL_X2APIC = 9,
5148c2ecf20Sopenharmony_ci	ACPI_MADT_TYPE_LOCAL_X2APIC_NMI = 10,
5158c2ecf20Sopenharmony_ci	ACPI_MADT_TYPE_GENERIC_INTERRUPT = 11,
5168c2ecf20Sopenharmony_ci	ACPI_MADT_TYPE_GENERIC_DISTRIBUTOR = 12,
5178c2ecf20Sopenharmony_ci	ACPI_MADT_TYPE_GENERIC_MSI_FRAME = 13,
5188c2ecf20Sopenharmony_ci	ACPI_MADT_TYPE_GENERIC_REDISTRIBUTOR = 14,
5198c2ecf20Sopenharmony_ci	ACPI_MADT_TYPE_GENERIC_TRANSLATOR = 15,
5208c2ecf20Sopenharmony_ci	ACPI_MADT_TYPE_CORE_PIC = 17,
5218c2ecf20Sopenharmony_ci	ACPI_MADT_TYPE_LIO_PIC = 18,
5228c2ecf20Sopenharmony_ci	ACPI_MADT_TYPE_HT_PIC = 19,
5238c2ecf20Sopenharmony_ci	ACPI_MADT_TYPE_EIO_PIC = 20,
5248c2ecf20Sopenharmony_ci	ACPI_MADT_TYPE_MSI_PIC = 21,
5258c2ecf20Sopenharmony_ci	ACPI_MADT_TYPE_BIO_PIC = 22,
5268c2ecf20Sopenharmony_ci	ACPI_MADT_TYPE_LPC_PIC = 23,
5278c2ecf20Sopenharmony_ci	ACPI_MADT_TYPE_RESERVED = 24	/* 24 and greater are reserved */
5288c2ecf20Sopenharmony_ci};
5298c2ecf20Sopenharmony_ci
5308c2ecf20Sopenharmony_ci/*
5318c2ecf20Sopenharmony_ci * MADT Subtables, correspond to Type in struct acpi_subtable_header
5328c2ecf20Sopenharmony_ci */
5338c2ecf20Sopenharmony_ci
5348c2ecf20Sopenharmony_ci/* 0: Processor Local APIC */
5358c2ecf20Sopenharmony_ci
5368c2ecf20Sopenharmony_cistruct acpi_madt_local_apic {
5378c2ecf20Sopenharmony_ci	struct acpi_subtable_header header;
5388c2ecf20Sopenharmony_ci	u8 processor_id;	/* ACPI processor id */
5398c2ecf20Sopenharmony_ci	u8 id;			/* Processor's local APIC id */
5408c2ecf20Sopenharmony_ci	u32 lapic_flags;
5418c2ecf20Sopenharmony_ci};
5428c2ecf20Sopenharmony_ci
5438c2ecf20Sopenharmony_ci/* 1: IO APIC */
5448c2ecf20Sopenharmony_ci
5458c2ecf20Sopenharmony_cistruct acpi_madt_io_apic {
5468c2ecf20Sopenharmony_ci	struct acpi_subtable_header header;
5478c2ecf20Sopenharmony_ci	u8 id;			/* I/O APIC ID */
5488c2ecf20Sopenharmony_ci	u8 reserved;		/* reserved - must be zero */
5498c2ecf20Sopenharmony_ci	u32 address;		/* APIC physical address */
5508c2ecf20Sopenharmony_ci	u32 global_irq_base;	/* Global system interrupt where INTI lines start */
5518c2ecf20Sopenharmony_ci};
5528c2ecf20Sopenharmony_ci
5538c2ecf20Sopenharmony_ci/* 2: Interrupt Override */
5548c2ecf20Sopenharmony_ci
5558c2ecf20Sopenharmony_cistruct acpi_madt_interrupt_override {
5568c2ecf20Sopenharmony_ci	struct acpi_subtable_header header;
5578c2ecf20Sopenharmony_ci	u8 bus;			/* 0 - ISA */
5588c2ecf20Sopenharmony_ci	u8 source_irq;		/* Interrupt source (IRQ) */
5598c2ecf20Sopenharmony_ci	u32 global_irq;		/* Global system interrupt */
5608c2ecf20Sopenharmony_ci	u16 inti_flags;
5618c2ecf20Sopenharmony_ci};
5628c2ecf20Sopenharmony_ci
5638c2ecf20Sopenharmony_ci/* 3: NMI Source */
5648c2ecf20Sopenharmony_ci
5658c2ecf20Sopenharmony_cistruct acpi_madt_nmi_source {
5668c2ecf20Sopenharmony_ci	struct acpi_subtable_header header;
5678c2ecf20Sopenharmony_ci	u16 inti_flags;
5688c2ecf20Sopenharmony_ci	u32 global_irq;		/* Global system interrupt */
5698c2ecf20Sopenharmony_ci};
5708c2ecf20Sopenharmony_ci
5718c2ecf20Sopenharmony_ci/* 4: Local APIC NMI */
5728c2ecf20Sopenharmony_ci
5738c2ecf20Sopenharmony_cistruct acpi_madt_local_apic_nmi {
5748c2ecf20Sopenharmony_ci	struct acpi_subtable_header header;
5758c2ecf20Sopenharmony_ci	u8 processor_id;	/* ACPI processor id */
5768c2ecf20Sopenharmony_ci	u16 inti_flags;
5778c2ecf20Sopenharmony_ci	u8 lint;		/* LINTn to which NMI is connected */
5788c2ecf20Sopenharmony_ci};
5798c2ecf20Sopenharmony_ci
5808c2ecf20Sopenharmony_ci/* 5: Address Override */
5818c2ecf20Sopenharmony_ci
5828c2ecf20Sopenharmony_cistruct acpi_madt_local_apic_override {
5838c2ecf20Sopenharmony_ci	struct acpi_subtable_header header;
5848c2ecf20Sopenharmony_ci	u16 reserved;		/* Reserved, must be zero */
5858c2ecf20Sopenharmony_ci	u64 address;		/* APIC physical address */
5868c2ecf20Sopenharmony_ci};
5878c2ecf20Sopenharmony_ci
5888c2ecf20Sopenharmony_ci/* 6: I/O Sapic */
5898c2ecf20Sopenharmony_ci
5908c2ecf20Sopenharmony_cistruct acpi_madt_io_sapic {
5918c2ecf20Sopenharmony_ci	struct acpi_subtable_header header;
5928c2ecf20Sopenharmony_ci	u8 id;			/* I/O SAPIC ID */
5938c2ecf20Sopenharmony_ci	u8 reserved;		/* Reserved, must be zero */
5948c2ecf20Sopenharmony_ci	u32 global_irq_base;	/* Global interrupt for SAPIC start */
5958c2ecf20Sopenharmony_ci	u64 address;		/* SAPIC physical address */
5968c2ecf20Sopenharmony_ci};
5978c2ecf20Sopenharmony_ci
5988c2ecf20Sopenharmony_ci/* 7: Local Sapic */
5998c2ecf20Sopenharmony_ci
6008c2ecf20Sopenharmony_cistruct acpi_madt_local_sapic {
6018c2ecf20Sopenharmony_ci	struct acpi_subtable_header header;
6028c2ecf20Sopenharmony_ci	u8 processor_id;	/* ACPI processor id */
6038c2ecf20Sopenharmony_ci	u8 id;			/* SAPIC ID */
6048c2ecf20Sopenharmony_ci	u8 eid;			/* SAPIC EID */
6058c2ecf20Sopenharmony_ci	u8 reserved[3];		/* Reserved, must be zero */
6068c2ecf20Sopenharmony_ci	u32 lapic_flags;
6078c2ecf20Sopenharmony_ci	u32 uid;		/* Numeric UID - ACPI 3.0 */
6088c2ecf20Sopenharmony_ci	char uid_string[1];	/* String UID  - ACPI 3.0 */
6098c2ecf20Sopenharmony_ci};
6108c2ecf20Sopenharmony_ci
6118c2ecf20Sopenharmony_ci/* 8: Platform Interrupt Source */
6128c2ecf20Sopenharmony_ci
6138c2ecf20Sopenharmony_cistruct acpi_madt_interrupt_source {
6148c2ecf20Sopenharmony_ci	struct acpi_subtable_header header;
6158c2ecf20Sopenharmony_ci	u16 inti_flags;
6168c2ecf20Sopenharmony_ci	u8 type;		/* 1=PMI, 2=INIT, 3=corrected */
6178c2ecf20Sopenharmony_ci	u8 id;			/* Processor ID */
6188c2ecf20Sopenharmony_ci	u8 eid;			/* Processor EID */
6198c2ecf20Sopenharmony_ci	u8 io_sapic_vector;	/* Vector value for PMI interrupts */
6208c2ecf20Sopenharmony_ci	u32 global_irq;		/* Global system interrupt */
6218c2ecf20Sopenharmony_ci	u32 flags;		/* Interrupt Source Flags */
6228c2ecf20Sopenharmony_ci};
6238c2ecf20Sopenharmony_ci
6248c2ecf20Sopenharmony_ci/* Masks for Flags field above */
6258c2ecf20Sopenharmony_ci
6268c2ecf20Sopenharmony_ci#define ACPI_MADT_CPEI_OVERRIDE     (1)
6278c2ecf20Sopenharmony_ci
6288c2ecf20Sopenharmony_ci/* 9: Processor Local X2APIC (ACPI 4.0) */
6298c2ecf20Sopenharmony_ci
6308c2ecf20Sopenharmony_cistruct acpi_madt_local_x2apic {
6318c2ecf20Sopenharmony_ci	struct acpi_subtable_header header;
6328c2ecf20Sopenharmony_ci	u16 reserved;		/* reserved - must be zero */
6338c2ecf20Sopenharmony_ci	u32 local_apic_id;	/* Processor x2APIC ID  */
6348c2ecf20Sopenharmony_ci	u32 lapic_flags;
6358c2ecf20Sopenharmony_ci	u32 uid;		/* ACPI processor UID */
6368c2ecf20Sopenharmony_ci};
6378c2ecf20Sopenharmony_ci
6388c2ecf20Sopenharmony_ci/* 10: Local X2APIC NMI (ACPI 4.0) */
6398c2ecf20Sopenharmony_ci
6408c2ecf20Sopenharmony_cistruct acpi_madt_local_x2apic_nmi {
6418c2ecf20Sopenharmony_ci	struct acpi_subtable_header header;
6428c2ecf20Sopenharmony_ci	u16 inti_flags;
6438c2ecf20Sopenharmony_ci	u32 uid;		/* ACPI processor UID */
6448c2ecf20Sopenharmony_ci	u8 lint;		/* LINTn to which NMI is connected */
6458c2ecf20Sopenharmony_ci	u8 reserved[3];		/* reserved - must be zero */
6468c2ecf20Sopenharmony_ci};
6478c2ecf20Sopenharmony_ci
6488c2ecf20Sopenharmony_ci/* 11: Generic interrupt - GICC (ACPI 5.0 + ACPI 6.0 + ACPI 6.3 changes) */
6498c2ecf20Sopenharmony_ci
6508c2ecf20Sopenharmony_cistruct acpi_madt_generic_interrupt {
6518c2ecf20Sopenharmony_ci	struct acpi_subtable_header header;
6528c2ecf20Sopenharmony_ci	u16 reserved;		/* reserved - must be zero */
6538c2ecf20Sopenharmony_ci	u32 cpu_interface_number;
6548c2ecf20Sopenharmony_ci	u32 uid;
6558c2ecf20Sopenharmony_ci	u32 flags;
6568c2ecf20Sopenharmony_ci	u32 parking_version;
6578c2ecf20Sopenharmony_ci	u32 performance_interrupt;
6588c2ecf20Sopenharmony_ci	u64 parked_address;
6598c2ecf20Sopenharmony_ci	u64 base_address;
6608c2ecf20Sopenharmony_ci	u64 gicv_base_address;
6618c2ecf20Sopenharmony_ci	u64 gich_base_address;
6628c2ecf20Sopenharmony_ci	u32 vgic_interrupt;
6638c2ecf20Sopenharmony_ci	u64 gicr_base_address;
6648c2ecf20Sopenharmony_ci	u64 arm_mpidr;
6658c2ecf20Sopenharmony_ci	u8 efficiency_class;
6668c2ecf20Sopenharmony_ci	u8 reserved2[1];
6678c2ecf20Sopenharmony_ci	u16 spe_interrupt;	/* ACPI 6.3 */
6688c2ecf20Sopenharmony_ci};
6698c2ecf20Sopenharmony_ci
6708c2ecf20Sopenharmony_ci/* Masks for Flags field above */
6718c2ecf20Sopenharmony_ci
6728c2ecf20Sopenharmony_ci/* ACPI_MADT_ENABLED                    (1)      Processor is usable if set */
6738c2ecf20Sopenharmony_ci#define ACPI_MADT_PERFORMANCE_IRQ_MODE  (1<<1)	/* 01: Performance Interrupt Mode */
6748c2ecf20Sopenharmony_ci#define ACPI_MADT_VGIC_IRQ_MODE         (1<<2)	/* 02: VGIC Maintenance Interrupt mode */
6758c2ecf20Sopenharmony_ci
6768c2ecf20Sopenharmony_ci/* 12: Generic Distributor (ACPI 5.0 + ACPI 6.0 changes) */
6778c2ecf20Sopenharmony_ci
6788c2ecf20Sopenharmony_cistruct acpi_madt_generic_distributor {
6798c2ecf20Sopenharmony_ci	struct acpi_subtable_header header;
6808c2ecf20Sopenharmony_ci	u16 reserved;		/* reserved - must be zero */
6818c2ecf20Sopenharmony_ci	u32 gic_id;
6828c2ecf20Sopenharmony_ci	u64 base_address;
6838c2ecf20Sopenharmony_ci	u32 global_irq_base;
6848c2ecf20Sopenharmony_ci	u8 version;
6858c2ecf20Sopenharmony_ci	u8 reserved2[3];	/* reserved - must be zero */
6868c2ecf20Sopenharmony_ci};
6878c2ecf20Sopenharmony_ci
6888c2ecf20Sopenharmony_ci/* Values for Version field above */
6898c2ecf20Sopenharmony_ci
6908c2ecf20Sopenharmony_cienum acpi_madt_gic_version {
6918c2ecf20Sopenharmony_ci	ACPI_MADT_GIC_VERSION_NONE = 0,
6928c2ecf20Sopenharmony_ci	ACPI_MADT_GIC_VERSION_V1 = 1,
6938c2ecf20Sopenharmony_ci	ACPI_MADT_GIC_VERSION_V2 = 2,
6948c2ecf20Sopenharmony_ci	ACPI_MADT_GIC_VERSION_V3 = 3,
6958c2ecf20Sopenharmony_ci	ACPI_MADT_GIC_VERSION_V4 = 4,
6968c2ecf20Sopenharmony_ci	ACPI_MADT_GIC_VERSION_RESERVED = 5	/* 5 and greater are reserved */
6978c2ecf20Sopenharmony_ci};
6988c2ecf20Sopenharmony_ci
6998c2ecf20Sopenharmony_ci/* 13: Generic MSI Frame (ACPI 5.1) */
7008c2ecf20Sopenharmony_ci
7018c2ecf20Sopenharmony_cistruct acpi_madt_generic_msi_frame {
7028c2ecf20Sopenharmony_ci	struct acpi_subtable_header header;
7038c2ecf20Sopenharmony_ci	u16 reserved;		/* reserved - must be zero */
7048c2ecf20Sopenharmony_ci	u32 msi_frame_id;
7058c2ecf20Sopenharmony_ci	u64 base_address;
7068c2ecf20Sopenharmony_ci	u32 flags;
7078c2ecf20Sopenharmony_ci	u16 spi_count;
7088c2ecf20Sopenharmony_ci	u16 spi_base;
7098c2ecf20Sopenharmony_ci};
7108c2ecf20Sopenharmony_ci
7118c2ecf20Sopenharmony_ci/* Masks for Flags field above */
7128c2ecf20Sopenharmony_ci
7138c2ecf20Sopenharmony_ci#define ACPI_MADT_OVERRIDE_SPI_VALUES   (1)
7148c2ecf20Sopenharmony_ci
7158c2ecf20Sopenharmony_ci/* 14: Generic Redistributor (ACPI 5.1) */
7168c2ecf20Sopenharmony_ci
7178c2ecf20Sopenharmony_cistruct acpi_madt_generic_redistributor {
7188c2ecf20Sopenharmony_ci	struct acpi_subtable_header header;
7198c2ecf20Sopenharmony_ci	u16 reserved;		/* reserved - must be zero */
7208c2ecf20Sopenharmony_ci	u64 base_address;
7218c2ecf20Sopenharmony_ci	u32 length;
7228c2ecf20Sopenharmony_ci};
7238c2ecf20Sopenharmony_ci
7248c2ecf20Sopenharmony_ci/* 15: Generic Translator (ACPI 6.0) */
7258c2ecf20Sopenharmony_ci
7268c2ecf20Sopenharmony_cistruct acpi_madt_generic_translator {
7278c2ecf20Sopenharmony_ci	struct acpi_subtable_header header;
7288c2ecf20Sopenharmony_ci	u16 reserved;		/* reserved - must be zero */
7298c2ecf20Sopenharmony_ci	u32 translation_id;
7308c2ecf20Sopenharmony_ci	u64 base_address;
7318c2ecf20Sopenharmony_ci	u32 reserved2;
7328c2ecf20Sopenharmony_ci};
7338c2ecf20Sopenharmony_ci
7348c2ecf20Sopenharmony_ci/* Values for Version field above */
7358c2ecf20Sopenharmony_ci
7368c2ecf20Sopenharmony_cienum acpi_madt_core_pic_version {
7378c2ecf20Sopenharmony_ci	ACPI_MADT_CORE_PIC_VERSION_NONE = 0,
7388c2ecf20Sopenharmony_ci	ACPI_MADT_CORE_PIC_VERSION_V1 = 1,
7398c2ecf20Sopenharmony_ci	ACPI_MADT_CORE_PIC_VERSION_RESERVED = 2	/* 2 and greater are reserved */
7408c2ecf20Sopenharmony_ci};
7418c2ecf20Sopenharmony_ci
7428c2ecf20Sopenharmony_cienum acpi_madt_lio_pic_version {
7438c2ecf20Sopenharmony_ci	ACPI_MADT_LIO_PIC_VERSION_NONE = 0,
7448c2ecf20Sopenharmony_ci	ACPI_MADT_LIO_PIC_VERSION_V1 = 1,
7458c2ecf20Sopenharmony_ci	ACPI_MADT_LIO_PIC_VERSION_RESERVED = 2	/* 2 and greater are reserved */
7468c2ecf20Sopenharmony_ci};
7478c2ecf20Sopenharmony_ci
7488c2ecf20Sopenharmony_cienum acpi_madt_eio_pic_version {
7498c2ecf20Sopenharmony_ci	ACPI_MADT_EIO_PIC_VERSION_NONE = 0,
7508c2ecf20Sopenharmony_ci	ACPI_MADT_EIO_PIC_VERSION_V1 = 1,
7518c2ecf20Sopenharmony_ci	ACPI_MADT_EIO_PIC_VERSION_RESERVED = 2	/* 2 and greater are reserved */
7528c2ecf20Sopenharmony_ci};
7538c2ecf20Sopenharmony_ci
7548c2ecf20Sopenharmony_cienum acpi_madt_ht_pic_version {
7558c2ecf20Sopenharmony_ci	ACPI_MADT_HT_PIC_VERSION_NONE = 0,
7568c2ecf20Sopenharmony_ci	ACPI_MADT_HT_PIC_VERSION_V1 = 1,
7578c2ecf20Sopenharmony_ci	ACPI_MADT_HT_PIC_VERSION_RESERVED = 2	/* 2 and greater are reserved */
7588c2ecf20Sopenharmony_ci};
7598c2ecf20Sopenharmony_ci
7608c2ecf20Sopenharmony_cienum acpi_madt_bio_pic_version {
7618c2ecf20Sopenharmony_ci	ACPI_MADT_BIO_PIC_VERSION_NONE = 0,
7628c2ecf20Sopenharmony_ci	ACPI_MADT_BIO_PIC_VERSION_V1 = 1,
7638c2ecf20Sopenharmony_ci	ACPI_MADT_BIO_PIC_VERSION_RESERVED = 2	/* 2 and greater are reserved */
7648c2ecf20Sopenharmony_ci};
7658c2ecf20Sopenharmony_ci
7668c2ecf20Sopenharmony_cienum acpi_madt_msi_pic_version {
7678c2ecf20Sopenharmony_ci	ACPI_MADT_MSI_PIC_VERSION_NONE = 0,
7688c2ecf20Sopenharmony_ci	ACPI_MADT_MSI_PIC_VERSION_V1 = 1,
7698c2ecf20Sopenharmony_ci	ACPI_MADT_MSI_PIC_VERSION_RESERVED = 2	/* 2 and greater are reserved */
7708c2ecf20Sopenharmony_ci};
7718c2ecf20Sopenharmony_ci
7728c2ecf20Sopenharmony_cienum acpi_madt_lpc_pic_version {
7738c2ecf20Sopenharmony_ci	ACPI_MADT_LPC_PIC_VERSION_NONE = 0,
7748c2ecf20Sopenharmony_ci	ACPI_MADT_LPC_PIC_VERSION_V1 = 1,
7758c2ecf20Sopenharmony_ci	ACPI_MADT_LPC_PIC_VERSION_RESERVED = 2	/* 2 and greater are reserved */
7768c2ecf20Sopenharmony_ci};
7778c2ecf20Sopenharmony_ci
7788c2ecf20Sopenharmony_ci/* Core Interrupt Controller */
7798c2ecf20Sopenharmony_ci
7808c2ecf20Sopenharmony_cistruct acpi_madt_core_pic {
7818c2ecf20Sopenharmony_ci	struct acpi_subtable_header header;
7828c2ecf20Sopenharmony_ci	u8 version;
7838c2ecf20Sopenharmony_ci	u32 processor_id;
7848c2ecf20Sopenharmony_ci	u32 core_id;
7858c2ecf20Sopenharmony_ci	u32 flags;
7868c2ecf20Sopenharmony_ci};
7878c2ecf20Sopenharmony_ci
7888c2ecf20Sopenharmony_ci/* Legacy I/O Interrupt Controller */
7898c2ecf20Sopenharmony_ci
7908c2ecf20Sopenharmony_cistruct acpi_madt_lio_pic {
7918c2ecf20Sopenharmony_ci	struct acpi_subtable_header header;
7928c2ecf20Sopenharmony_ci	u8 version;
7938c2ecf20Sopenharmony_ci	u64 address;
7948c2ecf20Sopenharmony_ci	u16 size;
7958c2ecf20Sopenharmony_ci	u8 cascade[2];
7968c2ecf20Sopenharmony_ci	u32 cascade_map[2];
7978c2ecf20Sopenharmony_ci};
7988c2ecf20Sopenharmony_ci
7998c2ecf20Sopenharmony_ci/* Extend I/O Interrupt Controller */
8008c2ecf20Sopenharmony_ci
8018c2ecf20Sopenharmony_cistruct acpi_madt_eio_pic {
8028c2ecf20Sopenharmony_ci	struct acpi_subtable_header header;
8038c2ecf20Sopenharmony_ci	u8 version;
8048c2ecf20Sopenharmony_ci	u8 cascade;
8058c2ecf20Sopenharmony_ci	u8 node;
8068c2ecf20Sopenharmony_ci	u64 node_map;
8078c2ecf20Sopenharmony_ci};
8088c2ecf20Sopenharmony_ci
8098c2ecf20Sopenharmony_ci/* HT Interrupt Controller */
8108c2ecf20Sopenharmony_ci
8118c2ecf20Sopenharmony_cistruct acpi_madt_ht_pic {
8128c2ecf20Sopenharmony_ci	struct acpi_subtable_header header;
8138c2ecf20Sopenharmony_ci	u8 version;
8148c2ecf20Sopenharmony_ci	u64 address;
8158c2ecf20Sopenharmony_ci	u16 size;
8168c2ecf20Sopenharmony_ci	u8 cascade[8];
8178c2ecf20Sopenharmony_ci};
8188c2ecf20Sopenharmony_ci
8198c2ecf20Sopenharmony_ci/* Bridge I/O Interrupt Controller */
8208c2ecf20Sopenharmony_ci
8218c2ecf20Sopenharmony_cistruct acpi_madt_bio_pic {
8228c2ecf20Sopenharmony_ci	struct acpi_subtable_header header;
8238c2ecf20Sopenharmony_ci	u8 version;
8248c2ecf20Sopenharmony_ci	u64 address;
8258c2ecf20Sopenharmony_ci	u16 size;
8268c2ecf20Sopenharmony_ci	u16 id;
8278c2ecf20Sopenharmony_ci	u16 gsi_base;
8288c2ecf20Sopenharmony_ci};
8298c2ecf20Sopenharmony_ci
8308c2ecf20Sopenharmony_ci/* MSI Interrupt Controller */
8318c2ecf20Sopenharmony_ci
8328c2ecf20Sopenharmony_cistruct acpi_madt_msi_pic {
8338c2ecf20Sopenharmony_ci	struct acpi_subtable_header header;
8348c2ecf20Sopenharmony_ci	u8 version;
8358c2ecf20Sopenharmony_ci	u64 msg_address;
8368c2ecf20Sopenharmony_ci	u32 start;
8378c2ecf20Sopenharmony_ci	u32 count;
8388c2ecf20Sopenharmony_ci};
8398c2ecf20Sopenharmony_ci
8408c2ecf20Sopenharmony_ci/* LPC Interrupt Controller */
8418c2ecf20Sopenharmony_ci
8428c2ecf20Sopenharmony_cistruct acpi_madt_lpc_pic {
8438c2ecf20Sopenharmony_ci	struct acpi_subtable_header header;
8448c2ecf20Sopenharmony_ci	u8 version;
8458c2ecf20Sopenharmony_ci	u64 address;
8468c2ecf20Sopenharmony_ci	u16 size;
8478c2ecf20Sopenharmony_ci	u8 cascade;
8488c2ecf20Sopenharmony_ci};
8498c2ecf20Sopenharmony_ci
8508c2ecf20Sopenharmony_ci/*
8518c2ecf20Sopenharmony_ci * Common flags fields for MADT subtables
8528c2ecf20Sopenharmony_ci */
8538c2ecf20Sopenharmony_ci
8548c2ecf20Sopenharmony_ci/* MADT Local APIC flags */
8558c2ecf20Sopenharmony_ci
8568c2ecf20Sopenharmony_ci#define ACPI_MADT_ENABLED           (1)	/* 00: Processor is usable if set */
8578c2ecf20Sopenharmony_ci
8588c2ecf20Sopenharmony_ci/* MADT MPS INTI flags (inti_flags) */
8598c2ecf20Sopenharmony_ci
8608c2ecf20Sopenharmony_ci#define ACPI_MADT_POLARITY_MASK     (3)	/* 00-01: Polarity of APIC I/O input signals */
8618c2ecf20Sopenharmony_ci#define ACPI_MADT_TRIGGER_MASK      (3<<2)	/* 02-03: Trigger mode of APIC input signals */
8628c2ecf20Sopenharmony_ci
8638c2ecf20Sopenharmony_ci/* Values for MPS INTI flags */
8648c2ecf20Sopenharmony_ci
8658c2ecf20Sopenharmony_ci#define ACPI_MADT_POLARITY_CONFORMS       0
8668c2ecf20Sopenharmony_ci#define ACPI_MADT_POLARITY_ACTIVE_HIGH    1
8678c2ecf20Sopenharmony_ci#define ACPI_MADT_POLARITY_RESERVED       2
8688c2ecf20Sopenharmony_ci#define ACPI_MADT_POLARITY_ACTIVE_LOW     3
8698c2ecf20Sopenharmony_ci
8708c2ecf20Sopenharmony_ci#define ACPI_MADT_TRIGGER_CONFORMS        (0)
8718c2ecf20Sopenharmony_ci#define ACPI_MADT_TRIGGER_EDGE            (1<<2)
8728c2ecf20Sopenharmony_ci#define ACPI_MADT_TRIGGER_RESERVED        (2<<2)
8738c2ecf20Sopenharmony_ci#define ACPI_MADT_TRIGGER_LEVEL           (3<<2)
8748c2ecf20Sopenharmony_ci
8758c2ecf20Sopenharmony_ci/*******************************************************************************
8768c2ecf20Sopenharmony_ci *
8778c2ecf20Sopenharmony_ci * MCFG - PCI Memory Mapped Configuration table and subtable
8788c2ecf20Sopenharmony_ci *        Version 1
8798c2ecf20Sopenharmony_ci *
8808c2ecf20Sopenharmony_ci * Conforms to "PCI Firmware Specification", Revision 3.0, June 20, 2005
8818c2ecf20Sopenharmony_ci *
8828c2ecf20Sopenharmony_ci ******************************************************************************/
8838c2ecf20Sopenharmony_ci
8848c2ecf20Sopenharmony_cistruct acpi_table_mcfg {
8858c2ecf20Sopenharmony_ci	struct acpi_table_header header;	/* Common ACPI table header */
8868c2ecf20Sopenharmony_ci	u8 reserved[8];
8878c2ecf20Sopenharmony_ci};
8888c2ecf20Sopenharmony_ci
8898c2ecf20Sopenharmony_ci/* Subtable */
8908c2ecf20Sopenharmony_ci
8918c2ecf20Sopenharmony_cistruct acpi_mcfg_allocation {
8928c2ecf20Sopenharmony_ci	u64 address;		/* Base address, processor-relative */
8938c2ecf20Sopenharmony_ci	u16 pci_segment;	/* PCI segment group number */
8948c2ecf20Sopenharmony_ci	u8 start_bus_number;	/* Starting PCI Bus number */
8958c2ecf20Sopenharmony_ci	u8 end_bus_number;	/* Final PCI Bus number */
8968c2ecf20Sopenharmony_ci	u32 reserved;
8978c2ecf20Sopenharmony_ci};
8988c2ecf20Sopenharmony_ci
8998c2ecf20Sopenharmony_ci/*******************************************************************************
9008c2ecf20Sopenharmony_ci *
9018c2ecf20Sopenharmony_ci * MCHI - Management Controller Host Interface Table
9028c2ecf20Sopenharmony_ci *        Version 1
9038c2ecf20Sopenharmony_ci *
9048c2ecf20Sopenharmony_ci * Conforms to "Management Component Transport Protocol (MCTP) Host
9058c2ecf20Sopenharmony_ci * Interface Specification", Revision 1.0.0a, October 13, 2009
9068c2ecf20Sopenharmony_ci *
9078c2ecf20Sopenharmony_ci ******************************************************************************/
9088c2ecf20Sopenharmony_ci
9098c2ecf20Sopenharmony_cistruct acpi_table_mchi {
9108c2ecf20Sopenharmony_ci	struct acpi_table_header header;	/* Common ACPI table header */
9118c2ecf20Sopenharmony_ci	u8 interface_type;
9128c2ecf20Sopenharmony_ci	u8 protocol;
9138c2ecf20Sopenharmony_ci	u64 protocol_data;
9148c2ecf20Sopenharmony_ci	u8 interrupt_type;
9158c2ecf20Sopenharmony_ci	u8 gpe;
9168c2ecf20Sopenharmony_ci	u8 pci_device_flag;
9178c2ecf20Sopenharmony_ci	u32 global_interrupt;
9188c2ecf20Sopenharmony_ci	struct acpi_generic_address control_register;
9198c2ecf20Sopenharmony_ci	u8 pci_segment;
9208c2ecf20Sopenharmony_ci	u8 pci_bus;
9218c2ecf20Sopenharmony_ci	u8 pci_device;
9228c2ecf20Sopenharmony_ci	u8 pci_function;
9238c2ecf20Sopenharmony_ci};
9248c2ecf20Sopenharmony_ci
9258c2ecf20Sopenharmony_ci/*******************************************************************************
9268c2ecf20Sopenharmony_ci *
9278c2ecf20Sopenharmony_ci * MPST - Memory Power State Table (ACPI 5.0)
9288c2ecf20Sopenharmony_ci *        Version 1
9298c2ecf20Sopenharmony_ci *
9308c2ecf20Sopenharmony_ci ******************************************************************************/
9318c2ecf20Sopenharmony_ci
9328c2ecf20Sopenharmony_ci#define ACPI_MPST_CHANNEL_INFO \
9338c2ecf20Sopenharmony_ci	u8                              channel_id; \
9348c2ecf20Sopenharmony_ci	u8                              reserved1[3]; \
9358c2ecf20Sopenharmony_ci	u16                             power_node_count; \
9368c2ecf20Sopenharmony_ci	u16                             reserved2;
9378c2ecf20Sopenharmony_ci
9388c2ecf20Sopenharmony_ci/* Main table */
9398c2ecf20Sopenharmony_ci
9408c2ecf20Sopenharmony_cistruct acpi_table_mpst {
9418c2ecf20Sopenharmony_ci	struct acpi_table_header header;	/* Common ACPI table header */
9428c2ecf20Sopenharmony_ci	 ACPI_MPST_CHANNEL_INFO	/* Platform Communication Channel */
9438c2ecf20Sopenharmony_ci};
9448c2ecf20Sopenharmony_ci
9458c2ecf20Sopenharmony_ci/* Memory Platform Communication Channel Info */
9468c2ecf20Sopenharmony_ci
9478c2ecf20Sopenharmony_cistruct acpi_mpst_channel {
9488c2ecf20Sopenharmony_ci	ACPI_MPST_CHANNEL_INFO	/* Platform Communication Channel */
9498c2ecf20Sopenharmony_ci};
9508c2ecf20Sopenharmony_ci
9518c2ecf20Sopenharmony_ci/* Memory Power Node Structure */
9528c2ecf20Sopenharmony_ci
9538c2ecf20Sopenharmony_cistruct acpi_mpst_power_node {
9548c2ecf20Sopenharmony_ci	u8 flags;
9558c2ecf20Sopenharmony_ci	u8 reserved1;
9568c2ecf20Sopenharmony_ci	u16 node_id;
9578c2ecf20Sopenharmony_ci	u32 length;
9588c2ecf20Sopenharmony_ci	u64 range_address;
9598c2ecf20Sopenharmony_ci	u64 range_length;
9608c2ecf20Sopenharmony_ci	u32 num_power_states;
9618c2ecf20Sopenharmony_ci	u32 num_physical_components;
9628c2ecf20Sopenharmony_ci};
9638c2ecf20Sopenharmony_ci
9648c2ecf20Sopenharmony_ci/* Values for Flags field above */
9658c2ecf20Sopenharmony_ci
9668c2ecf20Sopenharmony_ci#define ACPI_MPST_ENABLED               1
9678c2ecf20Sopenharmony_ci#define ACPI_MPST_POWER_MANAGED         2
9688c2ecf20Sopenharmony_ci#define ACPI_MPST_HOT_PLUG_CAPABLE      4
9698c2ecf20Sopenharmony_ci
9708c2ecf20Sopenharmony_ci/* Memory Power State Structure (follows POWER_NODE above) */
9718c2ecf20Sopenharmony_ci
9728c2ecf20Sopenharmony_cistruct acpi_mpst_power_state {
9738c2ecf20Sopenharmony_ci	u8 power_state;
9748c2ecf20Sopenharmony_ci	u8 info_index;
9758c2ecf20Sopenharmony_ci};
9768c2ecf20Sopenharmony_ci
9778c2ecf20Sopenharmony_ci/* Physical Component ID Structure (follows POWER_STATE above) */
9788c2ecf20Sopenharmony_ci
9798c2ecf20Sopenharmony_cistruct acpi_mpst_component {
9808c2ecf20Sopenharmony_ci	u16 component_id;
9818c2ecf20Sopenharmony_ci};
9828c2ecf20Sopenharmony_ci
9838c2ecf20Sopenharmony_ci/* Memory Power State Characteristics Structure (follows all POWER_NODEs) */
9848c2ecf20Sopenharmony_ci
9858c2ecf20Sopenharmony_cistruct acpi_mpst_data_hdr {
9868c2ecf20Sopenharmony_ci	u16 characteristics_count;
9878c2ecf20Sopenharmony_ci	u16 reserved;
9888c2ecf20Sopenharmony_ci};
9898c2ecf20Sopenharmony_ci
9908c2ecf20Sopenharmony_cistruct acpi_mpst_power_data {
9918c2ecf20Sopenharmony_ci	u8 structure_id;
9928c2ecf20Sopenharmony_ci	u8 flags;
9938c2ecf20Sopenharmony_ci	u16 reserved1;
9948c2ecf20Sopenharmony_ci	u32 average_power;
9958c2ecf20Sopenharmony_ci	u32 power_saving;
9968c2ecf20Sopenharmony_ci	u64 exit_latency;
9978c2ecf20Sopenharmony_ci	u64 reserved2;
9988c2ecf20Sopenharmony_ci};
9998c2ecf20Sopenharmony_ci
10008c2ecf20Sopenharmony_ci/* Values for Flags field above */
10018c2ecf20Sopenharmony_ci
10028c2ecf20Sopenharmony_ci#define ACPI_MPST_PRESERVE              1
10038c2ecf20Sopenharmony_ci#define ACPI_MPST_AUTOENTRY             2
10048c2ecf20Sopenharmony_ci#define ACPI_MPST_AUTOEXIT              4
10058c2ecf20Sopenharmony_ci
10068c2ecf20Sopenharmony_ci/* Shared Memory Region (not part of an ACPI table) */
10078c2ecf20Sopenharmony_ci
10088c2ecf20Sopenharmony_cistruct acpi_mpst_shared {
10098c2ecf20Sopenharmony_ci	u32 signature;
10108c2ecf20Sopenharmony_ci	u16 pcc_command;
10118c2ecf20Sopenharmony_ci	u16 pcc_status;
10128c2ecf20Sopenharmony_ci	u32 command_register;
10138c2ecf20Sopenharmony_ci	u32 status_register;
10148c2ecf20Sopenharmony_ci	u32 power_state_id;
10158c2ecf20Sopenharmony_ci	u32 power_node_id;
10168c2ecf20Sopenharmony_ci	u64 energy_consumed;
10178c2ecf20Sopenharmony_ci	u64 average_power;
10188c2ecf20Sopenharmony_ci};
10198c2ecf20Sopenharmony_ci
10208c2ecf20Sopenharmony_ci/*******************************************************************************
10218c2ecf20Sopenharmony_ci *
10228c2ecf20Sopenharmony_ci * MSCT - Maximum System Characteristics Table (ACPI 4.0)
10238c2ecf20Sopenharmony_ci *        Version 1
10248c2ecf20Sopenharmony_ci *
10258c2ecf20Sopenharmony_ci ******************************************************************************/
10268c2ecf20Sopenharmony_ci
10278c2ecf20Sopenharmony_cistruct acpi_table_msct {
10288c2ecf20Sopenharmony_ci	struct acpi_table_header header;	/* Common ACPI table header */
10298c2ecf20Sopenharmony_ci	u32 proximity_offset;	/* Location of proximity info struct(s) */
10308c2ecf20Sopenharmony_ci	u32 max_proximity_domains;	/* Max number of proximity domains */
10318c2ecf20Sopenharmony_ci	u32 max_clock_domains;	/* Max number of clock domains */
10328c2ecf20Sopenharmony_ci	u64 max_address;	/* Max physical address in system */
10338c2ecf20Sopenharmony_ci};
10348c2ecf20Sopenharmony_ci
10358c2ecf20Sopenharmony_ci/* subtable - Maximum Proximity Domain Information. Version 1 */
10368c2ecf20Sopenharmony_ci
10378c2ecf20Sopenharmony_cistruct acpi_msct_proximity {
10388c2ecf20Sopenharmony_ci	u8 revision;
10398c2ecf20Sopenharmony_ci	u8 length;
10408c2ecf20Sopenharmony_ci	u32 range_start;	/* Start of domain range */
10418c2ecf20Sopenharmony_ci	u32 range_end;		/* End of domain range */
10428c2ecf20Sopenharmony_ci	u32 processor_capacity;
10438c2ecf20Sopenharmony_ci	u64 memory_capacity;	/* In bytes */
10448c2ecf20Sopenharmony_ci};
10458c2ecf20Sopenharmony_ci
10468c2ecf20Sopenharmony_ci/*******************************************************************************
10478c2ecf20Sopenharmony_ci *
10488c2ecf20Sopenharmony_ci * MSDM - Microsoft Data Management table
10498c2ecf20Sopenharmony_ci *
10508c2ecf20Sopenharmony_ci * Conforms to "Microsoft Software Licensing Tables (SLIC and MSDM)",
10518c2ecf20Sopenharmony_ci * November 29, 2011. Copyright 2011 Microsoft
10528c2ecf20Sopenharmony_ci *
10538c2ecf20Sopenharmony_ci ******************************************************************************/
10548c2ecf20Sopenharmony_ci
10558c2ecf20Sopenharmony_ci/* Basic MSDM table is only the common ACPI header */
10568c2ecf20Sopenharmony_ci
10578c2ecf20Sopenharmony_cistruct acpi_table_msdm {
10588c2ecf20Sopenharmony_ci	struct acpi_table_header header;	/* Common ACPI table header */
10598c2ecf20Sopenharmony_ci};
10608c2ecf20Sopenharmony_ci
10618c2ecf20Sopenharmony_ci/*******************************************************************************
10628c2ecf20Sopenharmony_ci *
10638c2ecf20Sopenharmony_ci * MTMR - MID Timer Table
10648c2ecf20Sopenharmony_ci *        Version 1
10658c2ecf20Sopenharmony_ci *
10668c2ecf20Sopenharmony_ci * Conforms to "Simple Firmware Interface Specification",
10678c2ecf20Sopenharmony_ci * Draft 0.8.2, Oct 19, 2010
10688c2ecf20Sopenharmony_ci * NOTE: The ACPI MTMR is equivalent to the SFI MTMR table.
10698c2ecf20Sopenharmony_ci *
10708c2ecf20Sopenharmony_ci ******************************************************************************/
10718c2ecf20Sopenharmony_ci
10728c2ecf20Sopenharmony_cistruct acpi_table_mtmr {
10738c2ecf20Sopenharmony_ci	struct acpi_table_header header;	/* Common ACPI table header */
10748c2ecf20Sopenharmony_ci};
10758c2ecf20Sopenharmony_ci
10768c2ecf20Sopenharmony_ci/* MTMR entry */
10778c2ecf20Sopenharmony_ci
10788c2ecf20Sopenharmony_cistruct acpi_mtmr_entry {
10798c2ecf20Sopenharmony_ci	struct acpi_generic_address physical_address;
10808c2ecf20Sopenharmony_ci	u32 frequency;
10818c2ecf20Sopenharmony_ci	u32 irq;
10828c2ecf20Sopenharmony_ci};
10838c2ecf20Sopenharmony_ci
10848c2ecf20Sopenharmony_ci/*******************************************************************************
10858c2ecf20Sopenharmony_ci *
10868c2ecf20Sopenharmony_ci * NFIT - NVDIMM Interface Table (ACPI 6.0+)
10878c2ecf20Sopenharmony_ci *        Version 1
10888c2ecf20Sopenharmony_ci *
10898c2ecf20Sopenharmony_ci ******************************************************************************/
10908c2ecf20Sopenharmony_ci
10918c2ecf20Sopenharmony_cistruct acpi_table_nfit {
10928c2ecf20Sopenharmony_ci	struct acpi_table_header header;	/* Common ACPI table header */
10938c2ecf20Sopenharmony_ci	u32 reserved;		/* Reserved, must be zero */
10948c2ecf20Sopenharmony_ci};
10958c2ecf20Sopenharmony_ci
10968c2ecf20Sopenharmony_ci/* Subtable header for NFIT */
10978c2ecf20Sopenharmony_ci
10988c2ecf20Sopenharmony_cistruct acpi_nfit_header {
10998c2ecf20Sopenharmony_ci	u16 type;
11008c2ecf20Sopenharmony_ci	u16 length;
11018c2ecf20Sopenharmony_ci};
11028c2ecf20Sopenharmony_ci
11038c2ecf20Sopenharmony_ci/* Values for subtable type in struct acpi_nfit_header */
11048c2ecf20Sopenharmony_ci
11058c2ecf20Sopenharmony_cienum acpi_nfit_type {
11068c2ecf20Sopenharmony_ci	ACPI_NFIT_TYPE_SYSTEM_ADDRESS = 0,
11078c2ecf20Sopenharmony_ci	ACPI_NFIT_TYPE_MEMORY_MAP = 1,
11088c2ecf20Sopenharmony_ci	ACPI_NFIT_TYPE_INTERLEAVE = 2,
11098c2ecf20Sopenharmony_ci	ACPI_NFIT_TYPE_SMBIOS = 3,
11108c2ecf20Sopenharmony_ci	ACPI_NFIT_TYPE_CONTROL_REGION = 4,
11118c2ecf20Sopenharmony_ci	ACPI_NFIT_TYPE_DATA_REGION = 5,
11128c2ecf20Sopenharmony_ci	ACPI_NFIT_TYPE_FLUSH_ADDRESS = 6,
11138c2ecf20Sopenharmony_ci	ACPI_NFIT_TYPE_CAPABILITIES = 7,
11148c2ecf20Sopenharmony_ci	ACPI_NFIT_TYPE_RESERVED = 8	/* 8 and greater are reserved */
11158c2ecf20Sopenharmony_ci};
11168c2ecf20Sopenharmony_ci
11178c2ecf20Sopenharmony_ci/*
11188c2ecf20Sopenharmony_ci * NFIT Subtables
11198c2ecf20Sopenharmony_ci */
11208c2ecf20Sopenharmony_ci
11218c2ecf20Sopenharmony_ci/* 0: System Physical Address Range Structure */
11228c2ecf20Sopenharmony_ci
11238c2ecf20Sopenharmony_cistruct acpi_nfit_system_address {
11248c2ecf20Sopenharmony_ci	struct acpi_nfit_header header;
11258c2ecf20Sopenharmony_ci	u16 range_index;
11268c2ecf20Sopenharmony_ci	u16 flags;
11278c2ecf20Sopenharmony_ci	u32 reserved;		/* Reserved, must be zero */
11288c2ecf20Sopenharmony_ci	u32 proximity_domain;
11298c2ecf20Sopenharmony_ci	u8 range_guid[16];
11308c2ecf20Sopenharmony_ci	u64 address;
11318c2ecf20Sopenharmony_ci	u64 length;
11328c2ecf20Sopenharmony_ci	u64 memory_mapping;
11338c2ecf20Sopenharmony_ci};
11348c2ecf20Sopenharmony_ci
11358c2ecf20Sopenharmony_ci/* Flags */
11368c2ecf20Sopenharmony_ci
11378c2ecf20Sopenharmony_ci#define ACPI_NFIT_ADD_ONLINE_ONLY       (1)	/* 00: Add/Online Operation Only */
11388c2ecf20Sopenharmony_ci#define ACPI_NFIT_PROXIMITY_VALID       (1<<1)	/* 01: Proximity Domain Valid */
11398c2ecf20Sopenharmony_ci
11408c2ecf20Sopenharmony_ci/* Range Type GUIDs appear in the include/acuuid.h file */
11418c2ecf20Sopenharmony_ci
11428c2ecf20Sopenharmony_ci/* 1: Memory Device to System Address Range Map Structure */
11438c2ecf20Sopenharmony_ci
11448c2ecf20Sopenharmony_cistruct acpi_nfit_memory_map {
11458c2ecf20Sopenharmony_ci	struct acpi_nfit_header header;
11468c2ecf20Sopenharmony_ci	u32 device_handle;
11478c2ecf20Sopenharmony_ci	u16 physical_id;
11488c2ecf20Sopenharmony_ci	u16 region_id;
11498c2ecf20Sopenharmony_ci	u16 range_index;
11508c2ecf20Sopenharmony_ci	u16 region_index;
11518c2ecf20Sopenharmony_ci	u64 region_size;
11528c2ecf20Sopenharmony_ci	u64 region_offset;
11538c2ecf20Sopenharmony_ci	u64 address;
11548c2ecf20Sopenharmony_ci	u16 interleave_index;
11558c2ecf20Sopenharmony_ci	u16 interleave_ways;
11568c2ecf20Sopenharmony_ci	u16 flags;
11578c2ecf20Sopenharmony_ci	u16 reserved;		/* Reserved, must be zero */
11588c2ecf20Sopenharmony_ci};
11598c2ecf20Sopenharmony_ci
11608c2ecf20Sopenharmony_ci/* Flags */
11618c2ecf20Sopenharmony_ci
11628c2ecf20Sopenharmony_ci#define ACPI_NFIT_MEM_SAVE_FAILED       (1)	/* 00: Last SAVE to Memory Device failed */
11638c2ecf20Sopenharmony_ci#define ACPI_NFIT_MEM_RESTORE_FAILED    (1<<1)	/* 01: Last RESTORE from Memory Device failed */
11648c2ecf20Sopenharmony_ci#define ACPI_NFIT_MEM_FLUSH_FAILED      (1<<2)	/* 02: Platform flush failed */
11658c2ecf20Sopenharmony_ci#define ACPI_NFIT_MEM_NOT_ARMED         (1<<3)	/* 03: Memory Device is not armed */
11668c2ecf20Sopenharmony_ci#define ACPI_NFIT_MEM_HEALTH_OBSERVED   (1<<4)	/* 04: Memory Device observed SMART/health events */
11678c2ecf20Sopenharmony_ci#define ACPI_NFIT_MEM_HEALTH_ENABLED    (1<<5)	/* 05: SMART/health events enabled */
11688c2ecf20Sopenharmony_ci#define ACPI_NFIT_MEM_MAP_FAILED        (1<<6)	/* 06: Mapping to SPA failed */
11698c2ecf20Sopenharmony_ci
11708c2ecf20Sopenharmony_ci/* 2: Interleave Structure */
11718c2ecf20Sopenharmony_ci
11728c2ecf20Sopenharmony_cistruct acpi_nfit_interleave {
11738c2ecf20Sopenharmony_ci	struct acpi_nfit_header header;
11748c2ecf20Sopenharmony_ci	u16 interleave_index;
11758c2ecf20Sopenharmony_ci	u16 reserved;		/* Reserved, must be zero */
11768c2ecf20Sopenharmony_ci	u32 line_count;
11778c2ecf20Sopenharmony_ci	u32 line_size;
11788c2ecf20Sopenharmony_ci	u32 line_offset[1];	/* Variable length */
11798c2ecf20Sopenharmony_ci};
11808c2ecf20Sopenharmony_ci
11818c2ecf20Sopenharmony_ci/* 3: SMBIOS Management Information Structure */
11828c2ecf20Sopenharmony_ci
11838c2ecf20Sopenharmony_cistruct acpi_nfit_smbios {
11848c2ecf20Sopenharmony_ci	struct acpi_nfit_header header;
11858c2ecf20Sopenharmony_ci	u32 reserved;		/* Reserved, must be zero */
11868c2ecf20Sopenharmony_ci	u8 data[1];		/* Variable length */
11878c2ecf20Sopenharmony_ci};
11888c2ecf20Sopenharmony_ci
11898c2ecf20Sopenharmony_ci/* 4: NVDIMM Control Region Structure */
11908c2ecf20Sopenharmony_ci
11918c2ecf20Sopenharmony_cistruct acpi_nfit_control_region {
11928c2ecf20Sopenharmony_ci	struct acpi_nfit_header header;
11938c2ecf20Sopenharmony_ci	u16 region_index;
11948c2ecf20Sopenharmony_ci	u16 vendor_id;
11958c2ecf20Sopenharmony_ci	u16 device_id;
11968c2ecf20Sopenharmony_ci	u16 revision_id;
11978c2ecf20Sopenharmony_ci	u16 subsystem_vendor_id;
11988c2ecf20Sopenharmony_ci	u16 subsystem_device_id;
11998c2ecf20Sopenharmony_ci	u16 subsystem_revision_id;
12008c2ecf20Sopenharmony_ci	u8 valid_fields;
12018c2ecf20Sopenharmony_ci	u8 manufacturing_location;
12028c2ecf20Sopenharmony_ci	u16 manufacturing_date;
12038c2ecf20Sopenharmony_ci	u8 reserved[2];		/* Reserved, must be zero */
12048c2ecf20Sopenharmony_ci	u32 serial_number;
12058c2ecf20Sopenharmony_ci	u16 code;
12068c2ecf20Sopenharmony_ci	u16 windows;
12078c2ecf20Sopenharmony_ci	u64 window_size;
12088c2ecf20Sopenharmony_ci	u64 command_offset;
12098c2ecf20Sopenharmony_ci	u64 command_size;
12108c2ecf20Sopenharmony_ci	u64 status_offset;
12118c2ecf20Sopenharmony_ci	u64 status_size;
12128c2ecf20Sopenharmony_ci	u16 flags;
12138c2ecf20Sopenharmony_ci	u8 reserved1[6];	/* Reserved, must be zero */
12148c2ecf20Sopenharmony_ci};
12158c2ecf20Sopenharmony_ci
12168c2ecf20Sopenharmony_ci/* Flags */
12178c2ecf20Sopenharmony_ci
12188c2ecf20Sopenharmony_ci#define ACPI_NFIT_CONTROL_BUFFERED          (1)	/* Block Data Windows implementation is buffered */
12198c2ecf20Sopenharmony_ci
12208c2ecf20Sopenharmony_ci/* valid_fields bits */
12218c2ecf20Sopenharmony_ci
12228c2ecf20Sopenharmony_ci#define ACPI_NFIT_CONTROL_MFG_INFO_VALID    (1)	/* Manufacturing fields are valid */
12238c2ecf20Sopenharmony_ci
12248c2ecf20Sopenharmony_ci/* 5: NVDIMM Block Data Window Region Structure */
12258c2ecf20Sopenharmony_ci
12268c2ecf20Sopenharmony_cistruct acpi_nfit_data_region {
12278c2ecf20Sopenharmony_ci	struct acpi_nfit_header header;
12288c2ecf20Sopenharmony_ci	u16 region_index;
12298c2ecf20Sopenharmony_ci	u16 windows;
12308c2ecf20Sopenharmony_ci	u64 offset;
12318c2ecf20Sopenharmony_ci	u64 size;
12328c2ecf20Sopenharmony_ci	u64 capacity;
12338c2ecf20Sopenharmony_ci	u64 start_address;
12348c2ecf20Sopenharmony_ci};
12358c2ecf20Sopenharmony_ci
12368c2ecf20Sopenharmony_ci/* 6: Flush Hint Address Structure */
12378c2ecf20Sopenharmony_ci
12388c2ecf20Sopenharmony_cistruct acpi_nfit_flush_address {
12398c2ecf20Sopenharmony_ci	struct acpi_nfit_header header;
12408c2ecf20Sopenharmony_ci	u32 device_handle;
12418c2ecf20Sopenharmony_ci	u16 hint_count;
12428c2ecf20Sopenharmony_ci	u8 reserved[6];		/* Reserved, must be zero */
12438c2ecf20Sopenharmony_ci	u64 hint_address[1];	/* Variable length */
12448c2ecf20Sopenharmony_ci};
12458c2ecf20Sopenharmony_ci
12468c2ecf20Sopenharmony_ci/* 7: Platform Capabilities Structure */
12478c2ecf20Sopenharmony_ci
12488c2ecf20Sopenharmony_cistruct acpi_nfit_capabilities {
12498c2ecf20Sopenharmony_ci	struct acpi_nfit_header header;
12508c2ecf20Sopenharmony_ci	u8 highest_capability;
12518c2ecf20Sopenharmony_ci	u8 reserved[3];		/* Reserved, must be zero */
12528c2ecf20Sopenharmony_ci	u32 capabilities;
12538c2ecf20Sopenharmony_ci	u32 reserved2;
12548c2ecf20Sopenharmony_ci};
12558c2ecf20Sopenharmony_ci
12568c2ecf20Sopenharmony_ci/* Capabilities Flags */
12578c2ecf20Sopenharmony_ci
12588c2ecf20Sopenharmony_ci#define ACPI_NFIT_CAPABILITY_CACHE_FLUSH       (1)	/* 00: Cache Flush to NVDIMM capable */
12598c2ecf20Sopenharmony_ci#define ACPI_NFIT_CAPABILITY_MEM_FLUSH         (1<<1)	/* 01: Memory Flush to NVDIMM capable */
12608c2ecf20Sopenharmony_ci#define ACPI_NFIT_CAPABILITY_MEM_MIRRORING     (1<<2)	/* 02: Memory Mirroring capable */
12618c2ecf20Sopenharmony_ci
12628c2ecf20Sopenharmony_ci/*
12638c2ecf20Sopenharmony_ci * NFIT/DVDIMM device handle support - used as the _ADR for each NVDIMM
12648c2ecf20Sopenharmony_ci */
12658c2ecf20Sopenharmony_cistruct nfit_device_handle {
12668c2ecf20Sopenharmony_ci	u32 handle;
12678c2ecf20Sopenharmony_ci};
12688c2ecf20Sopenharmony_ci
12698c2ecf20Sopenharmony_ci/* Device handle construction and extraction macros */
12708c2ecf20Sopenharmony_ci
12718c2ecf20Sopenharmony_ci#define ACPI_NFIT_DIMM_NUMBER_MASK              0x0000000F
12728c2ecf20Sopenharmony_ci#define ACPI_NFIT_CHANNEL_NUMBER_MASK           0x000000F0
12738c2ecf20Sopenharmony_ci#define ACPI_NFIT_MEMORY_ID_MASK                0x00000F00
12748c2ecf20Sopenharmony_ci#define ACPI_NFIT_SOCKET_ID_MASK                0x0000F000
12758c2ecf20Sopenharmony_ci#define ACPI_NFIT_NODE_ID_MASK                  0x0FFF0000
12768c2ecf20Sopenharmony_ci
12778c2ecf20Sopenharmony_ci#define ACPI_NFIT_DIMM_NUMBER_OFFSET            0
12788c2ecf20Sopenharmony_ci#define ACPI_NFIT_CHANNEL_NUMBER_OFFSET         4
12798c2ecf20Sopenharmony_ci#define ACPI_NFIT_MEMORY_ID_OFFSET              8
12808c2ecf20Sopenharmony_ci#define ACPI_NFIT_SOCKET_ID_OFFSET              12
12818c2ecf20Sopenharmony_ci#define ACPI_NFIT_NODE_ID_OFFSET                16
12828c2ecf20Sopenharmony_ci
12838c2ecf20Sopenharmony_ci/* Macro to construct a NFIT/NVDIMM device handle */
12848c2ecf20Sopenharmony_ci
12858c2ecf20Sopenharmony_ci#define ACPI_NFIT_BUILD_DEVICE_HANDLE(dimm, channel, memory, socket, node) \
12868c2ecf20Sopenharmony_ci	((dimm)                                         | \
12878c2ecf20Sopenharmony_ci	((channel) << ACPI_NFIT_CHANNEL_NUMBER_OFFSET)  | \
12888c2ecf20Sopenharmony_ci	((memory)  << ACPI_NFIT_MEMORY_ID_OFFSET)       | \
12898c2ecf20Sopenharmony_ci	((socket)  << ACPI_NFIT_SOCKET_ID_OFFSET)       | \
12908c2ecf20Sopenharmony_ci	((node)    << ACPI_NFIT_NODE_ID_OFFSET))
12918c2ecf20Sopenharmony_ci
12928c2ecf20Sopenharmony_ci/* Macros to extract individual fields from a NFIT/NVDIMM device handle */
12938c2ecf20Sopenharmony_ci
12948c2ecf20Sopenharmony_ci#define ACPI_NFIT_GET_DIMM_NUMBER(handle) \
12958c2ecf20Sopenharmony_ci	((handle) & ACPI_NFIT_DIMM_NUMBER_MASK)
12968c2ecf20Sopenharmony_ci
12978c2ecf20Sopenharmony_ci#define ACPI_NFIT_GET_CHANNEL_NUMBER(handle) \
12988c2ecf20Sopenharmony_ci	(((handle) & ACPI_NFIT_CHANNEL_NUMBER_MASK) >> ACPI_NFIT_CHANNEL_NUMBER_OFFSET)
12998c2ecf20Sopenharmony_ci
13008c2ecf20Sopenharmony_ci#define ACPI_NFIT_GET_MEMORY_ID(handle) \
13018c2ecf20Sopenharmony_ci	(((handle) & ACPI_NFIT_MEMORY_ID_MASK)      >> ACPI_NFIT_MEMORY_ID_OFFSET)
13028c2ecf20Sopenharmony_ci
13038c2ecf20Sopenharmony_ci#define ACPI_NFIT_GET_SOCKET_ID(handle) \
13048c2ecf20Sopenharmony_ci	(((handle) & ACPI_NFIT_SOCKET_ID_MASK)      >> ACPI_NFIT_SOCKET_ID_OFFSET)
13058c2ecf20Sopenharmony_ci
13068c2ecf20Sopenharmony_ci#define ACPI_NFIT_GET_NODE_ID(handle) \
13078c2ecf20Sopenharmony_ci	(((handle) & ACPI_NFIT_NODE_ID_MASK)        >> ACPI_NFIT_NODE_ID_OFFSET)
13088c2ecf20Sopenharmony_ci
13098c2ecf20Sopenharmony_ci/*******************************************************************************
13108c2ecf20Sopenharmony_ci *
13118c2ecf20Sopenharmony_ci * PCCT - Platform Communications Channel Table (ACPI 5.0)
13128c2ecf20Sopenharmony_ci *        Version 2 (ACPI 6.2)
13138c2ecf20Sopenharmony_ci *
13148c2ecf20Sopenharmony_ci ******************************************************************************/
13158c2ecf20Sopenharmony_ci
13168c2ecf20Sopenharmony_cistruct acpi_table_pcct {
13178c2ecf20Sopenharmony_ci	struct acpi_table_header header;	/* Common ACPI table header */
13188c2ecf20Sopenharmony_ci	u32 flags;
13198c2ecf20Sopenharmony_ci	u64 reserved;
13208c2ecf20Sopenharmony_ci};
13218c2ecf20Sopenharmony_ci
13228c2ecf20Sopenharmony_ci/* Values for Flags field above */
13238c2ecf20Sopenharmony_ci
13248c2ecf20Sopenharmony_ci#define ACPI_PCCT_DOORBELL              1
13258c2ecf20Sopenharmony_ci
13268c2ecf20Sopenharmony_ci/* Values for subtable type in struct acpi_subtable_header */
13278c2ecf20Sopenharmony_ci
13288c2ecf20Sopenharmony_cienum acpi_pcct_type {
13298c2ecf20Sopenharmony_ci	ACPI_PCCT_TYPE_GENERIC_SUBSPACE = 0,
13308c2ecf20Sopenharmony_ci	ACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE = 1,
13318c2ecf20Sopenharmony_ci	ACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE_TYPE2 = 2,	/* ACPI 6.1 */
13328c2ecf20Sopenharmony_ci	ACPI_PCCT_TYPE_EXT_PCC_MASTER_SUBSPACE = 3,	/* ACPI 6.2 */
13338c2ecf20Sopenharmony_ci	ACPI_PCCT_TYPE_EXT_PCC_SLAVE_SUBSPACE = 4,	/* ACPI 6.2 */
13348c2ecf20Sopenharmony_ci	ACPI_PCCT_TYPE_RESERVED = 5	/* 5 and greater are reserved */
13358c2ecf20Sopenharmony_ci};
13368c2ecf20Sopenharmony_ci
13378c2ecf20Sopenharmony_ci/*
13388c2ecf20Sopenharmony_ci * PCCT Subtables, correspond to Type in struct acpi_subtable_header
13398c2ecf20Sopenharmony_ci */
13408c2ecf20Sopenharmony_ci
13418c2ecf20Sopenharmony_ci/* 0: Generic Communications Subspace */
13428c2ecf20Sopenharmony_ci
13438c2ecf20Sopenharmony_cistruct acpi_pcct_subspace {
13448c2ecf20Sopenharmony_ci	struct acpi_subtable_header header;
13458c2ecf20Sopenharmony_ci	u8 reserved[6];
13468c2ecf20Sopenharmony_ci	u64 base_address;
13478c2ecf20Sopenharmony_ci	u64 length;
13488c2ecf20Sopenharmony_ci	struct acpi_generic_address doorbell_register;
13498c2ecf20Sopenharmony_ci	u64 preserve_mask;
13508c2ecf20Sopenharmony_ci	u64 write_mask;
13518c2ecf20Sopenharmony_ci	u32 latency;
13528c2ecf20Sopenharmony_ci	u32 max_access_rate;
13538c2ecf20Sopenharmony_ci	u16 min_turnaround_time;
13548c2ecf20Sopenharmony_ci};
13558c2ecf20Sopenharmony_ci
13568c2ecf20Sopenharmony_ci/* 1: HW-reduced Communications Subspace (ACPI 5.1) */
13578c2ecf20Sopenharmony_ci
13588c2ecf20Sopenharmony_cistruct acpi_pcct_hw_reduced {
13598c2ecf20Sopenharmony_ci	struct acpi_subtable_header header;
13608c2ecf20Sopenharmony_ci	u32 platform_interrupt;
13618c2ecf20Sopenharmony_ci	u8 flags;
13628c2ecf20Sopenharmony_ci	u8 reserved;
13638c2ecf20Sopenharmony_ci	u64 base_address;
13648c2ecf20Sopenharmony_ci	u64 length;
13658c2ecf20Sopenharmony_ci	struct acpi_generic_address doorbell_register;
13668c2ecf20Sopenharmony_ci	u64 preserve_mask;
13678c2ecf20Sopenharmony_ci	u64 write_mask;
13688c2ecf20Sopenharmony_ci	u32 latency;
13698c2ecf20Sopenharmony_ci	u32 max_access_rate;
13708c2ecf20Sopenharmony_ci	u16 min_turnaround_time;
13718c2ecf20Sopenharmony_ci};
13728c2ecf20Sopenharmony_ci
13738c2ecf20Sopenharmony_ci/* 2: HW-reduced Communications Subspace Type 2 (ACPI 6.1) */
13748c2ecf20Sopenharmony_ci
13758c2ecf20Sopenharmony_cistruct acpi_pcct_hw_reduced_type2 {
13768c2ecf20Sopenharmony_ci	struct acpi_subtable_header header;
13778c2ecf20Sopenharmony_ci	u32 platform_interrupt;
13788c2ecf20Sopenharmony_ci	u8 flags;
13798c2ecf20Sopenharmony_ci	u8 reserved;
13808c2ecf20Sopenharmony_ci	u64 base_address;
13818c2ecf20Sopenharmony_ci	u64 length;
13828c2ecf20Sopenharmony_ci	struct acpi_generic_address doorbell_register;
13838c2ecf20Sopenharmony_ci	u64 preserve_mask;
13848c2ecf20Sopenharmony_ci	u64 write_mask;
13858c2ecf20Sopenharmony_ci	u32 latency;
13868c2ecf20Sopenharmony_ci	u32 max_access_rate;
13878c2ecf20Sopenharmony_ci	u16 min_turnaround_time;
13888c2ecf20Sopenharmony_ci	struct acpi_generic_address platform_ack_register;
13898c2ecf20Sopenharmony_ci	u64 ack_preserve_mask;
13908c2ecf20Sopenharmony_ci	u64 ack_write_mask;
13918c2ecf20Sopenharmony_ci};
13928c2ecf20Sopenharmony_ci
13938c2ecf20Sopenharmony_ci/* 3: Extended PCC Master Subspace Type 3 (ACPI 6.2) */
13948c2ecf20Sopenharmony_ci
13958c2ecf20Sopenharmony_cistruct acpi_pcct_ext_pcc_master {
13968c2ecf20Sopenharmony_ci	struct acpi_subtable_header header;
13978c2ecf20Sopenharmony_ci	u32 platform_interrupt;
13988c2ecf20Sopenharmony_ci	u8 flags;
13998c2ecf20Sopenharmony_ci	u8 reserved1;
14008c2ecf20Sopenharmony_ci	u64 base_address;
14018c2ecf20Sopenharmony_ci	u32 length;
14028c2ecf20Sopenharmony_ci	struct acpi_generic_address doorbell_register;
14038c2ecf20Sopenharmony_ci	u64 preserve_mask;
14048c2ecf20Sopenharmony_ci	u64 write_mask;
14058c2ecf20Sopenharmony_ci	u32 latency;
14068c2ecf20Sopenharmony_ci	u32 max_access_rate;
14078c2ecf20Sopenharmony_ci	u32 min_turnaround_time;
14088c2ecf20Sopenharmony_ci	struct acpi_generic_address platform_ack_register;
14098c2ecf20Sopenharmony_ci	u64 ack_preserve_mask;
14108c2ecf20Sopenharmony_ci	u64 ack_set_mask;
14118c2ecf20Sopenharmony_ci	u64 reserved2;
14128c2ecf20Sopenharmony_ci	struct acpi_generic_address cmd_complete_register;
14138c2ecf20Sopenharmony_ci	u64 cmd_complete_mask;
14148c2ecf20Sopenharmony_ci	struct acpi_generic_address cmd_update_register;
14158c2ecf20Sopenharmony_ci	u64 cmd_update_preserve_mask;
14168c2ecf20Sopenharmony_ci	u64 cmd_update_set_mask;
14178c2ecf20Sopenharmony_ci	struct acpi_generic_address error_status_register;
14188c2ecf20Sopenharmony_ci	u64 error_status_mask;
14198c2ecf20Sopenharmony_ci};
14208c2ecf20Sopenharmony_ci
14218c2ecf20Sopenharmony_ci/* 4: Extended PCC Slave Subspace Type 4 (ACPI 6.2) */
14228c2ecf20Sopenharmony_ci
14238c2ecf20Sopenharmony_cistruct acpi_pcct_ext_pcc_slave {
14248c2ecf20Sopenharmony_ci	struct acpi_subtable_header header;
14258c2ecf20Sopenharmony_ci	u32 platform_interrupt;
14268c2ecf20Sopenharmony_ci	u8 flags;
14278c2ecf20Sopenharmony_ci	u8 reserved1;
14288c2ecf20Sopenharmony_ci	u64 base_address;
14298c2ecf20Sopenharmony_ci	u32 length;
14308c2ecf20Sopenharmony_ci	struct acpi_generic_address doorbell_register;
14318c2ecf20Sopenharmony_ci	u64 preserve_mask;
14328c2ecf20Sopenharmony_ci	u64 write_mask;
14338c2ecf20Sopenharmony_ci	u32 latency;
14348c2ecf20Sopenharmony_ci	u32 max_access_rate;
14358c2ecf20Sopenharmony_ci	u32 min_turnaround_time;
14368c2ecf20Sopenharmony_ci	struct acpi_generic_address platform_ack_register;
14378c2ecf20Sopenharmony_ci	u64 ack_preserve_mask;
14388c2ecf20Sopenharmony_ci	u64 ack_set_mask;
14398c2ecf20Sopenharmony_ci	u64 reserved2;
14408c2ecf20Sopenharmony_ci	struct acpi_generic_address cmd_complete_register;
14418c2ecf20Sopenharmony_ci	u64 cmd_complete_mask;
14428c2ecf20Sopenharmony_ci	struct acpi_generic_address cmd_update_register;
14438c2ecf20Sopenharmony_ci	u64 cmd_update_preserve_mask;
14448c2ecf20Sopenharmony_ci	u64 cmd_update_set_mask;
14458c2ecf20Sopenharmony_ci	struct acpi_generic_address error_status_register;
14468c2ecf20Sopenharmony_ci	u64 error_status_mask;
14478c2ecf20Sopenharmony_ci};
14488c2ecf20Sopenharmony_ci
14498c2ecf20Sopenharmony_ci/* Values for doorbell flags above */
14508c2ecf20Sopenharmony_ci
14518c2ecf20Sopenharmony_ci#define ACPI_PCCT_INTERRUPT_POLARITY    (1)
14528c2ecf20Sopenharmony_ci#define ACPI_PCCT_INTERRUPT_MODE        (1<<1)
14538c2ecf20Sopenharmony_ci
14548c2ecf20Sopenharmony_ci/*
14558c2ecf20Sopenharmony_ci * PCC memory structures (not part of the ACPI table)
14568c2ecf20Sopenharmony_ci */
14578c2ecf20Sopenharmony_ci
14588c2ecf20Sopenharmony_ci/* Shared Memory Region */
14598c2ecf20Sopenharmony_ci
14608c2ecf20Sopenharmony_cistruct acpi_pcct_shared_memory {
14618c2ecf20Sopenharmony_ci	u32 signature;
14628c2ecf20Sopenharmony_ci	u16 command;
14638c2ecf20Sopenharmony_ci	u16 status;
14648c2ecf20Sopenharmony_ci};
14658c2ecf20Sopenharmony_ci
14668c2ecf20Sopenharmony_ci/* Extended PCC Subspace Shared Memory Region (ACPI 6.2) */
14678c2ecf20Sopenharmony_ci
14688c2ecf20Sopenharmony_cistruct acpi_pcct_ext_pcc_shared_memory {
14698c2ecf20Sopenharmony_ci	u32 signature;
14708c2ecf20Sopenharmony_ci	u32 flags;
14718c2ecf20Sopenharmony_ci	u32 length;
14728c2ecf20Sopenharmony_ci	u32 command;
14738c2ecf20Sopenharmony_ci};
14748c2ecf20Sopenharmony_ci
14758c2ecf20Sopenharmony_ci/*******************************************************************************
14768c2ecf20Sopenharmony_ci *
14778c2ecf20Sopenharmony_ci * PDTT - Platform Debug Trigger Table (ACPI 6.2)
14788c2ecf20Sopenharmony_ci *        Version 0
14798c2ecf20Sopenharmony_ci *
14808c2ecf20Sopenharmony_ci ******************************************************************************/
14818c2ecf20Sopenharmony_ci
14828c2ecf20Sopenharmony_cistruct acpi_table_pdtt {
14838c2ecf20Sopenharmony_ci	struct acpi_table_header header;	/* Common ACPI table header */
14848c2ecf20Sopenharmony_ci	u8 trigger_count;
14858c2ecf20Sopenharmony_ci	u8 reserved[3];
14868c2ecf20Sopenharmony_ci	u32 array_offset;
14878c2ecf20Sopenharmony_ci};
14888c2ecf20Sopenharmony_ci
14898c2ecf20Sopenharmony_ci/*
14908c2ecf20Sopenharmony_ci * PDTT Communication Channel Identifier Structure.
14918c2ecf20Sopenharmony_ci * The number of these structures is defined by trigger_count above,
14928c2ecf20Sopenharmony_ci * starting at array_offset.
14938c2ecf20Sopenharmony_ci */
14948c2ecf20Sopenharmony_cistruct acpi_pdtt_channel {
14958c2ecf20Sopenharmony_ci	u8 subchannel_id;
14968c2ecf20Sopenharmony_ci	u8 flags;
14978c2ecf20Sopenharmony_ci};
14988c2ecf20Sopenharmony_ci
14998c2ecf20Sopenharmony_ci/* Flags for above */
15008c2ecf20Sopenharmony_ci
15018c2ecf20Sopenharmony_ci#define ACPI_PDTT_RUNTIME_TRIGGER           (1)
15028c2ecf20Sopenharmony_ci#define ACPI_PDTT_WAIT_COMPLETION           (1<<1)
15038c2ecf20Sopenharmony_ci#define ACPI_PDTT_TRIGGER_ORDER             (1<<2)
15048c2ecf20Sopenharmony_ci
15058c2ecf20Sopenharmony_ci/*******************************************************************************
15068c2ecf20Sopenharmony_ci *
15078c2ecf20Sopenharmony_ci * PMTT - Platform Memory Topology Table (ACPI 5.0)
15088c2ecf20Sopenharmony_ci *        Version 1
15098c2ecf20Sopenharmony_ci *
15108c2ecf20Sopenharmony_ci ******************************************************************************/
15118c2ecf20Sopenharmony_ci
15128c2ecf20Sopenharmony_cistruct acpi_table_pmtt {
15138c2ecf20Sopenharmony_ci	struct acpi_table_header header;	/* Common ACPI table header */
15148c2ecf20Sopenharmony_ci	u32 reserved;
15158c2ecf20Sopenharmony_ci};
15168c2ecf20Sopenharmony_ci
15178c2ecf20Sopenharmony_ci/* Common header for PMTT subtables that follow main table */
15188c2ecf20Sopenharmony_ci
15198c2ecf20Sopenharmony_cistruct acpi_pmtt_header {
15208c2ecf20Sopenharmony_ci	u8 type;
15218c2ecf20Sopenharmony_ci	u8 reserved1;
15228c2ecf20Sopenharmony_ci	u16 length;
15238c2ecf20Sopenharmony_ci	u16 flags;
15248c2ecf20Sopenharmony_ci	u16 reserved2;
15258c2ecf20Sopenharmony_ci};
15268c2ecf20Sopenharmony_ci
15278c2ecf20Sopenharmony_ci/* Values for Type field above */
15288c2ecf20Sopenharmony_ci
15298c2ecf20Sopenharmony_ci#define ACPI_PMTT_TYPE_SOCKET           0
15308c2ecf20Sopenharmony_ci#define ACPI_PMTT_TYPE_CONTROLLER       1
15318c2ecf20Sopenharmony_ci#define ACPI_PMTT_TYPE_DIMM             2
15328c2ecf20Sopenharmony_ci#define ACPI_PMTT_TYPE_RESERVED         3	/* 0x03-0xFF are reserved */
15338c2ecf20Sopenharmony_ci
15348c2ecf20Sopenharmony_ci/* Values for Flags field above */
15358c2ecf20Sopenharmony_ci
15368c2ecf20Sopenharmony_ci#define ACPI_PMTT_TOP_LEVEL             0x0001
15378c2ecf20Sopenharmony_ci#define ACPI_PMTT_PHYSICAL              0x0002
15388c2ecf20Sopenharmony_ci#define ACPI_PMTT_MEMORY_TYPE           0x000C
15398c2ecf20Sopenharmony_ci
15408c2ecf20Sopenharmony_ci/*
15418c2ecf20Sopenharmony_ci * PMTT subtables, correspond to Type in struct acpi_pmtt_header
15428c2ecf20Sopenharmony_ci */
15438c2ecf20Sopenharmony_ci
15448c2ecf20Sopenharmony_ci/* 0: Socket Structure */
15458c2ecf20Sopenharmony_ci
15468c2ecf20Sopenharmony_cistruct acpi_pmtt_socket {
15478c2ecf20Sopenharmony_ci	struct acpi_pmtt_header header;
15488c2ecf20Sopenharmony_ci	u16 socket_id;
15498c2ecf20Sopenharmony_ci	u16 reserved;
15508c2ecf20Sopenharmony_ci};
15518c2ecf20Sopenharmony_ci
15528c2ecf20Sopenharmony_ci/* 1: Memory Controller subtable */
15538c2ecf20Sopenharmony_ci
15548c2ecf20Sopenharmony_cistruct acpi_pmtt_controller {
15558c2ecf20Sopenharmony_ci	struct acpi_pmtt_header header;
15568c2ecf20Sopenharmony_ci	u32 read_latency;
15578c2ecf20Sopenharmony_ci	u32 write_latency;
15588c2ecf20Sopenharmony_ci	u32 read_bandwidth;
15598c2ecf20Sopenharmony_ci	u32 write_bandwidth;
15608c2ecf20Sopenharmony_ci	u16 access_width;
15618c2ecf20Sopenharmony_ci	u16 alignment;
15628c2ecf20Sopenharmony_ci	u16 reserved;
15638c2ecf20Sopenharmony_ci	u16 domain_count;
15648c2ecf20Sopenharmony_ci};
15658c2ecf20Sopenharmony_ci
15668c2ecf20Sopenharmony_ci/* 1a: Proximity Domain substructure */
15678c2ecf20Sopenharmony_ci
15688c2ecf20Sopenharmony_cistruct acpi_pmtt_domain {
15698c2ecf20Sopenharmony_ci	u32 proximity_domain;
15708c2ecf20Sopenharmony_ci};
15718c2ecf20Sopenharmony_ci
15728c2ecf20Sopenharmony_ci/* 2: Physical Component Identifier (DIMM) */
15738c2ecf20Sopenharmony_ci
15748c2ecf20Sopenharmony_cistruct acpi_pmtt_physical_component {
15758c2ecf20Sopenharmony_ci	struct acpi_pmtt_header header;
15768c2ecf20Sopenharmony_ci	u16 component_id;
15778c2ecf20Sopenharmony_ci	u16 reserved;
15788c2ecf20Sopenharmony_ci	u32 memory_size;
15798c2ecf20Sopenharmony_ci	u32 bios_handle;
15808c2ecf20Sopenharmony_ci};
15818c2ecf20Sopenharmony_ci
15828c2ecf20Sopenharmony_ci/*******************************************************************************
15838c2ecf20Sopenharmony_ci *
15848c2ecf20Sopenharmony_ci * PPTT - Processor Properties Topology Table (ACPI 6.2)
15858c2ecf20Sopenharmony_ci *        Version 1
15868c2ecf20Sopenharmony_ci *
15878c2ecf20Sopenharmony_ci ******************************************************************************/
15888c2ecf20Sopenharmony_ci
15898c2ecf20Sopenharmony_cistruct acpi_table_pptt {
15908c2ecf20Sopenharmony_ci	struct acpi_table_header header;	/* Common ACPI table header */
15918c2ecf20Sopenharmony_ci};
15928c2ecf20Sopenharmony_ci
15938c2ecf20Sopenharmony_ci/* Values for Type field above */
15948c2ecf20Sopenharmony_ci
15958c2ecf20Sopenharmony_cienum acpi_pptt_type {
15968c2ecf20Sopenharmony_ci	ACPI_PPTT_TYPE_PROCESSOR = 0,
15978c2ecf20Sopenharmony_ci	ACPI_PPTT_TYPE_CACHE = 1,
15988c2ecf20Sopenharmony_ci	ACPI_PPTT_TYPE_ID = 2,
15998c2ecf20Sopenharmony_ci	ACPI_PPTT_TYPE_RESERVED = 3
16008c2ecf20Sopenharmony_ci};
16018c2ecf20Sopenharmony_ci
16028c2ecf20Sopenharmony_ci/* 0: Processor Hierarchy Node Structure */
16038c2ecf20Sopenharmony_ci
16048c2ecf20Sopenharmony_cistruct acpi_pptt_processor {
16058c2ecf20Sopenharmony_ci	struct acpi_subtable_header header;
16068c2ecf20Sopenharmony_ci	u16 reserved;
16078c2ecf20Sopenharmony_ci	u32 flags;
16088c2ecf20Sopenharmony_ci	u32 parent;
16098c2ecf20Sopenharmony_ci	u32 acpi_processor_id;
16108c2ecf20Sopenharmony_ci	u32 number_of_priv_resources;
16118c2ecf20Sopenharmony_ci};
16128c2ecf20Sopenharmony_ci
16138c2ecf20Sopenharmony_ci/* Flags */
16148c2ecf20Sopenharmony_ci
16158c2ecf20Sopenharmony_ci#define ACPI_PPTT_PHYSICAL_PACKAGE          (1)
16168c2ecf20Sopenharmony_ci#define ACPI_PPTT_ACPI_PROCESSOR_ID_VALID   (1<<1)
16178c2ecf20Sopenharmony_ci#define ACPI_PPTT_ACPI_PROCESSOR_IS_THREAD  (1<<2)	/* ACPI 6.3 */
16188c2ecf20Sopenharmony_ci#define ACPI_PPTT_ACPI_LEAF_NODE            (1<<3)	/* ACPI 6.3 */
16198c2ecf20Sopenharmony_ci#define ACPI_PPTT_ACPI_IDENTICAL            (1<<4)	/* ACPI 6.3 */
16208c2ecf20Sopenharmony_ci
16218c2ecf20Sopenharmony_ci/* 1: Cache Type Structure */
16228c2ecf20Sopenharmony_ci
16238c2ecf20Sopenharmony_cistruct acpi_pptt_cache {
16248c2ecf20Sopenharmony_ci	struct acpi_subtable_header header;
16258c2ecf20Sopenharmony_ci	u16 reserved;
16268c2ecf20Sopenharmony_ci	u32 flags;
16278c2ecf20Sopenharmony_ci	u32 next_level_of_cache;
16288c2ecf20Sopenharmony_ci	u32 size;
16298c2ecf20Sopenharmony_ci	u32 number_of_sets;
16308c2ecf20Sopenharmony_ci	u8 associativity;
16318c2ecf20Sopenharmony_ci	u8 attributes;
16328c2ecf20Sopenharmony_ci	u16 line_size;
16338c2ecf20Sopenharmony_ci};
16348c2ecf20Sopenharmony_ci
16358c2ecf20Sopenharmony_ci/* Flags */
16368c2ecf20Sopenharmony_ci
16378c2ecf20Sopenharmony_ci#define ACPI_PPTT_SIZE_PROPERTY_VALID       (1)	/* Physical property valid */
16388c2ecf20Sopenharmony_ci#define ACPI_PPTT_NUMBER_OF_SETS_VALID      (1<<1)	/* Number of sets valid */
16398c2ecf20Sopenharmony_ci#define ACPI_PPTT_ASSOCIATIVITY_VALID       (1<<2)	/* Associativity valid */
16408c2ecf20Sopenharmony_ci#define ACPI_PPTT_ALLOCATION_TYPE_VALID     (1<<3)	/* Allocation type valid */
16418c2ecf20Sopenharmony_ci#define ACPI_PPTT_CACHE_TYPE_VALID          (1<<4)	/* Cache type valid */
16428c2ecf20Sopenharmony_ci#define ACPI_PPTT_WRITE_POLICY_VALID        (1<<5)	/* Write policy valid */
16438c2ecf20Sopenharmony_ci#define ACPI_PPTT_LINE_SIZE_VALID           (1<<6)	/* Line size valid */
16448c2ecf20Sopenharmony_ci
16458c2ecf20Sopenharmony_ci/* Masks for Attributes */
16468c2ecf20Sopenharmony_ci
16478c2ecf20Sopenharmony_ci#define ACPI_PPTT_MASK_ALLOCATION_TYPE      (0x03)	/* Allocation type */
16488c2ecf20Sopenharmony_ci#define ACPI_PPTT_MASK_CACHE_TYPE           (0x0C)	/* Cache type */
16498c2ecf20Sopenharmony_ci#define ACPI_PPTT_MASK_WRITE_POLICY         (0x10)	/* Write policy */
16508c2ecf20Sopenharmony_ci
16518c2ecf20Sopenharmony_ci/* Attributes describing cache */
16528c2ecf20Sopenharmony_ci#define ACPI_PPTT_CACHE_READ_ALLOCATE       (0x0)	/* Cache line is allocated on read */
16538c2ecf20Sopenharmony_ci#define ACPI_PPTT_CACHE_WRITE_ALLOCATE      (0x01)	/* Cache line is allocated on write */
16548c2ecf20Sopenharmony_ci#define ACPI_PPTT_CACHE_RW_ALLOCATE         (0x02)	/* Cache line is allocated on read and write */
16558c2ecf20Sopenharmony_ci#define ACPI_PPTT_CACHE_RW_ALLOCATE_ALT     (0x03)	/* Alternate representation of above */
16568c2ecf20Sopenharmony_ci
16578c2ecf20Sopenharmony_ci#define ACPI_PPTT_CACHE_TYPE_DATA           (0x0)	/* Data cache */
16588c2ecf20Sopenharmony_ci#define ACPI_PPTT_CACHE_TYPE_INSTR          (1<<2)	/* Instruction cache */
16598c2ecf20Sopenharmony_ci#define ACPI_PPTT_CACHE_TYPE_UNIFIED        (2<<2)	/* Unified I & D cache */
16608c2ecf20Sopenharmony_ci#define ACPI_PPTT_CACHE_TYPE_UNIFIED_ALT    (3<<2)	/* Alternate representation of above */
16618c2ecf20Sopenharmony_ci
16628c2ecf20Sopenharmony_ci#define ACPI_PPTT_CACHE_POLICY_WB           (0x0)	/* Cache is write back */
16638c2ecf20Sopenharmony_ci#define ACPI_PPTT_CACHE_POLICY_WT           (1<<4)	/* Cache is write through */
16648c2ecf20Sopenharmony_ci
16658c2ecf20Sopenharmony_ci/* 2: ID Structure */
16668c2ecf20Sopenharmony_ci
16678c2ecf20Sopenharmony_cistruct acpi_pptt_id {
16688c2ecf20Sopenharmony_ci	struct acpi_subtable_header header;
16698c2ecf20Sopenharmony_ci	u16 reserved;
16708c2ecf20Sopenharmony_ci	u32 vendor_id;
16718c2ecf20Sopenharmony_ci	u64 level1_id;
16728c2ecf20Sopenharmony_ci	u64 level2_id;
16738c2ecf20Sopenharmony_ci	u16 major_rev;
16748c2ecf20Sopenharmony_ci	u16 minor_rev;
16758c2ecf20Sopenharmony_ci	u16 spin_rev;
16768c2ecf20Sopenharmony_ci};
16778c2ecf20Sopenharmony_ci
16788c2ecf20Sopenharmony_ci/*******************************************************************************
16798c2ecf20Sopenharmony_ci *
16808c2ecf20Sopenharmony_ci * RASF - RAS Feature Table (ACPI 5.0)
16818c2ecf20Sopenharmony_ci *        Version 1
16828c2ecf20Sopenharmony_ci *
16838c2ecf20Sopenharmony_ci ******************************************************************************/
16848c2ecf20Sopenharmony_ci
16858c2ecf20Sopenharmony_cistruct acpi_table_rasf {
16868c2ecf20Sopenharmony_ci	struct acpi_table_header header;	/* Common ACPI table header */
16878c2ecf20Sopenharmony_ci	u8 channel_id[12];
16888c2ecf20Sopenharmony_ci};
16898c2ecf20Sopenharmony_ci
16908c2ecf20Sopenharmony_ci/* RASF Platform Communication Channel Shared Memory Region */
16918c2ecf20Sopenharmony_ci
16928c2ecf20Sopenharmony_cistruct acpi_rasf_shared_memory {
16938c2ecf20Sopenharmony_ci	u32 signature;
16948c2ecf20Sopenharmony_ci	u16 command;
16958c2ecf20Sopenharmony_ci	u16 status;
16968c2ecf20Sopenharmony_ci	u16 version;
16978c2ecf20Sopenharmony_ci	u8 capabilities[16];
16988c2ecf20Sopenharmony_ci	u8 set_capabilities[16];
16998c2ecf20Sopenharmony_ci	u16 num_parameter_blocks;
17008c2ecf20Sopenharmony_ci	u32 set_capabilities_status;
17018c2ecf20Sopenharmony_ci};
17028c2ecf20Sopenharmony_ci
17038c2ecf20Sopenharmony_ci/* RASF Parameter Block Structure Header */
17048c2ecf20Sopenharmony_ci
17058c2ecf20Sopenharmony_cistruct acpi_rasf_parameter_block {
17068c2ecf20Sopenharmony_ci	u16 type;
17078c2ecf20Sopenharmony_ci	u16 version;
17088c2ecf20Sopenharmony_ci	u16 length;
17098c2ecf20Sopenharmony_ci};
17108c2ecf20Sopenharmony_ci
17118c2ecf20Sopenharmony_ci/* RASF Parameter Block Structure for PATROL_SCRUB */
17128c2ecf20Sopenharmony_ci
17138c2ecf20Sopenharmony_cistruct acpi_rasf_patrol_scrub_parameter {
17148c2ecf20Sopenharmony_ci	struct acpi_rasf_parameter_block header;
17158c2ecf20Sopenharmony_ci	u16 patrol_scrub_command;
17168c2ecf20Sopenharmony_ci	u64 requested_address_range[2];
17178c2ecf20Sopenharmony_ci	u64 actual_address_range[2];
17188c2ecf20Sopenharmony_ci	u16 flags;
17198c2ecf20Sopenharmony_ci	u8 requested_speed;
17208c2ecf20Sopenharmony_ci};
17218c2ecf20Sopenharmony_ci
17228c2ecf20Sopenharmony_ci/* Masks for Flags and Speed fields above */
17238c2ecf20Sopenharmony_ci
17248c2ecf20Sopenharmony_ci#define ACPI_RASF_SCRUBBER_RUNNING      1
17258c2ecf20Sopenharmony_ci#define ACPI_RASF_SPEED                 (7<<1)
17268c2ecf20Sopenharmony_ci#define ACPI_RASF_SPEED_SLOW            (0<<1)
17278c2ecf20Sopenharmony_ci#define ACPI_RASF_SPEED_MEDIUM          (4<<1)
17288c2ecf20Sopenharmony_ci#define ACPI_RASF_SPEED_FAST            (7<<1)
17298c2ecf20Sopenharmony_ci
17308c2ecf20Sopenharmony_ci/* Channel Commands */
17318c2ecf20Sopenharmony_ci
17328c2ecf20Sopenharmony_cienum acpi_rasf_commands {
17338c2ecf20Sopenharmony_ci	ACPI_RASF_EXECUTE_RASF_COMMAND = 1
17348c2ecf20Sopenharmony_ci};
17358c2ecf20Sopenharmony_ci
17368c2ecf20Sopenharmony_ci/* Platform RAS Capabilities */
17378c2ecf20Sopenharmony_ci
17388c2ecf20Sopenharmony_cienum acpi_rasf_capabiliities {
17398c2ecf20Sopenharmony_ci	ACPI_HW_PATROL_SCRUB_SUPPORTED = 0,
17408c2ecf20Sopenharmony_ci	ACPI_SW_PATROL_SCRUB_EXPOSED = 1
17418c2ecf20Sopenharmony_ci};
17428c2ecf20Sopenharmony_ci
17438c2ecf20Sopenharmony_ci/* Patrol Scrub Commands */
17448c2ecf20Sopenharmony_ci
17458c2ecf20Sopenharmony_cienum acpi_rasf_patrol_scrub_commands {
17468c2ecf20Sopenharmony_ci	ACPI_RASF_GET_PATROL_PARAMETERS = 1,
17478c2ecf20Sopenharmony_ci	ACPI_RASF_START_PATROL_SCRUBBER = 2,
17488c2ecf20Sopenharmony_ci	ACPI_RASF_STOP_PATROL_SCRUBBER = 3
17498c2ecf20Sopenharmony_ci};
17508c2ecf20Sopenharmony_ci
17518c2ecf20Sopenharmony_ci/* Channel Command flags */
17528c2ecf20Sopenharmony_ci
17538c2ecf20Sopenharmony_ci#define ACPI_RASF_GENERATE_SCI          (1<<15)
17548c2ecf20Sopenharmony_ci
17558c2ecf20Sopenharmony_ci/* Status values */
17568c2ecf20Sopenharmony_ci
17578c2ecf20Sopenharmony_cienum acpi_rasf_status {
17588c2ecf20Sopenharmony_ci	ACPI_RASF_SUCCESS = 0,
17598c2ecf20Sopenharmony_ci	ACPI_RASF_NOT_VALID = 1,
17608c2ecf20Sopenharmony_ci	ACPI_RASF_NOT_SUPPORTED = 2,
17618c2ecf20Sopenharmony_ci	ACPI_RASF_BUSY = 3,
17628c2ecf20Sopenharmony_ci	ACPI_RASF_FAILED = 4,
17638c2ecf20Sopenharmony_ci	ACPI_RASF_ABORTED = 5,
17648c2ecf20Sopenharmony_ci	ACPI_RASF_INVALID_DATA = 6
17658c2ecf20Sopenharmony_ci};
17668c2ecf20Sopenharmony_ci
17678c2ecf20Sopenharmony_ci/* Status flags */
17688c2ecf20Sopenharmony_ci
17698c2ecf20Sopenharmony_ci#define ACPI_RASF_COMMAND_COMPLETE      (1)
17708c2ecf20Sopenharmony_ci#define ACPI_RASF_SCI_DOORBELL          (1<<1)
17718c2ecf20Sopenharmony_ci#define ACPI_RASF_ERROR                 (1<<2)
17728c2ecf20Sopenharmony_ci#define ACPI_RASF_STATUS                (0x1F<<3)
17738c2ecf20Sopenharmony_ci
17748c2ecf20Sopenharmony_ci/*******************************************************************************
17758c2ecf20Sopenharmony_ci *
17768c2ecf20Sopenharmony_ci * SBST - Smart Battery Specification Table
17778c2ecf20Sopenharmony_ci *        Version 1
17788c2ecf20Sopenharmony_ci *
17798c2ecf20Sopenharmony_ci ******************************************************************************/
17808c2ecf20Sopenharmony_ci
17818c2ecf20Sopenharmony_cistruct acpi_table_sbst {
17828c2ecf20Sopenharmony_ci	struct acpi_table_header header;	/* Common ACPI table header */
17838c2ecf20Sopenharmony_ci	u32 warning_level;
17848c2ecf20Sopenharmony_ci	u32 low_level;
17858c2ecf20Sopenharmony_ci	u32 critical_level;
17868c2ecf20Sopenharmony_ci};
17878c2ecf20Sopenharmony_ci
17888c2ecf20Sopenharmony_ci/*******************************************************************************
17898c2ecf20Sopenharmony_ci *
17908c2ecf20Sopenharmony_ci * SDEI - Software Delegated Exception Interface Descriptor Table
17918c2ecf20Sopenharmony_ci *
17928c2ecf20Sopenharmony_ci * Conforms to "Software Delegated Exception Interface (SDEI)" ARM DEN0054A,
17938c2ecf20Sopenharmony_ci * May 8th, 2017. Copyright 2017 ARM Ltd.
17948c2ecf20Sopenharmony_ci *
17958c2ecf20Sopenharmony_ci ******************************************************************************/
17968c2ecf20Sopenharmony_ci
17978c2ecf20Sopenharmony_cistruct acpi_table_sdei {
17988c2ecf20Sopenharmony_ci	struct acpi_table_header header;	/* Common ACPI table header */
17998c2ecf20Sopenharmony_ci};
18008c2ecf20Sopenharmony_ci
18018c2ecf20Sopenharmony_ci/*******************************************************************************
18028c2ecf20Sopenharmony_ci *
18038c2ecf20Sopenharmony_ci * SDEV - Secure Devices Table (ACPI 6.2)
18048c2ecf20Sopenharmony_ci *        Version 1
18058c2ecf20Sopenharmony_ci *
18068c2ecf20Sopenharmony_ci ******************************************************************************/
18078c2ecf20Sopenharmony_ci
18088c2ecf20Sopenharmony_cistruct acpi_table_sdev {
18098c2ecf20Sopenharmony_ci	struct acpi_table_header header;	/* Common ACPI table header */
18108c2ecf20Sopenharmony_ci};
18118c2ecf20Sopenharmony_ci
18128c2ecf20Sopenharmony_cistruct acpi_sdev_header {
18138c2ecf20Sopenharmony_ci	u8 type;
18148c2ecf20Sopenharmony_ci	u8 flags;
18158c2ecf20Sopenharmony_ci	u16 length;
18168c2ecf20Sopenharmony_ci};
18178c2ecf20Sopenharmony_ci
18188c2ecf20Sopenharmony_ci/* Values for subtable type above */
18198c2ecf20Sopenharmony_ci
18208c2ecf20Sopenharmony_cienum acpi_sdev_type {
18218c2ecf20Sopenharmony_ci	ACPI_SDEV_TYPE_NAMESPACE_DEVICE = 0,
18228c2ecf20Sopenharmony_ci	ACPI_SDEV_TYPE_PCIE_ENDPOINT_DEVICE = 1,
18238c2ecf20Sopenharmony_ci	ACPI_SDEV_TYPE_RESERVED = 2	/* 2 and greater are reserved */
18248c2ecf20Sopenharmony_ci};
18258c2ecf20Sopenharmony_ci
18268c2ecf20Sopenharmony_ci/* Values for flags above */
18278c2ecf20Sopenharmony_ci
18288c2ecf20Sopenharmony_ci#define ACPI_SDEV_HANDOFF_TO_UNSECURE_OS    (1)
18298c2ecf20Sopenharmony_ci
18308c2ecf20Sopenharmony_ci/*
18318c2ecf20Sopenharmony_ci * SDEV subtables
18328c2ecf20Sopenharmony_ci */
18338c2ecf20Sopenharmony_ci
18348c2ecf20Sopenharmony_ci/* 0: Namespace Device Based Secure Device Structure */
18358c2ecf20Sopenharmony_ci
18368c2ecf20Sopenharmony_cistruct acpi_sdev_namespace {
18378c2ecf20Sopenharmony_ci	struct acpi_sdev_header header;
18388c2ecf20Sopenharmony_ci	u16 device_id_offset;
18398c2ecf20Sopenharmony_ci	u16 device_id_length;
18408c2ecf20Sopenharmony_ci	u16 vendor_data_offset;
18418c2ecf20Sopenharmony_ci	u16 vendor_data_length;
18428c2ecf20Sopenharmony_ci};
18438c2ecf20Sopenharmony_ci
18448c2ecf20Sopenharmony_ci/* 1: PCIe Endpoint Device Based Device Structure */
18458c2ecf20Sopenharmony_ci
18468c2ecf20Sopenharmony_cistruct acpi_sdev_pcie {
18478c2ecf20Sopenharmony_ci	struct acpi_sdev_header header;
18488c2ecf20Sopenharmony_ci	u16 segment;
18498c2ecf20Sopenharmony_ci	u16 start_bus;
18508c2ecf20Sopenharmony_ci	u16 path_offset;
18518c2ecf20Sopenharmony_ci	u16 path_length;
18528c2ecf20Sopenharmony_ci	u16 vendor_data_offset;
18538c2ecf20Sopenharmony_ci	u16 vendor_data_length;
18548c2ecf20Sopenharmony_ci};
18558c2ecf20Sopenharmony_ci
18568c2ecf20Sopenharmony_ci/* 1a: PCIe Endpoint path entry */
18578c2ecf20Sopenharmony_ci
18588c2ecf20Sopenharmony_cistruct acpi_sdev_pcie_path {
18598c2ecf20Sopenharmony_ci	u8 device;
18608c2ecf20Sopenharmony_ci	u8 function;
18618c2ecf20Sopenharmony_ci};
18628c2ecf20Sopenharmony_ci
18638c2ecf20Sopenharmony_ci/* Reset to default packing */
18648c2ecf20Sopenharmony_ci
18658c2ecf20Sopenharmony_ci#pragma pack()
18668c2ecf20Sopenharmony_ci
18678c2ecf20Sopenharmony_ci#endif				/* __ACTBL2_H__ */
1868