/* SPDX-License-Identifier: BSD-3-Clause OR GPL-2.0 */1/******************************************************************************2*3* Name: actbl2.h - ACPI Table Definitions4*5* Copyright (C) 2000 - 2025, Intel Corp.6*7*****************************************************************************/89#ifndef __ACTBL2_H__10#define __ACTBL2_H__1112/*******************************************************************************13*14* Additional ACPI Tables (2)15*16* These tables are not consumed directly by the ACPICA subsystem, but are17* included here to support device drivers and the AML disassembler.18*19******************************************************************************/2021/*22* Values for description table header signatures for tables defined in this23* file. Useful because they make it more difficult to inadvertently type in24* the wrong signature.25*/26#define ACPI_SIG_AGDI "AGDI" /* Arm Generic Diagnostic Dump and Reset Device Interface */27#define ACPI_SIG_APMT "APMT" /* Arm Performance Monitoring Unit table */28#define ACPI_SIG_BDAT "BDAT" /* BIOS Data ACPI Table */29#define ACPI_SIG_CCEL "CCEL" /* CC Event Log Table */30#define ACPI_SIG_CDAT "CDAT" /* Coherent Device Attribute Table */31#define ACPI_SIG_ERDT "ERDT" /* Enhanced Resource Director Technology */32#define ACPI_SIG_IORT "IORT" /* IO Remapping Table */33#define ACPI_SIG_IOVT "IOVT" /* I/O Virtualization Table */34#define ACPI_SIG_IVRS "IVRS" /* I/O Virtualization Reporting Structure */35#define ACPI_SIG_KEYP "KEYP" /* Key Programming Interface for IDE */36#define ACPI_SIG_LPIT "LPIT" /* Low Power Idle Table */37#define ACPI_SIG_MADT "APIC" /* Multiple APIC Description Table */38#define ACPI_SIG_MCFG "MCFG" /* PCI Memory Mapped Configuration table */39#define ACPI_SIG_MCHI "MCHI" /* Management Controller Host Interface table */40#define ACPI_SIG_MPAM "MPAM" /* Memory System Resource Partitioning and Monitoring Table */41#define ACPI_SIG_MPST "MPST" /* Memory Power State Table */42#define ACPI_SIG_MRRM "MRRM" /* Memory Range and Region Mapping table */43#define ACPI_SIG_MSDM "MSDM" /* Microsoft Data Management Table */44#define ACPI_SIG_NFIT "NFIT" /* NVDIMM Firmware Interface Table */45#define ACPI_SIG_NHLT "NHLT" /* Non HD Audio Link Table */46#define ACPI_SIG_PCCT "PCCT" /* Platform Communications Channel Table */47#define ACPI_SIG_PDTT "PDTT" /* Platform Debug Trigger Table */48#define ACPI_SIG_PHAT "PHAT" /* Platform Health Assessment Table */49#define ACPI_SIG_PMTT "PMTT" /* Platform Memory Topology Table */50#define ACPI_SIG_PPTT "PPTT" /* Processor Properties Topology Table */51#define ACPI_SIG_PRMT "PRMT" /* Platform Runtime Mechanism Table */52#define ACPI_SIG_RASF "RASF" /* RAS Feature table */53#define ACPI_SIG_RAS2 "RAS2" /* RAS2 Feature table */54#define ACPI_SIG_RGRT "RGRT" /* Regulatory Graphics Resource Table */55#define ACPI_SIG_RHCT "RHCT" /* RISC-V Hart Capabilities Table */56#define ACPI_SIG_RIMT "RIMT" /* RISC-V IO Mapping Table */57#define ACPI_SIG_SBST "SBST" /* Smart Battery Specification Table */58#define ACPI_SIG_SDEI "SDEI" /* Software Delegated Exception Interface Table */59#define ACPI_SIG_SDEV "SDEV" /* Secure Devices table */60#define ACPI_SIG_SVKL "SVKL" /* Storage Volume Key Location Table */61#define ACPI_SIG_SWFT "SWFT" /* SoundWire File Table */62#define ACPI_SIG_TDEL "TDEL" /* TD Event Log Table */6364/*65* All tables must be byte-packed to match the ACPI specification, since66* the tables are provided by the system BIOS.67*/68#pragma pack(1)6970/*71* Note: C bitfields are not used for this reason:72*73* "Bitfields are great and easy to read, but unfortunately the C language74* does not specify the layout of bitfields in memory, which means they are75* essentially useless for dealing with packed data in on-disk formats or76* binary wire protocols." (Or ACPI tables and buffers.) "If you ask me,77* this decision was a design error in C. Ritchie could have picked an order78* and stuck with it." Norman Ramsey.79* See http://stackoverflow.com/a/1053662/4166180*/8182/*******************************************************************************83*84* AEST - Arm Error Source Table85*86* Conforms to: ACPI for the Armv8 RAS Extensions 1.1(Sep 2020) and87* 2.0(May 2023) Platform Design Document.88*89******************************************************************************/9091struct acpi_table_aest {92struct acpi_table_header header;93};9495/* Common Subtable header - one per Node Structure (Subtable) */9697struct acpi_aest_hdr {98u8 type;99u16 length;100u8 reserved;101u32 node_specific_offset;102u32 node_interface_offset;103u32 node_interrupt_offset;104u32 node_interrupt_count;105u64 timestamp_rate;106u64 reserved1;107u64 error_injection_rate;108};109110/* Values for Type above */111112#define ACPI_AEST_PROCESSOR_ERROR_NODE 0113#define ACPI_AEST_MEMORY_ERROR_NODE 1114#define ACPI_AEST_SMMU_ERROR_NODE 2115#define ACPI_AEST_VENDOR_ERROR_NODE 3116#define ACPI_AEST_GIC_ERROR_NODE 4117#define ACPI_AEST_PCIE_ERROR_NODE 5118#define ACPI_AEST_PROXY_ERROR_NODE 6119#define ACPI_AEST_NODE_TYPE_RESERVED 7 /* 7 and above are reserved */120121/*122* AEST subtables (Error nodes)123*/124125/* 0: Processor Error */126127typedef struct acpi_aest_processor {128u32 processor_id;129u8 resource_type;130u8 reserved;131u8 flags;132u8 revision;133u64 processor_affinity;134135} acpi_aest_processor;136137/* Values for resource_type above, related structs below */138139#define ACPI_AEST_CACHE_RESOURCE 0140#define ACPI_AEST_TLB_RESOURCE 1141#define ACPI_AEST_GENERIC_RESOURCE 2142#define ACPI_AEST_RESOURCE_RESERVED 3 /* 3 and above are reserved */143144/* 0R: Processor Cache Resource Substructure */145146typedef struct acpi_aest_processor_cache {147u32 cache_reference;148u32 reserved;149150} acpi_aest_processor_cache;151152/* Values for cache_type above */153154#define ACPI_AEST_CACHE_DATA 0155#define ACPI_AEST_CACHE_INSTRUCTION 1156#define ACPI_AEST_CACHE_UNIFIED 2157#define ACPI_AEST_CACHE_RESERVED 3 /* 3 and above are reserved */158159/* 1R: Processor TLB Resource Substructure */160161typedef struct acpi_aest_processor_tlb {162u32 tlb_level;163u32 reserved;164165} acpi_aest_processor_tlb;166167/* 2R: Processor Generic Resource Substructure */168169typedef struct acpi_aest_processor_generic {170u32 resource;171172} acpi_aest_processor_generic;173174/* 1: Memory Error */175176typedef struct acpi_aest_memory {177u32 srat_proximity_domain;178179} acpi_aest_memory;180181/* 2: Smmu Error */182183typedef struct acpi_aest_smmu {184u32 iort_node_reference;185u32 subcomponent_reference;186187} acpi_aest_smmu;188189/* 3: Vendor Defined */190191typedef struct acpi_aest_vendor {192u32 acpi_hid;193u32 acpi_uid;194u8 vendor_specific_data[16];195196} acpi_aest_vendor;197198struct acpi_aest_vendor_v2 {199char acpi_hid[8];200u32 acpi_uid;201u8 vendor_specific_data[16];202};203204/* 4: Gic Error */205206typedef struct acpi_aest_gic {207u32 interface_type;208u32 instance_id;209210} acpi_aest_gic;211212/* Values for interface_type above */213214#define ACPI_AEST_GIC_CPU 0215#define ACPI_AEST_GIC_DISTRIBUTOR 1216#define ACPI_AEST_GIC_REDISTRIBUTOR 2217#define ACPI_AEST_GIC_ITS 3218#define ACPI_AEST_GIC_RESERVED 4 /* 4 and above are reserved */219220/* 5: PCIe Error */221222struct acpi_aest_pcie {223u32 iort_node_reference;224};225226/* 6: Proxy Error */227228struct acpi_aest_proxy {229u64 node_address;230};231232/* Node Interface Structure */233234typedef struct acpi_aest_node_interface {235u8 type;236u8 reserved[3];237u32 flags;238u64 address;239u32 error_record_index;240u32 error_record_count;241u64 error_record_implemented;242u64 error_status_reporting;243u64 addressing_mode;244245} acpi_aest_node_interface;246247/* Node Interface Structure V2 */248249struct acpi_aest_node_interface_header {250u8 type;251u8 group_format;252u8 reserved[2];253u32 flags;254u64 address;255u32 error_record_index;256u32 error_record_count;257};258259#define ACPI_AEST_NODE_GROUP_FORMAT_4K 0260#define ACPI_AEST_NODE_GROUP_FORMAT_16K 1261#define ACPI_AEST_NODE_GROUP_FORMAT_64K 2262263struct acpi_aest_node_interface_common {264u32 error_node_device;265u32 processor_affinity;266u64 error_group_register_base;267u64 fault_inject_register_base;268u64 interrupt_config_register_base;269};270271struct acpi_aest_node_interface_4k {272u64 error_record_implemented;273u64 error_status_reporting;274u64 addressing_mode;275struct acpi_aest_node_interface_common common;276};277278struct acpi_aest_node_interface_16k {279u64 error_record_implemented[4];280u64 error_status_reporting[4];281u64 addressing_mode[4];282struct acpi_aest_node_interface_common common;283};284285struct acpi_aest_node_interface_64k {286u64 error_record_implemented[14];287u64 error_status_reporting[14];288u64 addressing_mode[14];289struct acpi_aest_node_interface_common common;290};291292/* Values for Type field above */293294#define ACPI_AEST_NODE_SYSTEM_REGISTER 0295#define ACPI_AEST_NODE_MEMORY_MAPPED 1296#define ACPI_AEST_NODE_SINGLE_RECORD_MEMORY_MAPPED 2297#define ACPI_AEST_XFACE_RESERVED 3 /* 2 and above are reserved */298299/* Node Interrupt Structure */300301typedef struct acpi_aest_node_interrupt {302u8 type;303u8 reserved[2];304u8 flags;305u32 gsiv;306u8 iort_id;307u8 reserved1[3];308309} acpi_aest_node_interrupt;310311/* Node Interrupt Structure V2 */312313struct acpi_aest_node_interrupt_v2 {314u8 type;315u8 reserved[2];316u8 flags;317u32 gsiv;318u8 reserved1[4];319};320321/* Values for Type field above */322323#define ACPI_AEST_NODE_FAULT_HANDLING 0324#define ACPI_AEST_NODE_ERROR_RECOVERY 1325#define ACPI_AEST_XRUPT_RESERVED 2 /* 2 and above are reserved */326327/*******************************************************************************328* AGDI - Arm Generic Diagnostic Dump and Reset Device Interface329*330* Conforms to "ACPI for Arm Components 1.1, Platform Design Document"331* ARM DEN0093 v1.1332*333******************************************************************************/334struct acpi_table_agdi {335struct acpi_table_header header; /* Common ACPI table header */336u8 flags;337u8 reserved[3];338u32 sdei_event;339u32 gsiv;340};341342/* Mask for Flags field above */343344#define ACPI_AGDI_SIGNALING_MODE (1)345346/*******************************************************************************347*348* APMT - ARM Performance Monitoring Unit Table349*350* Conforms to:351* ARM Performance Monitoring Unit Architecture 1.0 Platform Design Document352* ARM DEN0117 v1.0 November 25, 2021353*354******************************************************************************/355356struct acpi_table_apmt {357struct acpi_table_header header; /* Common ACPI table header */358};359360#define ACPI_APMT_NODE_ID_LENGTH 4361362/*363* APMT subtables364*/365struct acpi_apmt_node {366u16 length;367u8 flags;368u8 type;369u32 id;370u64 inst_primary;371u32 inst_secondary;372u64 base_address0;373u64 base_address1;374u32 ovflw_irq;375u32 reserved;376u32 ovflw_irq_flags;377u32 proc_affinity;378u32 impl_id;379};380381/* Masks for Flags field above */382383#define ACPI_APMT_FLAGS_DUAL_PAGE (1<<0)384#define ACPI_APMT_FLAGS_AFFINITY (1<<1)385#define ACPI_APMT_FLAGS_ATOMIC (1<<2)386387/* Values for Flags dual page field above */388389#define ACPI_APMT_FLAGS_DUAL_PAGE_NSUPP (0<<0)390#define ACPI_APMT_FLAGS_DUAL_PAGE_SUPP (1<<0)391392/* Values for Flags processor affinity field above */393#define ACPI_APMT_FLAGS_AFFINITY_PROC (0<<1)394#define ACPI_APMT_FLAGS_AFFINITY_PROC_CONTAINER (1<<1)395396/* Values for Flags 64-bit atomic field above */397#define ACPI_APMT_FLAGS_ATOMIC_NSUPP (0<<2)398#define ACPI_APMT_FLAGS_ATOMIC_SUPP (1<<2)399400/* Values for Type field above */401402enum acpi_apmt_node_type {403ACPI_APMT_NODE_TYPE_MC = 0x00,404ACPI_APMT_NODE_TYPE_SMMU = 0x01,405ACPI_APMT_NODE_TYPE_PCIE_ROOT = 0x02,406ACPI_APMT_NODE_TYPE_ACPI = 0x03,407ACPI_APMT_NODE_TYPE_CACHE = 0x04,408ACPI_APMT_NODE_TYPE_COUNT409};410411/* Masks for ovflw_irq_flags field above */412413#define ACPI_APMT_OVFLW_IRQ_FLAGS_MODE (1<<0)414#define ACPI_APMT_OVFLW_IRQ_FLAGS_TYPE (1<<1)415416/* Values for ovflw_irq_flags mode field above */417418#define ACPI_APMT_OVFLW_IRQ_FLAGS_MODE_LEVEL (0<<0)419#define ACPI_APMT_OVFLW_IRQ_FLAGS_MODE_EDGE (1<<0)420421/* Values for ovflw_irq_flags type field above */422423#define ACPI_APMT_OVFLW_IRQ_FLAGS_TYPE_WIRED (0<<1)424425/*******************************************************************************426*427* BDAT - BIOS Data ACPI Table428*429* Conforms to "BIOS Data ACPI Table", Interface Specification v4.0 Draft 5430* Nov 2020431*432******************************************************************************/433434struct acpi_table_bdat {435struct acpi_table_header header;436struct acpi_generic_address gas;437};438439/*******************************************************************************440*441* CCEL - CC-Event Log442* From: "Guest-Host-Communication Interface (GHCI) for Intel443* Trust Domain Extensions (Intel TDX)". Feb 2022444*445******************************************************************************/446447struct acpi_table_ccel {448struct acpi_table_header header; /* Common ACPI table header */449u8 CCtype;450u8 Ccsub_type;451u16 reserved;452u64 log_area_minimum_length;453u64 log_area_start_address;454};455456/*******************************************************************************457*458* ERDT - Enhanced Resource Director Technology (ERDT) table459*460* Conforms to "Intel Resource Director Technology Architecture Specification"461* Version 1.1, January 2025462*463******************************************************************************/464465struct acpi_table_erdt {466struct acpi_table_header header; /* Common ACPI table header */467u32 max_clos; /* Maximum classes of service */468u8 reserved[24];469u8 erdt_substructures[];470};471472/* Values for subtable type in struct acpi_subtbl_hdr_16 */473474enum acpi_erdt_type {475ACPI_ERDT_TYPE_RMDD = 0,476ACPI_ERDT_TYPE_CACD = 1,477ACPI_ERDT_TYPE_DACD = 2,478ACPI_ERDT_TYPE_CMRC = 3,479ACPI_ERDT_TYPE_MMRC = 4,480ACPI_ERDT_TYPE_MARC = 5,481ACPI_ERDT_TYPE_CARC = 6,482ACPI_ERDT_TYPE_CMRD = 7,483ACPI_ERDT_TYPE_IBRD = 8,484ACPI_ERDT_TYPE_IBAD = 9,485ACPI_ERDT_TYPE_CARD = 10,486ACPI_ERDT_TYPE_RESERVED = 11 /* 11 and above are reserved */487};488489/*490* ERDT Subtables, correspond to Type in struct acpi_subtbl_hdr_16491*/492493/* 0: RMDD - Resource Management Domain Description */494495struct acpi_erdt_rmdd {496struct acpi_subtbl_hdr_16 header;497u16 flags;498u16 IO_l3_slices; /* Number of slices in IO cache */499u8 IO_l3_sets; /* Number of sets in IO cache */500u8 IO_l3_ways; /* Number of ways in IO cache */501u64 reserved;502u16 domain_id; /* Unique domain ID */503u32 max_rmid; /* Maximun RMID supported */504u64 creg_base; /* Control Register Base Address */505u16 creg_size; /* Control Register Size (4K pages) */506u8 rmdd_structs[];507};508509/* 1: CACD - CPU Agent Collection Description */510511struct acpi_erdt_cacd {512struct acpi_subtbl_hdr_16 header;513u16 reserved;514u16 domain_id; /* Unique domain ID */515u32 X2APICIDS[];516};517518/* 2: DACD - Device Agent Collection Description */519520struct acpi_erdt_dacd {521struct acpi_subtbl_hdr_16 header;522u16 reserved;523u16 domain_id; /* Unique domain ID */524u8 dev_paths[];525};526527struct acpi_erdt_dacd_dev_paths {528struct acpi_subtable_header header;529u16 segment;530u8 reserved;531u8 start_bus;532u8 path[];533};534535/* 3: CMRC - Cache Monitoring Registers for CPU Agents */536537struct acpi_erdt_cmrc {538struct acpi_subtbl_hdr_16 header;539u32 reserved1;540u32 flags;541u8 index_fn;542u8 reserved2[11];543u64 cmt_reg_base;544u32 cmt_reg_size;545u16 clump_size;546u16 clump_stride;547u64 up_scale;548};549550/* 4: MMRC - Memory-bandwidth Monitoring Registers for CPU Agents */551552struct acpi_erdt_mmrc {553struct acpi_subtbl_hdr_16 header;554u32 reserved1;555u32 flags;556u8 index_fn;557u8 reserved2[11];558u64 reg_base;559u32 reg_size;560u8 counter_width;561u64 up_scale;562u8 reserved3[7];563u32 corr_factor_list_len;564u32 corr_factor_list[];565};566567/* 5: MARC - Memory-bandwidth Allocation Registers for CPU Agents */568569struct acpi_erdt_marc {570struct acpi_subtbl_hdr_16 header;571u16 reserved1;572u16 flags;573u8 index_fn;574u8 reserved2[7];575u64 reg_base_opt;576u64 reg_base_min;577u64 reg_base_max;578u32 mba_reg_size;579u32 mba_ctrl_range;580};581582/* 6: CARC - Cache Allocation Registers for CPU Agents */583584struct acpi_erdt_carc {585struct acpi_subtbl_hdr_16 header;586};587588/* 7: CMRD - Cache Monitoring Registers for Device Agents */589590struct acpi_erdt_cmrd {591struct acpi_subtbl_hdr_16 header;592u32 reserved1;593u32 flags;594u8 index_fn;595u8 reserved2[11];596u64 reg_base;597u32 reg_size;598u16 cmt_reg_off;599u16 cmt_clump_size;600u64 up_scale;601};602603/* 8: IBRD - Cache Monitoring Registers for Device Agents */604605struct acpi_erdt_ibrd {606struct acpi_subtbl_hdr_16 header;607u32 reserved1;608u32 flags;609u8 index_fn;610u8 reserved2[11];611u64 reg_base;612u32 reg_size;613u16 total_bw_offset;614u16 Iomiss_bw_offset;615u16 total_bw_clump;616u16 Iomiss_bw_clump;617u8 reserved3[7];618u8 counter_width;619u64 up_scale;620u32 corr_factor_list_len;621u32 corr_factor_list[];622};623624/* 9: IBAD - IO bandwidth Allocation Registers for device agents */625626struct acpi_erdt_ibad {627struct acpi_subtbl_hdr_16 header;628};629630/* 10: CARD - IO bandwidth Allocation Registers for Device Agents */631632struct acpi_erdt_card {633struct acpi_subtbl_hdr_16 header;634u32 reserved1;635u32 flags;636u32 contention_mask;637u8 index_fn;638u8 reserved2[7];639u64 reg_base;640u32 reg_size;641u16 cat_reg_offset;642u16 cat_reg_block_size;643};644645/*******************************************************************************646*647* IORT - IO Remapping Table648*649* Conforms to "IO Remapping Table System Software on ARM Platforms",650* Document number: ARM DEN 0049E.f, Apr 2024651*652******************************************************************************/653654struct acpi_table_iort {655struct acpi_table_header header;656u32 node_count;657u32 node_offset;658u32 reserved;659};660661/*662* IORT subtables663*/664struct acpi_iort_node {665u8 type;666u16 length;667u8 revision;668u32 identifier;669u32 mapping_count;670u32 mapping_offset;671char node_data[];672};673674/* Values for subtable Type above */675676enum acpi_iort_node_type {677ACPI_IORT_NODE_ITS_GROUP = 0x00,678ACPI_IORT_NODE_NAMED_COMPONENT = 0x01,679ACPI_IORT_NODE_PCI_ROOT_COMPLEX = 0x02,680ACPI_IORT_NODE_SMMU = 0x03,681ACPI_IORT_NODE_SMMU_V3 = 0x04,682ACPI_IORT_NODE_PMCG = 0x05,683ACPI_IORT_NODE_RMR = 0x06,684ACPI_IORT_NODE_IWB = 0x07,685};686687struct acpi_iort_id_mapping {688u32 input_base; /* Lowest value in input range */689u32 id_count; /* Number of IDs */690u32 output_base; /* Lowest value in output range */691u32 output_reference; /* A reference to the output node */692u32 flags;693};694695/* Masks for Flags field above for IORT subtable */696697#define ACPI_IORT_ID_SINGLE_MAPPING (1)698699struct acpi_iort_memory_access {700u32 cache_coherency;701u8 hints;702u16 reserved;703u8 memory_flags;704};705706/* Values for cache_coherency field above */707708#define ACPI_IORT_NODE_COHERENT 0x00000001 /* The device node is fully coherent */709#define ACPI_IORT_NODE_NOT_COHERENT 0x00000000 /* The device node is not coherent */710711/* Masks for Hints field above */712713#define ACPI_IORT_HT_TRANSIENT (1)714#define ACPI_IORT_HT_WRITE (1<<1)715#define ACPI_IORT_HT_READ (1<<2)716#define ACPI_IORT_HT_OVERRIDE (1<<3)717718/* Masks for memory_flags field above */719720#define ACPI_IORT_MF_COHERENCY (1)721#define ACPI_IORT_MF_ATTRIBUTES (1<<1)722#define ACPI_IORT_MF_CANWBS (1<<2)723724/*725* IORT node specific subtables726*/727struct acpi_iort_its_group {728u32 its_count;729u32 identifiers[]; /* GIC ITS identifier array */730};731732struct acpi_iort_named_component {733u32 node_flags;734u64 memory_properties; /* Memory access properties */735u8 memory_address_limit; /* Memory address size limit */736char device_name[]; /* Path of namespace object */737};738739/* Masks for Flags field above */740741#define ACPI_IORT_NC_STALL_SUPPORTED (1)742#define ACPI_IORT_NC_PASID_BITS (31<<1)743744struct acpi_iort_root_complex {745u64 memory_properties; /* Memory access properties */746u32 ats_attribute;747u32 pci_segment_number;748u8 memory_address_limit; /* Memory address size limit */749u16 pasid_capabilities; /* PASID Capabilities */750u8 reserved[]; /* Reserved, must be zero */751};752753/* Masks for ats_attribute field above */754755#define ACPI_IORT_ATS_SUPPORTED (1) /* The root complex ATS support */756#define ACPI_IORT_PRI_SUPPORTED (1<<1) /* The root complex PRI support */757#define ACPI_IORT_PASID_FWD_SUPPORTED (1<<2) /* The root complex PASID forward support */758759/* Masks for pasid_capabilities field above */760#define ACPI_IORT_PASID_MAX_WIDTH (0x1F) /* Bits 0-4 */761762struct acpi_iort_smmu {763u64 base_address; /* SMMU base address */764u64 span; /* Length of memory range */765u32 model;766u32 flags;767u32 global_interrupt_offset;768u32 context_interrupt_count;769u32 context_interrupt_offset;770u32 pmu_interrupt_count;771u32 pmu_interrupt_offset;772u64 interrupts[]; /* Interrupt array */773};774775/* Values for Model field above */776777#define ACPI_IORT_SMMU_V1 0x00000000 /* Generic SMMUv1 */778#define ACPI_IORT_SMMU_V2 0x00000001 /* Generic SMMUv2 */779#define ACPI_IORT_SMMU_CORELINK_MMU400 0x00000002 /* ARM Corelink MMU-400 */780#define ACPI_IORT_SMMU_CORELINK_MMU500 0x00000003 /* ARM Corelink MMU-500 */781#define ACPI_IORT_SMMU_CORELINK_MMU401 0x00000004 /* ARM Corelink MMU-401 */782#define ACPI_IORT_SMMU_CAVIUM_THUNDERX 0x00000005 /* Cavium thunder_x SMMUv2 */783784/* Masks for Flags field above */785786#define ACPI_IORT_SMMU_DVM_SUPPORTED (1)787#define ACPI_IORT_SMMU_COHERENT_WALK (1<<1)788789/* Global interrupt format */790791struct acpi_iort_smmu_gsi {792u32 nsg_irpt;793u32 nsg_irpt_flags;794u32 nsg_cfg_irpt;795u32 nsg_cfg_irpt_flags;796};797798struct acpi_iort_smmu_v3 {799u64 base_address; /* SMMUv3 base address */800u32 flags;801u32 reserved;802u64 vatos_address;803u32 model;804u32 event_gsiv;805u32 pri_gsiv;806u32 gerr_gsiv;807u32 sync_gsiv;808u32 pxm;809u32 id_mapping_index;810};811812/* Values for Model field above */813814#define ACPI_IORT_SMMU_V3_GENERIC 0x00000000 /* Generic SMMUv3 */815#define ACPI_IORT_SMMU_V3_HISILICON_HI161X 0x00000001 /* hi_silicon Hi161x SMMUv3 */816#define ACPI_IORT_SMMU_V3_CAVIUM_CN99XX 0x00000002 /* Cavium CN99xx SMMUv3 */817818/* Masks for Flags field above */819820#define ACPI_IORT_SMMU_V3_COHACC_OVERRIDE (1)821#define ACPI_IORT_SMMU_V3_HTTU_OVERRIDE (3<<1)822#define ACPI_IORT_SMMU_V3_PXM_VALID (1<<3)823#define ACPI_IORT_SMMU_V3_DEVICEID_VALID (1<<4)824825struct acpi_iort_pmcg {826u64 page0_base_address;827u32 overflow_gsiv;828u32 node_reference;829u64 page1_base_address;830};831832struct acpi_iort_rmr {833u32 flags;834u32 rmr_count;835u32 rmr_offset;836};837838/* Masks for Flags field above */839#define ACPI_IORT_RMR_REMAP_PERMITTED (1)840#define ACPI_IORT_RMR_ACCESS_PRIVILEGE (1<<1)841842/*843* Macro to access the Access Attributes in flags field above:844* Access Attributes is encoded in bits 9:2845*/846#define ACPI_IORT_RMR_ACCESS_ATTRIBUTES(flags) (((flags) >> 2) & 0xFF)847848/* Values for above Access Attributes */849850#define ACPI_IORT_RMR_ATTR_DEVICE_NGNRNE 0x00851#define ACPI_IORT_RMR_ATTR_DEVICE_NGNRE 0x01852#define ACPI_IORT_RMR_ATTR_DEVICE_NGRE 0x02853#define ACPI_IORT_RMR_ATTR_DEVICE_GRE 0x03854#define ACPI_IORT_RMR_ATTR_NORMAL_NC 0x04855#define ACPI_IORT_RMR_ATTR_NORMAL_IWB_OWB 0x05856857struct acpi_iort_rmr_desc {858u64 base_address;859u64 length;860u32 reserved;861};862863struct acpi_iort_iwb {864u64 base_address;865u16 iwb_index; /* Unique IWB identifier matching with the IWB GSI namespace. */866char device_name[]; /* Path of the IWB namespace object */867};868869/*******************************************************************************870*871* IOVT - I/O Virtualization Table872*873* Conforms to "LoongArch I/O Virtualization Table",874* Version 0.1, October 2024875*876******************************************************************************/877878struct acpi_table_iovt {879struct acpi_table_header header; /* Common ACPI table header */880u16 iommu_count;881u16 iommu_offset;882u8 reserved[8];883};884885/* IOVT subtable header */886887struct acpi_iovt_header {888u16 type;889u16 length;890};891892/* Values for Type field above */893894enum acpi_iovt_iommu_type {895ACPI_IOVT_IOMMU_V1 = 0x00,896ACPI_IOVT_IOMMU_RESERVED = 0x01 /* 1 and greater are reserved */897};898899/* IOVT subtables */900901struct acpi_iovt_iommu {902struct acpi_iovt_header header;903u32 flags;904u16 segment;905u16 phy_width; /* Physical Address Width */906u16 virt_width; /* Virtual Address Width */907u16 max_page_level;908u64 page_size;909u32 device_id;910u64 base_address;911u32 address_space_size;912u8 interrupt_type;913u8 reserved[3];914u32 gsi_number;915u32 proximity_domain;916u32 max_device_num;917u32 device_entry_num;918u32 device_entry_offset;919};920921struct acpi_iovt_device_entry {922u8 type;923u8 length;924u8 flags;925u8 reserved[3];926u16 device_id;927};928929enum acpi_iovt_device_entry_type {930ACPI_IOVT_DEVICE_ENTRY_SINGLE = 0x00,931ACPI_IOVT_DEVICE_ENTRY_START = 0x01,932ACPI_IOVT_DEVICE_ENTRY_END = 0x02,933ACPI_IOVT_DEVICE_ENTRY_RESERVED = 0x03 /* 3 and greater are reserved */934};935936/*******************************************************************************937*938* IVRS - I/O Virtualization Reporting Structure939* Version 1940*941* Conforms to "AMD I/O Virtualization Technology (IOMMU) Specification",942* Revision 1.26, February 2009.943*944******************************************************************************/945946struct acpi_table_ivrs {947struct acpi_table_header header; /* Common ACPI table header */948u32 info; /* Common virtualization info */949u64 reserved;950};951952/* Values for Info field above */953954#define ACPI_IVRS_PHYSICAL_SIZE 0x00007F00 /* 7 bits, physical address size */955#define ACPI_IVRS_VIRTUAL_SIZE 0x003F8000 /* 7 bits, virtual address size */956#define ACPI_IVRS_ATS_RESERVED 0x00400000 /* ATS address translation range reserved */957958/* IVRS subtable header */959960struct acpi_ivrs_header {961u8 type; /* Subtable type */962u8 flags;963u16 length; /* Subtable length */964u16 device_id; /* ID of IOMMU */965};966967/* Values for subtable Type above */968969enum acpi_ivrs_type {970ACPI_IVRS_TYPE_HARDWARE1 = 0x10,971ACPI_IVRS_TYPE_HARDWARE2 = 0x11,972ACPI_IVRS_TYPE_HARDWARE3 = 0x40,973ACPI_IVRS_TYPE_MEMORY1 = 0x20,974ACPI_IVRS_TYPE_MEMORY2 = 0x21,975ACPI_IVRS_TYPE_MEMORY3 = 0x22976};977978/* Masks for Flags field above for IVHD subtable */979980#define ACPI_IVHD_TT_ENABLE (1)981#define ACPI_IVHD_PASS_PW (1<<1)982#define ACPI_IVHD_RES_PASS_PW (1<<2)983#define ACPI_IVHD_ISOC (1<<3)984#define ACPI_IVHD_IOTLB (1<<4)985986/* Masks for Flags field above for IVMD subtable */987988#define ACPI_IVMD_UNITY (1)989#define ACPI_IVMD_READ (1<<1)990#define ACPI_IVMD_WRITE (1<<2)991#define ACPI_IVMD_EXCLUSION_RANGE (1<<3)992993/*994* IVRS subtables, correspond to Type in struct acpi_ivrs_header995*/996997/* 0x10: I/O Virtualization Hardware Definition Block (IVHD) */998999struct acpi_ivrs_hardware_10 {1000struct acpi_ivrs_header header;1001u16 capability_offset; /* Offset for IOMMU control fields */1002u64 base_address; /* IOMMU control registers */1003u16 pci_segment_group;1004u16 info; /* MSI number and unit ID */1005u32 feature_reporting;1006};10071008/* 0x11: I/O Virtualization Hardware Definition Block (IVHD) */10091010struct acpi_ivrs_hardware_11 {1011struct acpi_ivrs_header header;1012u16 capability_offset; /* Offset for IOMMU control fields */1013u64 base_address; /* IOMMU control registers */1014u16 pci_segment_group;1015u16 info; /* MSI number and unit ID */1016u32 attributes;1017u64 efr_register_image;1018u64 reserved;1019};10201021/* Masks for Info field above */10221023#define ACPI_IVHD_MSI_NUMBER_MASK 0x001F /* 5 bits, MSI message number */1024#define ACPI_IVHD_UNIT_ID_MASK 0x1F00 /* 5 bits, unit_ID */10251026/*1027* Device Entries for IVHD subtable, appear after struct acpi_ivrs_hardware structure.1028* Upper two bits of the Type field are the (encoded) length of the structure.1029* Currently, only 4 and 8 byte entries are defined. 16 and 32 byte entries1030* are reserved for future use but not defined.1031*/1032struct acpi_ivrs_de_header {1033u8 type;1034u16 id;1035u8 data_setting;1036};10371038/* Length of device entry is in the top two bits of Type field above */10391040#define ACPI_IVHD_ENTRY_LENGTH 0xC010411042/* Values for device entry Type field above */10431044enum acpi_ivrs_device_entry_type {1045/* 4-byte device entries, all use struct acpi_ivrs_device4 */10461047ACPI_IVRS_TYPE_PAD4 = 0,1048ACPI_IVRS_TYPE_ALL = 1,1049ACPI_IVRS_TYPE_SELECT = 2,1050ACPI_IVRS_TYPE_START = 3,1051ACPI_IVRS_TYPE_END = 4,10521053/* 8-byte device entries */10541055ACPI_IVRS_TYPE_PAD8 = 64,1056ACPI_IVRS_TYPE_NOT_USED = 65,1057ACPI_IVRS_TYPE_ALIAS_SELECT = 66, /* Uses struct acpi_ivrs_device8a */1058ACPI_IVRS_TYPE_ALIAS_START = 67, /* Uses struct acpi_ivrs_device8a */1059ACPI_IVRS_TYPE_EXT_SELECT = 70, /* Uses struct acpi_ivrs_device8b */1060ACPI_IVRS_TYPE_EXT_START = 71, /* Uses struct acpi_ivrs_device8b */1061ACPI_IVRS_TYPE_SPECIAL = 72, /* Uses struct acpi_ivrs_device8c */10621063/* Variable-length device entries */10641065ACPI_IVRS_TYPE_HID = 240 /* Uses ACPI_IVRS_DEVICE_HID */1066};10671068/* Values for Data field above */10691070#define ACPI_IVHD_INIT_PASS (1)1071#define ACPI_IVHD_EINT_PASS (1<<1)1072#define ACPI_IVHD_NMI_PASS (1<<2)1073#define ACPI_IVHD_SYSTEM_MGMT (3<<4)1074#define ACPI_IVHD_LINT0_PASS (1<<6)1075#define ACPI_IVHD_LINT1_PASS (1<<7)10761077/* Types 0-4: 4-byte device entry */10781079struct acpi_ivrs_device4 {1080struct acpi_ivrs_de_header header;1081};10821083/* Types 66-67: 8-byte device entry */10841085struct acpi_ivrs_device8a {1086struct acpi_ivrs_de_header header;1087u8 reserved1;1088u16 used_id;1089u8 reserved2;1090};10911092/* Types 70-71: 8-byte device entry */10931094struct acpi_ivrs_device8b {1095struct acpi_ivrs_de_header header;1096u32 extended_data;1097};10981099/* Values for extended_data above */11001101#define ACPI_IVHD_ATS_DISABLED (1<<31)11021103/* Type 72: 8-byte device entry */11041105struct acpi_ivrs_device8c {1106struct acpi_ivrs_de_header header;1107u8 handle;1108u16 used_id;1109u8 variety;1110};11111112/* Values for Variety field above */11131114#define ACPI_IVHD_IOAPIC 11115#define ACPI_IVHD_HPET 211161117/* Type 240: variable-length device entry */11181119struct acpi_ivrs_device_hid {1120struct acpi_ivrs_de_header header;1121u64 acpi_hid;1122u64 acpi_cid;1123u8 uid_type;1124u8 uid_length;1125};11261127/* Values for uid_type above */11281129#define ACPI_IVRS_UID_NOT_PRESENT 01130#define ACPI_IVRS_UID_IS_INTEGER 11131#define ACPI_IVRS_UID_IS_STRING 211321133/* 0x20, 0x21, 0x22: I/O Virtualization Memory Definition Block (IVMD) */11341135struct acpi_ivrs_memory {1136struct acpi_ivrs_header header;1137u16 aux_data;1138u64 reserved;1139u64 start_address;1140u64 memory_length;1141};11421143/*******************************************************************************1144*1145* KEYP - Key Programming Interface for Root Complex Integrity and Data1146* Encryption (IDE)1147* Version 11148*1149* Conforms to "Key Programming Interface for Root Complex Integrity and Data1150* Encryption (IDE)" document. See under ACPI-Related Documents.1151*1152******************************************************************************/1153struct acpi_table_keyp {1154struct acpi_table_header header; /* Common ACPI table header */1155u32 reserved;1156};11571158/* KEYP common subtable header */11591160struct acpi_keyp_common_header {1161u8 type;1162u8 reserved;1163u16 length;1164};11651166/* Values for Type field above */11671168enum acpi_keyp_type {1169ACPI_KEYP_TYPE_CONFIG_UNIT = 0,1170};11711172/* Root Port Information Structure */11731174struct acpi_keyp_rp_info {1175u16 segment;1176u8 bus;1177u8 devfn;1178};11791180/* Key Configuration Unit Structure */11811182struct acpi_keyp_config_unit {1183struct acpi_keyp_common_header header;1184u8 protocol_type;1185u8 version;1186u8 root_port_count;1187u8 flags;1188u64 register_base_address;1189struct acpi_keyp_rp_info rp_info[];1190};11911192enum acpi_keyp_protocol_type {1193ACPI_KEYP_PROTO_TYPE_INVALID = 0,1194ACPI_KEYP_PROTO_TYPE_PCIE,1195ACPI_KEYP_PROTO_TYPE_CXL,1196ACPI_KEYP_PROTO_TYPE_RESERVED1197};11981199#define ACPI_KEYP_F_TVM_USABLE (1)12001201/*******************************************************************************1202*1203* LPIT - Low Power Idle Table1204*1205* Conforms to "ACPI Low Power Idle Table (LPIT)" July 2014.1206*1207******************************************************************************/12081209struct acpi_table_lpit {1210struct acpi_table_header header; /* Common ACPI table header */1211};12121213/* LPIT subtable header */12141215struct acpi_lpit_header {1216u32 type; /* Subtable type */1217u32 length; /* Subtable length */1218u16 unique_id;1219u16 reserved;1220u32 flags;1221};12221223/* Values for subtable Type above */12241225enum acpi_lpit_type {1226ACPI_LPIT_TYPE_NATIVE_CSTATE = 0x00,1227ACPI_LPIT_TYPE_RESERVED = 0x01 /* 1 and above are reserved */1228};12291230/* Masks for Flags field above */12311232#define ACPI_LPIT_STATE_DISABLED (1)1233#define ACPI_LPIT_NO_COUNTER (1<<1)12341235/*1236* LPIT subtables, correspond to Type in struct acpi_lpit_header1237*/12381239/* 0x00: Native C-state instruction based LPI structure */12401241struct acpi_lpit_native {1242struct acpi_lpit_header header;1243struct acpi_generic_address entry_trigger;1244u32 residency;1245u32 latency;1246struct acpi_generic_address residency_counter;1247u64 counter_frequency;1248};12491250/*******************************************************************************1251*1252* MADT - Multiple APIC Description Table1253* Version 31254*1255******************************************************************************/12561257struct acpi_table_madt {1258struct acpi_table_header header; /* Common ACPI table header */1259u32 address; /* Physical address of local APIC */1260u32 flags;1261};12621263/* Masks for Flags field above */12641265#define ACPI_MADT_PCAT_COMPAT (1) /* 00: System also has dual 8259s */12661267/* Values for PCATCompat flag */12681269#define ACPI_MADT_DUAL_PIC 11270#define ACPI_MADT_MULTIPLE_APIC 012711272/* Values for MADT subtable type in struct acpi_subtable_header */12731274enum acpi_madt_type {1275ACPI_MADT_TYPE_LOCAL_APIC = 0,1276ACPI_MADT_TYPE_IO_APIC = 1,1277ACPI_MADT_TYPE_INTERRUPT_OVERRIDE = 2,1278ACPI_MADT_TYPE_NMI_SOURCE = 3,1279ACPI_MADT_TYPE_LOCAL_APIC_NMI = 4,1280ACPI_MADT_TYPE_LOCAL_APIC_OVERRIDE = 5,1281ACPI_MADT_TYPE_IO_SAPIC = 6,1282ACPI_MADT_TYPE_LOCAL_SAPIC = 7,1283ACPI_MADT_TYPE_INTERRUPT_SOURCE = 8,1284ACPI_MADT_TYPE_LOCAL_X2APIC = 9,1285ACPI_MADT_TYPE_LOCAL_X2APIC_NMI = 10,1286ACPI_MADT_TYPE_GENERIC_INTERRUPT = 11,1287ACPI_MADT_TYPE_GENERIC_DISTRIBUTOR = 12,1288ACPI_MADT_TYPE_GENERIC_MSI_FRAME = 13,1289ACPI_MADT_TYPE_GENERIC_REDISTRIBUTOR = 14,1290ACPI_MADT_TYPE_GENERIC_TRANSLATOR = 15,1291ACPI_MADT_TYPE_MULTIPROC_WAKEUP = 16,1292ACPI_MADT_TYPE_CORE_PIC = 17,1293ACPI_MADT_TYPE_LIO_PIC = 18,1294ACPI_MADT_TYPE_HT_PIC = 19,1295ACPI_MADT_TYPE_EIO_PIC = 20,1296ACPI_MADT_TYPE_MSI_PIC = 21,1297ACPI_MADT_TYPE_BIO_PIC = 22,1298ACPI_MADT_TYPE_LPC_PIC = 23,1299ACPI_MADT_TYPE_RINTC = 24,1300ACPI_MADT_TYPE_IMSIC = 25,1301ACPI_MADT_TYPE_APLIC = 26,1302ACPI_MADT_TYPE_PLIC = 27,1303ACPI_MADT_TYPE_GICV5_IRS = 28,1304ACPI_MADT_TYPE_GICV5_ITS = 29,1305ACPI_MADT_TYPE_GICV5_ITS_TRANSLATE = 30,1306ACPI_MADT_TYPE_RESERVED = 31, /* 31 to 0x7F are reserved */1307ACPI_MADT_TYPE_OEM_RESERVED = 0x80 /* 0x80 to 0xFF are reserved for OEM use */1308};13091310/*1311* MADT Subtables, correspond to Type in struct acpi_subtable_header1312*/13131314/* 0: Processor Local APIC */13151316struct acpi_madt_local_apic {1317struct acpi_subtable_header header;1318u8 processor_id; /* ACPI processor id */1319u8 id; /* Processor's local APIC id */1320u32 lapic_flags;1321};13221323/* 1: IO APIC */13241325struct acpi_madt_io_apic {1326struct acpi_subtable_header header;1327u8 id; /* I/O APIC ID */1328u8 reserved; /* reserved - must be zero */1329u32 address; /* APIC physical address */1330u32 global_irq_base; /* Global system interrupt where INTI lines start */1331};13321333/* 2: Interrupt Override */13341335struct acpi_madt_interrupt_override {1336struct acpi_subtable_header header;1337u8 bus; /* 0 - ISA */1338u8 source_irq; /* Interrupt source (IRQ) */1339u32 global_irq; /* Global system interrupt */1340u16 inti_flags;1341};13421343/* 3: NMI Source */13441345struct acpi_madt_nmi_source {1346struct acpi_subtable_header header;1347u16 inti_flags;1348u32 global_irq; /* Global system interrupt */1349};13501351/* 4: Local APIC NMI */13521353struct acpi_madt_local_apic_nmi {1354struct acpi_subtable_header header;1355u8 processor_id; /* ACPI processor id */1356u16 inti_flags;1357u8 lint; /* LINTn to which NMI is connected */1358};13591360/* 5: Address Override */13611362struct acpi_madt_local_apic_override {1363struct acpi_subtable_header header;1364u16 reserved; /* Reserved, must be zero */1365u64 address; /* APIC physical address */1366};13671368/* 6: I/O Sapic */13691370struct acpi_madt_io_sapic {1371struct acpi_subtable_header header;1372u8 id; /* I/O SAPIC ID */1373u8 reserved; /* Reserved, must be zero */1374u32 global_irq_base; /* Global interrupt for SAPIC start */1375u64 address; /* SAPIC physical address */1376};13771378/* 7: Local Sapic */13791380struct acpi_madt_local_sapic {1381struct acpi_subtable_header header;1382u8 processor_id; /* ACPI processor id */1383u8 id; /* SAPIC ID */1384u8 eid; /* SAPIC EID */1385u8 reserved[3]; /* Reserved, must be zero */1386u32 lapic_flags;1387u32 uid; /* Numeric UID - ACPI 3.0 */1388char uid_string[]; /* String UID - ACPI 3.0 */1389};13901391/* 8: Platform Interrupt Source */13921393struct acpi_madt_interrupt_source {1394struct acpi_subtable_header header;1395u16 inti_flags;1396u8 type; /* 1=PMI, 2=INIT, 3=corrected */1397u8 id; /* Processor ID */1398u8 eid; /* Processor EID */1399u8 io_sapic_vector; /* Vector value for PMI interrupts */1400u32 global_irq; /* Global system interrupt */1401u32 flags; /* Interrupt Source Flags */1402};14031404/* Masks for Flags field above */14051406#define ACPI_MADT_CPEI_OVERRIDE (1)14071408/* 9: Processor Local X2APIC (ACPI 4.0) */14091410struct acpi_madt_local_x2apic {1411struct acpi_subtable_header header;1412u16 reserved; /* reserved - must be zero */1413u32 local_apic_id; /* Processor x2APIC ID */1414u32 lapic_flags;1415u32 uid; /* ACPI processor UID */1416};14171418/* 10: Local X2APIC NMI (ACPI 4.0) */14191420struct acpi_madt_local_x2apic_nmi {1421struct acpi_subtable_header header;1422u16 inti_flags;1423u32 uid; /* ACPI processor UID */1424u8 lint; /* LINTn to which NMI is connected */1425u8 reserved[3]; /* reserved - must be zero */1426};14271428/* 11: Generic interrupt - GICC (ACPI 5.0 + ACPI 6.0 + ACPI 6.3 + ACPI 6.5 + ACPI 6.7 changes) */14291430struct acpi_madt_generic_interrupt {1431struct acpi_subtable_header header;1432u16 reserved; /* reserved - must be zero */1433u32 cpu_interface_number;1434u32 uid;1435u32 flags;1436u32 parking_version;1437u32 performance_interrupt;1438u64 parked_address;1439u64 base_address;1440u64 gicv_base_address;1441u64 gich_base_address;1442u32 vgic_interrupt;1443u64 gicr_base_address;1444u64 arm_mpidr;1445u8 efficiency_class;1446u8 reserved2[1];1447u16 spe_interrupt; /* ACPI 6.3 */1448u16 trbe_interrupt; /* ACPI 6.5 */1449u16 iaffid; /* ACPI 6.7 */1450u32 irs_id;1451};14521453/* Masks for Flags field above */14541455/* ACPI_MADT_ENABLED (1) Processor is usable if set */1456#define ACPI_MADT_PERFORMANCE_IRQ_MODE (1<<1) /* 01: Performance Interrupt Mode */1457#define ACPI_MADT_VGIC_IRQ_MODE (1<<2) /* 02: VGIC Maintenance Interrupt mode */1458#define ACPI_MADT_GICC_ONLINE_CAPABLE (1<<3) /* 03: Processor is online capable */1459#define ACPI_MADT_GICC_NON_COHERENT (1<<4) /* 04: GIC redistributor is not coherent */14601461/* 12: Generic Distributor (ACPI 5.0 + ACPI 6.0 changes) */14621463struct acpi_madt_generic_distributor {1464struct acpi_subtable_header header;1465u16 reserved; /* reserved - must be zero */1466u32 gic_id;1467u64 base_address;1468u32 global_irq_base;1469u8 version;1470u8 reserved2[3]; /* reserved - must be zero */1471};14721473/* Values for Version field above and Version field in acpi_madt_gicv5_irs */14741475enum acpi_madt_gic_version {1476ACPI_MADT_GIC_VERSION_NONE = 0,1477ACPI_MADT_GIC_VERSION_V1 = 1,1478ACPI_MADT_GIC_VERSION_V2 = 2,1479ACPI_MADT_GIC_VERSION_V3 = 3,1480ACPI_MADT_GIC_VERSION_V4 = 4,1481ACPI_MADT_GIC_VERSION_V5 = 5,1482ACPI_MADT_GIC_VERSION_RESERVED = 6 /* 6 and greater are reserved */1483};14841485/* 13: Generic MSI Frame (ACPI 5.1) */14861487struct acpi_madt_generic_msi_frame {1488struct acpi_subtable_header header;1489u16 reserved; /* reserved - must be zero */1490u32 msi_frame_id;1491u64 base_address;1492u32 flags;1493u16 spi_count;1494u16 spi_base;1495};14961497/* Masks for Flags field above */14981499#define ACPI_MADT_OVERRIDE_SPI_VALUES (1)15001501/* 14: Generic Redistributor (ACPI 5.1) */15021503struct acpi_madt_generic_redistributor {1504struct acpi_subtable_header header;1505u8 flags;1506u8 reserved; /* reserved - must be zero */1507u64 base_address;1508u32 length;1509};15101511#define ACPI_MADT_GICR_NON_COHERENT (1)15121513/* 15: Generic Translator (ACPI 6.0) */15141515struct acpi_madt_generic_translator {1516struct acpi_subtable_header header;1517u8 flags;1518u8 reserved; /* reserved - must be zero */1519u32 translation_id;1520u64 base_address;1521u32 reserved2;1522};15231524#define ACPI_MADT_ITS_NON_COHERENT (1)15251526/* 16: Multiprocessor wakeup (ACPI 6.4) */15271528struct acpi_madt_multiproc_wakeup {1529struct acpi_subtable_header header;1530u16 version;1531u32 reserved; /* reserved - must be zero */1532u64 mailbox_address;1533u64 reset_vector;1534};15351536/* Values for Version field above */15371538enum acpi_madt_multiproc_wakeup_version {1539ACPI_MADT_MP_WAKEUP_VERSION_NONE = 0,1540ACPI_MADT_MP_WAKEUP_VERSION_V1 = 1,1541ACPI_MADT_MP_WAKEUP_VERSION_RESERVED = 2, /* 2 and greater are reserved */1542};15431544#define ACPI_MADT_MP_WAKEUP_SIZE_V0 161545#define ACPI_MADT_MP_WAKEUP_SIZE_V1 2415461547#define ACPI_MULTIPROC_WAKEUP_MB_OS_SIZE 20321548#define ACPI_MULTIPROC_WAKEUP_MB_FIRMWARE_SIZE 204815491550struct acpi_madt_multiproc_wakeup_mailbox {1551u16 command;1552u16 reserved; /* reserved - must be zero */1553u32 apic_id;1554u64 wakeup_vector;1555u8 reserved_os[ACPI_MULTIPROC_WAKEUP_MB_OS_SIZE]; /* reserved for OS use */1556u8 reserved_firmware[ACPI_MULTIPROC_WAKEUP_MB_FIRMWARE_SIZE]; /* reserved for firmware use */1557};15581559#define ACPI_MP_WAKE_COMMAND_WAKEUP 11560#define ACPI_MP_WAKE_COMMAND_TEST 215611562/* 17: CPU Core Interrupt Controller (ACPI 6.5) */15631564struct acpi_madt_core_pic {1565struct acpi_subtable_header header;1566u8 version;1567u32 processor_id;1568u32 core_id;1569u32 flags;1570};15711572/* Values for Version field above */15731574enum acpi_madt_core_pic_version {1575ACPI_MADT_CORE_PIC_VERSION_NONE = 0,1576ACPI_MADT_CORE_PIC_VERSION_V1 = 1,1577ACPI_MADT_CORE_PIC_VERSION_RESERVED = 2 /* 2 and greater are reserved */1578};15791580/* 18: Legacy I/O Interrupt Controller (ACPI 6.5) */15811582struct acpi_madt_lio_pic {1583struct acpi_subtable_header header;1584u8 version;1585u64 address;1586u16 size;1587u8 cascade[2];1588u32 cascade_map[2];1589};15901591/* Values for Version field above */15921593enum acpi_madt_lio_pic_version {1594ACPI_MADT_LIO_PIC_VERSION_NONE = 0,1595ACPI_MADT_LIO_PIC_VERSION_V1 = 1,1596ACPI_MADT_LIO_PIC_VERSION_RESERVED = 2 /* 2 and greater are reserved */1597};15981599/* 19: HT Interrupt Controller (ACPI 6.5) */16001601struct acpi_madt_ht_pic {1602struct acpi_subtable_header header;1603u8 version;1604u64 address;1605u16 size;1606u8 cascade[8];1607};16081609/* Values for Version field above */16101611enum acpi_madt_ht_pic_version {1612ACPI_MADT_HT_PIC_VERSION_NONE = 0,1613ACPI_MADT_HT_PIC_VERSION_V1 = 1,1614ACPI_MADT_HT_PIC_VERSION_RESERVED = 2 /* 2 and greater are reserved */1615};16161617/* 20: Extend I/O Interrupt Controller (ACPI 6.5) */16181619struct acpi_madt_eio_pic {1620struct acpi_subtable_header header;1621u8 version;1622u8 cascade;1623u8 node;1624u64 node_map;1625};16261627/* Values for Version field above */16281629enum acpi_madt_eio_pic_version {1630ACPI_MADT_EIO_PIC_VERSION_NONE = 0,1631ACPI_MADT_EIO_PIC_VERSION_V1 = 1,1632ACPI_MADT_EIO_PIC_VERSION_RESERVED = 2 /* 2 and greater are reserved */1633};16341635/* 21: MSI Interrupt Controller (ACPI 6.5) */16361637struct acpi_madt_msi_pic {1638struct acpi_subtable_header header;1639u8 version;1640u64 msg_address;1641u32 start;1642u32 count;1643};16441645/* Values for Version field above */16461647enum acpi_madt_msi_pic_version {1648ACPI_MADT_MSI_PIC_VERSION_NONE = 0,1649ACPI_MADT_MSI_PIC_VERSION_V1 = 1,1650ACPI_MADT_MSI_PIC_VERSION_RESERVED = 2 /* 2 and greater are reserved */1651};16521653/* 22: Bridge I/O Interrupt Controller (ACPI 6.5) */16541655struct acpi_madt_bio_pic {1656struct acpi_subtable_header header;1657u8 version;1658u64 address;1659u16 size;1660u16 id;1661u16 gsi_base;1662};16631664/* Values for Version field above */16651666enum acpi_madt_bio_pic_version {1667ACPI_MADT_BIO_PIC_VERSION_NONE = 0,1668ACPI_MADT_BIO_PIC_VERSION_V1 = 1,1669ACPI_MADT_BIO_PIC_VERSION_RESERVED = 2 /* 2 and greater are reserved */1670};16711672/* 23: LPC Interrupt Controller (ACPI 6.5) */16731674struct acpi_madt_lpc_pic {1675struct acpi_subtable_header header;1676u8 version;1677u64 address;1678u16 size;1679u8 cascade;1680};16811682/* Values for Version field above */16831684enum acpi_madt_lpc_pic_version {1685ACPI_MADT_LPC_PIC_VERSION_NONE = 0,1686ACPI_MADT_LPC_PIC_VERSION_V1 = 1,1687ACPI_MADT_LPC_PIC_VERSION_RESERVED = 2 /* 2 and greater are reserved */1688};16891690/* 24: RISC-V INTC */1691struct acpi_madt_rintc {1692struct acpi_subtable_header header;1693u8 version;1694u8 reserved;1695u32 flags;1696u64 hart_id;1697u32 uid; /* ACPI processor UID */1698u32 ext_intc_id; /* External INTC Id */1699u64 imsic_addr; /* IMSIC base address */1700u32 imsic_size; /* IMSIC size */1701};17021703/* Values for RISC-V INTC Version field above */17041705enum acpi_madt_rintc_version {1706ACPI_MADT_RINTC_VERSION_NONE = 0,1707ACPI_MADT_RINTC_VERSION_V1 = 1,1708ACPI_MADT_RINTC_VERSION_RESERVED = 2 /* 2 and greater are reserved */1709};17101711/* 25: RISC-V IMSIC */1712struct acpi_madt_imsic {1713struct acpi_subtable_header header;1714u8 version;1715u8 reserved;1716u32 flags;1717u16 num_ids;1718u16 num_guest_ids;1719u8 guest_index_bits;1720u8 hart_index_bits;1721u8 group_index_bits;1722u8 group_index_shift;1723};17241725/* 26: RISC-V APLIC */1726struct acpi_madt_aplic {1727struct acpi_subtable_header header;1728u8 version;1729u8 id;1730u32 flags;1731u8 hw_id[8];1732u16 num_idcs;1733u16 num_sources;1734u32 gsi_base;1735u64 base_addr;1736u32 size;1737};17381739/* 27: RISC-V PLIC */1740struct acpi_madt_plic {1741struct acpi_subtable_header header;1742u8 version;1743u8 id;1744u8 hw_id[8];1745u16 num_irqs;1746u16 max_prio;1747u32 flags;1748u32 size;1749u64 base_addr;1750u32 gsi_base;1751};17521753/* 28: Arm GICv5 IRS (ACPI 6.7) */1754struct acpi_madt_gicv5_irs {1755struct acpi_subtable_header header;1756u8 version;1757u8 reserved;1758u32 irs_id;1759u32 flags;1760u32 reserved2;1761u64 config_base_address;1762u64 setlpi_base_address;1763};17641765#define ACPI_MADT_IRS_NON_COHERENT (1)17661767/* 29: Arm GICv5 ITS Config Frame (ACPI 6.7) */1768struct acpi_madt_gicv5_translator {1769struct acpi_subtable_header header;1770u8 flags;1771u8 reserved; /* reserved - must be zero */1772u32 translator_id;1773u64 base_address;1774};17751776#define ACPI_MADT_GICV5_ITS_NON_COHERENT (1)17771778/* 30: Arm GICv5 ITS Translate Frame (ACPI 6.7) */1779struct acpi_madt_gicv5_translate_frame {1780struct acpi_subtable_header header;1781u16 reserved; /* reserved - must be zero */1782u32 linked_translator_id;1783u32 translate_frame_id;1784u32 reserved2;1785u64 base_address;1786};17871788/* 80: OEM data */17891790struct acpi_madt_oem_data {1791ACPI_FLEX_ARRAY(u8, oem_data);1792};17931794/*1795* Common flags fields for MADT subtables1796*/17971798/* MADT Local APIC flags */17991800#define ACPI_MADT_ENABLED (1) /* 00: Processor is usable if set */1801#define ACPI_MADT_ONLINE_CAPABLE (2) /* 01: System HW supports enabling processor at runtime */18021803/* MADT MPS INTI flags (inti_flags) */18041805#define ACPI_MADT_POLARITY_MASK (3) /* 00-01: Polarity of APIC I/O input signals */1806#define ACPI_MADT_TRIGGER_MASK (3<<2) /* 02-03: Trigger mode of APIC input signals */18071808/* Values for MPS INTI flags */18091810#define ACPI_MADT_POLARITY_CONFORMS 01811#define ACPI_MADT_POLARITY_ACTIVE_HIGH 11812#define ACPI_MADT_POLARITY_RESERVED 21813#define ACPI_MADT_POLARITY_ACTIVE_LOW 318141815#define ACPI_MADT_TRIGGER_CONFORMS (0)1816#define ACPI_MADT_TRIGGER_EDGE (1<<2)1817#define ACPI_MADT_TRIGGER_RESERVED (2<<2)1818#define ACPI_MADT_TRIGGER_LEVEL (3<<2)18191820/*******************************************************************************1821*1822* MCFG - PCI Memory Mapped Configuration table and subtable1823* Version 11824*1825* Conforms to "PCI Firmware Specification", Revision 3.0, June 20, 20051826*1827******************************************************************************/18281829struct acpi_table_mcfg {1830struct acpi_table_header header; /* Common ACPI table header */1831u8 reserved[8];1832};18331834/* Subtable */18351836struct acpi_mcfg_allocation {1837u64 address; /* Base address, processor-relative */1838u16 pci_segment; /* PCI segment group number */1839u8 start_bus_number; /* Starting PCI Bus number */1840u8 end_bus_number; /* Final PCI Bus number */1841u32 reserved;1842};18431844/*******************************************************************************1845*1846* MCHI - Management Controller Host Interface Table1847* Version 11848*1849* Conforms to "Management Component Transport Protocol (MCTP) Host1850* Interface Specification", Revision 1.0.0a, October 13, 20091851*1852******************************************************************************/18531854struct acpi_table_mchi {1855struct acpi_table_header header; /* Common ACPI table header */1856u8 interface_type;1857u8 protocol;1858u64 protocol_data;1859u8 interrupt_type;1860u8 gpe;1861u8 pci_device_flag;1862u32 global_interrupt;1863struct acpi_generic_address control_register;1864u8 pci_segment;1865u8 pci_bus;1866u8 pci_device;1867u8 pci_function;1868};18691870/*******************************************************************************1871*1872* MPAM - Memory System Resource Partitioning and Monitoring1873*1874* Conforms to "ACPI for Memory System Resource Partitioning and Monitoring 2.0"1875* Document number: ARM DEN 0065, December, 2022.1876*1877******************************************************************************/18781879/* MPAM RIS locator types. Table 11, Location types */1880enum acpi_mpam_locator_type {1881ACPI_MPAM_LOCATION_TYPE_PROCESSOR_CACHE = 0,1882ACPI_MPAM_LOCATION_TYPE_MEMORY = 1,1883ACPI_MPAM_LOCATION_TYPE_SMMU = 2,1884ACPI_MPAM_LOCATION_TYPE_MEMORY_CACHE = 3,1885ACPI_MPAM_LOCATION_TYPE_ACPI_DEVICE = 4,1886ACPI_MPAM_LOCATION_TYPE_INTERCONNECT = 5,1887ACPI_MPAM_LOCATION_TYPE_UNKNOWN = 0xFF1888};18891890/* MPAM Functional dependency descriptor. Table 10 */1891struct acpi_mpam_func_deps {1892u32 producer;1893u32 reserved;1894};18951896/* MPAM Processor cache locator descriptor. Table 13 */1897struct acpi_mpam_resource_cache_locator {1898u64 cache_reference;1899u32 reserved;1900};19011902/* MPAM Memory locator descriptor. Table 14 */1903struct acpi_mpam_resource_memory_locator {1904u64 proximity_domain;1905u32 reserved;1906};19071908/* MPAM SMMU locator descriptor. Table 15 */1909struct acpi_mpam_resource_smmu_locator {1910u64 smmu_interface;1911u32 reserved;1912};19131914/* MPAM Memory-side cache locator descriptor. Table 16 */1915struct acpi_mpam_resource_memcache_locator {1916u8 reserved[7];1917u8 level;1918u32 reference;1919};19201921/* MPAM ACPI device locator descriptor. Table 17 */1922struct acpi_mpam_resource_acpi_locator {1923u64 acpi_hw_id;1924u32 acpi_unique_id;1925};19261927/* MPAM Interconnect locator descriptor. Table 18 */1928struct acpi_mpam_resource_interconnect_locator {1929u64 inter_connect_desc_tbl_off;1930u32 reserved;1931};19321933/* MPAM Locator structure. Table 12 */1934struct acpi_mpam_resource_generic_locator {1935u64 descriptor1;1936u32 descriptor2;1937};19381939union acpi_mpam_resource_locator {1940struct acpi_mpam_resource_cache_locator cache_locator;1941struct acpi_mpam_resource_memory_locator memory_locator;1942struct acpi_mpam_resource_smmu_locator smmu_locator;1943struct acpi_mpam_resource_memcache_locator mem_cache_locator;1944struct acpi_mpam_resource_acpi_locator acpi_locator;1945struct acpi_mpam_resource_interconnect_locator interconnect_ifc_locator;1946struct acpi_mpam_resource_generic_locator generic_locator;1947};19481949/* Memory System Component Resource Node Structure Table 9 */1950struct acpi_mpam_resource_node {1951u32 identifier;1952u8 ris_index;1953u16 reserved1;1954u8 locator_type;1955union acpi_mpam_resource_locator locator;1956u32 num_functional_deps;1957};19581959/* Memory System Component (MSC) Node Structure. Table 4 */1960struct acpi_mpam_msc_node {1961u16 length;1962u8 interface_type;1963u8 reserved;1964u32 identifier;1965u64 base_address;1966u32 mmio_size;1967u32 overflow_interrupt;1968u32 overflow_interrupt_flags;1969u32 reserved1;1970u32 overflow_interrupt_affinity;1971u32 error_interrupt;1972u32 error_interrupt_flags;1973u32 reserved2;1974u32 error_interrupt_affinity;1975u32 max_nrdy_usec;1976u64 hardware_id_linked_device;1977u32 instance_id_linked_device;1978u32 num_resource_nodes;1979};19801981struct acpi_table_mpam {1982struct acpi_table_header header; /* Common ACPI table header */1983};19841985/*******************************************************************************1986*1987* MPST - Memory Power State Table (ACPI 5.0)1988* Version 11989*1990******************************************************************************/19911992#define ACPI_MPST_CHANNEL_INFO \1993u8 channel_id; \1994u8 reserved1[3]; \1995u16 power_node_count; \1996u16 reserved2;19971998/* Main table */19992000struct acpi_table_mpst {2001struct acpi_table_header header; /* Common ACPI table header */2002ACPI_MPST_CHANNEL_INFO /* Platform Communication Channel */2003};20042005/* Memory Platform Communication Channel Info */20062007struct acpi_mpst_channel {2008ACPI_MPST_CHANNEL_INFO /* Platform Communication Channel */2009};20102011/* Memory Power Node Structure */20122013struct acpi_mpst_power_node {2014u8 flags;2015u8 reserved1;2016u16 node_id;2017u32 length;2018u64 range_address;2019u64 range_length;2020u32 num_power_states;2021u32 num_physical_components;2022};20232024/* Values for Flags field above */20252026#define ACPI_MPST_ENABLED 12027#define ACPI_MPST_POWER_MANAGED 22028#define ACPI_MPST_HOT_PLUG_CAPABLE 420292030/* Memory Power State Structure (follows POWER_NODE above) */20312032struct acpi_mpst_power_state {2033u8 power_state;2034u8 info_index;2035};20362037/* Physical Component ID Structure (follows POWER_STATE above) */20382039struct acpi_mpst_component {2040u16 component_id;2041};20422043/* Memory Power State Characteristics Structure (follows all POWER_NODEs) */20442045struct acpi_mpst_data_hdr {2046u16 characteristics_count;2047u16 reserved;2048};20492050struct acpi_mpst_power_data {2051u8 structure_id;2052u8 flags;2053u16 reserved1;2054u32 average_power;2055u32 power_saving;2056u64 exit_latency;2057u64 reserved2;2058};20592060/* Values for Flags field above */20612062#define ACPI_MPST_PRESERVE 12063#define ACPI_MPST_AUTOENTRY 22064#define ACPI_MPST_AUTOEXIT 420652066/* Shared Memory Region (not part of an ACPI table) */20672068struct acpi_mpst_shared {2069u32 signature;2070u16 pcc_command;2071u16 pcc_status;2072u32 command_register;2073u32 status_register;2074u32 power_state_id;2075u32 power_node_id;2076u64 energy_consumed;2077u64 average_power;2078};20792080/*******************************************************************************2081*2082* MSCT - Maximum System Characteristics Table (ACPI 4.0)2083* Version 12084*2085******************************************************************************/20862087struct acpi_table_msct {2088struct acpi_table_header header; /* Common ACPI table header */2089u32 proximity_offset; /* Location of proximity info struct(s) */2090u32 max_proximity_domains; /* Max number of proximity domains */2091u32 max_clock_domains; /* Max number of clock domains */2092u64 max_address; /* Max physical address in system */2093};20942095/* subtable - Maximum Proximity Domain Information. Version 1 */20962097struct acpi_msct_proximity {2098u8 revision;2099u8 length;2100u32 range_start; /* Start of domain range */2101u32 range_end; /* End of domain range */2102u32 processor_capacity;2103u64 memory_capacity; /* In bytes */2104};21052106/*******************************************************************************2107*2108* MRRM - Memory Range and Region Mapping (MRRM) table2109* Conforms to "Intel Resource Director Technology Architecture Specification"2110* Version 1.1, January 20252111*2112******************************************************************************/21132114struct acpi_table_mrrm {2115struct acpi_table_header header; /* Common ACPI table header */2116u8 max_mem_region; /* Max Memory Regions supported */2117u8 flags; /* Region assignment type */2118u8 reserved[26];2119u8 memory_range_entry[];2120};21212122/* Flags */2123#define ACPI_MRRM_FLAGS_REGION_ASSIGNMENT_OS (1<<0)21242125/*******************************************************************************2126*2127* Memory Range entry - Memory Range entry in MRRM table2128*2129******************************************************************************/21302131struct acpi_mrrm_mem_range_entry {2132struct acpi_subtbl_hdr_16 header;2133u32 reserved0; /* Reserved */2134u64 addr_base; /* Base addr of the mem range */2135u64 addr_len; /* Length of the mem range */2136u16 region_id_flags; /* Valid local or remote Region-ID */2137u8 local_region_id; /* Platform-assigned static local Region-ID */2138u8 remote_region_id; /* Platform-assigned static remote Region-ID */2139u32 reserved1; /* Reserved */2140/* Region-ID Programming Registers[] */2141};21422143/* Values for region_id_flags above */2144#define ACPI_MRRM_VALID_REGION_ID_FLAGS_LOCAL (1<<0)2145#define ACPI_MRRM_VALID_REGION_ID_FLAGS_REMOTE (1<<1)21462147/*******************************************************************************2148*2149* MSDM - Microsoft Data Management table2150*2151* Conforms to "Microsoft Software Licensing Tables (SLIC and MSDM)",2152* November 29, 2011. Copyright 2011 Microsoft2153*2154******************************************************************************/21552156/* Basic MSDM table is only the common ACPI header */21572158struct acpi_table_msdm {2159struct acpi_table_header header; /* Common ACPI table header */2160};21612162/*******************************************************************************2163*2164* NFIT - NVDIMM Interface Table (ACPI 6.0+)2165* Version 12166*2167******************************************************************************/21682169struct acpi_table_nfit {2170struct acpi_table_header header; /* Common ACPI table header */2171u32 reserved; /* Reserved, must be zero */2172};21732174/* Subtable header for NFIT */21752176struct acpi_nfit_header {2177u16 type;2178u16 length;2179};21802181/* Values for subtable type in struct acpi_nfit_header */21822183enum acpi_nfit_type {2184ACPI_NFIT_TYPE_SYSTEM_ADDRESS = 0,2185ACPI_NFIT_TYPE_MEMORY_MAP = 1,2186ACPI_NFIT_TYPE_INTERLEAVE = 2,2187ACPI_NFIT_TYPE_SMBIOS = 3,2188ACPI_NFIT_TYPE_CONTROL_REGION = 4,2189ACPI_NFIT_TYPE_DATA_REGION = 5,2190ACPI_NFIT_TYPE_FLUSH_ADDRESS = 6,2191ACPI_NFIT_TYPE_CAPABILITIES = 7,2192ACPI_NFIT_TYPE_RESERVED = 8 /* 8 and greater are reserved */2193};21942195/*2196* NFIT Subtables2197*/21982199/* 0: System Physical Address Range Structure */22002201struct acpi_nfit_system_address {2202struct acpi_nfit_header header;2203u16 range_index;2204u16 flags;2205u32 reserved; /* Reserved, must be zero */2206u32 proximity_domain;2207u8 range_guid[16];2208u64 address;2209u64 length;2210u64 memory_mapping;2211u64 location_cookie; /* ACPI 6.4 */2212};22132214/* Flags */22152216#define ACPI_NFIT_ADD_ONLINE_ONLY (1) /* 00: Add/Online Operation Only */2217#define ACPI_NFIT_PROXIMITY_VALID (1<<1) /* 01: Proximity Domain Valid */2218#define ACPI_NFIT_LOCATION_COOKIE_VALID (1<<2) /* 02: SPA location cookie valid (ACPI 6.4) */22192220/* Range Type GUIDs appear in the include/acuuid.h file */22212222/* 1: Memory Device to System Address Range Map Structure */22232224struct acpi_nfit_memory_map {2225struct acpi_nfit_header header;2226u32 device_handle;2227u16 physical_id;2228u16 region_id;2229u16 range_index;2230u16 region_index;2231u64 region_size;2232u64 region_offset;2233u64 address;2234u16 interleave_index;2235u16 interleave_ways;2236u16 flags;2237u16 reserved; /* Reserved, must be zero */2238};22392240/* Flags */22412242#define ACPI_NFIT_MEM_SAVE_FAILED (1) /* 00: Last SAVE to Memory Device failed */2243#define ACPI_NFIT_MEM_RESTORE_FAILED (1<<1) /* 01: Last RESTORE from Memory Device failed */2244#define ACPI_NFIT_MEM_FLUSH_FAILED (1<<2) /* 02: Platform flush failed */2245#define ACPI_NFIT_MEM_NOT_ARMED (1<<3) /* 03: Memory Device is not armed */2246#define ACPI_NFIT_MEM_HEALTH_OBSERVED (1<<4) /* 04: Memory Device observed SMART/health events */2247#define ACPI_NFIT_MEM_HEALTH_ENABLED (1<<5) /* 05: SMART/health events enabled */2248#define ACPI_NFIT_MEM_MAP_FAILED (1<<6) /* 06: Mapping to SPA failed */22492250/* 2: Interleave Structure */22512252struct acpi_nfit_interleave {2253struct acpi_nfit_header header;2254u16 interleave_index;2255u16 reserved; /* Reserved, must be zero */2256u32 line_count;2257u32 line_size;2258u32 line_offset[]; /* Variable length */2259};22602261/* 3: SMBIOS Management Information Structure */22622263struct acpi_nfit_smbios {2264struct acpi_nfit_header header;2265u32 reserved; /* Reserved, must be zero */2266u8 data[]; /* Variable length */2267};22682269/* 4: NVDIMM Control Region Structure */22702271struct acpi_nfit_control_region {2272struct acpi_nfit_header header;2273u16 region_index;2274u16 vendor_id;2275u16 device_id;2276u16 revision_id;2277u16 subsystem_vendor_id;2278u16 subsystem_device_id;2279u16 subsystem_revision_id;2280u8 valid_fields;2281u8 manufacturing_location;2282u16 manufacturing_date;2283u8 reserved[2]; /* Reserved, must be zero */2284u32 serial_number;2285u16 code;2286u16 windows;2287u64 window_size;2288u64 command_offset;2289u64 command_size;2290u64 status_offset;2291u64 status_size;2292u16 flags;2293u8 reserved1[6]; /* Reserved, must be zero */2294};22952296/* Flags */22972298#define ACPI_NFIT_CONTROL_BUFFERED (1) /* Block Data Windows implementation is buffered */22992300/* valid_fields bits */23012302#define ACPI_NFIT_CONTROL_MFG_INFO_VALID (1) /* Manufacturing fields are valid */23032304/* 5: NVDIMM Block Data Window Region Structure */23052306struct acpi_nfit_data_region {2307struct acpi_nfit_header header;2308u16 region_index;2309u16 windows;2310u64 offset;2311u64 size;2312u64 capacity;2313u64 start_address;2314};23152316/* 6: Flush Hint Address Structure */23172318struct acpi_nfit_flush_address {2319struct acpi_nfit_header header;2320u32 device_handle;2321u16 hint_count;2322u8 reserved[6]; /* Reserved, must be zero */2323u64 hint_address[]; /* Variable length */2324};23252326/* 7: Platform Capabilities Structure */23272328struct acpi_nfit_capabilities {2329struct acpi_nfit_header header;2330u8 highest_capability;2331u8 reserved[3]; /* Reserved, must be zero */2332u32 capabilities;2333u32 reserved2;2334};23352336/* Capabilities Flags */23372338#define ACPI_NFIT_CAPABILITY_CACHE_FLUSH (1) /* 00: Cache Flush to NVDIMM capable */2339#define ACPI_NFIT_CAPABILITY_MEM_FLUSH (1<<1) /* 01: Memory Flush to NVDIMM capable */2340#define ACPI_NFIT_CAPABILITY_MEM_MIRRORING (1<<2) /* 02: Memory Mirroring capable */23412342/*2343* NFIT/DVDIMM device handle support - used as the _ADR for each NVDIMM2344*/2345struct nfit_device_handle {2346u32 handle;2347};23482349/* Device handle construction and extraction macros */23502351#define ACPI_NFIT_DIMM_NUMBER_MASK 0x0000000F2352#define ACPI_NFIT_CHANNEL_NUMBER_MASK 0x000000F02353#define ACPI_NFIT_MEMORY_ID_MASK 0x00000F002354#define ACPI_NFIT_SOCKET_ID_MASK 0x0000F0002355#define ACPI_NFIT_NODE_ID_MASK 0x0FFF000023562357#define ACPI_NFIT_DIMM_NUMBER_OFFSET 02358#define ACPI_NFIT_CHANNEL_NUMBER_OFFSET 42359#define ACPI_NFIT_MEMORY_ID_OFFSET 82360#define ACPI_NFIT_SOCKET_ID_OFFSET 122361#define ACPI_NFIT_NODE_ID_OFFSET 1623622363/* Macro to construct a NFIT/NVDIMM device handle */23642365#define ACPI_NFIT_BUILD_DEVICE_HANDLE(dimm, channel, memory, socket, node) \2366((dimm) | \2367((channel) << ACPI_NFIT_CHANNEL_NUMBER_OFFSET) | \2368((memory) << ACPI_NFIT_MEMORY_ID_OFFSET) | \2369((socket) << ACPI_NFIT_SOCKET_ID_OFFSET) | \2370((node) << ACPI_NFIT_NODE_ID_OFFSET))23712372/* Macros to extract individual fields from a NFIT/NVDIMM device handle */23732374#define ACPI_NFIT_GET_DIMM_NUMBER(handle) \2375((handle) & ACPI_NFIT_DIMM_NUMBER_MASK)23762377#define ACPI_NFIT_GET_CHANNEL_NUMBER(handle) \2378(((handle) & ACPI_NFIT_CHANNEL_NUMBER_MASK) >> ACPI_NFIT_CHANNEL_NUMBER_OFFSET)23792380#define ACPI_NFIT_GET_MEMORY_ID(handle) \2381(((handle) & ACPI_NFIT_MEMORY_ID_MASK) >> ACPI_NFIT_MEMORY_ID_OFFSET)23822383#define ACPI_NFIT_GET_SOCKET_ID(handle) \2384(((handle) & ACPI_NFIT_SOCKET_ID_MASK) >> ACPI_NFIT_SOCKET_ID_OFFSET)23852386#define ACPI_NFIT_GET_NODE_ID(handle) \2387(((handle) & ACPI_NFIT_NODE_ID_MASK) >> ACPI_NFIT_NODE_ID_OFFSET)23882389/*******************************************************************************2390*2391* NHLT - Non HDAudio Link Table2392* Version 12393*2394******************************************************************************/23952396struct acpi_table_nhlt {2397struct acpi_table_header header; /* Common ACPI table header */2398u8 endpoints_count;2399/*2400* struct acpi_nhlt_endpoint endpoints[];2401* struct acpi_nhlt_config oed_config;2402*/2403};24042405struct acpi_nhlt_endpoint {2406u32 length;2407u8 link_type;2408u8 instance_id;2409u16 vendor_id;2410u16 device_id;2411u16 revision_id;2412u32 subsystem_id;2413u8 device_type;2414u8 direction;2415u8 virtual_bus_id;2416/*2417* struct acpi_nhlt_config device_config;2418* struct acpi_nhlt_formats_config formats_config;2419* struct acpi_nhlt_devices_info devices_info;2420*/2421};24222423/*2424* Values for link_type field above2425*2426* Only types PDM and SSP are used2427*/2428#define ACPI_NHLT_LINKTYPE_HDA 02429#define ACPI_NHLT_LINKTYPE_DSP 12430#define ACPI_NHLT_LINKTYPE_PDM 22431#define ACPI_NHLT_LINKTYPE_SSP 32432#define ACPI_NHLT_LINKTYPE_SLIMBUS 42433#define ACPI_NHLT_LINKTYPE_SDW 52434#define ACPI_NHLT_LINKTYPE_UAOL 624352436/* Values for device_id field above */24372438#define ACPI_NHLT_DEVICEID_DMIC 0xAE202439#define ACPI_NHLT_DEVICEID_BT 0xAE302440#define ACPI_NHLT_DEVICEID_I2S 0xAE3424412442/* Values for device_type field above */24432444/*2445* Device types unique to endpoint of link_type=PDM2446*2447* Type PDM used for all SKL+ platforms2448*/2449#define ACPI_NHLT_DEVICETYPE_PDM 02450#define ACPI_NHLT_DEVICETYPE_PDM_SKL 12451/* Device types unique to endpoint of link_type=SSP */2452#define ACPI_NHLT_DEVICETYPE_BT 02453#define ACPI_NHLT_DEVICETYPE_FM 12454#define ACPI_NHLT_DEVICETYPE_MODEM 22455#define ACPI_NHLT_DEVICETYPE_CODEC 424562457/* Values for Direction field above */24582459#define ACPI_NHLT_DIR_RENDER 02460#define ACPI_NHLT_DIR_CAPTURE 124612462struct acpi_nhlt_config {2463u32 capabilities_size;2464u8 capabilities[];2465};24662467struct acpi_nhlt_gendevice_config {2468u8 virtual_slot;2469u8 config_type;2470};24712472/* Values for config_type field above */24732474#define ACPI_NHLT_CONFIGTYPE_GENERIC 02475#define ACPI_NHLT_CONFIGTYPE_MICARRAY 124762477struct acpi_nhlt_micdevice_config {2478u8 virtual_slot;2479u8 config_type;2480u8 array_type;2481};24822483/* Values for array_type field above */24842485#define ACPI_NHLT_ARRAYTYPE_LINEAR2_SMALL 0xA2486#define ACPI_NHLT_ARRAYTYPE_LINEAR2_BIG 0xB2487#define ACPI_NHLT_ARRAYTYPE_LINEAR4_GEO1 0xC2488#define ACPI_NHLT_ARRAYTYPE_PLANAR4_LSHAPED 0xD2489#define ACPI_NHLT_ARRAYTYPE_LINEAR4_GEO2 0xE2490#define ACPI_NHLT_ARRAYTYPE_VENDOR 0xF24912492struct acpi_nhlt_vendor_mic_config {2493u8 type;2494u8 panel;2495u16 speaker_position_distance; /* mm */2496u16 horizontal_offset; /* mm */2497u16 vertical_offset; /* mm */2498u8 frequency_low_band; /* 5*Hz */2499u8 frequency_high_band; /* 500*Hz */2500u16 direction_angle; /* -180 - +180 */2501u16 elevation_angle; /* -180 - +180 */2502u16 work_vertical_angle_begin; /* -180 - +180 with 2 deg step */2503u16 work_vertical_angle_end; /* -180 - +180 with 2 deg step */2504u16 work_horizontal_angle_begin; /* -180 - +180 with 2 deg step */2505u16 work_horizontal_angle_end; /* -180 - +180 with 2 deg step */2506};25072508/* Values for Type field above */25092510#define ACPI_NHLT_MICTYPE_OMNIDIRECTIONAL 02511#define ACPI_NHLT_MICTYPE_SUBCARDIOID 12512#define ACPI_NHLT_MICTYPE_CARDIOID 22513#define ACPI_NHLT_MICTYPE_SUPERCARDIOID 32514#define ACPI_NHLT_MICTYPE_HYPERCARDIOID 42515#define ACPI_NHLT_MICTYPE_8SHAPED 52516#define ACPI_NHLT_MICTYPE_RESERVED 62517#define ACPI_NHLT_MICTYPE_VENDORDEFINED 725182519/* Values for Panel field above */25202521#define ACPI_NHLT_MICLOCATION_TOP 02522#define ACPI_NHLT_MICLOCATION_BOTTOM 12523#define ACPI_NHLT_MICLOCATION_LEFT 22524#define ACPI_NHLT_MICLOCATION_RIGHT 32525#define ACPI_NHLT_MICLOCATION_FRONT 42526#define ACPI_NHLT_MICLOCATION_REAR 525272528struct acpi_nhlt_vendor_micdevice_config {2529u8 virtual_slot;2530u8 config_type;2531u8 array_type;2532u8 mics_count;2533struct acpi_nhlt_vendor_mic_config mics[];2534};25352536union acpi_nhlt_device_config {2537u8 virtual_slot;2538struct acpi_nhlt_gendevice_config gen;2539struct acpi_nhlt_micdevice_config mic;2540struct acpi_nhlt_vendor_micdevice_config vendor_mic;2541};25422543/* Inherited from Microsoft's WAVEFORMATEXTENSIBLE. */2544struct acpi_nhlt_wave_formatext {2545u16 format_tag;2546u16 channel_count;2547u32 samples_per_sec;2548u32 avg_bytes_per_sec;2549u16 block_align;2550u16 bits_per_sample;2551u16 extra_format_size;2552u16 valid_bits_per_sample;2553u32 channel_mask;2554u8 subformat[16];2555};25562557struct acpi_nhlt_format_config {2558struct acpi_nhlt_wave_formatext format;2559struct acpi_nhlt_config config;2560};25612562struct acpi_nhlt_formats_config {2563u8 formats_count;2564struct acpi_nhlt_format_config formats[];2565};25662567struct acpi_nhlt_device_info {2568u8 id[16];2569u8 instance_id;2570u8 port_id;2571};25722573struct acpi_nhlt_devices_info {2574u8 devices_count;2575struct acpi_nhlt_device_info devices[];2576};25772578/*******************************************************************************2579*2580* PCCT - Platform Communications Channel Table (ACPI 5.0)2581* Version 2 (ACPI 6.2)2582*2583******************************************************************************/25842585struct acpi_table_pcct {2586struct acpi_table_header header; /* Common ACPI table header */2587u32 flags;2588u64 reserved;2589};25902591/* Values for Flags field above */25922593#define ACPI_PCCT_DOORBELL 125942595/* Values for subtable type in struct acpi_subtable_header */25962597enum acpi_pcct_type {2598ACPI_PCCT_TYPE_GENERIC_SUBSPACE = 0,2599ACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE = 1,2600ACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE_TYPE2 = 2, /* ACPI 6.1 */2601ACPI_PCCT_TYPE_EXT_PCC_MASTER_SUBSPACE = 3, /* ACPI 6.2 */2602ACPI_PCCT_TYPE_EXT_PCC_SLAVE_SUBSPACE = 4, /* ACPI 6.2 */2603ACPI_PCCT_TYPE_HW_REG_COMM_SUBSPACE = 5, /* ACPI 6.4 */2604ACPI_PCCT_TYPE_RESERVED = 6 /* 6 and greater are reserved */2605};26062607/*2608* PCCT Subtables, correspond to Type in struct acpi_subtable_header2609*/26102611/* 0: Generic Communications Subspace */26122613struct acpi_pcct_subspace {2614struct acpi_subtable_header header;2615u8 reserved[6];2616u64 base_address;2617u64 length;2618struct acpi_generic_address doorbell_register;2619u64 preserve_mask;2620u64 write_mask;2621u32 latency;2622u32 max_access_rate;2623u16 min_turnaround_time;2624};26252626/* 1: HW-reduced Communications Subspace (ACPI 5.1) */26272628struct acpi_pcct_hw_reduced {2629struct acpi_subtable_header header;2630u32 platform_interrupt;2631u8 flags;2632u8 reserved;2633u64 base_address;2634u64 length;2635struct acpi_generic_address doorbell_register;2636u64 preserve_mask;2637u64 write_mask;2638u32 latency;2639u32 max_access_rate;2640u16 min_turnaround_time;2641};26422643/* 2: HW-reduced Communications Subspace Type 2 (ACPI 6.1) */26442645struct acpi_pcct_hw_reduced_type2 {2646struct acpi_subtable_header header;2647u32 platform_interrupt;2648u8 flags;2649u8 reserved;2650u64 base_address;2651u64 length;2652struct acpi_generic_address doorbell_register;2653u64 preserve_mask;2654u64 write_mask;2655u32 latency;2656u32 max_access_rate;2657u16 min_turnaround_time;2658struct acpi_generic_address platform_ack_register;2659u64 ack_preserve_mask;2660u64 ack_write_mask;2661};26622663/* 3: Extended PCC Master Subspace Type 3 (ACPI 6.2) */26642665struct acpi_pcct_ext_pcc_master {2666struct acpi_subtable_header header;2667u32 platform_interrupt;2668u8 flags;2669u8 reserved1;2670u64 base_address;2671u32 length;2672struct acpi_generic_address doorbell_register;2673u64 preserve_mask;2674u64 write_mask;2675u32 latency;2676u32 max_access_rate;2677u32 min_turnaround_time;2678struct acpi_generic_address platform_ack_register;2679u64 ack_preserve_mask;2680u64 ack_set_mask;2681u64 reserved2;2682struct acpi_generic_address cmd_complete_register;2683u64 cmd_complete_mask;2684struct acpi_generic_address cmd_update_register;2685u64 cmd_update_preserve_mask;2686u64 cmd_update_set_mask;2687struct acpi_generic_address error_status_register;2688u64 error_status_mask;2689};26902691/* 4: Extended PCC Slave Subspace Type 4 (ACPI 6.2) */26922693struct acpi_pcct_ext_pcc_slave {2694struct acpi_subtable_header header;2695u32 platform_interrupt;2696u8 flags;2697u8 reserved1;2698u64 base_address;2699u32 length;2700struct acpi_generic_address doorbell_register;2701u64 preserve_mask;2702u64 write_mask;2703u32 latency;2704u32 max_access_rate;2705u32 min_turnaround_time;2706struct acpi_generic_address platform_ack_register;2707u64 ack_preserve_mask;2708u64 ack_set_mask;2709u64 reserved2;2710struct acpi_generic_address cmd_complete_register;2711u64 cmd_complete_mask;2712struct acpi_generic_address cmd_update_register;2713u64 cmd_update_preserve_mask;2714u64 cmd_update_set_mask;2715struct acpi_generic_address error_status_register;2716u64 error_status_mask;2717};27182719/* 5: HW Registers based Communications Subspace */27202721struct acpi_pcct_hw_reg {2722struct acpi_subtable_header header;2723u16 version;2724u64 base_address;2725u64 length;2726struct acpi_generic_address doorbell_register;2727u64 doorbell_preserve;2728u64 doorbell_write;2729struct acpi_generic_address cmd_complete_register;2730u64 cmd_complete_mask;2731struct acpi_generic_address error_status_register;2732u64 error_status_mask;2733u32 nominal_latency;2734u32 min_turnaround_time;2735};27362737/* Values for doorbell flags above */27382739#define ACPI_PCCT_INTERRUPT_POLARITY (1)2740#define ACPI_PCCT_INTERRUPT_MODE (1<<1)27412742/*2743* PCC memory structures (not part of the ACPI table)2744*/27452746/* Shared Memory Region */27472748struct acpi_pcct_shared_memory {2749u32 signature;2750u16 command;2751u16 status;2752};27532754/* Extended PCC Subspace Shared Memory Region (ACPI 6.2) */27552756struct acpi_pcct_ext_pcc_shared_memory {2757u32 signature;2758u32 flags;2759u32 length;2760u32 command;2761};27622763/*******************************************************************************2764*2765* PDTT - Platform Debug Trigger Table (ACPI 6.2)2766* Version 02767*2768******************************************************************************/27692770struct acpi_table_pdtt {2771struct acpi_table_header header; /* Common ACPI table header */2772u8 trigger_count;2773u8 reserved[3];2774u32 array_offset;2775};27762777/*2778* PDTT Communication Channel Identifier Structure.2779* The number of these structures is defined by trigger_count above,2780* starting at array_offset.2781*/2782struct acpi_pdtt_channel {2783u8 subchannel_id;2784u8 flags;2785};27862787/* Flags for above */27882789#define ACPI_PDTT_RUNTIME_TRIGGER (1)2790#define ACPI_PDTT_WAIT_COMPLETION (1<<1)2791#define ACPI_PDTT_TRIGGER_ORDER (1<<2)27922793/*******************************************************************************2794*2795* PHAT - Platform Health Assessment Table (ACPI 6.4)2796* Version 12797*2798******************************************************************************/27992800struct acpi_table_phat {2801struct acpi_table_header header; /* Common ACPI table header */2802};28032804/* Common header for PHAT subtables that follow main table */28052806struct acpi_phat_header {2807u16 type;2808u16 length;2809u8 revision;2810};28112812/* Values for Type field above */28132814#define ACPI_PHAT_TYPE_FW_VERSION_DATA 02815#define ACPI_PHAT_TYPE_FW_HEALTH_DATA 12816#define ACPI_PHAT_TYPE_RESERVED 2 /* 0x02-0xFFFF are reserved */28172818/*2819* PHAT subtables, correspond to Type in struct acpi_phat_header2820*/28212822/* 0: Firmware Version Data Record */28232824struct acpi_phat_version_data {2825struct acpi_phat_header header;2826u8 reserved[3];2827u32 element_count;2828};28292830struct acpi_phat_version_element {2831u8 guid[16];2832u64 version_value;2833u32 producer_id;2834};28352836/* 1: Firmware Health Data Record */28372838struct acpi_phat_health_data {2839struct acpi_phat_header header;2840u8 reserved[2];2841u8 health;2842u8 device_guid[16];2843u32 device_specific_offset; /* Zero if no Device-specific data */2844};28452846/* Values for Health field above */28472848#define ACPI_PHAT_ERRORS_FOUND 02849#define ACPI_PHAT_NO_ERRORS 12850#define ACPI_PHAT_UNKNOWN_ERRORS 22851#define ACPI_PHAT_ADVISORY 328522853/*******************************************************************************2854*2855* PMTT - Platform Memory Topology Table (ACPI 5.0)2856* Version 12857*2858******************************************************************************/28592860struct acpi_table_pmtt {2861struct acpi_table_header header; /* Common ACPI table header */2862u32 memory_device_count;2863/*2864* Immediately followed by:2865* MEMORY_DEVICE memory_device_struct[memory_device_count];2866*/2867};28682869/* Common header for PMTT subtables that follow main table */28702871struct acpi_pmtt_header {2872u8 type;2873u8 reserved1;2874u16 length;2875u16 flags;2876u16 reserved2;2877u32 memory_device_count; /* Zero means no memory device structs follow */2878/*2879* Immediately followed by:2880* u8 type_specific_data[]2881* MEMORY_DEVICE memory_device_struct[memory_device_count];2882*/2883};28842885/* Values for Type field above */28862887#define ACPI_PMTT_TYPE_SOCKET 02888#define ACPI_PMTT_TYPE_CONTROLLER 12889#define ACPI_PMTT_TYPE_DIMM 22890#define ACPI_PMTT_TYPE_RESERVED 3 /* 0x03-0xFE are reserved */2891#define ACPI_PMTT_TYPE_VENDOR 0xFF28922893/* Values for Flags field above */28942895#define ACPI_PMTT_TOP_LEVEL 0x00012896#define ACPI_PMTT_PHYSICAL 0x00022897#define ACPI_PMTT_MEMORY_TYPE 0x000C28982899/*2900* PMTT subtables, correspond to Type in struct acpi_pmtt_header2901*/29022903/* 0: Socket Structure */29042905struct acpi_pmtt_socket {2906struct acpi_pmtt_header header;2907u16 socket_id;2908u16 reserved;2909};2910/*2911* Immediately followed by:2912* MEMORY_DEVICE memory_device_struct[memory_device_count];2913*/29142915/* 1: Memory Controller subtable */29162917struct acpi_pmtt_controller {2918struct acpi_pmtt_header header;2919u16 controller_id;2920u16 reserved;2921};2922/*2923* Immediately followed by:2924* MEMORY_DEVICE memory_device_struct[memory_device_count];2925*/29262927/* 2: Physical Component Identifier (DIMM) */29282929struct acpi_pmtt_physical_component {2930struct acpi_pmtt_header header;2931u32 bios_handle;2932};29332934/* 0xFF: Vendor Specific Data */29352936struct acpi_pmtt_vendor_specific {2937struct acpi_pmtt_header header;2938u8 type_uuid[16];2939u8 specific[];2940/*2941* Immediately followed by:2942* u8 vendor_specific_data[];2943* MEMORY_DEVICE memory_device_struct[memory_device_count];2944*/2945};29462947/*******************************************************************************2948*2949* PPTT - Processor Properties Topology Table (ACPI 6.2)2950* Version 12951*2952******************************************************************************/29532954struct acpi_table_pptt {2955struct acpi_table_header header; /* Common ACPI table header */2956};29572958/* Values for Type field above */29592960enum acpi_pptt_type {2961ACPI_PPTT_TYPE_PROCESSOR = 0,2962ACPI_PPTT_TYPE_CACHE = 1,2963ACPI_PPTT_TYPE_ID = 2,2964ACPI_PPTT_TYPE_RESERVED = 32965};29662967/* 0: Processor Hierarchy Node Structure */29682969struct acpi_pptt_processor {2970struct acpi_subtable_header header;2971u16 reserved;2972u32 flags;2973u32 parent;2974u32 acpi_processor_id;2975u32 number_of_priv_resources;2976};29772978/* Flags */29792980#define ACPI_PPTT_PHYSICAL_PACKAGE (1)2981#define ACPI_PPTT_ACPI_PROCESSOR_ID_VALID (1<<1)2982#define ACPI_PPTT_ACPI_PROCESSOR_IS_THREAD (1<<2) /* ACPI 6.3 */2983#define ACPI_PPTT_ACPI_LEAF_NODE (1<<3) /* ACPI 6.3 */2984#define ACPI_PPTT_ACPI_IDENTICAL (1<<4) /* ACPI 6.3 */29852986/* 1: Cache Type Structure */29872988struct acpi_pptt_cache {2989struct acpi_subtable_header header;2990u16 reserved;2991u32 flags;2992u32 next_level_of_cache;2993u32 size;2994u32 number_of_sets;2995u8 associativity;2996u8 attributes;2997u16 line_size;2998};29993000/* 1: Cache Type Structure for PPTT version 3 */30013002struct acpi_pptt_cache_v1 {3003struct acpi_subtable_header header;3004u16 reserved;3005u32 flags;3006u32 next_level_of_cache;3007u32 size;3008u32 number_of_sets;3009u8 associativity;3010u8 attributes;3011u16 line_size;3012u32 cache_id;3013};30143015/* Flags */30163017#define ACPI_PPTT_SIZE_PROPERTY_VALID (1) /* Physical property valid */3018#define ACPI_PPTT_NUMBER_OF_SETS_VALID (1<<1) /* Number of sets valid */3019#define ACPI_PPTT_ASSOCIATIVITY_VALID (1<<2) /* Associativity valid */3020#define ACPI_PPTT_ALLOCATION_TYPE_VALID (1<<3) /* Allocation type valid */3021#define ACPI_PPTT_CACHE_TYPE_VALID (1<<4) /* Cache type valid */3022#define ACPI_PPTT_WRITE_POLICY_VALID (1<<5) /* Write policy valid */3023#define ACPI_PPTT_LINE_SIZE_VALID (1<<6) /* Line size valid */3024#define ACPI_PPTT_CACHE_ID_VALID (1<<7) /* Cache ID valid */30253026/* Masks for Attributes */30273028#define ACPI_PPTT_MASK_ALLOCATION_TYPE (0x03) /* Allocation type */3029#define ACPI_PPTT_MASK_CACHE_TYPE (0x0C) /* Cache type */3030#define ACPI_PPTT_MASK_WRITE_POLICY (0x10) /* Write policy */30313032/* Attributes describing cache */3033#define ACPI_PPTT_CACHE_READ_ALLOCATE (0x0) /* Cache line is allocated on read */3034#define ACPI_PPTT_CACHE_WRITE_ALLOCATE (0x01) /* Cache line is allocated on write */3035#define ACPI_PPTT_CACHE_RW_ALLOCATE (0x02) /* Cache line is allocated on read and write */3036#define ACPI_PPTT_CACHE_RW_ALLOCATE_ALT (0x03) /* Alternate representation of above */30373038#define ACPI_PPTT_CACHE_TYPE_DATA (0x0) /* Data cache */3039#define ACPI_PPTT_CACHE_TYPE_INSTR (1<<2) /* Instruction cache */3040#define ACPI_PPTT_CACHE_TYPE_UNIFIED (2<<2) /* Unified I & D cache */3041#define ACPI_PPTT_CACHE_TYPE_UNIFIED_ALT (3<<2) /* Alternate representation of above */30423043#define ACPI_PPTT_CACHE_POLICY_WB (0x0) /* Cache is write back */3044#define ACPI_PPTT_CACHE_POLICY_WT (1<<4) /* Cache is write through */30453046/* 2: ID Structure */30473048struct acpi_pptt_id {3049struct acpi_subtable_header header;3050u16 reserved;3051u32 vendor_id;3052u64 level1_id;3053u64 level2_id;3054u16 major_rev;3055u16 minor_rev;3056u16 spin_rev;3057};30583059/*******************************************************************************3060*3061* PRMT - Platform Runtime Mechanism Table3062* Version 13063*3064******************************************************************************/30653066struct acpi_table_prmt {3067struct acpi_table_header header; /* Common ACPI table header */3068};30693070struct acpi_table_prmt_header {3071u8 platform_guid[16];3072u32 module_info_offset;3073u32 module_info_count;3074};30753076struct acpi_prmt_module_header {3077u16 revision;3078u16 length;3079};30803081struct acpi_prmt_module_info {3082u16 revision;3083u16 length;3084u8 module_guid[16];3085u16 major_rev;3086u16 minor_rev;3087u16 handler_info_count;3088u32 handler_info_offset;3089u64 mmio_list_pointer;3090};30913092struct acpi_prmt_handler_info {3093u16 revision;3094u16 length;3095u8 handler_guid[16];3096u64 handler_address;3097u64 static_data_buffer_address;3098u64 acpi_param_buffer_address;3099};31003101/*******************************************************************************3102*3103* RASF - RAS Feature Table (ACPI 5.0)3104* Version 13105*3106******************************************************************************/31073108struct acpi_table_rasf {3109struct acpi_table_header header; /* Common ACPI table header */3110u8 channel_id[12];3111};31123113/* RASF Platform Communication Channel Shared Memory Region */31143115struct acpi_rasf_shared_memory {3116u32 signature;3117u16 command;3118u16 status;3119u16 version;3120u8 capabilities[16];3121u8 set_capabilities[16];3122u16 num_parameter_blocks;3123u32 set_capabilities_status;3124};31253126/* RASF Parameter Block Structure Header */31273128struct acpi_rasf_parameter_block {3129u16 type;3130u16 version;3131u16 length;3132};31333134/* RASF Parameter Block Structure for PATROL_SCRUB */31353136struct acpi_rasf_patrol_scrub_parameter {3137struct acpi_rasf_parameter_block header;3138u16 patrol_scrub_command;3139u64 requested_address_range[2];3140u64 actual_address_range[2];3141u16 flags;3142u8 requested_speed;3143};31443145/* Masks for Flags and Speed fields above */31463147#define ACPI_RASF_SCRUBBER_RUNNING 13148#define ACPI_RASF_SPEED (7<<1)3149#define ACPI_RASF_SPEED_SLOW (0<<1)3150#define ACPI_RASF_SPEED_MEDIUM (4<<1)3151#define ACPI_RASF_SPEED_FAST (7<<1)31523153/* Channel Commands */31543155enum acpi_rasf_commands {3156ACPI_RASF_EXECUTE_RASF_COMMAND = 13157};31583159/* Platform RAS Capabilities */31603161enum acpi_rasf_capabiliities {3162ACPI_HW_PATROL_SCRUB_SUPPORTED = 0,3163ACPI_SW_PATROL_SCRUB_EXPOSED = 13164};31653166/* Patrol Scrub Commands */31673168enum acpi_rasf_patrol_scrub_commands {3169ACPI_RASF_GET_PATROL_PARAMETERS = 1,3170ACPI_RASF_START_PATROL_SCRUBBER = 2,3171ACPI_RASF_STOP_PATROL_SCRUBBER = 33172};31733174/* Channel Command flags */31753176#define ACPI_RASF_GENERATE_SCI (1<<15)31773178/* Status values */31793180enum acpi_rasf_status {3181ACPI_RASF_SUCCESS = 0,3182ACPI_RASF_NOT_VALID = 1,3183ACPI_RASF_NOT_SUPPORTED = 2,3184ACPI_RASF_BUSY = 3,3185ACPI_RASF_FAILED = 4,3186ACPI_RASF_ABORTED = 5,3187ACPI_RASF_INVALID_DATA = 63188};31893190/* Status flags */31913192#define ACPI_RASF_COMMAND_COMPLETE (1)3193#define ACPI_RASF_SCI_DOORBELL (1<<1)3194#define ACPI_RASF_ERROR (1<<2)3195#define ACPI_RASF_STATUS (0x1F<<3)31963197/*******************************************************************************3198*3199* RAS2 - RAS2 Feature Table (ACPI 6.5)3200* Version 13201*3202*3203******************************************************************************/32043205struct acpi_table_ras2 {3206struct acpi_table_header header; /* Common ACPI table header */3207u16 reserved;3208u16 num_pcc_descs;3209};32103211/* RAS2 Platform Communication Channel Descriptor */32123213struct acpi_ras2_pcc_desc {3214u8 channel_id;3215u16 reserved;3216u8 feature_type;3217u32 instance;3218};32193220/* RAS2 Platform Communication Channel Shared Memory Region */32213222struct acpi_ras2_shmem {3223u32 signature;3224u16 command;3225u16 status;3226u16 version;3227u8 features[16];3228u8 set_caps[16];3229u16 num_param_blks;3230u32 set_caps_status;3231};32323233/* RAS2 Parameter Block Structure for PATROL_SCRUB */32343235struct acpi_ras2_parameter_block {3236u16 type;3237u16 version;3238u16 length;3239};32403241/* RAS2 Parameter Block Structure for PATROL_SCRUB */32423243struct acpi_ras2_patrol_scrub_param {3244struct acpi_ras2_parameter_block header;3245u16 command;3246u64 req_addr_range[2];3247u64 actl_addr_range[2];3248u32 flags;3249u32 scrub_params_out;3250u32 scrub_params_in;3251u32 ext_scrub_params;3252u8 scrub_rate_desc[256];3253};32543255/* Masks for Flags field above */32563257#define ACPI_RAS2_SCRUBBER_RUNNING 132583259/* RAS2 Parameter Block Structure for LA2PA_TRANSLATION */32603261struct acpi_ras2_la2pa_translation_parameter {3262struct acpi_ras2_parameter_block header;3263u16 addr_translation_command;3264u64 sub_inst_id;3265u64 logical_address;3266u64 physical_address;3267u32 status;3268};32693270/* Channel Commands */32713272enum acpi_ras2_commands {3273ACPI_RAS2_EXECUTE_RAS2_COMMAND = 13274};32753276/* Platform RAS2 Features */32773278enum acpi_ras2_features {3279ACPI_RAS2_PATROL_SCRUB_SUPPORTED = 0,3280ACPI_RAS2_LA2PA_TRANSLATION = 13281};32823283/* RAS2 Patrol Scrub Commands */32843285enum acpi_ras2_patrol_scrub_commands {3286ACPI_RAS2_GET_PATROL_PARAMETERS = 1,3287ACPI_RAS2_START_PATROL_SCRUBBER = 2,3288ACPI_RAS2_STOP_PATROL_SCRUBBER = 33289};32903291/* RAS2 LA2PA Translation Commands */32923293enum acpi_ras2_la2_pa_translation_commands {3294ACPI_RAS2_GET_LA2PA_TRANSLATION = 1,3295};32963297/* RAS2 LA2PA Translation Status values */32983299enum acpi_ras2_la2_pa_translation_status {3300ACPI_RAS2_LA2PA_TRANSLATION_SUCCESS = 0,3301ACPI_RAS2_LA2PA_TRANSLATION_FAIL = 1,3302};33033304/* Channel Command flags */33053306#define ACPI_RAS2_GENERATE_SCI (1<<15)33073308/* Status values */33093310enum acpi_ras2_status {3311ACPI_RAS2_SUCCESS = 0,3312ACPI_RAS2_NOT_VALID = 1,3313ACPI_RAS2_NOT_SUPPORTED = 2,3314ACPI_RAS2_BUSY = 3,3315ACPI_RAS2_FAILED = 4,3316ACPI_RAS2_ABORTED = 5,3317ACPI_RAS2_INVALID_DATA = 63318};33193320/* Status flags */33213322#define ACPI_RAS2_COMMAND_COMPLETE (1)3323#define ACPI_RAS2_SCI_DOORBELL (1<<1)3324#define ACPI_RAS2_ERROR (1<<2)3325#define ACPI_RAS2_STATUS (0x1F<<3)33263327/*******************************************************************************3328*3329* RGRT - Regulatory Graphics Resource Table3330* Version 13331*3332* Conforms to "ACPI RGRT" available at:3333* https://microsoft.github.io/mu/dyn/mu_plus/ms_core_pkg/acpi_RGRT/feature_acpi_rgrt/3334*3335******************************************************************************/33363337struct acpi_table_rgrt {3338struct acpi_table_header header; /* Common ACPI table header */3339u16 version;3340u8 image_type;3341u8 reserved;3342u8 image[];3343};33443345/* image_type values */33463347enum acpi_rgrt_image_type {3348ACPI_RGRT_TYPE_RESERVED0 = 0,3349ACPI_RGRT_IMAGE_TYPE_PNG = 1,3350ACPI_RGRT_TYPE_RESERVED = 2 /* 2 and greater are reserved */3351};33523353/*******************************************************************************3354*3355* RHCT - RISC-V Hart Capabilities Table3356* Version 13357*3358******************************************************************************/33593360struct acpi_table_rhct {3361struct acpi_table_header header; /* Common ACPI table header */3362u32 flags; /* RHCT flags */3363u64 time_base_freq;3364u32 node_count;3365u32 node_offset;3366};33673368/* RHCT Flags */33693370#define ACPI_RHCT_TIMER_CANNOT_WAKEUP_CPU (1)3371/*3372* RHCT subtables3373*/3374struct acpi_rhct_node_header {3375u16 type;3376u16 length;3377u16 revision;3378};33793380/* Values for RHCT subtable Type above */33813382enum acpi_rhct_node_type {3383ACPI_RHCT_NODE_TYPE_ISA_STRING = 0x0000,3384ACPI_RHCT_NODE_TYPE_CMO = 0x0001,3385ACPI_RHCT_NODE_TYPE_MMU = 0x0002,3386ACPI_RHCT_NODE_TYPE_RESERVED = 0x0003,3387ACPI_RHCT_NODE_TYPE_HART_INFO = 0xFFFF,3388};33893390/*3391* RHCT node specific subtables3392*/33933394/* ISA string node structure */3395struct acpi_rhct_isa_string {3396u16 isa_length;3397char isa[];3398};33993400struct acpi_rhct_cmo_node {3401u8 reserved; /* Must be zero */3402u8 cbom_size; /* CBOM size in powerof 2 */3403u8 cbop_size; /* CBOP size in powerof 2 */3404u8 cboz_size; /* CBOZ size in powerof 2 */3405};34063407struct acpi_rhct_mmu_node {3408u8 reserved; /* Must be zero */3409u8 mmu_type; /* Virtual Address Scheme */3410};34113412enum acpi_rhct_mmu_type {3413ACPI_RHCT_MMU_TYPE_SV39 = 0,3414ACPI_RHCT_MMU_TYPE_SV48 = 1,3415ACPI_RHCT_MMU_TYPE_SV57 = 23416};34173418/* Hart Info node structure */3419struct acpi_rhct_hart_info {3420u16 num_offsets;3421u32 uid; /* ACPI processor UID */3422};34233424/*******************************************************************************3425*3426* RIMT - RISC-V IO Remapping Table3427*3428* https://github.com/riscv-non-isa/riscv-acpi-rimt3429*3430******************************************************************************/34313432struct acpi_table_rimt {3433struct acpi_table_header header; /* Common ACPI table header */3434u32 num_nodes; /* Number of RIMT Nodes */3435u32 node_offset; /* Offset to RIMT Node Array */3436u32 reserved;3437};34383439struct acpi_rimt_node {3440u8 type;3441u8 revision;3442u16 length;3443u16 reserved;3444u16 id;3445char node_data[];3446};34473448enum acpi_rimt_node_type {3449ACPI_RIMT_NODE_TYPE_IOMMU = 0x0,3450ACPI_RIMT_NODE_TYPE_PCIE_ROOT_COMPLEX = 0x1,3451ACPI_RIMT_NODE_TYPE_PLAT_DEVICE = 0x2,3452};34533454struct acpi_rimt_iommu {3455u8 hardware_id[8]; /* Hardware ID */3456u64 base_address; /* Base Address */3457u32 flags; /* Flags */3458u32 proximity_domain; /* Proximity Domain */3459u16 pcie_segment_number; /* PCIe Segment number */3460u16 pcie_bdf; /* PCIe B/D/F */3461u16 num_interrupt_wires; /* Number of interrupt wires */3462u16 interrupt_wire_offset; /* Interrupt wire array offset */3463u64 interrupt_wire[]; /* Interrupt wire array */3464};34653466/* IOMMU Node Flags */3467#define ACPI_RIMT_IOMMU_FLAGS_PCIE (1)3468#define ACPI_RIMT_IOMMU_FLAGS_PXM_VALID (1 << 1)34693470/* Interrupt Wire Structure */3471struct acpi_rimt_iommu_wire_gsi {3472u32 irq_num; /* Interrupt Number */3473u32 flags; /* Flags */3474};34753476/* Interrupt Wire Flags */3477#define ACPI_RIMT_GSI_LEVEL_TRIGGERRED (1)3478#define ACPI_RIMT_GSI_ACTIVE_HIGH (1 << 1)34793480struct acpi_rimt_id_mapping {3481u32 source_id_base; /* Source ID Base */3482u32 num_ids; /* Number of IDs */3483u32 dest_id_base; /* Destination Device ID Base */3484u32 dest_offset; /* Destination IOMMU Offset */3485u32 flags; /* Flags */3486};34873488struct acpi_rimt_pcie_rc {3489u32 flags; /* Flags */3490u16 reserved; /* Reserved */3491u16 pcie_segment_number; /* PCIe Segment number */3492u16 id_mapping_offset; /* ID mapping array offset */3493u16 num_id_mappings; /* Number of ID mappings */3494};34953496/* PCIe Root Complex Node Flags */3497#define ACPI_RIMT_PCIE_ATS_SUPPORTED (1)3498#define ACPI_RIMT_PCIE_PRI_SUPPORTED (1 << 1)34993500struct acpi_rimt_platform_device {3501u16 id_mapping_offset; /* ID Mapping array offset */3502u16 num_id_mappings; /* Number of ID mappings */3503char device_name[]; /* Device Object Name */3504};35053506/*******************************************************************************3507*3508* SBST - Smart Battery Specification Table3509* Version 13510*3511******************************************************************************/35123513struct acpi_table_sbst {3514struct acpi_table_header header; /* Common ACPI table header */3515u32 warning_level;3516u32 low_level;3517u32 critical_level;3518};35193520/*******************************************************************************3521*3522* SDEI - Software Delegated Exception Interface Descriptor Table3523*3524* Conforms to "Software Delegated Exception Interface (SDEI)" ARM DEN0054A,3525* May 8th, 2017. Copyright 2017 ARM Ltd.3526*3527******************************************************************************/35283529struct acpi_table_sdei {3530struct acpi_table_header header; /* Common ACPI table header */3531};35323533/*******************************************************************************3534*3535* SDEV - Secure Devices Table (ACPI 6.2)3536* Version 13537*3538******************************************************************************/35393540struct acpi_table_sdev {3541struct acpi_table_header header; /* Common ACPI table header */3542};35433544struct acpi_sdev_header {3545u8 type;3546u8 flags;3547u16 length;3548};35493550/* Values for subtable type above */35513552enum acpi_sdev_type {3553ACPI_SDEV_TYPE_NAMESPACE_DEVICE = 0,3554ACPI_SDEV_TYPE_PCIE_ENDPOINT_DEVICE = 1,3555ACPI_SDEV_TYPE_RESERVED = 2 /* 2 and greater are reserved */3556};35573558/* Values for flags above */35593560#define ACPI_SDEV_HANDOFF_TO_UNSECURE_OS (1)3561#define ACPI_SDEV_SECURE_COMPONENTS_PRESENT (1<<1)35623563/*3564* SDEV subtables3565*/35663567/* 0: Namespace Device Based Secure Device Structure */35683569struct acpi_sdev_namespace {3570struct acpi_sdev_header header;3571u16 device_id_offset;3572u16 device_id_length;3573u16 vendor_data_offset;3574u16 vendor_data_length;3575};35763577struct acpi_sdev_secure_component {3578u16 secure_component_offset;3579u16 secure_component_length;3580};35813582/*3583* SDEV sub-subtables ("Components") for above3584*/3585struct acpi_sdev_component {3586struct acpi_sdev_header header;3587};35883589/* Values for sub-subtable type above */35903591enum acpi_sac_type {3592ACPI_SDEV_TYPE_ID_COMPONENT = 0,3593ACPI_SDEV_TYPE_MEM_COMPONENT = 13594};35953596struct acpi_sdev_id_component {3597struct acpi_sdev_header header;3598u16 hardware_id_offset;3599u16 hardware_id_length;3600u16 subsystem_id_offset;3601u16 subsystem_id_length;3602u16 hardware_revision;3603u8 hardware_rev_present;3604u8 class_code_present;3605u8 pci_base_class;3606u8 pci_sub_class;3607u8 pci_programming_xface;3608};36093610struct acpi_sdev_mem_component {3611struct acpi_sdev_header header;3612u32 reserved;3613u64 memory_base_address;3614u64 memory_length;3615};36163617/* 1: PCIe Endpoint Device Based Device Structure */36183619struct acpi_sdev_pcie {3620struct acpi_sdev_header header;3621u16 segment;3622u16 start_bus;3623u16 path_offset;3624u16 path_length;3625u16 vendor_data_offset;3626u16 vendor_data_length;3627};36283629/* 1a: PCIe Endpoint path entry */36303631struct acpi_sdev_pcie_path {3632u8 device;3633u8 function;3634};36353636/*******************************************************************************3637*3638* SVKL - Storage Volume Key Location Table (ACPI 6.4)3639* From: "Guest-Host-Communication Interface (GHCI) for Intel3640* Trust Domain Extensions (Intel TDX)".3641* Version 13642*3643******************************************************************************/36443645struct acpi_table_svkl {3646struct acpi_table_header header; /* Common ACPI table header */3647u32 count;3648};36493650struct acpi_svkl_key {3651u16 type;3652u16 format;3653u32 size;3654u64 address;3655};36563657enum acpi_svkl_type {3658ACPI_SVKL_TYPE_MAIN_STORAGE = 0,3659ACPI_SVKL_TYPE_RESERVED = 1 /* 1 and greater are reserved */3660};36613662enum acpi_svkl_format {3663ACPI_SVKL_FORMAT_RAW_BINARY = 0,3664ACPI_SVKL_FORMAT_RESERVED = 1 /* 1 and greater are reserved */3665};36663667/*******************************************************************************3668* SWFT - SoundWire File Table3669*3670* Conforms to "Discovery and Configuration (DisCo) Specification for SoundWire"3671* Version 2.1, 2 October 20233672*3673******************************************************************************/3674struct acpi_sw_file {3675u16 vendor_id;3676u32 file_id;3677u16 file_version;3678u32 file_length;3679u8 data[];3680};36813682struct acpi_table_swft {3683struct acpi_table_header header;3684struct acpi_sw_file files[];3685};36863687/*******************************************************************************3688*3689* TDEL - TD-Event Log3690* From: "Guest-Host-Communication Interface (GHCI) for Intel3691* Trust Domain Extensions (Intel TDX)".3692* September 20203693*3694******************************************************************************/36953696struct acpi_table_tdel {3697struct acpi_table_header header; /* Common ACPI table header */3698u32 reserved;3699u64 log_area_minimum_length;3700u64 log_area_start_address;3701};37023703/* Reset to default packing */37043705#pragma pack()37063707#endif /* __ACTBL2_H__ */370837093710