Orange Pi5 kernel

Deprecated Linux kernel 5.10.110 for OrangePi 5/5B/5+ boards

3 Commits   0 Branches   0 Tags
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300    1) /* SPDX-License-Identifier: BSD-3-Clause OR GPL-2.0 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300    2) /******************************************************************************
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300    3)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300    4)  * Name: actbl2.h - ACPI Table Definitions (tables not in ACPI spec)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300    5)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300    6)  * Copyright (C) 2000 - 2020, Intel Corp.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300    7)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300    8)  *****************************************************************************/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300    9) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   10) #ifndef __ACTBL2_H__
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   11) #define __ACTBL2_H__
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   12) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   13) /*******************************************************************************
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   14)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   15)  * Additional ACPI Tables (2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   16)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   17)  * These tables are not consumed directly by the ACPICA subsystem, but are
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   18)  * included here to support device drivers and the AML disassembler.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   19)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   20)  ******************************************************************************/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   21) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   22) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   23)  * Values for description table header signatures for tables defined in this
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   24)  * file. Useful because they make it more difficult to inadvertently type in
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   25)  * the wrong signature.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   26)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   27) #define ACPI_SIG_IORT           "IORT"	/* IO Remapping Table */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   28) #define ACPI_SIG_IVRS           "IVRS"	/* I/O Virtualization Reporting Structure */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   29) #define ACPI_SIG_LPIT           "LPIT"	/* Low Power Idle Table */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   30) #define ACPI_SIG_MADT           "APIC"	/* Multiple APIC Description Table */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   31) #define ACPI_SIG_MCFG           "MCFG"	/* PCI Memory Mapped Configuration table */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   32) #define ACPI_SIG_MCHI           "MCHI"	/* Management Controller Host Interface table */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   33) #define ACPI_SIG_MPST           "MPST"	/* Memory Power State Table */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   34) #define ACPI_SIG_MSCT           "MSCT"	/* Maximum System Characteristics Table */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   35) #define ACPI_SIG_MSDM           "MSDM"	/* Microsoft Data Management Table */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   36) #define ACPI_SIG_MTMR           "MTMR"	/* MID Timer table */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   37) #define ACPI_SIG_NFIT           "NFIT"	/* NVDIMM Firmware Interface Table */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   38) #define ACPI_SIG_PCCT           "PCCT"	/* Platform Communications Channel Table */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   39) #define ACPI_SIG_PDTT           "PDTT"	/* Platform Debug Trigger Table */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   40) #define ACPI_SIG_PMTT           "PMTT"	/* Platform Memory Topology Table */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   41) #define ACPI_SIG_PPTT           "PPTT"	/* Processor Properties Topology Table */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   42) #define ACPI_SIG_RASF           "RASF"	/* RAS Feature table */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   43) #define ACPI_SIG_SBST           "SBST"	/* Smart Battery Specification Table */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   44) #define ACPI_SIG_SDEI           "SDEI"	/* Software Delegated Exception Interface Table */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   45) #define ACPI_SIG_SDEV           "SDEV"	/* Secure Devices table */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   46) #define ACPI_SIG_NHLT           "NHLT"	/* Non-HDAudio Link Table */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   47) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   48) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   49)  * All tables must be byte-packed to match the ACPI specification, since
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   50)  * the tables are provided by the system BIOS.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   51)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   52) #pragma pack(1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   53) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   54) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   55)  * Note: C bitfields are not used for this reason:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   56)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   57)  * "Bitfields are great and easy to read, but unfortunately the C language
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   58)  * does not specify the layout of bitfields in memory, which means they are
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   59)  * essentially useless for dealing with packed data in on-disk formats or
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   60)  * binary wire protocols." (Or ACPI tables and buffers.) "If you ask me,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   61)  * this decision was a design error in C. Ritchie could have picked an order
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   62)  * and stuck with it." Norman Ramsey.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   63)  * See http://stackoverflow.com/a/1053662/41661
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   64)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   65) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   66) /*******************************************************************************
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   67)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   68)  * IORT - IO Remapping Table
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   69)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   70)  * Conforms to "IO Remapping Table System Software on ARM Platforms",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   71)  * Document number: ARM DEN 0049D, March 2018
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   72)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   73)  ******************************************************************************/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   74) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   75) struct acpi_table_iort {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   76) 	struct acpi_table_header header;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   77) 	u32 node_count;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   78) 	u32 node_offset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   79) 	u32 reserved;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   80) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   81) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   82) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   83)  * IORT subtables
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   84)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   85) struct acpi_iort_node {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   86) 	u8 type;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   87) 	u16 length;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   88) 	u8 revision;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   89) 	u32 reserved;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   90) 	u32 mapping_count;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   91) 	u32 mapping_offset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   92) 	char node_data[1];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   93) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   94) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   95) /* Values for subtable Type above */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   96) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   97) enum acpi_iort_node_type {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   98) 	ACPI_IORT_NODE_ITS_GROUP = 0x00,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   99) 	ACPI_IORT_NODE_NAMED_COMPONENT = 0x01,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  100) 	ACPI_IORT_NODE_PCI_ROOT_COMPLEX = 0x02,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  101) 	ACPI_IORT_NODE_SMMU = 0x03,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  102) 	ACPI_IORT_NODE_SMMU_V3 = 0x04,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  103) 	ACPI_IORT_NODE_PMCG = 0x05
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  104) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  105) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  106) struct acpi_iort_id_mapping {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  107) 	u32 input_base;		/* Lowest value in input range */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  108) 	u32 id_count;		/* Number of IDs */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  109) 	u32 output_base;	/* Lowest value in output range */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  110) 	u32 output_reference;	/* A reference to the output node */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  111) 	u32 flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  112) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  113) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  114) /* Masks for Flags field above for IORT subtable */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  115) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  116) #define ACPI_IORT_ID_SINGLE_MAPPING (1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  117) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  118) struct acpi_iort_memory_access {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  119) 	u32 cache_coherency;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  120) 	u8 hints;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  121) 	u16 reserved;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  122) 	u8 memory_flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  123) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  124) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  125) /* Values for cache_coherency field above */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  126) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  127) #define ACPI_IORT_NODE_COHERENT         0x00000001	/* The device node is fully coherent */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  128) #define ACPI_IORT_NODE_NOT_COHERENT     0x00000000	/* The device node is not coherent */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  129) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  130) /* Masks for Hints field above */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  131) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  132) #define ACPI_IORT_HT_TRANSIENT          (1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  133) #define ACPI_IORT_HT_WRITE              (1<<1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  134) #define ACPI_IORT_HT_READ               (1<<2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  135) #define ACPI_IORT_HT_OVERRIDE           (1<<3)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  136) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  137) /* Masks for memory_flags field above */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  138) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  139) #define ACPI_IORT_MF_COHERENCY          (1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  140) #define ACPI_IORT_MF_ATTRIBUTES         (1<<1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  141) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  142) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  143)  * IORT node specific subtables
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  144)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  145) struct acpi_iort_its_group {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  146) 	u32 its_count;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  147) 	u32 identifiers[1];	/* GIC ITS identifier array */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  148) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  149) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  150) struct acpi_iort_named_component {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  151) 	u32 node_flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  152) 	u64 memory_properties;	/* Memory access properties */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  153) 	u8 memory_address_limit;	/* Memory address size limit */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  154) 	char device_name[1];	/* Path of namespace object */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  155) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  156) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  157) /* Masks for Flags field above */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  158) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  159) #define ACPI_IORT_NC_STALL_SUPPORTED    (1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  160) #define ACPI_IORT_NC_PASID_BITS         (31<<1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  161) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  162) struct acpi_iort_root_complex {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  163) 	u64 memory_properties;	/* Memory access properties */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  164) 	u32 ats_attribute;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  165) 	u32 pci_segment_number;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  166) 	u8 memory_address_limit;	/* Memory address size limit */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  167) 	u8 reserved[3];		/* Reserved, must be zero */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  168) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  169) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  170) /* Values for ats_attribute field above */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  171) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  172) #define ACPI_IORT_ATS_SUPPORTED         0x00000001	/* The root complex supports ATS */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  173) #define ACPI_IORT_ATS_UNSUPPORTED       0x00000000	/* The root complex doesn't support ATS */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  174) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  175) struct acpi_iort_smmu {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  176) 	u64 base_address;	/* SMMU base address */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  177) 	u64 span;		/* Length of memory range */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  178) 	u32 model;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  179) 	u32 flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  180) 	u32 global_interrupt_offset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  181) 	u32 context_interrupt_count;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  182) 	u32 context_interrupt_offset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  183) 	u32 pmu_interrupt_count;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  184) 	u32 pmu_interrupt_offset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  185) 	u64 interrupts[1];	/* Interrupt array */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  186) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  187) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  188) /* Values for Model field above */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  189) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  190) #define ACPI_IORT_SMMU_V1               0x00000000	/* Generic SMMUv1 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  191) #define ACPI_IORT_SMMU_V2               0x00000001	/* Generic SMMUv2 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  192) #define ACPI_IORT_SMMU_CORELINK_MMU400  0x00000002	/* ARM Corelink MMU-400 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  193) #define ACPI_IORT_SMMU_CORELINK_MMU500  0x00000003	/* ARM Corelink MMU-500 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  194) #define ACPI_IORT_SMMU_CORELINK_MMU401  0x00000004	/* ARM Corelink MMU-401 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  195) #define ACPI_IORT_SMMU_CAVIUM_THUNDERX  0x00000005	/* Cavium thunder_x SMMUv2 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  196) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  197) /* Masks for Flags field above */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  198) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  199) #define ACPI_IORT_SMMU_DVM_SUPPORTED    (1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  200) #define ACPI_IORT_SMMU_COHERENT_WALK    (1<<1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  201) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  202) /* Global interrupt format */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  203) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  204) struct acpi_iort_smmu_gsi {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  205) 	u32 nsg_irpt;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  206) 	u32 nsg_irpt_flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  207) 	u32 nsg_cfg_irpt;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  208) 	u32 nsg_cfg_irpt_flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  209) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  210) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  211) struct acpi_iort_smmu_v3 {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  212) 	u64 base_address;	/* SMMUv3 base address */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  213) 	u32 flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  214) 	u32 reserved;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  215) 	u64 vatos_address;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  216) 	u32 model;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  217) 	u32 event_gsiv;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  218) 	u32 pri_gsiv;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  219) 	u32 gerr_gsiv;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  220) 	u32 sync_gsiv;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  221) 	u32 pxm;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  222) 	u32 id_mapping_index;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  223) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  224) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  225) /* Values for Model field above */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  226) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  227) #define ACPI_IORT_SMMU_V3_GENERIC           0x00000000	/* Generic SMMUv3 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  228) #define ACPI_IORT_SMMU_V3_HISILICON_HI161X  0x00000001	/* hi_silicon Hi161x SMMUv3 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  229) #define ACPI_IORT_SMMU_V3_CAVIUM_CN99XX     0x00000002	/* Cavium CN99xx SMMUv3 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  230) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  231) /* Masks for Flags field above */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  232) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  233) #define ACPI_IORT_SMMU_V3_COHACC_OVERRIDE   (1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  234) #define ACPI_IORT_SMMU_V3_HTTU_OVERRIDE     (3<<1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  235) #define ACPI_IORT_SMMU_V3_PXM_VALID         (1<<3)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  236) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  237) struct acpi_iort_pmcg {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  238) 	u64 page0_base_address;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  239) 	u32 overflow_gsiv;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  240) 	u32 node_reference;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  241) 	u64 page1_base_address;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  242) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  243) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  244) /*******************************************************************************
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  245)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  246)  * IVRS - I/O Virtualization Reporting Structure
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  247)  *        Version 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  248)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  249)  * Conforms to "AMD I/O Virtualization Technology (IOMMU) Specification",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  250)  * Revision 1.26, February 2009.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  251)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  252)  ******************************************************************************/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  253) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  254) struct acpi_table_ivrs {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  255) 	struct acpi_table_header header;	/* Common ACPI table header */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  256) 	u32 info;		/* Common virtualization info */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  257) 	u64 reserved;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  258) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  259) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  260) /* Values for Info field above */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  261) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  262) #define ACPI_IVRS_PHYSICAL_SIZE     0x00007F00	/* 7 bits, physical address size */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  263) #define ACPI_IVRS_VIRTUAL_SIZE      0x003F8000	/* 7 bits, virtual address size */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  264) #define ACPI_IVRS_ATS_RESERVED      0x00400000	/* ATS address translation range reserved */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  265) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  266) /* IVRS subtable header */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  267) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  268) struct acpi_ivrs_header {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  269) 	u8 type;		/* Subtable type */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  270) 	u8 flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  271) 	u16 length;		/* Subtable length */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  272) 	u16 device_id;		/* ID of IOMMU */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  273) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  274) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  275) /* Values for subtable Type above */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  276) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  277) enum acpi_ivrs_type {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  278) 	ACPI_IVRS_TYPE_HARDWARE1 = 0x10,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  279) 	ACPI_IVRS_TYPE_HARDWARE2 = 0x11,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  280) 	ACPI_IVRS_TYPE_MEMORY1 = 0x20,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  281) 	ACPI_IVRS_TYPE_MEMORY2 = 0x21,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  282) 	ACPI_IVRS_TYPE_MEMORY3 = 0x22
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  283) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  284) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  285) /* Masks for Flags field above for IVHD subtable */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  286) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  287) #define ACPI_IVHD_TT_ENABLE         (1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  288) #define ACPI_IVHD_PASS_PW           (1<<1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  289) #define ACPI_IVHD_RES_PASS_PW       (1<<2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  290) #define ACPI_IVHD_ISOC              (1<<3)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  291) #define ACPI_IVHD_IOTLB             (1<<4)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  292) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  293) /* Masks for Flags field above for IVMD subtable */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  294) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  295) #define ACPI_IVMD_UNITY             (1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  296) #define ACPI_IVMD_READ              (1<<1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  297) #define ACPI_IVMD_WRITE             (1<<2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  298) #define ACPI_IVMD_EXCLUSION_RANGE   (1<<3)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  299) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  300) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  301)  * IVRS subtables, correspond to Type in struct acpi_ivrs_header
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  302)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  303) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  304) /* 0x10: I/O Virtualization Hardware Definition Block (IVHD) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  305) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  306) struct acpi_ivrs_hardware_10 {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  307) 	struct acpi_ivrs_header header;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  308) 	u16 capability_offset;	/* Offset for IOMMU control fields */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  309) 	u64 base_address;	/* IOMMU control registers */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  310) 	u16 pci_segment_group;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  311) 	u16 info;		/* MSI number and unit ID */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  312) 	u32 feature_reporting;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  313) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  314) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  315) /* 0x11: I/O Virtualization Hardware Definition Block (IVHD) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  316) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  317) struct acpi_ivrs_hardware_11 {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  318) 	struct acpi_ivrs_header header;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  319) 	u16 capability_offset;	/* Offset for IOMMU control fields */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  320) 	u64 base_address;	/* IOMMU control registers */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  321) 	u16 pci_segment_group;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  322) 	u16 info;		/* MSI number and unit ID */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  323) 	u32 attributes;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  324) 	u64 efr_register_image;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  325) 	u64 reserved;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  326) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  327) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  328) /* Masks for Info field above */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  329) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  330) #define ACPI_IVHD_MSI_NUMBER_MASK   0x001F	/* 5 bits, MSI message number */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  331) #define ACPI_IVHD_UNIT_ID_MASK      0x1F00	/* 5 bits, unit_ID */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  332) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  333) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  334)  * Device Entries for IVHD subtable, appear after struct acpi_ivrs_hardware structure.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  335)  * Upper two bits of the Type field are the (encoded) length of the structure.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  336)  * Currently, only 4 and 8 byte entries are defined. 16 and 32 byte entries
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  337)  * are reserved for future use but not defined.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  338)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  339) struct acpi_ivrs_de_header {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  340) 	u8 type;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  341) 	u16 id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  342) 	u8 data_setting;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  343) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  344) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  345) /* Length of device entry is in the top two bits of Type field above */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  346) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  347) #define ACPI_IVHD_ENTRY_LENGTH      0xC0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  348) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  349) /* Values for device entry Type field above */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  350) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  351) enum acpi_ivrs_device_entry_type {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  352) 	/* 4-byte device entries, all use struct acpi_ivrs_device4 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  353) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  354) 	ACPI_IVRS_TYPE_PAD4 = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  355) 	ACPI_IVRS_TYPE_ALL = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  356) 	ACPI_IVRS_TYPE_SELECT = 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  357) 	ACPI_IVRS_TYPE_START = 3,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  358) 	ACPI_IVRS_TYPE_END = 4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  359) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  360) 	/* 8-byte device entries */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  361) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  362) 	ACPI_IVRS_TYPE_PAD8 = 64,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  363) 	ACPI_IVRS_TYPE_NOT_USED = 65,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  364) 	ACPI_IVRS_TYPE_ALIAS_SELECT = 66,	/* Uses struct acpi_ivrs_device8a */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  365) 	ACPI_IVRS_TYPE_ALIAS_START = 67,	/* Uses struct acpi_ivrs_device8a */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  366) 	ACPI_IVRS_TYPE_EXT_SELECT = 70,	/* Uses struct acpi_ivrs_device8b */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  367) 	ACPI_IVRS_TYPE_EXT_START = 71,	/* Uses struct acpi_ivrs_device8b */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  368) 	ACPI_IVRS_TYPE_SPECIAL = 72	/* Uses struct acpi_ivrs_device8c */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  369) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  370) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  371) /* Values for Data field above */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  372) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  373) #define ACPI_IVHD_INIT_PASS         (1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  374) #define ACPI_IVHD_EINT_PASS         (1<<1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  375) #define ACPI_IVHD_NMI_PASS          (1<<2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  376) #define ACPI_IVHD_SYSTEM_MGMT       (3<<4)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  377) #define ACPI_IVHD_LINT0_PASS        (1<<6)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  378) #define ACPI_IVHD_LINT1_PASS        (1<<7)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  379) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  380) /* Types 0-4: 4-byte device entry */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  381) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  382) struct acpi_ivrs_device4 {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  383) 	struct acpi_ivrs_de_header header;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  384) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  385) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  386) /* Types 66-67: 8-byte device entry */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  387) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  388) struct acpi_ivrs_device8a {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  389) 	struct acpi_ivrs_de_header header;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  390) 	u8 reserved1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  391) 	u16 used_id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  392) 	u8 reserved2;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  393) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  394) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  395) /* Types 70-71: 8-byte device entry */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  396) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  397) struct acpi_ivrs_device8b {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  398) 	struct acpi_ivrs_de_header header;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  399) 	u32 extended_data;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  400) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  401) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  402) /* Values for extended_data above */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  403) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  404) #define ACPI_IVHD_ATS_DISABLED      (1<<31)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  405) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  406) /* Type 72: 8-byte device entry */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  407) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  408) struct acpi_ivrs_device8c {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  409) 	struct acpi_ivrs_de_header header;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  410) 	u8 handle;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  411) 	u16 used_id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  412) 	u8 variety;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  413) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  414) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  415) /* Values for Variety field above */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  416) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  417) #define ACPI_IVHD_IOAPIC            1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  418) #define ACPI_IVHD_HPET              2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  419) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  420) /* 0x20, 0x21, 0x22: I/O Virtualization Memory Definition Block (IVMD) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  421) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  422) struct acpi_ivrs_memory {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  423) 	struct acpi_ivrs_header header;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  424) 	u16 aux_data;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  425) 	u64 reserved;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  426) 	u64 start_address;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  427) 	u64 memory_length;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  428) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  429) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  430) /*******************************************************************************
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  431)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  432)  * LPIT - Low Power Idle Table
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  433)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  434)  * Conforms to "ACPI Low Power Idle Table (LPIT)" July 2014.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  435)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  436)  ******************************************************************************/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  437) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  438) struct acpi_table_lpit {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  439) 	struct acpi_table_header header;	/* Common ACPI table header */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  440) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  441) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  442) /* LPIT subtable header */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  443) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  444) struct acpi_lpit_header {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  445) 	u32 type;		/* Subtable type */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  446) 	u32 length;		/* Subtable length */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  447) 	u16 unique_id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  448) 	u16 reserved;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  449) 	u32 flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  450) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  451) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  452) /* Values for subtable Type above */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  453) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  454) enum acpi_lpit_type {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  455) 	ACPI_LPIT_TYPE_NATIVE_CSTATE = 0x00,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  456) 	ACPI_LPIT_TYPE_RESERVED = 0x01	/* 1 and above are reserved */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  457) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  458) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  459) /* Masks for Flags field above  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  460) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  461) #define ACPI_LPIT_STATE_DISABLED    (1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  462) #define ACPI_LPIT_NO_COUNTER        (1<<1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  463) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  464) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  465)  * LPIT subtables, correspond to Type in struct acpi_lpit_header
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  466)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  467) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  468) /* 0x00: Native C-state instruction based LPI structure */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  469) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  470) struct acpi_lpit_native {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  471) 	struct acpi_lpit_header header;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  472) 	struct acpi_generic_address entry_trigger;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  473) 	u32 residency;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  474) 	u32 latency;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  475) 	struct acpi_generic_address residency_counter;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  476) 	u64 counter_frequency;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  477) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  478) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  479) /*******************************************************************************
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  480)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  481)  * MADT - Multiple APIC Description Table
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  482)  *        Version 3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  483)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  484)  ******************************************************************************/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  485) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  486) struct acpi_table_madt {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  487) 	struct acpi_table_header header;	/* Common ACPI table header */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  488) 	u32 address;		/* Physical address of local APIC */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  489) 	u32 flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  490) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  491) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  492) /* Masks for Flags field above */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  493) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  494) #define ACPI_MADT_PCAT_COMPAT       (1)	/* 00: System also has dual 8259s */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  495) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  496) /* Values for PCATCompat flag */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  497) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  498) #define ACPI_MADT_DUAL_PIC          1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  499) #define ACPI_MADT_MULTIPLE_APIC     0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  500) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  501) /* Values for MADT subtable type in struct acpi_subtable_header */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  502) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  503) enum acpi_madt_type {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  504) 	ACPI_MADT_TYPE_LOCAL_APIC = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  505) 	ACPI_MADT_TYPE_IO_APIC = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  506) 	ACPI_MADT_TYPE_INTERRUPT_OVERRIDE = 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  507) 	ACPI_MADT_TYPE_NMI_SOURCE = 3,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  508) 	ACPI_MADT_TYPE_LOCAL_APIC_NMI = 4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  509) 	ACPI_MADT_TYPE_LOCAL_APIC_OVERRIDE = 5,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  510) 	ACPI_MADT_TYPE_IO_SAPIC = 6,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  511) 	ACPI_MADT_TYPE_LOCAL_SAPIC = 7,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  512) 	ACPI_MADT_TYPE_INTERRUPT_SOURCE = 8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  513) 	ACPI_MADT_TYPE_LOCAL_X2APIC = 9,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  514) 	ACPI_MADT_TYPE_LOCAL_X2APIC_NMI = 10,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  515) 	ACPI_MADT_TYPE_GENERIC_INTERRUPT = 11,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  516) 	ACPI_MADT_TYPE_GENERIC_DISTRIBUTOR = 12,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  517) 	ACPI_MADT_TYPE_GENERIC_MSI_FRAME = 13,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  518) 	ACPI_MADT_TYPE_GENERIC_REDISTRIBUTOR = 14,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  519) 	ACPI_MADT_TYPE_GENERIC_TRANSLATOR = 15,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  520) 	ACPI_MADT_TYPE_RESERVED = 16	/* 16 and greater are reserved */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  521) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  522) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  523) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  524)  * MADT Subtables, correspond to Type in struct acpi_subtable_header
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  525)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  526) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  527) /* 0: Processor Local APIC */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  528) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  529) struct acpi_madt_local_apic {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  530) 	struct acpi_subtable_header header;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  531) 	u8 processor_id;	/* ACPI processor id */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  532) 	u8 id;			/* Processor's local APIC id */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  533) 	u32 lapic_flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  534) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  535) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  536) /* 1: IO APIC */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  537) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  538) struct acpi_madt_io_apic {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  539) 	struct acpi_subtable_header header;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  540) 	u8 id;			/* I/O APIC ID */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  541) 	u8 reserved;		/* reserved - must be zero */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  542) 	u32 address;		/* APIC physical address */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  543) 	u32 global_irq_base;	/* Global system interrupt where INTI lines start */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  544) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  545) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  546) /* 2: Interrupt Override */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  547) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  548) struct acpi_madt_interrupt_override {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  549) 	struct acpi_subtable_header header;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  550) 	u8 bus;			/* 0 - ISA */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  551) 	u8 source_irq;		/* Interrupt source (IRQ) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  552) 	u32 global_irq;		/* Global system interrupt */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  553) 	u16 inti_flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  554) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  555) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  556) /* 3: NMI Source */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  557) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  558) struct acpi_madt_nmi_source {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  559) 	struct acpi_subtable_header header;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  560) 	u16 inti_flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  561) 	u32 global_irq;		/* Global system interrupt */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  562) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  563) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  564) /* 4: Local APIC NMI */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  565) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  566) struct acpi_madt_local_apic_nmi {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  567) 	struct acpi_subtable_header header;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  568) 	u8 processor_id;	/* ACPI processor id */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  569) 	u16 inti_flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  570) 	u8 lint;		/* LINTn to which NMI is connected */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  571) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  572) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  573) /* 5: Address Override */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  574) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  575) struct acpi_madt_local_apic_override {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  576) 	struct acpi_subtable_header header;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  577) 	u16 reserved;		/* Reserved, must be zero */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  578) 	u64 address;		/* APIC physical address */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  579) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  580) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  581) /* 6: I/O Sapic */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  582) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  583) struct acpi_madt_io_sapic {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  584) 	struct acpi_subtable_header header;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  585) 	u8 id;			/* I/O SAPIC ID */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  586) 	u8 reserved;		/* Reserved, must be zero */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  587) 	u32 global_irq_base;	/* Global interrupt for SAPIC start */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  588) 	u64 address;		/* SAPIC physical address */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  589) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  590) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  591) /* 7: Local Sapic */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  592) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  593) struct acpi_madt_local_sapic {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  594) 	struct acpi_subtable_header header;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  595) 	u8 processor_id;	/* ACPI processor id */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  596) 	u8 id;			/* SAPIC ID */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  597) 	u8 eid;			/* SAPIC EID */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  598) 	u8 reserved[3];		/* Reserved, must be zero */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  599) 	u32 lapic_flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  600) 	u32 uid;		/* Numeric UID - ACPI 3.0 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  601) 	char uid_string[1];	/* String UID  - ACPI 3.0 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  602) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  603) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  604) /* 8: Platform Interrupt Source */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  605) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  606) struct acpi_madt_interrupt_source {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  607) 	struct acpi_subtable_header header;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  608) 	u16 inti_flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  609) 	u8 type;		/* 1=PMI, 2=INIT, 3=corrected */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  610) 	u8 id;			/* Processor ID */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  611) 	u8 eid;			/* Processor EID */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  612) 	u8 io_sapic_vector;	/* Vector value for PMI interrupts */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  613) 	u32 global_irq;		/* Global system interrupt */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  614) 	u32 flags;		/* Interrupt Source Flags */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  615) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  616) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  617) /* Masks for Flags field above */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  618) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  619) #define ACPI_MADT_CPEI_OVERRIDE     (1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  620) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  621) /* 9: Processor Local X2APIC (ACPI 4.0) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  622) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  623) struct acpi_madt_local_x2apic {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  624) 	struct acpi_subtable_header header;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  625) 	u16 reserved;		/* reserved - must be zero */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  626) 	u32 local_apic_id;	/* Processor x2APIC ID  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  627) 	u32 lapic_flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  628) 	u32 uid;		/* ACPI processor UID */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  629) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  630) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  631) /* 10: Local X2APIC NMI (ACPI 4.0) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  632) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  633) struct acpi_madt_local_x2apic_nmi {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  634) 	struct acpi_subtable_header header;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  635) 	u16 inti_flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  636) 	u32 uid;		/* ACPI processor UID */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  637) 	u8 lint;		/* LINTn to which NMI is connected */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  638) 	u8 reserved[3];		/* reserved - must be zero */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  639) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  640) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  641) /* 11: Generic interrupt - GICC (ACPI 5.0 + ACPI 6.0 + ACPI 6.3 changes) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  642) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  643) struct acpi_madt_generic_interrupt {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  644) 	struct acpi_subtable_header header;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  645) 	u16 reserved;		/* reserved - must be zero */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  646) 	u32 cpu_interface_number;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  647) 	u32 uid;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  648) 	u32 flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  649) 	u32 parking_version;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  650) 	u32 performance_interrupt;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  651) 	u64 parked_address;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  652) 	u64 base_address;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  653) 	u64 gicv_base_address;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  654) 	u64 gich_base_address;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  655) 	u32 vgic_interrupt;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  656) 	u64 gicr_base_address;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  657) 	u64 arm_mpidr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  658) 	u8 efficiency_class;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  659) 	u8 reserved2[1];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  660) 	u16 spe_interrupt;	/* ACPI 6.3 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  661) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  662) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  663) /* Masks for Flags field above */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  664) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  665) /* ACPI_MADT_ENABLED                    (1)      Processor is usable if set */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  666) #define ACPI_MADT_PERFORMANCE_IRQ_MODE  (1<<1)	/* 01: Performance Interrupt Mode */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  667) #define ACPI_MADT_VGIC_IRQ_MODE         (1<<2)	/* 02: VGIC Maintenance Interrupt mode */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  668) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  669) /* 12: Generic Distributor (ACPI 5.0 + ACPI 6.0 changes) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  670) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  671) struct acpi_madt_generic_distributor {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  672) 	struct acpi_subtable_header header;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  673) 	u16 reserved;		/* reserved - must be zero */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  674) 	u32 gic_id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  675) 	u64 base_address;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  676) 	u32 global_irq_base;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  677) 	u8 version;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  678) 	u8 reserved2[3];	/* reserved - must be zero */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  679) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  680) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  681) /* Values for Version field above */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  682) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  683) enum acpi_madt_gic_version {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  684) 	ACPI_MADT_GIC_VERSION_NONE = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  685) 	ACPI_MADT_GIC_VERSION_V1 = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  686) 	ACPI_MADT_GIC_VERSION_V2 = 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  687) 	ACPI_MADT_GIC_VERSION_V3 = 3,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  688) 	ACPI_MADT_GIC_VERSION_V4 = 4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  689) 	ACPI_MADT_GIC_VERSION_RESERVED = 5	/* 5 and greater are reserved */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  690) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  691) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  692) /* 13: Generic MSI Frame (ACPI 5.1) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  693) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  694) struct acpi_madt_generic_msi_frame {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  695) 	struct acpi_subtable_header header;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  696) 	u16 reserved;		/* reserved - must be zero */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  697) 	u32 msi_frame_id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  698) 	u64 base_address;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  699) 	u32 flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  700) 	u16 spi_count;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  701) 	u16 spi_base;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  702) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  703) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  704) /* Masks for Flags field above */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  705) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  706) #define ACPI_MADT_OVERRIDE_SPI_VALUES   (1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  707) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  708) /* 14: Generic Redistributor (ACPI 5.1) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  709) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  710) struct acpi_madt_generic_redistributor {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  711) 	struct acpi_subtable_header header;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  712) 	u16 reserved;		/* reserved - must be zero */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  713) 	u64 base_address;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  714) 	u32 length;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  715) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  716) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  717) /* 15: Generic Translator (ACPI 6.0) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  718) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  719) struct acpi_madt_generic_translator {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  720) 	struct acpi_subtable_header header;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  721) 	u16 reserved;		/* reserved - must be zero */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  722) 	u32 translation_id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  723) 	u64 base_address;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  724) 	u32 reserved2;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  725) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  726) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  727) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  728)  * Common flags fields for MADT subtables
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  729)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  730) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  731) /* MADT Local APIC flags */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  732) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  733) #define ACPI_MADT_ENABLED           (1)	/* 00: Processor is usable if set */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  734) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  735) /* MADT MPS INTI flags (inti_flags) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  736) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  737) #define ACPI_MADT_POLARITY_MASK     (3)	/* 00-01: Polarity of APIC I/O input signals */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  738) #define ACPI_MADT_TRIGGER_MASK      (3<<2)	/* 02-03: Trigger mode of APIC input signals */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  739) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  740) /* Values for MPS INTI flags */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  741) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  742) #define ACPI_MADT_POLARITY_CONFORMS       0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  743) #define ACPI_MADT_POLARITY_ACTIVE_HIGH    1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  744) #define ACPI_MADT_POLARITY_RESERVED       2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  745) #define ACPI_MADT_POLARITY_ACTIVE_LOW     3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  746) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  747) #define ACPI_MADT_TRIGGER_CONFORMS        (0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  748) #define ACPI_MADT_TRIGGER_EDGE            (1<<2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  749) #define ACPI_MADT_TRIGGER_RESERVED        (2<<2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  750) #define ACPI_MADT_TRIGGER_LEVEL           (3<<2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  751) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  752) /*******************************************************************************
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  753)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  754)  * MCFG - PCI Memory Mapped Configuration table and subtable
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  755)  *        Version 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  756)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  757)  * Conforms to "PCI Firmware Specification", Revision 3.0, June 20, 2005
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  758)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  759)  ******************************************************************************/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  760) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  761) struct acpi_table_mcfg {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  762) 	struct acpi_table_header header;	/* Common ACPI table header */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  763) 	u8 reserved[8];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  764) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  765) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  766) /* Subtable */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  767) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  768) struct acpi_mcfg_allocation {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  769) 	u64 address;		/* Base address, processor-relative */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  770) 	u16 pci_segment;	/* PCI segment group number */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  771) 	u8 start_bus_number;	/* Starting PCI Bus number */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  772) 	u8 end_bus_number;	/* Final PCI Bus number */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  773) 	u32 reserved;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  774) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  775) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  776) /*******************************************************************************
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  777)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  778)  * MCHI - Management Controller Host Interface Table
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  779)  *        Version 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  780)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  781)  * Conforms to "Management Component Transport Protocol (MCTP) Host
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  782)  * Interface Specification", Revision 1.0.0a, October 13, 2009
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  783)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  784)  ******************************************************************************/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  785) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  786) struct acpi_table_mchi {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  787) 	struct acpi_table_header header;	/* Common ACPI table header */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  788) 	u8 interface_type;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  789) 	u8 protocol;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  790) 	u64 protocol_data;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  791) 	u8 interrupt_type;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  792) 	u8 gpe;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  793) 	u8 pci_device_flag;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  794) 	u32 global_interrupt;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  795) 	struct acpi_generic_address control_register;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  796) 	u8 pci_segment;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  797) 	u8 pci_bus;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  798) 	u8 pci_device;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  799) 	u8 pci_function;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  800) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  801) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  802) /*******************************************************************************
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  803)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  804)  * MPST - Memory Power State Table (ACPI 5.0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  805)  *        Version 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  806)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  807)  ******************************************************************************/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  808) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  809) #define ACPI_MPST_CHANNEL_INFO \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  810) 	u8                              channel_id; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  811) 	u8                              reserved1[3]; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  812) 	u16                             power_node_count; \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  813) 	u16                             reserved2;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  814) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  815) /* Main table */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  816) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  817) struct acpi_table_mpst {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  818) 	struct acpi_table_header header;	/* Common ACPI table header */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  819) 	 ACPI_MPST_CHANNEL_INFO	/* Platform Communication Channel */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  820) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  821) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  822) /* Memory Platform Communication Channel Info */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  823) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  824) struct acpi_mpst_channel {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  825) 	ACPI_MPST_CHANNEL_INFO	/* Platform Communication Channel */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  826) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  827) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  828) /* Memory Power Node Structure */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  829) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  830) struct acpi_mpst_power_node {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  831) 	u8 flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  832) 	u8 reserved1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  833) 	u16 node_id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  834) 	u32 length;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  835) 	u64 range_address;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  836) 	u64 range_length;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  837) 	u32 num_power_states;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  838) 	u32 num_physical_components;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  839) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  840) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  841) /* Values for Flags field above */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  842) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  843) #define ACPI_MPST_ENABLED               1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  844) #define ACPI_MPST_POWER_MANAGED         2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  845) #define ACPI_MPST_HOT_PLUG_CAPABLE      4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  846) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  847) /* Memory Power State Structure (follows POWER_NODE above) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  848) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  849) struct acpi_mpst_power_state {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  850) 	u8 power_state;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  851) 	u8 info_index;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  852) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  853) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  854) /* Physical Component ID Structure (follows POWER_STATE above) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  855) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  856) struct acpi_mpst_component {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  857) 	u16 component_id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  858) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  859) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  860) /* Memory Power State Characteristics Structure (follows all POWER_NODEs) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  861) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  862) struct acpi_mpst_data_hdr {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  863) 	u16 characteristics_count;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  864) 	u16 reserved;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  865) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  866) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  867) struct acpi_mpst_power_data {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  868) 	u8 structure_id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  869) 	u8 flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  870) 	u16 reserved1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  871) 	u32 average_power;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  872) 	u32 power_saving;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  873) 	u64 exit_latency;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  874) 	u64 reserved2;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  875) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  876) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  877) /* Values for Flags field above */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  878) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  879) #define ACPI_MPST_PRESERVE              1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  880) #define ACPI_MPST_AUTOENTRY             2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  881) #define ACPI_MPST_AUTOEXIT              4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  882) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  883) /* Shared Memory Region (not part of an ACPI table) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  884) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  885) struct acpi_mpst_shared {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  886) 	u32 signature;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  887) 	u16 pcc_command;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  888) 	u16 pcc_status;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  889) 	u32 command_register;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  890) 	u32 status_register;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  891) 	u32 power_state_id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  892) 	u32 power_node_id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  893) 	u64 energy_consumed;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  894) 	u64 average_power;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  895) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  896) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  897) /*******************************************************************************
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  898)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  899)  * MSCT - Maximum System Characteristics Table (ACPI 4.0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  900)  *        Version 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  901)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  902)  ******************************************************************************/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  903) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  904) struct acpi_table_msct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  905) 	struct acpi_table_header header;	/* Common ACPI table header */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  906) 	u32 proximity_offset;	/* Location of proximity info struct(s) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  907) 	u32 max_proximity_domains;	/* Max number of proximity domains */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  908) 	u32 max_clock_domains;	/* Max number of clock domains */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  909) 	u64 max_address;	/* Max physical address in system */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  910) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  911) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  912) /* subtable - Maximum Proximity Domain Information. Version 1 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  913) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  914) struct acpi_msct_proximity {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  915) 	u8 revision;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  916) 	u8 length;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  917) 	u32 range_start;	/* Start of domain range */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  918) 	u32 range_end;		/* End of domain range */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  919) 	u32 processor_capacity;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  920) 	u64 memory_capacity;	/* In bytes */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  921) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  922) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  923) /*******************************************************************************
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  924)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  925)  * MSDM - Microsoft Data Management table
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  926)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  927)  * Conforms to "Microsoft Software Licensing Tables (SLIC and MSDM)",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  928)  * November 29, 2011. Copyright 2011 Microsoft
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  929)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  930)  ******************************************************************************/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  931) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  932) /* Basic MSDM table is only the common ACPI header */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  933) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  934) struct acpi_table_msdm {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  935) 	struct acpi_table_header header;	/* Common ACPI table header */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  936) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  937) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  938) /*******************************************************************************
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  939)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  940)  * MTMR - MID Timer Table
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  941)  *        Version 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  942)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  943)  * Conforms to "Simple Firmware Interface Specification",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  944)  * Draft 0.8.2, Oct 19, 2010
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  945)  * NOTE: The ACPI MTMR is equivalent to the SFI MTMR table.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  946)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  947)  ******************************************************************************/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  948) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  949) struct acpi_table_mtmr {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  950) 	struct acpi_table_header header;	/* Common ACPI table header */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  951) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  952) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  953) /* MTMR entry */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  954) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  955) struct acpi_mtmr_entry {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  956) 	struct acpi_generic_address physical_address;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  957) 	u32 frequency;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  958) 	u32 irq;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  959) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  960) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  961) /*******************************************************************************
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  962)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  963)  * NFIT - NVDIMM Interface Table (ACPI 6.0+)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  964)  *        Version 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  965)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  966)  ******************************************************************************/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  967) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  968) struct acpi_table_nfit {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  969) 	struct acpi_table_header header;	/* Common ACPI table header */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  970) 	u32 reserved;		/* Reserved, must be zero */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  971) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  972) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  973) /* Subtable header for NFIT */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  974) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  975) struct acpi_nfit_header {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  976) 	u16 type;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  977) 	u16 length;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  978) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  979) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  980) /* Values for subtable type in struct acpi_nfit_header */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  981) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  982) enum acpi_nfit_type {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  983) 	ACPI_NFIT_TYPE_SYSTEM_ADDRESS = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  984) 	ACPI_NFIT_TYPE_MEMORY_MAP = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  985) 	ACPI_NFIT_TYPE_INTERLEAVE = 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  986) 	ACPI_NFIT_TYPE_SMBIOS = 3,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  987) 	ACPI_NFIT_TYPE_CONTROL_REGION = 4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  988) 	ACPI_NFIT_TYPE_DATA_REGION = 5,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  989) 	ACPI_NFIT_TYPE_FLUSH_ADDRESS = 6,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  990) 	ACPI_NFIT_TYPE_CAPABILITIES = 7,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  991) 	ACPI_NFIT_TYPE_RESERVED = 8	/* 8 and greater are reserved */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  992) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  993) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  994) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  995)  * NFIT Subtables
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  996)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  997) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  998) /* 0: System Physical Address Range Structure */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  999) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1000) struct acpi_nfit_system_address {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1001) 	struct acpi_nfit_header header;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1002) 	u16 range_index;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1003) 	u16 flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1004) 	u32 reserved;		/* Reserved, must be zero */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1005) 	u32 proximity_domain;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1006) 	u8 range_guid[16];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1007) 	u64 address;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1008) 	u64 length;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1009) 	u64 memory_mapping;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1010) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1011) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1012) /* Flags */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1013) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1014) #define ACPI_NFIT_ADD_ONLINE_ONLY       (1)	/* 00: Add/Online Operation Only */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1015) #define ACPI_NFIT_PROXIMITY_VALID       (1<<1)	/* 01: Proximity Domain Valid */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1016) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1017) /* Range Type GUIDs appear in the include/acuuid.h file */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1018) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1019) /* 1: Memory Device to System Address Range Map Structure */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1020) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1021) struct acpi_nfit_memory_map {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1022) 	struct acpi_nfit_header header;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1023) 	u32 device_handle;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1024) 	u16 physical_id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1025) 	u16 region_id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1026) 	u16 range_index;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1027) 	u16 region_index;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1028) 	u64 region_size;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1029) 	u64 region_offset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1030) 	u64 address;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1031) 	u16 interleave_index;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1032) 	u16 interleave_ways;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1033) 	u16 flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1034) 	u16 reserved;		/* Reserved, must be zero */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1035) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1036) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1037) /* Flags */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1038) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1039) #define ACPI_NFIT_MEM_SAVE_FAILED       (1)	/* 00: Last SAVE to Memory Device failed */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1040) #define ACPI_NFIT_MEM_RESTORE_FAILED    (1<<1)	/* 01: Last RESTORE from Memory Device failed */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1041) #define ACPI_NFIT_MEM_FLUSH_FAILED      (1<<2)	/* 02: Platform flush failed */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1042) #define ACPI_NFIT_MEM_NOT_ARMED         (1<<3)	/* 03: Memory Device is not armed */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1043) #define ACPI_NFIT_MEM_HEALTH_OBSERVED   (1<<4)	/* 04: Memory Device observed SMART/health events */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1044) #define ACPI_NFIT_MEM_HEALTH_ENABLED    (1<<5)	/* 05: SMART/health events enabled */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1045) #define ACPI_NFIT_MEM_MAP_FAILED        (1<<6)	/* 06: Mapping to SPA failed */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1046) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1047) /* 2: Interleave Structure */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1048) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1049) struct acpi_nfit_interleave {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1050) 	struct acpi_nfit_header header;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1051) 	u16 interleave_index;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1052) 	u16 reserved;		/* Reserved, must be zero */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1053) 	u32 line_count;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1054) 	u32 line_size;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1055) 	u32 line_offset[1];	/* Variable length */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1056) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1057) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1058) /* 3: SMBIOS Management Information Structure */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1059) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1060) struct acpi_nfit_smbios {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1061) 	struct acpi_nfit_header header;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1062) 	u32 reserved;		/* Reserved, must be zero */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1063) 	u8 data[1];		/* Variable length */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1064) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1065) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1066) /* 4: NVDIMM Control Region Structure */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1067) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1068) struct acpi_nfit_control_region {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1069) 	struct acpi_nfit_header header;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1070) 	u16 region_index;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1071) 	u16 vendor_id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1072) 	u16 device_id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1073) 	u16 revision_id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1074) 	u16 subsystem_vendor_id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1075) 	u16 subsystem_device_id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1076) 	u16 subsystem_revision_id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1077) 	u8 valid_fields;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1078) 	u8 manufacturing_location;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1079) 	u16 manufacturing_date;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1080) 	u8 reserved[2];		/* Reserved, must be zero */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1081) 	u32 serial_number;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1082) 	u16 code;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1083) 	u16 windows;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1084) 	u64 window_size;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1085) 	u64 command_offset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1086) 	u64 command_size;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1087) 	u64 status_offset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1088) 	u64 status_size;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1089) 	u16 flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1090) 	u8 reserved1[6];	/* Reserved, must be zero */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1091) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1092) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1093) /* Flags */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1094) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1095) #define ACPI_NFIT_CONTROL_BUFFERED          (1)	/* Block Data Windows implementation is buffered */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1096) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1097) /* valid_fields bits */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1098) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1099) #define ACPI_NFIT_CONTROL_MFG_INFO_VALID    (1)	/* Manufacturing fields are valid */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1100) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1101) /* 5: NVDIMM Block Data Window Region Structure */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1102) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1103) struct acpi_nfit_data_region {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1104) 	struct acpi_nfit_header header;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1105) 	u16 region_index;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1106) 	u16 windows;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1107) 	u64 offset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1108) 	u64 size;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1109) 	u64 capacity;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1110) 	u64 start_address;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1111) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1112) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1113) /* 6: Flush Hint Address Structure */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1114) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1115) struct acpi_nfit_flush_address {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1116) 	struct acpi_nfit_header header;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1117) 	u32 device_handle;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1118) 	u16 hint_count;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1119) 	u8 reserved[6];		/* Reserved, must be zero */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1120) 	u64 hint_address[1];	/* Variable length */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1121) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1122) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1123) /* 7: Platform Capabilities Structure */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1124) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1125) struct acpi_nfit_capabilities {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1126) 	struct acpi_nfit_header header;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1127) 	u8 highest_capability;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1128) 	u8 reserved[3];		/* Reserved, must be zero */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1129) 	u32 capabilities;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1130) 	u32 reserved2;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1131) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1132) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1133) /* Capabilities Flags */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1134) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1135) #define ACPI_NFIT_CAPABILITY_CACHE_FLUSH       (1)	/* 00: Cache Flush to NVDIMM capable */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1136) #define ACPI_NFIT_CAPABILITY_MEM_FLUSH         (1<<1)	/* 01: Memory Flush to NVDIMM capable */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1137) #define ACPI_NFIT_CAPABILITY_MEM_MIRRORING     (1<<2)	/* 02: Memory Mirroring capable */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1138) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1139) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1140)  * NFIT/DVDIMM device handle support - used as the _ADR for each NVDIMM
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1141)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1142) struct nfit_device_handle {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1143) 	u32 handle;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1144) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1145) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1146) /* Device handle construction and extraction macros */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1147) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1148) #define ACPI_NFIT_DIMM_NUMBER_MASK              0x0000000F
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1149) #define ACPI_NFIT_CHANNEL_NUMBER_MASK           0x000000F0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1150) #define ACPI_NFIT_MEMORY_ID_MASK                0x00000F00
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1151) #define ACPI_NFIT_SOCKET_ID_MASK                0x0000F000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1152) #define ACPI_NFIT_NODE_ID_MASK                  0x0FFF0000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1153) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1154) #define ACPI_NFIT_DIMM_NUMBER_OFFSET            0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1155) #define ACPI_NFIT_CHANNEL_NUMBER_OFFSET         4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1156) #define ACPI_NFIT_MEMORY_ID_OFFSET              8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1157) #define ACPI_NFIT_SOCKET_ID_OFFSET              12
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1158) #define ACPI_NFIT_NODE_ID_OFFSET                16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1159) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1160) /* Macro to construct a NFIT/NVDIMM device handle */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1161) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1162) #define ACPI_NFIT_BUILD_DEVICE_HANDLE(dimm, channel, memory, socket, node) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1163) 	((dimm)                                         | \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1164) 	((channel) << ACPI_NFIT_CHANNEL_NUMBER_OFFSET)  | \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1165) 	((memory)  << ACPI_NFIT_MEMORY_ID_OFFSET)       | \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1166) 	((socket)  << ACPI_NFIT_SOCKET_ID_OFFSET)       | \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1167) 	((node)    << ACPI_NFIT_NODE_ID_OFFSET))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1168) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1169) /* Macros to extract individual fields from a NFIT/NVDIMM device handle */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1170) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1171) #define ACPI_NFIT_GET_DIMM_NUMBER(handle) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1172) 	((handle) & ACPI_NFIT_DIMM_NUMBER_MASK)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1173) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1174) #define ACPI_NFIT_GET_CHANNEL_NUMBER(handle) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1175) 	(((handle) & ACPI_NFIT_CHANNEL_NUMBER_MASK) >> ACPI_NFIT_CHANNEL_NUMBER_OFFSET)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1176) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1177) #define ACPI_NFIT_GET_MEMORY_ID(handle) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1178) 	(((handle) & ACPI_NFIT_MEMORY_ID_MASK)      >> ACPI_NFIT_MEMORY_ID_OFFSET)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1179) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1180) #define ACPI_NFIT_GET_SOCKET_ID(handle) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1181) 	(((handle) & ACPI_NFIT_SOCKET_ID_MASK)      >> ACPI_NFIT_SOCKET_ID_OFFSET)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1182) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1183) #define ACPI_NFIT_GET_NODE_ID(handle) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1184) 	(((handle) & ACPI_NFIT_NODE_ID_MASK)        >> ACPI_NFIT_NODE_ID_OFFSET)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1185) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1186) /*******************************************************************************
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1187)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1188)  * PCCT - Platform Communications Channel Table (ACPI 5.0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1189)  *        Version 2 (ACPI 6.2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1190)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1191)  ******************************************************************************/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1192) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1193) struct acpi_table_pcct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1194) 	struct acpi_table_header header;	/* Common ACPI table header */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1195) 	u32 flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1196) 	u64 reserved;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1197) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1198) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1199) /* Values for Flags field above */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1200) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1201) #define ACPI_PCCT_DOORBELL              1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1202) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1203) /* Values for subtable type in struct acpi_subtable_header */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1204) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1205) enum acpi_pcct_type {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1206) 	ACPI_PCCT_TYPE_GENERIC_SUBSPACE = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1207) 	ACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1208) 	ACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE_TYPE2 = 2,	/* ACPI 6.1 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1209) 	ACPI_PCCT_TYPE_EXT_PCC_MASTER_SUBSPACE = 3,	/* ACPI 6.2 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1210) 	ACPI_PCCT_TYPE_EXT_PCC_SLAVE_SUBSPACE = 4,	/* ACPI 6.2 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1211) 	ACPI_PCCT_TYPE_RESERVED = 5	/* 5 and greater are reserved */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1212) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1213) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1214) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1215)  * PCCT Subtables, correspond to Type in struct acpi_subtable_header
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1216)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1217) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1218) /* 0: Generic Communications Subspace */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1219) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1220) struct acpi_pcct_subspace {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1221) 	struct acpi_subtable_header header;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1222) 	u8 reserved[6];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1223) 	u64 base_address;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1224) 	u64 length;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1225) 	struct acpi_generic_address doorbell_register;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1226) 	u64 preserve_mask;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1227) 	u64 write_mask;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1228) 	u32 latency;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1229) 	u32 max_access_rate;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1230) 	u16 min_turnaround_time;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1231) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1232) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1233) /* 1: HW-reduced Communications Subspace (ACPI 5.1) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1234) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1235) struct acpi_pcct_hw_reduced {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1236) 	struct acpi_subtable_header header;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1237) 	u32 platform_interrupt;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1238) 	u8 flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1239) 	u8 reserved;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1240) 	u64 base_address;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1241) 	u64 length;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1242) 	struct acpi_generic_address doorbell_register;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1243) 	u64 preserve_mask;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1244) 	u64 write_mask;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1245) 	u32 latency;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1246) 	u32 max_access_rate;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1247) 	u16 min_turnaround_time;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1248) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1249) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1250) /* 2: HW-reduced Communications Subspace Type 2 (ACPI 6.1) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1251) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1252) struct acpi_pcct_hw_reduced_type2 {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1253) 	struct acpi_subtable_header header;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1254) 	u32 platform_interrupt;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1255) 	u8 flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1256) 	u8 reserved;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1257) 	u64 base_address;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1258) 	u64 length;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1259) 	struct acpi_generic_address doorbell_register;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1260) 	u64 preserve_mask;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1261) 	u64 write_mask;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1262) 	u32 latency;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1263) 	u32 max_access_rate;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1264) 	u16 min_turnaround_time;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1265) 	struct acpi_generic_address platform_ack_register;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1266) 	u64 ack_preserve_mask;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1267) 	u64 ack_write_mask;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1268) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1269) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1270) /* 3: Extended PCC Master Subspace Type 3 (ACPI 6.2) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1271) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1272) struct acpi_pcct_ext_pcc_master {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1273) 	struct acpi_subtable_header header;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1274) 	u32 platform_interrupt;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1275) 	u8 flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1276) 	u8 reserved1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1277) 	u64 base_address;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1278) 	u32 length;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1279) 	struct acpi_generic_address doorbell_register;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1280) 	u64 preserve_mask;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1281) 	u64 write_mask;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1282) 	u32 latency;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1283) 	u32 max_access_rate;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1284) 	u32 min_turnaround_time;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1285) 	struct acpi_generic_address platform_ack_register;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1286) 	u64 ack_preserve_mask;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1287) 	u64 ack_set_mask;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1288) 	u64 reserved2;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1289) 	struct acpi_generic_address cmd_complete_register;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1290) 	u64 cmd_complete_mask;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1291) 	struct acpi_generic_address cmd_update_register;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1292) 	u64 cmd_update_preserve_mask;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1293) 	u64 cmd_update_set_mask;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1294) 	struct acpi_generic_address error_status_register;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1295) 	u64 error_status_mask;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1296) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1297) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1298) /* 4: Extended PCC Slave Subspace Type 4 (ACPI 6.2) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1299) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1300) struct acpi_pcct_ext_pcc_slave {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1301) 	struct acpi_subtable_header header;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1302) 	u32 platform_interrupt;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1303) 	u8 flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1304) 	u8 reserved1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1305) 	u64 base_address;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1306) 	u32 length;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1307) 	struct acpi_generic_address doorbell_register;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1308) 	u64 preserve_mask;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1309) 	u64 write_mask;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1310) 	u32 latency;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1311) 	u32 max_access_rate;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1312) 	u32 min_turnaround_time;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1313) 	struct acpi_generic_address platform_ack_register;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1314) 	u64 ack_preserve_mask;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1315) 	u64 ack_set_mask;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1316) 	u64 reserved2;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1317) 	struct acpi_generic_address cmd_complete_register;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1318) 	u64 cmd_complete_mask;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1319) 	struct acpi_generic_address cmd_update_register;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1320) 	u64 cmd_update_preserve_mask;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1321) 	u64 cmd_update_set_mask;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1322) 	struct acpi_generic_address error_status_register;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1323) 	u64 error_status_mask;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1324) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1325) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1326) /* Values for doorbell flags above */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1327) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1328) #define ACPI_PCCT_INTERRUPT_POLARITY    (1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1329) #define ACPI_PCCT_INTERRUPT_MODE        (1<<1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1330) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1331) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1332)  * PCC memory structures (not part of the ACPI table)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1333)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1334) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1335) /* Shared Memory Region */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1336) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1337) struct acpi_pcct_shared_memory {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1338) 	u32 signature;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1339) 	u16 command;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1340) 	u16 status;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1341) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1342) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1343) /* Extended PCC Subspace Shared Memory Region (ACPI 6.2) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1344) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1345) struct acpi_pcct_ext_pcc_shared_memory {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1346) 	u32 signature;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1347) 	u32 flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1348) 	u32 length;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1349) 	u32 command;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1350) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1351) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1352) /*******************************************************************************
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1353)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1354)  * PDTT - Platform Debug Trigger Table (ACPI 6.2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1355)  *        Version 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1356)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1357)  ******************************************************************************/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1358) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1359) struct acpi_table_pdtt {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1360) 	struct acpi_table_header header;	/* Common ACPI table header */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1361) 	u8 trigger_count;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1362) 	u8 reserved[3];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1363) 	u32 array_offset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1364) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1365) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1366) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1367)  * PDTT Communication Channel Identifier Structure.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1368)  * The number of these structures is defined by trigger_count above,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1369)  * starting at array_offset.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1370)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1371) struct acpi_pdtt_channel {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1372) 	u8 subchannel_id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1373) 	u8 flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1374) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1375) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1376) /* Flags for above */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1377) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1378) #define ACPI_PDTT_RUNTIME_TRIGGER           (1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1379) #define ACPI_PDTT_WAIT_COMPLETION           (1<<1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1380) #define ACPI_PDTT_TRIGGER_ORDER             (1<<2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1381) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1382) /*******************************************************************************
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1383)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1384)  * PMTT - Platform Memory Topology Table (ACPI 5.0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1385)  *        Version 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1386)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1387)  ******************************************************************************/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1388) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1389) struct acpi_table_pmtt {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1390) 	struct acpi_table_header header;	/* Common ACPI table header */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1391) 	u32 reserved;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1392) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1393) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1394) /* Common header for PMTT subtables that follow main table */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1395) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1396) struct acpi_pmtt_header {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1397) 	u8 type;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1398) 	u8 reserved1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1399) 	u16 length;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1400) 	u16 flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1401) 	u16 reserved2;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1402) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1403) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1404) /* Values for Type field above */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1405) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1406) #define ACPI_PMTT_TYPE_SOCKET           0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1407) #define ACPI_PMTT_TYPE_CONTROLLER       1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1408) #define ACPI_PMTT_TYPE_DIMM             2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1409) #define ACPI_PMTT_TYPE_RESERVED         3	/* 0x03-0xFF are reserved */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1410) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1411) /* Values for Flags field above */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1412) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1413) #define ACPI_PMTT_TOP_LEVEL             0x0001
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1414) #define ACPI_PMTT_PHYSICAL              0x0002
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1415) #define ACPI_PMTT_MEMORY_TYPE           0x000C
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1416) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1417) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1418)  * PMTT subtables, correspond to Type in struct acpi_pmtt_header
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1419)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1420) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1421) /* 0: Socket Structure */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1422) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1423) struct acpi_pmtt_socket {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1424) 	struct acpi_pmtt_header header;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1425) 	u16 socket_id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1426) 	u16 reserved;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1427) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1428) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1429) /* 1: Memory Controller subtable */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1430) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1431) struct acpi_pmtt_controller {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1432) 	struct acpi_pmtt_header header;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1433) 	u32 read_latency;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1434) 	u32 write_latency;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1435) 	u32 read_bandwidth;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1436) 	u32 write_bandwidth;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1437) 	u16 access_width;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1438) 	u16 alignment;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1439) 	u16 reserved;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1440) 	u16 domain_count;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1441) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1442) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1443) /* 1a: Proximity Domain substructure */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1444) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1445) struct acpi_pmtt_domain {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1446) 	u32 proximity_domain;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1447) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1448) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1449) /* 2: Physical Component Identifier (DIMM) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1450) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1451) struct acpi_pmtt_physical_component {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1452) 	struct acpi_pmtt_header header;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1453) 	u16 component_id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1454) 	u16 reserved;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1455) 	u32 memory_size;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1456) 	u32 bios_handle;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1457) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1458) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1459) /*******************************************************************************
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1460)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1461)  * PPTT - Processor Properties Topology Table (ACPI 6.2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1462)  *        Version 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1463)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1464)  ******************************************************************************/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1465) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1466) struct acpi_table_pptt {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1467) 	struct acpi_table_header header;	/* Common ACPI table header */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1468) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1469) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1470) /* Values for Type field above */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1471) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1472) enum acpi_pptt_type {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1473) 	ACPI_PPTT_TYPE_PROCESSOR = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1474) 	ACPI_PPTT_TYPE_CACHE = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1475) 	ACPI_PPTT_TYPE_ID = 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1476) 	ACPI_PPTT_TYPE_RESERVED = 3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1477) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1478) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1479) /* 0: Processor Hierarchy Node Structure */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1480) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1481) struct acpi_pptt_processor {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1482) 	struct acpi_subtable_header header;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1483) 	u16 reserved;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1484) 	u32 flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1485) 	u32 parent;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1486) 	u32 acpi_processor_id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1487) 	u32 number_of_priv_resources;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1488) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1489) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1490) /* Flags */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1491) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1492) #define ACPI_PPTT_PHYSICAL_PACKAGE          (1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1493) #define ACPI_PPTT_ACPI_PROCESSOR_ID_VALID   (1<<1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1494) #define ACPI_PPTT_ACPI_PROCESSOR_IS_THREAD  (1<<2)	/* ACPI 6.3 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1495) #define ACPI_PPTT_ACPI_LEAF_NODE            (1<<3)	/* ACPI 6.3 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1496) #define ACPI_PPTT_ACPI_IDENTICAL            (1<<4)	/* ACPI 6.3 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1497) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1498) /* 1: Cache Type Structure */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1499) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1500) struct acpi_pptt_cache {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1501) 	struct acpi_subtable_header header;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1502) 	u16 reserved;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1503) 	u32 flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1504) 	u32 next_level_of_cache;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1505) 	u32 size;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1506) 	u32 number_of_sets;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1507) 	u8 associativity;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1508) 	u8 attributes;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1509) 	u16 line_size;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1510) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1511) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1512) /* Flags */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1513) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1514) #define ACPI_PPTT_SIZE_PROPERTY_VALID       (1)	/* Physical property valid */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1515) #define ACPI_PPTT_NUMBER_OF_SETS_VALID      (1<<1)	/* Number of sets valid */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1516) #define ACPI_PPTT_ASSOCIATIVITY_VALID       (1<<2)	/* Associativity valid */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1517) #define ACPI_PPTT_ALLOCATION_TYPE_VALID     (1<<3)	/* Allocation type valid */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1518) #define ACPI_PPTT_CACHE_TYPE_VALID          (1<<4)	/* Cache type valid */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1519) #define ACPI_PPTT_WRITE_POLICY_VALID        (1<<5)	/* Write policy valid */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1520) #define ACPI_PPTT_LINE_SIZE_VALID           (1<<6)	/* Line size valid */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1521) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1522) /* Masks for Attributes */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1523) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1524) #define ACPI_PPTT_MASK_ALLOCATION_TYPE      (0x03)	/* Allocation type */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1525) #define ACPI_PPTT_MASK_CACHE_TYPE           (0x0C)	/* Cache type */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1526) #define ACPI_PPTT_MASK_WRITE_POLICY         (0x10)	/* Write policy */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1527) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1528) /* Attributes describing cache */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1529) #define ACPI_PPTT_CACHE_READ_ALLOCATE       (0x0)	/* Cache line is allocated on read */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1530) #define ACPI_PPTT_CACHE_WRITE_ALLOCATE      (0x01)	/* Cache line is allocated on write */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1531) #define ACPI_PPTT_CACHE_RW_ALLOCATE         (0x02)	/* Cache line is allocated on read and write */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1532) #define ACPI_PPTT_CACHE_RW_ALLOCATE_ALT     (0x03)	/* Alternate representation of above */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1533) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1534) #define ACPI_PPTT_CACHE_TYPE_DATA           (0x0)	/* Data cache */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1535) #define ACPI_PPTT_CACHE_TYPE_INSTR          (1<<2)	/* Instruction cache */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1536) #define ACPI_PPTT_CACHE_TYPE_UNIFIED        (2<<2)	/* Unified I & D cache */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1537) #define ACPI_PPTT_CACHE_TYPE_UNIFIED_ALT    (3<<2)	/* Alternate representation of above */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1538) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1539) #define ACPI_PPTT_CACHE_POLICY_WB           (0x0)	/* Cache is write back */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1540) #define ACPI_PPTT_CACHE_POLICY_WT           (1<<4)	/* Cache is write through */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1541) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1542) /* 2: ID Structure */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1543) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1544) struct acpi_pptt_id {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1545) 	struct acpi_subtable_header header;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1546) 	u16 reserved;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1547) 	u32 vendor_id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1548) 	u64 level1_id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1549) 	u64 level2_id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1550) 	u16 major_rev;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1551) 	u16 minor_rev;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1552) 	u16 spin_rev;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1553) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1554) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1555) /*******************************************************************************
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1556)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1557)  * RASF - RAS Feature Table (ACPI 5.0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1558)  *        Version 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1559)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1560)  ******************************************************************************/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1561) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1562) struct acpi_table_rasf {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1563) 	struct acpi_table_header header;	/* Common ACPI table header */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1564) 	u8 channel_id[12];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1565) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1566) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1567) /* RASF Platform Communication Channel Shared Memory Region */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1568) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1569) struct acpi_rasf_shared_memory {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1570) 	u32 signature;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1571) 	u16 command;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1572) 	u16 status;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1573) 	u16 version;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1574) 	u8 capabilities[16];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1575) 	u8 set_capabilities[16];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1576) 	u16 num_parameter_blocks;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1577) 	u32 set_capabilities_status;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1578) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1579) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1580) /* RASF Parameter Block Structure Header */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1581) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1582) struct acpi_rasf_parameter_block {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1583) 	u16 type;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1584) 	u16 version;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1585) 	u16 length;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1586) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1587) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1588) /* RASF Parameter Block Structure for PATROL_SCRUB */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1589) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1590) struct acpi_rasf_patrol_scrub_parameter {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1591) 	struct acpi_rasf_parameter_block header;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1592) 	u16 patrol_scrub_command;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1593) 	u64 requested_address_range[2];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1594) 	u64 actual_address_range[2];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1595) 	u16 flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1596) 	u8 requested_speed;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1597) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1598) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1599) /* Masks for Flags and Speed fields above */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1600) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1601) #define ACPI_RASF_SCRUBBER_RUNNING      1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1602) #define ACPI_RASF_SPEED                 (7<<1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1603) #define ACPI_RASF_SPEED_SLOW            (0<<1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1604) #define ACPI_RASF_SPEED_MEDIUM          (4<<1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1605) #define ACPI_RASF_SPEED_FAST            (7<<1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1606) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1607) /* Channel Commands */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1608) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1609) enum acpi_rasf_commands {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1610) 	ACPI_RASF_EXECUTE_RASF_COMMAND = 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1611) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1612) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1613) /* Platform RAS Capabilities */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1614) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1615) enum acpi_rasf_capabiliities {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1616) 	ACPI_HW_PATROL_SCRUB_SUPPORTED = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1617) 	ACPI_SW_PATROL_SCRUB_EXPOSED = 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1618) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1619) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1620) /* Patrol Scrub Commands */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1621) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1622) enum acpi_rasf_patrol_scrub_commands {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1623) 	ACPI_RASF_GET_PATROL_PARAMETERS = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1624) 	ACPI_RASF_START_PATROL_SCRUBBER = 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1625) 	ACPI_RASF_STOP_PATROL_SCRUBBER = 3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1626) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1627) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1628) /* Channel Command flags */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1629) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1630) #define ACPI_RASF_GENERATE_SCI          (1<<15)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1631) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1632) /* Status values */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1633) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1634) enum acpi_rasf_status {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1635) 	ACPI_RASF_SUCCESS = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1636) 	ACPI_RASF_NOT_VALID = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1637) 	ACPI_RASF_NOT_SUPPORTED = 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1638) 	ACPI_RASF_BUSY = 3,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1639) 	ACPI_RASF_FAILED = 4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1640) 	ACPI_RASF_ABORTED = 5,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1641) 	ACPI_RASF_INVALID_DATA = 6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1642) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1643) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1644) /* Status flags */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1645) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1646) #define ACPI_RASF_COMMAND_COMPLETE      (1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1647) #define ACPI_RASF_SCI_DOORBELL          (1<<1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1648) #define ACPI_RASF_ERROR                 (1<<2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1649) #define ACPI_RASF_STATUS                (0x1F<<3)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1650) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1651) /*******************************************************************************
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1652)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1653)  * SBST - Smart Battery Specification Table
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1654)  *        Version 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1655)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1656)  ******************************************************************************/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1657) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1658) struct acpi_table_sbst {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1659) 	struct acpi_table_header header;	/* Common ACPI table header */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1660) 	u32 warning_level;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1661) 	u32 low_level;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1662) 	u32 critical_level;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1663) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1664) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1665) /*******************************************************************************
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1666)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1667)  * SDEI - Software Delegated Exception Interface Descriptor Table
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1668)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1669)  * Conforms to "Software Delegated Exception Interface (SDEI)" ARM DEN0054A,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1670)  * May 8th, 2017. Copyright 2017 ARM Ltd.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1671)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1672)  ******************************************************************************/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1673) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1674) struct acpi_table_sdei {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1675) 	struct acpi_table_header header;	/* Common ACPI table header */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1676) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1677) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1678) /*******************************************************************************
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1679)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1680)  * SDEV - Secure Devices Table (ACPI 6.2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1681)  *        Version 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1682)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1683)  ******************************************************************************/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1684) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1685) struct acpi_table_sdev {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1686) 	struct acpi_table_header header;	/* Common ACPI table header */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1687) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1688) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1689) struct acpi_sdev_header {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1690) 	u8 type;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1691) 	u8 flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1692) 	u16 length;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1693) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1694) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1695) /* Values for subtable type above */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1696) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1697) enum acpi_sdev_type {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1698) 	ACPI_SDEV_TYPE_NAMESPACE_DEVICE = 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1699) 	ACPI_SDEV_TYPE_PCIE_ENDPOINT_DEVICE = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1700) 	ACPI_SDEV_TYPE_RESERVED = 2	/* 2 and greater are reserved */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1701) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1702) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1703) /* Values for flags above */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1704) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1705) #define ACPI_SDEV_HANDOFF_TO_UNSECURE_OS    (1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1706) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1707) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1708)  * SDEV subtables
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1709)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1710) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1711) /* 0: Namespace Device Based Secure Device Structure */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1712) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1713) struct acpi_sdev_namespace {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1714) 	struct acpi_sdev_header header;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1715) 	u16 device_id_offset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1716) 	u16 device_id_length;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1717) 	u16 vendor_data_offset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1718) 	u16 vendor_data_length;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1719) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1720) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1721) /* 1: PCIe Endpoint Device Based Device Structure */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1722) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1723) struct acpi_sdev_pcie {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1724) 	struct acpi_sdev_header header;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1725) 	u16 segment;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1726) 	u16 start_bus;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1727) 	u16 path_offset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1728) 	u16 path_length;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1729) 	u16 vendor_data_offset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1730) 	u16 vendor_data_length;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1731) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1732) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1733) /* 1a: PCIe Endpoint path entry */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1734) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1735) struct acpi_sdev_pcie_path {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1736) 	u8 device;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1737) 	u8 function;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1738) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1739) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1740) /* Reset to default packing */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1741) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1742) #pragma pack()
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1743) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1744) #endif				/* __ACTBL2_H__ */