brintos

brintos / linux-shallow public Read only

0
0
Text · 80.7 KiB · d3858ee Raw
3186 lines · c
1/* SPDX-License-Identifier: BSD-3-Clause OR GPL-2.0 */2/******************************************************************************3 *4 * Name: actbl2.h - ACPI Table Definitions (tables not in ACPI spec)5 *6 * Copyright (C) 2000 - 2023, Intel Corp.7 *8 *****************************************************************************/9 10#ifndef __ACTBL2_H__11#define __ACTBL2_H__12 13/*******************************************************************************14 *15 * Additional ACPI Tables (2)16 *17 * These tables are not consumed directly by the ACPICA subsystem, but are18 * included here to support device drivers and the AML disassembler.19 *20 ******************************************************************************/21 22/*23 * Values for description table header signatures for tables defined in this24 * file. Useful because they make it more difficult to inadvertently type in25 * the wrong signature.26 */27#define ACPI_SIG_AGDI           "AGDI"	/* Arm Generic Diagnostic Dump and Reset Device Interface */28#define ACPI_SIG_APMT           "APMT"	/* Arm Performance Monitoring Unit table */29#define ACPI_SIG_BDAT           "BDAT"	/* BIOS Data ACPI Table */30#define ACPI_SIG_CCEL           "CCEL"	/* CC Event Log Table */31#define ACPI_SIG_CDAT           "CDAT"	/* Coherent Device Attribute Table */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_MSDM           "MSDM"	/* Microsoft Data Management Table */41#define ACPI_SIG_NFIT           "NFIT"	/* NVDIMM Firmware Interface Table */42#define ACPI_SIG_NHLT           "NHLT"	/* Non HD Audio Link Table */43#define ACPI_SIG_PCCT           "PCCT"	/* Platform Communications Channel Table */44#define ACPI_SIG_PDTT           "PDTT"	/* Platform Debug Trigger Table */45#define ACPI_SIG_PHAT           "PHAT"	/* Platform Health Assessment Table */46#define ACPI_SIG_PMTT           "PMTT"	/* Platform Memory Topology Table */47#define ACPI_SIG_PPTT           "PPTT"	/* Processor Properties Topology Table */48#define ACPI_SIG_PRMT           "PRMT"	/* Platform Runtime Mechanism Table */49#define ACPI_SIG_RASF           "RASF"	/* RAS Feature table */50#define ACPI_SIG_RAS2           "RAS2"	/* RAS2 Feature table */51#define ACPI_SIG_RGRT           "RGRT"	/* Regulatory Graphics Resource Table */52#define ACPI_SIG_RHCT           "RHCT"	/* RISC-V Hart Capabilities Table */53#define ACPI_SIG_SBST           "SBST"	/* Smart Battery Specification Table */54#define ACPI_SIG_SDEI           "SDEI"	/* Software Delegated Exception Interface Table */55#define ACPI_SIG_SDEV           "SDEV"	/* Secure Devices table */56#define ACPI_SIG_SVKL           "SVKL"	/* Storage Volume Key Location Table */57#define ACPI_SIG_TDEL           "TDEL"	/* TD Event Log Table */58 59/*60 * All tables must be byte-packed to match the ACPI specification, since61 * the tables are provided by the system BIOS.62 */63#pragma pack(1)64 65/*66 * Note: C bitfields are not used for this reason:67 *68 * "Bitfields are great and easy to read, but unfortunately the C language69 * does not specify the layout of bitfields in memory, which means they are70 * essentially useless for dealing with packed data in on-disk formats or71 * binary wire protocols." (Or ACPI tables and buffers.) "If you ask me,72 * this decision was a design error in C. Ritchie could have picked an order73 * and stuck with it." Norman Ramsey.74 * See http://stackoverflow.com/a/1053662/4166175 */76 77/*******************************************************************************78 *79 * AEST - Arm Error Source Table80 *81 * Conforms to: ACPI for the Armv8 RAS Extensions 1.1(Sep 2020) and82 * 2.0(May 2023) Platform Design Document.83 *84 ******************************************************************************/85 86struct acpi_table_aest {87	struct acpi_table_header header;88};89 90/* Common Subtable header - one per Node Structure (Subtable) */91 92struct acpi_aest_hdr {93	u8 type;94	u16 length;95	u8 reserved;96	u32 node_specific_offset;97	u32 node_interface_offset;98	u32 node_interrupt_offset;99	u32 node_interrupt_count;100	u64 timestamp_rate;101	u64 reserved1;102	u64 error_injection_rate;103};104 105/* Values for Type above */106 107#define ACPI_AEST_PROCESSOR_ERROR_NODE      0108#define ACPI_AEST_MEMORY_ERROR_NODE         1109#define ACPI_AEST_SMMU_ERROR_NODE           2110#define ACPI_AEST_VENDOR_ERROR_NODE         3111#define ACPI_AEST_GIC_ERROR_NODE            4112#define ACPI_AEST_PCIE_ERROR_NODE           5113#define ACPI_AEST_PROXY_ERROR_NODE          6114#define ACPI_AEST_NODE_TYPE_RESERVED        7 /* 7 and above are reserved */115 116/*117 * AEST subtables (Error nodes)118 */119 120/* 0: Processor Error */121 122typedef struct acpi_aest_processor {123	u32 processor_id;124	u8 resource_type;125	u8 reserved;126	u8 flags;127	u8 revision;128	u64 processor_affinity;129 130} acpi_aest_processor;131 132/* Values for resource_type above, related structs below */133 134#define ACPI_AEST_CACHE_RESOURCE            0135#define ACPI_AEST_TLB_RESOURCE              1136#define ACPI_AEST_GENERIC_RESOURCE          2137#define ACPI_AEST_RESOURCE_RESERVED         3	/* 3 and above are reserved */138 139/* 0R: Processor Cache Resource Substructure */140 141typedef struct acpi_aest_processor_cache {142	u32 cache_reference;143	u32 reserved;144 145} acpi_aest_processor_cache;146 147/* Values for cache_type above */148 149#define ACPI_AEST_CACHE_DATA                0150#define ACPI_AEST_CACHE_INSTRUCTION         1151#define ACPI_AEST_CACHE_UNIFIED             2152#define ACPI_AEST_CACHE_RESERVED            3	/* 3 and above are reserved */153 154/* 1R: Processor TLB Resource Substructure */155 156typedef struct acpi_aest_processor_tlb {157	u32 tlb_level;158	u32 reserved;159 160} acpi_aest_processor_tlb;161 162/* 2R: Processor Generic Resource Substructure */163 164typedef struct acpi_aest_processor_generic {165	u32 resource;166 167} acpi_aest_processor_generic;168 169/* 1: Memory Error */170 171typedef struct acpi_aest_memory {172	u32 srat_proximity_domain;173 174} acpi_aest_memory;175 176/* 2: Smmu Error */177 178typedef struct acpi_aest_smmu {179	u32 iort_node_reference;180	u32 subcomponent_reference;181 182} acpi_aest_smmu;183 184/* 3: Vendor Defined */185 186typedef struct acpi_aest_vendor {187	u32 acpi_hid;188	u32 acpi_uid;189	u8 vendor_specific_data[16];190 191} acpi_aest_vendor;192 193struct acpi_aest_vendor_v2 {194	char acpi_hid[8];195	u32 acpi_uid;196	u8 vendor_specific_data[16];197};198 199/* 4: Gic Error */200 201typedef struct acpi_aest_gic {202	u32 interface_type;203	u32 instance_id;204 205} acpi_aest_gic;206 207/* Values for interface_type above */208 209#define ACPI_AEST_GIC_CPU                   0210#define ACPI_AEST_GIC_DISTRIBUTOR           1211#define ACPI_AEST_GIC_REDISTRIBUTOR         2212#define ACPI_AEST_GIC_ITS                   3213#define ACPI_AEST_GIC_RESERVED              4	/* 4 and above are reserved */214 215/* 5: PCIe Error */216 217struct acpi_aest_pcie {218	u32 iort_node_reference;219};220 221/* 6: Proxy Error */222 223struct acpi_aest_proxy {224	u64 node_address;225};226 227/* Node Interface Structure */228 229typedef struct acpi_aest_node_interface {230	u8 type;231	u8 reserved[3];232	u32 flags;233	u64 address;234	u32 error_record_index;235	u32 error_record_count;236	u64 error_record_implemented;237	u64 error_status_reporting;238	u64 addressing_mode;239 240} acpi_aest_node_interface;241 242/* Node Interface Structure V2 */243 244struct acpi_aest_node_interface_header {245	u8 type;246	u8 group_format;247	u8 reserved[2];248	u32 flags;249	u64 address;250	u32 error_record_index;251	u32 error_record_count;252};253 254#define ACPI_AEST_NODE_GROUP_FORMAT_4K          0255#define ACPI_AEST_NODE_GROUP_FORMAT_16K         1256#define ACPI_AEST_NODE_GROUP_FORMAT_64K         2257 258struct acpi_aest_node_interface_common {259	u32 error_node_device;260	u32 processor_affinity;261	u64 error_group_register_base;262	u64 fault_inject_register_base;263	u64 interrupt_config_register_base;264};265 266struct acpi_aest_node_interface_4k {267	u64 error_record_implemented;268	u64 error_status_reporting;269	u64 addressing_mode;270	struct acpi_aest_node_interface_common common;271};272 273struct acpi_aest_node_interface_16k {274	u64 error_record_implemented[4];275	u64 error_status_reporting[4];276	u64 addressing_mode[4];277	struct acpi_aest_node_interface_common common;278};279 280struct acpi_aest_node_interface_64k {281	u64 error_record_implemented[14];282	u64 error_status_reporting[14];283	u64 addressing_mode[14];284	struct acpi_aest_node_interface_common common;285};286 287/* Values for Type field above */288 289#define ACPI_AEST_NODE_SYSTEM_REGISTER			0290#define ACPI_AEST_NODE_MEMORY_MAPPED			1291#define ACPI_AEST_NODE_SINGLE_RECORD_MEMORY_MAPPED	2292#define ACPI_AEST_XFACE_RESERVED			3   /* 2 and above are reserved */293 294/* Node Interrupt Structure */295 296typedef struct acpi_aest_node_interrupt {297	u8 type;298	u8 reserved[2];299	u8 flags;300	u32 gsiv;301	u8 iort_id;302	u8 reserved1[3];303 304} acpi_aest_node_interrupt;305 306/* Node Interrupt Structure V2 */307 308struct acpi_aest_node_interrupt_v2 {309	u8 type;310	u8 reserved[2];311	u8 flags;312	u32 gsiv;313	u8 reserved1[4];314};315 316/* Values for Type field above */317 318#define ACPI_AEST_NODE_FAULT_HANDLING       0319#define ACPI_AEST_NODE_ERROR_RECOVERY       1320#define ACPI_AEST_XRUPT_RESERVED            2	/* 2 and above are reserved */321 322/*******************************************************************************323 * AGDI - Arm Generic Diagnostic Dump and Reset Device Interface324 *325 * Conforms to "ACPI for Arm Components 1.1, Platform Design Document"326 * ARM DEN0093 v1.1327 *328 ******************************************************************************/329struct acpi_table_agdi {330	struct acpi_table_header header;	/* Common ACPI table header */331	u8 flags;332	u8 reserved[3];333	u32 sdei_event;334	u32 gsiv;335};336 337/* Mask for Flags field above */338 339#define ACPI_AGDI_SIGNALING_MODE (1)340 341/*******************************************************************************342 *343 * APMT - ARM Performance Monitoring Unit Table344 *345 * Conforms to:346 * ARM Performance Monitoring Unit Architecture 1.0 Platform Design Document347 * ARM DEN0117 v1.0 November 25, 2021348 *349 ******************************************************************************/350 351struct acpi_table_apmt {352	struct acpi_table_header header;	/* Common ACPI table header */353};354 355#define ACPI_APMT_NODE_ID_LENGTH                4356 357/*358 * APMT subtables359 */360struct acpi_apmt_node {361	u16 length;362	u8 flags;363	u8 type;364	u32 id;365	u64 inst_primary;366	u32 inst_secondary;367	u64 base_address0;368	u64 base_address1;369	u32 ovflw_irq;370	u32 reserved;371	u32 ovflw_irq_flags;372	u32 proc_affinity;373	u32 impl_id;374};375 376/* Masks for Flags field above */377 378#define ACPI_APMT_FLAGS_DUAL_PAGE               (1<<0)379#define ACPI_APMT_FLAGS_AFFINITY                (1<<1)380#define ACPI_APMT_FLAGS_ATOMIC                  (1<<2)381 382/* Values for Flags dual page field above */383 384#define ACPI_APMT_FLAGS_DUAL_PAGE_NSUPP         (0<<0)385#define ACPI_APMT_FLAGS_DUAL_PAGE_SUPP          (1<<0)386 387/* Values for Flags processor affinity field above */388#define ACPI_APMT_FLAGS_AFFINITY_PROC           (0<<1)389#define ACPI_APMT_FLAGS_AFFINITY_PROC_CONTAINER (1<<1)390 391/* Values for Flags 64-bit atomic field above */392#define ACPI_APMT_FLAGS_ATOMIC_NSUPP            (0<<2)393#define ACPI_APMT_FLAGS_ATOMIC_SUPP             (1<<2)394 395/* Values for Type field above */396 397enum acpi_apmt_node_type {398	ACPI_APMT_NODE_TYPE_MC = 0x00,399	ACPI_APMT_NODE_TYPE_SMMU = 0x01,400	ACPI_APMT_NODE_TYPE_PCIE_ROOT = 0x02,401	ACPI_APMT_NODE_TYPE_ACPI = 0x03,402	ACPI_APMT_NODE_TYPE_CACHE = 0x04,403	ACPI_APMT_NODE_TYPE_COUNT404};405 406/* Masks for ovflw_irq_flags field above */407 408#define ACPI_APMT_OVFLW_IRQ_FLAGS_MODE          (1<<0)409#define ACPI_APMT_OVFLW_IRQ_FLAGS_TYPE          (1<<1)410 411/* Values for ovflw_irq_flags mode field above */412 413#define ACPI_APMT_OVFLW_IRQ_FLAGS_MODE_LEVEL    (0<<0)414#define ACPI_APMT_OVFLW_IRQ_FLAGS_MODE_EDGE     (1<<0)415 416/* Values for ovflw_irq_flags type field above */417 418#define ACPI_APMT_OVFLW_IRQ_FLAGS_TYPE_WIRED    (0<<1)419 420/*******************************************************************************421 *422 * BDAT - BIOS Data ACPI Table423 *424 * Conforms to "BIOS Data ACPI Table", Interface Specification v4.0 Draft 5425 * Nov 2020426 *427 ******************************************************************************/428 429struct acpi_table_bdat {430	struct acpi_table_header header;431	struct acpi_generic_address gas;432};433 434/*******************************************************************************435 *436 * CCEL - CC-Event Log437 *        From: "Guest-Host-Communication Interface (GHCI) for Intel438 *        Trust Domain Extensions (Intel TDX)". Feb 2022439 *440 ******************************************************************************/441 442struct acpi_table_ccel {443	struct acpi_table_header header;	/* Common ACPI table header */444	u8 CCtype;445	u8 Ccsub_type;446	u16 reserved;447	u64 log_area_minimum_length;448	u64 log_area_start_address;449};450 451/*******************************************************************************452 *453 * IORT - IO Remapping Table454 *455 * Conforms to "IO Remapping Table System Software on ARM Platforms",456 * Document number: ARM DEN 0049E.e, Sep 2022457 *458 ******************************************************************************/459 460struct acpi_table_iort {461	struct acpi_table_header header;462	u32 node_count;463	u32 node_offset;464	u32 reserved;465};466 467/*468 * IORT subtables469 */470struct acpi_iort_node {471	u8 type;472	u16 length;473	u8 revision;474	u32 identifier;475	u32 mapping_count;476	u32 mapping_offset;477	char node_data[];478};479 480/* Values for subtable Type above */481 482enum acpi_iort_node_type {483	ACPI_IORT_NODE_ITS_GROUP = 0x00,484	ACPI_IORT_NODE_NAMED_COMPONENT = 0x01,485	ACPI_IORT_NODE_PCI_ROOT_COMPLEX = 0x02,486	ACPI_IORT_NODE_SMMU = 0x03,487	ACPI_IORT_NODE_SMMU_V3 = 0x04,488	ACPI_IORT_NODE_PMCG = 0x05,489	ACPI_IORT_NODE_RMR = 0x06,490};491 492struct acpi_iort_id_mapping {493	u32 input_base;		/* Lowest value in input range */494	u32 id_count;		/* Number of IDs */495	u32 output_base;	/* Lowest value in output range */496	u32 output_reference;	/* A reference to the output node */497	u32 flags;498};499 500/* Masks for Flags field above for IORT subtable */501 502#define ACPI_IORT_ID_SINGLE_MAPPING (1)503 504struct acpi_iort_memory_access {505	u32 cache_coherency;506	u8 hints;507	u16 reserved;508	u8 memory_flags;509};510 511/* Values for cache_coherency field above */512 513#define ACPI_IORT_NODE_COHERENT         0x00000001	/* The device node is fully coherent */514#define ACPI_IORT_NODE_NOT_COHERENT     0x00000000	/* The device node is not coherent */515 516/* Masks for Hints field above */517 518#define ACPI_IORT_HT_TRANSIENT          (1)519#define ACPI_IORT_HT_WRITE              (1<<1)520#define ACPI_IORT_HT_READ               (1<<2)521#define ACPI_IORT_HT_OVERRIDE           (1<<3)522 523/* Masks for memory_flags field above */524 525#define ACPI_IORT_MF_COHERENCY          (1)526#define ACPI_IORT_MF_ATTRIBUTES         (1<<1)527 528/*529 * IORT node specific subtables530 */531struct acpi_iort_its_group {532	u32 its_count;533	u32 identifiers[];	/* GIC ITS identifier array */534};535 536struct acpi_iort_named_component {537	u32 node_flags;538	u64 memory_properties;	/* Memory access properties */539	u8 memory_address_limit;	/* Memory address size limit */540	char device_name[];	/* Path of namespace object */541};542 543/* Masks for Flags field above */544 545#define ACPI_IORT_NC_STALL_SUPPORTED    (1)546#define ACPI_IORT_NC_PASID_BITS         (31<<1)547 548struct acpi_iort_root_complex {549	u64 memory_properties;	/* Memory access properties */550	u32 ats_attribute;551	u32 pci_segment_number;552	u8 memory_address_limit;	/* Memory address size limit */553	u16 pasid_capabilities;	/* PASID Capabilities */554	u8 reserved[];		/* Reserved, must be zero */555};556 557/* Masks for ats_attribute field above */558 559#define ACPI_IORT_ATS_SUPPORTED         (1)	/* The root complex ATS support */560#define ACPI_IORT_PRI_SUPPORTED         (1<<1)	/* The root complex PRI support */561#define ACPI_IORT_PASID_FWD_SUPPORTED   (1<<2)	/* The root complex PASID forward support */562 563/* Masks for pasid_capabilities field above */564#define ACPI_IORT_PASID_MAX_WIDTH       (0x1F)	/* Bits 0-4 */565 566struct acpi_iort_smmu {567	u64 base_address;	/* SMMU base address */568	u64 span;		/* Length of memory range */569	u32 model;570	u32 flags;571	u32 global_interrupt_offset;572	u32 context_interrupt_count;573	u32 context_interrupt_offset;574	u32 pmu_interrupt_count;575	u32 pmu_interrupt_offset;576	u64 interrupts[];	/* Interrupt array */577};578 579/* Values for Model field above */580 581#define ACPI_IORT_SMMU_V1               0x00000000	/* Generic SMMUv1 */582#define ACPI_IORT_SMMU_V2               0x00000001	/* Generic SMMUv2 */583#define ACPI_IORT_SMMU_CORELINK_MMU400  0x00000002	/* ARM Corelink MMU-400 */584#define ACPI_IORT_SMMU_CORELINK_MMU500  0x00000003	/* ARM Corelink MMU-500 */585#define ACPI_IORT_SMMU_CORELINK_MMU401  0x00000004	/* ARM Corelink MMU-401 */586#define ACPI_IORT_SMMU_CAVIUM_THUNDERX  0x00000005	/* Cavium thunder_x SMMUv2 */587 588/* Masks for Flags field above */589 590#define ACPI_IORT_SMMU_DVM_SUPPORTED    (1)591#define ACPI_IORT_SMMU_COHERENT_WALK    (1<<1)592 593/* Global interrupt format */594 595struct acpi_iort_smmu_gsi {596	u32 nsg_irpt;597	u32 nsg_irpt_flags;598	u32 nsg_cfg_irpt;599	u32 nsg_cfg_irpt_flags;600};601 602struct acpi_iort_smmu_v3 {603	u64 base_address;	/* SMMUv3 base address */604	u32 flags;605	u32 reserved;606	u64 vatos_address;607	u32 model;608	u32 event_gsiv;609	u32 pri_gsiv;610	u32 gerr_gsiv;611	u32 sync_gsiv;612	u32 pxm;613	u32 id_mapping_index;614};615 616/* Values for Model field above */617 618#define ACPI_IORT_SMMU_V3_GENERIC           0x00000000	/* Generic SMMUv3 */619#define ACPI_IORT_SMMU_V3_HISILICON_HI161X  0x00000001	/* hi_silicon Hi161x SMMUv3 */620#define ACPI_IORT_SMMU_V3_CAVIUM_CN99XX     0x00000002	/* Cavium CN99xx SMMUv3 */621 622/* Masks for Flags field above */623 624#define ACPI_IORT_SMMU_V3_COHACC_OVERRIDE   (1)625#define ACPI_IORT_SMMU_V3_HTTU_OVERRIDE     (3<<1)626#define ACPI_IORT_SMMU_V3_PXM_VALID         (1<<3)627#define ACPI_IORT_SMMU_V3_DEVICEID_VALID    (1<<4)628 629struct acpi_iort_pmcg {630	u64 page0_base_address;631	u32 overflow_gsiv;632	u32 node_reference;633	u64 page1_base_address;634};635 636struct acpi_iort_rmr {637	u32 flags;638	u32 rmr_count;639	u32 rmr_offset;640};641 642/* Masks for Flags field above */643#define ACPI_IORT_RMR_REMAP_PERMITTED      (1)644#define ACPI_IORT_RMR_ACCESS_PRIVILEGE     (1<<1)645 646/*647 * Macro to access the Access Attributes in flags field above:648 *  Access Attributes is encoded in bits 9:2649 */650#define ACPI_IORT_RMR_ACCESS_ATTRIBUTES(flags)          (((flags) >> 2) & 0xFF)651 652/* Values for above Access Attributes */653 654#define ACPI_IORT_RMR_ATTR_DEVICE_NGNRNE   0x00655#define ACPI_IORT_RMR_ATTR_DEVICE_NGNRE    0x01656#define ACPI_IORT_RMR_ATTR_DEVICE_NGRE     0x02657#define ACPI_IORT_RMR_ATTR_DEVICE_GRE      0x03658#define ACPI_IORT_RMR_ATTR_NORMAL_NC       0x04659#define ACPI_IORT_RMR_ATTR_NORMAL_IWB_OWB  0x05660 661struct acpi_iort_rmr_desc {662	u64 base_address;663	u64 length;664	u32 reserved;665};666 667/*******************************************************************************668 *669 * IVRS - I/O Virtualization Reporting Structure670 *        Version 1671 *672 * Conforms to "AMD I/O Virtualization Technology (IOMMU) Specification",673 * Revision 1.26, February 2009.674 *675 ******************************************************************************/676 677struct acpi_table_ivrs {678	struct acpi_table_header header;	/* Common ACPI table header */679	u32 info;		/* Common virtualization info */680	u64 reserved;681};682 683/* Values for Info field above */684 685#define ACPI_IVRS_PHYSICAL_SIZE     0x00007F00	/* 7 bits, physical address size */686#define ACPI_IVRS_VIRTUAL_SIZE      0x003F8000	/* 7 bits, virtual address size */687#define ACPI_IVRS_ATS_RESERVED      0x00400000	/* ATS address translation range reserved */688 689/* IVRS subtable header */690 691struct acpi_ivrs_header {692	u8 type;		/* Subtable type */693	u8 flags;694	u16 length;		/* Subtable length */695	u16 device_id;		/* ID of IOMMU */696};697 698/* Values for subtable Type above */699 700enum acpi_ivrs_type {701	ACPI_IVRS_TYPE_HARDWARE1 = 0x10,702	ACPI_IVRS_TYPE_HARDWARE2 = 0x11,703	ACPI_IVRS_TYPE_HARDWARE3 = 0x40,704	ACPI_IVRS_TYPE_MEMORY1 = 0x20,705	ACPI_IVRS_TYPE_MEMORY2 = 0x21,706	ACPI_IVRS_TYPE_MEMORY3 = 0x22707};708 709/* Masks for Flags field above for IVHD subtable */710 711#define ACPI_IVHD_TT_ENABLE         (1)712#define ACPI_IVHD_PASS_PW           (1<<1)713#define ACPI_IVHD_RES_PASS_PW       (1<<2)714#define ACPI_IVHD_ISOC              (1<<3)715#define ACPI_IVHD_IOTLB             (1<<4)716 717/* Masks for Flags field above for IVMD subtable */718 719#define ACPI_IVMD_UNITY             (1)720#define ACPI_IVMD_READ              (1<<1)721#define ACPI_IVMD_WRITE             (1<<2)722#define ACPI_IVMD_EXCLUSION_RANGE   (1<<3)723 724/*725 * IVRS subtables, correspond to Type in struct acpi_ivrs_header726 */727 728/* 0x10: I/O Virtualization Hardware Definition Block (IVHD) */729 730struct acpi_ivrs_hardware_10 {731	struct acpi_ivrs_header header;732	u16 capability_offset;	/* Offset for IOMMU control fields */733	u64 base_address;	/* IOMMU control registers */734	u16 pci_segment_group;735	u16 info;		/* MSI number and unit ID */736	u32 feature_reporting;737};738 739/* 0x11: I/O Virtualization Hardware Definition Block (IVHD) */740 741struct acpi_ivrs_hardware_11 {742	struct acpi_ivrs_header header;743	u16 capability_offset;	/* Offset for IOMMU control fields */744	u64 base_address;	/* IOMMU control registers */745	u16 pci_segment_group;746	u16 info;		/* MSI number and unit ID */747	u32 attributes;748	u64 efr_register_image;749	u64 reserved;750};751 752/* Masks for Info field above */753 754#define ACPI_IVHD_MSI_NUMBER_MASK   0x001F	/* 5 bits, MSI message number */755#define ACPI_IVHD_UNIT_ID_MASK      0x1F00	/* 5 bits, unit_ID */756 757/*758 * Device Entries for IVHD subtable, appear after struct acpi_ivrs_hardware structure.759 * Upper two bits of the Type field are the (encoded) length of the structure.760 * Currently, only 4 and 8 byte entries are defined. 16 and 32 byte entries761 * are reserved for future use but not defined.762 */763struct acpi_ivrs_de_header {764	u8 type;765	u16 id;766	u8 data_setting;767};768 769/* Length of device entry is in the top two bits of Type field above */770 771#define ACPI_IVHD_ENTRY_LENGTH      0xC0772 773/* Values for device entry Type field above */774 775enum acpi_ivrs_device_entry_type {776	/* 4-byte device entries, all use struct acpi_ivrs_device4 */777 778	ACPI_IVRS_TYPE_PAD4 = 0,779	ACPI_IVRS_TYPE_ALL = 1,780	ACPI_IVRS_TYPE_SELECT = 2,781	ACPI_IVRS_TYPE_START = 3,782	ACPI_IVRS_TYPE_END = 4,783 784	/* 8-byte device entries */785 786	ACPI_IVRS_TYPE_PAD8 = 64,787	ACPI_IVRS_TYPE_NOT_USED = 65,788	ACPI_IVRS_TYPE_ALIAS_SELECT = 66,	/* Uses struct acpi_ivrs_device8a */789	ACPI_IVRS_TYPE_ALIAS_START = 67,	/* Uses struct acpi_ivrs_device8a */790	ACPI_IVRS_TYPE_EXT_SELECT = 70,	/* Uses struct acpi_ivrs_device8b */791	ACPI_IVRS_TYPE_EXT_START = 71,	/* Uses struct acpi_ivrs_device8b */792	ACPI_IVRS_TYPE_SPECIAL = 72,	/* Uses struct acpi_ivrs_device8c */793 794	/* Variable-length device entries */795 796	ACPI_IVRS_TYPE_HID = 240	/* Uses ACPI_IVRS_DEVICE_HID */797};798 799/* Values for Data field above */800 801#define ACPI_IVHD_INIT_PASS         (1)802#define ACPI_IVHD_EINT_PASS         (1<<1)803#define ACPI_IVHD_NMI_PASS          (1<<2)804#define ACPI_IVHD_SYSTEM_MGMT       (3<<4)805#define ACPI_IVHD_LINT0_PASS        (1<<6)806#define ACPI_IVHD_LINT1_PASS        (1<<7)807 808/* Types 0-4: 4-byte device entry */809 810struct acpi_ivrs_device4 {811	struct acpi_ivrs_de_header header;812};813 814/* Types 66-67: 8-byte device entry */815 816struct acpi_ivrs_device8a {817	struct acpi_ivrs_de_header header;818	u8 reserved1;819	u16 used_id;820	u8 reserved2;821};822 823/* Types 70-71: 8-byte device entry */824 825struct acpi_ivrs_device8b {826	struct acpi_ivrs_de_header header;827	u32 extended_data;828};829 830/* Values for extended_data above */831 832#define ACPI_IVHD_ATS_DISABLED      (1<<31)833 834/* Type 72: 8-byte device entry */835 836struct acpi_ivrs_device8c {837	struct acpi_ivrs_de_header header;838	u8 handle;839	u16 used_id;840	u8 variety;841};842 843/* Values for Variety field above */844 845#define ACPI_IVHD_IOAPIC            1846#define ACPI_IVHD_HPET              2847 848/* Type 240: variable-length device entry */849 850struct acpi_ivrs_device_hid {851	struct acpi_ivrs_de_header header;852	u64 acpi_hid;853	u64 acpi_cid;854	u8 uid_type;855	u8 uid_length;856};857 858/* Values for uid_type above */859 860#define ACPI_IVRS_UID_NOT_PRESENT   0861#define ACPI_IVRS_UID_IS_INTEGER    1862#define ACPI_IVRS_UID_IS_STRING     2863 864/* 0x20, 0x21, 0x22: I/O Virtualization Memory Definition Block (IVMD) */865 866struct acpi_ivrs_memory {867	struct acpi_ivrs_header header;868	u16 aux_data;869	u64 reserved;870	u64 start_address;871	u64 memory_length;872};873 874/*******************************************************************************875 *876 * LPIT - Low Power Idle Table877 *878 * Conforms to "ACPI Low Power Idle Table (LPIT)" July 2014.879 *880 ******************************************************************************/881 882struct acpi_table_lpit {883	struct acpi_table_header header;	/* Common ACPI table header */884};885 886/* LPIT subtable header */887 888struct acpi_lpit_header {889	u32 type;		/* Subtable type */890	u32 length;		/* Subtable length */891	u16 unique_id;892	u16 reserved;893	u32 flags;894};895 896/* Values for subtable Type above */897 898enum acpi_lpit_type {899	ACPI_LPIT_TYPE_NATIVE_CSTATE = 0x00,900	ACPI_LPIT_TYPE_RESERVED = 0x01	/* 1 and above are reserved */901};902 903/* Masks for Flags field above  */904 905#define ACPI_LPIT_STATE_DISABLED    (1)906#define ACPI_LPIT_NO_COUNTER        (1<<1)907 908/*909 * LPIT subtables, correspond to Type in struct acpi_lpit_header910 */911 912/* 0x00: Native C-state instruction based LPI structure */913 914struct acpi_lpit_native {915	struct acpi_lpit_header header;916	struct acpi_generic_address entry_trigger;917	u32 residency;918	u32 latency;919	struct acpi_generic_address residency_counter;920	u64 counter_frequency;921};922 923/*******************************************************************************924 *925 * MADT - Multiple APIC Description Table926 *        Version 3927 *928 ******************************************************************************/929 930struct acpi_table_madt {931	struct acpi_table_header header;	/* Common ACPI table header */932	u32 address;		/* Physical address of local APIC */933	u32 flags;934};935 936/* Masks for Flags field above */937 938#define ACPI_MADT_PCAT_COMPAT       (1)	/* 00: System also has dual 8259s */939 940/* Values for PCATCompat flag */941 942#define ACPI_MADT_DUAL_PIC          1943#define ACPI_MADT_MULTIPLE_APIC     0944 945/* Values for MADT subtable type in struct acpi_subtable_header */946 947enum acpi_madt_type {948	ACPI_MADT_TYPE_LOCAL_APIC = 0,949	ACPI_MADT_TYPE_IO_APIC = 1,950	ACPI_MADT_TYPE_INTERRUPT_OVERRIDE = 2,951	ACPI_MADT_TYPE_NMI_SOURCE = 3,952	ACPI_MADT_TYPE_LOCAL_APIC_NMI = 4,953	ACPI_MADT_TYPE_LOCAL_APIC_OVERRIDE = 5,954	ACPI_MADT_TYPE_IO_SAPIC = 6,955	ACPI_MADT_TYPE_LOCAL_SAPIC = 7,956	ACPI_MADT_TYPE_INTERRUPT_SOURCE = 8,957	ACPI_MADT_TYPE_LOCAL_X2APIC = 9,958	ACPI_MADT_TYPE_LOCAL_X2APIC_NMI = 10,959	ACPI_MADT_TYPE_GENERIC_INTERRUPT = 11,960	ACPI_MADT_TYPE_GENERIC_DISTRIBUTOR = 12,961	ACPI_MADT_TYPE_GENERIC_MSI_FRAME = 13,962	ACPI_MADT_TYPE_GENERIC_REDISTRIBUTOR = 14,963	ACPI_MADT_TYPE_GENERIC_TRANSLATOR = 15,964	ACPI_MADT_TYPE_MULTIPROC_WAKEUP = 16,965	ACPI_MADT_TYPE_CORE_PIC = 17,966	ACPI_MADT_TYPE_LIO_PIC = 18,967	ACPI_MADT_TYPE_HT_PIC = 19,968	ACPI_MADT_TYPE_EIO_PIC = 20,969	ACPI_MADT_TYPE_MSI_PIC = 21,970	ACPI_MADT_TYPE_BIO_PIC = 22,971	ACPI_MADT_TYPE_LPC_PIC = 23,972	ACPI_MADT_TYPE_RINTC = 24,973	ACPI_MADT_TYPE_IMSIC = 25,974	ACPI_MADT_TYPE_APLIC = 26,975	ACPI_MADT_TYPE_PLIC = 27,976	ACPI_MADT_TYPE_RESERVED = 28,	/* 28 to 0x7F are reserved */977	ACPI_MADT_TYPE_OEM_RESERVED = 0x80	/* 0x80 to 0xFF are reserved for OEM use */978};979 980/*981 * MADT Subtables, correspond to Type in struct acpi_subtable_header982 */983 984/* 0: Processor Local APIC */985 986struct acpi_madt_local_apic {987	struct acpi_subtable_header header;988	u8 processor_id;	/* ACPI processor id */989	u8 id;			/* Processor's local APIC id */990	u32 lapic_flags;991};992 993/* 1: IO APIC */994 995struct acpi_madt_io_apic {996	struct acpi_subtable_header header;997	u8 id;			/* I/O APIC ID */998	u8 reserved;		/* reserved - must be zero */999	u32 address;		/* APIC physical address */1000	u32 global_irq_base;	/* Global system interrupt where INTI lines start */1001};1002 1003/* 2: Interrupt Override */1004 1005struct acpi_madt_interrupt_override {1006	struct acpi_subtable_header header;1007	u8 bus;			/* 0 - ISA */1008	u8 source_irq;		/* Interrupt source (IRQ) */1009	u32 global_irq;		/* Global system interrupt */1010	u16 inti_flags;1011};1012 1013/* 3: NMI Source */1014 1015struct acpi_madt_nmi_source {1016	struct acpi_subtable_header header;1017	u16 inti_flags;1018	u32 global_irq;		/* Global system interrupt */1019};1020 1021/* 4: Local APIC NMI */1022 1023struct acpi_madt_local_apic_nmi {1024	struct acpi_subtable_header header;1025	u8 processor_id;	/* ACPI processor id */1026	u16 inti_flags;1027	u8 lint;		/* LINTn to which NMI is connected */1028};1029 1030/* 5: Address Override */1031 1032struct acpi_madt_local_apic_override {1033	struct acpi_subtable_header header;1034	u16 reserved;		/* Reserved, must be zero */1035	u64 address;		/* APIC physical address */1036};1037 1038/* 6: I/O Sapic */1039 1040struct acpi_madt_io_sapic {1041	struct acpi_subtable_header header;1042	u8 id;			/* I/O SAPIC ID */1043	u8 reserved;		/* Reserved, must be zero */1044	u32 global_irq_base;	/* Global interrupt for SAPIC start */1045	u64 address;		/* SAPIC physical address */1046};1047 1048/* 7: Local Sapic */1049 1050struct acpi_madt_local_sapic {1051	struct acpi_subtable_header header;1052	u8 processor_id;	/* ACPI processor id */1053	u8 id;			/* SAPIC ID */1054	u8 eid;			/* SAPIC EID */1055	u8 reserved[3];		/* Reserved, must be zero */1056	u32 lapic_flags;1057	u32 uid;		/* Numeric UID - ACPI 3.0 */1058	char uid_string[];	/* String UID  - ACPI 3.0 */1059};1060 1061/* 8: Platform Interrupt Source */1062 1063struct acpi_madt_interrupt_source {1064	struct acpi_subtable_header header;1065	u16 inti_flags;1066	u8 type;		/* 1=PMI, 2=INIT, 3=corrected */1067	u8 id;			/* Processor ID */1068	u8 eid;			/* Processor EID */1069	u8 io_sapic_vector;	/* Vector value for PMI interrupts */1070	u32 global_irq;		/* Global system interrupt */1071	u32 flags;		/* Interrupt Source Flags */1072};1073 1074/* Masks for Flags field above */1075 1076#define ACPI_MADT_CPEI_OVERRIDE     (1)1077 1078/* 9: Processor Local X2APIC (ACPI 4.0) */1079 1080struct acpi_madt_local_x2apic {1081	struct acpi_subtable_header header;1082	u16 reserved;		/* reserved - must be zero */1083	u32 local_apic_id;	/* Processor x2APIC ID  */1084	u32 lapic_flags;1085	u32 uid;		/* ACPI processor UID */1086};1087 1088/* 10: Local X2APIC NMI (ACPI 4.0) */1089 1090struct acpi_madt_local_x2apic_nmi {1091	struct acpi_subtable_header header;1092	u16 inti_flags;1093	u32 uid;		/* ACPI processor UID */1094	u8 lint;		/* LINTn to which NMI is connected */1095	u8 reserved[3];		/* reserved - must be zero */1096};1097 1098/* 11: Generic interrupt - GICC (ACPI 5.0 + ACPI 6.0 + ACPI 6.3 + ACPI 6.5 changes) */1099 1100struct acpi_madt_generic_interrupt {1101	struct acpi_subtable_header header;1102	u16 reserved;		/* reserved - must be zero */1103	u32 cpu_interface_number;1104	u32 uid;1105	u32 flags;1106	u32 parking_version;1107	u32 performance_interrupt;1108	u64 parked_address;1109	u64 base_address;1110	u64 gicv_base_address;1111	u64 gich_base_address;1112	u32 vgic_interrupt;1113	u64 gicr_base_address;1114	u64 arm_mpidr;1115	u8 efficiency_class;1116	u8 reserved2[1];1117	u16 spe_interrupt;	/* ACPI 6.3 */1118	u16 trbe_interrupt;	/* ACPI 6.5 */1119};1120 1121/* Masks for Flags field above */1122 1123/* ACPI_MADT_ENABLED                    (1)      Processor is usable if set */1124#define ACPI_MADT_PERFORMANCE_IRQ_MODE  (1<<1)	/* 01: Performance Interrupt Mode */1125#define ACPI_MADT_VGIC_IRQ_MODE         (1<<2)	/* 02: VGIC Maintenance Interrupt mode */1126#define ACPI_MADT_GICC_ONLINE_CAPABLE   (1<<3)	/* 03: Processor is online capable  */1127#define ACPI_MADT_GICC_NON_COHERENT     (1<<4)	/* 04: GIC redistributor is not coherent */1128 1129/* 12: Generic Distributor (ACPI 5.0 + ACPI 6.0 changes) */1130 1131struct acpi_madt_generic_distributor {1132	struct acpi_subtable_header header;1133	u16 reserved;		/* reserved - must be zero */1134	u32 gic_id;1135	u64 base_address;1136	u32 global_irq_base;1137	u8 version;1138	u8 reserved2[3];	/* reserved - must be zero */1139};1140 1141/* Values for Version field above */1142 1143enum acpi_madt_gic_version {1144	ACPI_MADT_GIC_VERSION_NONE = 0,1145	ACPI_MADT_GIC_VERSION_V1 = 1,1146	ACPI_MADT_GIC_VERSION_V2 = 2,1147	ACPI_MADT_GIC_VERSION_V3 = 3,1148	ACPI_MADT_GIC_VERSION_V4 = 4,1149	ACPI_MADT_GIC_VERSION_RESERVED = 5	/* 5 and greater are reserved */1150};1151 1152/* 13: Generic MSI Frame (ACPI 5.1) */1153 1154struct acpi_madt_generic_msi_frame {1155	struct acpi_subtable_header header;1156	u16 reserved;		/* reserved - must be zero */1157	u32 msi_frame_id;1158	u64 base_address;1159	u32 flags;1160	u16 spi_count;1161	u16 spi_base;1162};1163 1164/* Masks for Flags field above */1165 1166#define ACPI_MADT_OVERRIDE_SPI_VALUES   (1)1167 1168/* 14: Generic Redistributor (ACPI 5.1) */1169 1170struct acpi_madt_generic_redistributor {1171	struct acpi_subtable_header header;1172	u8 flags;1173	u8 reserved;		/* reserved - must be zero */1174	u64 base_address;1175	u32 length;1176};1177 1178#define ACPI_MADT_GICR_NON_COHERENT     (1)1179 1180/* 15: Generic Translator (ACPI 6.0) */1181 1182struct acpi_madt_generic_translator {1183	struct acpi_subtable_header header;1184	u8 flags;1185	u8 reserved;		/* reserved - must be zero */1186	u32 translation_id;1187	u64 base_address;1188	u32 reserved2;1189};1190 1191#define ACPI_MADT_ITS_NON_COHERENT      (1)1192 1193/* 16: Multiprocessor wakeup (ACPI 6.4) */1194 1195struct acpi_madt_multiproc_wakeup {1196	struct acpi_subtable_header header;1197	u16 version;1198	u32 reserved;		/* reserved - must be zero */1199	u64 mailbox_address;1200	u64 reset_vector;1201};1202 1203/* Values for Version field above */1204 1205enum acpi_madt_multiproc_wakeup_version {1206	ACPI_MADT_MP_WAKEUP_VERSION_NONE = 0,1207	ACPI_MADT_MP_WAKEUP_VERSION_V1 = 1,1208	ACPI_MADT_MP_WAKEUP_VERSION_RESERVED = 2, /* 2 and greater are reserved */1209};1210 1211#define ACPI_MADT_MP_WAKEUP_SIZE_V0	161212#define ACPI_MADT_MP_WAKEUP_SIZE_V1	241213 1214#define ACPI_MULTIPROC_WAKEUP_MB_OS_SIZE        20321215#define ACPI_MULTIPROC_WAKEUP_MB_FIRMWARE_SIZE  20481216 1217struct acpi_madt_multiproc_wakeup_mailbox {1218	u16 command;1219	u16 reserved;		/* reserved - must be zero */1220	u32 apic_id;1221	u64 wakeup_vector;1222	u8 reserved_os[ACPI_MULTIPROC_WAKEUP_MB_OS_SIZE];	/* reserved for OS use */1223	u8 reserved_firmware[ACPI_MULTIPROC_WAKEUP_MB_FIRMWARE_SIZE];	/* reserved for firmware use */1224};1225 1226#define ACPI_MP_WAKE_COMMAND_WAKEUP	11227#define ACPI_MP_WAKE_COMMAND_TEST	21228 1229/* 17: CPU Core Interrupt Controller (ACPI 6.5) */1230 1231struct acpi_madt_core_pic {1232	struct acpi_subtable_header header;1233	u8 version;1234	u32 processor_id;1235	u32 core_id;1236	u32 flags;1237};1238 1239/* Values for Version field above */1240 1241enum acpi_madt_core_pic_version {1242	ACPI_MADT_CORE_PIC_VERSION_NONE = 0,1243	ACPI_MADT_CORE_PIC_VERSION_V1 = 1,1244	ACPI_MADT_CORE_PIC_VERSION_RESERVED = 2	/* 2 and greater are reserved */1245};1246 1247/* 18: Legacy I/O Interrupt Controller (ACPI 6.5) */1248 1249struct acpi_madt_lio_pic {1250	struct acpi_subtable_header header;1251	u8 version;1252	u64 address;1253	u16 size;1254	u8 cascade[2];1255	u32 cascade_map[2];1256};1257 1258/* Values for Version field above */1259 1260enum acpi_madt_lio_pic_version {1261	ACPI_MADT_LIO_PIC_VERSION_NONE = 0,1262	ACPI_MADT_LIO_PIC_VERSION_V1 = 1,1263	ACPI_MADT_LIO_PIC_VERSION_RESERVED = 2	/* 2 and greater are reserved */1264};1265 1266/* 19: HT Interrupt Controller (ACPI 6.5) */1267 1268struct acpi_madt_ht_pic {1269	struct acpi_subtable_header header;1270	u8 version;1271	u64 address;1272	u16 size;1273	u8 cascade[8];1274};1275 1276/* Values for Version field above */1277 1278enum acpi_madt_ht_pic_version {1279	ACPI_MADT_HT_PIC_VERSION_NONE = 0,1280	ACPI_MADT_HT_PIC_VERSION_V1 = 1,1281	ACPI_MADT_HT_PIC_VERSION_RESERVED = 2	/* 2 and greater are reserved */1282};1283 1284/* 20: Extend I/O Interrupt Controller (ACPI 6.5) */1285 1286struct acpi_madt_eio_pic {1287	struct acpi_subtable_header header;1288	u8 version;1289	u8 cascade;1290	u8 node;1291	u64 node_map;1292};1293 1294/* Values for Version field above */1295 1296enum acpi_madt_eio_pic_version {1297	ACPI_MADT_EIO_PIC_VERSION_NONE = 0,1298	ACPI_MADT_EIO_PIC_VERSION_V1 = 1,1299	ACPI_MADT_EIO_PIC_VERSION_RESERVED = 2	/* 2 and greater are reserved */1300};1301 1302/* 21: MSI Interrupt Controller (ACPI 6.5) */1303 1304struct acpi_madt_msi_pic {1305	struct acpi_subtable_header header;1306	u8 version;1307	u64 msg_address;1308	u32 start;1309	u32 count;1310};1311 1312/* Values for Version field above */1313 1314enum acpi_madt_msi_pic_version {1315	ACPI_MADT_MSI_PIC_VERSION_NONE = 0,1316	ACPI_MADT_MSI_PIC_VERSION_V1 = 1,1317	ACPI_MADT_MSI_PIC_VERSION_RESERVED = 2	/* 2 and greater are reserved */1318};1319 1320/* 22: Bridge I/O Interrupt Controller (ACPI 6.5) */1321 1322struct acpi_madt_bio_pic {1323	struct acpi_subtable_header header;1324	u8 version;1325	u64 address;1326	u16 size;1327	u16 id;1328	u16 gsi_base;1329};1330 1331/* Values for Version field above */1332 1333enum acpi_madt_bio_pic_version {1334	ACPI_MADT_BIO_PIC_VERSION_NONE = 0,1335	ACPI_MADT_BIO_PIC_VERSION_V1 = 1,1336	ACPI_MADT_BIO_PIC_VERSION_RESERVED = 2	/* 2 and greater are reserved */1337};1338 1339/* 23: LPC Interrupt Controller (ACPI 6.5) */1340 1341struct acpi_madt_lpc_pic {1342	struct acpi_subtable_header header;1343	u8 version;1344	u64 address;1345	u16 size;1346	u8 cascade;1347};1348 1349/* Values for Version field above */1350 1351enum acpi_madt_lpc_pic_version {1352	ACPI_MADT_LPC_PIC_VERSION_NONE = 0,1353	ACPI_MADT_LPC_PIC_VERSION_V1 = 1,1354	ACPI_MADT_LPC_PIC_VERSION_RESERVED = 2	/* 2 and greater are reserved */1355};1356 1357/* 24: RISC-V INTC */1358struct acpi_madt_rintc {1359	struct acpi_subtable_header header;1360	u8 version;1361	u8 reserved;1362	u32 flags;1363	u64 hart_id;1364	u32 uid;		/* ACPI processor UID */1365	u32 ext_intc_id;	/* External INTC Id */1366	u64 imsic_addr;		/* IMSIC base address */1367	u32 imsic_size;		/* IMSIC size */1368};1369 1370/* Values for RISC-V INTC Version field above */1371 1372enum acpi_madt_rintc_version {1373	ACPI_MADT_RINTC_VERSION_NONE = 0,1374	ACPI_MADT_RINTC_VERSION_V1 = 1,1375	ACPI_MADT_RINTC_VERSION_RESERVED = 2	/* 2 and greater are reserved */1376};1377 1378/* 25: RISC-V IMSIC */1379struct acpi_madt_imsic {1380	struct acpi_subtable_header header;1381	u8 version;1382	u8 reserved;1383	u32 flags;1384	u16 num_ids;1385	u16 num_guest_ids;1386	u8 guest_index_bits;1387	u8 hart_index_bits;1388	u8 group_index_bits;1389	u8 group_index_shift;1390};1391 1392/* 26: RISC-V APLIC */1393struct acpi_madt_aplic {1394	struct acpi_subtable_header header;1395	u8 version;1396	u8 id;1397	u32 flags;1398	u8 hw_id[8];1399	u16 num_idcs;1400	u16 num_sources;1401	u32 gsi_base;1402	u64 base_addr;1403	u32 size;1404};1405 1406/* 27: RISC-V PLIC */1407struct acpi_madt_plic {1408	struct acpi_subtable_header header;1409	u8 version;1410	u8 id;1411	u8 hw_id[8];1412	u16 num_irqs;1413	u16 max_prio;1414	u32 flags;1415	u32 size;1416	u64 base_addr;1417	u32 gsi_base;1418};1419 1420/* 80: OEM data */1421 1422struct acpi_madt_oem_data {1423	ACPI_FLEX_ARRAY(u8, oem_data);1424};1425 1426/*1427 * Common flags fields for MADT subtables1428 */1429 1430/* MADT Local APIC flags */1431 1432#define ACPI_MADT_ENABLED           (1)	/* 00: Processor is usable if set */1433#define ACPI_MADT_ONLINE_CAPABLE    (2)	/* 01: System HW supports enabling processor at runtime */1434 1435/* MADT MPS INTI flags (inti_flags) */1436 1437#define ACPI_MADT_POLARITY_MASK     (3)	/* 00-01: Polarity of APIC I/O input signals */1438#define ACPI_MADT_TRIGGER_MASK      (3<<2)	/* 02-03: Trigger mode of APIC input signals */1439 1440/* Values for MPS INTI flags */1441 1442#define ACPI_MADT_POLARITY_CONFORMS       01443#define ACPI_MADT_POLARITY_ACTIVE_HIGH    11444#define ACPI_MADT_POLARITY_RESERVED       21445#define ACPI_MADT_POLARITY_ACTIVE_LOW     31446 1447#define ACPI_MADT_TRIGGER_CONFORMS        (0)1448#define ACPI_MADT_TRIGGER_EDGE            (1<<2)1449#define ACPI_MADT_TRIGGER_RESERVED        (2<<2)1450#define ACPI_MADT_TRIGGER_LEVEL           (3<<2)1451 1452/*******************************************************************************1453 *1454 * MCFG - PCI Memory Mapped Configuration table and subtable1455 *        Version 11456 *1457 * Conforms to "PCI Firmware Specification", Revision 3.0, June 20, 20051458 *1459 ******************************************************************************/1460 1461struct acpi_table_mcfg {1462	struct acpi_table_header header;	/* Common ACPI table header */1463	u8 reserved[8];1464};1465 1466/* Subtable */1467 1468struct acpi_mcfg_allocation {1469	u64 address;		/* Base address, processor-relative */1470	u16 pci_segment;	/* PCI segment group number */1471	u8 start_bus_number;	/* Starting PCI Bus number */1472	u8 end_bus_number;	/* Final PCI Bus number */1473	u32 reserved;1474};1475 1476/*******************************************************************************1477 *1478 * MCHI - Management Controller Host Interface Table1479 *        Version 11480 *1481 * Conforms to "Management Component Transport Protocol (MCTP) Host1482 * Interface Specification", Revision 1.0.0a, October 13, 20091483 *1484 ******************************************************************************/1485 1486struct acpi_table_mchi {1487	struct acpi_table_header header;	/* Common ACPI table header */1488	u8 interface_type;1489	u8 protocol;1490	u64 protocol_data;1491	u8 interrupt_type;1492	u8 gpe;1493	u8 pci_device_flag;1494	u32 global_interrupt;1495	struct acpi_generic_address control_register;1496	u8 pci_segment;1497	u8 pci_bus;1498	u8 pci_device;1499	u8 pci_function;1500};1501 1502/*******************************************************************************1503 *1504 * MPAM - Memory System Resource Partitioning and Monitoring1505 *1506 * Conforms to "ACPI for Memory System Resource Partitioning and Monitoring 2.0"1507 * Document number: ARM DEN 0065, December, 2022.1508 *1509 ******************************************************************************/1510 1511/* MPAM RIS locator types. Table 11, Location types */1512enum acpi_mpam_locator_type {1513	ACPI_MPAM_LOCATION_TYPE_PROCESSOR_CACHE = 0,1514	ACPI_MPAM_LOCATION_TYPE_MEMORY = 1,1515	ACPI_MPAM_LOCATION_TYPE_SMMU = 2,1516	ACPI_MPAM_LOCATION_TYPE_MEMORY_CACHE = 3,1517	ACPI_MPAM_LOCATION_TYPE_ACPI_DEVICE = 4,1518	ACPI_MPAM_LOCATION_TYPE_INTERCONNECT = 5,1519	ACPI_MPAM_LOCATION_TYPE_UNKNOWN = 0xFF1520};1521 1522/* MPAM Functional dependency descriptor. Table 10 */1523struct acpi_mpam_func_deps {1524	u32 producer;1525	u32 reserved;1526};1527 1528/* MPAM Processor cache locator descriptor. Table 13 */1529struct acpi_mpam_resource_cache_locator {1530	u64 cache_reference;1531	u32 reserved;1532};1533 1534/* MPAM Memory locator descriptor. Table 14 */1535struct acpi_mpam_resource_memory_locator {1536	u64 proximity_domain;1537	u32 reserved;1538};1539 1540/* MPAM SMMU locator descriptor. Table 15 */1541struct acpi_mpam_resource_smmu_locator {1542	u64 smmu_interface;1543	u32 reserved;1544};1545 1546/* MPAM Memory-side cache locator descriptor. Table 16 */1547struct acpi_mpam_resource_memcache_locator {1548	u8 reserved[7];1549	u8 level;1550	u32 reference;1551};1552 1553/* MPAM ACPI device locator descriptor. Table 17 */1554struct acpi_mpam_resource_acpi_locator {1555	u64 acpi_hw_id;1556	u32 acpi_unique_id;1557};1558 1559/* MPAM Interconnect locator descriptor. Table 18 */1560struct acpi_mpam_resource_interconnect_locator {1561	u64 inter_connect_desc_tbl_off;1562	u32 reserved;1563};1564 1565/* MPAM Locator structure. Table 12 */1566struct acpi_mpam_resource_generic_locator {1567	u64 descriptor1;1568	u32 descriptor2;1569};1570 1571union acpi_mpam_resource_locator {1572	struct acpi_mpam_resource_cache_locator cache_locator;1573	struct acpi_mpam_resource_memory_locator memory_locator;1574	struct acpi_mpam_resource_smmu_locator smmu_locator;1575	struct acpi_mpam_resource_memcache_locator mem_cache_locator;1576	struct acpi_mpam_resource_acpi_locator acpi_locator;1577	struct acpi_mpam_resource_interconnect_locator interconnect_ifc_locator;1578	struct acpi_mpam_resource_generic_locator generic_locator;1579};1580 1581/* Memory System Component Resource Node Structure Table 9 */1582struct acpi_mpam_resource_node {1583	u32 identifier;1584	u8 ris_index;1585	u16 reserved1;1586	u8 locator_type;1587	union acpi_mpam_resource_locator locator;1588	u32 num_functional_deps;1589};1590 1591/* Memory System Component (MSC) Node Structure. Table 4 */1592struct acpi_mpam_msc_node {1593	u16 length;1594	u8 interface_type;1595	u8 reserved;1596	u32 identifier;1597	u64 base_address;1598	u32 mmio_size;1599	u32 overflow_interrupt;1600	u32 overflow_interrupt_flags;1601	u32 reserved1;1602	u32 overflow_interrupt_affinity;1603	u32 error_interrupt;1604	u32 error_interrupt_flags;1605	u32 reserved2;1606	u32 error_interrupt_affinity;1607	u32 max_nrdy_usec;1608	u64 hardware_id_linked_device;1609	u32 instance_id_linked_device;1610	u32 num_resource_nodes;1611};1612 1613struct acpi_table_mpam {1614	struct acpi_table_header header;	/* Common ACPI table header */1615};1616 1617/*******************************************************************************1618 *1619 * MPST - Memory Power State Table (ACPI 5.0)1620 *        Version 11621 *1622 ******************************************************************************/1623 1624#define ACPI_MPST_CHANNEL_INFO \1625	u8                              channel_id; \1626	u8                              reserved1[3]; \1627	u16                             power_node_count; \1628	u16                             reserved2;1629 1630/* Main table */1631 1632struct acpi_table_mpst {1633	struct acpi_table_header header;	/* Common ACPI table header */1634	 ACPI_MPST_CHANNEL_INFO	/* Platform Communication Channel */1635};1636 1637/* Memory Platform Communication Channel Info */1638 1639struct acpi_mpst_channel {1640	ACPI_MPST_CHANNEL_INFO	/* Platform Communication Channel */1641};1642 1643/* Memory Power Node Structure */1644 1645struct acpi_mpst_power_node {1646	u8 flags;1647	u8 reserved1;1648	u16 node_id;1649	u32 length;1650	u64 range_address;1651	u64 range_length;1652	u32 num_power_states;1653	u32 num_physical_components;1654};1655 1656/* Values for Flags field above */1657 1658#define ACPI_MPST_ENABLED               11659#define ACPI_MPST_POWER_MANAGED         21660#define ACPI_MPST_HOT_PLUG_CAPABLE      41661 1662/* Memory Power State Structure (follows POWER_NODE above) */1663 1664struct acpi_mpst_power_state {1665	u8 power_state;1666	u8 info_index;1667};1668 1669/* Physical Component ID Structure (follows POWER_STATE above) */1670 1671struct acpi_mpst_component {1672	u16 component_id;1673};1674 1675/* Memory Power State Characteristics Structure (follows all POWER_NODEs) */1676 1677struct acpi_mpst_data_hdr {1678	u16 characteristics_count;1679	u16 reserved;1680};1681 1682struct acpi_mpst_power_data {1683	u8 structure_id;1684	u8 flags;1685	u16 reserved1;1686	u32 average_power;1687	u32 power_saving;1688	u64 exit_latency;1689	u64 reserved2;1690};1691 1692/* Values for Flags field above */1693 1694#define ACPI_MPST_PRESERVE              11695#define ACPI_MPST_AUTOENTRY             21696#define ACPI_MPST_AUTOEXIT              41697 1698/* Shared Memory Region (not part of an ACPI table) */1699 1700struct acpi_mpst_shared {1701	u32 signature;1702	u16 pcc_command;1703	u16 pcc_status;1704	u32 command_register;1705	u32 status_register;1706	u32 power_state_id;1707	u32 power_node_id;1708	u64 energy_consumed;1709	u64 average_power;1710};1711 1712/*******************************************************************************1713 *1714 * MSCT - Maximum System Characteristics Table (ACPI 4.0)1715 *        Version 11716 *1717 ******************************************************************************/1718 1719struct acpi_table_msct {1720	struct acpi_table_header header;	/* Common ACPI table header */1721	u32 proximity_offset;	/* Location of proximity info struct(s) */1722	u32 max_proximity_domains;	/* Max number of proximity domains */1723	u32 max_clock_domains;	/* Max number of clock domains */1724	u64 max_address;	/* Max physical address in system */1725};1726 1727/* subtable - Maximum Proximity Domain Information. Version 1 */1728 1729struct acpi_msct_proximity {1730	u8 revision;1731	u8 length;1732	u32 range_start;	/* Start of domain range */1733	u32 range_end;		/* End of domain range */1734	u32 processor_capacity;1735	u64 memory_capacity;	/* In bytes */1736};1737 1738/*******************************************************************************1739 *1740 * MSDM - Microsoft Data Management table1741 *1742 * Conforms to "Microsoft Software Licensing Tables (SLIC and MSDM)",1743 * November 29, 2011. Copyright 2011 Microsoft1744 *1745 ******************************************************************************/1746 1747/* Basic MSDM table is only the common ACPI header */1748 1749struct acpi_table_msdm {1750	struct acpi_table_header header;	/* Common ACPI table header */1751};1752 1753/*******************************************************************************1754 *1755 * NFIT - NVDIMM Interface Table (ACPI 6.0+)1756 *        Version 11757 *1758 ******************************************************************************/1759 1760struct acpi_table_nfit {1761	struct acpi_table_header header;	/* Common ACPI table header */1762	u32 reserved;		/* Reserved, must be zero */1763};1764 1765/* Subtable header for NFIT */1766 1767struct acpi_nfit_header {1768	u16 type;1769	u16 length;1770};1771 1772/* Values for subtable type in struct acpi_nfit_header */1773 1774enum acpi_nfit_type {1775	ACPI_NFIT_TYPE_SYSTEM_ADDRESS = 0,1776	ACPI_NFIT_TYPE_MEMORY_MAP = 1,1777	ACPI_NFIT_TYPE_INTERLEAVE = 2,1778	ACPI_NFIT_TYPE_SMBIOS = 3,1779	ACPI_NFIT_TYPE_CONTROL_REGION = 4,1780	ACPI_NFIT_TYPE_DATA_REGION = 5,1781	ACPI_NFIT_TYPE_FLUSH_ADDRESS = 6,1782	ACPI_NFIT_TYPE_CAPABILITIES = 7,1783	ACPI_NFIT_TYPE_RESERVED = 8	/* 8 and greater are reserved */1784};1785 1786/*1787 * NFIT Subtables1788 */1789 1790/* 0: System Physical Address Range Structure */1791 1792struct acpi_nfit_system_address {1793	struct acpi_nfit_header header;1794	u16 range_index;1795	u16 flags;1796	u32 reserved;		/* Reserved, must be zero */1797	u32 proximity_domain;1798	u8 range_guid[16];1799	u64 address;1800	u64 length;1801	u64 memory_mapping;1802	u64 location_cookie;	/* ACPI 6.4 */1803};1804 1805/* Flags */1806 1807#define ACPI_NFIT_ADD_ONLINE_ONLY       (1)	/* 00: Add/Online Operation Only */1808#define ACPI_NFIT_PROXIMITY_VALID       (1<<1)	/* 01: Proximity Domain Valid */1809#define ACPI_NFIT_LOCATION_COOKIE_VALID (1<<2)	/* 02: SPA location cookie valid (ACPI 6.4) */1810 1811/* Range Type GUIDs appear in the include/acuuid.h file */1812 1813/* 1: Memory Device to System Address Range Map Structure */1814 1815struct acpi_nfit_memory_map {1816	struct acpi_nfit_header header;1817	u32 device_handle;1818	u16 physical_id;1819	u16 region_id;1820	u16 range_index;1821	u16 region_index;1822	u64 region_size;1823	u64 region_offset;1824	u64 address;1825	u16 interleave_index;1826	u16 interleave_ways;1827	u16 flags;1828	u16 reserved;		/* Reserved, must be zero */1829};1830 1831/* Flags */1832 1833#define ACPI_NFIT_MEM_SAVE_FAILED       (1)	/* 00: Last SAVE to Memory Device failed */1834#define ACPI_NFIT_MEM_RESTORE_FAILED    (1<<1)	/* 01: Last RESTORE from Memory Device failed */1835#define ACPI_NFIT_MEM_FLUSH_FAILED      (1<<2)	/* 02: Platform flush failed */1836#define ACPI_NFIT_MEM_NOT_ARMED         (1<<3)	/* 03: Memory Device is not armed */1837#define ACPI_NFIT_MEM_HEALTH_OBSERVED   (1<<4)	/* 04: Memory Device observed SMART/health events */1838#define ACPI_NFIT_MEM_HEALTH_ENABLED    (1<<5)	/* 05: SMART/health events enabled */1839#define ACPI_NFIT_MEM_MAP_FAILED        (1<<6)	/* 06: Mapping to SPA failed */1840 1841/* 2: Interleave Structure */1842 1843struct acpi_nfit_interleave {1844	struct acpi_nfit_header header;1845	u16 interleave_index;1846	u16 reserved;		/* Reserved, must be zero */1847	u32 line_count;1848	u32 line_size;1849	u32 line_offset[];	/* Variable length */1850};1851 1852/* 3: SMBIOS Management Information Structure */1853 1854struct acpi_nfit_smbios {1855	struct acpi_nfit_header header;1856	u32 reserved;		/* Reserved, must be zero */1857	u8 data[];		/* Variable length */1858};1859 1860/* 4: NVDIMM Control Region Structure */1861 1862struct acpi_nfit_control_region {1863	struct acpi_nfit_header header;1864	u16 region_index;1865	u16 vendor_id;1866	u16 device_id;1867	u16 revision_id;1868	u16 subsystem_vendor_id;1869	u16 subsystem_device_id;1870	u16 subsystem_revision_id;1871	u8 valid_fields;1872	u8 manufacturing_location;1873	u16 manufacturing_date;1874	u8 reserved[2];		/* Reserved, must be zero */1875	u32 serial_number;1876	u16 code;1877	u16 windows;1878	u64 window_size;1879	u64 command_offset;1880	u64 command_size;1881	u64 status_offset;1882	u64 status_size;1883	u16 flags;1884	u8 reserved1[6];	/* Reserved, must be zero */1885};1886 1887/* Flags */1888 1889#define ACPI_NFIT_CONTROL_BUFFERED          (1)	/* Block Data Windows implementation is buffered */1890 1891/* valid_fields bits */1892 1893#define ACPI_NFIT_CONTROL_MFG_INFO_VALID    (1)	/* Manufacturing fields are valid */1894 1895/* 5: NVDIMM Block Data Window Region Structure */1896 1897struct acpi_nfit_data_region {1898	struct acpi_nfit_header header;1899	u16 region_index;1900	u16 windows;1901	u64 offset;1902	u64 size;1903	u64 capacity;1904	u64 start_address;1905};1906 1907/* 6: Flush Hint Address Structure */1908 1909struct acpi_nfit_flush_address {1910	struct acpi_nfit_header header;1911	u32 device_handle;1912	u16 hint_count;1913	u8 reserved[6];		/* Reserved, must be zero */1914	u64 hint_address[];	/* Variable length */1915};1916 1917/* 7: Platform Capabilities Structure */1918 1919struct acpi_nfit_capabilities {1920	struct acpi_nfit_header header;1921	u8 highest_capability;1922	u8 reserved[3];		/* Reserved, must be zero */1923	u32 capabilities;1924	u32 reserved2;1925};1926 1927/* Capabilities Flags */1928 1929#define ACPI_NFIT_CAPABILITY_CACHE_FLUSH       (1)	/* 00: Cache Flush to NVDIMM capable */1930#define ACPI_NFIT_CAPABILITY_MEM_FLUSH         (1<<1)	/* 01: Memory Flush to NVDIMM capable */1931#define ACPI_NFIT_CAPABILITY_MEM_MIRRORING     (1<<2)	/* 02: Memory Mirroring capable */1932 1933/*1934 * NFIT/DVDIMM device handle support - used as the _ADR for each NVDIMM1935 */1936struct nfit_device_handle {1937	u32 handle;1938};1939 1940/* Device handle construction and extraction macros */1941 1942#define ACPI_NFIT_DIMM_NUMBER_MASK              0x0000000F1943#define ACPI_NFIT_CHANNEL_NUMBER_MASK           0x000000F01944#define ACPI_NFIT_MEMORY_ID_MASK                0x00000F001945#define ACPI_NFIT_SOCKET_ID_MASK                0x0000F0001946#define ACPI_NFIT_NODE_ID_MASK                  0x0FFF00001947 1948#define ACPI_NFIT_DIMM_NUMBER_OFFSET            01949#define ACPI_NFIT_CHANNEL_NUMBER_OFFSET         41950#define ACPI_NFIT_MEMORY_ID_OFFSET              81951#define ACPI_NFIT_SOCKET_ID_OFFSET              121952#define ACPI_NFIT_NODE_ID_OFFSET                161953 1954/* Macro to construct a NFIT/NVDIMM device handle */1955 1956#define ACPI_NFIT_BUILD_DEVICE_HANDLE(dimm, channel, memory, socket, node) \1957	((dimm)                                         | \1958	((channel) << ACPI_NFIT_CHANNEL_NUMBER_OFFSET)  | \1959	((memory)  << ACPI_NFIT_MEMORY_ID_OFFSET)       | \1960	((socket)  << ACPI_NFIT_SOCKET_ID_OFFSET)       | \1961	((node)    << ACPI_NFIT_NODE_ID_OFFSET))1962 1963/* Macros to extract individual fields from a NFIT/NVDIMM device handle */1964 1965#define ACPI_NFIT_GET_DIMM_NUMBER(handle) \1966	((handle) & ACPI_NFIT_DIMM_NUMBER_MASK)1967 1968#define ACPI_NFIT_GET_CHANNEL_NUMBER(handle) \1969	(((handle) & ACPI_NFIT_CHANNEL_NUMBER_MASK) >> ACPI_NFIT_CHANNEL_NUMBER_OFFSET)1970 1971#define ACPI_NFIT_GET_MEMORY_ID(handle) \1972	(((handle) & ACPI_NFIT_MEMORY_ID_MASK)      >> ACPI_NFIT_MEMORY_ID_OFFSET)1973 1974#define ACPI_NFIT_GET_SOCKET_ID(handle) \1975	(((handle) & ACPI_NFIT_SOCKET_ID_MASK)      >> ACPI_NFIT_SOCKET_ID_OFFSET)1976 1977#define ACPI_NFIT_GET_NODE_ID(handle) \1978	(((handle) & ACPI_NFIT_NODE_ID_MASK)        >> ACPI_NFIT_NODE_ID_OFFSET)1979 1980/*******************************************************************************1981 *1982 * NHLT - Non HDAudio Link Table1983 *        Version 11984 *1985 ******************************************************************************/1986 1987struct acpi_table_nhlt {1988	struct acpi_table_header header;	/* Common ACPI table header */1989	u8 endpoints_count;1990	/*1991	 * struct acpi_nhlt_endpoint endpoints[];1992	 * struct acpi_nhlt_config oed_config;1993	 */1994};1995 1996struct acpi_nhlt_endpoint {1997	u32 length;1998	u8 link_type;1999	u8 instance_id;2000	u16 vendor_id;2001	u16 device_id;2002	u16 revision_id;2003	u32 subsystem_id;2004	u8 device_type;2005	u8 direction;2006	u8 virtual_bus_id;2007	/*2008	 * struct acpi_nhlt_config device_config;2009	 * struct acpi_nhlt_formats_config formats_config;2010	 * struct acpi_nhlt_devices_info devices_info;2011	 */2012};2013 2014/*2015 * Values for link_type field above2016 *2017 * Only types PDM and SSP are used2018 */2019#define ACPI_NHLT_LINKTYPE_HDA			02020#define ACPI_NHLT_LINKTYPE_DSP			12021#define ACPI_NHLT_LINKTYPE_PDM			22022#define ACPI_NHLT_LINKTYPE_SSP			32023#define ACPI_NHLT_LINKTYPE_SLIMBUS		42024#define ACPI_NHLT_LINKTYPE_SDW			52025#define ACPI_NHLT_LINKTYPE_UAOL			62026 2027/* Values for device_id field above */2028 2029#define ACPI_NHLT_DEVICEID_DMIC			0xAE202030#define ACPI_NHLT_DEVICEID_BT			0xAE302031#define ACPI_NHLT_DEVICEID_I2S			0xAE342032 2033/* Values for device_type field above */2034 2035/*2036 * Device types unique to endpoint of link_type=PDM2037 *2038 * Type PDM used for all SKL+ platforms2039 */2040#define ACPI_NHLT_DEVICETYPE_PDM		02041#define ACPI_NHLT_DEVICETYPE_PDM_SKL		12042/* Device types unique to endpoint of link_type=SSP */2043#define ACPI_NHLT_DEVICETYPE_BT			02044#define ACPI_NHLT_DEVICETYPE_FM			12045#define ACPI_NHLT_DEVICETYPE_MODEM		22046#define ACPI_NHLT_DEVICETYPE_CODEC		42047 2048/* Values for Direction field above */2049 2050#define ACPI_NHLT_DIR_RENDER			02051#define ACPI_NHLT_DIR_CAPTURE			12052 2053struct acpi_nhlt_config {2054	u32 capabilities_size;2055	u8 capabilities[];2056};2057 2058struct acpi_nhlt_gendevice_config {2059	u8 virtual_slot;2060	u8 config_type;2061};2062 2063/* Values for config_type field above */2064 2065#define ACPI_NHLT_CONFIGTYPE_GENERIC		02066#define ACPI_NHLT_CONFIGTYPE_MICARRAY		12067 2068struct acpi_nhlt_micdevice_config {2069	u8 virtual_slot;2070	u8 config_type;2071	u8 array_type;2072};2073 2074/* Values for array_type field above */2075 2076#define ACPI_NHLT_ARRAYTYPE_LINEAR2_SMALL	0xA2077#define ACPI_NHLT_ARRAYTYPE_LINEAR2_BIG		0xB2078#define ACPI_NHLT_ARRAYTYPE_LINEAR4_GEO1	0xC2079#define ACPI_NHLT_ARRAYTYPE_PLANAR4_LSHAPED	0xD2080#define ACPI_NHLT_ARRAYTYPE_LINEAR4_GEO2	0xE2081#define ACPI_NHLT_ARRAYTYPE_VENDOR		0xF2082 2083struct acpi_nhlt_vendor_mic_config {2084	u8 type;2085	u8 panel;2086	u16 speaker_position_distance;		/* mm */2087	u16 horizontal_offset;			/* mm */2088	u16 vertical_offset;			/* mm */2089	u8 frequency_low_band;			/* 5*Hz */2090	u8 frequency_high_band;			/* 500*Hz */2091	u16 direction_angle;			/* -180 - +180 */2092	u16 elevation_angle;			/* -180 - +180 */2093	u16 work_vertical_angle_begin;		/* -180 - +180 with 2 deg step */2094	u16 work_vertical_angle_end;		/* -180 - +180 with 2 deg step */2095	u16 work_horizontal_angle_begin;	/* -180 - +180 with 2 deg step */2096	u16 work_horizontal_angle_end;		/* -180 - +180 with 2 deg step */2097};2098 2099/* Values for Type field above */2100 2101#define ACPI_NHLT_MICTYPE_OMNIDIRECTIONAL	02102#define ACPI_NHLT_MICTYPE_SUBCARDIOID		12103#define ACPI_NHLT_MICTYPE_CARDIOID		22104#define ACPI_NHLT_MICTYPE_SUPERCARDIOID		32105#define ACPI_NHLT_MICTYPE_HYPERCARDIOID		42106#define ACPI_NHLT_MICTYPE_8SHAPED		52107#define ACPI_NHLT_MICTYPE_RESERVED		62108#define ACPI_NHLT_MICTYPE_VENDORDEFINED		72109 2110/* Values for Panel field above */2111 2112#define ACPI_NHLT_MICLOCATION_TOP		02113#define ACPI_NHLT_MICLOCATION_BOTTOM		12114#define ACPI_NHLT_MICLOCATION_LEFT		22115#define ACPI_NHLT_MICLOCATION_RIGHT		32116#define ACPI_NHLT_MICLOCATION_FRONT		42117#define ACPI_NHLT_MICLOCATION_REAR		52118 2119struct acpi_nhlt_vendor_micdevice_config {2120	u8 virtual_slot;2121	u8 config_type;2122	u8 array_type;2123	u8 mics_count;2124	struct acpi_nhlt_vendor_mic_config mics[];2125};2126 2127union acpi_nhlt_device_config {2128	u8 virtual_slot;2129	struct acpi_nhlt_gendevice_config gen;2130	struct acpi_nhlt_micdevice_config mic;2131	struct acpi_nhlt_vendor_micdevice_config vendor_mic;2132};2133 2134/* Inherited from Microsoft's WAVEFORMATEXTENSIBLE. */2135struct acpi_nhlt_wave_formatext {2136	u16 format_tag;2137	u16 channel_count;2138	u32 samples_per_sec;2139	u32 avg_bytes_per_sec;2140	u16 block_align;2141	u16 bits_per_sample;2142	u16 extra_format_size;2143	u16 valid_bits_per_sample;2144	u32 channel_mask;2145	u8 subformat[16];2146};2147 2148struct acpi_nhlt_format_config {2149	struct acpi_nhlt_wave_formatext format;2150	struct acpi_nhlt_config config;2151};2152 2153struct acpi_nhlt_formats_config {2154	u8 formats_count;2155	struct acpi_nhlt_format_config formats[];2156};2157 2158struct acpi_nhlt_device_info {2159	u8 id[16];2160	u8 instance_id;2161	u8 port_id;2162};2163 2164struct acpi_nhlt_devices_info {2165	u8 devices_count;2166	struct acpi_nhlt_device_info devices[];2167};2168 2169/*******************************************************************************2170 *2171 * PCCT - Platform Communications Channel Table (ACPI 5.0)2172 *        Version 2 (ACPI 6.2)2173 *2174 ******************************************************************************/2175 2176struct acpi_table_pcct {2177	struct acpi_table_header header;	/* Common ACPI table header */2178	u32 flags;2179	u64 reserved;2180};2181 2182/* Values for Flags field above */2183 2184#define ACPI_PCCT_DOORBELL              12185 2186/* Values for subtable type in struct acpi_subtable_header */2187 2188enum acpi_pcct_type {2189	ACPI_PCCT_TYPE_GENERIC_SUBSPACE = 0,2190	ACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE = 1,2191	ACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE_TYPE2 = 2,	/* ACPI 6.1 */2192	ACPI_PCCT_TYPE_EXT_PCC_MASTER_SUBSPACE = 3,	/* ACPI 6.2 */2193	ACPI_PCCT_TYPE_EXT_PCC_SLAVE_SUBSPACE = 4,	/* ACPI 6.2 */2194	ACPI_PCCT_TYPE_HW_REG_COMM_SUBSPACE = 5,	/* ACPI 6.4 */2195	ACPI_PCCT_TYPE_RESERVED = 6	/* 6 and greater are reserved */2196};2197 2198/*2199 * PCCT Subtables, correspond to Type in struct acpi_subtable_header2200 */2201 2202/* 0: Generic Communications Subspace */2203 2204struct acpi_pcct_subspace {2205	struct acpi_subtable_header header;2206	u8 reserved[6];2207	u64 base_address;2208	u64 length;2209	struct acpi_generic_address doorbell_register;2210	u64 preserve_mask;2211	u64 write_mask;2212	u32 latency;2213	u32 max_access_rate;2214	u16 min_turnaround_time;2215};2216 2217/* 1: HW-reduced Communications Subspace (ACPI 5.1) */2218 2219struct acpi_pcct_hw_reduced {2220	struct acpi_subtable_header header;2221	u32 platform_interrupt;2222	u8 flags;2223	u8 reserved;2224	u64 base_address;2225	u64 length;2226	struct acpi_generic_address doorbell_register;2227	u64 preserve_mask;2228	u64 write_mask;2229	u32 latency;2230	u32 max_access_rate;2231	u16 min_turnaround_time;2232};2233 2234/* 2: HW-reduced Communications Subspace Type 2 (ACPI 6.1) */2235 2236struct acpi_pcct_hw_reduced_type2 {2237	struct acpi_subtable_header header;2238	u32 platform_interrupt;2239	u8 flags;2240	u8 reserved;2241	u64 base_address;2242	u64 length;2243	struct acpi_generic_address doorbell_register;2244	u64 preserve_mask;2245	u64 write_mask;2246	u32 latency;2247	u32 max_access_rate;2248	u16 min_turnaround_time;2249	struct acpi_generic_address platform_ack_register;2250	u64 ack_preserve_mask;2251	u64 ack_write_mask;2252};2253 2254/* 3: Extended PCC Master Subspace Type 3 (ACPI 6.2) */2255 2256struct acpi_pcct_ext_pcc_master {2257	struct acpi_subtable_header header;2258	u32 platform_interrupt;2259	u8 flags;2260	u8 reserved1;2261	u64 base_address;2262	u32 length;2263	struct acpi_generic_address doorbell_register;2264	u64 preserve_mask;2265	u64 write_mask;2266	u32 latency;2267	u32 max_access_rate;2268	u32 min_turnaround_time;2269	struct acpi_generic_address platform_ack_register;2270	u64 ack_preserve_mask;2271	u64 ack_set_mask;2272	u64 reserved2;2273	struct acpi_generic_address cmd_complete_register;2274	u64 cmd_complete_mask;2275	struct acpi_generic_address cmd_update_register;2276	u64 cmd_update_preserve_mask;2277	u64 cmd_update_set_mask;2278	struct acpi_generic_address error_status_register;2279	u64 error_status_mask;2280};2281 2282/* 4: Extended PCC Slave Subspace Type 4 (ACPI 6.2) */2283 2284struct acpi_pcct_ext_pcc_slave {2285	struct acpi_subtable_header header;2286	u32 platform_interrupt;2287	u8 flags;2288	u8 reserved1;2289	u64 base_address;2290	u32 length;2291	struct acpi_generic_address doorbell_register;2292	u64 preserve_mask;2293	u64 write_mask;2294	u32 latency;2295	u32 max_access_rate;2296	u32 min_turnaround_time;2297	struct acpi_generic_address platform_ack_register;2298	u64 ack_preserve_mask;2299	u64 ack_set_mask;2300	u64 reserved2;2301	struct acpi_generic_address cmd_complete_register;2302	u64 cmd_complete_mask;2303	struct acpi_generic_address cmd_update_register;2304	u64 cmd_update_preserve_mask;2305	u64 cmd_update_set_mask;2306	struct acpi_generic_address error_status_register;2307	u64 error_status_mask;2308};2309 2310/* 5: HW Registers based Communications Subspace */2311 2312struct acpi_pcct_hw_reg {2313	struct acpi_subtable_header header;2314	u16 version;2315	u64 base_address;2316	u64 length;2317	struct acpi_generic_address doorbell_register;2318	u64 doorbell_preserve;2319	u64 doorbell_write;2320	struct acpi_generic_address cmd_complete_register;2321	u64 cmd_complete_mask;2322	struct acpi_generic_address error_status_register;2323	u64 error_status_mask;2324	u32 nominal_latency;2325	u32 min_turnaround_time;2326};2327 2328/* Values for doorbell flags above */2329 2330#define ACPI_PCCT_INTERRUPT_POLARITY    (1)2331#define ACPI_PCCT_INTERRUPT_MODE        (1<<1)2332 2333/*2334 * PCC memory structures (not part of the ACPI table)2335 */2336 2337/* Shared Memory Region */2338 2339struct acpi_pcct_shared_memory {2340	u32 signature;2341	u16 command;2342	u16 status;2343};2344 2345/* Extended PCC Subspace Shared Memory Region (ACPI 6.2) */2346 2347struct acpi_pcct_ext_pcc_shared_memory {2348	u32 signature;2349	u32 flags;2350	u32 length;2351	u32 command;2352};2353 2354/*******************************************************************************2355 *2356 * PDTT - Platform Debug Trigger Table (ACPI 6.2)2357 *        Version 02358 *2359 ******************************************************************************/2360 2361struct acpi_table_pdtt {2362	struct acpi_table_header header;	/* Common ACPI table header */2363	u8 trigger_count;2364	u8 reserved[3];2365	u32 array_offset;2366};2367 2368/*2369 * PDTT Communication Channel Identifier Structure.2370 * The number of these structures is defined by trigger_count above,2371 * starting at array_offset.2372 */2373struct acpi_pdtt_channel {2374	u8 subchannel_id;2375	u8 flags;2376};2377 2378/* Flags for above */2379 2380#define ACPI_PDTT_RUNTIME_TRIGGER           (1)2381#define ACPI_PDTT_WAIT_COMPLETION           (1<<1)2382#define ACPI_PDTT_TRIGGER_ORDER             (1<<2)2383 2384/*******************************************************************************2385 *2386 * PHAT - Platform Health Assessment Table (ACPI 6.4)2387 *        Version 12388 *2389 ******************************************************************************/2390 2391struct acpi_table_phat {2392	struct acpi_table_header header;	/* Common ACPI table header */2393};2394 2395/* Common header for PHAT subtables that follow main table */2396 2397struct acpi_phat_header {2398	u16 type;2399	u16 length;2400	u8 revision;2401};2402 2403/* Values for Type field above */2404 2405#define ACPI_PHAT_TYPE_FW_VERSION_DATA  02406#define ACPI_PHAT_TYPE_FW_HEALTH_DATA   12407#define ACPI_PHAT_TYPE_RESERVED         2	/* 0x02-0xFFFF are reserved */2408 2409/*2410 * PHAT subtables, correspond to Type in struct acpi_phat_header2411 */2412 2413/* 0: Firmware Version Data Record */2414 2415struct acpi_phat_version_data {2416	struct acpi_phat_header header;2417	u8 reserved[3];2418	u32 element_count;2419};2420 2421struct acpi_phat_version_element {2422	u8 guid[16];2423	u64 version_value;2424	u32 producer_id;2425};2426 2427/* 1: Firmware Health Data Record */2428 2429struct acpi_phat_health_data {2430	struct acpi_phat_header header;2431	u8 reserved[2];2432	u8 health;2433	u8 device_guid[16];2434	u32 device_specific_offset;	/* Zero if no Device-specific data */2435};2436 2437/* Values for Health field above */2438 2439#define ACPI_PHAT_ERRORS_FOUND          02440#define ACPI_PHAT_NO_ERRORS             12441#define ACPI_PHAT_UNKNOWN_ERRORS        22442#define ACPI_PHAT_ADVISORY              32443 2444/*******************************************************************************2445 *2446 * PMTT - Platform Memory Topology Table (ACPI 5.0)2447 *        Version 12448 *2449 ******************************************************************************/2450 2451struct acpi_table_pmtt {2452	struct acpi_table_header header;	/* Common ACPI table header */2453	u32 memory_device_count;2454	/*2455	 * Immediately followed by:2456	 * MEMORY_DEVICE memory_device_struct[memory_device_count];2457	 */2458};2459 2460/* Common header for PMTT subtables that follow main table */2461 2462struct acpi_pmtt_header {2463	u8 type;2464	u8 reserved1;2465	u16 length;2466	u16 flags;2467	u16 reserved2;2468	u32 memory_device_count;	/* Zero means no memory device structs follow */2469	/*2470	 * Immediately followed by:2471	 * u8 type_specific_data[]2472	 * MEMORY_DEVICE memory_device_struct[memory_device_count];2473	 */2474};2475 2476/* Values for Type field above */2477 2478#define ACPI_PMTT_TYPE_SOCKET           02479#define ACPI_PMTT_TYPE_CONTROLLER       12480#define ACPI_PMTT_TYPE_DIMM             22481#define ACPI_PMTT_TYPE_RESERVED         3	/* 0x03-0xFE are reserved */2482#define ACPI_PMTT_TYPE_VENDOR           0xFF2483 2484/* Values for Flags field above */2485 2486#define ACPI_PMTT_TOP_LEVEL             0x00012487#define ACPI_PMTT_PHYSICAL              0x00022488#define ACPI_PMTT_MEMORY_TYPE           0x000C2489 2490/*2491 * PMTT subtables, correspond to Type in struct acpi_pmtt_header2492 */2493 2494/* 0: Socket Structure */2495 2496struct acpi_pmtt_socket {2497	struct acpi_pmtt_header header;2498	u16 socket_id;2499	u16 reserved;2500};2501	/*2502	 * Immediately followed by:2503	 * MEMORY_DEVICE memory_device_struct[memory_device_count];2504	 */2505 2506/* 1: Memory Controller subtable */2507 2508struct acpi_pmtt_controller {2509	struct acpi_pmtt_header header;2510	u16 controller_id;2511	u16 reserved;2512};2513	/*2514	 * Immediately followed by:2515	 * MEMORY_DEVICE memory_device_struct[memory_device_count];2516	 */2517 2518/* 2: Physical Component Identifier (DIMM) */2519 2520struct acpi_pmtt_physical_component {2521	struct acpi_pmtt_header header;2522	u32 bios_handle;2523};2524 2525/* 0xFF: Vendor Specific Data */2526 2527struct acpi_pmtt_vendor_specific {2528	struct acpi_pmtt_header header;2529	u8 type_uuid[16];2530	u8 specific[];2531	/*2532	 * Immediately followed by:2533	 * u8 vendor_specific_data[];2534	 * MEMORY_DEVICE memory_device_struct[memory_device_count];2535	 */2536};2537 2538/*******************************************************************************2539 *2540 * PPTT - Processor Properties Topology Table (ACPI 6.2)2541 *        Version 12542 *2543 ******************************************************************************/2544 2545struct acpi_table_pptt {2546	struct acpi_table_header header;	/* Common ACPI table header */2547};2548 2549/* Values for Type field above */2550 2551enum acpi_pptt_type {2552	ACPI_PPTT_TYPE_PROCESSOR = 0,2553	ACPI_PPTT_TYPE_CACHE = 1,2554	ACPI_PPTT_TYPE_ID = 2,2555	ACPI_PPTT_TYPE_RESERVED = 32556};2557 2558/* 0: Processor Hierarchy Node Structure */2559 2560struct acpi_pptt_processor {2561	struct acpi_subtable_header header;2562	u16 reserved;2563	u32 flags;2564	u32 parent;2565	u32 acpi_processor_id;2566	u32 number_of_priv_resources;2567};2568 2569/* Flags */2570 2571#define ACPI_PPTT_PHYSICAL_PACKAGE          (1)2572#define ACPI_PPTT_ACPI_PROCESSOR_ID_VALID   (1<<1)2573#define ACPI_PPTT_ACPI_PROCESSOR_IS_THREAD  (1<<2)	/* ACPI 6.3 */2574#define ACPI_PPTT_ACPI_LEAF_NODE            (1<<3)	/* ACPI 6.3 */2575#define ACPI_PPTT_ACPI_IDENTICAL            (1<<4)	/* ACPI 6.3 */2576 2577/* 1: Cache Type Structure */2578 2579struct acpi_pptt_cache {2580	struct acpi_subtable_header header;2581	u16 reserved;2582	u32 flags;2583	u32 next_level_of_cache;2584	u32 size;2585	u32 number_of_sets;2586	u8 associativity;2587	u8 attributes;2588	u16 line_size;2589};2590 2591/* 1: Cache Type Structure for PPTT version 3 */2592 2593struct acpi_pptt_cache_v1 {2594	u32 cache_id;2595};2596 2597/* Flags */2598 2599#define ACPI_PPTT_SIZE_PROPERTY_VALID       (1)	/* Physical property valid */2600#define ACPI_PPTT_NUMBER_OF_SETS_VALID      (1<<1)	/* Number of sets valid */2601#define ACPI_PPTT_ASSOCIATIVITY_VALID       (1<<2)	/* Associativity valid */2602#define ACPI_PPTT_ALLOCATION_TYPE_VALID     (1<<3)	/* Allocation type valid */2603#define ACPI_PPTT_CACHE_TYPE_VALID          (1<<4)	/* Cache type valid */2604#define ACPI_PPTT_WRITE_POLICY_VALID        (1<<5)	/* Write policy valid */2605#define ACPI_PPTT_LINE_SIZE_VALID           (1<<6)	/* Line size valid */2606#define ACPI_PPTT_CACHE_ID_VALID            (1<<7)	/* Cache ID valid */2607 2608/* Masks for Attributes */2609 2610#define ACPI_PPTT_MASK_ALLOCATION_TYPE      (0x03)	/* Allocation type */2611#define ACPI_PPTT_MASK_CACHE_TYPE           (0x0C)	/* Cache type */2612#define ACPI_PPTT_MASK_WRITE_POLICY         (0x10)	/* Write policy */2613 2614/* Attributes describing cache */2615#define ACPI_PPTT_CACHE_READ_ALLOCATE       (0x0)	/* Cache line is allocated on read */2616#define ACPI_PPTT_CACHE_WRITE_ALLOCATE      (0x01)	/* Cache line is allocated on write */2617#define ACPI_PPTT_CACHE_RW_ALLOCATE         (0x02)	/* Cache line is allocated on read and write */2618#define ACPI_PPTT_CACHE_RW_ALLOCATE_ALT     (0x03)	/* Alternate representation of above */2619 2620#define ACPI_PPTT_CACHE_TYPE_DATA           (0x0)	/* Data cache */2621#define ACPI_PPTT_CACHE_TYPE_INSTR          (1<<2)	/* Instruction cache */2622#define ACPI_PPTT_CACHE_TYPE_UNIFIED        (2<<2)	/* Unified I & D cache */2623#define ACPI_PPTT_CACHE_TYPE_UNIFIED_ALT    (3<<2)	/* Alternate representation of above */2624 2625#define ACPI_PPTT_CACHE_POLICY_WB           (0x0)	/* Cache is write back */2626#define ACPI_PPTT_CACHE_POLICY_WT           (1<<4)	/* Cache is write through */2627 2628/* 2: ID Structure */2629 2630struct acpi_pptt_id {2631	struct acpi_subtable_header header;2632	u16 reserved;2633	u32 vendor_id;2634	u64 level1_id;2635	u64 level2_id;2636	u16 major_rev;2637	u16 minor_rev;2638	u16 spin_rev;2639};2640 2641/*******************************************************************************2642 *2643 * PRMT - Platform Runtime Mechanism Table2644 *        Version 12645 *2646 ******************************************************************************/2647 2648struct acpi_table_prmt {2649	struct acpi_table_header header;	/* Common ACPI table header */2650};2651 2652struct acpi_table_prmt_header {2653	u8 platform_guid[16];2654	u32 module_info_offset;2655	u32 module_info_count;2656};2657 2658struct acpi_prmt_module_header {2659	u16 revision;2660	u16 length;2661};2662 2663struct acpi_prmt_module_info {2664	u16 revision;2665	u16 length;2666	u8 module_guid[16];2667	u16 major_rev;2668	u16 minor_rev;2669	u16 handler_info_count;2670	u32 handler_info_offset;2671	u64 mmio_list_pointer;2672};2673 2674struct acpi_prmt_handler_info {2675	u16 revision;2676	u16 length;2677	u8 handler_guid[16];2678	u64 handler_address;2679	u64 static_data_buffer_address;2680	u64 acpi_param_buffer_address;2681};2682 2683/*******************************************************************************2684 *2685 * RASF - RAS Feature Table (ACPI 5.0)2686 *        Version 12687 *2688 ******************************************************************************/2689 2690struct acpi_table_rasf {2691	struct acpi_table_header header;	/* Common ACPI table header */2692	u8 channel_id[12];2693};2694 2695/* RASF Platform Communication Channel Shared Memory Region */2696 2697struct acpi_rasf_shared_memory {2698	u32 signature;2699	u16 command;2700	u16 status;2701	u16 version;2702	u8 capabilities[16];2703	u8 set_capabilities[16];2704	u16 num_parameter_blocks;2705	u32 set_capabilities_status;2706};2707 2708/* RASF Parameter Block Structure Header */2709 2710struct acpi_rasf_parameter_block {2711	u16 type;2712	u16 version;2713	u16 length;2714};2715 2716/* RASF Parameter Block Structure for PATROL_SCRUB */2717 2718struct acpi_rasf_patrol_scrub_parameter {2719	struct acpi_rasf_parameter_block header;2720	u16 patrol_scrub_command;2721	u64 requested_address_range[2];2722	u64 actual_address_range[2];2723	u16 flags;2724	u8 requested_speed;2725};2726 2727/* Masks for Flags and Speed fields above */2728 2729#define ACPI_RASF_SCRUBBER_RUNNING      12730#define ACPI_RASF_SPEED                 (7<<1)2731#define ACPI_RASF_SPEED_SLOW            (0<<1)2732#define ACPI_RASF_SPEED_MEDIUM          (4<<1)2733#define ACPI_RASF_SPEED_FAST            (7<<1)2734 2735/* Channel Commands */2736 2737enum acpi_rasf_commands {2738	ACPI_RASF_EXECUTE_RASF_COMMAND = 12739};2740 2741/* Platform RAS Capabilities */2742 2743enum acpi_rasf_capabiliities {2744	ACPI_HW_PATROL_SCRUB_SUPPORTED = 0,2745	ACPI_SW_PATROL_SCRUB_EXPOSED = 12746};2747 2748/* Patrol Scrub Commands */2749 2750enum acpi_rasf_patrol_scrub_commands {2751	ACPI_RASF_GET_PATROL_PARAMETERS = 1,2752	ACPI_RASF_START_PATROL_SCRUBBER = 2,2753	ACPI_RASF_STOP_PATROL_SCRUBBER = 32754};2755 2756/* Channel Command flags */2757 2758#define ACPI_RASF_GENERATE_SCI          (1<<15)2759 2760/* Status values */2761 2762enum acpi_rasf_status {2763	ACPI_RASF_SUCCESS = 0,2764	ACPI_RASF_NOT_VALID = 1,2765	ACPI_RASF_NOT_SUPPORTED = 2,2766	ACPI_RASF_BUSY = 3,2767	ACPI_RASF_FAILED = 4,2768	ACPI_RASF_ABORTED = 5,2769	ACPI_RASF_INVALID_DATA = 62770};2771 2772/* Status flags */2773 2774#define ACPI_RASF_COMMAND_COMPLETE      (1)2775#define ACPI_RASF_SCI_DOORBELL          (1<<1)2776#define ACPI_RASF_ERROR                 (1<<2)2777#define ACPI_RASF_STATUS                (0x1F<<3)2778 2779/*******************************************************************************2780 *2781 * RAS2 - RAS2 Feature Table (ACPI 6.5)2782 *        Version 12783 *2784 *2785 ******************************************************************************/2786 2787struct acpi_table_ras2 {2788	struct acpi_table_header header;	/* Common ACPI table header */2789	u16 reserved;2790	u16 num_pcc_descs;2791};2792 2793/* RAS2 Platform Communication Channel Descriptor */2794 2795struct acpi_ras2_pcc_desc {2796	u8 channel_id;2797	u16 reserved;2798	u8 feature_type;2799	u32 instance;2800};2801 2802/* RAS2 Platform Communication Channel Shared Memory Region */2803 2804struct acpi_ras2_shared_memory {2805	u32 signature;2806	u16 command;2807	u16 status;2808	u16 version;2809	u8 features[16];2810	u8 set_capabilities[16];2811	u16 num_parameter_blocks;2812	u32 set_capabilities_status;2813};2814 2815/* RAS2 Parameter Block Structure for PATROL_SCRUB */2816 2817struct acpi_ras2_parameter_block {2818	u16 type;2819	u16 version;2820	u16 length;2821};2822 2823/* RAS2 Parameter Block Structure for PATROL_SCRUB */2824 2825struct acpi_ras2_patrol_scrub_parameter {2826	struct acpi_ras2_parameter_block header;2827	u16 patrol_scrub_command;2828	u64 requested_address_range[2];2829	u64 actual_address_range[2];2830	u32 flags;2831	u32 scrub_params_out;2832	u32 scrub_params_in;2833};2834 2835/* Masks for Flags field above */2836 2837#define ACPI_RAS2_SCRUBBER_RUNNING      12838 2839/* RAS2 Parameter Block Structure for LA2PA_TRANSLATION */2840 2841struct acpi_ras2_la2pa_translation_parameter {2842	struct acpi_ras2_parameter_block header;2843	u16 addr_translation_command;2844	u64 sub_inst_id;2845	u64 logical_address;2846	u64 physical_address;2847	u32 status;2848};2849 2850/* Channel Commands */2851 2852enum acpi_ras2_commands {2853	ACPI_RAS2_EXECUTE_RAS2_COMMAND = 12854};2855 2856/* Platform RAS2 Features */2857 2858enum acpi_ras2_features {2859	ACPI_RAS2_PATROL_SCRUB_SUPPORTED = 0,2860	ACPI_RAS2_LA2PA_TRANSLATION = 12861};2862 2863/* RAS2 Patrol Scrub Commands */2864 2865enum acpi_ras2_patrol_scrub_commands {2866	ACPI_RAS2_GET_PATROL_PARAMETERS = 1,2867	ACPI_RAS2_START_PATROL_SCRUBBER = 2,2868	ACPI_RAS2_STOP_PATROL_SCRUBBER = 32869};2870 2871/* RAS2 LA2PA Translation Commands */2872 2873enum acpi_ras2_la2_pa_translation_commands {2874	ACPI_RAS2_GET_LA2PA_TRANSLATION = 1,2875};2876 2877/* RAS2 LA2PA Translation Status values */2878 2879enum acpi_ras2_la2_pa_translation_status {2880	ACPI_RAS2_LA2PA_TRANSLATION_SUCCESS = 0,2881	ACPI_RAS2_LA2PA_TRANSLATION_FAIL = 1,2882};2883 2884/* Channel Command flags */2885 2886#define ACPI_RAS2_GENERATE_SCI          (1<<15)2887 2888/* Status values */2889 2890enum acpi_ras2_status {2891	ACPI_RAS2_SUCCESS = 0,2892	ACPI_RAS2_NOT_VALID = 1,2893	ACPI_RAS2_NOT_SUPPORTED = 2,2894	ACPI_RAS2_BUSY = 3,2895	ACPI_RAS2_FAILED = 4,2896	ACPI_RAS2_ABORTED = 5,2897	ACPI_RAS2_INVALID_DATA = 62898};2899 2900/* Status flags */2901 2902#define ACPI_RAS2_COMMAND_COMPLETE      (1)2903#define ACPI_RAS2_SCI_DOORBELL          (1<<1)2904#define ACPI_RAS2_ERROR                 (1<<2)2905#define ACPI_RAS2_STATUS                (0x1F<<3)2906 2907/*******************************************************************************2908 *2909 * RGRT - Regulatory Graphics Resource Table2910 *        Version 12911 *2912 * Conforms to "ACPI RGRT" available at:2913 * https://microsoft.github.io/mu/dyn/mu_plus/ms_core_pkg/acpi_RGRT/feature_acpi_rgrt/2914 *2915 ******************************************************************************/2916 2917struct acpi_table_rgrt {2918	struct acpi_table_header header;	/* Common ACPI table header */2919	u16 version;2920	u8 image_type;2921	u8 reserved;2922	u8 image[];2923};2924 2925/* image_type values */2926 2927enum acpi_rgrt_image_type {2928	ACPI_RGRT_TYPE_RESERVED0 = 0,2929	ACPI_RGRT_IMAGE_TYPE_PNG = 1,2930	ACPI_RGRT_TYPE_RESERVED = 2	/* 2 and greater are reserved */2931};2932 2933/*******************************************************************************2934 *2935 * RHCT - RISC-V Hart Capabilities Table2936 *        Version 12937 *2938 ******************************************************************************/2939 2940struct acpi_table_rhct {2941	struct acpi_table_header header;	/* Common ACPI table header */2942	u32 flags;		/* RHCT flags */2943	u64 time_base_freq;2944	u32 node_count;2945	u32 node_offset;2946};2947 2948/* RHCT Flags */2949 2950#define ACPI_RHCT_TIMER_CANNOT_WAKEUP_CPU       (1)2951/*2952 * RHCT subtables2953 */2954struct acpi_rhct_node_header {2955	u16 type;2956	u16 length;2957	u16 revision;2958};2959 2960/* Values for RHCT subtable Type above */2961 2962enum acpi_rhct_node_type {2963	ACPI_RHCT_NODE_TYPE_ISA_STRING = 0x0000,2964	ACPI_RHCT_NODE_TYPE_CMO = 0x0001,2965	ACPI_RHCT_NODE_TYPE_MMU = 0x0002,2966	ACPI_RHCT_NODE_TYPE_RESERVED = 0x0003,2967	ACPI_RHCT_NODE_TYPE_HART_INFO = 0xFFFF,2968};2969 2970/*2971 * RHCT node specific subtables2972 */2973 2974/* ISA string node structure */2975struct acpi_rhct_isa_string {2976	u16 isa_length;2977	char isa[];2978};2979 2980struct acpi_rhct_cmo_node {2981	u8 reserved;		/* Must be zero */2982	u8 cbom_size;		/* CBOM size in powerof 2 */2983	u8 cbop_size;		/* CBOP size in powerof 2 */2984	u8 cboz_size;		/* CBOZ size in powerof 2 */2985};2986 2987struct acpi_rhct_mmu_node {2988	u8 reserved;		/* Must be zero */2989	u8 mmu_type;		/* Virtual Address Scheme */2990};2991 2992enum acpi_rhct_mmu_type {2993	ACPI_RHCT_MMU_TYPE_SV39 = 0,2994	ACPI_RHCT_MMU_TYPE_SV48 = 1,2995	ACPI_RHCT_MMU_TYPE_SV57 = 22996};2997 2998/* Hart Info node structure */2999struct acpi_rhct_hart_info {3000	u16 num_offsets;3001	u32 uid;		/* ACPI processor UID */3002};3003 3004/*******************************************************************************3005 *3006 * SBST - Smart Battery Specification Table3007 *        Version 13008 *3009 ******************************************************************************/3010 3011struct acpi_table_sbst {3012	struct acpi_table_header header;	/* Common ACPI table header */3013	u32 warning_level;3014	u32 low_level;3015	u32 critical_level;3016};3017 3018/*******************************************************************************3019 *3020 * SDEI - Software Delegated Exception Interface Descriptor Table3021 *3022 * Conforms to "Software Delegated Exception Interface (SDEI)" ARM DEN0054A,3023 * May 8th, 2017. Copyright 2017 ARM Ltd.3024 *3025 ******************************************************************************/3026 3027struct acpi_table_sdei {3028	struct acpi_table_header header;	/* Common ACPI table header */3029};3030 3031/*******************************************************************************3032 *3033 * SDEV - Secure Devices Table (ACPI 6.2)3034 *        Version 13035 *3036 ******************************************************************************/3037 3038struct acpi_table_sdev {3039	struct acpi_table_header header;	/* Common ACPI table header */3040};3041 3042struct acpi_sdev_header {3043	u8 type;3044	u8 flags;3045	u16 length;3046};3047 3048/* Values for subtable type above */3049 3050enum acpi_sdev_type {3051	ACPI_SDEV_TYPE_NAMESPACE_DEVICE = 0,3052	ACPI_SDEV_TYPE_PCIE_ENDPOINT_DEVICE = 1,3053	ACPI_SDEV_TYPE_RESERVED = 2	/* 2 and greater are reserved */3054};3055 3056/* Values for flags above */3057 3058#define ACPI_SDEV_HANDOFF_TO_UNSECURE_OS    (1)3059#define ACPI_SDEV_SECURE_COMPONENTS_PRESENT (1<<1)3060 3061/*3062 * SDEV subtables3063 */3064 3065/* 0: Namespace Device Based Secure Device Structure */3066 3067struct acpi_sdev_namespace {3068	struct acpi_sdev_header header;3069	u16 device_id_offset;3070	u16 device_id_length;3071	u16 vendor_data_offset;3072	u16 vendor_data_length;3073};3074 3075struct acpi_sdev_secure_component {3076	u16 secure_component_offset;3077	u16 secure_component_length;3078};3079 3080/*3081 * SDEV sub-subtables ("Components") for above3082 */3083struct acpi_sdev_component {3084	struct acpi_sdev_header header;3085};3086 3087/* Values for sub-subtable type above */3088 3089enum acpi_sac_type {3090	ACPI_SDEV_TYPE_ID_COMPONENT = 0,3091	ACPI_SDEV_TYPE_MEM_COMPONENT = 13092};3093 3094struct acpi_sdev_id_component {3095	struct acpi_sdev_header header;3096	u16 hardware_id_offset;3097	u16 hardware_id_length;3098	u16 subsystem_id_offset;3099	u16 subsystem_id_length;3100	u16 hardware_revision;3101	u8 hardware_rev_present;3102	u8 class_code_present;3103	u8 pci_base_class;3104	u8 pci_sub_class;3105	u8 pci_programming_xface;3106};3107 3108struct acpi_sdev_mem_component {3109	struct acpi_sdev_header header;3110	u32 reserved;3111	u64 memory_base_address;3112	u64 memory_length;3113};3114 3115/* 1: PCIe Endpoint Device Based Device Structure */3116 3117struct acpi_sdev_pcie {3118	struct acpi_sdev_header header;3119	u16 segment;3120	u16 start_bus;3121	u16 path_offset;3122	u16 path_length;3123	u16 vendor_data_offset;3124	u16 vendor_data_length;3125};3126 3127/* 1a: PCIe Endpoint path entry */3128 3129struct acpi_sdev_pcie_path {3130	u8 device;3131	u8 function;3132};3133 3134/*******************************************************************************3135 *3136 * SVKL - Storage Volume Key Location Table (ACPI 6.4)3137 *        From: "Guest-Host-Communication Interface (GHCI) for Intel3138 *        Trust Domain Extensions (Intel TDX)".3139 *        Version 13140 *3141 ******************************************************************************/3142 3143struct acpi_table_svkl {3144	struct acpi_table_header header;	/* Common ACPI table header */3145	u32 count;3146};3147 3148struct acpi_svkl_key {3149	u16 type;3150	u16 format;3151	u32 size;3152	u64 address;3153};3154 3155enum acpi_svkl_type {3156	ACPI_SVKL_TYPE_MAIN_STORAGE = 0,3157	ACPI_SVKL_TYPE_RESERVED = 1	/* 1 and greater are reserved */3158};3159 3160enum acpi_svkl_format {3161	ACPI_SVKL_FORMAT_RAW_BINARY = 0,3162	ACPI_SVKL_FORMAT_RESERVED = 1	/* 1 and greater are reserved */3163};3164 3165/*******************************************************************************3166 *3167 * TDEL - TD-Event Log3168 *        From: "Guest-Host-Communication Interface (GHCI) for Intel3169 *        Trust Domain Extensions (Intel TDX)".3170 *        September 20203171 *3172 ******************************************************************************/3173 3174struct acpi_table_tdel {3175	struct acpi_table_header header;	/* Common ACPI table header */3176	u32 reserved;3177	u64 log_area_minimum_length;3178	u64 log_area_start_address;3179};3180 3181/* Reset to default packing */3182 3183#pragma pack()3184 3185#endif				/* __ACTBL2_H__ */3186