/* 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_IVRS "IVRS" /* I/O Virtualization Reporting Structure */34#define ACPI_SIG_LPIT "LPIT" /* Low Power Idle Table */35#define ACPI_SIG_MADT "APIC" /* Multiple APIC Description Table */36#define ACPI_SIG_MCFG "MCFG" /* PCI Memory Mapped Configuration table */37#define ACPI_SIG_MCHI "MCHI" /* Management Controller Host Interface table */38#define ACPI_SIG_MPAM "MPAM" /* Memory System Resource Partitioning and Monitoring Table */39#define ACPI_SIG_MPST "MPST" /* Memory Power State Table */40#define ACPI_SIG_MRRM "MRRM" /* Memory Range and Region Mapping table */41#define ACPI_SIG_MSDM "MSDM" /* Microsoft Data Management Table */42#define ACPI_SIG_NFIT "NFIT" /* NVDIMM Firmware Interface Table */43#define ACPI_SIG_NHLT "NHLT" /* Non HD Audio Link Table */44#define ACPI_SIG_PCCT "PCCT" /* Platform Communications Channel Table */45#define ACPI_SIG_PDTT "PDTT" /* Platform Debug Trigger Table */46#define ACPI_SIG_PHAT "PHAT" /* Platform Health Assessment Table */47#define ACPI_SIG_PMTT "PMTT" /* Platform Memory Topology Table */48#define ACPI_SIG_PPTT "PPTT" /* Processor Properties Topology Table */49#define ACPI_SIG_PRMT "PRMT" /* Platform Runtime Mechanism Table */50#define ACPI_SIG_RASF "RASF" /* RAS Feature table */51#define ACPI_SIG_RAS2 "RAS2" /* RAS2 Feature table */52#define ACPI_SIG_RGRT "RGRT" /* Regulatory Graphics Resource Table */53#define ACPI_SIG_RHCT "RHCT" /* RISC-V Hart Capabilities Table */54#define ACPI_SIG_RIMT "RIMT" /* RISC-V IO Mapping Table */55#define ACPI_SIG_SBST "SBST" /* Smart Battery Specification Table */56#define ACPI_SIG_SDEI "SDEI" /* Software Delegated Exception Interface Table */57#define ACPI_SIG_SDEV "SDEV" /* Secure Devices table */58#define ACPI_SIG_SVKL "SVKL" /* Storage Volume Key Location Table */59#define ACPI_SIG_SWFT "SWFT" /* SoundWire File Table */60#define ACPI_SIG_TDEL "TDEL" /* TD Event Log Table */6162/*63* All tables must be byte-packed to match the ACPI specification, since64* the tables are provided by the system BIOS.65*/66#pragma pack(1)6768/*69* Note: C bitfields are not used for this reason:70*71* "Bitfields are great and easy to read, but unfortunately the C language72* does not specify the layout of bitfields in memory, which means they are73* essentially useless for dealing with packed data in on-disk formats or74* binary wire protocols." (Or ACPI tables and buffers.) "If you ask me,75* this decision was a design error in C. Ritchie could have picked an order76* and stuck with it." Norman Ramsey.77* See http://stackoverflow.com/a/1053662/4166178*/7980/*******************************************************************************81*82* AEST - Arm Error Source Table83*84* Conforms to: ACPI for the Armv8 RAS Extensions 1.1(Sep 2020) and85* 2.0(May 2023) Platform Design Document.86*87******************************************************************************/8889struct acpi_table_aest {90struct acpi_table_header header;91};9293/* Common Subtable header - one per Node Structure (Subtable) */9495struct acpi_aest_hdr {96u8 type;97u16 length;98u8 reserved;99u32 node_specific_offset;100u32 node_interface_offset;101u32 node_interrupt_offset;102u32 node_interrupt_count;103u64 timestamp_rate;104u64 reserved1;105u64 error_injection_rate;106};107108/* Values for Type above */109110#define ACPI_AEST_PROCESSOR_ERROR_NODE 0111#define ACPI_AEST_MEMORY_ERROR_NODE 1112#define ACPI_AEST_SMMU_ERROR_NODE 2113#define ACPI_AEST_VENDOR_ERROR_NODE 3114#define ACPI_AEST_GIC_ERROR_NODE 4115#define ACPI_AEST_PCIE_ERROR_NODE 5116#define ACPI_AEST_PROXY_ERROR_NODE 6117#define ACPI_AEST_NODE_TYPE_RESERVED 7 /* 7 and above are reserved */118119/*120* AEST subtables (Error nodes)121*/122123/* 0: Processor Error */124125typedef struct acpi_aest_processor {126u32 processor_id;127u8 resource_type;128u8 reserved;129u8 flags;130u8 revision;131u64 processor_affinity;132133} acpi_aest_processor;134135/* Values for resource_type above, related structs below */136137#define ACPI_AEST_CACHE_RESOURCE 0138#define ACPI_AEST_TLB_RESOURCE 1139#define ACPI_AEST_GENERIC_RESOURCE 2140#define ACPI_AEST_RESOURCE_RESERVED 3 /* 3 and above are reserved */141142/* 0R: Processor Cache Resource Substructure */143144typedef struct acpi_aest_processor_cache {145u32 cache_reference;146u32 reserved;147148} acpi_aest_processor_cache;149150/* Values for cache_type above */151152#define ACPI_AEST_CACHE_DATA 0153#define ACPI_AEST_CACHE_INSTRUCTION 1154#define ACPI_AEST_CACHE_UNIFIED 2155#define ACPI_AEST_CACHE_RESERVED 3 /* 3 and above are reserved */156157/* 1R: Processor TLB Resource Substructure */158159typedef struct acpi_aest_processor_tlb {160u32 tlb_level;161u32 reserved;162163} acpi_aest_processor_tlb;164165/* 2R: Processor Generic Resource Substructure */166167typedef struct acpi_aest_processor_generic {168u32 resource;169170} acpi_aest_processor_generic;171172/* 1: Memory Error */173174typedef struct acpi_aest_memory {175u32 srat_proximity_domain;176177} acpi_aest_memory;178179/* 2: Smmu Error */180181typedef struct acpi_aest_smmu {182u32 iort_node_reference;183u32 subcomponent_reference;184185} acpi_aest_smmu;186187/* 3: Vendor Defined */188189typedef struct acpi_aest_vendor {190u32 acpi_hid;191u32 acpi_uid;192u8 vendor_specific_data[16];193194} acpi_aest_vendor;195196struct acpi_aest_vendor_v2 {197char acpi_hid[8];198u32 acpi_uid;199u8 vendor_specific_data[16];200};201202/* 4: Gic Error */203204typedef struct acpi_aest_gic {205u32 interface_type;206u32 instance_id;207208} acpi_aest_gic;209210/* Values for interface_type above */211212#define ACPI_AEST_GIC_CPU 0213#define ACPI_AEST_GIC_DISTRIBUTOR 1214#define ACPI_AEST_GIC_REDISTRIBUTOR 2215#define ACPI_AEST_GIC_ITS 3216#define ACPI_AEST_GIC_RESERVED 4 /* 4 and above are reserved */217218/* 5: PCIe Error */219220struct acpi_aest_pcie {221u32 iort_node_reference;222};223224/* 6: Proxy Error */225226struct acpi_aest_proxy {227u64 node_address;228};229230/* Node Interface Structure */231232typedef struct acpi_aest_node_interface {233u8 type;234u8 reserved[3];235u32 flags;236u64 address;237u32 error_record_index;238u32 error_record_count;239u64 error_record_implemented;240u64 error_status_reporting;241u64 addressing_mode;242243} acpi_aest_node_interface;244245/* Node Interface Structure V2 */246247struct acpi_aest_node_interface_header {248u8 type;249u8 group_format;250u8 reserved[2];251u32 flags;252u64 address;253u32 error_record_index;254u32 error_record_count;255};256257#define ACPI_AEST_NODE_GROUP_FORMAT_4K 0258#define ACPI_AEST_NODE_GROUP_FORMAT_16K 1259#define ACPI_AEST_NODE_GROUP_FORMAT_64K 2260261struct acpi_aest_node_interface_common {262u32 error_node_device;263u32 processor_affinity;264u64 error_group_register_base;265u64 fault_inject_register_base;266u64 interrupt_config_register_base;267};268269struct acpi_aest_node_interface_4k {270u64 error_record_implemented;271u64 error_status_reporting;272u64 addressing_mode;273struct acpi_aest_node_interface_common common;274};275276struct acpi_aest_node_interface_16k {277u64 error_record_implemented[4];278u64 error_status_reporting[4];279u64 addressing_mode[4];280struct acpi_aest_node_interface_common common;281};282283struct acpi_aest_node_interface_64k {284u64 error_record_implemented[14];285u64 error_status_reporting[14];286u64 addressing_mode[14];287struct acpi_aest_node_interface_common common;288};289290/* Values for Type field above */291292#define ACPI_AEST_NODE_SYSTEM_REGISTER 0293#define ACPI_AEST_NODE_MEMORY_MAPPED 1294#define ACPI_AEST_NODE_SINGLE_RECORD_MEMORY_MAPPED 2295#define ACPI_AEST_XFACE_RESERVED 3 /* 2 and above are reserved */296297/* Node Interrupt Structure */298299typedef struct acpi_aest_node_interrupt {300u8 type;301u8 reserved[2];302u8 flags;303u32 gsiv;304u8 iort_id;305u8 reserved1[3];306307} acpi_aest_node_interrupt;308309/* Node Interrupt Structure V2 */310311struct acpi_aest_node_interrupt_v2 {312u8 type;313u8 reserved[2];314u8 flags;315u32 gsiv;316u8 reserved1[4];317};318319/* Values for Type field above */320321#define ACPI_AEST_NODE_FAULT_HANDLING 0322#define ACPI_AEST_NODE_ERROR_RECOVERY 1323#define ACPI_AEST_XRUPT_RESERVED 2 /* 2 and above are reserved */324325/*******************************************************************************326* AGDI - Arm Generic Diagnostic Dump and Reset Device Interface327*328* Conforms to "ACPI for Arm Components 1.1, Platform Design Document"329* ARM DEN0093 v1.1330*331******************************************************************************/332struct acpi_table_agdi {333struct acpi_table_header header; /* Common ACPI table header */334u8 flags;335u8 reserved[3];336u32 sdei_event;337u32 gsiv;338};339340/* Mask for Flags field above */341342#define ACPI_AGDI_SIGNALING_MODE (1)343344/*******************************************************************************345*346* APMT - ARM Performance Monitoring Unit Table347*348* Conforms to:349* ARM Performance Monitoring Unit Architecture 1.0 Platform Design Document350* ARM DEN0117 v1.0 November 25, 2021351*352******************************************************************************/353354struct acpi_table_apmt {355struct acpi_table_header header; /* Common ACPI table header */356};357358#define ACPI_APMT_NODE_ID_LENGTH 4359360/*361* APMT subtables362*/363struct acpi_apmt_node {364u16 length;365u8 flags;366u8 type;367u32 id;368u64 inst_primary;369u32 inst_secondary;370u64 base_address0;371u64 base_address1;372u32 ovflw_irq;373u32 reserved;374u32 ovflw_irq_flags;375u32 proc_affinity;376u32 impl_id;377};378379/* Masks for Flags field above */380381#define ACPI_APMT_FLAGS_DUAL_PAGE (1<<0)382#define ACPI_APMT_FLAGS_AFFINITY (1<<1)383#define ACPI_APMT_FLAGS_ATOMIC (1<<2)384385/* Values for Flags dual page field above */386387#define ACPI_APMT_FLAGS_DUAL_PAGE_NSUPP (0<<0)388#define ACPI_APMT_FLAGS_DUAL_PAGE_SUPP (1<<0)389390/* Values for Flags processor affinity field above */391#define ACPI_APMT_FLAGS_AFFINITY_PROC (0<<1)392#define ACPI_APMT_FLAGS_AFFINITY_PROC_CONTAINER (1<<1)393394/* Values for Flags 64-bit atomic field above */395#define ACPI_APMT_FLAGS_ATOMIC_NSUPP (0<<2)396#define ACPI_APMT_FLAGS_ATOMIC_SUPP (1<<2)397398/* Values for Type field above */399400enum acpi_apmt_node_type {401ACPI_APMT_NODE_TYPE_MC = 0x00,402ACPI_APMT_NODE_TYPE_SMMU = 0x01,403ACPI_APMT_NODE_TYPE_PCIE_ROOT = 0x02,404ACPI_APMT_NODE_TYPE_ACPI = 0x03,405ACPI_APMT_NODE_TYPE_CACHE = 0x04,406ACPI_APMT_NODE_TYPE_COUNT407};408409/* Masks for ovflw_irq_flags field above */410411#define ACPI_APMT_OVFLW_IRQ_FLAGS_MODE (1<<0)412#define ACPI_APMT_OVFLW_IRQ_FLAGS_TYPE (1<<1)413414/* Values for ovflw_irq_flags mode field above */415416#define ACPI_APMT_OVFLW_IRQ_FLAGS_MODE_LEVEL (0<<0)417#define ACPI_APMT_OVFLW_IRQ_FLAGS_MODE_EDGE (1<<0)418419/* Values for ovflw_irq_flags type field above */420421#define ACPI_APMT_OVFLW_IRQ_FLAGS_TYPE_WIRED (0<<1)422423/*******************************************************************************424*425* BDAT - BIOS Data ACPI Table426*427* Conforms to "BIOS Data ACPI Table", Interface Specification v4.0 Draft 5428* Nov 2020429*430******************************************************************************/431432struct acpi_table_bdat {433struct acpi_table_header header;434struct acpi_generic_address gas;435};436437/*******************************************************************************438*439* CCEL - CC-Event Log440* From: "Guest-Host-Communication Interface (GHCI) for Intel441* Trust Domain Extensions (Intel TDX)". Feb 2022442*443******************************************************************************/444445struct acpi_table_ccel {446struct acpi_table_header header; /* Common ACPI table header */447u8 CCtype;448u8 Ccsub_type;449u16 reserved;450u64 log_area_minimum_length;451u64 log_area_start_address;452};453454/*******************************************************************************455*456* ERDT - Enhanced Resource Director Technology (ERDT) table457*458* Conforms to "Intel Resource Director Technology Architecture Specification"459* Version 1.1, January 2025460*461******************************************************************************/462463struct acpi_table_erdt {464struct acpi_table_header header; /* Common ACPI table header */465u32 max_clos; /* Maximum classes of service */466u8 reserved[24];467u8 erdt_substructures[];468};469470/* Values for subtable type in struct acpi_subtbl_hdr_16 */471472enum acpi_erdt_type {473ACPI_ERDT_TYPE_RMDD = 0,474ACPI_ERDT_TYPE_CACD = 1,475ACPI_ERDT_TYPE_DACD = 2,476ACPI_ERDT_TYPE_CMRC = 3,477ACPI_ERDT_TYPE_MMRC = 4,478ACPI_ERDT_TYPE_MARC = 5,479ACPI_ERDT_TYPE_CARC = 6,480ACPI_ERDT_TYPE_CMRD = 7,481ACPI_ERDT_TYPE_IBRD = 8,482ACPI_ERDT_TYPE_IBAD = 9,483ACPI_ERDT_TYPE_CARD = 10,484ACPI_ERDT_TYPE_RESERVED = 11 /* 11 and above are reserved */485};486487/*488* ERDT Subtables, correspond to Type in struct acpi_subtbl_hdr_16489*/490491/* 0: RMDD - Resource Management Domain Description */492493struct acpi_erdt_rmdd {494struct acpi_subtbl_hdr_16 header;495u16 flags;496u16 IO_l3_slices; /* Number of slices in IO cache */497u8 IO_l3_sets; /* Number of sets in IO cache */498u8 IO_l3_ways; /* Number of ways in IO cache */499u64 reserved;500u16 domain_id; /* Unique domain ID */501u32 max_rmid; /* Maximun RMID supported */502u64 creg_base; /* Control Register Base Address */503u16 creg_size; /* Control Register Size (4K pages) */504u8 rmdd_structs[];505};506507/* 1: CACD - CPU Agent Collection Description */508509struct acpi_erdt_cacd {510struct acpi_subtbl_hdr_16 header;511u16 reserved;512u16 domain_id; /* Unique domain ID */513u32 X2APICIDS[];514};515516/* 2: DACD - Device Agent Collection Description */517518struct acpi_erdt_dacd {519struct acpi_subtbl_hdr_16 header;520u16 reserved;521u16 domain_id; /* Unique domain ID */522u8 dev_paths[];523};524525struct acpi_erdt_dacd_dev_paths {526struct acpi_subtable_header header;527u16 segment;528u8 reserved;529u8 start_bus;530u8 path[];531};532533/* 3: CMRC - Cache Monitoring Registers for CPU Agents */534535struct acpi_erdt_cmrc {536struct acpi_subtbl_hdr_16 header;537u32 reserved1;538u32 flags;539u8 index_fn;540u8 reserved2[11];541u64 cmt_reg_base;542u32 cmt_reg_size;543u16 clump_size;544u16 clump_stride;545u64 up_scale;546};547548/* 4: MMRC - Memory-bandwidth Monitoring Registers for CPU Agents */549550struct acpi_erdt_mmrc {551struct acpi_subtbl_hdr_16 header;552u32 reserved1;553u32 flags;554u8 index_fn;555u8 reserved2[11];556u64 reg_base;557u32 reg_size;558u8 counter_width;559u64 up_scale;560u8 reserved3[7];561u32 corr_factor_list_len;562u32 corr_factor_list[];563};564565/* 5: MARC - Memory-bandwidth Allocation Registers for CPU Agents */566567struct acpi_erdt_marc {568struct acpi_subtbl_hdr_16 header;569u16 reserved1;570u16 flags;571u8 index_fn;572u8 reserved2[7];573u64 reg_base_opt;574u64 reg_base_min;575u64 reg_base_max;576u32 mba_reg_size;577u32 mba_ctrl_range;578};579580/* 6: CARC - Cache Allocation Registers for CPU Agents */581582struct acpi_erdt_carc {583struct acpi_subtbl_hdr_16 header;584};585586/* 7: CMRD - Cache Monitoring Registers for Device Agents */587588struct acpi_erdt_cmrd {589struct acpi_subtbl_hdr_16 header;590u32 reserved1;591u32 flags;592u8 index_fn;593u8 reserved2[11];594u64 reg_base;595u32 reg_size;596u16 cmt_reg_off;597u16 cmt_clump_size;598u64 up_scale;599};600601/* 8: IBRD - Cache Monitoring Registers for Device Agents */602603struct acpi_erdt_ibrd {604struct acpi_subtbl_hdr_16 header;605u32 reserved1;606u32 flags;607u8 index_fn;608u8 reserved2[11];609u64 reg_base;610u32 reg_size;611u16 total_bw_offset;612u16 Iomiss_bw_offset;613u16 total_bw_clump;614u16 Iomiss_bw_clump;615u8 reserved3[7];616u8 counter_width;617u64 up_scale;618u32 corr_factor_list_len;619u32 corr_factor_list[];620};621622/* 9: IBAD - IO bandwidth Allocation Registers for device agents */623624struct acpi_erdt_ibad {625struct acpi_subtbl_hdr_16 header;626};627628/* 10: CARD - IO bandwidth Allocation Registers for Device Agents */629630struct acpi_erdt_card {631struct acpi_subtbl_hdr_16 header;632u32 reserved1;633u32 flags;634u32 contention_mask;635u8 index_fn;636u8 reserved2[7];637u64 reg_base;638u32 reg_size;639u16 cat_reg_offset;640u16 cat_reg_block_size;641};642643/*******************************************************************************644*645* IORT - IO Remapping Table646*647* Conforms to "IO Remapping Table System Software on ARM Platforms",648* Document number: ARM DEN 0049E.f, Apr 2024649*650******************************************************************************/651652struct acpi_table_iort {653struct acpi_table_header header;654u32 node_count;655u32 node_offset;656u32 reserved;657};658659/*660* IORT subtables661*/662struct acpi_iort_node {663u8 type;664u16 length;665u8 revision;666u32 identifier;667u32 mapping_count;668u32 mapping_offset;669char node_data[];670};671672/* Values for subtable Type above */673674enum acpi_iort_node_type {675ACPI_IORT_NODE_ITS_GROUP = 0x00,676ACPI_IORT_NODE_NAMED_COMPONENT = 0x01,677ACPI_IORT_NODE_PCI_ROOT_COMPLEX = 0x02,678ACPI_IORT_NODE_SMMU = 0x03,679ACPI_IORT_NODE_SMMU_V3 = 0x04,680ACPI_IORT_NODE_PMCG = 0x05,681ACPI_IORT_NODE_RMR = 0x06,682};683684struct acpi_iort_id_mapping {685u32 input_base; /* Lowest value in input range */686u32 id_count; /* Number of IDs */687u32 output_base; /* Lowest value in output range */688u32 output_reference; /* A reference to the output node */689u32 flags;690};691692/* Masks for Flags field above for IORT subtable */693694#define ACPI_IORT_ID_SINGLE_MAPPING (1)695696struct acpi_iort_memory_access {697u32 cache_coherency;698u8 hints;699u16 reserved;700u8 memory_flags;701};702703/* Values for cache_coherency field above */704705#define ACPI_IORT_NODE_COHERENT 0x00000001 /* The device node is fully coherent */706#define ACPI_IORT_NODE_NOT_COHERENT 0x00000000 /* The device node is not coherent */707708/* Masks for Hints field above */709710#define ACPI_IORT_HT_TRANSIENT (1)711#define ACPI_IORT_HT_WRITE (1<<1)712#define ACPI_IORT_HT_READ (1<<2)713#define ACPI_IORT_HT_OVERRIDE (1<<3)714715/* Masks for memory_flags field above */716717#define ACPI_IORT_MF_COHERENCY (1)718#define ACPI_IORT_MF_ATTRIBUTES (1<<1)719#define ACPI_IORT_MF_CANWBS (1<<2)720721/*722* IORT node specific subtables723*/724struct acpi_iort_its_group {725u32 its_count;726u32 identifiers[]; /* GIC ITS identifier array */727};728729struct acpi_iort_named_component {730u32 node_flags;731u64 memory_properties; /* Memory access properties */732u8 memory_address_limit; /* Memory address size limit */733char device_name[]; /* Path of namespace object */734};735736/* Masks for Flags field above */737738#define ACPI_IORT_NC_STALL_SUPPORTED (1)739#define ACPI_IORT_NC_PASID_BITS (31<<1)740741struct acpi_iort_root_complex {742u64 memory_properties; /* Memory access properties */743u32 ats_attribute;744u32 pci_segment_number;745u8 memory_address_limit; /* Memory address size limit */746u16 pasid_capabilities; /* PASID Capabilities */747u8 reserved[]; /* Reserved, must be zero */748};749750/* Masks for ats_attribute field above */751752#define ACPI_IORT_ATS_SUPPORTED (1) /* The root complex ATS support */753#define ACPI_IORT_PRI_SUPPORTED (1<<1) /* The root complex PRI support */754#define ACPI_IORT_PASID_FWD_SUPPORTED (1<<2) /* The root complex PASID forward support */755756/* Masks for pasid_capabilities field above */757#define ACPI_IORT_PASID_MAX_WIDTH (0x1F) /* Bits 0-4 */758759struct acpi_iort_smmu {760u64 base_address; /* SMMU base address */761u64 span; /* Length of memory range */762u32 model;763u32 flags;764u32 global_interrupt_offset;765u32 context_interrupt_count;766u32 context_interrupt_offset;767u32 pmu_interrupt_count;768u32 pmu_interrupt_offset;769u64 interrupts[]; /* Interrupt array */770};771772/* Values for Model field above */773774#define ACPI_IORT_SMMU_V1 0x00000000 /* Generic SMMUv1 */775#define ACPI_IORT_SMMU_V2 0x00000001 /* Generic SMMUv2 */776#define ACPI_IORT_SMMU_CORELINK_MMU400 0x00000002 /* ARM Corelink MMU-400 */777#define ACPI_IORT_SMMU_CORELINK_MMU500 0x00000003 /* ARM Corelink MMU-500 */778#define ACPI_IORT_SMMU_CORELINK_MMU401 0x00000004 /* ARM Corelink MMU-401 */779#define ACPI_IORT_SMMU_CAVIUM_THUNDERX 0x00000005 /* Cavium thunder_x SMMUv2 */780781/* Masks for Flags field above */782783#define ACPI_IORT_SMMU_DVM_SUPPORTED (1)784#define ACPI_IORT_SMMU_COHERENT_WALK (1<<1)785786/* Global interrupt format */787788struct acpi_iort_smmu_gsi {789u32 nsg_irpt;790u32 nsg_irpt_flags;791u32 nsg_cfg_irpt;792u32 nsg_cfg_irpt_flags;793};794795struct acpi_iort_smmu_v3 {796u64 base_address; /* SMMUv3 base address */797u32 flags;798u32 reserved;799u64 vatos_address;800u32 model;801u32 event_gsiv;802u32 pri_gsiv;803u32 gerr_gsiv;804u32 sync_gsiv;805u32 pxm;806u32 id_mapping_index;807};808809/* Values for Model field above */810811#define ACPI_IORT_SMMU_V3_GENERIC 0x00000000 /* Generic SMMUv3 */812#define ACPI_IORT_SMMU_V3_HISILICON_HI161X 0x00000001 /* hi_silicon Hi161x SMMUv3 */813#define ACPI_IORT_SMMU_V3_CAVIUM_CN99XX 0x00000002 /* Cavium CN99xx SMMUv3 */814815/* Masks for Flags field above */816817#define ACPI_IORT_SMMU_V3_COHACC_OVERRIDE (1)818#define ACPI_IORT_SMMU_V3_HTTU_OVERRIDE (3<<1)819#define ACPI_IORT_SMMU_V3_PXM_VALID (1<<3)820#define ACPI_IORT_SMMU_V3_DEVICEID_VALID (1<<4)821822struct acpi_iort_pmcg {823u64 page0_base_address;824u32 overflow_gsiv;825u32 node_reference;826u64 page1_base_address;827};828829struct acpi_iort_rmr {830u32 flags;831u32 rmr_count;832u32 rmr_offset;833};834835/* Masks for Flags field above */836#define ACPI_IORT_RMR_REMAP_PERMITTED (1)837#define ACPI_IORT_RMR_ACCESS_PRIVILEGE (1<<1)838839/*840* Macro to access the Access Attributes in flags field above:841* Access Attributes is encoded in bits 9:2842*/843#define ACPI_IORT_RMR_ACCESS_ATTRIBUTES(flags) (((flags) >> 2) & 0xFF)844845/* Values for above Access Attributes */846847#define ACPI_IORT_RMR_ATTR_DEVICE_NGNRNE 0x00848#define ACPI_IORT_RMR_ATTR_DEVICE_NGNRE 0x01849#define ACPI_IORT_RMR_ATTR_DEVICE_NGRE 0x02850#define ACPI_IORT_RMR_ATTR_DEVICE_GRE 0x03851#define ACPI_IORT_RMR_ATTR_NORMAL_NC 0x04852#define ACPI_IORT_RMR_ATTR_NORMAL_IWB_OWB 0x05853854struct acpi_iort_rmr_desc {855u64 base_address;856u64 length;857u32 reserved;858};859860/*******************************************************************************861*862* IVRS - I/O Virtualization Reporting Structure863* Version 1864*865* Conforms to "AMD I/O Virtualization Technology (IOMMU) Specification",866* Revision 1.26, February 2009.867*868******************************************************************************/869870struct acpi_table_ivrs {871struct acpi_table_header header; /* Common ACPI table header */872u32 info; /* Common virtualization info */873u64 reserved;874};875876/* Values for Info field above */877878#define ACPI_IVRS_PHYSICAL_SIZE 0x00007F00 /* 7 bits, physical address size */879#define ACPI_IVRS_VIRTUAL_SIZE 0x003F8000 /* 7 bits, virtual address size */880#define ACPI_IVRS_ATS_RESERVED 0x00400000 /* ATS address translation range reserved */881882/* IVRS subtable header */883884struct acpi_ivrs_header {885u8 type; /* Subtable type */886u8 flags;887u16 length; /* Subtable length */888u16 device_id; /* ID of IOMMU */889};890891/* Values for subtable Type above */892893enum acpi_ivrs_type {894ACPI_IVRS_TYPE_HARDWARE1 = 0x10,895ACPI_IVRS_TYPE_HARDWARE2 = 0x11,896ACPI_IVRS_TYPE_HARDWARE3 = 0x40,897ACPI_IVRS_TYPE_MEMORY1 = 0x20,898ACPI_IVRS_TYPE_MEMORY2 = 0x21,899ACPI_IVRS_TYPE_MEMORY3 = 0x22900};901902/* Masks for Flags field above for IVHD subtable */903904#define ACPI_IVHD_TT_ENABLE (1)905#define ACPI_IVHD_PASS_PW (1<<1)906#define ACPI_IVHD_RES_PASS_PW (1<<2)907#define ACPI_IVHD_ISOC (1<<3)908#define ACPI_IVHD_IOTLB (1<<4)909910/* Masks for Flags field above for IVMD subtable */911912#define ACPI_IVMD_UNITY (1)913#define ACPI_IVMD_READ (1<<1)914#define ACPI_IVMD_WRITE (1<<2)915#define ACPI_IVMD_EXCLUSION_RANGE (1<<3)916917/*918* IVRS subtables, correspond to Type in struct acpi_ivrs_header919*/920921/* 0x10: I/O Virtualization Hardware Definition Block (IVHD) */922923struct acpi_ivrs_hardware_10 {924struct acpi_ivrs_header header;925u16 capability_offset; /* Offset for IOMMU control fields */926u64 base_address; /* IOMMU control registers */927u16 pci_segment_group;928u16 info; /* MSI number and unit ID */929u32 feature_reporting;930};931932/* 0x11: I/O Virtualization Hardware Definition Block (IVHD) */933934struct acpi_ivrs_hardware_11 {935struct acpi_ivrs_header header;936u16 capability_offset; /* Offset for IOMMU control fields */937u64 base_address; /* IOMMU control registers */938u16 pci_segment_group;939u16 info; /* MSI number and unit ID */940u32 attributes;941u64 efr_register_image;942u64 reserved;943};944945/* Masks for Info field above */946947#define ACPI_IVHD_MSI_NUMBER_MASK 0x001F /* 5 bits, MSI message number */948#define ACPI_IVHD_UNIT_ID_MASK 0x1F00 /* 5 bits, unit_ID */949950/*951* Device Entries for IVHD subtable, appear after struct acpi_ivrs_hardware structure.952* Upper two bits of the Type field are the (encoded) length of the structure.953* Currently, only 4 and 8 byte entries are defined. 16 and 32 byte entries954* are reserved for future use but not defined.955*/956struct acpi_ivrs_de_header {957u8 type;958u16 id;959u8 data_setting;960};961962/* Length of device entry is in the top two bits of Type field above */963964#define ACPI_IVHD_ENTRY_LENGTH 0xC0965966/* Values for device entry Type field above */967968enum acpi_ivrs_device_entry_type {969/* 4-byte device entries, all use struct acpi_ivrs_device4 */970971ACPI_IVRS_TYPE_PAD4 = 0,972ACPI_IVRS_TYPE_ALL = 1,973ACPI_IVRS_TYPE_SELECT = 2,974ACPI_IVRS_TYPE_START = 3,975ACPI_IVRS_TYPE_END = 4,976977/* 8-byte device entries */978979ACPI_IVRS_TYPE_PAD8 = 64,980ACPI_IVRS_TYPE_NOT_USED = 65,981ACPI_IVRS_TYPE_ALIAS_SELECT = 66, /* Uses struct acpi_ivrs_device8a */982ACPI_IVRS_TYPE_ALIAS_START = 67, /* Uses struct acpi_ivrs_device8a */983ACPI_IVRS_TYPE_EXT_SELECT = 70, /* Uses struct acpi_ivrs_device8b */984ACPI_IVRS_TYPE_EXT_START = 71, /* Uses struct acpi_ivrs_device8b */985ACPI_IVRS_TYPE_SPECIAL = 72, /* Uses struct acpi_ivrs_device8c */986987/* Variable-length device entries */988989ACPI_IVRS_TYPE_HID = 240 /* Uses ACPI_IVRS_DEVICE_HID */990};991992/* Values for Data field above */993994#define ACPI_IVHD_INIT_PASS (1)995#define ACPI_IVHD_EINT_PASS (1<<1)996#define ACPI_IVHD_NMI_PASS (1<<2)997#define ACPI_IVHD_SYSTEM_MGMT (3<<4)998#define ACPI_IVHD_LINT0_PASS (1<<6)999#define ACPI_IVHD_LINT1_PASS (1<<7)10001001/* Types 0-4: 4-byte device entry */10021003struct acpi_ivrs_device4 {1004struct acpi_ivrs_de_header header;1005};10061007/* Types 66-67: 8-byte device entry */10081009struct acpi_ivrs_device8a {1010struct acpi_ivrs_de_header header;1011u8 reserved1;1012u16 used_id;1013u8 reserved2;1014};10151016/* Types 70-71: 8-byte device entry */10171018struct acpi_ivrs_device8b {1019struct acpi_ivrs_de_header header;1020u32 extended_data;1021};10221023/* Values for extended_data above */10241025#define ACPI_IVHD_ATS_DISABLED (1<<31)10261027/* Type 72: 8-byte device entry */10281029struct acpi_ivrs_device8c {1030struct acpi_ivrs_de_header header;1031u8 handle;1032u16 used_id;1033u8 variety;1034};10351036/* Values for Variety field above */10371038#define ACPI_IVHD_IOAPIC 11039#define ACPI_IVHD_HPET 210401041/* Type 240: variable-length device entry */10421043struct acpi_ivrs_device_hid {1044struct acpi_ivrs_de_header header;1045u64 acpi_hid;1046u64 acpi_cid;1047u8 uid_type;1048u8 uid_length;1049};10501051/* Values for uid_type above */10521053#define ACPI_IVRS_UID_NOT_PRESENT 01054#define ACPI_IVRS_UID_IS_INTEGER 11055#define ACPI_IVRS_UID_IS_STRING 210561057/* 0x20, 0x21, 0x22: I/O Virtualization Memory Definition Block (IVMD) */10581059struct acpi_ivrs_memory {1060struct acpi_ivrs_header header;1061u16 aux_data;1062u64 reserved;1063u64 start_address;1064u64 memory_length;1065};10661067/*******************************************************************************1068*1069* LPIT - Low Power Idle Table1070*1071* Conforms to "ACPI Low Power Idle Table (LPIT)" July 2014.1072*1073******************************************************************************/10741075struct acpi_table_lpit {1076struct acpi_table_header header; /* Common ACPI table header */1077};10781079/* LPIT subtable header */10801081struct acpi_lpit_header {1082u32 type; /* Subtable type */1083u32 length; /* Subtable length */1084u16 unique_id;1085u16 reserved;1086u32 flags;1087};10881089/* Values for subtable Type above */10901091enum acpi_lpit_type {1092ACPI_LPIT_TYPE_NATIVE_CSTATE = 0x00,1093ACPI_LPIT_TYPE_RESERVED = 0x01 /* 1 and above are reserved */1094};10951096/* Masks for Flags field above */10971098#define ACPI_LPIT_STATE_DISABLED (1)1099#define ACPI_LPIT_NO_COUNTER (1<<1)11001101/*1102* LPIT subtables, correspond to Type in struct acpi_lpit_header1103*/11041105/* 0x00: Native C-state instruction based LPI structure */11061107struct acpi_lpit_native {1108struct acpi_lpit_header header;1109struct acpi_generic_address entry_trigger;1110u32 residency;1111u32 latency;1112struct acpi_generic_address residency_counter;1113u64 counter_frequency;1114};11151116/*******************************************************************************1117*1118* MADT - Multiple APIC Description Table1119* Version 31120*1121******************************************************************************/11221123struct acpi_table_madt {1124struct acpi_table_header header; /* Common ACPI table header */1125u32 address; /* Physical address of local APIC */1126u32 flags;1127};11281129/* Masks for Flags field above */11301131#define ACPI_MADT_PCAT_COMPAT (1) /* 00: System also has dual 8259s */11321133/* Values for PCATCompat flag */11341135#define ACPI_MADT_DUAL_PIC 11136#define ACPI_MADT_MULTIPLE_APIC 011371138/* Values for MADT subtable type in struct acpi_subtable_header */11391140enum acpi_madt_type {1141ACPI_MADT_TYPE_LOCAL_APIC = 0,1142ACPI_MADT_TYPE_IO_APIC = 1,1143ACPI_MADT_TYPE_INTERRUPT_OVERRIDE = 2,1144ACPI_MADT_TYPE_NMI_SOURCE = 3,1145ACPI_MADT_TYPE_LOCAL_APIC_NMI = 4,1146ACPI_MADT_TYPE_LOCAL_APIC_OVERRIDE = 5,1147ACPI_MADT_TYPE_IO_SAPIC = 6,1148ACPI_MADT_TYPE_LOCAL_SAPIC = 7,1149ACPI_MADT_TYPE_INTERRUPT_SOURCE = 8,1150ACPI_MADT_TYPE_LOCAL_X2APIC = 9,1151ACPI_MADT_TYPE_LOCAL_X2APIC_NMI = 10,1152ACPI_MADT_TYPE_GENERIC_INTERRUPT = 11,1153ACPI_MADT_TYPE_GENERIC_DISTRIBUTOR = 12,1154ACPI_MADT_TYPE_GENERIC_MSI_FRAME = 13,1155ACPI_MADT_TYPE_GENERIC_REDISTRIBUTOR = 14,1156ACPI_MADT_TYPE_GENERIC_TRANSLATOR = 15,1157ACPI_MADT_TYPE_MULTIPROC_WAKEUP = 16,1158ACPI_MADT_TYPE_CORE_PIC = 17,1159ACPI_MADT_TYPE_LIO_PIC = 18,1160ACPI_MADT_TYPE_HT_PIC = 19,1161ACPI_MADT_TYPE_EIO_PIC = 20,1162ACPI_MADT_TYPE_MSI_PIC = 21,1163ACPI_MADT_TYPE_BIO_PIC = 22,1164ACPI_MADT_TYPE_LPC_PIC = 23,1165ACPI_MADT_TYPE_RINTC = 24,1166ACPI_MADT_TYPE_IMSIC = 25,1167ACPI_MADT_TYPE_APLIC = 26,1168ACPI_MADT_TYPE_PLIC = 27,1169ACPI_MADT_TYPE_RESERVED = 28, /* 28 to 0x7F are reserved */1170ACPI_MADT_TYPE_OEM_RESERVED = 0x80 /* 0x80 to 0xFF are reserved for OEM use */1171};11721173/*1174* MADT Subtables, correspond to Type in struct acpi_subtable_header1175*/11761177/* 0: Processor Local APIC */11781179struct acpi_madt_local_apic {1180struct acpi_subtable_header header;1181u8 processor_id; /* ACPI processor id */1182u8 id; /* Processor's local APIC id */1183u32 lapic_flags;1184};11851186/* 1: IO APIC */11871188struct acpi_madt_io_apic {1189struct acpi_subtable_header header;1190u8 id; /* I/O APIC ID */1191u8 reserved; /* reserved - must be zero */1192u32 address; /* APIC physical address */1193u32 global_irq_base; /* Global system interrupt where INTI lines start */1194};11951196/* 2: Interrupt Override */11971198struct acpi_madt_interrupt_override {1199struct acpi_subtable_header header;1200u8 bus; /* 0 - ISA */1201u8 source_irq; /* Interrupt source (IRQ) */1202u32 global_irq; /* Global system interrupt */1203u16 inti_flags;1204};12051206/* 3: NMI Source */12071208struct acpi_madt_nmi_source {1209struct acpi_subtable_header header;1210u16 inti_flags;1211u32 global_irq; /* Global system interrupt */1212};12131214/* 4: Local APIC NMI */12151216struct acpi_madt_local_apic_nmi {1217struct acpi_subtable_header header;1218u8 processor_id; /* ACPI processor id */1219u16 inti_flags;1220u8 lint; /* LINTn to which NMI is connected */1221};12221223/* 5: Address Override */12241225struct acpi_madt_local_apic_override {1226struct acpi_subtable_header header;1227u16 reserved; /* Reserved, must be zero */1228u64 address; /* APIC physical address */1229};12301231/* 6: I/O Sapic */12321233struct acpi_madt_io_sapic {1234struct acpi_subtable_header header;1235u8 id; /* I/O SAPIC ID */1236u8 reserved; /* Reserved, must be zero */1237u32 global_irq_base; /* Global interrupt for SAPIC start */1238u64 address; /* SAPIC physical address */1239};12401241/* 7: Local Sapic */12421243struct acpi_madt_local_sapic {1244struct acpi_subtable_header header;1245u8 processor_id; /* ACPI processor id */1246u8 id; /* SAPIC ID */1247u8 eid; /* SAPIC EID */1248u8 reserved[3]; /* Reserved, must be zero */1249u32 lapic_flags;1250u32 uid; /* Numeric UID - ACPI 3.0 */1251char uid_string[]; /* String UID - ACPI 3.0 */1252};12531254/* 8: Platform Interrupt Source */12551256struct acpi_madt_interrupt_source {1257struct acpi_subtable_header header;1258u16 inti_flags;1259u8 type; /* 1=PMI, 2=INIT, 3=corrected */1260u8 id; /* Processor ID */1261u8 eid; /* Processor EID */1262u8 io_sapic_vector; /* Vector value for PMI interrupts */1263u32 global_irq; /* Global system interrupt */1264u32 flags; /* Interrupt Source Flags */1265};12661267/* Masks for Flags field above */12681269#define ACPI_MADT_CPEI_OVERRIDE (1)12701271/* 9: Processor Local X2APIC (ACPI 4.0) */12721273struct acpi_madt_local_x2apic {1274struct acpi_subtable_header header;1275u16 reserved; /* reserved - must be zero */1276u32 local_apic_id; /* Processor x2APIC ID */1277u32 lapic_flags;1278u32 uid; /* ACPI processor UID */1279};12801281/* 10: Local X2APIC NMI (ACPI 4.0) */12821283struct acpi_madt_local_x2apic_nmi {1284struct acpi_subtable_header header;1285u16 inti_flags;1286u32 uid; /* ACPI processor UID */1287u8 lint; /* LINTn to which NMI is connected */1288u8 reserved[3]; /* reserved - must be zero */1289};12901291/* 11: Generic interrupt - GICC (ACPI 5.0 + ACPI 6.0 + ACPI 6.3 + ACPI 6.5 changes) */12921293struct acpi_madt_generic_interrupt {1294struct acpi_subtable_header header;1295u16 reserved; /* reserved - must be zero */1296u32 cpu_interface_number;1297u32 uid;1298u32 flags;1299u32 parking_version;1300u32 performance_interrupt;1301u64 parked_address;1302u64 base_address;1303u64 gicv_base_address;1304u64 gich_base_address;1305u32 vgic_interrupt;1306u64 gicr_base_address;1307u64 arm_mpidr;1308u8 efficiency_class;1309u8 reserved2[1];1310u16 spe_interrupt; /* ACPI 6.3 */1311u16 trbe_interrupt; /* ACPI 6.5 */1312};13131314/* Masks for Flags field above */13151316/* ACPI_MADT_ENABLED (1) Processor is usable if set */1317#define ACPI_MADT_PERFORMANCE_IRQ_MODE (1<<1) /* 01: Performance Interrupt Mode */1318#define ACPI_MADT_VGIC_IRQ_MODE (1<<2) /* 02: VGIC Maintenance Interrupt mode */1319#define ACPI_MADT_GICC_ONLINE_CAPABLE (1<<3) /* 03: Processor is online capable */1320#define ACPI_MADT_GICC_NON_COHERENT (1<<4) /* 04: GIC redistributor is not coherent */13211322/* 12: Generic Distributor (ACPI 5.0 + ACPI 6.0 changes) */13231324struct acpi_madt_generic_distributor {1325struct acpi_subtable_header header;1326u16 reserved; /* reserved - must be zero */1327u32 gic_id;1328u64 base_address;1329u32 global_irq_base;1330u8 version;1331u8 reserved2[3]; /* reserved - must be zero */1332};13331334/* Values for Version field above */13351336enum acpi_madt_gic_version {1337ACPI_MADT_GIC_VERSION_NONE = 0,1338ACPI_MADT_GIC_VERSION_V1 = 1,1339ACPI_MADT_GIC_VERSION_V2 = 2,1340ACPI_MADT_GIC_VERSION_V3 = 3,1341ACPI_MADT_GIC_VERSION_V4 = 4,1342ACPI_MADT_GIC_VERSION_RESERVED = 5 /* 5 and greater are reserved */1343};13441345/* 13: Generic MSI Frame (ACPI 5.1) */13461347struct acpi_madt_generic_msi_frame {1348struct acpi_subtable_header header;1349u16 reserved; /* reserved - must be zero */1350u32 msi_frame_id;1351u64 base_address;1352u32 flags;1353u16 spi_count;1354u16 spi_base;1355};13561357/* Masks for Flags field above */13581359#define ACPI_MADT_OVERRIDE_SPI_VALUES (1)13601361/* 14: Generic Redistributor (ACPI 5.1) */13621363struct acpi_madt_generic_redistributor {1364struct acpi_subtable_header header;1365u8 flags;1366u8 reserved; /* reserved - must be zero */1367u64 base_address;1368u32 length;1369};13701371#define ACPI_MADT_GICR_NON_COHERENT (1)13721373/* 15: Generic Translator (ACPI 6.0) */13741375struct acpi_madt_generic_translator {1376struct acpi_subtable_header header;1377u8 flags;1378u8 reserved; /* reserved - must be zero */1379u32 translation_id;1380u64 base_address;1381u32 reserved2;1382};13831384#define ACPI_MADT_ITS_NON_COHERENT (1)13851386/* 16: Multiprocessor wakeup (ACPI 6.4) */13871388struct acpi_madt_multiproc_wakeup {1389struct acpi_subtable_header header;1390u16 version;1391u32 reserved; /* reserved - must be zero */1392u64 mailbox_address;1393u64 reset_vector;1394};13951396/* Values for Version field above */13971398enum acpi_madt_multiproc_wakeup_version {1399ACPI_MADT_MP_WAKEUP_VERSION_NONE = 0,1400ACPI_MADT_MP_WAKEUP_VERSION_V1 = 1,1401ACPI_MADT_MP_WAKEUP_VERSION_RESERVED = 2, /* 2 and greater are reserved */1402};14031404#define ACPI_MADT_MP_WAKEUP_SIZE_V0 161405#define ACPI_MADT_MP_WAKEUP_SIZE_V1 2414061407#define ACPI_MULTIPROC_WAKEUP_MB_OS_SIZE 20321408#define ACPI_MULTIPROC_WAKEUP_MB_FIRMWARE_SIZE 204814091410struct acpi_madt_multiproc_wakeup_mailbox {1411u16 command;1412u16 reserved; /* reserved - must be zero */1413u32 apic_id;1414u64 wakeup_vector;1415u8 reserved_os[ACPI_MULTIPROC_WAKEUP_MB_OS_SIZE]; /* reserved for OS use */1416u8 reserved_firmware[ACPI_MULTIPROC_WAKEUP_MB_FIRMWARE_SIZE]; /* reserved for firmware use */1417};14181419#define ACPI_MP_WAKE_COMMAND_WAKEUP 11420#define ACPI_MP_WAKE_COMMAND_TEST 214211422/* 17: CPU Core Interrupt Controller (ACPI 6.5) */14231424struct acpi_madt_core_pic {1425struct acpi_subtable_header header;1426u8 version;1427u32 processor_id;1428u32 core_id;1429u32 flags;1430};14311432/* Values for Version field above */14331434enum acpi_madt_core_pic_version {1435ACPI_MADT_CORE_PIC_VERSION_NONE = 0,1436ACPI_MADT_CORE_PIC_VERSION_V1 = 1,1437ACPI_MADT_CORE_PIC_VERSION_RESERVED = 2 /* 2 and greater are reserved */1438};14391440/* 18: Legacy I/O Interrupt Controller (ACPI 6.5) */14411442struct acpi_madt_lio_pic {1443struct acpi_subtable_header header;1444u8 version;1445u64 address;1446u16 size;1447u8 cascade[2];1448u32 cascade_map[2];1449};14501451/* Values for Version field above */14521453enum acpi_madt_lio_pic_version {1454ACPI_MADT_LIO_PIC_VERSION_NONE = 0,1455ACPI_MADT_LIO_PIC_VERSION_V1 = 1,1456ACPI_MADT_LIO_PIC_VERSION_RESERVED = 2 /* 2 and greater are reserved */1457};14581459/* 19: HT Interrupt Controller (ACPI 6.5) */14601461struct acpi_madt_ht_pic {1462struct acpi_subtable_header header;1463u8 version;1464u64 address;1465u16 size;1466u8 cascade[8];1467};14681469/* Values for Version field above */14701471enum acpi_madt_ht_pic_version {1472ACPI_MADT_HT_PIC_VERSION_NONE = 0,1473ACPI_MADT_HT_PIC_VERSION_V1 = 1,1474ACPI_MADT_HT_PIC_VERSION_RESERVED = 2 /* 2 and greater are reserved */1475};14761477/* 20: Extend I/O Interrupt Controller (ACPI 6.5) */14781479struct acpi_madt_eio_pic {1480struct acpi_subtable_header header;1481u8 version;1482u8 cascade;1483u8 node;1484u64 node_map;1485};14861487/* Values for Version field above */14881489enum acpi_madt_eio_pic_version {1490ACPI_MADT_EIO_PIC_VERSION_NONE = 0,1491ACPI_MADT_EIO_PIC_VERSION_V1 = 1,1492ACPI_MADT_EIO_PIC_VERSION_RESERVED = 2 /* 2 and greater are reserved */1493};14941495/* 21: MSI Interrupt Controller (ACPI 6.5) */14961497struct acpi_madt_msi_pic {1498struct acpi_subtable_header header;1499u8 version;1500u64 msg_address;1501u32 start;1502u32 count;1503};15041505/* Values for Version field above */15061507enum acpi_madt_msi_pic_version {1508ACPI_MADT_MSI_PIC_VERSION_NONE = 0,1509ACPI_MADT_MSI_PIC_VERSION_V1 = 1,1510ACPI_MADT_MSI_PIC_VERSION_RESERVED = 2 /* 2 and greater are reserved */1511};15121513/* 22: Bridge I/O Interrupt Controller (ACPI 6.5) */15141515struct acpi_madt_bio_pic {1516struct acpi_subtable_header header;1517u8 version;1518u64 address;1519u16 size;1520u16 id;1521u16 gsi_base;1522};15231524/* Values for Version field above */15251526enum acpi_madt_bio_pic_version {1527ACPI_MADT_BIO_PIC_VERSION_NONE = 0,1528ACPI_MADT_BIO_PIC_VERSION_V1 = 1,1529ACPI_MADT_BIO_PIC_VERSION_RESERVED = 2 /* 2 and greater are reserved */1530};15311532/* 23: LPC Interrupt Controller (ACPI 6.5) */15331534struct acpi_madt_lpc_pic {1535struct acpi_subtable_header header;1536u8 version;1537u64 address;1538u16 size;1539u8 cascade;1540};15411542/* Values for Version field above */15431544enum acpi_madt_lpc_pic_version {1545ACPI_MADT_LPC_PIC_VERSION_NONE = 0,1546ACPI_MADT_LPC_PIC_VERSION_V1 = 1,1547ACPI_MADT_LPC_PIC_VERSION_RESERVED = 2 /* 2 and greater are reserved */1548};15491550/* 24: RISC-V INTC */1551struct acpi_madt_rintc {1552struct acpi_subtable_header header;1553u8 version;1554u8 reserved;1555u32 flags;1556u64 hart_id;1557u32 uid; /* ACPI processor UID */1558u32 ext_intc_id; /* External INTC Id */1559u64 imsic_addr; /* IMSIC base address */1560u32 imsic_size; /* IMSIC size */1561};15621563/* Values for RISC-V INTC Version field above */15641565enum acpi_madt_rintc_version {1566ACPI_MADT_RINTC_VERSION_NONE = 0,1567ACPI_MADT_RINTC_VERSION_V1 = 1,1568ACPI_MADT_RINTC_VERSION_RESERVED = 2 /* 2 and greater are reserved */1569};15701571/* 25: RISC-V IMSIC */1572struct acpi_madt_imsic {1573struct acpi_subtable_header header;1574u8 version;1575u8 reserved;1576u32 flags;1577u16 num_ids;1578u16 num_guest_ids;1579u8 guest_index_bits;1580u8 hart_index_bits;1581u8 group_index_bits;1582u8 group_index_shift;1583};15841585/* 26: RISC-V APLIC */1586struct acpi_madt_aplic {1587struct acpi_subtable_header header;1588u8 version;1589u8 id;1590u32 flags;1591u8 hw_id[8];1592u16 num_idcs;1593u16 num_sources;1594u32 gsi_base;1595u64 base_addr;1596u32 size;1597};15981599/* 27: RISC-V PLIC */1600struct acpi_madt_plic {1601struct acpi_subtable_header header;1602u8 version;1603u8 id;1604u8 hw_id[8];1605u16 num_irqs;1606u16 max_prio;1607u32 flags;1608u32 size;1609u64 base_addr;1610u32 gsi_base;1611};16121613/* 80: OEM data */16141615struct acpi_madt_oem_data {1616ACPI_FLEX_ARRAY(u8, oem_data);1617};16181619/*1620* Common flags fields for MADT subtables1621*/16221623/* MADT Local APIC flags */16241625#define ACPI_MADT_ENABLED (1) /* 00: Processor is usable if set */1626#define ACPI_MADT_ONLINE_CAPABLE (2) /* 01: System HW supports enabling processor at runtime */16271628/* MADT MPS INTI flags (inti_flags) */16291630#define ACPI_MADT_POLARITY_MASK (3) /* 00-01: Polarity of APIC I/O input signals */1631#define ACPI_MADT_TRIGGER_MASK (3<<2) /* 02-03: Trigger mode of APIC input signals */16321633/* Values for MPS INTI flags */16341635#define ACPI_MADT_POLARITY_CONFORMS 01636#define ACPI_MADT_POLARITY_ACTIVE_HIGH 11637#define ACPI_MADT_POLARITY_RESERVED 21638#define ACPI_MADT_POLARITY_ACTIVE_LOW 316391640#define ACPI_MADT_TRIGGER_CONFORMS (0)1641#define ACPI_MADT_TRIGGER_EDGE (1<<2)1642#define ACPI_MADT_TRIGGER_RESERVED (2<<2)1643#define ACPI_MADT_TRIGGER_LEVEL (3<<2)16441645/*******************************************************************************1646*1647* MCFG - PCI Memory Mapped Configuration table and subtable1648* Version 11649*1650* Conforms to "PCI Firmware Specification", Revision 3.0, June 20, 20051651*1652******************************************************************************/16531654struct acpi_table_mcfg {1655struct acpi_table_header header; /* Common ACPI table header */1656u8 reserved[8];1657};16581659/* Subtable */16601661struct acpi_mcfg_allocation {1662u64 address; /* Base address, processor-relative */1663u16 pci_segment; /* PCI segment group number */1664u8 start_bus_number; /* Starting PCI Bus number */1665u8 end_bus_number; /* Final PCI Bus number */1666u32 reserved;1667};16681669/*******************************************************************************1670*1671* MCHI - Management Controller Host Interface Table1672* Version 11673*1674* Conforms to "Management Component Transport Protocol (MCTP) Host1675* Interface Specification", Revision 1.0.0a, October 13, 20091676*1677******************************************************************************/16781679struct acpi_table_mchi {1680struct acpi_table_header header; /* Common ACPI table header */1681u8 interface_type;1682u8 protocol;1683u64 protocol_data;1684u8 interrupt_type;1685u8 gpe;1686u8 pci_device_flag;1687u32 global_interrupt;1688struct acpi_generic_address control_register;1689u8 pci_segment;1690u8 pci_bus;1691u8 pci_device;1692u8 pci_function;1693};16941695/*******************************************************************************1696*1697* MPAM - Memory System Resource Partitioning and Monitoring1698*1699* Conforms to "ACPI for Memory System Resource Partitioning and Monitoring 2.0"1700* Document number: ARM DEN 0065, December, 2022.1701*1702******************************************************************************/17031704/* MPAM RIS locator types. Table 11, Location types */1705enum acpi_mpam_locator_type {1706ACPI_MPAM_LOCATION_TYPE_PROCESSOR_CACHE = 0,1707ACPI_MPAM_LOCATION_TYPE_MEMORY = 1,1708ACPI_MPAM_LOCATION_TYPE_SMMU = 2,1709ACPI_MPAM_LOCATION_TYPE_MEMORY_CACHE = 3,1710ACPI_MPAM_LOCATION_TYPE_ACPI_DEVICE = 4,1711ACPI_MPAM_LOCATION_TYPE_INTERCONNECT = 5,1712ACPI_MPAM_LOCATION_TYPE_UNKNOWN = 0xFF1713};17141715/* MPAM Functional dependency descriptor. Table 10 */1716struct acpi_mpam_func_deps {1717u32 producer;1718u32 reserved;1719};17201721/* MPAM Processor cache locator descriptor. Table 13 */1722struct acpi_mpam_resource_cache_locator {1723u64 cache_reference;1724u32 reserved;1725};17261727/* MPAM Memory locator descriptor. Table 14 */1728struct acpi_mpam_resource_memory_locator {1729u64 proximity_domain;1730u32 reserved;1731};17321733/* MPAM SMMU locator descriptor. Table 15 */1734struct acpi_mpam_resource_smmu_locator {1735u64 smmu_interface;1736u32 reserved;1737};17381739/* MPAM Memory-side cache locator descriptor. Table 16 */1740struct acpi_mpam_resource_memcache_locator {1741u8 reserved[7];1742u8 level;1743u32 reference;1744};17451746/* MPAM ACPI device locator descriptor. Table 17 */1747struct acpi_mpam_resource_acpi_locator {1748u64 acpi_hw_id;1749u32 acpi_unique_id;1750};17511752/* MPAM Interconnect locator descriptor. Table 18 */1753struct acpi_mpam_resource_interconnect_locator {1754u64 inter_connect_desc_tbl_off;1755u32 reserved;1756};17571758/* MPAM Locator structure. Table 12 */1759struct acpi_mpam_resource_generic_locator {1760u64 descriptor1;1761u32 descriptor2;1762};17631764union acpi_mpam_resource_locator {1765struct acpi_mpam_resource_cache_locator cache_locator;1766struct acpi_mpam_resource_memory_locator memory_locator;1767struct acpi_mpam_resource_smmu_locator smmu_locator;1768struct acpi_mpam_resource_memcache_locator mem_cache_locator;1769struct acpi_mpam_resource_acpi_locator acpi_locator;1770struct acpi_mpam_resource_interconnect_locator interconnect_ifc_locator;1771struct acpi_mpam_resource_generic_locator generic_locator;1772};17731774/* Memory System Component Resource Node Structure Table 9 */1775struct acpi_mpam_resource_node {1776u32 identifier;1777u8 ris_index;1778u16 reserved1;1779u8 locator_type;1780union acpi_mpam_resource_locator locator;1781u32 num_functional_deps;1782};17831784/* Memory System Component (MSC) Node Structure. Table 4 */1785struct acpi_mpam_msc_node {1786u16 length;1787u8 interface_type;1788u8 reserved;1789u32 identifier;1790u64 base_address;1791u32 mmio_size;1792u32 overflow_interrupt;1793u32 overflow_interrupt_flags;1794u32 reserved1;1795u32 overflow_interrupt_affinity;1796u32 error_interrupt;1797u32 error_interrupt_flags;1798u32 reserved2;1799u32 error_interrupt_affinity;1800u32 max_nrdy_usec;1801u64 hardware_id_linked_device;1802u32 instance_id_linked_device;1803u32 num_resource_nodes;1804};18051806struct acpi_table_mpam {1807struct acpi_table_header header; /* Common ACPI table header */1808};18091810/*******************************************************************************1811*1812* MPST - Memory Power State Table (ACPI 5.0)1813* Version 11814*1815******************************************************************************/18161817#define ACPI_MPST_CHANNEL_INFO \1818u8 channel_id; \1819u8 reserved1[3]; \1820u16 power_node_count; \1821u16 reserved2;18221823/* Main table */18241825struct acpi_table_mpst {1826struct acpi_table_header header; /* Common ACPI table header */1827ACPI_MPST_CHANNEL_INFO /* Platform Communication Channel */1828};18291830/* Memory Platform Communication Channel Info */18311832struct acpi_mpst_channel {1833ACPI_MPST_CHANNEL_INFO /* Platform Communication Channel */1834};18351836/* Memory Power Node Structure */18371838struct acpi_mpst_power_node {1839u8 flags;1840u8 reserved1;1841u16 node_id;1842u32 length;1843u64 range_address;1844u64 range_length;1845u32 num_power_states;1846u32 num_physical_components;1847};18481849/* Values for Flags field above */18501851#define ACPI_MPST_ENABLED 11852#define ACPI_MPST_POWER_MANAGED 21853#define ACPI_MPST_HOT_PLUG_CAPABLE 418541855/* Memory Power State Structure (follows POWER_NODE above) */18561857struct acpi_mpst_power_state {1858u8 power_state;1859u8 info_index;1860};18611862/* Physical Component ID Structure (follows POWER_STATE above) */18631864struct acpi_mpst_component {1865u16 component_id;1866};18671868/* Memory Power State Characteristics Structure (follows all POWER_NODEs) */18691870struct acpi_mpst_data_hdr {1871u16 characteristics_count;1872u16 reserved;1873};18741875struct acpi_mpst_power_data {1876u8 structure_id;1877u8 flags;1878u16 reserved1;1879u32 average_power;1880u32 power_saving;1881u64 exit_latency;1882u64 reserved2;1883};18841885/* Values for Flags field above */18861887#define ACPI_MPST_PRESERVE 11888#define ACPI_MPST_AUTOENTRY 21889#define ACPI_MPST_AUTOEXIT 418901891/* Shared Memory Region (not part of an ACPI table) */18921893struct acpi_mpst_shared {1894u32 signature;1895u16 pcc_command;1896u16 pcc_status;1897u32 command_register;1898u32 status_register;1899u32 power_state_id;1900u32 power_node_id;1901u64 energy_consumed;1902u64 average_power;1903};19041905/*******************************************************************************1906*1907* MSCT - Maximum System Characteristics Table (ACPI 4.0)1908* Version 11909*1910******************************************************************************/19111912struct acpi_table_msct {1913struct acpi_table_header header; /* Common ACPI table header */1914u32 proximity_offset; /* Location of proximity info struct(s) */1915u32 max_proximity_domains; /* Max number of proximity domains */1916u32 max_clock_domains; /* Max number of clock domains */1917u64 max_address; /* Max physical address in system */1918};19191920/* subtable - Maximum Proximity Domain Information. Version 1 */19211922struct acpi_msct_proximity {1923u8 revision;1924u8 length;1925u32 range_start; /* Start of domain range */1926u32 range_end; /* End of domain range */1927u32 processor_capacity;1928u64 memory_capacity; /* In bytes */1929};19301931/*******************************************************************************1932*1933* MRRM - Memory Range and Region Mapping (MRRM) table1934* Conforms to "Intel Resource Director Technology Architecture Specification"1935* Version 1.1, January 20251936*1937******************************************************************************/19381939struct acpi_table_mrrm {1940struct acpi_table_header header; /* Common ACPI table header */1941u8 max_mem_region; /* Max Memory Regions supported */1942u8 flags; /* Region assignment type */1943u8 reserved[26];1944u8 memory_range_entry[];1945};19461947/* Flags */1948#define ACPI_MRRM_FLAGS_REGION_ASSIGNMENT_OS (1<<0)19491950/*******************************************************************************1951*1952* Memory Range entry - Memory Range entry in MRRM table1953*1954******************************************************************************/19551956struct acpi_mrrm_mem_range_entry {1957struct acpi_subtbl_hdr_16 header;1958u32 reserved0; /* Reserved */1959u64 addr_base; /* Base addr of the mem range */1960u64 addr_len; /* Length of the mem range */1961u16 region_id_flags; /* Valid local or remote Region-ID */1962u8 local_region_id; /* Platform-assigned static local Region-ID */1963u8 remote_region_id; /* Platform-assigned static remote Region-ID */1964u32 reserved1; /* Reserved */1965/* Region-ID Programming Registers[] */1966};19671968/* Values for region_id_flags above */1969#define ACPI_MRRM_VALID_REGION_ID_FLAGS_LOCAL (1<<0)1970#define ACPI_MRRM_VALID_REGION_ID_FLAGS_REMOTE (1<<1)19711972/*******************************************************************************1973*1974* MSDM - Microsoft Data Management table1975*1976* Conforms to "Microsoft Software Licensing Tables (SLIC and MSDM)",1977* November 29, 2011. Copyright 2011 Microsoft1978*1979******************************************************************************/19801981/* Basic MSDM table is only the common ACPI header */19821983struct acpi_table_msdm {1984struct acpi_table_header header; /* Common ACPI table header */1985};19861987/*******************************************************************************1988*1989* NFIT - NVDIMM Interface Table (ACPI 6.0+)1990* Version 11991*1992******************************************************************************/19931994struct acpi_table_nfit {1995struct acpi_table_header header; /* Common ACPI table header */1996u32 reserved; /* Reserved, must be zero */1997};19981999/* Subtable header for NFIT */20002001struct acpi_nfit_header {2002u16 type;2003u16 length;2004};20052006/* Values for subtable type in struct acpi_nfit_header */20072008enum acpi_nfit_type {2009ACPI_NFIT_TYPE_SYSTEM_ADDRESS = 0,2010ACPI_NFIT_TYPE_MEMORY_MAP = 1,2011ACPI_NFIT_TYPE_INTERLEAVE = 2,2012ACPI_NFIT_TYPE_SMBIOS = 3,2013ACPI_NFIT_TYPE_CONTROL_REGION = 4,2014ACPI_NFIT_TYPE_DATA_REGION = 5,2015ACPI_NFIT_TYPE_FLUSH_ADDRESS = 6,2016ACPI_NFIT_TYPE_CAPABILITIES = 7,2017ACPI_NFIT_TYPE_RESERVED = 8 /* 8 and greater are reserved */2018};20192020/*2021* NFIT Subtables2022*/20232024/* 0: System Physical Address Range Structure */20252026struct acpi_nfit_system_address {2027struct acpi_nfit_header header;2028u16 range_index;2029u16 flags;2030u32 reserved; /* Reserved, must be zero */2031u32 proximity_domain;2032u8 range_guid[16];2033u64 address;2034u64 length;2035u64 memory_mapping;2036u64 location_cookie; /* ACPI 6.4 */2037};20382039/* Flags */20402041#define ACPI_NFIT_ADD_ONLINE_ONLY (1) /* 00: Add/Online Operation Only */2042#define ACPI_NFIT_PROXIMITY_VALID (1<<1) /* 01: Proximity Domain Valid */2043#define ACPI_NFIT_LOCATION_COOKIE_VALID (1<<2) /* 02: SPA location cookie valid (ACPI 6.4) */20442045/* Range Type GUIDs appear in the include/acuuid.h file */20462047/* 1: Memory Device to System Address Range Map Structure */20482049struct acpi_nfit_memory_map {2050struct acpi_nfit_header header;2051u32 device_handle;2052u16 physical_id;2053u16 region_id;2054u16 range_index;2055u16 region_index;2056u64 region_size;2057u64 region_offset;2058u64 address;2059u16 interleave_index;2060u16 interleave_ways;2061u16 flags;2062u16 reserved; /* Reserved, must be zero */2063};20642065/* Flags */20662067#define ACPI_NFIT_MEM_SAVE_FAILED (1) /* 00: Last SAVE to Memory Device failed */2068#define ACPI_NFIT_MEM_RESTORE_FAILED (1<<1) /* 01: Last RESTORE from Memory Device failed */2069#define ACPI_NFIT_MEM_FLUSH_FAILED (1<<2) /* 02: Platform flush failed */2070#define ACPI_NFIT_MEM_NOT_ARMED (1<<3) /* 03: Memory Device is not armed */2071#define ACPI_NFIT_MEM_HEALTH_OBSERVED (1<<4) /* 04: Memory Device observed SMART/health events */2072#define ACPI_NFIT_MEM_HEALTH_ENABLED (1<<5) /* 05: SMART/health events enabled */2073#define ACPI_NFIT_MEM_MAP_FAILED (1<<6) /* 06: Mapping to SPA failed */20742075/* 2: Interleave Structure */20762077struct acpi_nfit_interleave {2078struct acpi_nfit_header header;2079u16 interleave_index;2080u16 reserved; /* Reserved, must be zero */2081u32 line_count;2082u32 line_size;2083u32 line_offset[]; /* Variable length */2084};20852086/* 3: SMBIOS Management Information Structure */20872088struct acpi_nfit_smbios {2089struct acpi_nfit_header header;2090u32 reserved; /* Reserved, must be zero */2091u8 data[]; /* Variable length */2092};20932094/* 4: NVDIMM Control Region Structure */20952096struct acpi_nfit_control_region {2097struct acpi_nfit_header header;2098u16 region_index;2099u16 vendor_id;2100u16 device_id;2101u16 revision_id;2102u16 subsystem_vendor_id;2103u16 subsystem_device_id;2104u16 subsystem_revision_id;2105u8 valid_fields;2106u8 manufacturing_location;2107u16 manufacturing_date;2108u8 reserved[2]; /* Reserved, must be zero */2109u32 serial_number;2110u16 code;2111u16 windows;2112u64 window_size;2113u64 command_offset;2114u64 command_size;2115u64 status_offset;2116u64 status_size;2117u16 flags;2118u8 reserved1[6]; /* Reserved, must be zero */2119};21202121/* Flags */21222123#define ACPI_NFIT_CONTROL_BUFFERED (1) /* Block Data Windows implementation is buffered */21242125/* valid_fields bits */21262127#define ACPI_NFIT_CONTROL_MFG_INFO_VALID (1) /* Manufacturing fields are valid */21282129/* 5: NVDIMM Block Data Window Region Structure */21302131struct acpi_nfit_data_region {2132struct acpi_nfit_header header;2133u16 region_index;2134u16 windows;2135u64 offset;2136u64 size;2137u64 capacity;2138u64 start_address;2139};21402141/* 6: Flush Hint Address Structure */21422143struct acpi_nfit_flush_address {2144struct acpi_nfit_header header;2145u32 device_handle;2146u16 hint_count;2147u8 reserved[6]; /* Reserved, must be zero */2148u64 hint_address[]; /* Variable length */2149};21502151/* 7: Platform Capabilities Structure */21522153struct acpi_nfit_capabilities {2154struct acpi_nfit_header header;2155u8 highest_capability;2156u8 reserved[3]; /* Reserved, must be zero */2157u32 capabilities;2158u32 reserved2;2159};21602161/* Capabilities Flags */21622163#define ACPI_NFIT_CAPABILITY_CACHE_FLUSH (1) /* 00: Cache Flush to NVDIMM capable */2164#define ACPI_NFIT_CAPABILITY_MEM_FLUSH (1<<1) /* 01: Memory Flush to NVDIMM capable */2165#define ACPI_NFIT_CAPABILITY_MEM_MIRRORING (1<<2) /* 02: Memory Mirroring capable */21662167/*2168* NFIT/DVDIMM device handle support - used as the _ADR for each NVDIMM2169*/2170struct nfit_device_handle {2171u32 handle;2172};21732174/* Device handle construction and extraction macros */21752176#define ACPI_NFIT_DIMM_NUMBER_MASK 0x0000000F2177#define ACPI_NFIT_CHANNEL_NUMBER_MASK 0x000000F02178#define ACPI_NFIT_MEMORY_ID_MASK 0x00000F002179#define ACPI_NFIT_SOCKET_ID_MASK 0x0000F0002180#define ACPI_NFIT_NODE_ID_MASK 0x0FFF000021812182#define ACPI_NFIT_DIMM_NUMBER_OFFSET 02183#define ACPI_NFIT_CHANNEL_NUMBER_OFFSET 42184#define ACPI_NFIT_MEMORY_ID_OFFSET 82185#define ACPI_NFIT_SOCKET_ID_OFFSET 122186#define ACPI_NFIT_NODE_ID_OFFSET 1621872188/* Macro to construct a NFIT/NVDIMM device handle */21892190#define ACPI_NFIT_BUILD_DEVICE_HANDLE(dimm, channel, memory, socket, node) \2191((dimm) | \2192((channel) << ACPI_NFIT_CHANNEL_NUMBER_OFFSET) | \2193((memory) << ACPI_NFIT_MEMORY_ID_OFFSET) | \2194((socket) << ACPI_NFIT_SOCKET_ID_OFFSET) | \2195((node) << ACPI_NFIT_NODE_ID_OFFSET))21962197/* Macros to extract individual fields from a NFIT/NVDIMM device handle */21982199#define ACPI_NFIT_GET_DIMM_NUMBER(handle) \2200((handle) & ACPI_NFIT_DIMM_NUMBER_MASK)22012202#define ACPI_NFIT_GET_CHANNEL_NUMBER(handle) \2203(((handle) & ACPI_NFIT_CHANNEL_NUMBER_MASK) >> ACPI_NFIT_CHANNEL_NUMBER_OFFSET)22042205#define ACPI_NFIT_GET_MEMORY_ID(handle) \2206(((handle) & ACPI_NFIT_MEMORY_ID_MASK) >> ACPI_NFIT_MEMORY_ID_OFFSET)22072208#define ACPI_NFIT_GET_SOCKET_ID(handle) \2209(((handle) & ACPI_NFIT_SOCKET_ID_MASK) >> ACPI_NFIT_SOCKET_ID_OFFSET)22102211#define ACPI_NFIT_GET_NODE_ID(handle) \2212(((handle) & ACPI_NFIT_NODE_ID_MASK) >> ACPI_NFIT_NODE_ID_OFFSET)22132214/*******************************************************************************2215*2216* NHLT - Non HDAudio Link Table2217* Version 12218*2219******************************************************************************/22202221struct acpi_table_nhlt {2222struct acpi_table_header header; /* Common ACPI table header */2223u8 endpoints_count;2224/*2225* struct acpi_nhlt_endpoint endpoints[];2226* struct acpi_nhlt_config oed_config;2227*/2228};22292230struct acpi_nhlt_endpoint {2231u32 length;2232u8 link_type;2233u8 instance_id;2234u16 vendor_id;2235u16 device_id;2236u16 revision_id;2237u32 subsystem_id;2238u8 device_type;2239u8 direction;2240u8 virtual_bus_id;2241/*2242* struct acpi_nhlt_config device_config;2243* struct acpi_nhlt_formats_config formats_config;2244* struct acpi_nhlt_devices_info devices_info;2245*/2246};22472248/*2249* Values for link_type field above2250*2251* Only types PDM and SSP are used2252*/2253#define ACPI_NHLT_LINKTYPE_HDA 02254#define ACPI_NHLT_LINKTYPE_DSP 12255#define ACPI_NHLT_LINKTYPE_PDM 22256#define ACPI_NHLT_LINKTYPE_SSP 32257#define ACPI_NHLT_LINKTYPE_SLIMBUS 42258#define ACPI_NHLT_LINKTYPE_SDW 52259#define ACPI_NHLT_LINKTYPE_UAOL 622602261/* Values for device_id field above */22622263#define ACPI_NHLT_DEVICEID_DMIC 0xAE202264#define ACPI_NHLT_DEVICEID_BT 0xAE302265#define ACPI_NHLT_DEVICEID_I2S 0xAE3422662267/* Values for device_type field above */22682269/*2270* Device types unique to endpoint of link_type=PDM2271*2272* Type PDM used for all SKL+ platforms2273*/2274#define ACPI_NHLT_DEVICETYPE_PDM 02275#define ACPI_NHLT_DEVICETYPE_PDM_SKL 12276/* Device types unique to endpoint of link_type=SSP */2277#define ACPI_NHLT_DEVICETYPE_BT 02278#define ACPI_NHLT_DEVICETYPE_FM 12279#define ACPI_NHLT_DEVICETYPE_MODEM 22280#define ACPI_NHLT_DEVICETYPE_CODEC 422812282/* Values for Direction field above */22832284#define ACPI_NHLT_DIR_RENDER 02285#define ACPI_NHLT_DIR_CAPTURE 122862287struct acpi_nhlt_config {2288u32 capabilities_size;2289u8 capabilities[];2290};22912292struct acpi_nhlt_gendevice_config {2293u8 virtual_slot;2294u8 config_type;2295};22962297/* Values for config_type field above */22982299#define ACPI_NHLT_CONFIGTYPE_GENERIC 02300#define ACPI_NHLT_CONFIGTYPE_MICARRAY 123012302struct acpi_nhlt_micdevice_config {2303u8 virtual_slot;2304u8 config_type;2305u8 array_type;2306};23072308/* Values for array_type field above */23092310#define ACPI_NHLT_ARRAYTYPE_LINEAR2_SMALL 0xA2311#define ACPI_NHLT_ARRAYTYPE_LINEAR2_BIG 0xB2312#define ACPI_NHLT_ARRAYTYPE_LINEAR4_GEO1 0xC2313#define ACPI_NHLT_ARRAYTYPE_PLANAR4_LSHAPED 0xD2314#define ACPI_NHLT_ARRAYTYPE_LINEAR4_GEO2 0xE2315#define ACPI_NHLT_ARRAYTYPE_VENDOR 0xF23162317struct acpi_nhlt_vendor_mic_config {2318u8 type;2319u8 panel;2320u16 speaker_position_distance; /* mm */2321u16 horizontal_offset; /* mm */2322u16 vertical_offset; /* mm */2323u8 frequency_low_band; /* 5*Hz */2324u8 frequency_high_band; /* 500*Hz */2325u16 direction_angle; /* -180 - +180 */2326u16 elevation_angle; /* -180 - +180 */2327u16 work_vertical_angle_begin; /* -180 - +180 with 2 deg step */2328u16 work_vertical_angle_end; /* -180 - +180 with 2 deg step */2329u16 work_horizontal_angle_begin; /* -180 - +180 with 2 deg step */2330u16 work_horizontal_angle_end; /* -180 - +180 with 2 deg step */2331};23322333/* Values for Type field above */23342335#define ACPI_NHLT_MICTYPE_OMNIDIRECTIONAL 02336#define ACPI_NHLT_MICTYPE_SUBCARDIOID 12337#define ACPI_NHLT_MICTYPE_CARDIOID 22338#define ACPI_NHLT_MICTYPE_SUPERCARDIOID 32339#define ACPI_NHLT_MICTYPE_HYPERCARDIOID 42340#define ACPI_NHLT_MICTYPE_8SHAPED 52341#define ACPI_NHLT_MICTYPE_RESERVED 62342#define ACPI_NHLT_MICTYPE_VENDORDEFINED 723432344/* Values for Panel field above */23452346#define ACPI_NHLT_MICLOCATION_TOP 02347#define ACPI_NHLT_MICLOCATION_BOTTOM 12348#define ACPI_NHLT_MICLOCATION_LEFT 22349#define ACPI_NHLT_MICLOCATION_RIGHT 32350#define ACPI_NHLT_MICLOCATION_FRONT 42351#define ACPI_NHLT_MICLOCATION_REAR 523522353struct acpi_nhlt_vendor_micdevice_config {2354u8 virtual_slot;2355u8 config_type;2356u8 array_type;2357u8 mics_count;2358struct acpi_nhlt_vendor_mic_config mics[];2359};23602361union acpi_nhlt_device_config {2362u8 virtual_slot;2363struct acpi_nhlt_gendevice_config gen;2364struct acpi_nhlt_micdevice_config mic;2365struct acpi_nhlt_vendor_micdevice_config vendor_mic;2366};23672368/* Inherited from Microsoft's WAVEFORMATEXTENSIBLE. */2369struct acpi_nhlt_wave_formatext {2370u16 format_tag;2371u16 channel_count;2372u32 samples_per_sec;2373u32 avg_bytes_per_sec;2374u16 block_align;2375u16 bits_per_sample;2376u16 extra_format_size;2377u16 valid_bits_per_sample;2378u32 channel_mask;2379u8 subformat[16];2380};23812382struct acpi_nhlt_format_config {2383struct acpi_nhlt_wave_formatext format;2384struct acpi_nhlt_config config;2385};23862387struct acpi_nhlt_formats_config {2388u8 formats_count;2389struct acpi_nhlt_format_config formats[];2390};23912392struct acpi_nhlt_device_info {2393u8 id[16];2394u8 instance_id;2395u8 port_id;2396};23972398struct acpi_nhlt_devices_info {2399u8 devices_count;2400struct acpi_nhlt_device_info devices[];2401};24022403/*******************************************************************************2404*2405* PCCT - Platform Communications Channel Table (ACPI 5.0)2406* Version 2 (ACPI 6.2)2407*2408******************************************************************************/24092410struct acpi_table_pcct {2411struct acpi_table_header header; /* Common ACPI table header */2412u32 flags;2413u64 reserved;2414};24152416/* Values for Flags field above */24172418#define ACPI_PCCT_DOORBELL 124192420/* Values for subtable type in struct acpi_subtable_header */24212422enum acpi_pcct_type {2423ACPI_PCCT_TYPE_GENERIC_SUBSPACE = 0,2424ACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE = 1,2425ACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE_TYPE2 = 2, /* ACPI 6.1 */2426ACPI_PCCT_TYPE_EXT_PCC_MASTER_SUBSPACE = 3, /* ACPI 6.2 */2427ACPI_PCCT_TYPE_EXT_PCC_SLAVE_SUBSPACE = 4, /* ACPI 6.2 */2428ACPI_PCCT_TYPE_HW_REG_COMM_SUBSPACE = 5, /* ACPI 6.4 */2429ACPI_PCCT_TYPE_RESERVED = 6 /* 6 and greater are reserved */2430};24312432/*2433* PCCT Subtables, correspond to Type in struct acpi_subtable_header2434*/24352436/* 0: Generic Communications Subspace */24372438struct acpi_pcct_subspace {2439struct acpi_subtable_header header;2440u8 reserved[6];2441u64 base_address;2442u64 length;2443struct acpi_generic_address doorbell_register;2444u64 preserve_mask;2445u64 write_mask;2446u32 latency;2447u32 max_access_rate;2448u16 min_turnaround_time;2449};24502451/* 1: HW-reduced Communications Subspace (ACPI 5.1) */24522453struct acpi_pcct_hw_reduced {2454struct acpi_subtable_header header;2455u32 platform_interrupt;2456u8 flags;2457u8 reserved;2458u64 base_address;2459u64 length;2460struct acpi_generic_address doorbell_register;2461u64 preserve_mask;2462u64 write_mask;2463u32 latency;2464u32 max_access_rate;2465u16 min_turnaround_time;2466};24672468/* 2: HW-reduced Communications Subspace Type 2 (ACPI 6.1) */24692470struct acpi_pcct_hw_reduced_type2 {2471struct acpi_subtable_header header;2472u32 platform_interrupt;2473u8 flags;2474u8 reserved;2475u64 base_address;2476u64 length;2477struct acpi_generic_address doorbell_register;2478u64 preserve_mask;2479u64 write_mask;2480u32 latency;2481u32 max_access_rate;2482u16 min_turnaround_time;2483struct acpi_generic_address platform_ack_register;2484u64 ack_preserve_mask;2485u64 ack_write_mask;2486};24872488/* 3: Extended PCC Master Subspace Type 3 (ACPI 6.2) */24892490struct acpi_pcct_ext_pcc_master {2491struct acpi_subtable_header header;2492u32 platform_interrupt;2493u8 flags;2494u8 reserved1;2495u64 base_address;2496u32 length;2497struct acpi_generic_address doorbell_register;2498u64 preserve_mask;2499u64 write_mask;2500u32 latency;2501u32 max_access_rate;2502u32 min_turnaround_time;2503struct acpi_generic_address platform_ack_register;2504u64 ack_preserve_mask;2505u64 ack_set_mask;2506u64 reserved2;2507struct acpi_generic_address cmd_complete_register;2508u64 cmd_complete_mask;2509struct acpi_generic_address cmd_update_register;2510u64 cmd_update_preserve_mask;2511u64 cmd_update_set_mask;2512struct acpi_generic_address error_status_register;2513u64 error_status_mask;2514};25152516/* 4: Extended PCC Slave Subspace Type 4 (ACPI 6.2) */25172518struct acpi_pcct_ext_pcc_slave {2519struct acpi_subtable_header header;2520u32 platform_interrupt;2521u8 flags;2522u8 reserved1;2523u64 base_address;2524u32 length;2525struct acpi_generic_address doorbell_register;2526u64 preserve_mask;2527u64 write_mask;2528u32 latency;2529u32 max_access_rate;2530u32 min_turnaround_time;2531struct acpi_generic_address platform_ack_register;2532u64 ack_preserve_mask;2533u64 ack_set_mask;2534u64 reserved2;2535struct acpi_generic_address cmd_complete_register;2536u64 cmd_complete_mask;2537struct acpi_generic_address cmd_update_register;2538u64 cmd_update_preserve_mask;2539u64 cmd_update_set_mask;2540struct acpi_generic_address error_status_register;2541u64 error_status_mask;2542};25432544/* 5: HW Registers based Communications Subspace */25452546struct acpi_pcct_hw_reg {2547struct acpi_subtable_header header;2548u16 version;2549u64 base_address;2550u64 length;2551struct acpi_generic_address doorbell_register;2552u64 doorbell_preserve;2553u64 doorbell_write;2554struct acpi_generic_address cmd_complete_register;2555u64 cmd_complete_mask;2556struct acpi_generic_address error_status_register;2557u64 error_status_mask;2558u32 nominal_latency;2559u32 min_turnaround_time;2560};25612562/* Values for doorbell flags above */25632564#define ACPI_PCCT_INTERRUPT_POLARITY (1)2565#define ACPI_PCCT_INTERRUPT_MODE (1<<1)25662567/*2568* PCC memory structures (not part of the ACPI table)2569*/25702571/* Shared Memory Region */25722573struct acpi_pcct_shared_memory {2574u32 signature;2575u16 command;2576u16 status;2577};25782579/* Extended PCC Subspace Shared Memory Region (ACPI 6.2) */25802581struct acpi_pcct_ext_pcc_shared_memory {2582u32 signature;2583u32 flags;2584u32 length;2585u32 command;2586};25872588/*******************************************************************************2589*2590* PDTT - Platform Debug Trigger Table (ACPI 6.2)2591* Version 02592*2593******************************************************************************/25942595struct acpi_table_pdtt {2596struct acpi_table_header header; /* Common ACPI table header */2597u8 trigger_count;2598u8 reserved[3];2599u32 array_offset;2600};26012602/*2603* PDTT Communication Channel Identifier Structure.2604* The number of these structures is defined by trigger_count above,2605* starting at array_offset.2606*/2607struct acpi_pdtt_channel {2608u8 subchannel_id;2609u8 flags;2610};26112612/* Flags for above */26132614#define ACPI_PDTT_RUNTIME_TRIGGER (1)2615#define ACPI_PDTT_WAIT_COMPLETION (1<<1)2616#define ACPI_PDTT_TRIGGER_ORDER (1<<2)26172618/*******************************************************************************2619*2620* PHAT - Platform Health Assessment Table (ACPI 6.4)2621* Version 12622*2623******************************************************************************/26242625struct acpi_table_phat {2626struct acpi_table_header header; /* Common ACPI table header */2627};26282629/* Common header for PHAT subtables that follow main table */26302631struct acpi_phat_header {2632u16 type;2633u16 length;2634u8 revision;2635};26362637/* Values for Type field above */26382639#define ACPI_PHAT_TYPE_FW_VERSION_DATA 02640#define ACPI_PHAT_TYPE_FW_HEALTH_DATA 12641#define ACPI_PHAT_TYPE_RESERVED 2 /* 0x02-0xFFFF are reserved */26422643/*2644* PHAT subtables, correspond to Type in struct acpi_phat_header2645*/26462647/* 0: Firmware Version Data Record */26482649struct acpi_phat_version_data {2650struct acpi_phat_header header;2651u8 reserved[3];2652u32 element_count;2653};26542655struct acpi_phat_version_element {2656u8 guid[16];2657u64 version_value;2658u32 producer_id;2659};26602661/* 1: Firmware Health Data Record */26622663struct acpi_phat_health_data {2664struct acpi_phat_header header;2665u8 reserved[2];2666u8 health;2667u8 device_guid[16];2668u32 device_specific_offset; /* Zero if no Device-specific data */2669};26702671/* Values for Health field above */26722673#define ACPI_PHAT_ERRORS_FOUND 02674#define ACPI_PHAT_NO_ERRORS 12675#define ACPI_PHAT_UNKNOWN_ERRORS 22676#define ACPI_PHAT_ADVISORY 326772678/*******************************************************************************2679*2680* PMTT - Platform Memory Topology Table (ACPI 5.0)2681* Version 12682*2683******************************************************************************/26842685struct acpi_table_pmtt {2686struct acpi_table_header header; /* Common ACPI table header */2687u32 memory_device_count;2688/*2689* Immediately followed by:2690* MEMORY_DEVICE memory_device_struct[memory_device_count];2691*/2692};26932694/* Common header for PMTT subtables that follow main table */26952696struct acpi_pmtt_header {2697u8 type;2698u8 reserved1;2699u16 length;2700u16 flags;2701u16 reserved2;2702u32 memory_device_count; /* Zero means no memory device structs follow */2703/*2704* Immediately followed by:2705* u8 type_specific_data[]2706* MEMORY_DEVICE memory_device_struct[memory_device_count];2707*/2708};27092710/* Values for Type field above */27112712#define ACPI_PMTT_TYPE_SOCKET 02713#define ACPI_PMTT_TYPE_CONTROLLER 12714#define ACPI_PMTT_TYPE_DIMM 22715#define ACPI_PMTT_TYPE_RESERVED 3 /* 0x03-0xFE are reserved */2716#define ACPI_PMTT_TYPE_VENDOR 0xFF27172718/* Values for Flags field above */27192720#define ACPI_PMTT_TOP_LEVEL 0x00012721#define ACPI_PMTT_PHYSICAL 0x00022722#define ACPI_PMTT_MEMORY_TYPE 0x000C27232724/*2725* PMTT subtables, correspond to Type in struct acpi_pmtt_header2726*/27272728/* 0: Socket Structure */27292730struct acpi_pmtt_socket {2731struct acpi_pmtt_header header;2732u16 socket_id;2733u16 reserved;2734};2735/*2736* Immediately followed by:2737* MEMORY_DEVICE memory_device_struct[memory_device_count];2738*/27392740/* 1: Memory Controller subtable */27412742struct acpi_pmtt_controller {2743struct acpi_pmtt_header header;2744u16 controller_id;2745u16 reserved;2746};2747/*2748* Immediately followed by:2749* MEMORY_DEVICE memory_device_struct[memory_device_count];2750*/27512752/* 2: Physical Component Identifier (DIMM) */27532754struct acpi_pmtt_physical_component {2755struct acpi_pmtt_header header;2756u32 bios_handle;2757};27582759/* 0xFF: Vendor Specific Data */27602761struct acpi_pmtt_vendor_specific {2762struct acpi_pmtt_header header;2763u8 type_uuid[16];2764u8 specific[];2765/*2766* Immediately followed by:2767* u8 vendor_specific_data[];2768* MEMORY_DEVICE memory_device_struct[memory_device_count];2769*/2770};27712772/*******************************************************************************2773*2774* PPTT - Processor Properties Topology Table (ACPI 6.2)2775* Version 12776*2777******************************************************************************/27782779struct acpi_table_pptt {2780struct acpi_table_header header; /* Common ACPI table header */2781};27822783/* Values for Type field above */27842785enum acpi_pptt_type {2786ACPI_PPTT_TYPE_PROCESSOR = 0,2787ACPI_PPTT_TYPE_CACHE = 1,2788ACPI_PPTT_TYPE_ID = 2,2789ACPI_PPTT_TYPE_RESERVED = 32790};27912792/* 0: Processor Hierarchy Node Structure */27932794struct acpi_pptt_processor {2795struct acpi_subtable_header header;2796u16 reserved;2797u32 flags;2798u32 parent;2799u32 acpi_processor_id;2800u32 number_of_priv_resources;2801};28022803/* Flags */28042805#define ACPI_PPTT_PHYSICAL_PACKAGE (1)2806#define ACPI_PPTT_ACPI_PROCESSOR_ID_VALID (1<<1)2807#define ACPI_PPTT_ACPI_PROCESSOR_IS_THREAD (1<<2) /* ACPI 6.3 */2808#define ACPI_PPTT_ACPI_LEAF_NODE (1<<3) /* ACPI 6.3 */2809#define ACPI_PPTT_ACPI_IDENTICAL (1<<4) /* ACPI 6.3 */28102811/* 1: Cache Type Structure */28122813struct acpi_pptt_cache {2814struct acpi_subtable_header header;2815u16 reserved;2816u32 flags;2817u32 next_level_of_cache;2818u32 size;2819u32 number_of_sets;2820u8 associativity;2821u8 attributes;2822u16 line_size;2823};28242825/* 1: Cache Type Structure for PPTT version 3 */28262827struct acpi_pptt_cache_v1 {2828u32 cache_id;2829};28302831/* Flags */28322833#define ACPI_PPTT_SIZE_PROPERTY_VALID (1) /* Physical property valid */2834#define ACPI_PPTT_NUMBER_OF_SETS_VALID (1<<1) /* Number of sets valid */2835#define ACPI_PPTT_ASSOCIATIVITY_VALID (1<<2) /* Associativity valid */2836#define ACPI_PPTT_ALLOCATION_TYPE_VALID (1<<3) /* Allocation type valid */2837#define ACPI_PPTT_CACHE_TYPE_VALID (1<<4) /* Cache type valid */2838#define ACPI_PPTT_WRITE_POLICY_VALID (1<<5) /* Write policy valid */2839#define ACPI_PPTT_LINE_SIZE_VALID (1<<6) /* Line size valid */2840#define ACPI_PPTT_CACHE_ID_VALID (1<<7) /* Cache ID valid */28412842/* Masks for Attributes */28432844#define ACPI_PPTT_MASK_ALLOCATION_TYPE (0x03) /* Allocation type */2845#define ACPI_PPTT_MASK_CACHE_TYPE (0x0C) /* Cache type */2846#define ACPI_PPTT_MASK_WRITE_POLICY (0x10) /* Write policy */28472848/* Attributes describing cache */2849#define ACPI_PPTT_CACHE_READ_ALLOCATE (0x0) /* Cache line is allocated on read */2850#define ACPI_PPTT_CACHE_WRITE_ALLOCATE (0x01) /* Cache line is allocated on write */2851#define ACPI_PPTT_CACHE_RW_ALLOCATE (0x02) /* Cache line is allocated on read and write */2852#define ACPI_PPTT_CACHE_RW_ALLOCATE_ALT (0x03) /* Alternate representation of above */28532854#define ACPI_PPTT_CACHE_TYPE_DATA (0x0) /* Data cache */2855#define ACPI_PPTT_CACHE_TYPE_INSTR (1<<2) /* Instruction cache */2856#define ACPI_PPTT_CACHE_TYPE_UNIFIED (2<<2) /* Unified I & D cache */2857#define ACPI_PPTT_CACHE_TYPE_UNIFIED_ALT (3<<2) /* Alternate representation of above */28582859#define ACPI_PPTT_CACHE_POLICY_WB (0x0) /* Cache is write back */2860#define ACPI_PPTT_CACHE_POLICY_WT (1<<4) /* Cache is write through */28612862/* 2: ID Structure */28632864struct acpi_pptt_id {2865struct acpi_subtable_header header;2866u16 reserved;2867u32 vendor_id;2868u64 level1_id;2869u64 level2_id;2870u16 major_rev;2871u16 minor_rev;2872u16 spin_rev;2873};28742875/*******************************************************************************2876*2877* PRMT - Platform Runtime Mechanism Table2878* Version 12879*2880******************************************************************************/28812882struct acpi_table_prmt {2883struct acpi_table_header header; /* Common ACPI table header */2884};28852886struct acpi_table_prmt_header {2887u8 platform_guid[16];2888u32 module_info_offset;2889u32 module_info_count;2890};28912892struct acpi_prmt_module_header {2893u16 revision;2894u16 length;2895};28962897struct acpi_prmt_module_info {2898u16 revision;2899u16 length;2900u8 module_guid[16];2901u16 major_rev;2902u16 minor_rev;2903u16 handler_info_count;2904u32 handler_info_offset;2905u64 mmio_list_pointer;2906};29072908struct acpi_prmt_handler_info {2909u16 revision;2910u16 length;2911u8 handler_guid[16];2912u64 handler_address;2913u64 static_data_buffer_address;2914u64 acpi_param_buffer_address;2915};29162917/*******************************************************************************2918*2919* RASF - RAS Feature Table (ACPI 5.0)2920* Version 12921*2922******************************************************************************/29232924struct acpi_table_rasf {2925struct acpi_table_header header; /* Common ACPI table header */2926u8 channel_id[12];2927};29282929/* RASF Platform Communication Channel Shared Memory Region */29302931struct acpi_rasf_shared_memory {2932u32 signature;2933u16 command;2934u16 status;2935u16 version;2936u8 capabilities[16];2937u8 set_capabilities[16];2938u16 num_parameter_blocks;2939u32 set_capabilities_status;2940};29412942/* RASF Parameter Block Structure Header */29432944struct acpi_rasf_parameter_block {2945u16 type;2946u16 version;2947u16 length;2948};29492950/* RASF Parameter Block Structure for PATROL_SCRUB */29512952struct acpi_rasf_patrol_scrub_parameter {2953struct acpi_rasf_parameter_block header;2954u16 patrol_scrub_command;2955u64 requested_address_range[2];2956u64 actual_address_range[2];2957u16 flags;2958u8 requested_speed;2959};29602961/* Masks for Flags and Speed fields above */29622963#define ACPI_RASF_SCRUBBER_RUNNING 12964#define ACPI_RASF_SPEED (7<<1)2965#define ACPI_RASF_SPEED_SLOW (0<<1)2966#define ACPI_RASF_SPEED_MEDIUM (4<<1)2967#define ACPI_RASF_SPEED_FAST (7<<1)29682969/* Channel Commands */29702971enum acpi_rasf_commands {2972ACPI_RASF_EXECUTE_RASF_COMMAND = 12973};29742975/* Platform RAS Capabilities */29762977enum acpi_rasf_capabiliities {2978ACPI_HW_PATROL_SCRUB_SUPPORTED = 0,2979ACPI_SW_PATROL_SCRUB_EXPOSED = 12980};29812982/* Patrol Scrub Commands */29832984enum acpi_rasf_patrol_scrub_commands {2985ACPI_RASF_GET_PATROL_PARAMETERS = 1,2986ACPI_RASF_START_PATROL_SCRUBBER = 2,2987ACPI_RASF_STOP_PATROL_SCRUBBER = 32988};29892990/* Channel Command flags */29912992#define ACPI_RASF_GENERATE_SCI (1<<15)29932994/* Status values */29952996enum acpi_rasf_status {2997ACPI_RASF_SUCCESS = 0,2998ACPI_RASF_NOT_VALID = 1,2999ACPI_RASF_NOT_SUPPORTED = 2,3000ACPI_RASF_BUSY = 3,3001ACPI_RASF_FAILED = 4,3002ACPI_RASF_ABORTED = 5,3003ACPI_RASF_INVALID_DATA = 63004};30053006/* Status flags */30073008#define ACPI_RASF_COMMAND_COMPLETE (1)3009#define ACPI_RASF_SCI_DOORBELL (1<<1)3010#define ACPI_RASF_ERROR (1<<2)3011#define ACPI_RASF_STATUS (0x1F<<3)30123013/*******************************************************************************3014*3015* RAS2 - RAS2 Feature Table (ACPI 6.5)3016* Version 13017*3018*3019******************************************************************************/30203021struct acpi_table_ras2 {3022struct acpi_table_header header; /* Common ACPI table header */3023u16 reserved;3024u16 num_pcc_descs;3025};30263027/* RAS2 Platform Communication Channel Descriptor */30283029struct acpi_ras2_pcc_desc {3030u8 channel_id;3031u16 reserved;3032u8 feature_type;3033u32 instance;3034};30353036/* RAS2 Platform Communication Channel Shared Memory Region */30373038struct acpi_ras2_shmem {3039u32 signature;3040u16 command;3041u16 status;3042u16 version;3043u8 features[16];3044u8 set_caps[16];3045u16 num_param_blks;3046u32 set_caps_status;3047};30483049/* RAS2 Parameter Block Structure for PATROL_SCRUB */30503051struct acpi_ras2_parameter_block {3052u16 type;3053u16 version;3054u16 length;3055};30563057/* RAS2 Parameter Block Structure for PATROL_SCRUB */30583059struct acpi_ras2_patrol_scrub_param {3060struct acpi_ras2_parameter_block header;3061u16 command;3062u64 req_addr_range[2];3063u64 actl_addr_range[2];3064u32 flags;3065u32 scrub_params_out;3066u32 scrub_params_in;3067};30683069/* Masks for Flags field above */30703071#define ACPI_RAS2_SCRUBBER_RUNNING 130723073/* RAS2 Parameter Block Structure for LA2PA_TRANSLATION */30743075struct acpi_ras2_la2pa_translation_parameter {3076struct acpi_ras2_parameter_block header;3077u16 addr_translation_command;3078u64 sub_inst_id;3079u64 logical_address;3080u64 physical_address;3081u32 status;3082};30833084/* Channel Commands */30853086enum acpi_ras2_commands {3087ACPI_RAS2_EXECUTE_RAS2_COMMAND = 13088};30893090/* Platform RAS2 Features */30913092enum acpi_ras2_features {3093ACPI_RAS2_PATROL_SCRUB_SUPPORTED = 0,3094ACPI_RAS2_LA2PA_TRANSLATION = 13095};30963097/* RAS2 Patrol Scrub Commands */30983099enum acpi_ras2_patrol_scrub_commands {3100ACPI_RAS2_GET_PATROL_PARAMETERS = 1,3101ACPI_RAS2_START_PATROL_SCRUBBER = 2,3102ACPI_RAS2_STOP_PATROL_SCRUBBER = 33103};31043105/* RAS2 LA2PA Translation Commands */31063107enum acpi_ras2_la2_pa_translation_commands {3108ACPI_RAS2_GET_LA2PA_TRANSLATION = 1,3109};31103111/* RAS2 LA2PA Translation Status values */31123113enum acpi_ras2_la2_pa_translation_status {3114ACPI_RAS2_LA2PA_TRANSLATION_SUCCESS = 0,3115ACPI_RAS2_LA2PA_TRANSLATION_FAIL = 1,3116};31173118/* Channel Command flags */31193120#define ACPI_RAS2_GENERATE_SCI (1<<15)31213122/* Status values */31233124enum acpi_ras2_status {3125ACPI_RAS2_SUCCESS = 0,3126ACPI_RAS2_NOT_VALID = 1,3127ACPI_RAS2_NOT_SUPPORTED = 2,3128ACPI_RAS2_BUSY = 3,3129ACPI_RAS2_FAILED = 4,3130ACPI_RAS2_ABORTED = 5,3131ACPI_RAS2_INVALID_DATA = 63132};31333134/* Status flags */31353136#define ACPI_RAS2_COMMAND_COMPLETE (1)3137#define ACPI_RAS2_SCI_DOORBELL (1<<1)3138#define ACPI_RAS2_ERROR (1<<2)3139#define ACPI_RAS2_STATUS (0x1F<<3)31403141/*******************************************************************************3142*3143* RGRT - Regulatory Graphics Resource Table3144* Version 13145*3146* Conforms to "ACPI RGRT" available at:3147* https://microsoft.github.io/mu/dyn/mu_plus/ms_core_pkg/acpi_RGRT/feature_acpi_rgrt/3148*3149******************************************************************************/31503151struct acpi_table_rgrt {3152struct acpi_table_header header; /* Common ACPI table header */3153u16 version;3154u8 image_type;3155u8 reserved;3156u8 image[];3157};31583159/* image_type values */31603161enum acpi_rgrt_image_type {3162ACPI_RGRT_TYPE_RESERVED0 = 0,3163ACPI_RGRT_IMAGE_TYPE_PNG = 1,3164ACPI_RGRT_TYPE_RESERVED = 2 /* 2 and greater are reserved */3165};31663167/*******************************************************************************3168*3169* RHCT - RISC-V Hart Capabilities Table3170* Version 13171*3172******************************************************************************/31733174struct acpi_table_rhct {3175struct acpi_table_header header; /* Common ACPI table header */3176u32 flags; /* RHCT flags */3177u64 time_base_freq;3178u32 node_count;3179u32 node_offset;3180};31813182/* RHCT Flags */31833184#define ACPI_RHCT_TIMER_CANNOT_WAKEUP_CPU (1)3185/*3186* RHCT subtables3187*/3188struct acpi_rhct_node_header {3189u16 type;3190u16 length;3191u16 revision;3192};31933194/* Values for RHCT subtable Type above */31953196enum acpi_rhct_node_type {3197ACPI_RHCT_NODE_TYPE_ISA_STRING = 0x0000,3198ACPI_RHCT_NODE_TYPE_CMO = 0x0001,3199ACPI_RHCT_NODE_TYPE_MMU = 0x0002,3200ACPI_RHCT_NODE_TYPE_RESERVED = 0x0003,3201ACPI_RHCT_NODE_TYPE_HART_INFO = 0xFFFF,3202};32033204/*3205* RHCT node specific subtables3206*/32073208/* ISA string node structure */3209struct acpi_rhct_isa_string {3210u16 isa_length;3211char isa[];3212};32133214struct acpi_rhct_cmo_node {3215u8 reserved; /* Must be zero */3216u8 cbom_size; /* CBOM size in powerof 2 */3217u8 cbop_size; /* CBOP size in powerof 2 */3218u8 cboz_size; /* CBOZ size in powerof 2 */3219};32203221struct acpi_rhct_mmu_node {3222u8 reserved; /* Must be zero */3223u8 mmu_type; /* Virtual Address Scheme */3224};32253226enum acpi_rhct_mmu_type {3227ACPI_RHCT_MMU_TYPE_SV39 = 0,3228ACPI_RHCT_MMU_TYPE_SV48 = 1,3229ACPI_RHCT_MMU_TYPE_SV57 = 23230};32313232/* Hart Info node structure */3233struct acpi_rhct_hart_info {3234u16 num_offsets;3235u32 uid; /* ACPI processor UID */3236};32373238/*******************************************************************************3239*3240* RIMT - RISC-V IO Remapping Table3241*3242* https://github.com/riscv-non-isa/riscv-acpi-rimt3243*3244******************************************************************************/32453246struct acpi_table_rimt {3247struct acpi_table_header header; /* Common ACPI table header */3248u32 num_nodes; /* Number of RIMT Nodes */3249u32 node_offset; /* Offset to RIMT Node Array */3250u32 reserved;3251};32523253struct acpi_rimt_node {3254u8 type;3255u8 revision;3256u16 length;3257u16 reserved;3258u16 id;3259char node_data[];3260};32613262enum acpi_rimt_node_type {3263ACPI_RIMT_NODE_TYPE_IOMMU = 0x0,3264ACPI_RIMT_NODE_TYPE_PCIE_ROOT_COMPLEX = 0x1,3265ACPI_RIMT_NODE_TYPE_PLAT_DEVICE = 0x2,3266};32673268struct acpi_rimt_iommu {3269u8 hardware_id[8]; /* Hardware ID */3270u64 base_address; /* Base Address */3271u32 flags; /* Flags */3272u32 proximity_domain; /* Proximity Domain */3273u16 pcie_segment_number; /* PCIe Segment number */3274u16 pcie_bdf; /* PCIe B/D/F */3275u16 num_interrupt_wires; /* Number of interrupt wires */3276u16 interrupt_wire_offset; /* Interrupt wire array offset */3277u64 interrupt_wire[]; /* Interrupt wire array */3278};32793280/* IOMMU Node Flags */3281#define ACPI_RIMT_IOMMU_FLAGS_PCIE (1)3282#define ACPI_RIMT_IOMMU_FLAGS_PXM_VALID (1 << 1)32833284/* Interrupt Wire Structure */3285struct acpi_rimt_iommu_wire_gsi {3286u32 irq_num; /* Interrupt Number */3287u32 flags; /* Flags */3288};32893290/* Interrupt Wire Flags */3291#define ACPI_RIMT_GSI_LEVEL_TRIGGERRED (1)3292#define ACPI_RIMT_GSI_ACTIVE_HIGH (1 << 1)32933294struct acpi_rimt_id_mapping {3295u32 source_id_base; /* Source ID Base */3296u32 num_ids; /* Number of IDs */3297u32 dest_id_base; /* Destination Device ID Base */3298u32 dest_offset; /* Destination IOMMU Offset */3299u32 flags; /* Flags */3300};33013302struct acpi_rimt_pcie_rc {3303u32 flags; /* Flags */3304u16 reserved; /* Reserved */3305u16 pcie_segment_number; /* PCIe Segment number */3306u16 id_mapping_offset; /* ID mapping array offset */3307u16 num_id_mappings; /* Number of ID mappings */3308};33093310/* PCIe Root Complex Node Flags */3311#define ACPI_RIMT_PCIE_ATS_SUPPORTED (1)3312#define ACPI_RIMT_PCIE_PRI_SUPPORTED (1 << 1)33133314struct acpi_rimt_platform_device {3315u16 id_mapping_offset; /* ID Mapping array offset */3316u16 num_id_mappings; /* Number of ID mappings */3317char device_name[]; /* Device Object Name */3318};33193320/*******************************************************************************3321*3322* SBST - Smart Battery Specification Table3323* Version 13324*3325******************************************************************************/33263327struct acpi_table_sbst {3328struct acpi_table_header header; /* Common ACPI table header */3329u32 warning_level;3330u32 low_level;3331u32 critical_level;3332};33333334/*******************************************************************************3335*3336* SDEI - Software Delegated Exception Interface Descriptor Table3337*3338* Conforms to "Software Delegated Exception Interface (SDEI)" ARM DEN0054A,3339* May 8th, 2017. Copyright 2017 ARM Ltd.3340*3341******************************************************************************/33423343struct acpi_table_sdei {3344struct acpi_table_header header; /* Common ACPI table header */3345};33463347/*******************************************************************************3348*3349* SDEV - Secure Devices Table (ACPI 6.2)3350* Version 13351*3352******************************************************************************/33533354struct acpi_table_sdev {3355struct acpi_table_header header; /* Common ACPI table header */3356};33573358struct acpi_sdev_header {3359u8 type;3360u8 flags;3361u16 length;3362};33633364/* Values for subtable type above */33653366enum acpi_sdev_type {3367ACPI_SDEV_TYPE_NAMESPACE_DEVICE = 0,3368ACPI_SDEV_TYPE_PCIE_ENDPOINT_DEVICE = 1,3369ACPI_SDEV_TYPE_RESERVED = 2 /* 2 and greater are reserved */3370};33713372/* Values for flags above */33733374#define ACPI_SDEV_HANDOFF_TO_UNSECURE_OS (1)3375#define ACPI_SDEV_SECURE_COMPONENTS_PRESENT (1<<1)33763377/*3378* SDEV subtables3379*/33803381/* 0: Namespace Device Based Secure Device Structure */33823383struct acpi_sdev_namespace {3384struct acpi_sdev_header header;3385u16 device_id_offset;3386u16 device_id_length;3387u16 vendor_data_offset;3388u16 vendor_data_length;3389};33903391struct acpi_sdev_secure_component {3392u16 secure_component_offset;3393u16 secure_component_length;3394};33953396/*3397* SDEV sub-subtables ("Components") for above3398*/3399struct acpi_sdev_component {3400struct acpi_sdev_header header;3401};34023403/* Values for sub-subtable type above */34043405enum acpi_sac_type {3406ACPI_SDEV_TYPE_ID_COMPONENT = 0,3407ACPI_SDEV_TYPE_MEM_COMPONENT = 13408};34093410struct acpi_sdev_id_component {3411struct acpi_sdev_header header;3412u16 hardware_id_offset;3413u16 hardware_id_length;3414u16 subsystem_id_offset;3415u16 subsystem_id_length;3416u16 hardware_revision;3417u8 hardware_rev_present;3418u8 class_code_present;3419u8 pci_base_class;3420u8 pci_sub_class;3421u8 pci_programming_xface;3422};34233424struct acpi_sdev_mem_component {3425struct acpi_sdev_header header;3426u32 reserved;3427u64 memory_base_address;3428u64 memory_length;3429};34303431/* 1: PCIe Endpoint Device Based Device Structure */34323433struct acpi_sdev_pcie {3434struct acpi_sdev_header header;3435u16 segment;3436u16 start_bus;3437u16 path_offset;3438u16 path_length;3439u16 vendor_data_offset;3440u16 vendor_data_length;3441};34423443/* 1a: PCIe Endpoint path entry */34443445struct acpi_sdev_pcie_path {3446u8 device;3447u8 function;3448};34493450/*******************************************************************************3451*3452* SVKL - Storage Volume Key Location Table (ACPI 6.4)3453* From: "Guest-Host-Communication Interface (GHCI) for Intel3454* Trust Domain Extensions (Intel TDX)".3455* Version 13456*3457******************************************************************************/34583459struct acpi_table_svkl {3460struct acpi_table_header header; /* Common ACPI table header */3461u32 count;3462};34633464struct acpi_svkl_key {3465u16 type;3466u16 format;3467u32 size;3468u64 address;3469};34703471enum acpi_svkl_type {3472ACPI_SVKL_TYPE_MAIN_STORAGE = 0,3473ACPI_SVKL_TYPE_RESERVED = 1 /* 1 and greater are reserved */3474};34753476enum acpi_svkl_format {3477ACPI_SVKL_FORMAT_RAW_BINARY = 0,3478ACPI_SVKL_FORMAT_RESERVED = 1 /* 1 and greater are reserved */3479};34803481/*******************************************************************************3482* SWFT - SoundWire File Table3483*3484* Conforms to "Discovery and Configuration (DisCo) Specification for SoundWire"3485* Version 2.1, 2 October 20233486*3487******************************************************************************/3488struct acpi_sw_file {3489u16 vendor_id;3490u32 file_id;3491u16 file_version;3492u32 file_length;3493u8 data[];3494};34953496struct acpi_table_swft {3497struct acpi_table_header header;3498struct acpi_sw_file files[];3499};35003501/*******************************************************************************3502*3503* TDEL - TD-Event Log3504* From: "Guest-Host-Communication Interface (GHCI) for Intel3505* Trust Domain Extensions (Intel TDX)".3506* September 20203507*3508******************************************************************************/35093510struct acpi_table_tdel {3511struct acpi_table_header header; /* Common ACPI table header */3512u32 reserved;3513u64 log_area_minimum_length;3514u64 log_area_start_address;3515};35163517/* Reset to default packing */35183519#pragma pack()35203521#endif /* __ACTBL2_H__ */352235233524