/* 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_TDEL "TDEL" /* TD Event Log Table */6061/*62* All tables must be byte-packed to match the ACPI specification, since63* the tables are provided by the system BIOS.64*/65#pragma pack(1)6667/*68* Note: C bitfields are not used for this reason:69*70* "Bitfields are great and easy to read, but unfortunately the C language71* does not specify the layout of bitfields in memory, which means they are72* essentially useless for dealing with packed data in on-disk formats or73* binary wire protocols." (Or ACPI tables and buffers.) "If you ask me,74* this decision was a design error in C. Ritchie could have picked an order75* and stuck with it." Norman Ramsey.76* See http://stackoverflow.com/a/1053662/4166177*/7879/*******************************************************************************80*81* AEST - Arm Error Source Table82*83* Conforms to: ACPI for the Armv8 RAS Extensions 1.1(Sep 2020) and84* 2.0(May 2023) Platform Design Document.85*86******************************************************************************/8788struct acpi_table_aest {89struct acpi_table_header header;90};9192/* Common Subtable header - one per Node Structure (Subtable) */9394struct acpi_aest_hdr {95u8 type;96u16 length;97u8 reserved;98u32 node_specific_offset;99u32 node_interface_offset;100u32 node_interrupt_offset;101u32 node_interrupt_count;102u64 timestamp_rate;103u64 reserved1;104u64 error_injection_rate;105};106107/* Values for Type above */108109#define ACPI_AEST_PROCESSOR_ERROR_NODE 0110#define ACPI_AEST_MEMORY_ERROR_NODE 1111#define ACPI_AEST_SMMU_ERROR_NODE 2112#define ACPI_AEST_VENDOR_ERROR_NODE 3113#define ACPI_AEST_GIC_ERROR_NODE 4114#define ACPI_AEST_PCIE_ERROR_NODE 5115#define ACPI_AEST_PROXY_ERROR_NODE 6116#define ACPI_AEST_NODE_TYPE_RESERVED 7 /* 7 and above are reserved */117118/*119* AEST subtables (Error nodes)120*/121122/* 0: Processor Error */123124typedef struct acpi_aest_processor {125u32 processor_id;126u8 resource_type;127u8 reserved;128u8 flags;129u8 revision;130u64 processor_affinity;131132} acpi_aest_processor;133134/* Values for resource_type above, related structs below */135136#define ACPI_AEST_CACHE_RESOURCE 0137#define ACPI_AEST_TLB_RESOURCE 1138#define ACPI_AEST_GENERIC_RESOURCE 2139#define ACPI_AEST_RESOURCE_RESERVED 3 /* 3 and above are reserved */140141/* 0R: Processor Cache Resource Substructure */142143typedef struct acpi_aest_processor_cache {144u32 cache_reference;145u32 reserved;146147} acpi_aest_processor_cache;148149/* Values for cache_type above */150151#define ACPI_AEST_CACHE_DATA 0152#define ACPI_AEST_CACHE_INSTRUCTION 1153#define ACPI_AEST_CACHE_UNIFIED 2154#define ACPI_AEST_CACHE_RESERVED 3 /* 3 and above are reserved */155156/* 1R: Processor TLB Resource Substructure */157158typedef struct acpi_aest_processor_tlb {159u32 tlb_level;160u32 reserved;161162} acpi_aest_processor_tlb;163164/* 2R: Processor Generic Resource Substructure */165166typedef struct acpi_aest_processor_generic {167u32 resource;168169} acpi_aest_processor_generic;170171/* 1: Memory Error */172173typedef struct acpi_aest_memory {174u32 srat_proximity_domain;175176} acpi_aest_memory;177178/* 2: Smmu Error */179180typedef struct acpi_aest_smmu {181u32 iort_node_reference;182u32 subcomponent_reference;183184} acpi_aest_smmu;185186/* 3: Vendor Defined */187188typedef struct acpi_aest_vendor {189u32 acpi_hid;190u32 acpi_uid;191u8 vendor_specific_data[16];192193} acpi_aest_vendor;194195struct acpi_aest_vendor_v2 {196char acpi_hid[8];197u32 acpi_uid;198u8 vendor_specific_data[16];199};200201/* 4: Gic Error */202203typedef struct acpi_aest_gic {204u32 interface_type;205u32 instance_id;206207} acpi_aest_gic;208209/* Values for interface_type above */210211#define ACPI_AEST_GIC_CPU 0212#define ACPI_AEST_GIC_DISTRIBUTOR 1213#define ACPI_AEST_GIC_REDISTRIBUTOR 2214#define ACPI_AEST_GIC_ITS 3215#define ACPI_AEST_GIC_RESERVED 4 /* 4 and above are reserved */216217/* 5: PCIe Error */218219struct acpi_aest_pcie {220u32 iort_node_reference;221};222223/* 6: Proxy Error */224225struct acpi_aest_proxy {226u64 node_address;227};228229/* Node Interface Structure */230231typedef struct acpi_aest_node_interface {232u8 type;233u8 reserved[3];234u32 flags;235u64 address;236u32 error_record_index;237u32 error_record_count;238u64 error_record_implemented;239u64 error_status_reporting;240u64 addressing_mode;241242} acpi_aest_node_interface;243244/* Node Interface Structure V2 */245246struct acpi_aest_node_interface_header {247u8 type;248u8 group_format;249u8 reserved[2];250u32 flags;251u64 address;252u32 error_record_index;253u32 error_record_count;254};255256#define ACPI_AEST_NODE_GROUP_FORMAT_4K 0257#define ACPI_AEST_NODE_GROUP_FORMAT_16K 1258#define ACPI_AEST_NODE_GROUP_FORMAT_64K 2259260struct acpi_aest_node_interface_common {261u32 error_node_device;262u32 processor_affinity;263u64 error_group_register_base;264u64 fault_inject_register_base;265u64 interrupt_config_register_base;266};267268struct acpi_aest_node_interface_4k {269u64 error_record_implemented;270u64 error_status_reporting;271u64 addressing_mode;272struct acpi_aest_node_interface_common common;273};274275struct acpi_aest_node_interface_16k {276u64 error_record_implemented[4];277u64 error_status_reporting[4];278u64 addressing_mode[4];279struct acpi_aest_node_interface_common common;280};281282struct acpi_aest_node_interface_64k {283u64 error_record_implemented[14];284u64 error_status_reporting[14];285u64 addressing_mode[14];286struct acpi_aest_node_interface_common common;287};288289/* Values for Type field above */290291#define ACPI_AEST_NODE_SYSTEM_REGISTER 0292#define ACPI_AEST_NODE_MEMORY_MAPPED 1293#define ACPI_AEST_NODE_SINGLE_RECORD_MEMORY_MAPPED 2294#define ACPI_AEST_XFACE_RESERVED 3 /* 2 and above are reserved */295296/* Node Interrupt Structure */297298typedef struct acpi_aest_node_interrupt {299u8 type;300u8 reserved[2];301u8 flags;302u32 gsiv;303u8 iort_id;304u8 reserved1[3];305306} acpi_aest_node_interrupt;307308/* Node Interrupt Structure V2 */309310struct acpi_aest_node_interrupt_v2 {311u8 type;312u8 reserved[2];313u8 flags;314u32 gsiv;315u8 reserved1[4];316};317318/* Values for Type field above */319320#define ACPI_AEST_NODE_FAULT_HANDLING 0321#define ACPI_AEST_NODE_ERROR_RECOVERY 1322#define ACPI_AEST_XRUPT_RESERVED 2 /* 2 and above are reserved */323324/*******************************************************************************325* AGDI - Arm Generic Diagnostic Dump and Reset Device Interface326*327* Conforms to "ACPI for Arm Components 1.1, Platform Design Document"328* ARM DEN0093 v1.1329*330******************************************************************************/331struct acpi_table_agdi {332struct acpi_table_header header; /* Common ACPI table header */333u8 flags;334u8 reserved[3];335u32 sdei_event;336u32 gsiv;337};338339/* Mask for Flags field above */340341#define ACPI_AGDI_SIGNALING_MODE (1)342343/*******************************************************************************344*345* APMT - ARM Performance Monitoring Unit Table346*347* Conforms to:348* ARM Performance Monitoring Unit Architecture 1.0 Platform Design Document349* ARM DEN0117 v1.0 November 25, 2021350*351******************************************************************************/352353struct acpi_table_apmt {354struct acpi_table_header header; /* Common ACPI table header */355};356357#define ACPI_APMT_NODE_ID_LENGTH 4358359/*360* APMT subtables361*/362struct acpi_apmt_node {363u16 length;364u8 flags;365u8 type;366u32 id;367u64 inst_primary;368u32 inst_secondary;369u64 base_address0;370u64 base_address1;371u32 ovflw_irq;372u32 reserved;373u32 ovflw_irq_flags;374u32 proc_affinity;375u32 impl_id;376};377378/* Masks for Flags field above */379380#define ACPI_APMT_FLAGS_DUAL_PAGE (1<<0)381#define ACPI_APMT_FLAGS_AFFINITY (1<<1)382#define ACPI_APMT_FLAGS_ATOMIC (1<<2)383384/* Values for Flags dual page field above */385386#define ACPI_APMT_FLAGS_DUAL_PAGE_NSUPP (0<<0)387#define ACPI_APMT_FLAGS_DUAL_PAGE_SUPP (1<<0)388389/* Values for Flags processor affinity field above */390#define ACPI_APMT_FLAGS_AFFINITY_PROC (0<<1)391#define ACPI_APMT_FLAGS_AFFINITY_PROC_CONTAINER (1<<1)392393/* Values for Flags 64-bit atomic field above */394#define ACPI_APMT_FLAGS_ATOMIC_NSUPP (0<<2)395#define ACPI_APMT_FLAGS_ATOMIC_SUPP (1<<2)396397/* Values for Type field above */398399enum acpi_apmt_node_type {400ACPI_APMT_NODE_TYPE_MC = 0x00,401ACPI_APMT_NODE_TYPE_SMMU = 0x01,402ACPI_APMT_NODE_TYPE_PCIE_ROOT = 0x02,403ACPI_APMT_NODE_TYPE_ACPI = 0x03,404ACPI_APMT_NODE_TYPE_CACHE = 0x04,405ACPI_APMT_NODE_TYPE_COUNT406};407408/* Masks for ovflw_irq_flags field above */409410#define ACPI_APMT_OVFLW_IRQ_FLAGS_MODE (1<<0)411#define ACPI_APMT_OVFLW_IRQ_FLAGS_TYPE (1<<1)412413/* Values for ovflw_irq_flags mode field above */414415#define ACPI_APMT_OVFLW_IRQ_FLAGS_MODE_LEVEL (0<<0)416#define ACPI_APMT_OVFLW_IRQ_FLAGS_MODE_EDGE (1<<0)417418/* Values for ovflw_irq_flags type field above */419420#define ACPI_APMT_OVFLW_IRQ_FLAGS_TYPE_WIRED (0<<1)421422/*******************************************************************************423*424* BDAT - BIOS Data ACPI Table425*426* Conforms to "BIOS Data ACPI Table", Interface Specification v4.0 Draft 5427* Nov 2020428*429******************************************************************************/430431struct acpi_table_bdat {432struct acpi_table_header header;433struct acpi_generic_address gas;434};435436/*******************************************************************************437*438* CCEL - CC-Event Log439* From: "Guest-Host-Communication Interface (GHCI) for Intel440* Trust Domain Extensions (Intel TDX)". Feb 2022441*442******************************************************************************/443444struct acpi_table_ccel {445struct acpi_table_header header; /* Common ACPI table header */446u8 CCtype;447u8 Ccsub_type;448u16 reserved;449u64 log_area_minimum_length;450u64 log_area_start_address;451};452453/*******************************************************************************454*455* ERDT - Enhanced Resource Director Technology (ERDT) table456*457* Conforms to "Intel Resource Director Technology Architecture Specification"458* Version 1.1, January 2025459*460******************************************************************************/461462struct acpi_table_erdt {463struct acpi_table_header header; /* Common ACPI table header */464u32 max_clos; /* Maximum classes of service */465u8 reserved[24];466u8 erdt_substructures[];467};468469/* Values for subtable type in struct acpi_subtbl_hdr_16 */470471enum acpi_erdt_type {472ACPI_ERDT_TYPE_RMDD = 0,473ACPI_ERDT_TYPE_CACD = 1,474ACPI_ERDT_TYPE_DACD = 2,475ACPI_ERDT_TYPE_CMRC = 3,476ACPI_ERDT_TYPE_MMRC = 4,477ACPI_ERDT_TYPE_MARC = 5,478ACPI_ERDT_TYPE_CARC = 6,479ACPI_ERDT_TYPE_CMRD = 7,480ACPI_ERDT_TYPE_IBRD = 8,481ACPI_ERDT_TYPE_IBAD = 9,482ACPI_ERDT_TYPE_CARD = 10,483ACPI_ERDT_TYPE_RESERVED = 11 /* 11 and above are reserved */484};485486/*487* ERDT Subtables, correspond to Type in struct acpi_subtbl_hdr_16488*/489490/* 0: RMDD - Resource Management Domain Description */491492struct acpi_erdt_rmdd {493struct acpi_subtbl_hdr_16 header;494u16 flags;495u16 IO_l3_slices; /* Number of slices in IO cache */496u8 IO_l3_sets; /* Number of sets in IO cache */497u8 IO_l3_ways; /* Number of ways in IO cache */498u64 reserved;499u16 domain_id; /* Unique domain ID */500u32 max_rmid; /* Maximun RMID supported */501u64 creg_base; /* Control Register Base Address */502u16 creg_size; /* Control Register Size (4K pages) */503u8 rmdd_structs[];504};505506/* 1: CACD - CPU Agent Collection Description */507508struct acpi_erdt_cacd {509struct acpi_subtbl_hdr_16 header;510u16 reserved;511u16 domain_id; /* Unique domain ID */512u32 X2APICIDS[];513};514515/* 2: DACD - Device Agent Collection Description */516517struct acpi_erdt_dacd {518struct acpi_subtbl_hdr_16 header;519u16 reserved;520u16 domain_id; /* Unique domain ID */521u8 dev_paths[];522};523524struct acpi_erdt_dacd_dev_paths {525struct acpi_subtable_header header;526u16 segment;527u8 reserved;528u8 start_bus;529u8 path[];530};531532/* 3: CMRC - Cache Monitoring Registers for CPU Agents */533534struct acpi_erdt_cmrc {535struct acpi_subtbl_hdr_16 header;536u32 reserved1;537u32 flags;538u8 index_fn;539u8 reserved2[11];540u64 cmt_reg_base;541u32 cmt_reg_size;542u16 clump_size;543u16 clump_stride;544u64 up_scale;545};546547/* 4: MMRC - Memory-bandwidth Monitoring Registers for CPU Agents */548549struct acpi_erdt_mmrc {550struct acpi_subtbl_hdr_16 header;551u32 reserved1;552u32 flags;553u8 index_fn;554u8 reserved2[11];555u64 reg_base;556u32 reg_size;557u8 counter_width;558u64 up_scale;559u8 reserved3[7];560u32 corr_factor_list_len;561u32 corr_factor_list[];562};563564/* 5: MARC - Memory-bandwidth Allocation Registers for CPU Agents */565566struct acpi_erdt_marc {567struct acpi_subtbl_hdr_16 header;568u16 reserved1;569u16 flags;570u8 index_fn;571u8 reserved2[7];572u64 reg_base_opt;573u64 reg_base_min;574u64 reg_base_max;575u32 mba_reg_size;576u32 mba_ctrl_range;577};578579/* 6: CARC - Cache Allocation Registers for CPU Agents */580581struct acpi_erdt_carc {582struct acpi_subtbl_hdr_16 header;583};584585/* 7: CMRD - Cache Monitoring Registers for Device Agents */586587struct acpi_erdt_cmrd {588struct acpi_subtbl_hdr_16 header;589u32 reserved1;590u32 flags;591u8 index_fn;592u8 reserved2[11];593u64 reg_base;594u32 reg_size;595u16 cmt_reg_off;596u16 cmt_clump_size;597u64 up_scale;598};599600/* 8: IBRD - Cache Monitoring Registers for Device Agents */601602struct acpi_erdt_ibrd {603struct acpi_subtbl_hdr_16 header;604u32 reserved1;605u32 flags;606u8 index_fn;607u8 reserved2[11];608u64 reg_base;609u32 reg_size;610u16 total_bw_offset;611u16 Iomiss_bw_offset;612u16 total_bw_clump;613u16 Iomiss_bw_clump;614u8 reserved3[7];615u8 counter_width;616u64 up_scale;617u32 corr_factor_list_len;618u32 corr_factor_list[];619};620621/* 9: IBAD - IO bandwidth Allocation Registers for device agents */622623struct acpi_erdt_ibad {624struct acpi_subtbl_hdr_16 header;625};626627/* 10: CARD - IO bandwidth Allocation Registers for Device Agents */628629struct acpi_erdt_card {630struct acpi_subtbl_hdr_16 header;631u32 reserved1;632u32 flags;633u32 contention_mask;634u8 index_fn;635u8 reserved2[7];636u64 reg_base;637u32 reg_size;638u16 cat_reg_offset;639u16 cat_reg_block_size;640};641642/*******************************************************************************643*644* IORT - IO Remapping Table645*646* Conforms to "IO Remapping Table System Software on ARM Platforms",647* Document number: ARM DEN 0049E.f, Apr 2024648*649******************************************************************************/650651struct acpi_table_iort {652struct acpi_table_header header;653u32 node_count;654u32 node_offset;655u32 reserved;656};657658/*659* IORT subtables660*/661struct acpi_iort_node {662u8 type;663u16 length;664u8 revision;665u32 identifier;666u32 mapping_count;667u32 mapping_offset;668char node_data[];669};670671/* Values for subtable Type above */672673enum acpi_iort_node_type {674ACPI_IORT_NODE_ITS_GROUP = 0x00,675ACPI_IORT_NODE_NAMED_COMPONENT = 0x01,676ACPI_IORT_NODE_PCI_ROOT_COMPLEX = 0x02,677ACPI_IORT_NODE_SMMU = 0x03,678ACPI_IORT_NODE_SMMU_V3 = 0x04,679ACPI_IORT_NODE_PMCG = 0x05,680ACPI_IORT_NODE_RMR = 0x06,681};682683struct acpi_iort_id_mapping {684u32 input_base; /* Lowest value in input range */685u32 id_count; /* Number of IDs */686u32 output_base; /* Lowest value in output range */687u32 output_reference; /* A reference to the output node */688u32 flags;689};690691/* Masks for Flags field above for IORT subtable */692693#define ACPI_IORT_ID_SINGLE_MAPPING (1)694695struct acpi_iort_memory_access {696u32 cache_coherency;697u8 hints;698u16 reserved;699u8 memory_flags;700};701702/* Values for cache_coherency field above */703704#define ACPI_IORT_NODE_COHERENT 0x00000001 /* The device node is fully coherent */705#define ACPI_IORT_NODE_NOT_COHERENT 0x00000000 /* The device node is not coherent */706707/* Masks for Hints field above */708709#define ACPI_IORT_HT_TRANSIENT (1)710#define ACPI_IORT_HT_WRITE (1<<1)711#define ACPI_IORT_HT_READ (1<<2)712#define ACPI_IORT_HT_OVERRIDE (1<<3)713714/* Masks for memory_flags field above */715716#define ACPI_IORT_MF_COHERENCY (1)717#define ACPI_IORT_MF_ATTRIBUTES (1<<1)718#define ACPI_IORT_MF_CANWBS (1<<2)719720/*721* IORT node specific subtables722*/723struct acpi_iort_its_group {724u32 its_count;725u32 identifiers[]; /* GIC ITS identifier array */726};727728struct acpi_iort_named_component {729u32 node_flags;730u64 memory_properties; /* Memory access properties */731u8 memory_address_limit; /* Memory address size limit */732char device_name[]; /* Path of namespace object */733};734735/* Masks for Flags field above */736737#define ACPI_IORT_NC_STALL_SUPPORTED (1)738#define ACPI_IORT_NC_PASID_BITS (31<<1)739740struct acpi_iort_root_complex {741u64 memory_properties; /* Memory access properties */742u32 ats_attribute;743u32 pci_segment_number;744u8 memory_address_limit; /* Memory address size limit */745u16 pasid_capabilities; /* PASID Capabilities */746u8 reserved[]; /* Reserved, must be zero */747};748749/* Masks for ats_attribute field above */750751#define ACPI_IORT_ATS_SUPPORTED (1) /* The root complex ATS support */752#define ACPI_IORT_PRI_SUPPORTED (1<<1) /* The root complex PRI support */753#define ACPI_IORT_PASID_FWD_SUPPORTED (1<<2) /* The root complex PASID forward support */754755/* Masks for pasid_capabilities field above */756#define ACPI_IORT_PASID_MAX_WIDTH (0x1F) /* Bits 0-4 */757758struct acpi_iort_smmu {759u64 base_address; /* SMMU base address */760u64 span; /* Length of memory range */761u32 model;762u32 flags;763u32 global_interrupt_offset;764u32 context_interrupt_count;765u32 context_interrupt_offset;766u32 pmu_interrupt_count;767u32 pmu_interrupt_offset;768u64 interrupts[]; /* Interrupt array */769};770771/* Values for Model field above */772773#define ACPI_IORT_SMMU_V1 0x00000000 /* Generic SMMUv1 */774#define ACPI_IORT_SMMU_V2 0x00000001 /* Generic SMMUv2 */775#define ACPI_IORT_SMMU_CORELINK_MMU400 0x00000002 /* ARM Corelink MMU-400 */776#define ACPI_IORT_SMMU_CORELINK_MMU500 0x00000003 /* ARM Corelink MMU-500 */777#define ACPI_IORT_SMMU_CORELINK_MMU401 0x00000004 /* ARM Corelink MMU-401 */778#define ACPI_IORT_SMMU_CAVIUM_THUNDERX 0x00000005 /* Cavium thunder_x SMMUv2 */779780/* Masks for Flags field above */781782#define ACPI_IORT_SMMU_DVM_SUPPORTED (1)783#define ACPI_IORT_SMMU_COHERENT_WALK (1<<1)784785/* Global interrupt format */786787struct acpi_iort_smmu_gsi {788u32 nsg_irpt;789u32 nsg_irpt_flags;790u32 nsg_cfg_irpt;791u32 nsg_cfg_irpt_flags;792};793794struct acpi_iort_smmu_v3 {795u64 base_address; /* SMMUv3 base address */796u32 flags;797u32 reserved;798u64 vatos_address;799u32 model;800u32 event_gsiv;801u32 pri_gsiv;802u32 gerr_gsiv;803u32 sync_gsiv;804u32 pxm;805u32 id_mapping_index;806};807808/* Values for Model field above */809810#define ACPI_IORT_SMMU_V3_GENERIC 0x00000000 /* Generic SMMUv3 */811#define ACPI_IORT_SMMU_V3_HISILICON_HI161X 0x00000001 /* hi_silicon Hi161x SMMUv3 */812#define ACPI_IORT_SMMU_V3_CAVIUM_CN99XX 0x00000002 /* Cavium CN99xx SMMUv3 */813814/* Masks for Flags field above */815816#define ACPI_IORT_SMMU_V3_COHACC_OVERRIDE (1)817#define ACPI_IORT_SMMU_V3_HTTU_OVERRIDE (3<<1)818#define ACPI_IORT_SMMU_V3_PXM_VALID (1<<3)819#define ACPI_IORT_SMMU_V3_DEVICEID_VALID (1<<4)820821struct acpi_iort_pmcg {822u64 page0_base_address;823u32 overflow_gsiv;824u32 node_reference;825u64 page1_base_address;826};827828struct acpi_iort_rmr {829u32 flags;830u32 rmr_count;831u32 rmr_offset;832};833834/* Masks for Flags field above */835#define ACPI_IORT_RMR_REMAP_PERMITTED (1)836#define ACPI_IORT_RMR_ACCESS_PRIVILEGE (1<<1)837838/*839* Macro to access the Access Attributes in flags field above:840* Access Attributes is encoded in bits 9:2841*/842#define ACPI_IORT_RMR_ACCESS_ATTRIBUTES(flags) (((flags) >> 2) & 0xFF)843844/* Values for above Access Attributes */845846#define ACPI_IORT_RMR_ATTR_DEVICE_NGNRNE 0x00847#define ACPI_IORT_RMR_ATTR_DEVICE_NGNRE 0x01848#define ACPI_IORT_RMR_ATTR_DEVICE_NGRE 0x02849#define ACPI_IORT_RMR_ATTR_DEVICE_GRE 0x03850#define ACPI_IORT_RMR_ATTR_NORMAL_NC 0x04851#define ACPI_IORT_RMR_ATTR_NORMAL_IWB_OWB 0x05852853struct acpi_iort_rmr_desc {854u64 base_address;855u64 length;856u32 reserved;857};858859/*******************************************************************************860*861* IVRS - I/O Virtualization Reporting Structure862* Version 1863*864* Conforms to "AMD I/O Virtualization Technology (IOMMU) Specification",865* Revision 1.26, February 2009.866*867******************************************************************************/868869struct acpi_table_ivrs {870struct acpi_table_header header; /* Common ACPI table header */871u32 info; /* Common virtualization info */872u64 reserved;873};874875/* Values for Info field above */876877#define ACPI_IVRS_PHYSICAL_SIZE 0x00007F00 /* 7 bits, physical address size */878#define ACPI_IVRS_VIRTUAL_SIZE 0x003F8000 /* 7 bits, virtual address size */879#define ACPI_IVRS_ATS_RESERVED 0x00400000 /* ATS address translation range reserved */880881/* IVRS subtable header */882883struct acpi_ivrs_header {884u8 type; /* Subtable type */885u8 flags;886u16 length; /* Subtable length */887u16 device_id; /* ID of IOMMU */888};889890/* Values for subtable Type above */891892enum acpi_ivrs_type {893ACPI_IVRS_TYPE_HARDWARE1 = 0x10,894ACPI_IVRS_TYPE_HARDWARE2 = 0x11,895ACPI_IVRS_TYPE_HARDWARE3 = 0x40,896ACPI_IVRS_TYPE_MEMORY1 = 0x20,897ACPI_IVRS_TYPE_MEMORY2 = 0x21,898ACPI_IVRS_TYPE_MEMORY3 = 0x22899};900901/* Masks for Flags field above for IVHD subtable */902903#define ACPI_IVHD_TT_ENABLE (1)904#define ACPI_IVHD_PASS_PW (1<<1)905#define ACPI_IVHD_RES_PASS_PW (1<<2)906#define ACPI_IVHD_ISOC (1<<3)907#define ACPI_IVHD_IOTLB (1<<4)908909/* Masks for Flags field above for IVMD subtable */910911#define ACPI_IVMD_UNITY (1)912#define ACPI_IVMD_READ (1<<1)913#define ACPI_IVMD_WRITE (1<<2)914#define ACPI_IVMD_EXCLUSION_RANGE (1<<3)915916/*917* IVRS subtables, correspond to Type in struct acpi_ivrs_header918*/919920/* 0x10: I/O Virtualization Hardware Definition Block (IVHD) */921922struct acpi_ivrs_hardware_10 {923struct acpi_ivrs_header header;924u16 capability_offset; /* Offset for IOMMU control fields */925u64 base_address; /* IOMMU control registers */926u16 pci_segment_group;927u16 info; /* MSI number and unit ID */928u32 feature_reporting;929};930931/* 0x11: I/O Virtualization Hardware Definition Block (IVHD) */932933struct acpi_ivrs_hardware_11 {934struct acpi_ivrs_header header;935u16 capability_offset; /* Offset for IOMMU control fields */936u64 base_address; /* IOMMU control registers */937u16 pci_segment_group;938u16 info; /* MSI number and unit ID */939u32 attributes;940u64 efr_register_image;941u64 reserved;942};943944/* Masks for Info field above */945946#define ACPI_IVHD_MSI_NUMBER_MASK 0x001F /* 5 bits, MSI message number */947#define ACPI_IVHD_UNIT_ID_MASK 0x1F00 /* 5 bits, unit_ID */948949/*950* Device Entries for IVHD subtable, appear after struct acpi_ivrs_hardware structure.951* Upper two bits of the Type field are the (encoded) length of the structure.952* Currently, only 4 and 8 byte entries are defined. 16 and 32 byte entries953* are reserved for future use but not defined.954*/955struct acpi_ivrs_de_header {956u8 type;957u16 id;958u8 data_setting;959};960961/* Length of device entry is in the top two bits of Type field above */962963#define ACPI_IVHD_ENTRY_LENGTH 0xC0964965/* Values for device entry Type field above */966967enum acpi_ivrs_device_entry_type {968/* 4-byte device entries, all use struct acpi_ivrs_device4 */969970ACPI_IVRS_TYPE_PAD4 = 0,971ACPI_IVRS_TYPE_ALL = 1,972ACPI_IVRS_TYPE_SELECT = 2,973ACPI_IVRS_TYPE_START = 3,974ACPI_IVRS_TYPE_END = 4,975976/* 8-byte device entries */977978ACPI_IVRS_TYPE_PAD8 = 64,979ACPI_IVRS_TYPE_NOT_USED = 65,980ACPI_IVRS_TYPE_ALIAS_SELECT = 66, /* Uses struct acpi_ivrs_device8a */981ACPI_IVRS_TYPE_ALIAS_START = 67, /* Uses struct acpi_ivrs_device8a */982ACPI_IVRS_TYPE_EXT_SELECT = 70, /* Uses struct acpi_ivrs_device8b */983ACPI_IVRS_TYPE_EXT_START = 71, /* Uses struct acpi_ivrs_device8b */984ACPI_IVRS_TYPE_SPECIAL = 72, /* Uses struct acpi_ivrs_device8c */985986/* Variable-length device entries */987988ACPI_IVRS_TYPE_HID = 240 /* Uses ACPI_IVRS_DEVICE_HID */989};990991/* Values for Data field above */992993#define ACPI_IVHD_INIT_PASS (1)994#define ACPI_IVHD_EINT_PASS (1<<1)995#define ACPI_IVHD_NMI_PASS (1<<2)996#define ACPI_IVHD_SYSTEM_MGMT (3<<4)997#define ACPI_IVHD_LINT0_PASS (1<<6)998#define ACPI_IVHD_LINT1_PASS (1<<7)9991000/* Types 0-4: 4-byte device entry */10011002struct acpi_ivrs_device4 {1003struct acpi_ivrs_de_header header;1004};10051006/* Types 66-67: 8-byte device entry */10071008struct acpi_ivrs_device8a {1009struct acpi_ivrs_de_header header;1010u8 reserved1;1011u16 used_id;1012u8 reserved2;1013};10141015/* Types 70-71: 8-byte device entry */10161017struct acpi_ivrs_device8b {1018struct acpi_ivrs_de_header header;1019u32 extended_data;1020};10211022/* Values for extended_data above */10231024#define ACPI_IVHD_ATS_DISABLED (1<<31)10251026/* Type 72: 8-byte device entry */10271028struct acpi_ivrs_device8c {1029struct acpi_ivrs_de_header header;1030u8 handle;1031u16 used_id;1032u8 variety;1033};10341035/* Values for Variety field above */10361037#define ACPI_IVHD_IOAPIC 11038#define ACPI_IVHD_HPET 210391040/* Type 240: variable-length device entry */10411042struct acpi_ivrs_device_hid {1043struct acpi_ivrs_de_header header;1044u64 acpi_hid;1045u64 acpi_cid;1046u8 uid_type;1047u8 uid_length;1048};10491050/* Values for uid_type above */10511052#define ACPI_IVRS_UID_NOT_PRESENT 01053#define ACPI_IVRS_UID_IS_INTEGER 11054#define ACPI_IVRS_UID_IS_STRING 210551056/* 0x20, 0x21, 0x22: I/O Virtualization Memory Definition Block (IVMD) */10571058struct acpi_ivrs_memory {1059struct acpi_ivrs_header header;1060u16 aux_data;1061u64 reserved;1062u64 start_address;1063u64 memory_length;1064};10651066/*******************************************************************************1067*1068* LPIT - Low Power Idle Table1069*1070* Conforms to "ACPI Low Power Idle Table (LPIT)" July 2014.1071*1072******************************************************************************/10731074struct acpi_table_lpit {1075struct acpi_table_header header; /* Common ACPI table header */1076};10771078/* LPIT subtable header */10791080struct acpi_lpit_header {1081u32 type; /* Subtable type */1082u32 length; /* Subtable length */1083u16 unique_id;1084u16 reserved;1085u32 flags;1086};10871088/* Values for subtable Type above */10891090enum acpi_lpit_type {1091ACPI_LPIT_TYPE_NATIVE_CSTATE = 0x00,1092ACPI_LPIT_TYPE_RESERVED = 0x01 /* 1 and above are reserved */1093};10941095/* Masks for Flags field above */10961097#define ACPI_LPIT_STATE_DISABLED (1)1098#define ACPI_LPIT_NO_COUNTER (1<<1)10991100/*1101* LPIT subtables, correspond to Type in struct acpi_lpit_header1102*/11031104/* 0x00: Native C-state instruction based LPI structure */11051106struct acpi_lpit_native {1107struct acpi_lpit_header header;1108struct acpi_generic_address entry_trigger;1109u32 residency;1110u32 latency;1111struct acpi_generic_address residency_counter;1112u64 counter_frequency;1113};11141115/*******************************************************************************1116*1117* MADT - Multiple APIC Description Table1118* Version 31119*1120******************************************************************************/11211122struct acpi_table_madt {1123struct acpi_table_header header; /* Common ACPI table header */1124u32 address; /* Physical address of local APIC */1125u32 flags;1126};11271128/* Masks for Flags field above */11291130#define ACPI_MADT_PCAT_COMPAT (1) /* 00: System also has dual 8259s */11311132/* Values for PCATCompat flag */11331134#define ACPI_MADT_DUAL_PIC 11135#define ACPI_MADT_MULTIPLE_APIC 011361137/* Values for MADT subtable type in struct acpi_subtable_header */11381139enum acpi_madt_type {1140ACPI_MADT_TYPE_LOCAL_APIC = 0,1141ACPI_MADT_TYPE_IO_APIC = 1,1142ACPI_MADT_TYPE_INTERRUPT_OVERRIDE = 2,1143ACPI_MADT_TYPE_NMI_SOURCE = 3,1144ACPI_MADT_TYPE_LOCAL_APIC_NMI = 4,1145ACPI_MADT_TYPE_LOCAL_APIC_OVERRIDE = 5,1146ACPI_MADT_TYPE_IO_SAPIC = 6,1147ACPI_MADT_TYPE_LOCAL_SAPIC = 7,1148ACPI_MADT_TYPE_INTERRUPT_SOURCE = 8,1149ACPI_MADT_TYPE_LOCAL_X2APIC = 9,1150ACPI_MADT_TYPE_LOCAL_X2APIC_NMI = 10,1151ACPI_MADT_TYPE_GENERIC_INTERRUPT = 11,1152ACPI_MADT_TYPE_GENERIC_DISTRIBUTOR = 12,1153ACPI_MADT_TYPE_GENERIC_MSI_FRAME = 13,1154ACPI_MADT_TYPE_GENERIC_REDISTRIBUTOR = 14,1155ACPI_MADT_TYPE_GENERIC_TRANSLATOR = 15,1156ACPI_MADT_TYPE_MULTIPROC_WAKEUP = 16,1157ACPI_MADT_TYPE_CORE_PIC = 17,1158ACPI_MADT_TYPE_LIO_PIC = 18,1159ACPI_MADT_TYPE_HT_PIC = 19,1160ACPI_MADT_TYPE_EIO_PIC = 20,1161ACPI_MADT_TYPE_MSI_PIC = 21,1162ACPI_MADT_TYPE_BIO_PIC = 22,1163ACPI_MADT_TYPE_LPC_PIC = 23,1164ACPI_MADT_TYPE_RINTC = 24,1165ACPI_MADT_TYPE_IMSIC = 25,1166ACPI_MADT_TYPE_APLIC = 26,1167ACPI_MADT_TYPE_PLIC = 27,1168ACPI_MADT_TYPE_RESERVED = 28, /* 28 to 0x7F are reserved */1169ACPI_MADT_TYPE_OEM_RESERVED = 0x80 /* 0x80 to 0xFF are reserved for OEM use */1170};11711172/*1173* MADT Subtables, correspond to Type in struct acpi_subtable_header1174*/11751176/* 0: Processor Local APIC */11771178struct acpi_madt_local_apic {1179struct acpi_subtable_header header;1180u8 processor_id; /* ACPI processor id */1181u8 id; /* Processor's local APIC id */1182u32 lapic_flags;1183};11841185/* 1: IO APIC */11861187struct acpi_madt_io_apic {1188struct acpi_subtable_header header;1189u8 id; /* I/O APIC ID */1190u8 reserved; /* reserved - must be zero */1191u32 address; /* APIC physical address */1192u32 global_irq_base; /* Global system interrupt where INTI lines start */1193};11941195/* 2: Interrupt Override */11961197struct acpi_madt_interrupt_override {1198struct acpi_subtable_header header;1199u8 bus; /* 0 - ISA */1200u8 source_irq; /* Interrupt source (IRQ) */1201u32 global_irq; /* Global system interrupt */1202u16 inti_flags;1203};12041205/* 3: NMI Source */12061207struct acpi_madt_nmi_source {1208struct acpi_subtable_header header;1209u16 inti_flags;1210u32 global_irq; /* Global system interrupt */1211};12121213/* 4: Local APIC NMI */12141215struct acpi_madt_local_apic_nmi {1216struct acpi_subtable_header header;1217u8 processor_id; /* ACPI processor id */1218u16 inti_flags;1219u8 lint; /* LINTn to which NMI is connected */1220};12211222/* 5: Address Override */12231224struct acpi_madt_local_apic_override {1225struct acpi_subtable_header header;1226u16 reserved; /* Reserved, must be zero */1227u64 address; /* APIC physical address */1228};12291230/* 6: I/O Sapic */12311232struct acpi_madt_io_sapic {1233struct acpi_subtable_header header;1234u8 id; /* I/O SAPIC ID */1235u8 reserved; /* Reserved, must be zero */1236u32 global_irq_base; /* Global interrupt for SAPIC start */1237u64 address; /* SAPIC physical address */1238};12391240/* 7: Local Sapic */12411242struct acpi_madt_local_sapic {1243struct acpi_subtable_header header;1244u8 processor_id; /* ACPI processor id */1245u8 id; /* SAPIC ID */1246u8 eid; /* SAPIC EID */1247u8 reserved[3]; /* Reserved, must be zero */1248u32 lapic_flags;1249u32 uid; /* Numeric UID - ACPI 3.0 */1250char uid_string[]; /* String UID - ACPI 3.0 */1251};12521253/* 8: Platform Interrupt Source */12541255struct acpi_madt_interrupt_source {1256struct acpi_subtable_header header;1257u16 inti_flags;1258u8 type; /* 1=PMI, 2=INIT, 3=corrected */1259u8 id; /* Processor ID */1260u8 eid; /* Processor EID */1261u8 io_sapic_vector; /* Vector value for PMI interrupts */1262u32 global_irq; /* Global system interrupt */1263u32 flags; /* Interrupt Source Flags */1264};12651266/* Masks for Flags field above */12671268#define ACPI_MADT_CPEI_OVERRIDE (1)12691270/* 9: Processor Local X2APIC (ACPI 4.0) */12711272struct acpi_madt_local_x2apic {1273struct acpi_subtable_header header;1274u16 reserved; /* reserved - must be zero */1275u32 local_apic_id; /* Processor x2APIC ID */1276u32 lapic_flags;1277u32 uid; /* ACPI processor UID */1278};12791280/* 10: Local X2APIC NMI (ACPI 4.0) */12811282struct acpi_madt_local_x2apic_nmi {1283struct acpi_subtable_header header;1284u16 inti_flags;1285u32 uid; /* ACPI processor UID */1286u8 lint; /* LINTn to which NMI is connected */1287u8 reserved[3]; /* reserved - must be zero */1288};12891290/* 11: Generic interrupt - GICC (ACPI 5.0 + ACPI 6.0 + ACPI 6.3 + ACPI 6.5 changes) */12911292struct acpi_madt_generic_interrupt {1293struct acpi_subtable_header header;1294u16 reserved; /* reserved - must be zero */1295u32 cpu_interface_number;1296u32 uid;1297u32 flags;1298u32 parking_version;1299u32 performance_interrupt;1300u64 parked_address;1301u64 base_address;1302u64 gicv_base_address;1303u64 gich_base_address;1304u32 vgic_interrupt;1305u64 gicr_base_address;1306u64 arm_mpidr;1307u8 efficiency_class;1308u8 reserved2[1];1309u16 spe_interrupt; /* ACPI 6.3 */1310u16 trbe_interrupt; /* ACPI 6.5 */1311};13121313/* Masks for Flags field above */13141315/* ACPI_MADT_ENABLED (1) Processor is usable if set */1316#define ACPI_MADT_PERFORMANCE_IRQ_MODE (1<<1) /* 01: Performance Interrupt Mode */1317#define ACPI_MADT_VGIC_IRQ_MODE (1<<2) /* 02: VGIC Maintenance Interrupt mode */1318#define ACPI_MADT_GICC_ONLINE_CAPABLE (1<<3) /* 03: Processor is online capable */1319#define ACPI_MADT_GICC_NON_COHERENT (1<<4) /* 04: GIC redistributor is not coherent */13201321/* 12: Generic Distributor (ACPI 5.0 + ACPI 6.0 changes) */13221323struct acpi_madt_generic_distributor {1324struct acpi_subtable_header header;1325u16 reserved; /* reserved - must be zero */1326u32 gic_id;1327u64 base_address;1328u32 global_irq_base;1329u8 version;1330u8 reserved2[3]; /* reserved - must be zero */1331};13321333/* Values for Version field above */13341335enum acpi_madt_gic_version {1336ACPI_MADT_GIC_VERSION_NONE = 0,1337ACPI_MADT_GIC_VERSION_V1 = 1,1338ACPI_MADT_GIC_VERSION_V2 = 2,1339ACPI_MADT_GIC_VERSION_V3 = 3,1340ACPI_MADT_GIC_VERSION_V4 = 4,1341ACPI_MADT_GIC_VERSION_RESERVED = 5 /* 5 and greater are reserved */1342};13431344/* 13: Generic MSI Frame (ACPI 5.1) */13451346struct acpi_madt_generic_msi_frame {1347struct acpi_subtable_header header;1348u16 reserved; /* reserved - must be zero */1349u32 msi_frame_id;1350u64 base_address;1351u32 flags;1352u16 spi_count;1353u16 spi_base;1354};13551356/* Masks for Flags field above */13571358#define ACPI_MADT_OVERRIDE_SPI_VALUES (1)13591360/* 14: Generic Redistributor (ACPI 5.1) */13611362struct acpi_madt_generic_redistributor {1363struct acpi_subtable_header header;1364u8 flags;1365u8 reserved; /* reserved - must be zero */1366u64 base_address;1367u32 length;1368};13691370#define ACPI_MADT_GICR_NON_COHERENT (1)13711372/* 15: Generic Translator (ACPI 6.0) */13731374struct acpi_madt_generic_translator {1375struct acpi_subtable_header header;1376u8 flags;1377u8 reserved; /* reserved - must be zero */1378u32 translation_id;1379u64 base_address;1380u32 reserved2;1381};13821383#define ACPI_MADT_ITS_NON_COHERENT (1)13841385/* 16: Multiprocessor wakeup (ACPI 6.4) */13861387struct acpi_madt_multiproc_wakeup {1388struct acpi_subtable_header header;1389u16 version;1390u32 reserved; /* reserved - must be zero */1391u64 mailbox_address;1392u64 reset_vector;1393};13941395/* Values for Version field above */13961397enum acpi_madt_multiproc_wakeup_version {1398ACPI_MADT_MP_WAKEUP_VERSION_NONE = 0,1399ACPI_MADT_MP_WAKEUP_VERSION_V1 = 1,1400ACPI_MADT_MP_WAKEUP_VERSION_RESERVED = 2, /* 2 and greater are reserved */1401};14021403#define ACPI_MADT_MP_WAKEUP_SIZE_V0 161404#define ACPI_MADT_MP_WAKEUP_SIZE_V1 2414051406#define ACPI_MULTIPROC_WAKEUP_MB_OS_SIZE 20321407#define ACPI_MULTIPROC_WAKEUP_MB_FIRMWARE_SIZE 204814081409struct acpi_madt_multiproc_wakeup_mailbox {1410u16 command;1411u16 reserved; /* reserved - must be zero */1412u32 apic_id;1413u64 wakeup_vector;1414u8 reserved_os[ACPI_MULTIPROC_WAKEUP_MB_OS_SIZE]; /* reserved for OS use */1415u8 reserved_firmware[ACPI_MULTIPROC_WAKEUP_MB_FIRMWARE_SIZE]; /* reserved for firmware use */1416};14171418#define ACPI_MP_WAKE_COMMAND_WAKEUP 11419#define ACPI_MP_WAKE_COMMAND_TEST 214201421/* 17: CPU Core Interrupt Controller (ACPI 6.5) */14221423struct acpi_madt_core_pic {1424struct acpi_subtable_header header;1425u8 version;1426u32 processor_id;1427u32 core_id;1428u32 flags;1429};14301431/* Values for Version field above */14321433enum acpi_madt_core_pic_version {1434ACPI_MADT_CORE_PIC_VERSION_NONE = 0,1435ACPI_MADT_CORE_PIC_VERSION_V1 = 1,1436ACPI_MADT_CORE_PIC_VERSION_RESERVED = 2 /* 2 and greater are reserved */1437};14381439/* 18: Legacy I/O Interrupt Controller (ACPI 6.5) */14401441struct acpi_madt_lio_pic {1442struct acpi_subtable_header header;1443u8 version;1444u64 address;1445u16 size;1446u8 cascade[2];1447u32 cascade_map[2];1448};14491450/* Values for Version field above */14511452enum acpi_madt_lio_pic_version {1453ACPI_MADT_LIO_PIC_VERSION_NONE = 0,1454ACPI_MADT_LIO_PIC_VERSION_V1 = 1,1455ACPI_MADT_LIO_PIC_VERSION_RESERVED = 2 /* 2 and greater are reserved */1456};14571458/* 19: HT Interrupt Controller (ACPI 6.5) */14591460struct acpi_madt_ht_pic {1461struct acpi_subtable_header header;1462u8 version;1463u64 address;1464u16 size;1465u8 cascade[8];1466};14671468/* Values for Version field above */14691470enum acpi_madt_ht_pic_version {1471ACPI_MADT_HT_PIC_VERSION_NONE = 0,1472ACPI_MADT_HT_PIC_VERSION_V1 = 1,1473ACPI_MADT_HT_PIC_VERSION_RESERVED = 2 /* 2 and greater are reserved */1474};14751476/* 20: Extend I/O Interrupt Controller (ACPI 6.5) */14771478struct acpi_madt_eio_pic {1479struct acpi_subtable_header header;1480u8 version;1481u8 cascade;1482u8 node;1483u64 node_map;1484};14851486/* Values for Version field above */14871488enum acpi_madt_eio_pic_version {1489ACPI_MADT_EIO_PIC_VERSION_NONE = 0,1490ACPI_MADT_EIO_PIC_VERSION_V1 = 1,1491ACPI_MADT_EIO_PIC_VERSION_RESERVED = 2 /* 2 and greater are reserved */1492};14931494/* 21: MSI Interrupt Controller (ACPI 6.5) */14951496struct acpi_madt_msi_pic {1497struct acpi_subtable_header header;1498u8 version;1499u64 msg_address;1500u32 start;1501u32 count;1502};15031504/* Values for Version field above */15051506enum acpi_madt_msi_pic_version {1507ACPI_MADT_MSI_PIC_VERSION_NONE = 0,1508ACPI_MADT_MSI_PIC_VERSION_V1 = 1,1509ACPI_MADT_MSI_PIC_VERSION_RESERVED = 2 /* 2 and greater are reserved */1510};15111512/* 22: Bridge I/O Interrupt Controller (ACPI 6.5) */15131514struct acpi_madt_bio_pic {1515struct acpi_subtable_header header;1516u8 version;1517u64 address;1518u16 size;1519u16 id;1520u16 gsi_base;1521};15221523/* Values for Version field above */15241525enum acpi_madt_bio_pic_version {1526ACPI_MADT_BIO_PIC_VERSION_NONE = 0,1527ACPI_MADT_BIO_PIC_VERSION_V1 = 1,1528ACPI_MADT_BIO_PIC_VERSION_RESERVED = 2 /* 2 and greater are reserved */1529};15301531/* 23: LPC Interrupt Controller (ACPI 6.5) */15321533struct acpi_madt_lpc_pic {1534struct acpi_subtable_header header;1535u8 version;1536u64 address;1537u16 size;1538u8 cascade;1539};15401541/* Values for Version field above */15421543enum acpi_madt_lpc_pic_version {1544ACPI_MADT_LPC_PIC_VERSION_NONE = 0,1545ACPI_MADT_LPC_PIC_VERSION_V1 = 1,1546ACPI_MADT_LPC_PIC_VERSION_RESERVED = 2 /* 2 and greater are reserved */1547};15481549/* 24: RISC-V INTC */1550struct acpi_madt_rintc {1551struct acpi_subtable_header header;1552u8 version;1553u8 reserved;1554u32 flags;1555u64 hart_id;1556u32 uid; /* ACPI processor UID */1557u32 ext_intc_id; /* External INTC Id */1558u64 imsic_addr; /* IMSIC base address */1559u32 imsic_size; /* IMSIC size */1560};15611562/* Values for RISC-V INTC Version field above */15631564enum acpi_madt_rintc_version {1565ACPI_MADT_RINTC_VERSION_NONE = 0,1566ACPI_MADT_RINTC_VERSION_V1 = 1,1567ACPI_MADT_RINTC_VERSION_RESERVED = 2 /* 2 and greater are reserved */1568};15691570/* 25: RISC-V IMSIC */1571struct acpi_madt_imsic {1572struct acpi_subtable_header header;1573u8 version;1574u8 reserved;1575u32 flags;1576u16 num_ids;1577u16 num_guest_ids;1578u8 guest_index_bits;1579u8 hart_index_bits;1580u8 group_index_bits;1581u8 group_index_shift;1582};15831584/* 26: RISC-V APLIC */1585struct acpi_madt_aplic {1586struct acpi_subtable_header header;1587u8 version;1588u8 id;1589u32 flags;1590u8 hw_id[8];1591u16 num_idcs;1592u16 num_sources;1593u32 gsi_base;1594u64 base_addr;1595u32 size;1596};15971598/* 27: RISC-V PLIC */1599struct acpi_madt_plic {1600struct acpi_subtable_header header;1601u8 version;1602u8 id;1603u8 hw_id[8];1604u16 num_irqs;1605u16 max_prio;1606u32 flags;1607u32 size;1608u64 base_addr;1609u32 gsi_base;1610};16111612/* 80: OEM data */16131614struct acpi_madt_oem_data {1615ACPI_FLEX_ARRAY(u8, oem_data);1616};16171618/*1619* Common flags fields for MADT subtables1620*/16211622/* MADT Local APIC flags */16231624#define ACPI_MADT_ENABLED (1) /* 00: Processor is usable if set */1625#define ACPI_MADT_ONLINE_CAPABLE (2) /* 01: System HW supports enabling processor at runtime */16261627/* MADT MPS INTI flags (inti_flags) */16281629#define ACPI_MADT_POLARITY_MASK (3) /* 00-01: Polarity of APIC I/O input signals */1630#define ACPI_MADT_TRIGGER_MASK (3<<2) /* 02-03: Trigger mode of APIC input signals */16311632/* Values for MPS INTI flags */16331634#define ACPI_MADT_POLARITY_CONFORMS 01635#define ACPI_MADT_POLARITY_ACTIVE_HIGH 11636#define ACPI_MADT_POLARITY_RESERVED 21637#define ACPI_MADT_POLARITY_ACTIVE_LOW 316381639#define ACPI_MADT_TRIGGER_CONFORMS (0)1640#define ACPI_MADT_TRIGGER_EDGE (1<<2)1641#define ACPI_MADT_TRIGGER_RESERVED (2<<2)1642#define ACPI_MADT_TRIGGER_LEVEL (3<<2)16431644/*******************************************************************************1645*1646* MCFG - PCI Memory Mapped Configuration table and subtable1647* Version 11648*1649* Conforms to "PCI Firmware Specification", Revision 3.0, June 20, 20051650*1651******************************************************************************/16521653struct acpi_table_mcfg {1654struct acpi_table_header header; /* Common ACPI table header */1655u8 reserved[8];1656};16571658/* Subtable */16591660struct acpi_mcfg_allocation {1661u64 address; /* Base address, processor-relative */1662u16 pci_segment; /* PCI segment group number */1663u8 start_bus_number; /* Starting PCI Bus number */1664u8 end_bus_number; /* Final PCI Bus number */1665u32 reserved;1666};16671668/*******************************************************************************1669*1670* MCHI - Management Controller Host Interface Table1671* Version 11672*1673* Conforms to "Management Component Transport Protocol (MCTP) Host1674* Interface Specification", Revision 1.0.0a, October 13, 20091675*1676******************************************************************************/16771678struct acpi_table_mchi {1679struct acpi_table_header header; /* Common ACPI table header */1680u8 interface_type;1681u8 protocol;1682u64 protocol_data;1683u8 interrupt_type;1684u8 gpe;1685u8 pci_device_flag;1686u32 global_interrupt;1687struct acpi_generic_address control_register;1688u8 pci_segment;1689u8 pci_bus;1690u8 pci_device;1691u8 pci_function;1692};16931694/*******************************************************************************1695*1696* MPAM - Memory System Resource Partitioning and Monitoring1697*1698* Conforms to "ACPI for Memory System Resource Partitioning and Monitoring 2.0"1699* Document number: ARM DEN 0065, December, 2022.1700*1701******************************************************************************/17021703/* MPAM RIS locator types. Table 11, Location types */1704enum acpi_mpam_locator_type {1705ACPI_MPAM_LOCATION_TYPE_PROCESSOR_CACHE = 0,1706ACPI_MPAM_LOCATION_TYPE_MEMORY = 1,1707ACPI_MPAM_LOCATION_TYPE_SMMU = 2,1708ACPI_MPAM_LOCATION_TYPE_MEMORY_CACHE = 3,1709ACPI_MPAM_LOCATION_TYPE_ACPI_DEVICE = 4,1710ACPI_MPAM_LOCATION_TYPE_INTERCONNECT = 5,1711ACPI_MPAM_LOCATION_TYPE_UNKNOWN = 0xFF1712};17131714/* MPAM Functional dependency descriptor. Table 10 */1715struct acpi_mpam_func_deps {1716u32 producer;1717u32 reserved;1718};17191720/* MPAM Processor cache locator descriptor. Table 13 */1721struct acpi_mpam_resource_cache_locator {1722u64 cache_reference;1723u32 reserved;1724};17251726/* MPAM Memory locator descriptor. Table 14 */1727struct acpi_mpam_resource_memory_locator {1728u64 proximity_domain;1729u32 reserved;1730};17311732/* MPAM SMMU locator descriptor. Table 15 */1733struct acpi_mpam_resource_smmu_locator {1734u64 smmu_interface;1735u32 reserved;1736};17371738/* MPAM Memory-side cache locator descriptor. Table 16 */1739struct acpi_mpam_resource_memcache_locator {1740u8 reserved[7];1741u8 level;1742u32 reference;1743};17441745/* MPAM ACPI device locator descriptor. Table 17 */1746struct acpi_mpam_resource_acpi_locator {1747u64 acpi_hw_id;1748u32 acpi_unique_id;1749};17501751/* MPAM Interconnect locator descriptor. Table 18 */1752struct acpi_mpam_resource_interconnect_locator {1753u64 inter_connect_desc_tbl_off;1754u32 reserved;1755};17561757/* MPAM Locator structure. Table 12 */1758struct acpi_mpam_resource_generic_locator {1759u64 descriptor1;1760u32 descriptor2;1761};17621763union acpi_mpam_resource_locator {1764struct acpi_mpam_resource_cache_locator cache_locator;1765struct acpi_mpam_resource_memory_locator memory_locator;1766struct acpi_mpam_resource_smmu_locator smmu_locator;1767struct acpi_mpam_resource_memcache_locator mem_cache_locator;1768struct acpi_mpam_resource_acpi_locator acpi_locator;1769struct acpi_mpam_resource_interconnect_locator interconnect_ifc_locator;1770struct acpi_mpam_resource_generic_locator generic_locator;1771};17721773/* Memory System Component Resource Node Structure Table 9 */1774struct acpi_mpam_resource_node {1775u32 identifier;1776u8 ris_index;1777u16 reserved1;1778u8 locator_type;1779union acpi_mpam_resource_locator locator;1780u32 num_functional_deps;1781};17821783/* Memory System Component (MSC) Node Structure. Table 4 */1784struct acpi_mpam_msc_node {1785u16 length;1786u8 interface_type;1787u8 reserved;1788u32 identifier;1789u64 base_address;1790u32 mmio_size;1791u32 overflow_interrupt;1792u32 overflow_interrupt_flags;1793u32 reserved1;1794u32 overflow_interrupt_affinity;1795u32 error_interrupt;1796u32 error_interrupt_flags;1797u32 reserved2;1798u32 error_interrupt_affinity;1799u32 max_nrdy_usec;1800u64 hardware_id_linked_device;1801u32 instance_id_linked_device;1802u32 num_resource_nodes;1803};18041805struct acpi_table_mpam {1806struct acpi_table_header header; /* Common ACPI table header */1807};18081809/*******************************************************************************1810*1811* MPST - Memory Power State Table (ACPI 5.0)1812* Version 11813*1814******************************************************************************/18151816#define ACPI_MPST_CHANNEL_INFO \1817u8 channel_id; \1818u8 reserved1[3]; \1819u16 power_node_count; \1820u16 reserved2;18211822/* Main table */18231824struct acpi_table_mpst {1825struct acpi_table_header header; /* Common ACPI table header */1826ACPI_MPST_CHANNEL_INFO /* Platform Communication Channel */1827};18281829/* Memory Platform Communication Channel Info */18301831struct acpi_mpst_channel {1832ACPI_MPST_CHANNEL_INFO /* Platform Communication Channel */1833};18341835/* Memory Power Node Structure */18361837struct acpi_mpst_power_node {1838u8 flags;1839u8 reserved1;1840u16 node_id;1841u32 length;1842u64 range_address;1843u64 range_length;1844u32 num_power_states;1845u32 num_physical_components;1846};18471848/* Values for Flags field above */18491850#define ACPI_MPST_ENABLED 11851#define ACPI_MPST_POWER_MANAGED 21852#define ACPI_MPST_HOT_PLUG_CAPABLE 418531854/* Memory Power State Structure (follows POWER_NODE above) */18551856struct acpi_mpst_power_state {1857u8 power_state;1858u8 info_index;1859};18601861/* Physical Component ID Structure (follows POWER_STATE above) */18621863struct acpi_mpst_component {1864u16 component_id;1865};18661867/* Memory Power State Characteristics Structure (follows all POWER_NODEs) */18681869struct acpi_mpst_data_hdr {1870u16 characteristics_count;1871u16 reserved;1872};18731874struct acpi_mpst_power_data {1875u8 structure_id;1876u8 flags;1877u16 reserved1;1878u32 average_power;1879u32 power_saving;1880u64 exit_latency;1881u64 reserved2;1882};18831884/* Values for Flags field above */18851886#define ACPI_MPST_PRESERVE 11887#define ACPI_MPST_AUTOENTRY 21888#define ACPI_MPST_AUTOEXIT 418891890/* Shared Memory Region (not part of an ACPI table) */18911892struct acpi_mpst_shared {1893u32 signature;1894u16 pcc_command;1895u16 pcc_status;1896u32 command_register;1897u32 status_register;1898u32 power_state_id;1899u32 power_node_id;1900u64 energy_consumed;1901u64 average_power;1902};19031904/*******************************************************************************1905*1906* MSCT - Maximum System Characteristics Table (ACPI 4.0)1907* Version 11908*1909******************************************************************************/19101911struct acpi_table_msct {1912struct acpi_table_header header; /* Common ACPI table header */1913u32 proximity_offset; /* Location of proximity info struct(s) */1914u32 max_proximity_domains; /* Max number of proximity domains */1915u32 max_clock_domains; /* Max number of clock domains */1916u64 max_address; /* Max physical address in system */1917};19181919/* subtable - Maximum Proximity Domain Information. Version 1 */19201921struct acpi_msct_proximity {1922u8 revision;1923u8 length;1924u32 range_start; /* Start of domain range */1925u32 range_end; /* End of domain range */1926u32 processor_capacity;1927u64 memory_capacity; /* In bytes */1928};19291930/*******************************************************************************1931*1932* MRRM - Memory Range and Region Mapping (MRRM) table1933* Conforms to "Intel Resource Director Technology Architecture Specification"1934* Version 1.1, January 20251935*1936******************************************************************************/19371938struct acpi_table_mrrm {1939struct acpi_table_header header; /* Common ACPI table header */1940u8 max_mem_region; /* Max Memory Regions supported */1941u8 flags; /* Region assignment type */1942u8 reserved[26];1943u8 memory_range_entry[];1944};19451946/* Flags */1947#define ACPI_MRRM_FLAGS_REGION_ASSIGNMENT_OS (1<<0)19481949/*******************************************************************************1950*1951* Memory Range entry - Memory Range entry in MRRM table1952*1953******************************************************************************/19541955struct acpi_mrrm_mem_range_entry {1956struct acpi_subtbl_hdr_16 header;1957u32 reserved0; /* Reserved */1958u64 addr_base; /* Base addr of the mem range */1959u64 addr_len; /* Length of the mem range */1960u16 region_id_flags; /* Valid local or remote Region-ID */1961u8 local_region_id; /* Platform-assigned static local Region-ID */1962u8 remote_region_id; /* Platform-assigned static remote Region-ID */1963u32 reserved1; /* Reserved */1964/* Region-ID Programming Registers[] */1965};19661967/* Values for region_id_flags above */1968#define ACPI_MRRM_VALID_REGION_ID_FLAGS_LOCAL (1<<0)1969#define ACPI_MRRM_VALID_REGION_ID_FLAGS_REMOTE (1<<1)19701971/*******************************************************************************1972*1973* MSDM - Microsoft Data Management table1974*1975* Conforms to "Microsoft Software Licensing Tables (SLIC and MSDM)",1976* November 29, 2011. Copyright 2011 Microsoft1977*1978******************************************************************************/19791980/* Basic MSDM table is only the common ACPI header */19811982struct acpi_table_msdm {1983struct acpi_table_header header; /* Common ACPI table header */1984};19851986/*******************************************************************************1987*1988* NFIT - NVDIMM Interface Table (ACPI 6.0+)1989* Version 11990*1991******************************************************************************/19921993struct acpi_table_nfit {1994struct acpi_table_header header; /* Common ACPI table header */1995u32 reserved; /* Reserved, must be zero */1996};19971998/* Subtable header for NFIT */19992000struct acpi_nfit_header {2001u16 type;2002u16 length;2003};20042005/* Values for subtable type in struct acpi_nfit_header */20062007enum acpi_nfit_type {2008ACPI_NFIT_TYPE_SYSTEM_ADDRESS = 0,2009ACPI_NFIT_TYPE_MEMORY_MAP = 1,2010ACPI_NFIT_TYPE_INTERLEAVE = 2,2011ACPI_NFIT_TYPE_SMBIOS = 3,2012ACPI_NFIT_TYPE_CONTROL_REGION = 4,2013ACPI_NFIT_TYPE_DATA_REGION = 5,2014ACPI_NFIT_TYPE_FLUSH_ADDRESS = 6,2015ACPI_NFIT_TYPE_CAPABILITIES = 7,2016ACPI_NFIT_TYPE_RESERVED = 8 /* 8 and greater are reserved */2017};20182019/*2020* NFIT Subtables2021*/20222023/* 0: System Physical Address Range Structure */20242025struct acpi_nfit_system_address {2026struct acpi_nfit_header header;2027u16 range_index;2028u16 flags;2029u32 reserved; /* Reserved, must be zero */2030u32 proximity_domain;2031u8 range_guid[16];2032u64 address;2033u64 length;2034u64 memory_mapping;2035u64 location_cookie; /* ACPI 6.4 */2036};20372038/* Flags */20392040#define ACPI_NFIT_ADD_ONLINE_ONLY (1) /* 00: Add/Online Operation Only */2041#define ACPI_NFIT_PROXIMITY_VALID (1<<1) /* 01: Proximity Domain Valid */2042#define ACPI_NFIT_LOCATION_COOKIE_VALID (1<<2) /* 02: SPA location cookie valid (ACPI 6.4) */20432044/* Range Type GUIDs appear in the include/acuuid.h file */20452046/* 1: Memory Device to System Address Range Map Structure */20472048struct acpi_nfit_memory_map {2049struct acpi_nfit_header header;2050u32 device_handle;2051u16 physical_id;2052u16 region_id;2053u16 range_index;2054u16 region_index;2055u64 region_size;2056u64 region_offset;2057u64 address;2058u16 interleave_index;2059u16 interleave_ways;2060u16 flags;2061u16 reserved; /* Reserved, must be zero */2062};20632064/* Flags */20652066#define ACPI_NFIT_MEM_SAVE_FAILED (1) /* 00: Last SAVE to Memory Device failed */2067#define ACPI_NFIT_MEM_RESTORE_FAILED (1<<1) /* 01: Last RESTORE from Memory Device failed */2068#define ACPI_NFIT_MEM_FLUSH_FAILED (1<<2) /* 02: Platform flush failed */2069#define ACPI_NFIT_MEM_NOT_ARMED (1<<3) /* 03: Memory Device is not armed */2070#define ACPI_NFIT_MEM_HEALTH_OBSERVED (1<<4) /* 04: Memory Device observed SMART/health events */2071#define ACPI_NFIT_MEM_HEALTH_ENABLED (1<<5) /* 05: SMART/health events enabled */2072#define ACPI_NFIT_MEM_MAP_FAILED (1<<6) /* 06: Mapping to SPA failed */20732074/* 2: Interleave Structure */20752076struct acpi_nfit_interleave {2077struct acpi_nfit_header header;2078u16 interleave_index;2079u16 reserved; /* Reserved, must be zero */2080u32 line_count;2081u32 line_size;2082u32 line_offset[]; /* Variable length */2083};20842085/* 3: SMBIOS Management Information Structure */20862087struct acpi_nfit_smbios {2088struct acpi_nfit_header header;2089u32 reserved; /* Reserved, must be zero */2090u8 data[]; /* Variable length */2091};20922093/* 4: NVDIMM Control Region Structure */20942095struct acpi_nfit_control_region {2096struct acpi_nfit_header header;2097u16 region_index;2098u16 vendor_id;2099u16 device_id;2100u16 revision_id;2101u16 subsystem_vendor_id;2102u16 subsystem_device_id;2103u16 subsystem_revision_id;2104u8 valid_fields;2105u8 manufacturing_location;2106u16 manufacturing_date;2107u8 reserved[2]; /* Reserved, must be zero */2108u32 serial_number;2109u16 code;2110u16 windows;2111u64 window_size;2112u64 command_offset;2113u64 command_size;2114u64 status_offset;2115u64 status_size;2116u16 flags;2117u8 reserved1[6]; /* Reserved, must be zero */2118};21192120/* Flags */21212122#define ACPI_NFIT_CONTROL_BUFFERED (1) /* Block Data Windows implementation is buffered */21232124/* valid_fields bits */21252126#define ACPI_NFIT_CONTROL_MFG_INFO_VALID (1) /* Manufacturing fields are valid */21272128/* 5: NVDIMM Block Data Window Region Structure */21292130struct acpi_nfit_data_region {2131struct acpi_nfit_header header;2132u16 region_index;2133u16 windows;2134u64 offset;2135u64 size;2136u64 capacity;2137u64 start_address;2138};21392140/* 6: Flush Hint Address Structure */21412142struct acpi_nfit_flush_address {2143struct acpi_nfit_header header;2144u32 device_handle;2145u16 hint_count;2146u8 reserved[6]; /* Reserved, must be zero */2147u64 hint_address[]; /* Variable length */2148};21492150/* 7: Platform Capabilities Structure */21512152struct acpi_nfit_capabilities {2153struct acpi_nfit_header header;2154u8 highest_capability;2155u8 reserved[3]; /* Reserved, must be zero */2156u32 capabilities;2157u32 reserved2;2158};21592160/* Capabilities Flags */21612162#define ACPI_NFIT_CAPABILITY_CACHE_FLUSH (1) /* 00: Cache Flush to NVDIMM capable */2163#define ACPI_NFIT_CAPABILITY_MEM_FLUSH (1<<1) /* 01: Memory Flush to NVDIMM capable */2164#define ACPI_NFIT_CAPABILITY_MEM_MIRRORING (1<<2) /* 02: Memory Mirroring capable */21652166/*2167* NFIT/DVDIMM device handle support - used as the _ADR for each NVDIMM2168*/2169struct nfit_device_handle {2170u32 handle;2171};21722173/* Device handle construction and extraction macros */21742175#define ACPI_NFIT_DIMM_NUMBER_MASK 0x0000000F2176#define ACPI_NFIT_CHANNEL_NUMBER_MASK 0x000000F02177#define ACPI_NFIT_MEMORY_ID_MASK 0x00000F002178#define ACPI_NFIT_SOCKET_ID_MASK 0x0000F0002179#define ACPI_NFIT_NODE_ID_MASK 0x0FFF000021802181#define ACPI_NFIT_DIMM_NUMBER_OFFSET 02182#define ACPI_NFIT_CHANNEL_NUMBER_OFFSET 42183#define ACPI_NFIT_MEMORY_ID_OFFSET 82184#define ACPI_NFIT_SOCKET_ID_OFFSET 122185#define ACPI_NFIT_NODE_ID_OFFSET 1621862187/* Macro to construct a NFIT/NVDIMM device handle */21882189#define ACPI_NFIT_BUILD_DEVICE_HANDLE(dimm, channel, memory, socket, node) \2190((dimm) | \2191((channel) << ACPI_NFIT_CHANNEL_NUMBER_OFFSET) | \2192((memory) << ACPI_NFIT_MEMORY_ID_OFFSET) | \2193((socket) << ACPI_NFIT_SOCKET_ID_OFFSET) | \2194((node) << ACPI_NFIT_NODE_ID_OFFSET))21952196/* Macros to extract individual fields from a NFIT/NVDIMM device handle */21972198#define ACPI_NFIT_GET_DIMM_NUMBER(handle) \2199((handle) & ACPI_NFIT_DIMM_NUMBER_MASK)22002201#define ACPI_NFIT_GET_CHANNEL_NUMBER(handle) \2202(((handle) & ACPI_NFIT_CHANNEL_NUMBER_MASK) >> ACPI_NFIT_CHANNEL_NUMBER_OFFSET)22032204#define ACPI_NFIT_GET_MEMORY_ID(handle) \2205(((handle) & ACPI_NFIT_MEMORY_ID_MASK) >> ACPI_NFIT_MEMORY_ID_OFFSET)22062207#define ACPI_NFIT_GET_SOCKET_ID(handle) \2208(((handle) & ACPI_NFIT_SOCKET_ID_MASK) >> ACPI_NFIT_SOCKET_ID_OFFSET)22092210#define ACPI_NFIT_GET_NODE_ID(handle) \2211(((handle) & ACPI_NFIT_NODE_ID_MASK) >> ACPI_NFIT_NODE_ID_OFFSET)22122213/*******************************************************************************2214*2215* NHLT - Non HDAudio Link Table2216* Version 12217*2218******************************************************************************/22192220struct acpi_table_nhlt {2221struct acpi_table_header header; /* Common ACPI table header */2222u8 endpoints_count;2223/*2224* struct acpi_nhlt_endpoint endpoints[];2225* struct acpi_nhlt_config oed_config;2226*/2227};22282229struct acpi_nhlt_endpoint {2230u32 length;2231u8 link_type;2232u8 instance_id;2233u16 vendor_id;2234u16 device_id;2235u16 revision_id;2236u32 subsystem_id;2237u8 device_type;2238u8 direction;2239u8 virtual_bus_id;2240/*2241* struct acpi_nhlt_config device_config;2242* struct acpi_nhlt_formats_config formats_config;2243* struct acpi_nhlt_devices_info devices_info;2244*/2245};22462247/*2248* Values for link_type field above2249*2250* Only types PDM and SSP are used2251*/2252#define ACPI_NHLT_LINKTYPE_HDA 02253#define ACPI_NHLT_LINKTYPE_DSP 12254#define ACPI_NHLT_LINKTYPE_PDM 22255#define ACPI_NHLT_LINKTYPE_SSP 32256#define ACPI_NHLT_LINKTYPE_SLIMBUS 42257#define ACPI_NHLT_LINKTYPE_SDW 52258#define ACPI_NHLT_LINKTYPE_UAOL 622592260/* Values for device_id field above */22612262#define ACPI_NHLT_DEVICEID_DMIC 0xAE202263#define ACPI_NHLT_DEVICEID_BT 0xAE302264#define ACPI_NHLT_DEVICEID_I2S 0xAE3422652266/* Values for device_type field above */22672268/*2269* Device types unique to endpoint of link_type=PDM2270*2271* Type PDM used for all SKL+ platforms2272*/2273#define ACPI_NHLT_DEVICETYPE_PDM 02274#define ACPI_NHLT_DEVICETYPE_PDM_SKL 12275/* Device types unique to endpoint of link_type=SSP */2276#define ACPI_NHLT_DEVICETYPE_BT 02277#define ACPI_NHLT_DEVICETYPE_FM 12278#define ACPI_NHLT_DEVICETYPE_MODEM 22279#define ACPI_NHLT_DEVICETYPE_CODEC 422802281/* Values for Direction field above */22822283#define ACPI_NHLT_DIR_RENDER 02284#define ACPI_NHLT_DIR_CAPTURE 122852286struct acpi_nhlt_config {2287u32 capabilities_size;2288u8 capabilities[];2289};22902291struct acpi_nhlt_gendevice_config {2292u8 virtual_slot;2293u8 config_type;2294};22952296/* Values for config_type field above */22972298#define ACPI_NHLT_CONFIGTYPE_GENERIC 02299#define ACPI_NHLT_CONFIGTYPE_MICARRAY 123002301struct acpi_nhlt_micdevice_config {2302u8 virtual_slot;2303u8 config_type;2304u8 array_type;2305};23062307/* Values for array_type field above */23082309#define ACPI_NHLT_ARRAYTYPE_LINEAR2_SMALL 0xA2310#define ACPI_NHLT_ARRAYTYPE_LINEAR2_BIG 0xB2311#define ACPI_NHLT_ARRAYTYPE_LINEAR4_GEO1 0xC2312#define ACPI_NHLT_ARRAYTYPE_PLANAR4_LSHAPED 0xD2313#define ACPI_NHLT_ARRAYTYPE_LINEAR4_GEO2 0xE2314#define ACPI_NHLT_ARRAYTYPE_VENDOR 0xF23152316struct acpi_nhlt_vendor_mic_config {2317u8 type;2318u8 panel;2319u16 speaker_position_distance; /* mm */2320u16 horizontal_offset; /* mm */2321u16 vertical_offset; /* mm */2322u8 frequency_low_band; /* 5*Hz */2323u8 frequency_high_band; /* 500*Hz */2324u16 direction_angle; /* -180 - +180 */2325u16 elevation_angle; /* -180 - +180 */2326u16 work_vertical_angle_begin; /* -180 - +180 with 2 deg step */2327u16 work_vertical_angle_end; /* -180 - +180 with 2 deg step */2328u16 work_horizontal_angle_begin; /* -180 - +180 with 2 deg step */2329u16 work_horizontal_angle_end; /* -180 - +180 with 2 deg step */2330};23312332/* Values for Type field above */23332334#define ACPI_NHLT_MICTYPE_OMNIDIRECTIONAL 02335#define ACPI_NHLT_MICTYPE_SUBCARDIOID 12336#define ACPI_NHLT_MICTYPE_CARDIOID 22337#define ACPI_NHLT_MICTYPE_SUPERCARDIOID 32338#define ACPI_NHLT_MICTYPE_HYPERCARDIOID 42339#define ACPI_NHLT_MICTYPE_8SHAPED 52340#define ACPI_NHLT_MICTYPE_RESERVED 62341#define ACPI_NHLT_MICTYPE_VENDORDEFINED 723422343/* Values for Panel field above */23442345#define ACPI_NHLT_MICLOCATION_TOP 02346#define ACPI_NHLT_MICLOCATION_BOTTOM 12347#define ACPI_NHLT_MICLOCATION_LEFT 22348#define ACPI_NHLT_MICLOCATION_RIGHT 32349#define ACPI_NHLT_MICLOCATION_FRONT 42350#define ACPI_NHLT_MICLOCATION_REAR 523512352struct acpi_nhlt_vendor_micdevice_config {2353u8 virtual_slot;2354u8 config_type;2355u8 array_type;2356u8 mics_count;2357struct acpi_nhlt_vendor_mic_config mics[];2358};23592360union acpi_nhlt_device_config {2361u8 virtual_slot;2362struct acpi_nhlt_gendevice_config gen;2363struct acpi_nhlt_micdevice_config mic;2364struct acpi_nhlt_vendor_micdevice_config vendor_mic;2365};23662367/* Inherited from Microsoft's WAVEFORMATEXTENSIBLE. */2368struct acpi_nhlt_wave_formatext {2369u16 format_tag;2370u16 channel_count;2371u32 samples_per_sec;2372u32 avg_bytes_per_sec;2373u16 block_align;2374u16 bits_per_sample;2375u16 extra_format_size;2376u16 valid_bits_per_sample;2377u32 channel_mask;2378u8 subformat[16];2379};23802381struct acpi_nhlt_format_config {2382struct acpi_nhlt_wave_formatext format;2383struct acpi_nhlt_config config;2384};23852386struct acpi_nhlt_formats_config {2387u8 formats_count;2388struct acpi_nhlt_format_config formats[];2389};23902391struct acpi_nhlt_device_info {2392u8 id[16];2393u8 instance_id;2394u8 port_id;2395};23962397struct acpi_nhlt_devices_info {2398u8 devices_count;2399struct acpi_nhlt_device_info devices[];2400};24012402/*******************************************************************************2403*2404* PCCT - Platform Communications Channel Table (ACPI 5.0)2405* Version 2 (ACPI 6.2)2406*2407******************************************************************************/24082409struct acpi_table_pcct {2410struct acpi_table_header header; /* Common ACPI table header */2411u32 flags;2412u64 reserved;2413};24142415/* Values for Flags field above */24162417#define ACPI_PCCT_DOORBELL 124182419/* Values for subtable type in struct acpi_subtable_header */24202421enum acpi_pcct_type {2422ACPI_PCCT_TYPE_GENERIC_SUBSPACE = 0,2423ACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE = 1,2424ACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE_TYPE2 = 2, /* ACPI 6.1 */2425ACPI_PCCT_TYPE_EXT_PCC_MASTER_SUBSPACE = 3, /* ACPI 6.2 */2426ACPI_PCCT_TYPE_EXT_PCC_SLAVE_SUBSPACE = 4, /* ACPI 6.2 */2427ACPI_PCCT_TYPE_HW_REG_COMM_SUBSPACE = 5, /* ACPI 6.4 */2428ACPI_PCCT_TYPE_RESERVED = 6 /* 6 and greater are reserved */2429};24302431/*2432* PCCT Subtables, correspond to Type in struct acpi_subtable_header2433*/24342435/* 0: Generic Communications Subspace */24362437struct acpi_pcct_subspace {2438struct acpi_subtable_header header;2439u8 reserved[6];2440u64 base_address;2441u64 length;2442struct acpi_generic_address doorbell_register;2443u64 preserve_mask;2444u64 write_mask;2445u32 latency;2446u32 max_access_rate;2447u16 min_turnaround_time;2448};24492450/* 1: HW-reduced Communications Subspace (ACPI 5.1) */24512452struct acpi_pcct_hw_reduced {2453struct acpi_subtable_header header;2454u32 platform_interrupt;2455u8 flags;2456u8 reserved;2457u64 base_address;2458u64 length;2459struct acpi_generic_address doorbell_register;2460u64 preserve_mask;2461u64 write_mask;2462u32 latency;2463u32 max_access_rate;2464u16 min_turnaround_time;2465};24662467/* 2: HW-reduced Communications Subspace Type 2 (ACPI 6.1) */24682469struct acpi_pcct_hw_reduced_type2 {2470struct acpi_subtable_header header;2471u32 platform_interrupt;2472u8 flags;2473u8 reserved;2474u64 base_address;2475u64 length;2476struct acpi_generic_address doorbell_register;2477u64 preserve_mask;2478u64 write_mask;2479u32 latency;2480u32 max_access_rate;2481u16 min_turnaround_time;2482struct acpi_generic_address platform_ack_register;2483u64 ack_preserve_mask;2484u64 ack_write_mask;2485};24862487/* 3: Extended PCC Master Subspace Type 3 (ACPI 6.2) */24882489struct acpi_pcct_ext_pcc_master {2490struct acpi_subtable_header header;2491u32 platform_interrupt;2492u8 flags;2493u8 reserved1;2494u64 base_address;2495u32 length;2496struct acpi_generic_address doorbell_register;2497u64 preserve_mask;2498u64 write_mask;2499u32 latency;2500u32 max_access_rate;2501u32 min_turnaround_time;2502struct acpi_generic_address platform_ack_register;2503u64 ack_preserve_mask;2504u64 ack_set_mask;2505u64 reserved2;2506struct acpi_generic_address cmd_complete_register;2507u64 cmd_complete_mask;2508struct acpi_generic_address cmd_update_register;2509u64 cmd_update_preserve_mask;2510u64 cmd_update_set_mask;2511struct acpi_generic_address error_status_register;2512u64 error_status_mask;2513};25142515/* 4: Extended PCC Slave Subspace Type 4 (ACPI 6.2) */25162517struct acpi_pcct_ext_pcc_slave {2518struct acpi_subtable_header header;2519u32 platform_interrupt;2520u8 flags;2521u8 reserved1;2522u64 base_address;2523u32 length;2524struct acpi_generic_address doorbell_register;2525u64 preserve_mask;2526u64 write_mask;2527u32 latency;2528u32 max_access_rate;2529u32 min_turnaround_time;2530struct acpi_generic_address platform_ack_register;2531u64 ack_preserve_mask;2532u64 ack_set_mask;2533u64 reserved2;2534struct acpi_generic_address cmd_complete_register;2535u64 cmd_complete_mask;2536struct acpi_generic_address cmd_update_register;2537u64 cmd_update_preserve_mask;2538u64 cmd_update_set_mask;2539struct acpi_generic_address error_status_register;2540u64 error_status_mask;2541};25422543/* 5: HW Registers based Communications Subspace */25442545struct acpi_pcct_hw_reg {2546struct acpi_subtable_header header;2547u16 version;2548u64 base_address;2549u64 length;2550struct acpi_generic_address doorbell_register;2551u64 doorbell_preserve;2552u64 doorbell_write;2553struct acpi_generic_address cmd_complete_register;2554u64 cmd_complete_mask;2555struct acpi_generic_address error_status_register;2556u64 error_status_mask;2557u32 nominal_latency;2558u32 min_turnaround_time;2559};25602561/* Values for doorbell flags above */25622563#define ACPI_PCCT_INTERRUPT_POLARITY (1)2564#define ACPI_PCCT_INTERRUPT_MODE (1<<1)25652566/*2567* PCC memory structures (not part of the ACPI table)2568*/25692570/* Shared Memory Region */25712572struct acpi_pcct_shared_memory {2573u32 signature;2574u16 command;2575u16 status;2576};25772578/* Extended PCC Subspace Shared Memory Region (ACPI 6.2) */25792580struct acpi_pcct_ext_pcc_shared_memory {2581u32 signature;2582u32 flags;2583u32 length;2584u32 command;2585};25862587/*******************************************************************************2588*2589* PDTT - Platform Debug Trigger Table (ACPI 6.2)2590* Version 02591*2592******************************************************************************/25932594struct acpi_table_pdtt {2595struct acpi_table_header header; /* Common ACPI table header */2596u8 trigger_count;2597u8 reserved[3];2598u32 array_offset;2599};26002601/*2602* PDTT Communication Channel Identifier Structure.2603* The number of these structures is defined by trigger_count above,2604* starting at array_offset.2605*/2606struct acpi_pdtt_channel {2607u8 subchannel_id;2608u8 flags;2609};26102611/* Flags for above */26122613#define ACPI_PDTT_RUNTIME_TRIGGER (1)2614#define ACPI_PDTT_WAIT_COMPLETION (1<<1)2615#define ACPI_PDTT_TRIGGER_ORDER (1<<2)26162617/*******************************************************************************2618*2619* PHAT - Platform Health Assessment Table (ACPI 6.4)2620* Version 12621*2622******************************************************************************/26232624struct acpi_table_phat {2625struct acpi_table_header header; /* Common ACPI table header */2626};26272628/* Common header for PHAT subtables that follow main table */26292630struct acpi_phat_header {2631u16 type;2632u16 length;2633u8 revision;2634};26352636/* Values for Type field above */26372638#define ACPI_PHAT_TYPE_FW_VERSION_DATA 02639#define ACPI_PHAT_TYPE_FW_HEALTH_DATA 12640#define ACPI_PHAT_TYPE_RESERVED 2 /* 0x02-0xFFFF are reserved */26412642/*2643* PHAT subtables, correspond to Type in struct acpi_phat_header2644*/26452646/* 0: Firmware Version Data Record */26472648struct acpi_phat_version_data {2649struct acpi_phat_header header;2650u8 reserved[3];2651u32 element_count;2652};26532654struct acpi_phat_version_element {2655u8 guid[16];2656u64 version_value;2657u32 producer_id;2658};26592660/* 1: Firmware Health Data Record */26612662struct acpi_phat_health_data {2663struct acpi_phat_header header;2664u8 reserved[2];2665u8 health;2666u8 device_guid[16];2667u32 device_specific_offset; /* Zero if no Device-specific data */2668};26692670/* Values for Health field above */26712672#define ACPI_PHAT_ERRORS_FOUND 02673#define ACPI_PHAT_NO_ERRORS 12674#define ACPI_PHAT_UNKNOWN_ERRORS 22675#define ACPI_PHAT_ADVISORY 326762677/*******************************************************************************2678*2679* PMTT - Platform Memory Topology Table (ACPI 5.0)2680* Version 12681*2682******************************************************************************/26832684struct acpi_table_pmtt {2685struct acpi_table_header header; /* Common ACPI table header */2686u32 memory_device_count;2687/*2688* Immediately followed by:2689* MEMORY_DEVICE memory_device_struct[memory_device_count];2690*/2691};26922693/* Common header for PMTT subtables that follow main table */26942695struct acpi_pmtt_header {2696u8 type;2697u8 reserved1;2698u16 length;2699u16 flags;2700u16 reserved2;2701u32 memory_device_count; /* Zero means no memory device structs follow */2702/*2703* Immediately followed by:2704* u8 type_specific_data[]2705* MEMORY_DEVICE memory_device_struct[memory_device_count];2706*/2707};27082709/* Values for Type field above */27102711#define ACPI_PMTT_TYPE_SOCKET 02712#define ACPI_PMTT_TYPE_CONTROLLER 12713#define ACPI_PMTT_TYPE_DIMM 22714#define ACPI_PMTT_TYPE_RESERVED 3 /* 0x03-0xFE are reserved */2715#define ACPI_PMTT_TYPE_VENDOR 0xFF27162717/* Values for Flags field above */27182719#define ACPI_PMTT_TOP_LEVEL 0x00012720#define ACPI_PMTT_PHYSICAL 0x00022721#define ACPI_PMTT_MEMORY_TYPE 0x000C27222723/*2724* PMTT subtables, correspond to Type in struct acpi_pmtt_header2725*/27262727/* 0: Socket Structure */27282729struct acpi_pmtt_socket {2730struct acpi_pmtt_header header;2731u16 socket_id;2732u16 reserved;2733};2734/*2735* Immediately followed by:2736* MEMORY_DEVICE memory_device_struct[memory_device_count];2737*/27382739/* 1: Memory Controller subtable */27402741struct acpi_pmtt_controller {2742struct acpi_pmtt_header header;2743u16 controller_id;2744u16 reserved;2745};2746/*2747* Immediately followed by:2748* MEMORY_DEVICE memory_device_struct[memory_device_count];2749*/27502751/* 2: Physical Component Identifier (DIMM) */27522753struct acpi_pmtt_physical_component {2754struct acpi_pmtt_header header;2755u32 bios_handle;2756};27572758/* 0xFF: Vendor Specific Data */27592760struct acpi_pmtt_vendor_specific {2761struct acpi_pmtt_header header;2762u8 type_uuid[16];2763u8 specific[];2764/*2765* Immediately followed by:2766* u8 vendor_specific_data[];2767* MEMORY_DEVICE memory_device_struct[memory_device_count];2768*/2769};27702771/*******************************************************************************2772*2773* PPTT - Processor Properties Topology Table (ACPI 6.2)2774* Version 12775*2776******************************************************************************/27772778struct acpi_table_pptt {2779struct acpi_table_header header; /* Common ACPI table header */2780};27812782/* Values for Type field above */27832784enum acpi_pptt_type {2785ACPI_PPTT_TYPE_PROCESSOR = 0,2786ACPI_PPTT_TYPE_CACHE = 1,2787ACPI_PPTT_TYPE_ID = 2,2788ACPI_PPTT_TYPE_RESERVED = 32789};27902791/* 0: Processor Hierarchy Node Structure */27922793struct acpi_pptt_processor {2794struct acpi_subtable_header header;2795u16 reserved;2796u32 flags;2797u32 parent;2798u32 acpi_processor_id;2799u32 number_of_priv_resources;2800};28012802/* Flags */28032804#define ACPI_PPTT_PHYSICAL_PACKAGE (1)2805#define ACPI_PPTT_ACPI_PROCESSOR_ID_VALID (1<<1)2806#define ACPI_PPTT_ACPI_PROCESSOR_IS_THREAD (1<<2) /* ACPI 6.3 */2807#define ACPI_PPTT_ACPI_LEAF_NODE (1<<3) /* ACPI 6.3 */2808#define ACPI_PPTT_ACPI_IDENTICAL (1<<4) /* ACPI 6.3 */28092810/* 1: Cache Type Structure */28112812struct acpi_pptt_cache {2813struct acpi_subtable_header header;2814u16 reserved;2815u32 flags;2816u32 next_level_of_cache;2817u32 size;2818u32 number_of_sets;2819u8 associativity;2820u8 attributes;2821u16 line_size;2822};28232824/* 1: Cache Type Structure for PPTT version 3 */28252826struct acpi_pptt_cache_v1 {2827u32 cache_id;2828};28292830/* Flags */28312832#define ACPI_PPTT_SIZE_PROPERTY_VALID (1) /* Physical property valid */2833#define ACPI_PPTT_NUMBER_OF_SETS_VALID (1<<1) /* Number of sets valid */2834#define ACPI_PPTT_ASSOCIATIVITY_VALID (1<<2) /* Associativity valid */2835#define ACPI_PPTT_ALLOCATION_TYPE_VALID (1<<3) /* Allocation type valid */2836#define ACPI_PPTT_CACHE_TYPE_VALID (1<<4) /* Cache type valid */2837#define ACPI_PPTT_WRITE_POLICY_VALID (1<<5) /* Write policy valid */2838#define ACPI_PPTT_LINE_SIZE_VALID (1<<6) /* Line size valid */2839#define ACPI_PPTT_CACHE_ID_VALID (1<<7) /* Cache ID valid */28402841/* Masks for Attributes */28422843#define ACPI_PPTT_MASK_ALLOCATION_TYPE (0x03) /* Allocation type */2844#define ACPI_PPTT_MASK_CACHE_TYPE (0x0C) /* Cache type */2845#define ACPI_PPTT_MASK_WRITE_POLICY (0x10) /* Write policy */28462847/* Attributes describing cache */2848#define ACPI_PPTT_CACHE_READ_ALLOCATE (0x0) /* Cache line is allocated on read */2849#define ACPI_PPTT_CACHE_WRITE_ALLOCATE (0x01) /* Cache line is allocated on write */2850#define ACPI_PPTT_CACHE_RW_ALLOCATE (0x02) /* Cache line is allocated on read and write */2851#define ACPI_PPTT_CACHE_RW_ALLOCATE_ALT (0x03) /* Alternate representation of above */28522853#define ACPI_PPTT_CACHE_TYPE_DATA (0x0) /* Data cache */2854#define ACPI_PPTT_CACHE_TYPE_INSTR (1<<2) /* Instruction cache */2855#define ACPI_PPTT_CACHE_TYPE_UNIFIED (2<<2) /* Unified I & D cache */2856#define ACPI_PPTT_CACHE_TYPE_UNIFIED_ALT (3<<2) /* Alternate representation of above */28572858#define ACPI_PPTT_CACHE_POLICY_WB (0x0) /* Cache is write back */2859#define ACPI_PPTT_CACHE_POLICY_WT (1<<4) /* Cache is write through */28602861/* 2: ID Structure */28622863struct acpi_pptt_id {2864struct acpi_subtable_header header;2865u16 reserved;2866u32 vendor_id;2867u64 level1_id;2868u64 level2_id;2869u16 major_rev;2870u16 minor_rev;2871u16 spin_rev;2872};28732874/*******************************************************************************2875*2876* PRMT - Platform Runtime Mechanism Table2877* Version 12878*2879******************************************************************************/28802881struct acpi_table_prmt {2882struct acpi_table_header header; /* Common ACPI table header */2883};28842885struct acpi_table_prmt_header {2886u8 platform_guid[16];2887u32 module_info_offset;2888u32 module_info_count;2889};28902891struct acpi_prmt_module_header {2892u16 revision;2893u16 length;2894};28952896struct acpi_prmt_module_info {2897u16 revision;2898u16 length;2899u8 module_guid[16];2900u16 major_rev;2901u16 minor_rev;2902u16 handler_info_count;2903u32 handler_info_offset;2904u64 mmio_list_pointer;2905};29062907struct acpi_prmt_handler_info {2908u16 revision;2909u16 length;2910u8 handler_guid[16];2911u64 handler_address;2912u64 static_data_buffer_address;2913u64 acpi_param_buffer_address;2914};29152916/*******************************************************************************2917*2918* RASF - RAS Feature Table (ACPI 5.0)2919* Version 12920*2921******************************************************************************/29222923struct acpi_table_rasf {2924struct acpi_table_header header; /* Common ACPI table header */2925u8 channel_id[12];2926};29272928/* RASF Platform Communication Channel Shared Memory Region */29292930struct acpi_rasf_shared_memory {2931u32 signature;2932u16 command;2933u16 status;2934u16 version;2935u8 capabilities[16];2936u8 set_capabilities[16];2937u16 num_parameter_blocks;2938u32 set_capabilities_status;2939};29402941/* RASF Parameter Block Structure Header */29422943struct acpi_rasf_parameter_block {2944u16 type;2945u16 version;2946u16 length;2947};29482949/* RASF Parameter Block Structure for PATROL_SCRUB */29502951struct acpi_rasf_patrol_scrub_parameter {2952struct acpi_rasf_parameter_block header;2953u16 patrol_scrub_command;2954u64 requested_address_range[2];2955u64 actual_address_range[2];2956u16 flags;2957u8 requested_speed;2958};29592960/* Masks for Flags and Speed fields above */29612962#define ACPI_RASF_SCRUBBER_RUNNING 12963#define ACPI_RASF_SPEED (7<<1)2964#define ACPI_RASF_SPEED_SLOW (0<<1)2965#define ACPI_RASF_SPEED_MEDIUM (4<<1)2966#define ACPI_RASF_SPEED_FAST (7<<1)29672968/* Channel Commands */29692970enum acpi_rasf_commands {2971ACPI_RASF_EXECUTE_RASF_COMMAND = 12972};29732974/* Platform RAS Capabilities */29752976enum acpi_rasf_capabiliities {2977ACPI_HW_PATROL_SCRUB_SUPPORTED = 0,2978ACPI_SW_PATROL_SCRUB_EXPOSED = 12979};29802981/* Patrol Scrub Commands */29822983enum acpi_rasf_patrol_scrub_commands {2984ACPI_RASF_GET_PATROL_PARAMETERS = 1,2985ACPI_RASF_START_PATROL_SCRUBBER = 2,2986ACPI_RASF_STOP_PATROL_SCRUBBER = 32987};29882989/* Channel Command flags */29902991#define ACPI_RASF_GENERATE_SCI (1<<15)29922993/* Status values */29942995enum acpi_rasf_status {2996ACPI_RASF_SUCCESS = 0,2997ACPI_RASF_NOT_VALID = 1,2998ACPI_RASF_NOT_SUPPORTED = 2,2999ACPI_RASF_BUSY = 3,3000ACPI_RASF_FAILED = 4,3001ACPI_RASF_ABORTED = 5,3002ACPI_RASF_INVALID_DATA = 63003};30043005/* Status flags */30063007#define ACPI_RASF_COMMAND_COMPLETE (1)3008#define ACPI_RASF_SCI_DOORBELL (1<<1)3009#define ACPI_RASF_ERROR (1<<2)3010#define ACPI_RASF_STATUS (0x1F<<3)30113012/*******************************************************************************3013*3014* RAS2 - RAS2 Feature Table (ACPI 6.5)3015* Version 13016*3017*3018******************************************************************************/30193020struct acpi_table_ras2 {3021struct acpi_table_header header; /* Common ACPI table header */3022u16 reserved;3023u16 num_pcc_descs;3024};30253026/* RAS2 Platform Communication Channel Descriptor */30273028struct acpi_ras2_pcc_desc {3029u8 channel_id;3030u16 reserved;3031u8 feature_type;3032u32 instance;3033};30343035/* RAS2 Platform Communication Channel Shared Memory Region */30363037struct acpi_ras2_shmem {3038u32 signature;3039u16 command;3040u16 status;3041u16 version;3042u8 features[16];3043u8 set_caps[16];3044u16 num_param_blks;3045u32 set_caps_status;3046};30473048/* RAS2 Parameter Block Structure for PATROL_SCRUB */30493050struct acpi_ras2_parameter_block {3051u16 type;3052u16 version;3053u16 length;3054};30553056/* RAS2 Parameter Block Structure for PATROL_SCRUB */30573058struct acpi_ras2_patrol_scrub_param {3059struct acpi_ras2_parameter_block header;3060u16 command;3061u64 req_addr_range[2];3062u64 actl_addr_range[2];3063u32 flags;3064u32 scrub_params_out;3065u32 scrub_params_in;3066};30673068/* Masks for Flags field above */30693070#define ACPI_RAS2_SCRUBBER_RUNNING 130713072/* RAS2 Parameter Block Structure for LA2PA_TRANSLATION */30733074struct acpi_ras2_la2pa_translation_parameter {3075struct acpi_ras2_parameter_block header;3076u16 addr_translation_command;3077u64 sub_inst_id;3078u64 logical_address;3079u64 physical_address;3080u32 status;3081};30823083/* Channel Commands */30843085enum acpi_ras2_commands {3086ACPI_RAS2_EXECUTE_RAS2_COMMAND = 13087};30883089/* Platform RAS2 Features */30903091enum acpi_ras2_features {3092ACPI_RAS2_PATROL_SCRUB_SUPPORTED = 0,3093ACPI_RAS2_LA2PA_TRANSLATION = 13094};30953096/* RAS2 Patrol Scrub Commands */30973098enum acpi_ras2_patrol_scrub_commands {3099ACPI_RAS2_GET_PATROL_PARAMETERS = 1,3100ACPI_RAS2_START_PATROL_SCRUBBER = 2,3101ACPI_RAS2_STOP_PATROL_SCRUBBER = 33102};31033104/* RAS2 LA2PA Translation Commands */31053106enum acpi_ras2_la2_pa_translation_commands {3107ACPI_RAS2_GET_LA2PA_TRANSLATION = 1,3108};31093110/* RAS2 LA2PA Translation Status values */31113112enum acpi_ras2_la2_pa_translation_status {3113ACPI_RAS2_LA2PA_TRANSLATION_SUCCESS = 0,3114ACPI_RAS2_LA2PA_TRANSLATION_FAIL = 1,3115};31163117/* Channel Command flags */31183119#define ACPI_RAS2_GENERATE_SCI (1<<15)31203121/* Status values */31223123enum acpi_ras2_status {3124ACPI_RAS2_SUCCESS = 0,3125ACPI_RAS2_NOT_VALID = 1,3126ACPI_RAS2_NOT_SUPPORTED = 2,3127ACPI_RAS2_BUSY = 3,3128ACPI_RAS2_FAILED = 4,3129ACPI_RAS2_ABORTED = 5,3130ACPI_RAS2_INVALID_DATA = 63131};31323133/* Status flags */31343135#define ACPI_RAS2_COMMAND_COMPLETE (1)3136#define ACPI_RAS2_SCI_DOORBELL (1<<1)3137#define ACPI_RAS2_ERROR (1<<2)3138#define ACPI_RAS2_STATUS (0x1F<<3)31393140/*******************************************************************************3141*3142* RGRT - Regulatory Graphics Resource Table3143* Version 13144*3145* Conforms to "ACPI RGRT" available at:3146* https://microsoft.github.io/mu/dyn/mu_plus/ms_core_pkg/acpi_RGRT/feature_acpi_rgrt/3147*3148******************************************************************************/31493150struct acpi_table_rgrt {3151struct acpi_table_header header; /* Common ACPI table header */3152u16 version;3153u8 image_type;3154u8 reserved;3155u8 image[];3156};31573158/* image_type values */31593160enum acpi_rgrt_image_type {3161ACPI_RGRT_TYPE_RESERVED0 = 0,3162ACPI_RGRT_IMAGE_TYPE_PNG = 1,3163ACPI_RGRT_TYPE_RESERVED = 2 /* 2 and greater are reserved */3164};31653166/*******************************************************************************3167*3168* RHCT - RISC-V Hart Capabilities Table3169* Version 13170*3171******************************************************************************/31723173struct acpi_table_rhct {3174struct acpi_table_header header; /* Common ACPI table header */3175u32 flags; /* RHCT flags */3176u64 time_base_freq;3177u32 node_count;3178u32 node_offset;3179};31803181/* RHCT Flags */31823183#define ACPI_RHCT_TIMER_CANNOT_WAKEUP_CPU (1)3184/*3185* RHCT subtables3186*/3187struct acpi_rhct_node_header {3188u16 type;3189u16 length;3190u16 revision;3191};31923193/* Values for RHCT subtable Type above */31943195enum acpi_rhct_node_type {3196ACPI_RHCT_NODE_TYPE_ISA_STRING = 0x0000,3197ACPI_RHCT_NODE_TYPE_CMO = 0x0001,3198ACPI_RHCT_NODE_TYPE_MMU = 0x0002,3199ACPI_RHCT_NODE_TYPE_RESERVED = 0x0003,3200ACPI_RHCT_NODE_TYPE_HART_INFO = 0xFFFF,3201};32023203/*3204* RHCT node specific subtables3205*/32063207/* ISA string node structure */3208struct acpi_rhct_isa_string {3209u16 isa_length;3210char isa[];3211};32123213struct acpi_rhct_cmo_node {3214u8 reserved; /* Must be zero */3215u8 cbom_size; /* CBOM size in powerof 2 */3216u8 cbop_size; /* CBOP size in powerof 2 */3217u8 cboz_size; /* CBOZ size in powerof 2 */3218};32193220struct acpi_rhct_mmu_node {3221u8 reserved; /* Must be zero */3222u8 mmu_type; /* Virtual Address Scheme */3223};32243225enum acpi_rhct_mmu_type {3226ACPI_RHCT_MMU_TYPE_SV39 = 0,3227ACPI_RHCT_MMU_TYPE_SV48 = 1,3228ACPI_RHCT_MMU_TYPE_SV57 = 23229};32303231/* Hart Info node structure */3232struct acpi_rhct_hart_info {3233u16 num_offsets;3234u32 uid; /* ACPI processor UID */3235};32363237/*******************************************************************************3238*3239* RIMT - RISC-V IO Remapping Table3240*3241* https://github.com/riscv-non-isa/riscv-acpi-rimt3242*3243******************************************************************************/32443245struct acpi_table_rimt {3246struct acpi_table_header header; /* Common ACPI table header */3247u32 num_nodes; /* Number of RIMT Nodes */3248u32 node_offset; /* Offset to RIMT Node Array */3249u32 reserved;3250};32513252struct acpi_rimt_node {3253u8 type;3254u8 revision;3255u16 length;3256u16 reserved;3257u16 id;3258char node_data[];3259};32603261enum acpi_rimt_node_type {3262ACPI_RIMT_NODE_TYPE_IOMMU = 0x0,3263ACPI_RIMT_NODE_TYPE_PCIE_ROOT_COMPLEX = 0x1,3264ACPI_RIMT_NODE_TYPE_PLAT_DEVICE = 0x2,3265};32663267struct acpi_rimt_iommu {3268u8 hardware_id[8]; /* Hardware ID */3269u64 base_address; /* Base Address */3270u32 flags; /* Flags */3271u32 proximity_domain; /* Proximity Domain */3272u16 pcie_segment_number; /* PCIe Segment number */3273u16 pcie_bdf; /* PCIe B/D/F */3274u16 num_interrupt_wires; /* Number of interrupt wires */3275u16 interrupt_wire_offset; /* Interrupt wire array offset */3276u64 interrupt_wire[]; /* Interrupt wire array */3277};32783279/* IOMMU Node Flags */3280#define ACPI_RIMT_IOMMU_FLAGS_PCIE (1)3281#define ACPI_RIMT_IOMMU_FLAGS_PXM_VALID (1 << 1)32823283/* Interrupt Wire Structure */3284struct acpi_rimt_iommu_wire_gsi {3285u32 irq_num; /* Interrupt Number */3286u32 flags; /* Flags */3287};32883289/* Interrupt Wire Flags */3290#define ACPI_RIMT_GSI_LEVEL_TRIGGERRED (1)3291#define ACPI_RIMT_GSI_ACTIVE_HIGH (1 << 1)32923293struct acpi_rimt_id_mapping {3294u32 source_id_base; /* Source ID Base */3295u32 num_ids; /* Number of IDs */3296u32 dest_id_base; /* Destination Device ID Base */3297u32 dest_offset; /* Destination IOMMU Offset */3298u32 flags; /* Flags */3299};33003301struct acpi_rimt_pcie_rc {3302u32 flags; /* Flags */3303u16 reserved; /* Reserved */3304u16 pcie_segment_number; /* PCIe Segment number */3305u16 id_mapping_offset; /* ID mapping array offset */3306u16 num_id_mappings; /* Number of ID mappings */3307};33083309/* PCIe Root Complex Node Flags */3310#define ACPI_RIMT_PCIE_ATS_SUPPORTED (1)3311#define ACPI_RIMT_PCIE_PRI_SUPPORTED (1 << 1)33123313struct acpi_rimt_platform_device {3314u16 id_mapping_offset; /* ID Mapping array offset */3315u16 num_id_mappings; /* Number of ID mappings */3316char device_name[]; /* Device Object Name */3317};33183319/*******************************************************************************3320*3321* SBST - Smart Battery Specification Table3322* Version 13323*3324******************************************************************************/33253326struct acpi_table_sbst {3327struct acpi_table_header header; /* Common ACPI table header */3328u32 warning_level;3329u32 low_level;3330u32 critical_level;3331};33323333/*******************************************************************************3334*3335* SDEI - Software Delegated Exception Interface Descriptor Table3336*3337* Conforms to "Software Delegated Exception Interface (SDEI)" ARM DEN0054A,3338* May 8th, 2017. Copyright 2017 ARM Ltd.3339*3340******************************************************************************/33413342struct acpi_table_sdei {3343struct acpi_table_header header; /* Common ACPI table header */3344};33453346/*******************************************************************************3347*3348* SDEV - Secure Devices Table (ACPI 6.2)3349* Version 13350*3351******************************************************************************/33523353struct acpi_table_sdev {3354struct acpi_table_header header; /* Common ACPI table header */3355};33563357struct acpi_sdev_header {3358u8 type;3359u8 flags;3360u16 length;3361};33623363/* Values for subtable type above */33643365enum acpi_sdev_type {3366ACPI_SDEV_TYPE_NAMESPACE_DEVICE = 0,3367ACPI_SDEV_TYPE_PCIE_ENDPOINT_DEVICE = 1,3368ACPI_SDEV_TYPE_RESERVED = 2 /* 2 and greater are reserved */3369};33703371/* Values for flags above */33723373#define ACPI_SDEV_HANDOFF_TO_UNSECURE_OS (1)3374#define ACPI_SDEV_SECURE_COMPONENTS_PRESENT (1<<1)33753376/*3377* SDEV subtables3378*/33793380/* 0: Namespace Device Based Secure Device Structure */33813382struct acpi_sdev_namespace {3383struct acpi_sdev_header header;3384u16 device_id_offset;3385u16 device_id_length;3386u16 vendor_data_offset;3387u16 vendor_data_length;3388};33893390struct acpi_sdev_secure_component {3391u16 secure_component_offset;3392u16 secure_component_length;3393};33943395/*3396* SDEV sub-subtables ("Components") for above3397*/3398struct acpi_sdev_component {3399struct acpi_sdev_header header;3400};34013402/* Values for sub-subtable type above */34033404enum acpi_sac_type {3405ACPI_SDEV_TYPE_ID_COMPONENT = 0,3406ACPI_SDEV_TYPE_MEM_COMPONENT = 13407};34083409struct acpi_sdev_id_component {3410struct acpi_sdev_header header;3411u16 hardware_id_offset;3412u16 hardware_id_length;3413u16 subsystem_id_offset;3414u16 subsystem_id_length;3415u16 hardware_revision;3416u8 hardware_rev_present;3417u8 class_code_present;3418u8 pci_base_class;3419u8 pci_sub_class;3420u8 pci_programming_xface;3421};34223423struct acpi_sdev_mem_component {3424struct acpi_sdev_header header;3425u32 reserved;3426u64 memory_base_address;3427u64 memory_length;3428};34293430/* 1: PCIe Endpoint Device Based Device Structure */34313432struct acpi_sdev_pcie {3433struct acpi_sdev_header header;3434u16 segment;3435u16 start_bus;3436u16 path_offset;3437u16 path_length;3438u16 vendor_data_offset;3439u16 vendor_data_length;3440};34413442/* 1a: PCIe Endpoint path entry */34433444struct acpi_sdev_pcie_path {3445u8 device;3446u8 function;3447};34483449/*******************************************************************************3450*3451* SVKL - Storage Volume Key Location Table (ACPI 6.4)3452* From: "Guest-Host-Communication Interface (GHCI) for Intel3453* Trust Domain Extensions (Intel TDX)".3454* Version 13455*3456******************************************************************************/34573458struct acpi_table_svkl {3459struct acpi_table_header header; /* Common ACPI table header */3460u32 count;3461};34623463struct acpi_svkl_key {3464u16 type;3465u16 format;3466u32 size;3467u64 address;3468};34693470enum acpi_svkl_type {3471ACPI_SVKL_TYPE_MAIN_STORAGE = 0,3472ACPI_SVKL_TYPE_RESERVED = 1 /* 1 and greater are reserved */3473};34743475enum acpi_svkl_format {3476ACPI_SVKL_FORMAT_RAW_BINARY = 0,3477ACPI_SVKL_FORMAT_RESERVED = 1 /* 1 and greater are reserved */3478};34793480/*******************************************************************************3481*3482* TDEL - TD-Event Log3483* From: "Guest-Host-Communication Interface (GHCI) for Intel3484* Trust Domain Extensions (Intel TDX)".3485* September 20203486*3487******************************************************************************/34883489struct acpi_table_tdel {3490struct acpi_table_header header; /* Common ACPI table header */3491u32 reserved;3492u64 log_area_minimum_length;3493u64 log_area_start_address;3494};34953496/* Reset to default packing */34973498#pragma pack()34993500#endif /* __ACTBL2_H__ */350135023503