Path: blob/main/sys/contrib/dev/acpica/include/actbl2.h
48285 views
/******************************************************************************1*2* Name: actbl2.h - ACPI Table Definitions3*4*****************************************************************************/56/******************************************************************************7*8* 1. Copyright Notice9*10* Some or all of this work - Copyright (c) 1999 - 2025, Intel Corp.11* All rights reserved.12*13* 2. License14*15* 2.1. This is your license from Intel Corp. under its intellectual property16* rights. You may have additional license terms from the party that provided17* you this software, covering your right to use that party's intellectual18* property rights.19*20* 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a21* copy of the source code appearing in this file ("Covered Code") an22* irrevocable, perpetual, worldwide license under Intel's copyrights in the23* base code distributed originally by Intel ("Original Intel Code") to copy,24* make derivatives, distribute, use and display any portion of the Covered25* Code in any form, with the right to sublicense such rights; and26*27* 2.3. Intel grants Licensee a non-exclusive and non-transferable patent28* license (with the right to sublicense), under only those claims of Intel29* patents that are infringed by the Original Intel Code, to make, use, sell,30* offer to sell, and import the Covered Code and derivative works thereof31* solely to the minimum extent necessary to exercise the above copyright32* license, and in no event shall the patent license extend to any additions33* to or modifications of the Original Intel Code. No other license or right34* is granted directly or by implication, estoppel or otherwise;35*36* The above copyright and patent license is granted only if the following37* conditions are met:38*39* 3. Conditions40*41* 3.1. Redistribution of Source with Rights to Further Distribute Source.42* Redistribution of source code of any substantial portion of the Covered43* Code or modification with rights to further distribute source must include44* the above Copyright Notice, the above License, this list of Conditions,45* and the following Disclaimer and Export Compliance provision. In addition,46* Licensee must cause all Covered Code to which Licensee contributes to47* contain a file documenting the changes Licensee made to create that Covered48* Code and the date of any change. Licensee must include in that file the49* documentation of any changes made by any predecessor Licensee. Licensee50* must include a prominent statement that the modification is derived,51* directly or indirectly, from Original Intel Code.52*53* 3.2. Redistribution of Source with no Rights to Further Distribute Source.54* Redistribution of source code of any substantial portion of the Covered55* Code or modification without rights to further distribute source must56* include the following Disclaimer and Export Compliance provision in the57* documentation and/or other materials provided with distribution. In58* addition, Licensee may not authorize further sublicense of source of any59* portion of the Covered Code, and must include terms to the effect that the60* license from Licensee to its licensee is limited to the intellectual61* property embodied in the software Licensee provides to its licensee, and62* not to intellectual property embodied in modifications its licensee may63* make.64*65* 3.3. Redistribution of Executable. Redistribution in executable form of any66* substantial portion of the Covered Code or modification must reproduce the67* above Copyright Notice, and the following Disclaimer and Export Compliance68* provision in the documentation and/or other materials provided with the69* distribution.70*71* 3.4. Intel retains all right, title, and interest in and to the Original72* Intel Code.73*74* 3.5. Neither the name Intel nor any other trademark owned or controlled by75* Intel shall be used in advertising or otherwise to promote the sale, use or76* other dealings in products derived from or relating to the Covered Code77* without prior written authorization from Intel.78*79* 4. Disclaimer and Export Compliance80*81* 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED82* HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE83* IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE,84* INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY85* UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY86* IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A87* PARTICULAR PURPOSE.88*89* 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES90* OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR91* COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT,92* SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY93* CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL94* HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS95* SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY96* LIMITED REMEDY.97*98* 4.3. Licensee shall not export, either directly or indirectly, any of this99* software or system incorporating such software without first obtaining any100* required license or other approval from the U. S. Department of Commerce or101* any other agency or department of the United States Government. In the102* event Licensee exports any such software from the United States or103* re-exports any such software from a foreign destination, Licensee shall104* ensure that the distribution and export/re-export of the software is in105* compliance with all laws, regulations, orders, or other restrictions of the106* U.S. Export Administration Regulations. Licensee agrees that neither it nor107* any of its subsidiaries will export/re-export any technical data, process,108* software, or service, directly or indirectly, to any country for which the109* United States government or any agency thereof requires an export license,110* other governmental approval, or letter of assurance, without first obtaining111* such license, approval or letter.112*113*****************************************************************************114*115* Alternatively, you may choose to be licensed under the terms of the116* following license:117*118* Redistribution and use in source and binary forms, with or without119* modification, are permitted provided that the following conditions120* are met:121* 1. Redistributions of source code must retain the above copyright122* notice, this list of conditions, and the following disclaimer,123* without modification.124* 2. Redistributions in binary form must reproduce at minimum a disclaimer125* substantially similar to the "NO WARRANTY" disclaimer below126* ("Disclaimer") and any redistribution must be conditioned upon127* including a substantially similar Disclaimer requirement for further128* binary redistribution.129* 3. Neither the names of the above-listed copyright holders nor the names130* of any contributors may be used to endorse or promote products derived131* from this software without specific prior written permission.132*133* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS134* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT135* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR136* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT137* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,138* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT139* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,140* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY141* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT142* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE143* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.144*145* Alternatively, you may choose to be licensed under the terms of the146* GNU General Public License ("GPL") version 2 as published by the Free147* Software Foundation.148*149*****************************************************************************/150151#ifndef __ACTBL2_H__152#define __ACTBL2_H__153154155/*******************************************************************************156*157* Additional ACPI Tables (2)158*159* These tables are not consumed directly by the ACPICA subsystem, but are160* included here to support device drivers and the AML disassembler.161*162******************************************************************************/163164165/*166* Values for description table header signatures for tables defined in this167* file. Useful because they make it more difficult to inadvertently type in168* the wrong signature.169*/170#define ACPI_SIG_AGDI "AGDI" /* Arm Generic Diagnostic Dump and Reset Device Interface */171#define ACPI_SIG_APMT "APMT" /* Arm Performance Monitoring Unit table */172#define ACPI_SIG_BDAT "BDAT" /* BIOS Data ACPI Table */173#define ACPI_SIG_CCEL "CCEL" /* CC Event Log Table */174#define ACPI_SIG_CDAT "CDAT" /* Coherent Device Attribute Table */175#define ACPI_SIG_ERDT "ERDT" /* Enhanced Resource Director Technology */176#define ACPI_SIG_IORT "IORT" /* IO Remapping Table */177#define ACPI_SIG_IVRS "IVRS" /* I/O Virtualization Reporting Structure */178#define ACPI_SIG_LPIT "LPIT" /* Low Power Idle Table */179#define ACPI_SIG_MADT "APIC" /* Multiple APIC Description Table */180#define ACPI_SIG_MCFG "MCFG" /* PCI Memory Mapped Configuration table */181#define ACPI_SIG_MCHI "MCHI" /* Management Controller Host Interface table */182#define ACPI_SIG_MPAM "MPAM" /* Memory System Resource Partitioning and Monitoring Table */183#define ACPI_SIG_MPST "MPST" /* Memory Power State Table */184#define ACPI_SIG_MRRM "MRRM" /* Memory Range and Region Mapping table */185#define ACPI_SIG_MSDM "MSDM" /* Microsoft Data Management Table */186#define ACPI_SIG_NFIT "NFIT" /* NVDIMM Firmware Interface Table */187#define ACPI_SIG_NHLT "NHLT" /* Non HD Audio Link Table */188#define ACPI_SIG_PCCT "PCCT" /* Platform Communications Channel Table */189#define ACPI_SIG_PDTT "PDTT" /* Platform Debug Trigger Table */190#define ACPI_SIG_PHAT "PHAT" /* Platform Health Assessment Table */191#define ACPI_SIG_PMTT "PMTT" /* Platform Memory Topology Table */192#define ACPI_SIG_PPTT "PPTT" /* Processor Properties Topology Table */193#define ACPI_SIG_PRMT "PRMT" /* Platform Runtime Mechanism Table */194#define ACPI_SIG_RASF "RASF" /* RAS Feature table */195#define ACPI_SIG_RAS2 "RAS2" /* RAS2 Feature table */196#define ACPI_SIG_RGRT "RGRT" /* Regulatory Graphics Resource Table */197#define ACPI_SIG_RHCT "RHCT" /* RISC-V Hart Capabilities Table */198#define ACPI_SIG_RIMT "RIMT" /* RISC-V IO Mapping Table */199#define ACPI_SIG_SBST "SBST" /* Smart Battery Specification Table */200#define ACPI_SIG_SDEI "SDEI" /* Software Delegated Exception Interface Table */201#define ACPI_SIG_SDEV "SDEV" /* Secure Devices table */202#define ACPI_SIG_SVKL "SVKL" /* Storage Volume Key Location Table */203#define ACPI_SIG_SWFT "SWFT" /* SoundWire File Table */204#define ACPI_SIG_TDEL "TDEL" /* TD Event Log Table */205206207/*208* All tables must be byte-packed to match the ACPI specification, since209* the tables are provided by the system BIOS.210*/211#pragma pack(1)212213/*214* Note: C bitfields are not used for this reason:215*216* "Bitfields are great and easy to read, but unfortunately the C language217* does not specify the layout of bitfields in memory, which means they are218* essentially useless for dealing with packed data in on-disk formats or219* binary wire protocols." (Or ACPI tables and buffers.) "If you ask me,220* this decision was a design error in C. Ritchie could have picked an order221* and stuck with it." Norman Ramsey.222* See http://stackoverflow.com/a/1053662/41661223*/224225226/*******************************************************************************227*228* AEST - Arm Error Source Table229*230* Conforms to: ACPI for the Armv8 RAS Extensions 1.1 Platform Design Document231* September 2020.232*233******************************************************************************/234235typedef struct acpi_table_aest236{237ACPI_TABLE_HEADER Header;238239} ACPI_TABLE_AEST;240241/* Common Subtable header - one per Node Structure (Subtable) */242243typedef struct acpi_aest_hdr244{245UINT8 Type;246UINT16 Length;247UINT8 Reserved;248UINT32 NodeSpecificOffset;249UINT32 NodeInterfaceOffset;250UINT32 NodeInterruptOffset;251UINT32 NodeInterruptCount;252UINT64 TimestampRate;253UINT64 Reserved1;254UINT64 ErrorInjectionRate;255256} ACPI_AEST_HEADER;257258/* Values for Type above */259260#define ACPI_AEST_PROCESSOR_ERROR_NODE 0261#define ACPI_AEST_MEMORY_ERROR_NODE 1262#define ACPI_AEST_SMMU_ERROR_NODE 2263#define ACPI_AEST_VENDOR_ERROR_NODE 3264#define ACPI_AEST_GIC_ERROR_NODE 4265#define ACPI_AEST_PCIE_ERROR_NODE 5266#define ACPI_AEST_PROXY_ERROR_NODE 6267#define ACPI_AEST_NODE_TYPE_RESERVED 7 /* 7 and above are reserved */268269270/*271* AEST subtables (Error nodes)272*/273274/* 0: Processor Error */275276typedef struct acpi_aest_processor277{278UINT32 ProcessorId;279UINT8 ResourceType;280UINT8 Reserved;281UINT8 Flags;282UINT8 Revision;283UINT64 ProcessorAffinity;284285} ACPI_AEST_PROCESSOR;286287/* Values for ResourceType above, related structs below */288289#define ACPI_AEST_CACHE_RESOURCE 0290#define ACPI_AEST_TLB_RESOURCE 1291#define ACPI_AEST_GENERIC_RESOURCE 2292#define ACPI_AEST_RESOURCE_RESERVED 3 /* 3 and above are reserved */293294/* 0R: Processor Cache Resource Substructure */295296typedef struct acpi_aest_processor_cache297{298UINT32 CacheReference;299UINT32 Reserved;300301} ACPI_AEST_PROCESSOR_CACHE;302303/* Values for CacheType above */304305#define ACPI_AEST_CACHE_DATA 0306#define ACPI_AEST_CACHE_INSTRUCTION 1307#define ACPI_AEST_CACHE_UNIFIED 2308#define ACPI_AEST_CACHE_RESERVED 3 /* 3 and above are reserved */309310/* 1R: Processor TLB Resource Substructure */311312typedef struct acpi_aest_processor_tlb313{314UINT32 TlbLevel;315UINT32 Reserved;316317} ACPI_AEST_PROCESSOR_TLB;318319/* 2R: Processor Generic Resource Substructure */320321typedef struct acpi_aest_processor_generic322{323UINT32 Resource;324325} ACPI_AEST_PROCESSOR_GENERIC;326327/* 1: Memory Error */328329typedef struct acpi_aest_memory330{331UINT32 SratProximityDomain;332333} ACPI_AEST_MEMORY;334335/* 2: Smmu Error */336337typedef struct acpi_aest_smmu338{339UINT32 IortNodeReference;340UINT32 SubcomponentReference;341342} ACPI_AEST_SMMU;343344/* 3: Vendor Defined */345346typedef struct acpi_aest_vendor347{348UINT32 AcpiHid;349UINT32 AcpiUid;350UINT8 VendorSpecificData[16];351352} ACPI_AEST_VENDOR;353354/* 3: Vendor Defined V2 */355356typedef struct acpi_aest_vendor_v2357{358UINT64 AcpiHid;359UINT32 AcpiUid;360UINT8 VendorSpecificData[16];361362} ACPI_AEST_VENDOR_V2;363364/* 4: Gic Error */365366typedef struct acpi_aest_gic367{368UINT32 InterfaceType;369UINT32 InstanceId;370371} ACPI_AEST_GIC;372373/* Values for InterfaceType above */374375#define ACPI_AEST_GIC_CPU 0376#define ACPI_AEST_GIC_DISTRIBUTOR 1377#define ACPI_AEST_GIC_REDISTRIBUTOR 2378#define ACPI_AEST_GIC_ITS 3379#define ACPI_AEST_GIC_RESERVED 4 /* 4 and above are reserved */380381/* 5: PCIe Error */382383typedef struct acpi_aest_pcie384{385UINT32 IortNodeReference;386387} ACPI_AEST_PCIE;388389390/* 6: Proxy Error */391392typedef struct acpi_aest_proxy393{394UINT64 NodeAddress;395396} ACPI_AEST_PROXY;397398/* Node Interface Structure */399400typedef struct acpi_aest_node_interface401{402UINT8 Type;403UINT8 Reserved[3];404UINT32 Flags;405UINT64 Address;406UINT32 ErrorRecordIndex;407UINT32 ErrorRecordCount;408UINT64 ErrorRecordImplemented;409UINT64 ErrorStatusReporting;410UINT64 AddressingMode;411412} ACPI_AEST_NODE_INTERFACE;413414/* Node Interface Structure V2*/415416typedef struct acpi_aest_node_interface_header417{418UINT8 Type;419UINT8 GroupFormat;420UINT8 Reserved[2];421UINT32 Flags;422UINT64 Address;423UINT32 ErrorRecordIndex;424UINT32 ErrorRecordCount;425426} ACPI_AEST_NODE_INTERFACE_HEADER;427428#define ACPI_AEST_NODE_GROUP_FORMAT_4K 0429#define ACPI_AEST_NODE_GROUP_FORMAT_16K 1430#define ACPI_AEST_NODE_GROUP_FORMAT_64K 2431432typedef struct acpi_aest_node_interface_common433{434UINT32 ErrorNodeDevice;435UINT32 ProcessorAffinity;436UINT64 ErrorGroupRegisterBase;437UINT64 FaultInjectRegisterBase;438UINT64 InterruptConfigRegisterBase;439440} ACPI_AEST_NODE_INTERFACE_COMMON;441442typedef struct acpi_aest_node_interface_4k443{444UINT64 ErrorRecordImplemented;445UINT64 ErrorStatusReporting;446UINT64 AddressingMode;447ACPI_AEST_NODE_INTERFACE_COMMON Common;448449} ACPI_AEST_NODE_INTERFACE_4K;450451typedef struct acpi_aest_node_interface_16k452{453UINT64 ErrorRecordImplemented[4];454UINT64 ErrorStatusReporting[4];455UINT64 AddressingMode[4];456ACPI_AEST_NODE_INTERFACE_COMMON Common;457458} ACPI_AEST_NODE_INTERFACE_16K;459460typedef struct acpi_aest_node_interface_64k461{462INT64 ErrorRecordImplemented[14];463UINT64 ErrorStatusReporting[14];464UINT64 AddressingMode[14];465ACPI_AEST_NODE_INTERFACE_COMMON Common;466467} ACPI_AEST_NODE_INTERFACE_64K;468469/* Values for Type field above */470471#define ACPI_AEST_NODE_SYSTEM_REGISTER 0472#define ACPI_AEST_NODE_MEMORY_MAPPED 1473#define ACPI_AEST_NODE_SINGLE_RECORD_MEMORY_MAPPED 2474#define ACPI_AEST_XFACE_RESERVED 3 /* 2 and above are reserved */475476/* Node Interrupt Structure */477478typedef struct acpi_aest_node_interrupt479{480UINT8 Type;481UINT8 Reserved[2];482UINT8 Flags;483UINT32 Gsiv;484UINT8 IortId;485UINT8 Reserved1[3];486487} ACPI_AEST_NODE_INTERRUPT;488489/* Node Interrupt Structure V2 */490491typedef struct acpi_aest_node_interrupt_v2492{493UINT8 Type;494UINT8 Reserved[2];495UINT8 Flags;496UINT32 Gsiv;497UINT8 Reserved1[4];498499} ACPI_AEST_NODE_INTERRUPT_V2;500501/* Values for Type field above */502503#define ACPI_AEST_NODE_FAULT_HANDLING 0504#define ACPI_AEST_NODE_ERROR_RECOVERY 1505#define ACPI_AEST_XRUPT_RESERVED 2 /* 2 and above are reserved */506507508/*******************************************************************************509* AGDI - Arm Generic Diagnostic Dump and Reset Device Interface510*511* Conforms to "ACPI for Arm Components 1.1, Platform Design Document"512* ARM DEN0093 v1.1513*514******************************************************************************/515typedef struct acpi_table_agdi516{517ACPI_TABLE_HEADER Header; /* Common ACPI table header */518UINT8 Flags;519UINT8 Reserved[3];520UINT32 SdeiEvent;521UINT32 Gsiv;522523} ACPI_TABLE_AGDI;524525/* Mask for Flags field above */526527#define ACPI_AGDI_SIGNALING_MODE (1)528529530/*******************************************************************************531*532* APMT - ARM Performance Monitoring Unit Table533*534* Conforms to:535* ARM Performance Monitoring Unit Architecture 1.0 Platform Design Document536* ARM DEN0117 v1.0 November 25, 2021537*538******************************************************************************/539540typedef struct acpi_table_apmt {541ACPI_TABLE_HEADER Header; /* Common ACPI table header */542} ACPI_TABLE_APMT;543544#define ACPI_APMT_NODE_ID_LENGTH 4545546/*547* APMT subtables548*/549typedef struct acpi_apmt_node {550UINT16 Length;551UINT8 Flags;552UINT8 Type;553UINT32 Id;554UINT64 InstPrimary;555UINT32 InstSecondary;556UINT64 BaseAddress0;557UINT64 BaseAddress1;558UINT32 OvflwIrq;559UINT32 Reserved;560UINT32 OvflwIrqFlags;561UINT32 ProcAffinity;562UINT32 ImplId;563} ACPI_APMT_NODE;564565/* Masks for Flags field above */566567#define ACPI_APMT_FLAGS_DUAL_PAGE (1<<0)568#define ACPI_APMT_FLAGS_AFFINITY (1<<1)569#define ACPI_APMT_FLAGS_ATOMIC (1<<2)570571/* Values for Flags dual page field above */572573#define ACPI_APMT_FLAGS_DUAL_PAGE_NSUPP (0<<0)574#define ACPI_APMT_FLAGS_DUAL_PAGE_SUPP (1<<0)575576/* Values for Flags processor affinity field above */577#define ACPI_APMT_FLAGS_AFFINITY_PROC (0<<1)578#define ACPI_APMT_FLAGS_AFFINITY_PROC_CONTAINER (1<<1)579580/* Values for Flags 64-bit atomic field above */581#define ACPI_APMT_FLAGS_ATOMIC_NSUPP (0<<2)582#define ACPI_APMT_FLAGS_ATOMIC_SUPP (1<<2)583584/* Values for Type field above */585586enum acpi_apmt_node_type {587ACPI_APMT_NODE_TYPE_MC = 0x00,588ACPI_APMT_NODE_TYPE_SMMU = 0x01,589ACPI_APMT_NODE_TYPE_PCIE_ROOT = 0x02,590ACPI_APMT_NODE_TYPE_ACPI = 0x03,591ACPI_APMT_NODE_TYPE_CACHE = 0x04,592ACPI_APMT_NODE_TYPE_COUNT593};594595/* Masks for ovflw_irq_flags field above */596597#define ACPI_APMT_OVFLW_IRQ_FLAGS_MODE (1<<0)598#define ACPI_APMT_OVFLW_IRQ_FLAGS_TYPE (1<<1)599600/* Values for ovflw_irq_flags mode field above */601602#define ACPI_APMT_OVFLW_IRQ_FLAGS_MODE_LEVEL (0<<0)603#define ACPI_APMT_OVFLW_IRQ_FLAGS_MODE_EDGE (1<<0)604605/* Values for ovflw_irq_flags type field above */606607#define ACPI_APMT_OVFLW_IRQ_FLAGS_TYPE_WIRED (0<<1)608609610/*******************************************************************************611*612* BDAT - BIOS Data ACPI Table613*614* Conforms to "BIOS Data ACPI Table", Interface Specification v4.0 Draft 5615* Nov 2020616*617******************************************************************************/618619typedef struct acpi_table_bdat620{621ACPI_TABLE_HEADER Header;622ACPI_GENERIC_ADDRESS Gas;623624} ACPI_TABLE_BDAT;625626/*******************************************************************************627*628* CCEL - CC-Event Log629* From: "Guest-Host-Communication Interface (GHCI) for Intel630* Trust Domain Extensions (Intel TDX)". Feb 2022631*632******************************************************************************/633634typedef struct acpi_table_ccel635{636ACPI_TABLE_HEADER Header; /* Common ACPI table header */637UINT8 CCType;638UINT8 CCSubType;639UINT16 Reserved;640UINT64 LogAreaMinimumLength;641UINT64 LogAreaStartAddress;642643} ACPI_TABLE_CCEL;644645/*******************************************************************************646*647* ERDT - Enhanced Resource Director Technology (ERDT) table648*649* Conforms to "Intel Resource Director Technology Architecture Specification"650* Version 1.1, January 2025651*652******************************************************************************/653654typedef struct acpi_table_erdt655{656ACPI_TABLE_HEADER Header; /* Common ACPI table header */657UINT32 MaxClos; /* Maximum classes of service */658UINT8 Reserved[24];659UINT8 Erdt_Substructures[];660661} ACPI_TABLE_ERDT;662663664/* Values for subtable type in ACPI_SUBTBL_HDR_16 */665666enum AcpiErdtType667{668ACPI_ERDT_TYPE_RMDD = 0,669ACPI_ERDT_TYPE_CACD = 1,670ACPI_ERDT_TYPE_DACD = 2,671ACPI_ERDT_TYPE_CMRC = 3,672ACPI_ERDT_TYPE_MMRC = 4,673ACPI_ERDT_TYPE_MARC = 5,674ACPI_ERDT_TYPE_CARC = 6,675ACPI_ERDT_TYPE_CMRD = 7,676ACPI_ERDT_TYPE_IBRD = 8,677ACPI_ERDT_TYPE_IBAD = 9,678ACPI_ERDT_TYPE_CARD = 10,679ACPI_ERDT_TYPE_RESERVED = 11 /* 11 and above are reserved */680681};682683/*684* ERDT Subtables, correspond to Type in ACPI_SUBTBL_HDR_16685*/686687/* 0: RMDD - Resource Management Domain Description */688689typedef struct acpi_erdt_rmdd690{691ACPI_SUBTBL_HDR_16 Header;692UINT16 Flags;693UINT16 IO_l3_Slices; /* Number of slices in IO cache */694UINT8 IO_l3_Sets; /* Number of sets in IO cache */695UINT8 IO_l3_Ways; /* Number of ways in IO cache */696UINT64 Reserved;697UINT16 DomainId; /* Unique domain ID */698UINT32 MaxRmid; /* Maximun RMID supported */699UINT64 CregBase; /* Control Register Base Address */700UINT16 CregSize; /* Control Register Size (4K pages) */701UINT8 RmddStructs[];702703} ACPI_ERDT_RMDD;704705706/* 1: CACD - CPU Agent Collection Description */707708typedef struct acpi_erdt_cacd709{710ACPI_SUBTBL_HDR_16 Header;711UINT16 Reserved;712UINT16 DomainId; /* Unique domain ID */713UINT32 X2APICIDS[];714715} ACPI_ERDT_CACD;716717718/* 2: DACD - Device Agent Collection Description */719720typedef struct acpi_erdt_dacd721{722ACPI_SUBTBL_HDR_16 Header;723UINT16 Reserved;724UINT16 DomainId; /* Unique domain ID */725UINT8 DevPaths[];726727} ACPI_ERDT_DACD;728729typedef struct acpi_erdt_dacd_dev_paths730{731ACPI_SUBTABLE_HEADER Header;732UINT16 Segment;733UINT8 Reserved;734UINT8 StartBus;735UINT8 Path[];736737} ACPI_ERDT_DACD_PATHS;738739740/* 3: CMRC - Cache Monitoring Registers for CPU Agents */741742typedef struct acpi_erdt_cmrc743{744ACPI_SUBTBL_HDR_16 Header;745UINT32 Reserved1;746UINT32 Flags;747UINT8 IndexFn;748UINT8 Reserved2[11];749UINT64 CmtRegBase;750UINT32 CmtRegSize;751UINT16 ClumpSize;752UINT16 ClumpStride;753UINT64 UpScale;754755} ACPI_ERDT_CMRC;756757758/* 4: MMRC - Memory-bandwidth Monitoring Registers for CPU Agents */759760typedef struct acpi_erdt_mmrc761{762ACPI_SUBTBL_HDR_16 Header;763UINT32 Reserved1;764UINT32 Flags;765UINT8 IndexFn;766UINT8 Reserved2[11];767UINT64 RegBase;768UINT32 RegSize;769UINT8 CounterWidth;770UINT64 UpScale;771UINT8 Reserved3[7];772UINT32 CorrFactorListLen;773UINT32 CorrFactorList[];774775} ACPI_ERDT_MMRC;776777778/* 5: MARC - Memory-bandwidth Allocation Registers for CPU Agents */779780typedef struct acpi_erdt_marc781{782ACPI_SUBTBL_HDR_16 Header;783UINT16 Reserved1;784UINT16 Flags;785UINT8 IndexFn;786UINT8 Reserved2[7];787UINT64 RegBaseOpt;788UINT64 RegBaseMin;789UINT64 RegBaseMax;790UINT32 MbaRegSize;791UINT32 MbaCtrlRange;792793} ACPI_ERDT_MARC;794795796/* 6: CARC - Cache Allocation Registers for CPU Agents */797798typedef struct acpi_erdt_carc799{800ACPI_SUBTBL_HDR_16 Header;801802} ACPI_ERDT_CARC;803804805/* 7: CMRD - Cache Monitoring Registers for Device Agents */806807typedef struct acpi_erdt_cmrd808{809ACPI_SUBTBL_HDR_16 Header;810UINT32 Reserved1;811UINT32 Flags;812UINT8 IndexFn;813UINT8 Reserved2[11];814UINT64 RegBase;815UINT32 RegSize;816UINT16 CmtRegOff;817UINT16 CmtClumpSize;818UINT64 UpScale;819820} ACPI_ERDT_CMRD;821822823/* 8: IBRD - Cache Monitoring Registers for Device Agents */824825typedef struct acpi_erdt_ibrd826{827ACPI_SUBTBL_HDR_16 Header;828UINT32 Reserved1;829UINT32 Flags;830UINT8 IndexFn;831UINT8 Reserved2[11];832UINT64 RegBase;833UINT32 RegSize;834UINT16 TotalBwOffset;835UINT16 IOMissBwOffset;836UINT16 TotalBwClump;837UINT16 IOMissBwClump;838UINT8 Reserved3[7];839UINT8 CounterWidth;840UINT64 UpScale;841UINT32 CorrFactorListLen;842UINT32 CorrFactorList[];843844} ACPI_ERDT_IBRD;845846847/* 9: IBAD - IO bandwidth Allocation Registers for device agents */848849typedef struct acpi_erdt_ibad850{851ACPI_SUBTBL_HDR_16 Header;852853} ACPI_ERDT_IBAD;854855856/* 10: CARD - IO bandwidth Allocation Registers for Device Agents */857858typedef struct acpi_erdt_card859{860ACPI_SUBTBL_HDR_16 Header;861UINT32 Reserved1;862UINT32 Flags;863UINT32 ContentionMask;864UINT8 IndexFn;865UINT8 Reserved2[7];866UINT64 RegBase;867UINT32 RegSize;868UINT16 CatRegOffset;869UINT16 CatRegBlockSize;870871} ACPI_ERDT_CARD;872873874/*******************************************************************************875*876* IORT - IO Remapping Table877*878* Conforms to "IO Remapping Table System Software on ARM Platforms",879* Document number: ARM DEN 0049E.f, Apr 2024880*881******************************************************************************/882883typedef struct acpi_table_iort884{885ACPI_TABLE_HEADER Header;886UINT32 NodeCount;887UINT32 NodeOffset;888UINT32 Reserved;889890} ACPI_TABLE_IORT;891892893/*894* IORT subtables895*/896typedef struct acpi_iort_node897{898UINT8 Type;899UINT16 Length;900UINT8 Revision;901UINT32 Identifier;902UINT32 MappingCount;903UINT32 MappingOffset;904char NodeData[];905906} ACPI_IORT_NODE;907908/* Values for subtable Type above */909910enum AcpiIortNodeType911{912ACPI_IORT_NODE_ITS_GROUP = 0x00,913ACPI_IORT_NODE_NAMED_COMPONENT = 0x01,914ACPI_IORT_NODE_PCI_ROOT_COMPLEX = 0x02,915ACPI_IORT_NODE_SMMU = 0x03,916ACPI_IORT_NODE_SMMU_V3 = 0x04,917ACPI_IORT_NODE_PMCG = 0x05,918ACPI_IORT_NODE_RMR = 0x06,919};920921922typedef struct acpi_iort_id_mapping923{924UINT32 InputBase; /* Lowest value in input range */925UINT32 IdCount; /* Number of IDs */926UINT32 OutputBase; /* Lowest value in output range */927UINT32 OutputReference; /* A reference to the output node */928UINT32 Flags;929930} ACPI_IORT_ID_MAPPING;931932/* Masks for Flags field above for IORT subtable */933934#define ACPI_IORT_ID_SINGLE_MAPPING (1)935936937typedef struct acpi_iort_memory_access938{939UINT32 CacheCoherency;940UINT8 Hints;941UINT16 Reserved;942UINT8 MemoryFlags;943944} ACPI_IORT_MEMORY_ACCESS;945946/* Values for CacheCoherency field above */947948#define ACPI_IORT_NODE_COHERENT 0x00000001 /* The device node is fully coherent */949#define ACPI_IORT_NODE_NOT_COHERENT 0x00000000 /* The device node is not coherent */950951/* Masks for Hints field above */952953#define ACPI_IORT_HT_TRANSIENT (1)954#define ACPI_IORT_HT_WRITE (1<<1)955#define ACPI_IORT_HT_READ (1<<2)956#define ACPI_IORT_HT_OVERRIDE (1<<3)957958/* Masks for MemoryFlags field above */959960#define ACPI_IORT_MF_COHERENCY (1)961#define ACPI_IORT_MF_ATTRIBUTES (1<<1)962#define ACPI_IORT_MF_CANWBS (1<<2)963964965/*966* IORT node specific subtables967*/968typedef struct acpi_iort_its_group969{970UINT32 ItsCount;971UINT32 Identifiers[]; /* GIC ITS identifier array */972973} ACPI_IORT_ITS_GROUP;974975976typedef struct acpi_iort_named_component977{978UINT32 NodeFlags;979UINT64 MemoryProperties; /* Memory access properties */980UINT8 MemoryAddressLimit; /* Memory address size limit */981char DeviceName[]; /* Path of namespace object */982983} ACPI_IORT_NAMED_COMPONENT;984985/* Masks for Flags field above */986987#define ACPI_IORT_NC_STALL_SUPPORTED (1)988#define ACPI_IORT_NC_PASID_BITS (31<<1)989990typedef struct acpi_iort_root_complex991{992UINT64 MemoryProperties; /* Memory access properties */993UINT32 AtsAttribute;994UINT32 PciSegmentNumber;995UINT8 MemoryAddressLimit; /* Memory address size limit */996UINT16 PasidCapabilities; /* PASID Capabilities */997UINT8 Reserved[]; /* Reserved, must be zero */998999} ACPI_IORT_ROOT_COMPLEX;10001001/* Masks for AtsAttribute field above */10021003#define ACPI_IORT_ATS_SUPPORTED (1) /* The root complex ATS support */1004#define ACPI_IORT_PRI_SUPPORTED (1<<1) /* The root complex PRI support */1005#define ACPI_IORT_PASID_FWD_SUPPORTED (1<<2) /* The root complex PASID forward support */10061007/* Masks for PasidCapabilities field above */1008#define ACPI_IORT_PASID_MAX_WIDTH (0x1F) /* Bits 0-4 */10091010typedef struct acpi_iort_smmu1011{1012UINT64 BaseAddress; /* SMMU base address */1013UINT64 Span; /* Length of memory range */1014UINT32 Model;1015UINT32 Flags;1016UINT32 GlobalInterruptOffset;1017UINT32 ContextInterruptCount;1018UINT32 ContextInterruptOffset;1019UINT32 PmuInterruptCount;1020UINT32 PmuInterruptOffset;1021UINT64 Interrupts[]; /* Interrupt array */10221023} ACPI_IORT_SMMU;10241025/* Values for Model field above */10261027#define ACPI_IORT_SMMU_V1 0x00000000 /* Generic SMMUv1 */1028#define ACPI_IORT_SMMU_V2 0x00000001 /* Generic SMMUv2 */1029#define ACPI_IORT_SMMU_CORELINK_MMU400 0x00000002 /* ARM Corelink MMU-400 */1030#define ACPI_IORT_SMMU_CORELINK_MMU500 0x00000003 /* ARM Corelink MMU-500 */1031#define ACPI_IORT_SMMU_CORELINK_MMU401 0x00000004 /* ARM Corelink MMU-401 */1032#define ACPI_IORT_SMMU_CAVIUM_THUNDERX 0x00000005 /* Cavium ThunderX SMMUv2 */10331034/* Masks for Flags field above */10351036#define ACPI_IORT_SMMU_DVM_SUPPORTED (1)1037#define ACPI_IORT_SMMU_COHERENT_WALK (1<<1)10381039/* Global interrupt format */10401041typedef struct acpi_iort_smmu_gsi1042{1043UINT32 NSgIrpt;1044UINT32 NSgIrptFlags;1045UINT32 NSgCfgIrpt;1046UINT32 NSgCfgIrptFlags;10471048} ACPI_IORT_SMMU_GSI;104910501051typedef struct acpi_iort_smmu_v31052{1053UINT64 BaseAddress; /* SMMUv3 base address */1054UINT32 Flags;1055UINT32 Reserved;1056UINT64 VatosAddress;1057UINT32 Model;1058UINT32 EventGsiv;1059UINT32 PriGsiv;1060UINT32 GerrGsiv;1061UINT32 SyncGsiv;1062UINT32 Pxm;1063UINT32 IdMappingIndex;10641065} ACPI_IORT_SMMU_V3;10661067/* Values for Model field above */10681069#define ACPI_IORT_SMMU_V3_GENERIC 0x00000000 /* Generic SMMUv3 */1070#define ACPI_IORT_SMMU_V3_HISILICON_HI161X 0x00000001 /* HiSilicon Hi161x SMMUv3 */1071#define ACPI_IORT_SMMU_V3_CAVIUM_CN99XX 0x00000002 /* Cavium CN99xx SMMUv3 */10721073/* Masks for Flags field above */10741075#define ACPI_IORT_SMMU_V3_COHACC_OVERRIDE (1)1076#define ACPI_IORT_SMMU_V3_HTTU_OVERRIDE (3<<1)1077#define ACPI_IORT_SMMU_V3_PXM_VALID (1<<3)1078#define ACPI_IORT_SMMU_V3_DEVICEID_VALID (1<<4)10791080typedef struct acpi_iort_pmcg1081{1082UINT64 Page0BaseAddress;1083UINT32 OverflowGsiv;1084UINT32 NodeReference;1085UINT64 Page1BaseAddress;10861087} ACPI_IORT_PMCG;10881089typedef struct acpi_iort_rmr {1090UINT32 Flags;1091UINT32 RmrCount;1092UINT32 RmrOffset;10931094} ACPI_IORT_RMR;10951096/* Masks for Flags field above */1097#define ACPI_IORT_RMR_REMAP_PERMITTED (1)1098#define ACPI_IORT_RMR_ACCESS_PRIVILEGE (1<<1)10991100/*1101* Macro to access the Access Attributes in flags field above:1102* Access Attributes is encoded in bits 9:21103*/1104#define ACPI_IORT_RMR_ACCESS_ATTRIBUTES(flags) (((flags) >> 2) & 0xFF)11051106/* Values for above Access Attributes */11071108#define ACPI_IORT_RMR_ATTR_DEVICE_NGNRNE 0x001109#define ACPI_IORT_RMR_ATTR_DEVICE_NGNRE 0x011110#define ACPI_IORT_RMR_ATTR_DEVICE_NGRE 0x021111#define ACPI_IORT_RMR_ATTR_DEVICE_GRE 0x031112#define ACPI_IORT_RMR_ATTR_NORMAL_NC 0x041113#define ACPI_IORT_RMR_ATTR_NORMAL_IWB_OWB 0x0511141115typedef struct acpi_iort_rmr_desc {1116UINT64 BaseAddress;1117UINT64 Length;1118UINT32 Reserved;11191120} ACPI_IORT_RMR_DESC;11211122/*******************************************************************************1123*1124* IVRS - I/O Virtualization Reporting Structure1125* Version 11126*1127* Conforms to "AMD I/O Virtualization Technology (IOMMU) Specification",1128* Revision 1.26, February 2009.1129*1130******************************************************************************/11311132typedef struct acpi_table_ivrs1133{1134ACPI_TABLE_HEADER Header; /* Common ACPI table header */1135UINT32 Info; /* Common virtualization info */1136UINT64 Reserved;11371138} ACPI_TABLE_IVRS;11391140/* Values for Info field above */11411142#define ACPI_IVRS_PHYSICAL_SIZE 0x00007F00 /* 7 bits, physical address size */1143#define ACPI_IVRS_VIRTUAL_SIZE 0x003F8000 /* 7 bits, virtual address size */1144#define ACPI_IVRS_ATS_RESERVED 0x00400000 /* ATS address translation range reserved */114511461147/* IVRS subtable header */11481149typedef struct acpi_ivrs_header1150{1151UINT8 Type; /* Subtable type */1152UINT8 Flags;1153UINT16 Length; /* Subtable length */1154UINT16 DeviceId; /* ID of IOMMU */11551156} ACPI_IVRS_HEADER;11571158/* Values for subtable Type above */11591160enum AcpiIvrsType1161{1162ACPI_IVRS_TYPE_HARDWARE1 = 0x10,1163ACPI_IVRS_TYPE_HARDWARE2 = 0x11,1164ACPI_IVRS_TYPE_HARDWARE3 = 0x40,1165ACPI_IVRS_TYPE_MEMORY1 = 0x20,1166ACPI_IVRS_TYPE_MEMORY2 = 0x21,1167ACPI_IVRS_TYPE_MEMORY3 = 0x221168};11691170/* Masks for Flags field above for IVHD subtable */11711172#define ACPI_IVHD_TT_ENABLE (1)1173#define ACPI_IVHD_PASS_PW (1<<1)1174#define ACPI_IVHD_RES_PASS_PW (1<<2)1175#define ACPI_IVHD_ISOC (1<<3)1176#define ACPI_IVHD_IOTLB (1<<4)11771178/* Masks for Flags field above for IVMD subtable */11791180#define ACPI_IVMD_UNITY (1)1181#define ACPI_IVMD_READ (1<<1)1182#define ACPI_IVMD_WRITE (1<<2)1183#define ACPI_IVMD_EXCLUSION_RANGE (1<<3)118411851186/*1187* IVRS subtables, correspond to Type in ACPI_IVRS_HEADER1188*/11891190/* 0x10: I/O Virtualization Hardware Definition Block (IVHD) */11911192typedef struct acpi_ivrs_hardware_101193{1194ACPI_IVRS_HEADER Header;1195UINT16 CapabilityOffset; /* Offset for IOMMU control fields */1196UINT64 BaseAddress; /* IOMMU control registers */1197UINT16 PciSegmentGroup;1198UINT16 Info; /* MSI number and unit ID */1199UINT32 FeatureReporting;12001201} ACPI_IVRS_HARDWARE1;12021203/* 0x11: I/O Virtualization Hardware Definition Block (IVHD) */12041205typedef struct acpi_ivrs_hardware_111206{1207ACPI_IVRS_HEADER Header;1208UINT16 CapabilityOffset; /* Offset for IOMMU control fields */1209UINT64 BaseAddress; /* IOMMU control registers */1210UINT16 PciSegmentGroup;1211UINT16 Info; /* MSI number and unit ID */1212UINT32 Attributes;1213UINT64 EfrRegisterImage;1214UINT64 Reserved;1215} ACPI_IVRS_HARDWARE2;12161217/* Masks for Info field above */12181219#define ACPI_IVHD_MSI_NUMBER_MASK 0x001F /* 5 bits, MSI message number */1220#define ACPI_IVHD_UNIT_ID_MASK 0x1F00 /* 5 bits, UnitID */122112221223/*1224* Device Entries for IVHD subtable, appear after ACPI_IVRS_HARDWARE structure.1225* Upper two bits of the Type field are the (encoded) length of the structure.1226* Currently, only 4 and 8 byte entries are defined. 16 and 32 byte entries1227* are reserved for future use but not defined.1228*/1229typedef struct acpi_ivrs_de_header1230{1231UINT8 Type;1232UINT16 Id;1233UINT8 DataSetting;12341235} ACPI_IVRS_DE_HEADER;12361237/* Length of device entry is in the top two bits of Type field above */12381239#define ACPI_IVHD_ENTRY_LENGTH 0xC012401241/* Values for device entry Type field above */12421243enum AcpiIvrsDeviceEntryType1244{1245/* 4-byte device entries, all use ACPI_IVRS_DEVICE4 */12461247ACPI_IVRS_TYPE_PAD4 = 0,1248ACPI_IVRS_TYPE_ALL = 1,1249ACPI_IVRS_TYPE_SELECT = 2,1250ACPI_IVRS_TYPE_START = 3,1251ACPI_IVRS_TYPE_END = 4,12521253/* 8-byte device entries */12541255ACPI_IVRS_TYPE_PAD8 = 64,1256ACPI_IVRS_TYPE_NOT_USED = 65,1257ACPI_IVRS_TYPE_ALIAS_SELECT = 66, /* Uses ACPI_IVRS_DEVICE8A */1258ACPI_IVRS_TYPE_ALIAS_START = 67, /* Uses ACPI_IVRS_DEVICE8A */1259ACPI_IVRS_TYPE_EXT_SELECT = 70, /* Uses ACPI_IVRS_DEVICE8B */1260ACPI_IVRS_TYPE_EXT_START = 71, /* Uses ACPI_IVRS_DEVICE8B */1261ACPI_IVRS_TYPE_SPECIAL = 72, /* Uses ACPI_IVRS_DEVICE8C */12621263/* Variable-length device entries */12641265ACPI_IVRS_TYPE_HID = 240 /* Uses ACPI_IVRS_DEVICE_HID */1266};12671268/* Values for Data field above */12691270#define ACPI_IVHD_INIT_PASS (1)1271#define ACPI_IVHD_EINT_PASS (1<<1)1272#define ACPI_IVHD_NMI_PASS (1<<2)1273#define ACPI_IVHD_SYSTEM_MGMT (3<<4)1274#define ACPI_IVHD_LINT0_PASS (1<<6)1275#define ACPI_IVHD_LINT1_PASS (1<<7)127612771278/* Types 0-4: 4-byte device entry */12791280typedef struct acpi_ivrs_device41281{1282ACPI_IVRS_DE_HEADER Header;12831284} ACPI_IVRS_DEVICE4;12851286/* Types 66-67: 8-byte device entry */12871288typedef struct acpi_ivrs_device8a1289{1290ACPI_IVRS_DE_HEADER Header;1291UINT8 Reserved1;1292UINT16 UsedId;1293UINT8 Reserved2;12941295} ACPI_IVRS_DEVICE8A;12961297/* Types 70-71: 8-byte device entry */12981299typedef struct acpi_ivrs_device8b1300{1301ACPI_IVRS_DE_HEADER Header;1302UINT32 ExtendedData;13031304} ACPI_IVRS_DEVICE8B;13051306/* Values for ExtendedData above */13071308#define ACPI_IVHD_ATS_DISABLED (1<<31)13091310/* Type 72: 8-byte device entry */13111312typedef struct acpi_ivrs_device8c1313{1314ACPI_IVRS_DE_HEADER Header;1315UINT8 Handle;1316UINT16 UsedId;1317UINT8 Variety;13181319} ACPI_IVRS_DEVICE8C;13201321/* Values for Variety field above */13221323#define ACPI_IVHD_IOAPIC 11324#define ACPI_IVHD_HPET 213251326/* Type 240: variable-length device entry */13271328typedef struct acpi_ivrs_device_hid1329{1330ACPI_IVRS_DE_HEADER Header;1331UINT64 AcpiHid;1332UINT64 AcpiCid;1333UINT8 UidType;1334UINT8 UidLength;13351336} ACPI_IVRS_DEVICE_HID;13371338/* Values for UidType above */13391340#define ACPI_IVRS_UID_NOT_PRESENT 01341#define ACPI_IVRS_UID_IS_INTEGER 11342#define ACPI_IVRS_UID_IS_STRING 213431344/* 0x20, 0x21, 0x22: I/O Virtualization Memory Definition Block (IVMD) */13451346typedef struct acpi_ivrs_memory1347{1348ACPI_IVRS_HEADER Header;1349UINT16 AuxData;1350UINT64 Reserved;1351UINT64 StartAddress;1352UINT64 MemoryLength;13531354} ACPI_IVRS_MEMORY;135513561357/*******************************************************************************1358*1359* LPIT - Low Power Idle Table1360*1361* Conforms to "ACPI Low Power Idle Table (LPIT)" July 2014.1362*1363******************************************************************************/13641365typedef struct acpi_table_lpit1366{1367ACPI_TABLE_HEADER Header; /* Common ACPI table header */13681369} ACPI_TABLE_LPIT;137013711372/* LPIT subtable header */13731374typedef struct acpi_lpit_header1375{1376UINT32 Type; /* Subtable type */1377UINT32 Length; /* Subtable length */1378UINT16 UniqueId;1379UINT16 Reserved;1380UINT32 Flags;13811382} ACPI_LPIT_HEADER;13831384/* Values for subtable Type above */13851386enum AcpiLpitType1387{1388ACPI_LPIT_TYPE_NATIVE_CSTATE = 0x00,1389ACPI_LPIT_TYPE_RESERVED = 0x01 /* 1 and above are reserved */1390};13911392/* Masks for Flags field above */13931394#define ACPI_LPIT_STATE_DISABLED (1)1395#define ACPI_LPIT_NO_COUNTER (1<<1)13961397/*1398* LPIT subtables, correspond to Type in ACPI_LPIT_HEADER1399*/14001401/* 0x00: Native C-state instruction based LPI structure */14021403typedef struct acpi_lpit_native1404{1405ACPI_LPIT_HEADER Header;1406ACPI_GENERIC_ADDRESS EntryTrigger;1407UINT32 Residency;1408UINT32 Latency;1409ACPI_GENERIC_ADDRESS ResidencyCounter;1410UINT64 CounterFrequency;14111412} ACPI_LPIT_NATIVE;141314141415/*******************************************************************************1416*1417* MADT - Multiple APIC Description Table1418* Version 31419*1420******************************************************************************/14211422typedef struct acpi_table_madt1423{1424ACPI_TABLE_HEADER Header; /* Common ACPI table header */1425UINT32 Address; /* Physical address of local APIC */1426UINT32 Flags;14271428} ACPI_TABLE_MADT;14291430/* Masks for Flags field above */14311432#define ACPI_MADT_PCAT_COMPAT (1) /* 00: System also has dual 8259s */14331434/* Values for PCATCompat flag */14351436#define ACPI_MADT_DUAL_PIC 11437#define ACPI_MADT_MULTIPLE_APIC 0143814391440/* Values for MADT subtable type in ACPI_SUBTABLE_HEADER */14411442enum AcpiMadtType1443{1444ACPI_MADT_TYPE_LOCAL_APIC = 0,1445ACPI_MADT_TYPE_IO_APIC = 1,1446ACPI_MADT_TYPE_INTERRUPT_OVERRIDE = 2,1447ACPI_MADT_TYPE_NMI_SOURCE = 3,1448ACPI_MADT_TYPE_LOCAL_APIC_NMI = 4,1449ACPI_MADT_TYPE_LOCAL_APIC_OVERRIDE = 5,1450ACPI_MADT_TYPE_IO_SAPIC = 6,1451ACPI_MADT_TYPE_LOCAL_SAPIC = 7,1452ACPI_MADT_TYPE_INTERRUPT_SOURCE = 8,1453ACPI_MADT_TYPE_LOCAL_X2APIC = 9,1454ACPI_MADT_TYPE_LOCAL_X2APIC_NMI = 10,1455ACPI_MADT_TYPE_GENERIC_INTERRUPT = 11,1456ACPI_MADT_TYPE_GENERIC_DISTRIBUTOR = 12,1457ACPI_MADT_TYPE_GENERIC_MSI_FRAME = 13,1458ACPI_MADT_TYPE_GENERIC_REDISTRIBUTOR = 14,1459ACPI_MADT_TYPE_GENERIC_TRANSLATOR = 15,1460ACPI_MADT_TYPE_MULTIPROC_WAKEUP = 16,1461ACPI_MADT_TYPE_CORE_PIC = 17,1462ACPI_MADT_TYPE_LIO_PIC = 18,1463ACPI_MADT_TYPE_HT_PIC = 19,1464ACPI_MADT_TYPE_EIO_PIC = 20,1465ACPI_MADT_TYPE_MSI_PIC = 21,1466ACPI_MADT_TYPE_BIO_PIC = 22,1467ACPI_MADT_TYPE_LPC_PIC = 23,1468ACPI_MADT_TYPE_RINTC = 24,1469ACPI_MADT_TYPE_IMSIC = 25,1470ACPI_MADT_TYPE_APLIC = 26,1471ACPI_MADT_TYPE_PLIC = 27,1472ACPI_MADT_TYPE_RESERVED = 28, /* 28 to 0x7F are reserved */1473ACPI_MADT_TYPE_OEM_RESERVED = 0x80 /* 0x80 to 0xFF are reserved for OEM use */1474};147514761477/*1478* MADT Subtables, correspond to Type in ACPI_SUBTABLE_HEADER1479*/14801481/* 0: Processor Local APIC */14821483typedef struct acpi_madt_local_apic1484{1485ACPI_SUBTABLE_HEADER Header;1486UINT8 ProcessorId; /* ACPI processor id */1487UINT8 Id; /* Processor's local APIC id */1488UINT32 LapicFlags;14891490} ACPI_MADT_LOCAL_APIC;149114921493/* 1: IO APIC */14941495typedef struct acpi_madt_io_apic1496{1497ACPI_SUBTABLE_HEADER Header;1498UINT8 Id; /* I/O APIC ID */1499UINT8 Reserved; /* Reserved - must be zero */1500UINT32 Address; /* APIC physical address */1501UINT32 GlobalIrqBase; /* Global system interrupt where INTI lines start */15021503} ACPI_MADT_IO_APIC;150415051506/* 2: Interrupt Override */15071508typedef struct acpi_madt_interrupt_override1509{1510ACPI_SUBTABLE_HEADER Header;1511UINT8 Bus; /* 0 - ISA */1512UINT8 SourceIrq; /* Interrupt source (IRQ) */1513UINT32 GlobalIrq; /* Global system interrupt */1514UINT16 IntiFlags;15151516} ACPI_MADT_INTERRUPT_OVERRIDE;151715181519/* 3: NMI Source */15201521typedef struct acpi_madt_nmi_source1522{1523ACPI_SUBTABLE_HEADER Header;1524UINT16 IntiFlags;1525UINT32 GlobalIrq; /* Global system interrupt */15261527} ACPI_MADT_NMI_SOURCE;152815291530/* 4: Local APIC NMI */15311532typedef struct acpi_madt_local_apic_nmi1533{1534ACPI_SUBTABLE_HEADER Header;1535UINT8 ProcessorId; /* ACPI processor id */1536UINT16 IntiFlags;1537UINT8 Lint; /* LINTn to which NMI is connected */15381539} ACPI_MADT_LOCAL_APIC_NMI;154015411542/* 5: Address Override */15431544typedef struct acpi_madt_local_apic_override1545{1546ACPI_SUBTABLE_HEADER Header;1547UINT16 Reserved; /* Reserved, must be zero */1548UINT64 Address; /* APIC physical address */15491550} ACPI_MADT_LOCAL_APIC_OVERRIDE;155115521553/* 6: I/O Sapic */15541555typedef struct acpi_madt_io_sapic1556{1557ACPI_SUBTABLE_HEADER Header;1558UINT8 Id; /* I/O SAPIC ID */1559UINT8 Reserved; /* Reserved, must be zero */1560UINT32 GlobalIrqBase; /* Global interrupt for SAPIC start */1561UINT64 Address; /* SAPIC physical address */15621563} ACPI_MADT_IO_SAPIC;156415651566/* 7: Local Sapic */15671568typedef struct acpi_madt_local_sapic1569{1570ACPI_SUBTABLE_HEADER Header;1571UINT8 ProcessorId; /* ACPI processor id */1572UINT8 Id; /* SAPIC ID */1573UINT8 Eid; /* SAPIC EID */1574UINT8 Reserved[3]; /* Reserved, must be zero */1575UINT32 LapicFlags;1576UINT32 Uid; /* Numeric UID - ACPI 3.0 */1577char UidString[]; /* String UID - ACPI 3.0 */15781579} ACPI_MADT_LOCAL_SAPIC;158015811582/* 8: Platform Interrupt Source */15831584typedef struct acpi_madt_interrupt_source1585{1586ACPI_SUBTABLE_HEADER Header;1587UINT16 IntiFlags;1588UINT8 Type; /* 1=PMI, 2=INIT, 3=corrected */1589UINT8 Id; /* Processor ID */1590UINT8 Eid; /* Processor EID */1591UINT8 IoSapicVector; /* Vector value for PMI interrupts */1592UINT32 GlobalIrq; /* Global system interrupt */1593UINT32 Flags; /* Interrupt Source Flags */15941595} ACPI_MADT_INTERRUPT_SOURCE;15961597/* Masks for Flags field above */15981599#define ACPI_MADT_CPEI_OVERRIDE (1)160016011602/* 9: Processor Local X2APIC (ACPI 4.0) */16031604typedef struct acpi_madt_local_x2apic1605{1606ACPI_SUBTABLE_HEADER Header;1607UINT16 Reserved; /* Reserved - must be zero */1608UINT32 LocalApicId; /* Processor x2APIC ID */1609UINT32 LapicFlags;1610UINT32 Uid; /* ACPI processor UID */16111612} ACPI_MADT_LOCAL_X2APIC;161316141615/* 10: Local X2APIC NMI (ACPI 4.0) */16161617typedef struct acpi_madt_local_x2apic_nmi1618{1619ACPI_SUBTABLE_HEADER Header;1620UINT16 IntiFlags;1621UINT32 Uid; /* ACPI processor UID */1622UINT8 Lint; /* LINTn to which NMI is connected */1623UINT8 Reserved[3]; /* Reserved - must be zero */16241625} ACPI_MADT_LOCAL_X2APIC_NMI;162616271628/* 11: Generic Interrupt - GICC (ACPI 5.0 + ACPI 6.0 + ACPI 6.3 + ACPI 6.5 changes) */16291630typedef struct acpi_madt_generic_interrupt1631{1632ACPI_SUBTABLE_HEADER Header;1633UINT16 Reserved; /* Reserved - must be zero */1634UINT32 CpuInterfaceNumber;1635UINT32 Uid;1636UINT32 Flags;1637UINT32 ParkingVersion;1638UINT32 PerformanceInterrupt;1639UINT64 ParkedAddress;1640UINT64 BaseAddress;1641UINT64 GicvBaseAddress;1642UINT64 GichBaseAddress;1643UINT32 VgicInterrupt;1644UINT64 GicrBaseAddress;1645UINT64 ArmMpidr;1646UINT8 EfficiencyClass;1647UINT8 Reserved2[1];1648UINT16 SpeInterrupt; /* ACPI 6.3 */1649UINT16 TrbeInterrupt; /* ACPI 6.5 */16501651} ACPI_MADT_GENERIC_INTERRUPT;16521653/* Masks for Flags field above */16541655/* ACPI_MADT_ENABLED (1) Processor is usable if set */1656#define ACPI_MADT_PERFORMANCE_IRQ_MODE (1<<1) /* 01: Performance Interrupt Mode */1657#define ACPI_MADT_VGIC_IRQ_MODE (1<<2) /* 02: VGIC Maintenance Interrupt mode */1658#define ACPI_MADT_GICC_ONLINE_CAPABLE (1<<3) /* 03: Processor is online capable */1659#define ACPI_MADT_GICC_NON_COHERENT (1<<4) /* 04: GIC redistributor is not coherent */16601661/* 12: Generic Distributor (ACPI 5.0 + ACPI 6.0 changes) */16621663typedef struct acpi_madt_generic_distributor1664{1665ACPI_SUBTABLE_HEADER Header;1666UINT16 Reserved; /* Reserved - must be zero */1667UINT32 GicId;1668UINT64 BaseAddress;1669UINT32 GlobalIrqBase;1670UINT8 Version;1671UINT8 Reserved2[3]; /* Reserved - must be zero */16721673} ACPI_MADT_GENERIC_DISTRIBUTOR;16741675/* Values for Version field above */16761677enum AcpiMadtGicVersion1678{1679ACPI_MADT_GIC_VERSION_NONE = 0,1680ACPI_MADT_GIC_VERSION_V1 = 1,1681ACPI_MADT_GIC_VERSION_V2 = 2,1682ACPI_MADT_GIC_VERSION_V3 = 3,1683ACPI_MADT_GIC_VERSION_V4 = 4,1684ACPI_MADT_GIC_VERSION_RESERVED = 5 /* 5 and greater are reserved */1685};168616871688/* 13: Generic MSI Frame (ACPI 5.1) */16891690typedef struct acpi_madt_generic_msi_frame1691{1692ACPI_SUBTABLE_HEADER Header;1693UINT16 Reserved; /* Reserved - must be zero */1694UINT32 MsiFrameId;1695UINT64 BaseAddress;1696UINT32 Flags;1697UINT16 SpiCount;1698UINT16 SpiBase;16991700} ACPI_MADT_GENERIC_MSI_FRAME;17011702/* Masks for Flags field above */17031704#define ACPI_MADT_OVERRIDE_SPI_VALUES (1)170517061707/* 14: Generic Redistributor (ACPI 5.1) */17081709typedef struct acpi_madt_generic_redistributor1710{1711ACPI_SUBTABLE_HEADER Header;1712UINT8 Flags;1713UINT8 Reserved; /* reserved - must be zero */1714UINT64 BaseAddress;1715UINT32 Length;17161717} ACPI_MADT_GENERIC_REDISTRIBUTOR;17181719#define ACPI_MADT_GICR_NON_COHERENT (1)17201721/* 15: Generic Translator (ACPI 6.0) */17221723typedef struct acpi_madt_generic_translator1724{1725ACPI_SUBTABLE_HEADER Header;1726UINT8 Flags;1727UINT8 Reserved; /* reserved - must be zero */1728UINT32 TranslationId;1729UINT64 BaseAddress;1730UINT32 Reserved2;17311732} ACPI_MADT_GENERIC_TRANSLATOR;17331734#define ACPI_MADT_ITS_NON_COHERENT (1)17351736/* 16: Multiprocessor wakeup (ACPI 6.4) */17371738typedef struct acpi_madt_multiproc_wakeup1739{1740ACPI_SUBTABLE_HEADER Header;1741UINT16 MailboxVersion;1742UINT32 Reserved; /* reserved - must be zero */1743UINT64 BaseAddress;17441745} ACPI_MADT_MULTIPROC_WAKEUP;17461747#define ACPI_MULTIPROC_WAKEUP_MB_OS_SIZE 20321748#define ACPI_MULTIPROC_WAKEUP_MB_FIRMWARE_SIZE 204817491750typedef struct acpi_madt_multiproc_wakeup_mailbox1751{1752UINT16 Command;1753UINT16 Reserved; /* reserved - must be zero */1754UINT32 ApicId;1755UINT64 WakeupVector;1756UINT8 ReservedOs[ACPI_MULTIPROC_WAKEUP_MB_OS_SIZE]; /* reserved for OS use */1757UINT8 ReservedFirmware[ACPI_MULTIPROC_WAKEUP_MB_FIRMWARE_SIZE]; /* reserved for firmware use */17581759} ACPI_MADT_MULTIPROC_WAKEUP_MAILBOX;17601761#define ACPI_MP_WAKE_COMMAND_WAKEUP 117621763/* 17: CPU Core Interrupt Controller (ACPI 6.5) */17641765typedef struct acpi_madt_core_pic {1766ACPI_SUBTABLE_HEADER Header;1767UINT8 Version;1768UINT32 ProcessorId;1769UINT32 CoreId;1770UINT32 Flags;1771} ACPI_MADT_CORE_PIC;17721773/* Values for Version field above */17741775enum AcpiMadtCorePicVersion {1776ACPI_MADT_CORE_PIC_VERSION_NONE = 0,1777ACPI_MADT_CORE_PIC_VERSION_V1 = 1,1778ACPI_MADT_CORE_PIC_VERSION_RESERVED = 2 /* 2 and greater are reserved */1779};17801781/* 18: Legacy I/O Interrupt Controller (ACPI 6.5) */17821783typedef struct acpi_madt_lio_pic {1784ACPI_SUBTABLE_HEADER Header;1785UINT8 Version;1786UINT64 Address;1787UINT16 Size;1788UINT8 Cascade[2];1789UINT32 CascadeMap[2];1790} ACPI_MADT_LIO_PIC;17911792/* Values for Version field above */17931794enum AcpiMadtLioPicVersion {1795ACPI_MADT_LIO_PIC_VERSION_NONE = 0,1796ACPI_MADT_LIO_PIC_VERSION_V1 = 1,1797ACPI_MADT_LIO_PIC_VERSION_RESERVED = 2 /* 2 and greater are reserved */1798};17991800/* 19: HT Interrupt Controller (ACPI 6.5) */18011802typedef struct acpi_madt_ht_pic {1803ACPI_SUBTABLE_HEADER Header;1804UINT8 Version;1805UINT64 Address;1806UINT16 Size;1807UINT8 Cascade[8];1808} ACPI_MADT_HT_PIC;18091810/* Values for Version field above */18111812enum AcpiMadtHtPicVersion {1813ACPI_MADT_HT_PIC_VERSION_NONE = 0,1814ACPI_MADT_HT_PIC_VERSION_V1 = 1,1815ACPI_MADT_HT_PIC_VERSION_RESERVED = 2 /* 2 and greater are reserved */1816};18171818/* 20: Extend I/O Interrupt Controller (ACPI 6.5) */18191820typedef struct acpi_madt_eio_pic {1821ACPI_SUBTABLE_HEADER Header;1822UINT8 Version;1823UINT8 Cascade;1824UINT8 Node;1825UINT64 NodeMap;1826} ACPI_MADT_EIO_PIC;18271828/* Values for Version field above */18291830enum AcpiMadtEioPicVersion {1831ACPI_MADT_EIO_PIC_VERSION_NONE = 0,1832ACPI_MADT_EIO_PIC_VERSION_V1 = 1,1833ACPI_MADT_EIO_PIC_VERSION_RESERVED = 2 /* 2 and greater are reserved */1834};18351836/* 21: MSI Interrupt Controller (ACPI 6.5) */18371838typedef struct acpi_madt_msi_pic {1839ACPI_SUBTABLE_HEADER Header;1840UINT8 Version;1841UINT64 MsgAddress;1842UINT32 Start;1843UINT32 Count;1844} ACPI_MADT_MSI_PIC;18451846/* Values for Version field above */18471848enum AcpiMadtMsiPicVersion {1849ACPI_MADT_MSI_PIC_VERSION_NONE = 0,1850ACPI_MADT_MSI_PIC_VERSION_V1 = 1,1851ACPI_MADT_MSI_PIC_VERSION_RESERVED = 2 /* 2 and greater are reserved */1852};18531854/* 22: Bridge I/O Interrupt Controller (ACPI 6.5) */18551856typedef struct acpi_madt_bio_pic {1857ACPI_SUBTABLE_HEADER Header;1858UINT8 Version;1859UINT64 Address;1860UINT16 Size;1861UINT16 Id;1862UINT16 GsiBase;1863} ACPI_MADT_BIO_PIC;18641865/* Values for Version field above */18661867enum AcpiMadtBioPicVersion {1868ACPI_MADT_BIO_PIC_VERSION_NONE = 0,1869ACPI_MADT_BIO_PIC_VERSION_V1 = 1,1870ACPI_MADT_BIO_PIC_VERSION_RESERVED = 2 /* 2 and greater are reserved */1871};18721873/* 23: LPC Interrupt Controller (ACPI 6.5) */18741875typedef struct acpi_madt_lpc_pic {1876ACPI_SUBTABLE_HEADER Header;1877UINT8 Version;1878UINT64 Address;1879UINT16 Size;1880UINT8 Cascade;1881} ACPI_MADT_LPC_PIC;18821883/* Values for Version field above */18841885enum AcpiMadtLpcPicVersion {1886ACPI_MADT_LPC_PIC_VERSION_NONE = 0,1887ACPI_MADT_LPC_PIC_VERSION_V1 = 1,1888ACPI_MADT_LPC_PIC_VERSION_RESERVED = 2 /* 2 and greater are reserved */1889};18901891/* 24: RISC-V INTC */1892typedef struct acpi_madt_rintc {1893ACPI_SUBTABLE_HEADER Header;1894UINT8 Version;1895UINT8 Reserved;1896UINT32 Flags;1897UINT64 HartId;1898UINT32 Uid; /* ACPI processor UID */1899UINT32 ExtIntcId; /* External INTC Id */1900UINT64 ImsicAddr; /* IMSIC base address */1901UINT32 ImsicSize; /* IMSIC size */1902} ACPI_MADT_RINTC;19031904/* Values for RISC-V INTC Version field above */19051906enum AcpiMadtRintcVersion {1907ACPI_MADT_RINTC_VERSION_NONE = 0,1908ACPI_MADT_RINTC_VERSION_V1 = 1,1909ACPI_MADT_RINTC_VERSION_RESERVED = 2 /* 2 and greater are reserved */1910};19111912/* 25: RISC-V IMSIC */1913typedef struct acpi_madt_imsic {1914ACPI_SUBTABLE_HEADER Header;1915UINT8 Version;1916UINT8 Reserved;1917UINT32 Flags;1918UINT16 NumIds;1919UINT16 NumGuestIds;1920UINT8 GuestIndexBits;1921UINT8 HartIndexBits;1922UINT8 GroupIndexBits;1923UINT8 GroupIndexShift;1924} ACPI_MADT_IMSIC;19251926/* 26: RISC-V APLIC */1927typedef struct acpi_madt_aplic {1928ACPI_SUBTABLE_HEADER Header;1929UINT8 Version;1930UINT8 Id;1931UINT32 Flags;1932UINT8 HwId[8];1933UINT16 NumIdcs;1934UINT16 NumSources;1935UINT32 GsiBase;1936UINT64 BaseAddr;1937UINT32 Size;1938} ACPI_MADT_APLIC;19391940/* 27: RISC-V PLIC */1941typedef struct acpi_madt_plic {1942ACPI_SUBTABLE_HEADER Header;1943UINT8 Version;1944UINT8 Id;1945UINT8 HwId[8];1946UINT16 NumIrqs;1947UINT16 MaxPrio;1948UINT32 Flags;1949UINT32 Size;1950UINT64 BaseAddr;1951UINT32 GsiBase;1952} ACPI_MADT_PLIC;195319541955/* 80: OEM data */19561957typedef struct acpi_madt_oem_data1958{1959ACPI_FLEX_ARRAY(UINT8, OemData);1960} ACPI_MADT_OEM_DATA;196119621963/*1964* Common flags fields for MADT subtables1965*/19661967/* MADT Local APIC flags */19681969#define ACPI_MADT_ENABLED (1) /* 00: Processor is usable if set */1970#define ACPI_MADT_ONLINE_CAPABLE (2) /* 01: System HW supports enabling processor at runtime */19711972/* MADT MPS INTI flags (IntiFlags) */19731974#define ACPI_MADT_POLARITY_MASK (3) /* 00-01: Polarity of APIC I/O input signals */1975#define ACPI_MADT_TRIGGER_MASK (3<<2) /* 02-03: Trigger mode of APIC input signals */19761977/* Values for MPS INTI flags */19781979#define ACPI_MADT_POLARITY_CONFORMS 01980#define ACPI_MADT_POLARITY_ACTIVE_HIGH 11981#define ACPI_MADT_POLARITY_RESERVED 21982#define ACPI_MADT_POLARITY_ACTIVE_LOW 319831984#define ACPI_MADT_TRIGGER_CONFORMS (0)1985#define ACPI_MADT_TRIGGER_EDGE (1<<2)1986#define ACPI_MADT_TRIGGER_RESERVED (2<<2)1987#define ACPI_MADT_TRIGGER_LEVEL (3<<2)198819891990/*******************************************************************************1991*1992* MCFG - PCI Memory Mapped Configuration table and subtable1993* Version 11994*1995* Conforms to "PCI Firmware Specification", Revision 3.0, June 20, 20051996*1997******************************************************************************/19981999typedef struct acpi_table_mcfg2000{2001ACPI_TABLE_HEADER Header; /* Common ACPI table header */2002UINT8 Reserved[8];20032004} ACPI_TABLE_MCFG;200520062007/* Subtable */20082009typedef struct acpi_mcfg_allocation2010{2011UINT64 Address; /* Base address, processor-relative */2012UINT16 PciSegment; /* PCI segment group number */2013UINT8 StartBusNumber; /* Starting PCI Bus number */2014UINT8 EndBusNumber; /* Final PCI Bus number */2015UINT32 Reserved;20162017} ACPI_MCFG_ALLOCATION;201820192020/*******************************************************************************2021*2022* MCHI - Management Controller Host Interface Table2023* Version 12024*2025* Conforms to "Management Component Transport Protocol (MCTP) Host2026* Interface Specification", Revision 1.0.0a, October 13, 20092027*2028******************************************************************************/20292030typedef struct acpi_table_mchi2031{2032ACPI_TABLE_HEADER Header; /* Common ACPI table header */2033UINT8 InterfaceType;2034UINT8 Protocol;2035UINT64 ProtocolData;2036UINT8 InterruptType;2037UINT8 Gpe;2038UINT8 PciDeviceFlag;2039UINT32 GlobalInterrupt;2040ACPI_GENERIC_ADDRESS ControlRegister;2041UINT8 PciSegment;2042UINT8 PciBus;2043UINT8 PciDevice;2044UINT8 PciFunction;20452046} ACPI_TABLE_MCHI;20472048/*******************************************************************************2049*2050* MPAM - Memory System Resource Partitioning and Monitoring2051*2052* Conforms to "ACPI for Memory System Resource Partitioning and Monitoring 2.0"2053* Document number: ARM DEN 0065, December, 2022.2054*2055******************************************************************************/20562057/* MPAM RIS locator types. Table 11, Location types */2058enum AcpiMpamLocatorType {2059ACPI_MPAM_LOCATION_TYPE_PROCESSOR_CACHE = 0,2060ACPI_MPAM_LOCATION_TYPE_MEMORY = 1,2061ACPI_MPAM_LOCATION_TYPE_SMMU = 2,2062ACPI_MPAM_LOCATION_TYPE_MEMORY_CACHE = 3,2063ACPI_MPAM_LOCATION_TYPE_ACPI_DEVICE = 4,2064ACPI_MPAM_LOCATION_TYPE_INTERCONNECT = 5,2065ACPI_MPAM_LOCATION_TYPE_UNKNOWN = 0xFF2066};20672068/* MPAM Functional dependency descriptor. Table 10 */2069typedef struct acpi_mpam_func_deps2070{2071UINT32 Producer;2072UINT32 Reserved;2073} ACPI_MPAM_FUNC_DEPS;20742075/* MPAM Processor cache locator descriptor. Table 13 */2076typedef struct acpi_mpam_resource_cache_locator2077{2078UINT64 CacheReference;2079UINT32 Reserved;2080} ACPI_MPAM_RESOURCE_CACHE_LOCATOR;20812082/* MPAM Memory locator descriptor. Table 14 */2083typedef struct acpi_mpam_resource_memory_locator2084{2085UINT64 ProximityDomain;2086UINT32 Reserved;2087} ACPI_MPAM_RESOURCE_MEMORY_LOCATOR;20882089/* MPAM SMMU locator descriptor. Table 15 */2090typedef struct acpi_mpam_resource_smmu_locator2091{2092UINT64 SmmuInterface;2093UINT32 Reserved;2094} ACPI_MPAM_RESOURCE_SMMU_INTERFACE;20952096/* MPAM Memory-side cache locator descriptor. Table 16 */2097typedef struct acpi_mpam_resource_memcache_locator2098{2099UINT8 Reserved[7];2100UINT8 Level;2101UINT32 Reference;2102} ACPI_MPAM_RESOURCE_MEMCACHE_INTERFACE;21032104/* MPAM ACPI device locator descriptor. Table 17 */2105typedef struct acpi_mpam_resource_acpi_locator2106{2107UINT64 AcpiHwId;2108UINT32 AcpiUniqueId;2109} ACPI_MPAM_RESOURCE_ACPI_INTERFACE;21102111/* MPAM Interconnect locator descriptor. Table 18 */2112typedef struct acpi_mpam_resource_interconnect_locator2113{2114UINT64 InterConnectDescTblOff;2115UINT32 Reserved;2116} ACPI_MPAM_RESOURCE_INTERCONNECT_INTERFACE;21172118/* MPAM Locator structure. Table 12 */2119typedef struct acpi_mpam_resource_generic_locator2120{2121UINT64 Descriptor1;2122UINT32 Descriptor2;2123} ACPI_MPAM_RESOURCE_GENERIC_LOCATOR;21242125typedef union acpi_mpam_resource_locator2126{2127ACPI_MPAM_RESOURCE_CACHE_LOCATOR CacheLocator;2128ACPI_MPAM_RESOURCE_MEMORY_LOCATOR MemoryLocator;2129ACPI_MPAM_RESOURCE_SMMU_INTERFACE SmmuLocator;2130ACPI_MPAM_RESOURCE_MEMCACHE_INTERFACE MemCacheLocator;2131ACPI_MPAM_RESOURCE_ACPI_INTERFACE AcpiLocator;2132ACPI_MPAM_RESOURCE_INTERCONNECT_INTERFACE InterconnectIfcLocator;2133ACPI_MPAM_RESOURCE_GENERIC_LOCATOR GenericLocator;2134} ACPI_MPAM_RESOURCE_LOCATOR;21352136/* Memory System Component Resource Node Structure Table 9 */2137typedef struct acpi_mpam_resource_node2138{2139UINT32 Identifier;2140UINT8 RISIndex;2141UINT16 Reserved1;2142UINT8 LocatorType;2143ACPI_MPAM_RESOURCE_LOCATOR Locator;2144UINT32 NumFunctionalDeps;2145} ACPI_MPAM_RESOURCE_NODE;21462147/* Memory System Component (MSC) Node Structure. Table 4 */2148typedef struct acpi_mpam_msc_node2149{2150UINT16 Length;2151UINT8 InterfaceType;2152UINT8 Reserved;2153UINT32 Identifier;2154UINT64 BaseAddress;2155UINT32 MMIOSize;2156UINT32 OverflowInterrupt;2157UINT32 OverflowInterruptFlags;2158UINT32 Reserved1;2159UINT32 OverflowInterruptAffinity;2160UINT32 ErrorInterrupt;2161UINT32 ErrorInterruptFlags;2162UINT32 Reserved2;2163UINT32 ErrorInterruptAffinity;2164UINT32 MaxNrdyUsec;2165UINT64 HardwareIdLinkedDevice;2166UINT32 InstanceIdLinkedDevice;2167UINT32 NumResourceNodes;2168} ACPI_MPAM_MSC_NODE;21692170typedef struct acpi_table_mpam2171{2172ACPI_TABLE_HEADER Header; /* Common ACPI table header */2173} ACPI_TABLE_MPAM;21742175/*******************************************************************************2176*2177* MPST - Memory Power State Table (ACPI 5.0)2178* Version 12179*2180******************************************************************************/21812182#define ACPI_MPST_CHANNEL_INFO \2183UINT8 ChannelId; \2184UINT8 Reserved1[3]; \2185UINT16 PowerNodeCount; \2186UINT16 Reserved2;21872188/* Main table */21892190typedef struct acpi_table_mpst2191{2192ACPI_TABLE_HEADER Header; /* Common ACPI table header */2193ACPI_MPST_CHANNEL_INFO /* Platform Communication Channel */21942195} ACPI_TABLE_MPST;219621972198/* Memory Platform Communication Channel Info */21992200typedef struct acpi_mpst_channel2201{2202ACPI_MPST_CHANNEL_INFO /* Platform Communication Channel */22032204} ACPI_MPST_CHANNEL;220522062207/* Memory Power Node Structure */22082209typedef struct acpi_mpst_power_node2210{2211UINT8 Flags;2212UINT8 Reserved1;2213UINT16 NodeId;2214UINT32 Length;2215UINT64 RangeAddress;2216UINT64 RangeLength;2217UINT32 NumPowerStates;2218UINT32 NumPhysicalComponents;22192220} ACPI_MPST_POWER_NODE;22212222/* Values for Flags field above */22232224#define ACPI_MPST_ENABLED 12225#define ACPI_MPST_POWER_MANAGED 22226#define ACPI_MPST_HOT_PLUG_CAPABLE 4222722282229/* Memory Power State Structure (follows POWER_NODE above) */22302231typedef struct acpi_mpst_power_state2232{2233UINT8 PowerState;2234UINT8 InfoIndex;22352236} ACPI_MPST_POWER_STATE;223722382239/* Physical Component ID Structure (follows POWER_STATE above) */22402241typedef struct acpi_mpst_component2242{2243UINT16 ComponentId;22442245} ACPI_MPST_COMPONENT;224622472248/* Memory Power State Characteristics Structure (follows all POWER_NODEs) */22492250typedef struct acpi_mpst_data_hdr2251{2252UINT16 CharacteristicsCount;2253UINT16 Reserved;22542255} ACPI_MPST_DATA_HDR;22562257typedef struct acpi_mpst_power_data2258{2259UINT8 StructureId;2260UINT8 Flags;2261UINT16 Reserved1;2262UINT32 AveragePower;2263UINT32 PowerSaving;2264UINT64 ExitLatency;2265UINT64 Reserved2;22662267} ACPI_MPST_POWER_DATA;22682269/* Values for Flags field above */22702271#define ACPI_MPST_PRESERVE 12272#define ACPI_MPST_AUTOENTRY 22273#define ACPI_MPST_AUTOEXIT 4227422752276/* Shared Memory Region (not part of an ACPI table) */22772278typedef struct acpi_mpst_shared2279{2280UINT32 Signature;2281UINT16 PccCommand;2282UINT16 PccStatus;2283UINT32 CommandRegister;2284UINT32 StatusRegister;2285UINT32 PowerStateId;2286UINT32 PowerNodeId;2287UINT64 EnergyConsumed;2288UINT64 AveragePower;22892290} ACPI_MPST_SHARED;229122922293/*******************************************************************************2294*2295* MSCT - Maximum System Characteristics Table (ACPI 4.0)2296* Version 12297*2298******************************************************************************/22992300typedef struct acpi_table_msct2301{2302ACPI_TABLE_HEADER Header; /* Common ACPI table header */2303UINT32 ProximityOffset; /* Location of proximity info struct(s) */2304UINT32 MaxProximityDomains;/* Max number of proximity domains */2305UINT32 MaxClockDomains; /* Max number of clock domains */2306UINT64 MaxAddress; /* Max physical address in system */23072308} ACPI_TABLE_MSCT;230923102311/* Subtable - Maximum Proximity Domain Information. Version 1 */23122313typedef struct acpi_msct_proximity2314{2315UINT8 Revision;2316UINT8 Length;2317UINT32 RangeStart; /* Start of domain range */2318UINT32 RangeEnd; /* End of domain range */2319UINT32 ProcessorCapacity;2320UINT64 MemoryCapacity; /* In bytes */23212322} ACPI_MSCT_PROXIMITY;232323242325/*******************************************************************************2326*2327* MRRM - Memory Range and Region Mapping (MRRM) table2328* Conforms to "Intel Resource Director Technology Architecture Specification"2329* Version 1.1, January 20252330*2331******************************************************************************/23322333typedef struct acpi_table_mrrm2334{2335ACPI_TABLE_HEADER Header; /* Common ACPI table header */2336UINT8 MaxMemRegion; /* Max Memory Regions supported */2337UINT8 Flags; /* Region assignment type */2338UINT8 Reserved[26];2339UINT8 Memory_Range_Entry[];23402341} ACPI_TABLE_MRRM;23422343/* Flags */2344#define ACPI_MRRM_FLAGS_REGION_ASSIGNMENT_OS (1<<0)23452346/*******************************************************************************2347*2348* Memory Range entry - Memory Range entry in MRRM table2349*2350******************************************************************************/23512352typedef struct acpi_mrrm_mem_range_entry2353{2354ACPI_SUBTBL_HDR_16 Header;2355UINT32 Reserved0; /* Reserved */2356UINT64 AddrBase; /* Base addr of the mem range */2357UINT64 AddrLen; /* Length of the mem range */2358UINT16 RegionIdFlags; /* Valid local or remote Region-ID */2359UINT8 LocalRegionId; /* Platform-assigned static local Region-ID */2360UINT8 RemoteRegionId; /* Platform-assigned static remote Region-ID */2361UINT32 Reserved1; /* Reserved */2362/* Region-ID Programming Registers[] */23632364} ACPI_MRRM_MEM_RANGE_ENTRY;23652366/* Values for RegionIdFlags above */2367#define ACPI_MRRM_VALID_REGION_ID_FLAGS_LOCAL (1<<0)2368#define ACPI_MRRM_VALID_REGION_ID_FLAGS_REMOTE (1<<1)236923702371/*******************************************************************************2372*2373* MSDM - Microsoft Data Management table2374*2375* Conforms to "Microsoft Software Licensing Tables (SLIC and MSDM)",2376* November 29, 2011. Copyright 2011 Microsoft2377*2378******************************************************************************/23792380/* Basic MSDM table is only the common ACPI header */23812382typedef struct acpi_table_msdm2383{2384ACPI_TABLE_HEADER Header; /* Common ACPI table header */23852386} ACPI_TABLE_MSDM;238723882389/*******************************************************************************2390*2391* NFIT - NVDIMM Interface Table (ACPI 6.0+)2392* Version 12393*2394******************************************************************************/23952396typedef struct acpi_table_nfit2397{2398ACPI_TABLE_HEADER Header; /* Common ACPI table header */2399UINT32 Reserved; /* Reserved, must be zero */24002401} ACPI_TABLE_NFIT;24022403/* Subtable header for NFIT */24042405typedef struct acpi_nfit_header2406{2407UINT16 Type;2408UINT16 Length;24092410} ACPI_NFIT_HEADER;241124122413/* Values for subtable type in ACPI_NFIT_HEADER */24142415enum AcpiNfitType2416{2417ACPI_NFIT_TYPE_SYSTEM_ADDRESS = 0,2418ACPI_NFIT_TYPE_MEMORY_MAP = 1,2419ACPI_NFIT_TYPE_INTERLEAVE = 2,2420ACPI_NFIT_TYPE_SMBIOS = 3,2421ACPI_NFIT_TYPE_CONTROL_REGION = 4,2422ACPI_NFIT_TYPE_DATA_REGION = 5,2423ACPI_NFIT_TYPE_FLUSH_ADDRESS = 6,2424ACPI_NFIT_TYPE_CAPABILITIES = 7,2425ACPI_NFIT_TYPE_RESERVED = 8 /* 8 and greater are reserved */2426};24272428/*2429* NFIT Subtables2430*/24312432/* 0: System Physical Address Range Structure */24332434typedef struct acpi_nfit_system_address2435{2436ACPI_NFIT_HEADER Header;2437UINT16 RangeIndex;2438UINT16 Flags;2439UINT32 Reserved; /* Reserved, must be zero */2440UINT32 ProximityDomain;2441UINT8 RangeGuid[16];2442UINT64 Address;2443UINT64 Length;2444UINT64 MemoryMapping;2445UINT64 LocationCookie; /* ACPI 6.4 */24462447} ACPI_NFIT_SYSTEM_ADDRESS;24482449/* Flags */24502451#define ACPI_NFIT_ADD_ONLINE_ONLY (1) /* 00: Add/Online Operation Only */2452#define ACPI_NFIT_PROXIMITY_VALID (1<<1) /* 01: Proximity Domain Valid */2453#define ACPI_NFIT_LOCATION_COOKIE_VALID (1<<2) /* 02: SPA location cookie valid (ACPI 6.4) */24542455/* Range Type GUIDs appear in the include/acuuid.h file */245624572458/* 1: Memory Device to System Address Range Map Structure */24592460typedef struct acpi_nfit_memory_map2461{2462ACPI_NFIT_HEADER Header;2463UINT32 DeviceHandle;2464UINT16 PhysicalId;2465UINT16 RegionId;2466UINT16 RangeIndex;2467UINT16 RegionIndex;2468UINT64 RegionSize;2469UINT64 RegionOffset;2470UINT64 Address;2471UINT16 InterleaveIndex;2472UINT16 InterleaveWays;2473UINT16 Flags;2474UINT16 Reserved; /* Reserved, must be zero */24752476} ACPI_NFIT_MEMORY_MAP;24772478/* Flags */24792480#define ACPI_NFIT_MEM_SAVE_FAILED (1) /* 00: Last SAVE to Memory Device failed */2481#define ACPI_NFIT_MEM_RESTORE_FAILED (1<<1) /* 01: Last RESTORE from Memory Device failed */2482#define ACPI_NFIT_MEM_FLUSH_FAILED (1<<2) /* 02: Platform flush failed */2483#define ACPI_NFIT_MEM_NOT_ARMED (1<<3) /* 03: Memory Device is not armed */2484#define ACPI_NFIT_MEM_HEALTH_OBSERVED (1<<4) /* 04: Memory Device observed SMART/health events */2485#define ACPI_NFIT_MEM_HEALTH_ENABLED (1<<5) /* 05: SMART/health events enabled */2486#define ACPI_NFIT_MEM_MAP_FAILED (1<<6) /* 06: Mapping to SPA failed */248724882489/* 2: Interleave Structure */24902491typedef struct acpi_nfit_interleave2492{2493ACPI_NFIT_HEADER Header;2494UINT16 InterleaveIndex;2495UINT16 Reserved; /* Reserved, must be zero */2496UINT32 LineCount;2497UINT32 LineSize;2498UINT32 LineOffset[]; /* Variable length */24992500} ACPI_NFIT_INTERLEAVE;250125022503/* 3: SMBIOS Management Information Structure */25042505typedef struct acpi_nfit_smbios2506{2507ACPI_NFIT_HEADER Header;2508UINT32 Reserved; /* Reserved, must be zero */2509UINT8 Data[]; /* Variable length */25102511} ACPI_NFIT_SMBIOS;251225132514/* 4: NVDIMM Control Region Structure */25152516typedef struct acpi_nfit_control_region2517{2518ACPI_NFIT_HEADER Header;2519UINT16 RegionIndex;2520UINT16 VendorId;2521UINT16 DeviceId;2522UINT16 RevisionId;2523UINT16 SubsystemVendorId;2524UINT16 SubsystemDeviceId;2525UINT16 SubsystemRevisionId;2526UINT8 ValidFields;2527UINT8 ManufacturingLocation;2528UINT16 ManufacturingDate;2529UINT8 Reserved[2]; /* Reserved, must be zero */2530UINT32 SerialNumber;2531UINT16 Code;2532UINT16 Windows;2533UINT64 WindowSize;2534UINT64 CommandOffset;2535UINT64 CommandSize;2536UINT64 StatusOffset;2537UINT64 StatusSize;2538UINT16 Flags;2539UINT8 Reserved1[6]; /* Reserved, must be zero */25402541} ACPI_NFIT_CONTROL_REGION;25422543/* Flags */25442545#define ACPI_NFIT_CONTROL_BUFFERED (1) /* Block Data Windows implementation is buffered */25462547/* ValidFields bits */25482549#define ACPI_NFIT_CONTROL_MFG_INFO_VALID (1) /* Manufacturing fields are valid */255025512552/* 5: NVDIMM Block Data Window Region Structure */25532554typedef struct acpi_nfit_data_region2555{2556ACPI_NFIT_HEADER Header;2557UINT16 RegionIndex;2558UINT16 Windows;2559UINT64 Offset;2560UINT64 Size;2561UINT64 Capacity;2562UINT64 StartAddress;25632564} ACPI_NFIT_DATA_REGION;256525662567/* 6: Flush Hint Address Structure */25682569typedef struct acpi_nfit_flush_address2570{2571ACPI_NFIT_HEADER Header;2572UINT32 DeviceHandle;2573UINT16 HintCount;2574UINT8 Reserved[6]; /* Reserved, must be zero */2575UINT64 HintAddress[]; /* Variable length */25762577} ACPI_NFIT_FLUSH_ADDRESS;257825792580/* 7: Platform Capabilities Structure */25812582typedef struct acpi_nfit_capabilities2583{2584ACPI_NFIT_HEADER Header;2585UINT8 HighestCapability;2586UINT8 Reserved[3]; /* Reserved, must be zero */2587UINT32 Capabilities;2588UINT32 Reserved2;25892590} ACPI_NFIT_CAPABILITIES;25912592/* Capabilities Flags */25932594#define ACPI_NFIT_CAPABILITY_CACHE_FLUSH (1) /* 00: Cache Flush to NVDIMM capable */2595#define ACPI_NFIT_CAPABILITY_MEM_FLUSH (1<<1) /* 01: Memory Flush to NVDIMM capable */2596#define ACPI_NFIT_CAPABILITY_MEM_MIRRORING (1<<2) /* 02: Memory Mirroring capable */259725982599/*2600* NFIT/DVDIMM device handle support - used as the _ADR for each NVDIMM2601*/2602typedef struct nfit_device_handle2603{2604UINT32 Handle;26052606} NFIT_DEVICE_HANDLE;26072608/* Device handle construction and extraction macros */26092610#define ACPI_NFIT_DIMM_NUMBER_MASK 0x0000000F2611#define ACPI_NFIT_CHANNEL_NUMBER_MASK 0x000000F02612#define ACPI_NFIT_MEMORY_ID_MASK 0x00000F002613#define ACPI_NFIT_SOCKET_ID_MASK 0x0000F0002614#define ACPI_NFIT_NODE_ID_MASK 0x0FFF000026152616#define ACPI_NFIT_DIMM_NUMBER_OFFSET 02617#define ACPI_NFIT_CHANNEL_NUMBER_OFFSET 42618#define ACPI_NFIT_MEMORY_ID_OFFSET 82619#define ACPI_NFIT_SOCKET_ID_OFFSET 122620#define ACPI_NFIT_NODE_ID_OFFSET 1626212622/* Macro to construct a NFIT/NVDIMM device handle */26232624#define ACPI_NFIT_BUILD_DEVICE_HANDLE(dimm, channel, memory, socket, node) \2625((dimm) | \2626((channel) << ACPI_NFIT_CHANNEL_NUMBER_OFFSET) | \2627((memory) << ACPI_NFIT_MEMORY_ID_OFFSET) | \2628((socket) << ACPI_NFIT_SOCKET_ID_OFFSET) | \2629((node) << ACPI_NFIT_NODE_ID_OFFSET))26302631/* Macros to extract individual fields from a NFIT/NVDIMM device handle */26322633#define ACPI_NFIT_GET_DIMM_NUMBER(handle) \2634((handle) & ACPI_NFIT_DIMM_NUMBER_MASK)26352636#define ACPI_NFIT_GET_CHANNEL_NUMBER(handle) \2637(((handle) & ACPI_NFIT_CHANNEL_NUMBER_MASK) >> ACPI_NFIT_CHANNEL_NUMBER_OFFSET)26382639#define ACPI_NFIT_GET_MEMORY_ID(handle) \2640(((handle) & ACPI_NFIT_MEMORY_ID_MASK) >> ACPI_NFIT_MEMORY_ID_OFFSET)26412642#define ACPI_NFIT_GET_SOCKET_ID(handle) \2643(((handle) & ACPI_NFIT_SOCKET_ID_MASK) >> ACPI_NFIT_SOCKET_ID_OFFSET)26442645#define ACPI_NFIT_GET_NODE_ID(handle) \2646(((handle) & ACPI_NFIT_NODE_ID_MASK) >> ACPI_NFIT_NODE_ID_OFFSET)264726482649/*******************************************************************************2650*2651* NHLT - Non HDAudio Link Table2652* Version 12653*2654******************************************************************************/26552656typedef struct acpi_table_nhlt2657{2658ACPI_TABLE_HEADER Header; /* Common ACPI table header */2659UINT8 EndpointsCount;2660/*2661* ACPI_NHLT_ENDPOINT Endpoints[];2662* ACPI_NHLT_CONFIG OEDConfig;2663*/26642665} ACPI_TABLE_NHLT;26662667typedef struct acpi_nhlt_endpoint2668{2669UINT32 Length;2670UINT8 LinkType;2671UINT8 InstanceId;2672UINT16 VendorId;2673UINT16 DeviceId;2674UINT16 RevisionId;2675UINT32 SubsystemId;2676UINT8 DeviceType;2677UINT8 Direction;2678UINT8 VirtualBusId;2679/*2680* ACPI_NHLT_CONFIG DeviceConfig;2681* ACPI_NHLT_FORMATS_CONFIG FormatsConfig;2682* ACPI_NHLT_DEVICES_INFO DevicesInfo;2683*/26842685} ACPI_NHLT_ENDPOINT;26862687/* Values for LinkType field above */26882689#define ACPI_NHLT_LINKTYPE_HDA 02690#define ACPI_NHLT_LINKTYPE_DSP 12691#define ACPI_NHLT_LINKTYPE_PDM 22692#define ACPI_NHLT_LINKTYPE_SSP 32693#define ACPI_NHLT_LINKTYPE_SLIMBUS 42694#define ACPI_NHLT_LINKTYPE_SDW 52695#define ACPI_NHLT_LINKTYPE_UAOL 626962697/* Values for DeviceId field above */26982699#define ACPI_NHLT_DEVICEID_DMIC 0xAE202700#define ACPI_NHLT_DEVICEID_BT 0xAE302701#define ACPI_NHLT_DEVICEID_I2S 0xAE3427022703/* Values for DeviceType field above */27042705/* Device types unique to endpoint of LinkType=PDM */2706#define ACPI_NHLT_DEVICETYPE_PDM 02707#define ACPI_NHLT_DEVICETYPE_PDM_SKL 12708/* Device types unique to endpoint of LinkType=SSP */2709#define ACPI_NHLT_DEVICETYPE_BT 02710#define ACPI_NHLT_DEVICETYPE_FM 12711#define ACPI_NHLT_DEVICETYPE_MODEM 22712#define ACPI_NHLT_DEVICETYPE_CODEC 427132714/* Values for Direction field above */27152716#define ACPI_NHLT_DIR_RENDER 02717#define ACPI_NHLT_DIR_CAPTURE 127182719typedef struct acpi_nhlt_config2720{2721UINT32 CapabilitiesSize;2722UINT8 Capabilities[1];27232724} ACPI_NHLT_CONFIG;27252726typedef struct acpi_nhlt_gendevice_config2727{2728UINT8 VirtualSlot;2729UINT8 ConfigType;27302731} ACPI_NHLT_GENDEVICE_CONFIG;27322733/* Values for ConfigType field above */27342735#define ACPI_NHLT_CONFIGTYPE_GENERIC 02736#define ACPI_NHLT_CONFIGTYPE_MICARRAY 127372738typedef struct acpi_nhlt_micdevice_config2739{2740UINT8 VirtualSlot;2741UINT8 ConfigType;2742UINT8 ArrayType;27432744} ACPI_NHLT_MICDEVICE_CONFIG;27452746/* Values for ArrayType field above */27472748#define ACPI_NHLT_ARRAYTYPE_LINEAR2_SMALL 0xA2749#define ACPI_NHLT_ARRAYTYPE_LINEAR2_BIG 0xB2750#define ACPI_NHLT_ARRAYTYPE_LINEAR4_GEO1 0xC2751#define ACPI_NHLT_ARRAYTYPE_PLANAR4_LSHAPED 0xD2752#define ACPI_NHLT_ARRAYTYPE_LINEAR4_GEO2 0xE2753#define ACPI_NHLT_ARRAYTYPE_VENDOR 0xF27542755typedef struct acpi_nhlt_vendor_mic_config2756{2757UINT8 Type;2758UINT8 Panel;2759UINT16 SpeakerPositionDistance; /* mm */2760UINT16 HorizontalOffset; /* mm */2761UINT16 VerticalOffset; /* mm */2762UINT8 FrequencyLowBand; /* 5*Hz */2763UINT8 FrequencyHighBand; /* 500*Hz */2764UINT16 DirectionAngle; /* -180 - +180 */2765UINT16 ElevationAngle; /* -180 - +180 */2766UINT16 WorkVerticalAngleBegin; /* -180 - +180 with 2 deg step */2767UINT16 WorkVerticalAngleEnd; /* -180 - +180 with 2 deg step */2768UINT16 WorkHorizontalAngleBegin; /* -180 - +180 with 2 deg step */2769UINT16 WorkHorizontalAngleEnd; /* -180 - +180 with 2 deg step */27702771} ACPI_NHLT_VENDOR_MIC_CONFIG;27722773/* Values for Type field above */27742775#define ACPI_NHLT_MICTYPE_OMNIDIRECTIONAL 02776#define ACPI_NHLT_MICTYPE_SUBCARDIOID 12777#define ACPI_NHLT_MICTYPE_CARDIOID 22778#define ACPI_NHLT_MICTYPE_SUPERCARDIOID 32779#define ACPI_NHLT_MICTYPE_HYPERCARDIOID 42780#define ACPI_NHLT_MICTYPE_8SHAPED 52781#define ACPI_NHLT_MICTYPE_RESERVED 62782#define ACPI_NHLT_MICTYPE_VENDORDEFINED 727832784/* Values for Panel field above */27852786#define ACPI_NHLT_MICLOCATION_TOP 02787#define ACPI_NHLT_MICLOCATION_BOTTOM 12788#define ACPI_NHLT_MICLOCATION_LEFT 22789#define ACPI_NHLT_MICLOCATION_RIGHT 32790#define ACPI_NHLT_MICLOCATION_FRONT 42791#define ACPI_NHLT_MICLOCATION_REAR 527922793typedef struct acpi_nhlt_vendor_micdevice_config2794{2795UINT8 VirtualSlot;2796UINT8 ConfigType;2797UINT8 ArrayType;2798UINT8 MicsCount;2799ACPI_NHLT_VENDOR_MIC_CONFIG Mics[];28002801} ACPI_NHLT_VENDOR_MICDEVICE_CONFIG;28022803typedef union acpi_nhlt_device_config2804{2805UINT8 VirtualSlot;2806ACPI_NHLT_GENDEVICE_CONFIG Gen;2807ACPI_NHLT_MICDEVICE_CONFIG Mic;2808ACPI_NHLT_VENDOR_MICDEVICE_CONFIG VendorMic;28092810} ACPI_NHLT_DEVICE_CONFIG;28112812/* Inherited from Microsoft's WAVEFORMATEXTENSIBLE. */2813typedef struct acpi_nhlt_wave_formatext2814{2815UINT16 FormatTag;2816UINT16 ChannelCount;2817UINT32 SamplesPerSec;2818UINT32 AvgBytesPerSec;2819UINT16 BlockAlign;2820UINT16 BitsPerSample;2821UINT16 ExtraFormatSize;2822UINT16 ValidBitsPerSample;2823UINT32 ChannelMask;2824UINT8 Subformat[16];28252826} ACPI_NHLT_WAVE_FORMATEXT;28272828typedef struct acpi_nhlt_format_config2829{2830ACPI_NHLT_WAVE_FORMATEXT Format;2831ACPI_NHLT_CONFIG Config;28322833} ACPI_NHLT_FORMAT_CONFIG;28342835typedef struct acpi_nhlt_formats_config2836{2837UINT8 FormatsCount;2838ACPI_NHLT_FORMAT_CONFIG Formats[];28392840} ACPI_NHLT_FORMATS_CONFIG;28412842typedef struct acpi_nhlt_device_info2843{2844UINT8 Id[16];2845UINT8 InstanceId;2846UINT8 PortId;28472848} ACPI_NHLT_DEVICE_INFO;28492850typedef struct acpi_nhlt_devices_info2851{2852UINT8 DevicesCount;2853ACPI_NHLT_DEVICE_INFO Devices[];28542855} ACPI_NHLT_DEVICES_INFO;285628572858/*******************************************************************************2859*2860* PCCT - Platform Communications Channel Table (ACPI 5.0)2861* Version 2 (ACPI 6.2)2862*2863******************************************************************************/28642865typedef struct acpi_table_pcct2866{2867ACPI_TABLE_HEADER Header; /* Common ACPI table header */2868UINT32 Flags;2869UINT64 Reserved;28702871} ACPI_TABLE_PCCT;28722873/* Values for Flags field above */28742875#define ACPI_PCCT_DOORBELL 128762877/* Values for subtable type in ACPI_SUBTABLE_HEADER */28782879enum AcpiPcctType2880{2881ACPI_PCCT_TYPE_GENERIC_SUBSPACE = 0,2882ACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE = 1,2883ACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE_TYPE2 = 2, /* ACPI 6.1 */2884ACPI_PCCT_TYPE_EXT_PCC_MASTER_SUBSPACE = 3, /* ACPI 6.2 */2885ACPI_PCCT_TYPE_EXT_PCC_SLAVE_SUBSPACE = 4, /* ACPI 6.2 */2886ACPI_PCCT_TYPE_HW_REG_COMM_SUBSPACE = 5, /* ACPI 6.4 */2887ACPI_PCCT_TYPE_RESERVED = 6 /* 6 and greater are reserved */2888};28892890/*2891* PCCT Subtables, correspond to Type in ACPI_SUBTABLE_HEADER2892*/28932894/* 0: Generic Communications Subspace */28952896typedef struct acpi_pcct_subspace2897{2898ACPI_SUBTABLE_HEADER Header;2899UINT8 Reserved[6];2900UINT64 BaseAddress;2901UINT64 Length;2902ACPI_GENERIC_ADDRESS DoorbellRegister;2903UINT64 PreserveMask;2904UINT64 WriteMask;2905UINT32 Latency;2906UINT32 MaxAccessRate;2907UINT16 MinTurnaroundTime;29082909} ACPI_PCCT_SUBSPACE;291029112912/* 1: HW-reduced Communications Subspace (ACPI 5.1) */29132914typedef struct acpi_pcct_hw_reduced2915{2916ACPI_SUBTABLE_HEADER Header;2917UINT32 PlatformInterrupt;2918UINT8 Flags;2919UINT8 Reserved;2920UINT64 BaseAddress;2921UINT64 Length;2922ACPI_GENERIC_ADDRESS DoorbellRegister;2923UINT64 PreserveMask;2924UINT64 WriteMask;2925UINT32 Latency;2926UINT32 MaxAccessRate;2927UINT16 MinTurnaroundTime;29282929} ACPI_PCCT_HW_REDUCED;293029312932/* 2: HW-reduced Communications Subspace Type 2 (ACPI 6.1) */29332934typedef struct acpi_pcct_hw_reduced_type22935{2936ACPI_SUBTABLE_HEADER Header;2937UINT32 PlatformInterrupt;2938UINT8 Flags;2939UINT8 Reserved;2940UINT64 BaseAddress;2941UINT64 Length;2942ACPI_GENERIC_ADDRESS DoorbellRegister;2943UINT64 PreserveMask;2944UINT64 WriteMask;2945UINT32 Latency;2946UINT32 MaxAccessRate;2947UINT16 MinTurnaroundTime;2948ACPI_GENERIC_ADDRESS PlatformAckRegister;2949UINT64 AckPreserveMask;2950UINT64 AckWriteMask;29512952} ACPI_PCCT_HW_REDUCED_TYPE2;295329542955/* 3: Extended PCC Master Subspace Type 3 (ACPI 6.2) */29562957typedef struct acpi_pcct_ext_pcc_master2958{2959ACPI_SUBTABLE_HEADER Header;2960UINT32 PlatformInterrupt;2961UINT8 Flags;2962UINT8 Reserved1;2963UINT64 BaseAddress;2964UINT32 Length;2965ACPI_GENERIC_ADDRESS DoorbellRegister;2966UINT64 PreserveMask;2967UINT64 WriteMask;2968UINT32 Latency;2969UINT32 MaxAccessRate;2970UINT32 MinTurnaroundTime;2971ACPI_GENERIC_ADDRESS PlatformAckRegister;2972UINT64 AckPreserveMask;2973UINT64 AckSetMask;2974UINT64 Reserved2;2975ACPI_GENERIC_ADDRESS CmdCompleteRegister;2976UINT64 CmdCompleteMask;2977ACPI_GENERIC_ADDRESS CmdUpdateRegister;2978UINT64 CmdUpdatePreserveMask;2979UINT64 CmdUpdateSetMask;2980ACPI_GENERIC_ADDRESS ErrorStatusRegister;2981UINT64 ErrorStatusMask;29822983} ACPI_PCCT_EXT_PCC_MASTER;298429852986/* 4: Extended PCC Slave Subspace Type 4 (ACPI 6.2) */29872988typedef struct acpi_pcct_ext_pcc_slave2989{2990ACPI_SUBTABLE_HEADER Header;2991UINT32 PlatformInterrupt;2992UINT8 Flags;2993UINT8 Reserved1;2994UINT64 BaseAddress;2995UINT32 Length;2996ACPI_GENERIC_ADDRESS DoorbellRegister;2997UINT64 PreserveMask;2998UINT64 WriteMask;2999UINT32 Latency;3000UINT32 MaxAccessRate;3001UINT32 MinTurnaroundTime;3002ACPI_GENERIC_ADDRESS PlatformAckRegister;3003UINT64 AckPreserveMask;3004UINT64 AckSetMask;3005UINT64 Reserved2;3006ACPI_GENERIC_ADDRESS CmdCompleteRegister;3007UINT64 CmdCompleteMask;3008ACPI_GENERIC_ADDRESS CmdUpdateRegister;3009UINT64 CmdUpdatePreserveMask;3010UINT64 CmdUpdateSetMask;3011ACPI_GENERIC_ADDRESS ErrorStatusRegister;3012UINT64 ErrorStatusMask;30133014} ACPI_PCCT_EXT_PCC_SLAVE;30153016/* 5: HW Registers based Communications Subspace */30173018typedef struct acpi_pcct_hw_reg3019{3020ACPI_SUBTABLE_HEADER Header;3021UINT16 Version;3022UINT64 BaseAddress;3023UINT64 Length;3024ACPI_GENERIC_ADDRESS DoorbellRegister;3025UINT64 DoorbellPreserve;3026UINT64 DoorbellWrite;3027ACPI_GENERIC_ADDRESS CmdCompleteRegister;3028UINT64 CmdCompleteMask;3029ACPI_GENERIC_ADDRESS ErrorStatusRegister;3030UINT64 ErrorStatusMask;3031UINT32 NominalLatency;3032UINT32 MinTurnaroundTime;30333034} ACPI_PCCT_HW_REG;303530363037/* Values for doorbell flags above */30383039#define ACPI_PCCT_INTERRUPT_POLARITY (1)3040#define ACPI_PCCT_INTERRUPT_MODE (1<<1)304130423043/*3044* PCC memory structures (not part of the ACPI table)3045*/30463047/* Shared Memory Region */30483049typedef struct acpi_pcct_shared_memory3050{3051UINT32 Signature;3052UINT16 Command;3053UINT16 Status;30543055} ACPI_PCCT_SHARED_MEMORY;305630573058/* Extended PCC Subspace Shared Memory Region (ACPI 6.2) */30593060typedef struct acpi_pcct_ext_pcc_shared_memory3061{3062UINT32 Signature;3063UINT32 Flags;3064UINT32 Length;3065UINT32 Command;30663067} ACPI_PCCT_EXT_PCC_SHARED_MEMORY;306830693070/*******************************************************************************3071*3072* PDTT - Platform Debug Trigger Table (ACPI 6.2)3073* Version 03074*3075******************************************************************************/30763077typedef struct acpi_table_pdtt3078{3079ACPI_TABLE_HEADER Header; /* Common ACPI table header */3080UINT8 TriggerCount;3081UINT8 Reserved[3];3082UINT32 ArrayOffset;30833084} ACPI_TABLE_PDTT;308530863087/*3088* PDTT Communication Channel Identifier Structure.3089* The number of these structures is defined by TriggerCount above,3090* starting at ArrayOffset.3091*/3092typedef struct acpi_pdtt_channel3093{3094UINT8 SubchannelId;3095UINT8 Flags;30963097} ACPI_PDTT_CHANNEL;30983099/* Flags for above */31003101#define ACPI_PDTT_RUNTIME_TRIGGER (1)3102#define ACPI_PDTT_WAIT_COMPLETION (1<<1)3103#define ACPI_PDTT_TRIGGER_ORDER (1<<2)310431053106/*******************************************************************************3107*3108* PHAT - Platform Health Assessment Table (ACPI 6.4)3109* Version 13110*3111******************************************************************************/31123113typedef struct acpi_table_phat3114{3115ACPI_TABLE_HEADER Header; /* Common ACPI table header */31163117} ACPI_TABLE_PHAT;31183119/* Common header for PHAT subtables that follow main table */31203121typedef struct acpi_phat_header3122{3123UINT16 Type;3124UINT16 Length;3125UINT8 Revision;31263127} ACPI_PHAT_HEADER;312831293130/* Values for Type field above */31313132#define ACPI_PHAT_TYPE_FW_VERSION_DATA 03133#define ACPI_PHAT_TYPE_FW_HEALTH_DATA 13134#define ACPI_PHAT_TYPE_RESERVED 2 /* 0x02-0xFFFF are reserved */31353136/*3137* PHAT subtables, correspond to Type in ACPI_PHAT_HEADER3138*/31393140/* 0: Firmware Version Data Record */31413142typedef struct acpi_phat_version_data3143{3144ACPI_PHAT_HEADER Header;3145UINT8 Reserved[3];3146UINT32 ElementCount;31473148} ACPI_PHAT_VERSION_DATA;31493150typedef struct acpi_phat_version_element3151{3152UINT8 Guid[16];3153UINT64 VersionValue;3154UINT32 ProducerId;31553156} ACPI_PHAT_VERSION_ELEMENT;315731583159/* 1: Firmware Health Data Record */31603161typedef struct acpi_phat_health_data3162{3163ACPI_PHAT_HEADER Header;3164UINT8 Reserved[2];3165UINT8 Health;3166UINT8 DeviceGuid[16];3167UINT32 DeviceSpecificOffset; /* Zero if no Device-specific data */31683169} ACPI_PHAT_HEALTH_DATA;31703171/* Values for Health field above */31723173#define ACPI_PHAT_ERRORS_FOUND 03174#define ACPI_PHAT_NO_ERRORS 13175#define ACPI_PHAT_UNKNOWN_ERRORS 23176#define ACPI_PHAT_ADVISORY 3317731783179/*******************************************************************************3180*3181* PMTT - Platform Memory Topology Table (ACPI 5.0)3182* Version 13183*3184******************************************************************************/31853186typedef struct acpi_table_pmtt3187{3188ACPI_TABLE_HEADER Header; /* Common ACPI table header */3189UINT32 MemoryDeviceCount;3190/*3191* Immediately followed by:3192* MEMORY_DEVICE MemoryDeviceStruct[MemoryDeviceCount];3193*/31943195} ACPI_TABLE_PMTT;319631973198/* Common header for PMTT subtables that follow main table */31993200typedef struct acpi_pmtt_header3201{3202UINT8 Type;3203UINT8 Reserved1;3204UINT16 Length;3205UINT16 Flags;3206UINT16 Reserved2;3207UINT32 MemoryDeviceCount; /* Zero means no memory device structs follow */3208/*3209* Immediately followed by:3210* UINT8 TypeSpecificData[]3211* MEMORY_DEVICE MemoryDeviceStruct[MemoryDeviceCount];3212*/32133214} ACPI_PMTT_HEADER;32153216/* Values for Type field above */32173218#define ACPI_PMTT_TYPE_SOCKET 03219#define ACPI_PMTT_TYPE_CONTROLLER 13220#define ACPI_PMTT_TYPE_DIMM 23221#define ACPI_PMTT_TYPE_RESERVED 3 /* 0x03-0xFE are reserved */3222#define ACPI_PMTT_TYPE_VENDOR 0xFF32233224/* Values for Flags field above */32253226#define ACPI_PMTT_TOP_LEVEL 0x00013227#define ACPI_PMTT_PHYSICAL 0x00023228#define ACPI_PMTT_MEMORY_TYPE 0x000C322932303231/*3232* PMTT subtables, correspond to Type in acpi_pmtt_header3233*/323432353236/* 0: Socket Structure */32373238typedef struct acpi_pmtt_socket3239{3240ACPI_PMTT_HEADER Header;3241UINT16 SocketId;3242UINT16 Reserved;32433244} ACPI_PMTT_SOCKET;3245/*3246* Immediately followed by:3247* MEMORY_DEVICE MemoryDeviceStruct[MemoryDeviceCount];3248*/324932503251/* 1: Memory Controller subtable */32523253typedef struct acpi_pmtt_controller3254{3255ACPI_PMTT_HEADER Header;3256UINT16 ControllerId;3257UINT16 Reserved;32583259} ACPI_PMTT_CONTROLLER;3260/*3261* Immediately followed by:3262* MEMORY_DEVICE MemoryDeviceStruct[MemoryDeviceCount];3263*/326432653266/* 2: Physical Component Identifier (DIMM) */32673268typedef struct acpi_pmtt_physical_component3269{3270ACPI_PMTT_HEADER Header;3271UINT32 BiosHandle;32723273} ACPI_PMTT_PHYSICAL_COMPONENT;327432753276/* 0xFF: Vendor Specific Data */32773278typedef struct acpi_pmtt_vendor_specific3279{3280ACPI_PMTT_HEADER Header;3281UINT8 TypeUuid[16];3282UINT8 Specific[];3283/*3284* Immediately followed by:3285* UINT8 VendorSpecificData[];3286* MEMORY_DEVICE MemoryDeviceStruct[MemoryDeviceCount];3287*/32883289} ACPI_PMTT_VENDOR_SPECIFIC;329032913292/*******************************************************************************3293*3294* PPTT - Processor Properties Topology Table (ACPI 6.2)3295* Version 13296*3297******************************************************************************/32983299typedef struct acpi_table_pptt3300{3301ACPI_TABLE_HEADER Header; /* Common ACPI table header */33023303} ACPI_TABLE_PPTT;33043305/* Values for Type field above */33063307enum AcpiPpttType3308{3309ACPI_PPTT_TYPE_PROCESSOR = 0,3310ACPI_PPTT_TYPE_CACHE = 1,3311ACPI_PPTT_TYPE_ID = 2,3312ACPI_PPTT_TYPE_RESERVED = 33313};331433153316/* 0: Processor Hierarchy Node Structure */33173318typedef struct acpi_pptt_processor3319{3320ACPI_SUBTABLE_HEADER Header;3321UINT16 Reserved;3322UINT32 Flags;3323UINT32 Parent;3324UINT32 AcpiProcessorId;3325UINT32 NumberOfPrivResources;33263327} ACPI_PPTT_PROCESSOR;33283329/* Flags */33303331#define ACPI_PPTT_PHYSICAL_PACKAGE (1)3332#define ACPI_PPTT_ACPI_PROCESSOR_ID_VALID (1<<1)3333#define ACPI_PPTT_ACPI_PROCESSOR_IS_THREAD (1<<2) /* ACPI 6.3 */3334#define ACPI_PPTT_ACPI_LEAF_NODE (1<<3) /* ACPI 6.3 */3335#define ACPI_PPTT_ACPI_IDENTICAL (1<<4) /* ACPI 6.3 */333633373338/* 1: Cache Type Structure */33393340typedef struct acpi_pptt_cache3341{3342ACPI_SUBTABLE_HEADER Header;3343UINT16 Reserved;3344UINT32 Flags;3345UINT32 NextLevelOfCache;3346UINT32 Size;3347UINT32 NumberOfSets;3348UINT8 Associativity;3349UINT8 Attributes;3350UINT16 LineSize;33513352} ACPI_PPTT_CACHE;33533354/* 1: Cache Type Structure for PPTT version 3 */33553356typedef struct acpi_pptt_cache_v13357{3358UINT32 CacheId;33593360} ACPI_PPTT_CACHE_V1;336133623363/* Flags */33643365#define ACPI_PPTT_SIZE_PROPERTY_VALID (1) /* Physical property valid */3366#define ACPI_PPTT_NUMBER_OF_SETS_VALID (1<<1) /* Number of sets valid */3367#define ACPI_PPTT_ASSOCIATIVITY_VALID (1<<2) /* Associativity valid */3368#define ACPI_PPTT_ALLOCATION_TYPE_VALID (1<<3) /* Allocation type valid */3369#define ACPI_PPTT_CACHE_TYPE_VALID (1<<4) /* Cache type valid */3370#define ACPI_PPTT_WRITE_POLICY_VALID (1<<5) /* Write policy valid */3371#define ACPI_PPTT_LINE_SIZE_VALID (1<<6) /* Line size valid */3372#define ACPI_PPTT_CACHE_ID_VALID (1<<7) /* Cache ID valid */33733374/* Masks for Attributes */33753376#define ACPI_PPTT_MASK_ALLOCATION_TYPE (0x03) /* Allocation type */3377#define ACPI_PPTT_MASK_CACHE_TYPE (0x0C) /* Cache type */3378#define ACPI_PPTT_MASK_WRITE_POLICY (0x10) /* Write policy */33793380/* Attributes describing cache */3381#define ACPI_PPTT_CACHE_READ_ALLOCATE (0x0) /* Cache line is allocated on read */3382#define ACPI_PPTT_CACHE_WRITE_ALLOCATE (0x01) /* Cache line is allocated on write */3383#define ACPI_PPTT_CACHE_RW_ALLOCATE (0x02) /* Cache line is allocated on read and write */3384#define ACPI_PPTT_CACHE_RW_ALLOCATE_ALT (0x03) /* Alternate representation of above */33853386#define ACPI_PPTT_CACHE_TYPE_DATA (0x0) /* Data cache */3387#define ACPI_PPTT_CACHE_TYPE_INSTR (1<<2) /* Instruction cache */3388#define ACPI_PPTT_CACHE_TYPE_UNIFIED (2<<2) /* Unified I & D cache */3389#define ACPI_PPTT_CACHE_TYPE_UNIFIED_ALT (3<<2) /* Alternate representation of above */33903391#define ACPI_PPTT_CACHE_POLICY_WB (0x0) /* Cache is write back */3392#define ACPI_PPTT_CACHE_POLICY_WT (1<<4) /* Cache is write through */33933394/* 2: ID Structure */33953396typedef struct acpi_pptt_id3397{3398ACPI_SUBTABLE_HEADER Header;3399UINT16 Reserved;3400UINT32 VendorId;3401UINT64 Level1Id;3402UINT64 Level2Id;3403UINT16 MajorRev;3404UINT16 MinorRev;3405UINT16 SpinRev;34063407} ACPI_PPTT_ID;340834093410/*******************************************************************************3411*3412* PRMT - Platform Runtime Mechanism Table3413* Version 13414*3415******************************************************************************/34163417typedef struct acpi_table_prmt3418{3419ACPI_TABLE_HEADER Header; /* Common ACPI table header */34203421} ACPI_TABLE_PRMT;34223423typedef struct acpi_table_prmt_header3424{3425UINT8 PlatformGuid[16];3426UINT32 ModuleInfoOffset;3427UINT32 ModuleInfoCount;34283429} ACPI_TABLE_PRMT_HEADER;34303431typedef struct acpi_prmt_module_header3432{3433UINT16 Revision;3434UINT16 Length;34353436} ACPI_PRMT_MODULE_HEADER;34373438typedef struct acpi_prmt_module_info3439{3440UINT16 Revision;3441UINT16 Length;3442UINT8 ModuleGuid[16];3443UINT16 MajorRev;3444UINT16 MinorRev;3445UINT16 HandlerInfoCount;3446UINT32 HandlerInfoOffset;3447UINT64 MmioListPointer;34483449} ACPI_PRMT_MODULE_INFO;34503451typedef struct acpi_prmt_handler_info3452{3453UINT16 Revision;3454UINT16 Length;3455UINT8 HandlerGuid[16];3456UINT64 HandlerAddress;3457UINT64 StaticDataBufferAddress;3458UINT64 AcpiParamBufferAddress;34593460} ACPI_PRMT_HANDLER_INFO;346134623463/*******************************************************************************3464*3465* RASF - RAS Feature Table (ACPI 5.0)3466* Version 13467*3468******************************************************************************/34693470typedef struct acpi_table_rasf3471{3472ACPI_TABLE_HEADER Header; /* Common ACPI table header */3473UINT8 ChannelId[12];34743475} ACPI_TABLE_RASF;34763477/* RASF Platform Communication Channel Shared Memory Region */34783479typedef struct acpi_rasf_shared_memory3480{3481UINT32 Signature;3482UINT16 Command;3483UINT16 Status;3484UINT16 Version;3485UINT8 Capabilities[16];3486UINT8 SetCapabilities[16];3487UINT16 NumParameterBlocks;3488UINT32 SetCapabilitiesStatus;34893490} ACPI_RASF_SHARED_MEMORY;34913492/* RASF Parameter Block Structure Header */34933494typedef struct acpi_rasf_parameter_block3495{3496UINT16 Type;3497UINT16 Version;3498UINT16 Length;34993500} ACPI_RASF_PARAMETER_BLOCK;35013502/* RASF Parameter Block Structure for PATROL_SCRUB */35033504typedef struct acpi_rasf_patrol_scrub_parameter3505{3506ACPI_RASF_PARAMETER_BLOCK Header;3507UINT16 PatrolScrubCommand;3508UINT64 RequestedAddressRange[2];3509UINT64 ActualAddressRange[2];3510UINT16 Flags;3511UINT8 RequestedSpeed;35123513} ACPI_RASF_PATROL_SCRUB_PARAMETER;35143515/* Masks for Flags and Speed fields above */35163517#define ACPI_RASF_SCRUBBER_RUNNING 13518#define ACPI_RASF_SPEED (7<<1)3519#define ACPI_RASF_SPEED_SLOW (0<<1)3520#define ACPI_RASF_SPEED_MEDIUM (4<<1)3521#define ACPI_RASF_SPEED_FAST (7<<1)35223523/* Channel Commands */35243525enum AcpiRasfCommands3526{3527ACPI_RASF_EXECUTE_RASF_COMMAND = 13528};35293530/* Platform RAS Capabilities */35313532enum AcpiRasfCapabiliities3533{3534ACPI_HW_PATROL_SCRUB_SUPPORTED = 0,3535ACPI_SW_PATROL_SCRUB_EXPOSED = 13536};35373538/* Patrol Scrub Commands */35393540enum AcpiRasfPatrolScrubCommands3541{3542ACPI_RASF_GET_PATROL_PARAMETERS = 1,3543ACPI_RASF_START_PATROL_SCRUBBER = 2,3544ACPI_RASF_STOP_PATROL_SCRUBBER = 33545};35463547/* Channel Command flags */35483549#define ACPI_RASF_GENERATE_SCI (1<<15)35503551/* Status values */35523553enum AcpiRasfStatus3554{3555ACPI_RASF_SUCCESS = 0,3556ACPI_RASF_NOT_VALID = 1,3557ACPI_RASF_NOT_SUPPORTED = 2,3558ACPI_RASF_BUSY = 3,3559ACPI_RASF_FAILED = 4,3560ACPI_RASF_ABORTED = 5,3561ACPI_RASF_INVALID_DATA = 63562};35633564/* Status flags */35653566#define ACPI_RASF_COMMAND_COMPLETE (1)3567#define ACPI_RASF_SCI_DOORBELL (1<<1)3568#define ACPI_RASF_ERROR (1<<2)3569#define ACPI_RASF_STATUS (0x1F<<3)357035713572/*******************************************************************************3573*3574* RAS2 - RAS2 Feature Table (ACPI 6.5)3575* Version 13576*3577*3578******************************************************************************/35793580typedef struct acpi_table_ras2 {3581ACPI_TABLE_HEADER Header; /* Common ACPI table header */3582UINT16 Reserved;3583UINT16 NumPccDescs;35843585} ACPI_TABLE_RAS2;35863587/* RAS2 Platform Communication Channel Descriptor */35883589typedef struct acpi_ras2_pcc_desc {3590UINT8 ChannelId;3591UINT16 Reserved;3592UINT8 FeatureType;3593UINT32 Instance;35943595} ACPI_RAS2_PCC_DESC;35963597/* RAS2 Platform Communication Channel Shared Memory Region */35983599typedef struct acpi_ras2_shmem {3600UINT32 Signature;3601UINT16 Command;3602UINT16 Status;3603UINT16 Version;3604UINT8 Features[16];3605UINT8 SetCaps[16];3606UINT16 NumParamBlks;3607UINT32 SetCapsStatus;36083609} ACPI_RAS2_SHMEM;36103611/* RAS2 Parameter Block Structure for PATROL_SCRUB */36123613typedef struct acpi_ras2_parameter_block3614{3615UINT16 Type;3616UINT16 Version;3617UINT16 Length;36183619} ACPI_RAS2_PARAMETER_BLOCK;36203621/* RAS2 Parameter Block Structure for PATROL_SCRUB */36223623typedef struct acpi_ras2_patrol_scrub_param {3624ACPI_RAS2_PARAMETER_BLOCK Header;3625UINT16 Command;3626UINT64 ReqAddrRange[2];3627UINT64 ActlAddrRange[2];3628UINT32 Flags;3629UINT32 ScrubParamsOut;3630UINT32 ScrubParamsIn;36313632} ACPI_RAS2_PATROL_SCRUB_PARAM;36333634/* Masks for Flags field above */36353636#define ACPI_RAS2_SCRUBBER_RUNNING 136373638/* RAS2 Parameter Block Structure for LA2PA_TRANSLATION */36393640typedef struct acpi_ras2_la2pa_translation_parameter {3641ACPI_RAS2_PARAMETER_BLOCK Header;3642UINT16 AddrTranslationCommand;3643UINT64 SubInstId;3644UINT64 LogicalAddress;3645UINT64 PhysicalAddress;3646UINT32 Status;36473648} ACPI_RAS2_LA2PA_TRANSLATION_PARAM;36493650/* Channel Commands */36513652enum AcpiRas2Commands3653{3654ACPI_RAS2_EXECUTE_RAS2_COMMAND = 13655};36563657/* Platform RAS2 Features */36583659enum AcpiRas2Features3660{3661ACPI_RAS2_PATROL_SCRUB_SUPPORTED = 0,3662ACPI_RAS2_LA2PA_TRANSLATION = 13663};36643665/* RAS2 Patrol Scrub Commands */36663667enum AcpiRas2PatrolScrubCommands3668{3669ACPI_RAS2_GET_PATROL_PARAMETERS = 1,3670ACPI_RAS2_START_PATROL_SCRUBBER = 2,3671ACPI_RAS2_STOP_PATROL_SCRUBBER = 33672};36733674/* RAS2 LA2PA Translation Commands */36753676enum AcpiRas2La2PaTranslationCommands3677{3678ACPI_RAS2_GET_LA2PA_TRANSLATION = 1,3679};36803681/* RAS2 LA2PA Translation Status values */36823683enum AcpiRas2La2PaTranslationStatus3684{3685ACPI_RAS2_LA2PA_TRANSLATION_SUCCESS = 0,3686ACPI_RAS2_LA2PA_TRANSLATION_FAIL = 1,3687};36883689/* Channel Command flags */36903691#define ACPI_RAS2_GENERATE_SCI (1<<15)36923693/* Status values */36943695enum AcpiRas2Status3696{3697ACPI_RAS2_SUCCESS = 0,3698ACPI_RAS2_NOT_VALID = 1,3699ACPI_RAS2_NOT_SUPPORTED = 2,3700ACPI_RAS2_BUSY = 3,3701ACPI_RAS2_FAILED = 4,3702ACPI_RAS2_ABORTED = 5,3703ACPI_RAS2_INVALID_DATA = 63704};37053706/* Status flags */37073708#define ACPI_RAS2_COMMAND_COMPLETE (1)3709#define ACPI_RAS2_SCI_DOORBELL (1<<1)3710#define ACPI_RAS2_ERROR (1<<2)3711#define ACPI_RAS2_STATUS (0x1F<<3)371237133714/*******************************************************************************3715*3716* RGRT - Regulatory Graphics Resource Table3717* Version 13718*3719* Conforms to "ACPI RGRT" available at:3720* https://microsoft.github.io/mu/dyn/mu_plus/MsCorePkg/AcpiRGRT/feature_acpi_rgrt/3721*3722******************************************************************************/37233724typedef struct acpi_table_rgrt3725{3726ACPI_TABLE_HEADER Header; /* Common ACPI table header */3727UINT16 Version;3728UINT8 ImageType;3729UINT8 Reserved;3730UINT8 Image[];37313732} ACPI_TABLE_RGRT;37333734/* ImageType values */37353736enum AcpiRgrtImageType3737{3738ACPI_RGRT_TYPE_RESERVED0 = 0,3739ACPI_RGRT_IMAGE_TYPE_PNG = 1,3740ACPI_RGRT_TYPE_RESERVED = 2 /* 2 and greater are reserved */3741};374237433744/*******************************************************************************3745*3746* RHCT - RISC-V Hart Capabilities Table3747* Version 13748*3749******************************************************************************/37503751typedef struct acpi_table_rhct {3752ACPI_TABLE_HEADER Header; /* Common ACPI table header */3753UINT32 Flags; /* RHCT flags */3754UINT64 TimeBaseFreq;3755UINT32 NodeCount;3756UINT32 NodeOffset;3757} ACPI_TABLE_RHCT;37583759/* RHCT Flags */37603761#define ACPI_RHCT_TIMER_CANNOT_WAKEUP_CPU (1)3762/*3763* RHCT subtables3764*/3765typedef struct acpi_rhct_node_header {3766UINT16 Type;3767UINT16 Length;3768UINT16 Revision;3769} ACPI_RHCT_NODE_HEADER;37703771/* Values for RHCT subtable Type above */37723773enum acpi_rhct_node_type {3774ACPI_RHCT_NODE_TYPE_ISA_STRING = 0x0000,3775ACPI_RHCT_NODE_TYPE_CMO = 0x0001,3776ACPI_RHCT_NODE_TYPE_MMU = 0x0002,3777ACPI_RHCT_NODE_TYPE_RESERVED = 0x0003,3778ACPI_RHCT_NODE_TYPE_HART_INFO = 0xFFFF,3779};37803781/*3782* RHCT node specific subtables3783*/37843785/* ISA string node structure */3786typedef struct acpi_rhct_isa_string {3787UINT16 IsaLength;3788char Isa[];3789} ACPI_RHCT_ISA_STRING;37903791typedef struct acpi_rhct_cmo_node {3792UINT8 Reserved; /* Must be zero */3793UINT8 CbomSize; /* CBOM size in powerof 2 */3794UINT8 CbopSize; /* CBOP size in powerof 2 */3795UINT8 CbozSize; /* CBOZ size in powerof 2 */3796} ACPI_RHCT_CMO_NODE;37973798typedef struct acpi_rhct_mmu_node {3799UINT8 Reserved; /* Must be zero */3800UINT8 MmuType; /* Virtual Address Scheme */3801} ACPI_RHCT_MMU_NODE;38023803enum acpi_rhct_mmu_type {3804ACPI_RHCT_MMU_TYPE_SV39 = 0,3805ACPI_RHCT_MMU_TYPE_SV48 = 1,3806ACPI_RHCT_MMU_TYPE_SV57 = 23807};38083809/* Hart Info node structure */3810typedef struct acpi_rhct_hart_info {3811UINT16 NumOffsets;3812UINT32 Uid; /* ACPI processor UID */3813} ACPI_RHCT_HART_INFO;38143815/*******************************************************************************3816*3817* RIMT - RISC-V IO Remapping Table3818*3819* https://github.com/riscv-non-isa/riscv-acpi-rimt3820*3821******************************************************************************/38223823typedef struct acpi_table_rimt {3824ACPI_TABLE_HEADER Header; /* Common ACPI table header */3825UINT32 NumNodes; /* Number of RIMT Nodes */3826UINT32 NodeOffset; /* Offset to RIMT Node Array */3827UINT32 Reserved;3828} ACPI_TABLE_RIMT;38293830typedef struct acpi_rimt_node {3831UINT8 Type;3832UINT8 Revision;3833UINT16 Length;3834UINT16 Reserved;3835UINT16 Id;3836char NodeData[];3837} ACPI_RIMT_NODE;38383839enum acpi_rimt_node_type {3840ACPI_RIMT_NODE_TYPE_IOMMU = 0x0,3841ACPI_RIMT_NODE_TYPE_PCIE_ROOT_COMPLEX = 0x1,3842ACPI_RIMT_NODE_TYPE_PLAT_DEVICE = 0x2,3843};38443845typedef struct acpi_rimt_iommu {3846UINT8 HardwareId[8]; /* Hardware ID */3847UINT64 BaseAddress; /* Base Address */3848UINT32 Flags; /* Flags */3849UINT32 ProximityDomain; /* Proximity Domain */3850UINT16 PcieSegmentNumber; /* PCIe Segment number */3851UINT16 PcieBdf; /* PCIe B/D/F */3852UINT16 NumInterruptWires; /* Number of interrupt wires */3853UINT16 InterruptWireOffset; /* Interrupt wire array offset */3854UINT64 InterruptWire[]; /* Interrupt wire array */3855} ACPI_RIMT_IOMMU;38563857/* IOMMU Node Flags */3858#define ACPI_RIMT_IOMMU_FLAGS_PCIE (1)3859#define ACPI_RIMT_IOMMU_FLAGS_PXM_VALID (1 << 1)38603861/* Interrupt Wire Structure */3862typedef struct acpi_rimt_iommu_wire_gsi {3863UINT32 IrqNum; /* Interrupt Number */3864UINT32 Flags; /* Flags */3865} ACPI_RIMT_IOMMU_WIRE_GSI;38663867/* Interrupt Wire Flags */3868#define ACPI_RIMT_GSI_LEVEL_TRIGGERRED (1)3869#define ACPI_RIMT_GSI_ACTIVE_HIGH (1 << 1)38703871typedef struct acpi_rimt_id_mapping {3872UINT32 SourceIdBase; /* Source ID Base */3873UINT32 NumIds; /* Number of IDs */3874UINT32 DestIdBase; /* Destination Device ID Base */3875UINT32 DestOffset; /* Destination IOMMU Offset */3876UINT32 Flags; /* Flags */3877} ACPI_RIMT_ID_MAPPING;38783879typedef struct acpi_rimt_pcie_rc {3880UINT32 Flags; /* Flags */3881UINT16 Reserved; /* Reserved */3882UINT16 PcieSegmentNumber; /* PCIe Segment number */3883UINT16 IdMappingOffset; /* ID mapping array offset */3884UINT16 NumIdMappings; /* Number of ID mappings */3885} ACPI_RIMT_PCIE_RC;38863887/* PCIe Root Complex Node Flags */3888#define ACPI_RIMT_PCIE_ATS_SUPPORTED (1)3889#define ACPI_RIMT_PCIE_PRI_SUPPORTED (1 << 1)38903891typedef struct acpi_rimt_platform_device {3892UINT16 IdMappingOffset; /* ID Mapping array offset */3893UINT16 NumIdMappings; /* Number of ID mappings */3894char DeviceName[]; /* Device Object Name */3895} ACPI_RIMT_PLATFORM_DEVICE;389638973898/*******************************************************************************3899*3900* SBST - Smart Battery Specification Table3901* Version 13902*3903******************************************************************************/39043905typedef struct acpi_table_sbst3906{3907ACPI_TABLE_HEADER Header; /* Common ACPI table header */3908UINT32 WarningLevel;3909UINT32 LowLevel;3910UINT32 CriticalLevel;39113912} ACPI_TABLE_SBST;391339143915/*******************************************************************************3916*3917* SDEI - Software Delegated Exception Interface Descriptor Table3918*3919* Conforms to "Software Delegated Exception Interface (SDEI)" ARM DEN0054A,3920* May 8th, 2017. Copyright 2017 ARM Ltd.3921*3922******************************************************************************/39233924typedef struct acpi_table_sdei3925{3926ACPI_TABLE_HEADER Header; /* Common ACPI table header */39273928} ACPI_TABLE_SDEI;392939303931/*******************************************************************************3932*3933* SDEV - Secure Devices Table (ACPI 6.2)3934* Version 13935*3936******************************************************************************/39373938typedef struct acpi_table_sdev3939{3940ACPI_TABLE_HEADER Header; /* Common ACPI table header */39413942} ACPI_TABLE_SDEV;394339443945typedef struct acpi_sdev_header3946{3947UINT8 Type;3948UINT8 Flags;3949UINT16 Length;39503951} ACPI_SDEV_HEADER;395239533954/* Values for subtable type above */39553956enum AcpiSdevType3957{3958ACPI_SDEV_TYPE_NAMESPACE_DEVICE = 0,3959ACPI_SDEV_TYPE_PCIE_ENDPOINT_DEVICE = 1,3960ACPI_SDEV_TYPE_RESERVED = 2 /* 2 and greater are reserved */3961};39623963/* Values for flags above */39643965#define ACPI_SDEV_HANDOFF_TO_UNSECURE_OS (1)3966#define ACPI_SDEV_SECURE_COMPONENTS_PRESENT (1<<1)39673968/*3969* SDEV subtables3970*/39713972/* 0: Namespace Device Based Secure Device Structure */39733974typedef struct acpi_sdev_namespace3975{3976ACPI_SDEV_HEADER Header;3977UINT16 DeviceIdOffset;3978UINT16 DeviceIdLength;3979UINT16 VendorDataOffset;3980UINT16 VendorDataLength;39813982} ACPI_SDEV_NAMESPACE;39833984typedef struct acpi_sdev_secure_component3985{3986UINT16 SecureComponentOffset;3987UINT16 SecureComponentLength;39883989} ACPI_SDEV_SECURE_COMPONENT;399039913992/*3993* SDEV sub-subtables ("Components") for above3994*/3995typedef struct acpi_sdev_component3996{3997ACPI_SDEV_HEADER Header;39983999} ACPI_SDEV_COMPONENT;400040014002/* Values for sub-subtable type above */40034004enum AcpiSacType4005{4006ACPI_SDEV_TYPE_ID_COMPONENT = 0,4007ACPI_SDEV_TYPE_MEM_COMPONENT = 14008};40094010typedef struct acpi_sdev_id_component4011{4012ACPI_SDEV_HEADER Header;4013UINT16 HardwareIdOffset;4014UINT16 HardwareIdLength;4015UINT16 SubsystemIdOffset;4016UINT16 SubsystemIdLength;4017UINT16 HardwareRevision;4018UINT8 HardwareRevPresent;4019UINT8 ClassCodePresent;4020UINT8 PciBaseClass;4021UINT8 PciSubClass;4022UINT8 PciProgrammingXface;40234024} ACPI_SDEV_ID_COMPONENT;40254026typedef struct acpi_sdev_mem_component4027{4028ACPI_SDEV_HEADER Header;4029UINT32 Reserved;4030UINT64 MemoryBaseAddress;4031UINT64 MemoryLength;40324033} ACPI_SDEV_MEM_COMPONENT;403440354036/* 1: PCIe Endpoint Device Based Device Structure */40374038typedef struct acpi_sdev_pcie4039{4040ACPI_SDEV_HEADER Header;4041UINT16 Segment;4042UINT16 StartBus;4043UINT16 PathOffset;4044UINT16 PathLength;4045UINT16 VendorDataOffset;4046UINT16 VendorDataLength;40474048} ACPI_SDEV_PCIE;40494050/* 1a: PCIe Endpoint path entry */40514052typedef struct acpi_sdev_pcie_path4053{4054UINT8 Device;4055UINT8 Function;40564057} ACPI_SDEV_PCIE_PATH;405840594060/*******************************************************************************4061*4062* SVKL - Storage Volume Key Location Table (ACPI 6.4)4063* From: "Guest-Host-Communication Interface (GHCI) for Intel4064* Trust Domain Extensions (Intel TDX)".4065* Version 14066*4067******************************************************************************/40684069typedef struct acpi_table_svkl4070{4071ACPI_TABLE_HEADER Header; /* Common ACPI table header */4072UINT32 Count;40734074} ACPI_TABLE_SVKL;40754076typedef struct acpi_svkl_key4077{4078UINT16 Type;4079UINT16 Format;4080UINT32 Size;4081UINT64 Address;40824083} ACPI_SVKL_KEY;40844085enum acpi_svkl_type4086{4087ACPI_SVKL_TYPE_MAIN_STORAGE = 0,4088ACPI_SVKL_TYPE_RESERVED = 1 /* 1 and greater are reserved */4089};40904091enum acpi_svkl_format4092{4093ACPI_SVKL_FORMAT_RAW_BINARY = 0,4094ACPI_SVKL_FORMAT_RESERVED = 1 /* 1 and greater are reserved */4095};40964097/*******************************************************************************4098*4099* SWFT - SoundWire File Table4100* as described in Discovery and Configuration (DisCo) Specification4101* for SoundWire®4102* Version 14103*4104******************************************************************************/41054106typedef struct acpi_table_swft4107{4108ACPI_TABLE_HEADER Header; /* Common ACPI table header */41094110} ACPI_TABLE_SWFT;41114112typedef struct acpi_swft_file4113{4114UINT16 VendorID;4115UINT32 FileID;4116UINT16 FileVersion;4117UINT16 FileLength;4118UINT8 FileData[];41194120} ACPI_SWFT_FILE;41214122/*******************************************************************************4123*4124* TDEL - TD-Event Log4125* From: "Guest-Host-Communication Interface (GHCI) for Intel4126* Trust Domain Extensions (Intel TDX)".4127* September 20204128*4129******************************************************************************/41304131typedef struct acpi_table_tdel4132{4133ACPI_TABLE_HEADER Header; /* Common ACPI table header */4134UINT32 Reserved;4135UINT64 LogAreaMinimumLength;4136UINT64 LogAreaStartAddress;41374138} ACPI_TABLE_TDEL;41394140/* Reset to default packing */41414142#pragma pack()41434144#endif /* __ACTBL2_H__ */414541464147