1/****************************************************************************** 2 * 3 * Name: actbl2.h - ACPI Table Definitions (tables not in ACPI spec) 4 * 5 *****************************************************************************/ 6 7/* 8 * Copyright (C) 2000 - 2023, Intel Corp. 9 * All rights reserved. 10 * 11 * Redistribution and use in source and binary forms, with or without 12 * modification, are permitted provided that the following conditions 13 * are met: 14 * 1. Redistributions of source code must retain the above copyright 15 * notice, this list of conditions, and the following disclaimer, 16 * without modification. 17 * 2. Redistributions in binary form must reproduce at minimum a disclaimer 18 * substantially similar to the "NO WARRANTY" disclaimer below 19 * ("Disclaimer") and any redistribution must be conditioned upon 20 * including a substantially similar Disclaimer requirement for further 21 * binary redistribution. 22 * 3. Neither the names of the above-listed copyright holders nor the names 23 * of any contributors may be used to endorse or promote products derived 24 * from this software without specific prior written permission. 25 * 26 * Alternatively, this software may be distributed under the terms of the 27 * GNU General Public License ("GPL") version 2 as published by the Free 28 * Software Foundation. 29 * 30 * NO WARRANTY 31 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 32 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 33 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 34 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 35 * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 36 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 37 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 38 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 39 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING 40 * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 41 * POSSIBILITY OF SUCH DAMAGES. 42 */ 43 44#ifndef __ACTBL2_H__ 45#define __ACTBL2_H__ 46 47 48/******************************************************************************* 49 * 50 * Additional ACPI Tables (2) 51 * 52 * These tables are not consumed directly by the ACPICA subsystem, but are 53 * included here to support device drivers and the AML disassembler. 54 * 55 ******************************************************************************/ 56 57 58/* 59 * Values for description table header signatures for tables defined in this 60 * file. Useful because they make it more difficult to inadvertently type in 61 * the wrong signature. 62 */ 63#define ACPI_SIG_AGDI "AGDI" /* Arm Generic Diagnostic Dump and Reset Device Interface */ 64#define ACPI_SIG_APMT "APMT" /* Arm Performance Monitoring Unit table */ 65#define ACPI_SIG_BDAT "BDAT" /* BIOS Data ACPI Table */ 66#define ACPI_SIG_CCEL "CCEL" /* CC Event Log Table */ 67#define ACPI_SIG_CDAT "CDAT" /* Coherent Device Attribute Table */ 68#define ACPI_SIG_IORT "IORT" /* IO Remapping Table */ 69#define ACPI_SIG_IVRS "IVRS" /* I/O Virtualization Reporting Structure */ 70#define ACPI_SIG_LPIT "LPIT" /* Low Power Idle Table */ 71#define ACPI_SIG_MADT "APIC" /* Multiple APIC Description Table */ 72#define ACPI_SIG_MCFG "MCFG" /* PCI Memory Mapped Configuration table */ 73#define ACPI_SIG_MCHI "MCHI" /* Management Controller Host Interface table */ 74#define ACPI_SIG_MPAM "MPAM" /* Memory System Resource Partitioning and Monitoring Table */ 75#define ACPI_SIG_MPST "MPST" /* Memory Power State Table */ 76#define ACPI_SIG_MSDM "MSDM" /* Microsoft Data Management Table */ 77#define ACPI_SIG_NFIT "NFIT" /* NVDIMM Firmware Interface Table */ 78#define ACPI_SIG_NHLT "NHLT" /* Non HD Audio Link Table */ 79#define ACPI_SIG_PCCT "PCCT" /* Platform Communications Channel Table */ 80#define ACPI_SIG_PDTT "PDTT" /* Platform Debug Trigger Table */ 81#define ACPI_SIG_PHAT "PHAT" /* Platform Health Assessment Table */ 82#define ACPI_SIG_PMTT "PMTT" /* Platform Memory Topology Table */ 83#define ACPI_SIG_PPTT "PPTT" /* Processor Properties Topology Table */ 84#define ACPI_SIG_PRMT "PRMT" /* Platform Runtime Mechanism Table */ 85#define ACPI_SIG_RASF "RASF" /* RAS Feature table */ 86#define ACPI_SIG_RGRT "RGRT" /* Regulatory Graphics Resource Table */ 87#define ACPI_SIG_RHCT "RHCT" /* RISC-V Hart Capabilities Table */ 88#define ACPI_SIG_SBST "SBST" /* Smart Battery Specification Table */ 89#define ACPI_SIG_SDEI "SDEI" /* Software Delegated Exception Interface Table */ 90#define ACPI_SIG_SDEV "SDEV" /* Secure Devices table */ 91#define ACPI_SIG_SVKL "SVKL" /* Storage Volume Key Location Table */ 92#define ACPI_SIG_TDEL "TDEL" /* TD Event Log Table */ 93 94 95/* 96 * All tables must be byte-packed to match the ACPI specification, since 97 * the tables are provided by the system BIOS. 98 */ 99#pragma pack(1) 100 101/* 102 * Note: C bitfields are not used for this reason: 103 * 104 * "Bitfields are great and easy to read, but unfortunately the C language 105 * does not specify the layout of bitfields in memory, which means they are 106 * essentially useless for dealing with packed data in on-disk formats or 107 * binary wire protocols." (Or ACPI tables and buffers.) "If you ask me, 108 * this decision was a design error in C. Ritchie could have picked an order 109 * and stuck with it." Norman Ramsey. 110 * See http://stackoverflow.com/a/1053662/41661 111 */ 112 113 114/******************************************************************************* 115 * 116 * AEST - Arm Error Source Table 117 * 118 * Conforms to: ACPI for the Armv8 RAS Extensions 1.1 Platform Design Document 119 * September 2020. 120 * 121 ******************************************************************************/ 122 123typedef struct acpi_table_aest 124{ 125 ACPI_TABLE_HEADER Header; 126 127} ACPI_TABLE_AEST; 128 129/* Common Subtable header - one per Node Structure (Subtable) */ 130 131typedef struct acpi_aest_hdr 132{ 133 UINT8 Type; 134 UINT16 Length; 135 UINT8 Reserved; 136 UINT32 NodeSpecificOffset; 137 UINT32 NodeInterfaceOffset; 138 UINT32 NodeInterruptOffset; 139 UINT32 NodeInterruptCount; 140 UINT64 TimestampRate; 141 UINT64 Reserved1; 142 UINT64 ErrorInjectionRate; 143 144} ACPI_AEST_HEADER; 145 146/* Values for Type above */ 147 148#define ACPI_AEST_PROCESSOR_ERROR_NODE 0 149#define ACPI_AEST_MEMORY_ERROR_NODE 1 150#define ACPI_AEST_SMMU_ERROR_NODE 2 151#define ACPI_AEST_VENDOR_ERROR_NODE 3 152#define ACPI_AEST_GIC_ERROR_NODE 4 153#define ACPI_AEST_NODE_TYPE_RESERVED 5 /* 5 and above are reserved */ 154 155 156/* 157 * AEST subtables (Error nodes) 158 */ 159 160/* 0: Processor Error */ 161 162typedef struct acpi_aest_processor 163{ 164 UINT32 ProcessorId; 165 UINT8 ResourceType; 166 UINT8 Reserved; 167 UINT8 Flags; 168 UINT8 Revision; 169 UINT64 ProcessorAffinity; 170 171} ACPI_AEST_PROCESSOR; 172 173/* Values for ResourceType above, related structs below */ 174 175#define ACPI_AEST_CACHE_RESOURCE 0 176#define ACPI_AEST_TLB_RESOURCE 1 177#define ACPI_AEST_GENERIC_RESOURCE 2 178#define ACPI_AEST_RESOURCE_RESERVED 3 /* 3 and above are reserved */ 179 180/* 0R: Processor Cache Resource Substructure */ 181 182typedef struct acpi_aest_processor_cache 183{ 184 UINT32 CacheReference; 185 UINT32 Reserved; 186 187} ACPI_AEST_PROCESSOR_CACHE; 188 189/* Values for CacheType above */ 190 191#define ACPI_AEST_CACHE_DATA 0 192#define ACPI_AEST_CACHE_INSTRUCTION 1 193#define ACPI_AEST_CACHE_UNIFIED 2 194#define ACPI_AEST_CACHE_RESERVED 3 /* 3 and above are reserved */ 195 196/* 1R: Processor TLB Resource Substructure */ 197 198typedef struct acpi_aest_processor_tlb 199{ 200 UINT32 TlbLevel; 201 UINT32 Reserved; 202 203} ACPI_AEST_PROCESSOR_TLB; 204 205/* 2R: Processor Generic Resource Substructure */ 206 207typedef struct acpi_aest_processor_generic 208{ 209 UINT32 Resource; 210 211} ACPI_AEST_PROCESSOR_GENERIC; 212 213/* 1: Memory Error */ 214 215typedef struct acpi_aest_memory 216{ 217 UINT32 SratProximityDomain; 218 219} ACPI_AEST_MEMORY; 220 221/* 2: Smmu Error */ 222 223typedef struct acpi_aest_smmu 224{ 225 UINT32 IortNodeReference; 226 UINT32 SubcomponentReference; 227 228} ACPI_AEST_SMMU; 229 230/* 3: Vendor Defined */ 231 232typedef struct acpi_aest_vendor 233{ 234 UINT32 AcpiHid; 235 UINT32 AcpiUid; 236 UINT8 VendorSpecificData[16]; 237 238} ACPI_AEST_VENDOR; 239 240/* 4: Gic Error */ 241 242typedef struct acpi_aest_gic 243{ 244 UINT32 InterfaceType; 245 UINT32 InstanceId; 246 247} ACPI_AEST_GIC; 248 249/* Values for InterfaceType above */ 250 251#define ACPI_AEST_GIC_CPU 0 252#define ACPI_AEST_GIC_DISTRIBUTOR 1 253#define ACPI_AEST_GIC_REDISTRIBUTOR 2 254#define ACPI_AEST_GIC_ITS 3 255#define ACPI_AEST_GIC_RESERVED 4 /* 4 and above are reserved */ 256 257 258/* Node Interface Structure */ 259 260typedef struct acpi_aest_node_interface 261{ 262 UINT8 Type; 263 UINT8 Reserved[3]; 264 UINT32 Flags; 265 UINT64 Address; 266 UINT32 ErrorRecordIndex; 267 UINT32 ErrorRecordCount; 268 UINT64 ErrorRecordImplemented; 269 UINT64 ErrorStatusReporting; 270 UINT64 AddressingMode; 271 272} ACPI_AEST_NODE_INTERFACE; 273 274/* Values for Type field above */ 275 276#define ACPI_AEST_NODE_SYSTEM_REGISTER 0 277#define ACPI_AEST_NODE_MEMORY_MAPPED 1 278#define ACPI_AEST_XFACE_RESERVED 2 /* 2 and above are reserved */ 279 280/* Node Interrupt Structure */ 281 282typedef struct acpi_aest_node_interrupt 283{ 284 UINT8 Type; 285 UINT8 Reserved[2]; 286 UINT8 Flags; 287 UINT32 Gsiv; 288 UINT8 IortId; 289 UINT8 Reserved1[3]; 290 291} ACPI_AEST_NODE_INTERRUPT; 292 293/* Values for Type field above */ 294 295#define ACPI_AEST_NODE_FAULT_HANDLING 0 296#define ACPI_AEST_NODE_ERROR_RECOVERY 1 297#define ACPI_AEST_XRUPT_RESERVED 2 /* 2 and above are reserved */ 298 299 300/******************************************************************************* 301 * AGDI - Arm Generic Diagnostic Dump and Reset Device Interface 302 * 303 * Conforms to "ACPI for Arm Components 1.1, Platform Design Document" 304 * ARM DEN0093 v1.1 305 * 306 ******************************************************************************/ 307typedef struct acpi_table_agdi 308{ 309 ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 310 UINT8 Flags; 311 UINT8 Reserved[3]; 312 UINT32 SdeiEvent; 313 UINT32 Gsiv; 314 315} ACPI_TABLE_AGDI; 316 317/* Mask for Flags field above */ 318 319#define ACPI_AGDI_SIGNALING_MODE (1) 320 321 322/******************************************************************************* 323 * 324 * APMT - ARM Performance Monitoring Unit Table 325 * 326 * Conforms to: 327 * ARM Performance Monitoring Unit Architecture 1.0 Platform Design Document 328 * ARM DEN0117 v1.0 November 25, 2021 329 * 330 ******************************************************************************/ 331 332typedef struct acpi_table_apmt { 333 ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 334} ACPI_TABLE_APMT; 335 336#define ACPI_APMT_NODE_ID_LENGTH 4 337 338/* 339 * APMT subtables 340 */ 341typedef struct acpi_apmt_node { 342 UINT16 Length; 343 UINT8 Flags; 344 UINT8 Type; 345 UINT32 Id; 346 UINT64 InstPrimary; 347 UINT32 InstSecondary; 348 UINT64 BaseAddress0; 349 UINT64 BaseAddress1; 350 UINT32 OvflwIrq; 351 UINT32 Reserved; 352 UINT32 OvflwIrqFlags; 353 UINT32 ProcAffinity; 354 UINT32 ImplId; 355} ACPI_APMT_NODE; 356 357/* Masks for Flags field above */ 358 359#define ACPI_APMT_FLAGS_DUAL_PAGE (1<<0) 360#define ACPI_APMT_FLAGS_AFFINITY (1<<1) 361#define ACPI_APMT_FLAGS_ATOMIC (1<<2) 362 363/* Values for Flags dual page field above */ 364 365#define ACPI_APMT_FLAGS_DUAL_PAGE_NSUPP (0<<0) 366#define ACPI_APMT_FLAGS_DUAL_PAGE_SUPP (1<<0) 367 368/* Values for Flags processor affinity field above */ 369#define ACPI_APMT_FLAGS_AFFINITY_PROC (0<<1) 370#define ACPI_APMT_FLAGS_AFFINITY_PROC_CONTAINER (1<<1) 371 372/* Values for Flags 64-bit atomic field above */ 373#define ACPI_APMT_FLAGS_ATOMIC_NSUPP (0<<2) 374#define ACPI_APMT_FLAGS_ATOMIC_SUPP (1<<2) 375 376/* Values for Type field above */ 377 378enum acpi_apmt_node_type { 379 ACPI_APMT_NODE_TYPE_MC = 0x00, 380 ACPI_APMT_NODE_TYPE_SMMU = 0x01, 381 ACPI_APMT_NODE_TYPE_PCIE_ROOT = 0x02, 382 ACPI_APMT_NODE_TYPE_ACPI = 0x03, 383 ACPI_APMT_NODE_TYPE_CACHE = 0x04, 384 ACPI_APMT_NODE_TYPE_COUNT 385}; 386 387/* Masks for ovflw_irq_flags field above */ 388 389#define ACPI_APMT_OVFLW_IRQ_FLAGS_MODE (1<<0) 390#define ACPI_APMT_OVFLW_IRQ_FLAGS_TYPE (1<<1) 391 392/* Values for ovflw_irq_flags mode field above */ 393 394#define ACPI_APMT_OVFLW_IRQ_FLAGS_MODE_LEVEL (0<<0) 395#define ACPI_APMT_OVFLW_IRQ_FLAGS_MODE_EDGE (1<<0) 396 397/* Values for ovflw_irq_flags type field above */ 398 399#define ACPI_APMT_OVFLW_IRQ_FLAGS_TYPE_WIRED (0<<1) 400 401 402/******************************************************************************* 403 * 404 * BDAT - BIOS Data ACPI Table 405 * 406 * Conforms to "BIOS Data ACPI Table", Interface Specification v4.0 Draft 5 407 * Nov 2020 408 * 409 ******************************************************************************/ 410 411typedef struct acpi_table_bdat 412{ 413 ACPI_TABLE_HEADER Header; 414 ACPI_GENERIC_ADDRESS Gas; 415 416} ACPI_TABLE_BDAT; 417 418/******************************************************************************* 419 * 420 * CCEL - CC-Event Log 421 * From: "Guest-Host-Communication Interface (GHCI) for Intel 422 * Trust Domain Extensions (Intel TDX)". Feb 2022 423 * 424 ******************************************************************************/ 425 426typedef struct acpi_table_ccel 427{ 428 ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 429 UINT8 CCType; 430 UINT8 CCSubType; 431 UINT16 Reserved; 432 UINT64 LogAreaMinimumLength; 433 UINT64 LogAreaStartAddress; 434 435} ACPI_TABLE_CCEL; 436 437/******************************************************************************* 438 * 439 * IORT - IO Remapping Table 440 * 441 * Conforms to "IO Remapping Table System Software on ARM Platforms", 442 * Document number: ARM DEN 0049E.e, Sep 2022 443 * 444 ******************************************************************************/ 445 446typedef struct acpi_table_iort 447{ 448 ACPI_TABLE_HEADER Header; 449 UINT32 NodeCount; 450 UINT32 NodeOffset; 451 UINT32 Reserved; 452 453} ACPI_TABLE_IORT; 454 455 456/* 457 * IORT subtables 458 */ 459typedef struct acpi_iort_node 460{ 461 UINT8 Type; 462 UINT16 Length; 463 UINT8 Revision; 464 UINT32 Identifier; 465 UINT32 MappingCount; 466 UINT32 MappingOffset; 467 char NodeData[]; 468 469} ACPI_IORT_NODE; 470 471/* Values for subtable Type above */ 472 473enum AcpiIortNodeType 474{ 475 ACPI_IORT_NODE_ITS_GROUP = 0x00, 476 ACPI_IORT_NODE_NAMED_COMPONENT = 0x01, 477 ACPI_IORT_NODE_PCI_ROOT_COMPLEX = 0x02, 478 ACPI_IORT_NODE_SMMU = 0x03, 479 ACPI_IORT_NODE_SMMU_V3 = 0x04, 480 ACPI_IORT_NODE_PMCG = 0x05, 481 ACPI_IORT_NODE_RMR = 0x06, 482}; 483 484 485typedef struct acpi_iort_id_mapping 486{ 487 UINT32 InputBase; /* Lowest value in input range */ 488 UINT32 IdCount; /* Number of IDs */ 489 UINT32 OutputBase; /* Lowest value in output range */ 490 UINT32 OutputReference; /* A reference to the output node */ 491 UINT32 Flags; 492 493} ACPI_IORT_ID_MAPPING; 494 495/* Masks for Flags field above for IORT subtable */ 496 497#define ACPI_IORT_ID_SINGLE_MAPPING (1) 498 499 500typedef struct acpi_iort_memory_access 501{ 502 UINT32 CacheCoherency; 503 UINT8 Hints; 504 UINT16 Reserved; 505 UINT8 MemoryFlags; 506 507} ACPI_IORT_MEMORY_ACCESS; 508 509/* Values for CacheCoherency field above */ 510 511#define ACPI_IORT_NODE_COHERENT 0x00000001 /* The device node is fully coherent */ 512#define ACPI_IORT_NODE_NOT_COHERENT 0x00000000 /* The device node is not coherent */ 513 514/* Masks for Hints field above */ 515 516#define ACPI_IORT_HT_TRANSIENT (1) 517#define ACPI_IORT_HT_WRITE (1<<1) 518#define ACPI_IORT_HT_READ (1<<2) 519#define ACPI_IORT_HT_OVERRIDE (1<<3) 520 521/* Masks for MemoryFlags field above */ 522 523#define ACPI_IORT_MF_COHERENCY (1) 524#define ACPI_IORT_MF_ATTRIBUTES (1<<1) 525 526 527/* 528 * IORT node specific subtables 529 */ 530typedef struct acpi_iort_its_group 531{ 532 UINT32 ItsCount; 533 UINT32 Identifiers[]; /* GIC ITS identifier array */ 534 535} ACPI_IORT_ITS_GROUP; 536 537 538typedef struct acpi_iort_named_component 539{ 540 UINT32 NodeFlags; 541 UINT64 MemoryProperties; /* Memory access properties */ 542 UINT8 MemoryAddressLimit; /* Memory address size limit */ 543 char DeviceName[]; /* Path of namespace object */ 544 545} ACPI_IORT_NAMED_COMPONENT; 546 547/* Masks for Flags field above */ 548 549#define ACPI_IORT_NC_STALL_SUPPORTED (1) 550#define ACPI_IORT_NC_PASID_BITS (31<<1) 551 552typedef struct acpi_iort_root_complex 553{ 554 UINT64 MemoryProperties; /* Memory access properties */ 555 UINT32 AtsAttribute; 556 UINT32 PciSegmentNumber; 557 UINT8 MemoryAddressLimit; /* Memory address size limit */ 558 UINT16 PasidCapabilities; /* PASID Capabilities */ 559 UINT8 Reserved[]; /* Reserved, must be zero */ 560 561} ACPI_IORT_ROOT_COMPLEX; 562 563/* Masks for AtsAttribute field above */ 564 565#define ACPI_IORT_ATS_SUPPORTED (1) /* The root complex ATS support */ 566#define ACPI_IORT_PRI_SUPPORTED (1<<1) /* The root complex PRI support */ 567#define ACPI_IORT_PASID_FWD_SUPPORTED (1<<2) /* The root complex PASID forward support */ 568 569/* Masks for PasidCapabilities field above */ 570#define ACPI_IORT_PASID_MAX_WIDTH (0x1F) /* Bits 0-4 */ 571 572typedef struct acpi_iort_smmu 573{ 574 UINT64 BaseAddress; /* SMMU base address */ 575 UINT64 Span; /* Length of memory range */ 576 UINT32 Model; 577 UINT32 Flags; 578 UINT32 GlobalInterruptOffset; 579 UINT32 ContextInterruptCount; 580 UINT32 ContextInterruptOffset; 581 UINT32 PmuInterruptCount; 582 UINT32 PmuInterruptOffset; 583 UINT64 Interrupts[]; /* Interrupt array */ 584 585} ACPI_IORT_SMMU; 586 587/* Values for Model field above */ 588 589#define ACPI_IORT_SMMU_V1 0x00000000 /* Generic SMMUv1 */ 590#define ACPI_IORT_SMMU_V2 0x00000001 /* Generic SMMUv2 */ 591#define ACPI_IORT_SMMU_CORELINK_MMU400 0x00000002 /* ARM Corelink MMU-400 */ 592#define ACPI_IORT_SMMU_CORELINK_MMU500 0x00000003 /* ARM Corelink MMU-500 */ 593#define ACPI_IORT_SMMU_CORELINK_MMU401 0x00000004 /* ARM Corelink MMU-401 */ 594#define ACPI_IORT_SMMU_CAVIUM_THUNDERX 0x00000005 /* Cavium ThunderX SMMUv2 */ 595 596/* Masks for Flags field above */ 597 598#define ACPI_IORT_SMMU_DVM_SUPPORTED (1) 599#define ACPI_IORT_SMMU_COHERENT_WALK (1<<1) 600 601/* Global interrupt format */ 602 603typedef struct acpi_iort_smmu_gsi 604{ 605 UINT32 NSgIrpt; 606 UINT32 NSgIrptFlags; 607 UINT32 NSgCfgIrpt; 608 UINT32 NSgCfgIrptFlags; 609 610} ACPI_IORT_SMMU_GSI; 611 612 613typedef struct acpi_iort_smmu_v3 614{ 615 UINT64 BaseAddress; /* SMMUv3 base address */ 616 UINT32 Flags; 617 UINT32 Reserved; 618 UINT64 VatosAddress; 619 UINT32 Model; 620 UINT32 EventGsiv; 621 UINT32 PriGsiv; 622 UINT32 GerrGsiv; 623 UINT32 SyncGsiv; 624 UINT32 Pxm; 625 UINT32 IdMappingIndex; 626 627} ACPI_IORT_SMMU_V3; 628 629/* Values for Model field above */ 630 631#define ACPI_IORT_SMMU_V3_GENERIC 0x00000000 /* Generic SMMUv3 */ 632#define ACPI_IORT_SMMU_V3_HISILICON_HI161X 0x00000001 /* HiSilicon Hi161x SMMUv3 */ 633#define ACPI_IORT_SMMU_V3_CAVIUM_CN99XX 0x00000002 /* Cavium CN99xx SMMUv3 */ 634 635/* Masks for Flags field above */ 636 637#define ACPI_IORT_SMMU_V3_COHACC_OVERRIDE (1) 638#define ACPI_IORT_SMMU_V3_HTTU_OVERRIDE (3<<1) 639#define ACPI_IORT_SMMU_V3_PXM_VALID (1<<3) 640#define ACPI_IORT_SMMU_V3_DEVICEID_VALID (1<<4) 641 642typedef struct acpi_iort_pmcg 643{ 644 UINT64 Page0BaseAddress; 645 UINT32 OverflowGsiv; 646 UINT32 NodeReference; 647 UINT64 Page1BaseAddress; 648 649} ACPI_IORT_PMCG; 650 651typedef struct acpi_iort_rmr { 652 UINT32 Flags; 653 UINT32 RmrCount; 654 UINT32 RmrOffset; 655 656} ACPI_IORT_RMR; 657 658/* Masks for Flags field above */ 659#define ACPI_IORT_RMR_REMAP_PERMITTED (1) 660#define ACPI_IORT_RMR_ACCESS_PRIVILEGE (1<<1) 661 662/* 663 * Macro to access the Access Attributes in flags field above: 664 * Access Attributes is encoded in bits 9:2 665 */ 666#define ACPI_IORT_RMR_ACCESS_ATTRIBUTES(flags) (((flags) >> 2) & 0xFF) 667 668/* Values for above Access Attributes */ 669 670#define ACPI_IORT_RMR_ATTR_DEVICE_NGNRNE 0x00 671#define ACPI_IORT_RMR_ATTR_DEVICE_NGNRE 0x01 672#define ACPI_IORT_RMR_ATTR_DEVICE_NGRE 0x02 673#define ACPI_IORT_RMR_ATTR_DEVICE_GRE 0x03 674#define ACPI_IORT_RMR_ATTR_NORMAL_NC 0x04 675#define ACPI_IORT_RMR_ATTR_NORMAL_IWB_OWB 0x05 676 677typedef struct acpi_iort_rmr_desc { 678 UINT64 BaseAddress; 679 UINT64 Length; 680 UINT32 Reserved; 681 682} ACPI_IORT_RMR_DESC; 683 684/******************************************************************************* 685 * 686 * IVRS - I/O Virtualization Reporting Structure 687 * Version 1 688 * 689 * Conforms to "AMD I/O Virtualization Technology (IOMMU) Specification", 690 * Revision 1.26, February 2009. 691 * 692 ******************************************************************************/ 693 694typedef struct acpi_table_ivrs 695{ 696 ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 697 UINT32 Info; /* Common virtualization info */ 698 UINT64 Reserved; 699 700} ACPI_TABLE_IVRS; 701 702/* Values for Info field above */ 703 704#define ACPI_IVRS_PHYSICAL_SIZE 0x00007F00 /* 7 bits, physical address size */ 705#define ACPI_IVRS_VIRTUAL_SIZE 0x003F8000 /* 7 bits, virtual address size */ 706#define ACPI_IVRS_ATS_RESERVED 0x00400000 /* ATS address translation range reserved */ 707 708 709/* IVRS subtable header */ 710 711typedef struct acpi_ivrs_header 712{ 713 UINT8 Type; /* Subtable type */ 714 UINT8 Flags; 715 UINT16 Length; /* Subtable length */ 716 UINT16 DeviceId; /* ID of IOMMU */ 717 718} ACPI_IVRS_HEADER; 719 720/* Values for subtable Type above */ 721 722enum AcpiIvrsType 723{ 724 ACPI_IVRS_TYPE_HARDWARE1 = 0x10, 725 ACPI_IVRS_TYPE_HARDWARE2 = 0x11, 726 ACPI_IVRS_TYPE_HARDWARE3 = 0x40, 727 ACPI_IVRS_TYPE_MEMORY1 = 0x20, 728 ACPI_IVRS_TYPE_MEMORY2 = 0x21, 729 ACPI_IVRS_TYPE_MEMORY3 = 0x22 730}; 731 732/* Masks for Flags field above for IVHD subtable */ 733 734#define ACPI_IVHD_TT_ENABLE (1) 735#define ACPI_IVHD_PASS_PW (1<<1) 736#define ACPI_IVHD_RES_PASS_PW (1<<2) 737#define ACPI_IVHD_ISOC (1<<3) 738#define ACPI_IVHD_IOTLB (1<<4) 739 740/* Masks for Flags field above for IVMD subtable */ 741 742#define ACPI_IVMD_UNITY (1) 743#define ACPI_IVMD_READ (1<<1) 744#define ACPI_IVMD_WRITE (1<<2) 745#define ACPI_IVMD_EXCLUSION_RANGE (1<<3) 746 747 748/* 749 * IVRS subtables, correspond to Type in ACPI_IVRS_HEADER 750 */ 751 752/* 0x10: I/O Virtualization Hardware Definition Block (IVHD) */ 753 754typedef struct acpi_ivrs_hardware_10 755{ 756 ACPI_IVRS_HEADER Header; 757 UINT16 CapabilityOffset; /* Offset for IOMMU control fields */ 758 UINT64 BaseAddress; /* IOMMU control registers */ 759 UINT16 PciSegmentGroup; 760 UINT16 Info; /* MSI number and unit ID */ 761 UINT32 FeatureReporting; 762 763} ACPI_IVRS_HARDWARE1; 764 765/* 0x11: I/O Virtualization Hardware Definition Block (IVHD) */ 766 767typedef struct acpi_ivrs_hardware_11 768{ 769 ACPI_IVRS_HEADER Header; 770 UINT16 CapabilityOffset; /* Offset for IOMMU control fields */ 771 UINT64 BaseAddress; /* IOMMU control registers */ 772 UINT16 PciSegmentGroup; 773 UINT16 Info; /* MSI number and unit ID */ 774 UINT32 Attributes; 775 UINT64 EfrRegisterImage; 776 UINT64 Reserved; 777} ACPI_IVRS_HARDWARE2; 778 779/* Masks for Info field above */ 780 781#define ACPI_IVHD_MSI_NUMBER_MASK 0x001F /* 5 bits, MSI message number */ 782#define ACPI_IVHD_UNIT_ID_MASK 0x1F00 /* 5 bits, UnitID */ 783 784 785/* 786 * Device Entries for IVHD subtable, appear after ACPI_IVRS_HARDWARE structure. 787 * Upper two bits of the Type field are the (encoded) length of the structure. 788 * Currently, only 4 and 8 byte entries are defined. 16 and 32 byte entries 789 * are reserved for future use but not defined. 790 */ 791typedef struct acpi_ivrs_de_header 792{ 793 UINT8 Type; 794 UINT16 Id; 795 UINT8 DataSetting; 796 797} ACPI_IVRS_DE_HEADER; 798 799/* Length of device entry is in the top two bits of Type field above */ 800 801#define ACPI_IVHD_ENTRY_LENGTH 0xC0 802 803/* Values for device entry Type field above */ 804 805enum AcpiIvrsDeviceEntryType 806{ 807 /* 4-byte device entries, all use ACPI_IVRS_DEVICE4 */ 808 809 ACPI_IVRS_TYPE_PAD4 = 0, 810 ACPI_IVRS_TYPE_ALL = 1, 811 ACPI_IVRS_TYPE_SELECT = 2, 812 ACPI_IVRS_TYPE_START = 3, 813 ACPI_IVRS_TYPE_END = 4, 814 815 /* 8-byte device entries */ 816 817 ACPI_IVRS_TYPE_PAD8 = 64, 818 ACPI_IVRS_TYPE_NOT_USED = 65, 819 ACPI_IVRS_TYPE_ALIAS_SELECT = 66, /* Uses ACPI_IVRS_DEVICE8A */ 820 ACPI_IVRS_TYPE_ALIAS_START = 67, /* Uses ACPI_IVRS_DEVICE8A */ 821 ACPI_IVRS_TYPE_EXT_SELECT = 70, /* Uses ACPI_IVRS_DEVICE8B */ 822 ACPI_IVRS_TYPE_EXT_START = 71, /* Uses ACPI_IVRS_DEVICE8B */ 823 ACPI_IVRS_TYPE_SPECIAL = 72, /* Uses ACPI_IVRS_DEVICE8C */ 824 825 /* Variable-length device entries */ 826 827 ACPI_IVRS_TYPE_HID = 240 /* Uses ACPI_IVRS_DEVICE_HID */ 828}; 829 830/* Values for Data field above */ 831 832#define ACPI_IVHD_INIT_PASS (1) 833#define ACPI_IVHD_EINT_PASS (1<<1) 834#define ACPI_IVHD_NMI_PASS (1<<2) 835#define ACPI_IVHD_SYSTEM_MGMT (3<<4) 836#define ACPI_IVHD_LINT0_PASS (1<<6) 837#define ACPI_IVHD_LINT1_PASS (1<<7) 838 839 840/* Types 0-4: 4-byte device entry */ 841 842typedef struct acpi_ivrs_device4 843{ 844 ACPI_IVRS_DE_HEADER Header; 845 846} ACPI_IVRS_DEVICE4; 847 848/* Types 66-67: 8-byte device entry */ 849 850typedef struct acpi_ivrs_device8a 851{ 852 ACPI_IVRS_DE_HEADER Header; 853 UINT8 Reserved1; 854 UINT16 UsedId; 855 UINT8 Reserved2; 856 857} ACPI_IVRS_DEVICE8A; 858 859/* Types 70-71: 8-byte device entry */ 860 861typedef struct acpi_ivrs_device8b 862{ 863 ACPI_IVRS_DE_HEADER Header; 864 UINT32 ExtendedData; 865 866} ACPI_IVRS_DEVICE8B; 867 868/* Values for ExtendedData above */ 869 870#define ACPI_IVHD_ATS_DISABLED (1<<31) 871 872/* Type 72: 8-byte device entry */ 873 874typedef struct acpi_ivrs_device8c 875{ 876 ACPI_IVRS_DE_HEADER Header; 877 UINT8 Handle; 878 UINT16 UsedId; 879 UINT8 Variety; 880 881} ACPI_IVRS_DEVICE8C; 882 883/* Values for Variety field above */ 884 885#define ACPI_IVHD_IOAPIC 1 886#define ACPI_IVHD_HPET 2 887 888/* Type 240: variable-length device entry */ 889 890typedef struct acpi_ivrs_device_hid 891{ 892 ACPI_IVRS_DE_HEADER Header; 893 UINT64 AcpiHid; 894 UINT64 AcpiCid; 895 UINT8 UidType; 896 UINT8 UidLength; 897 898} ACPI_IVRS_DEVICE_HID; 899 900/* Values for UidType above */ 901 902#define ACPI_IVRS_UID_NOT_PRESENT 0 903#define ACPI_IVRS_UID_IS_INTEGER 1 904#define ACPI_IVRS_UID_IS_STRING 2 905 906/* 0x20, 0x21, 0x22: I/O Virtualization Memory Definition Block (IVMD) */ 907 908typedef struct acpi_ivrs_memory 909{ 910 ACPI_IVRS_HEADER Header; 911 UINT16 AuxData; 912 UINT64 Reserved; 913 UINT64 StartAddress; 914 UINT64 MemoryLength; 915 916} ACPI_IVRS_MEMORY; 917 918 919/******************************************************************************* 920 * 921 * LPIT - Low Power Idle Table 922 * 923 * Conforms to "ACPI Low Power Idle Table (LPIT)" July 2014. 924 * 925 ******************************************************************************/ 926 927typedef struct acpi_table_lpit 928{ 929 ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 930 931} ACPI_TABLE_LPIT; 932 933 934/* LPIT subtable header */ 935 936typedef struct acpi_lpit_header 937{ 938 UINT32 Type; /* Subtable type */ 939 UINT32 Length; /* Subtable length */ 940 UINT16 UniqueId; 941 UINT16 Reserved; 942 UINT32 Flags; 943 944} ACPI_LPIT_HEADER; 945 946/* Values for subtable Type above */ 947 948enum AcpiLpitType 949{ 950 ACPI_LPIT_TYPE_NATIVE_CSTATE = 0x00, 951 ACPI_LPIT_TYPE_RESERVED = 0x01 /* 1 and above are reserved */ 952}; 953 954/* Masks for Flags field above */ 955 956#define ACPI_LPIT_STATE_DISABLED (1) 957#define ACPI_LPIT_NO_COUNTER (1<<1) 958 959/* 960 * LPIT subtables, correspond to Type in ACPI_LPIT_HEADER 961 */ 962 963/* 0x00: Native C-state instruction based LPI structure */ 964 965typedef struct acpi_lpit_native 966{ 967 ACPI_LPIT_HEADER Header; 968 ACPI_GENERIC_ADDRESS EntryTrigger; 969 UINT32 Residency; 970 UINT32 Latency; 971 ACPI_GENERIC_ADDRESS ResidencyCounter; 972 UINT64 CounterFrequency; 973 974} ACPI_LPIT_NATIVE; 975 976 977/******************************************************************************* 978 * 979 * MADT - Multiple APIC Description Table 980 * Version 3 981 * 982 ******************************************************************************/ 983 984typedef struct acpi_table_madt 985{ 986 ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 987 UINT32 Address; /* Physical address of local APIC */ 988 UINT32 Flags; 989 990} ACPI_TABLE_MADT; 991 992/* Masks for Flags field above */ 993 994#define ACPI_MADT_PCAT_COMPAT (1) /* 00: System also has dual 8259s */ 995 996/* Values for PCATCompat flag */ 997 998#define ACPI_MADT_DUAL_PIC 1 999#define ACPI_MADT_MULTIPLE_APIC 0 1000 1001 1002/* Values for MADT subtable type in ACPI_SUBTABLE_HEADER */ 1003 1004enum AcpiMadtType 1005{ 1006 ACPI_MADT_TYPE_LOCAL_APIC = 0, 1007 ACPI_MADT_TYPE_IO_APIC = 1, 1008 ACPI_MADT_TYPE_INTERRUPT_OVERRIDE = 2, 1009 ACPI_MADT_TYPE_NMI_SOURCE = 3, 1010 ACPI_MADT_TYPE_LOCAL_APIC_NMI = 4, 1011 ACPI_MADT_TYPE_LOCAL_APIC_OVERRIDE = 5, 1012 ACPI_MADT_TYPE_IO_SAPIC = 6, 1013 ACPI_MADT_TYPE_LOCAL_SAPIC = 7, 1014 ACPI_MADT_TYPE_INTERRUPT_SOURCE = 8, 1015 ACPI_MADT_TYPE_LOCAL_X2APIC = 9, 1016 ACPI_MADT_TYPE_LOCAL_X2APIC_NMI = 10, 1017 ACPI_MADT_TYPE_GENERIC_INTERRUPT = 11, 1018 ACPI_MADT_TYPE_GENERIC_DISTRIBUTOR = 12, 1019 ACPI_MADT_TYPE_GENERIC_MSI_FRAME = 13, 1020 ACPI_MADT_TYPE_GENERIC_REDISTRIBUTOR = 14, 1021 ACPI_MADT_TYPE_GENERIC_TRANSLATOR = 15, 1022 ACPI_MADT_TYPE_MULTIPROC_WAKEUP = 16, 1023 ACPI_MADT_TYPE_CORE_PIC = 17, 1024 ACPI_MADT_TYPE_LIO_PIC = 18, 1025 ACPI_MADT_TYPE_HT_PIC = 19, 1026 ACPI_MADT_TYPE_EIO_PIC = 20, 1027 ACPI_MADT_TYPE_MSI_PIC = 21, 1028 ACPI_MADT_TYPE_BIO_PIC = 22, 1029 ACPI_MADT_TYPE_LPC_PIC = 23, 1030 ACPI_MADT_TYPE_RINTC = 24, 1031 ACPI_MADT_TYPE_IMSIC = 25, 1032 ACPI_MADT_TYPE_APLIC = 26, 1033 ACPI_MADT_TYPE_PLIC = 27, 1034 ACPI_MADT_TYPE_RESERVED = 28, /* 28 to 0x7F are reserved */ 1035 ACPI_MADT_TYPE_OEM_RESERVED = 0x80 /* 0x80 to 0xFF are reserved for OEM use */ 1036}; 1037 1038 1039/* 1040 * MADT Subtables, correspond to Type in ACPI_SUBTABLE_HEADER 1041 */ 1042 1043/* 0: Processor Local APIC */ 1044 1045typedef struct acpi_madt_local_apic 1046{ 1047 ACPI_SUBTABLE_HEADER Header; 1048 UINT8 ProcessorId; /* ACPI processor id */ 1049 UINT8 Id; /* Processor's local APIC id */ 1050 UINT32 LapicFlags; 1051 1052} ACPI_MADT_LOCAL_APIC; 1053 1054 1055/* 1: IO APIC */ 1056 1057typedef struct acpi_madt_io_apic 1058{ 1059 ACPI_SUBTABLE_HEADER Header; 1060 UINT8 Id; /* I/O APIC ID */ 1061 UINT8 Reserved; /* Reserved - must be zero */ 1062 UINT32 Address; /* APIC physical address */ 1063 UINT32 GlobalIrqBase; /* Global system interrupt where INTI lines start */ 1064 1065} ACPI_MADT_IO_APIC; 1066 1067 1068/* 2: Interrupt Override */ 1069 1070typedef struct acpi_madt_interrupt_override 1071{ 1072 ACPI_SUBTABLE_HEADER Header; 1073 UINT8 Bus; /* 0 - ISA */ 1074 UINT8 SourceIrq; /* Interrupt source (IRQ) */ 1075 UINT32 GlobalIrq; /* Global system interrupt */ 1076 UINT16 IntiFlags; 1077 1078} ACPI_MADT_INTERRUPT_OVERRIDE; 1079 1080 1081/* 3: NMI Source */ 1082 1083typedef struct acpi_madt_nmi_source 1084{ 1085 ACPI_SUBTABLE_HEADER Header; 1086 UINT16 IntiFlags; 1087 UINT32 GlobalIrq; /* Global system interrupt */ 1088 1089} ACPI_MADT_NMI_SOURCE; 1090 1091 1092/* 4: Local APIC NMI */ 1093 1094typedef struct acpi_madt_local_apic_nmi 1095{ 1096 ACPI_SUBTABLE_HEADER Header; 1097 UINT8 ProcessorId; /* ACPI processor id */ 1098 UINT16 IntiFlags; 1099 UINT8 Lint; /* LINTn to which NMI is connected */ 1100 1101} ACPI_MADT_LOCAL_APIC_NMI; 1102 1103 1104/* 5: Address Override */ 1105 1106typedef struct acpi_madt_local_apic_override 1107{ 1108 ACPI_SUBTABLE_HEADER Header; 1109 UINT16 Reserved; /* Reserved, must be zero */ 1110 UINT64 Address; /* APIC physical address */ 1111 1112} ACPI_MADT_LOCAL_APIC_OVERRIDE; 1113 1114 1115/* 6: I/O Sapic */ 1116 1117typedef struct acpi_madt_io_sapic 1118{ 1119 ACPI_SUBTABLE_HEADER Header; 1120 UINT8 Id; /* I/O SAPIC ID */ 1121 UINT8 Reserved; /* Reserved, must be zero */ 1122 UINT32 GlobalIrqBase; /* Global interrupt for SAPIC start */ 1123 UINT64 Address; /* SAPIC physical address */ 1124 1125} ACPI_MADT_IO_SAPIC; 1126 1127 1128/* 7: Local Sapic */ 1129 1130typedef struct acpi_madt_local_sapic 1131{ 1132 ACPI_SUBTABLE_HEADER Header; 1133 UINT8 ProcessorId; /* ACPI processor id */ 1134 UINT8 Id; /* SAPIC ID */ 1135 UINT8 Eid; /* SAPIC EID */ 1136 UINT8 Reserved[3]; /* Reserved, must be zero */ 1137 UINT32 LapicFlags; 1138 UINT32 Uid; /* Numeric UID - ACPI 3.0 */ 1139 char UidString[]; /* String UID - ACPI 3.0 */ 1140 1141} ACPI_MADT_LOCAL_SAPIC; 1142 1143 1144/* 8: Platform Interrupt Source */ 1145 1146typedef struct acpi_madt_interrupt_source 1147{ 1148 ACPI_SUBTABLE_HEADER Header; 1149 UINT16 IntiFlags; 1150 UINT8 Type; /* 1=PMI, 2=INIT, 3=corrected */ 1151 UINT8 Id; /* Processor ID */ 1152 UINT8 Eid; /* Processor EID */ 1153 UINT8 IoSapicVector; /* Vector value for PMI interrupts */ 1154 UINT32 GlobalIrq; /* Global system interrupt */ 1155 UINT32 Flags; /* Interrupt Source Flags */ 1156 1157} ACPI_MADT_INTERRUPT_SOURCE; 1158 1159/* Masks for Flags field above */ 1160 1161#define ACPI_MADT_CPEI_OVERRIDE (1) 1162 1163 1164/* 9: Processor Local X2APIC (ACPI 4.0) */ 1165 1166typedef struct acpi_madt_local_x2apic 1167{ 1168 ACPI_SUBTABLE_HEADER Header; 1169 UINT16 Reserved; /* Reserved - must be zero */ 1170 UINT32 LocalApicId; /* Processor x2APIC ID */ 1171 UINT32 LapicFlags; 1172 UINT32 Uid; /* ACPI processor UID */ 1173 1174} ACPI_MADT_LOCAL_X2APIC; 1175 1176 1177/* 10: Local X2APIC NMI (ACPI 4.0) */ 1178 1179typedef struct acpi_madt_local_x2apic_nmi 1180{ 1181 ACPI_SUBTABLE_HEADER Header; 1182 UINT16 IntiFlags; 1183 UINT32 Uid; /* ACPI processor UID */ 1184 UINT8 Lint; /* LINTn to which NMI is connected */ 1185 UINT8 Reserved[3]; /* Reserved - must be zero */ 1186 1187} ACPI_MADT_LOCAL_X2APIC_NMI; 1188 1189 1190/* 11: Generic Interrupt - GICC (ACPI 5.0 + ACPI 6.0 + ACPI 6.3 + ACPI 6.5 changes) */ 1191 1192typedef struct acpi_madt_generic_interrupt 1193{ 1194 ACPI_SUBTABLE_HEADER Header; 1195 UINT16 Reserved; /* Reserved - must be zero */ 1196 UINT32 CpuInterfaceNumber; 1197 UINT32 Uid; 1198 UINT32 Flags; 1199 UINT32 ParkingVersion; 1200 UINT32 PerformanceInterrupt; 1201 UINT64 ParkedAddress; 1202 UINT64 BaseAddress; 1203 UINT64 GicvBaseAddress; 1204 UINT64 GichBaseAddress; 1205 UINT32 VgicInterrupt; 1206 UINT64 GicrBaseAddress; 1207 UINT64 ArmMpidr; 1208 UINT8 EfficiencyClass; 1209 UINT8 Reserved2[1]; 1210 UINT16 SpeInterrupt; /* ACPI 6.3 */ 1211 UINT16 TrbeInterrupt; /* ACPI 6.5 */ 1212 1213} ACPI_MADT_GENERIC_INTERRUPT; 1214 1215/* Masks for Flags field above */ 1216 1217/* ACPI_MADT_ENABLED (1) Processor is usable if set */ 1218#define ACPI_MADT_PERFORMANCE_IRQ_MODE (1<<1) /* 01: Performance Interrupt Mode */ 1219#define ACPI_MADT_VGIC_IRQ_MODE (1<<2) /* 02: VGIC Maintenance Interrupt mode */ 1220 1221 1222/* 12: Generic Distributor (ACPI 5.0 + ACPI 6.0 changes) */ 1223 1224typedef struct acpi_madt_generic_distributor 1225{ 1226 ACPI_SUBTABLE_HEADER Header; 1227 UINT16 Reserved; /* Reserved - must be zero */ 1228 UINT32 GicId; 1229 UINT64 BaseAddress; 1230 UINT32 GlobalIrqBase; 1231 UINT8 Version; 1232 UINT8 Reserved2[3]; /* Reserved - must be zero */ 1233 1234} ACPI_MADT_GENERIC_DISTRIBUTOR; 1235 1236/* Values for Version field above */ 1237 1238enum AcpiMadtGicVersion 1239{ 1240 ACPI_MADT_GIC_VERSION_NONE = 0, 1241 ACPI_MADT_GIC_VERSION_V1 = 1, 1242 ACPI_MADT_GIC_VERSION_V2 = 2, 1243 ACPI_MADT_GIC_VERSION_V3 = 3, 1244 ACPI_MADT_GIC_VERSION_V4 = 4, 1245 ACPI_MADT_GIC_VERSION_RESERVED = 5 /* 5 and greater are reserved */ 1246}; 1247 1248 1249/* 13: Generic MSI Frame (ACPI 5.1) */ 1250 1251typedef struct acpi_madt_generic_msi_frame 1252{ 1253 ACPI_SUBTABLE_HEADER Header; 1254 UINT16 Reserved; /* Reserved - must be zero */ 1255 UINT32 MsiFrameId; 1256 UINT64 BaseAddress; 1257 UINT32 Flags; 1258 UINT16 SpiCount; 1259 UINT16 SpiBase; 1260 1261} ACPI_MADT_GENERIC_MSI_FRAME; 1262 1263/* Masks for Flags field above */ 1264 1265#define ACPI_MADT_OVERRIDE_SPI_VALUES (1) 1266 1267 1268/* 14: Generic Redistributor (ACPI 5.1) */ 1269 1270typedef struct acpi_madt_generic_redistributor 1271{ 1272 ACPI_SUBTABLE_HEADER Header; 1273 UINT16 Reserved; /* reserved - must be zero */ 1274 UINT64 BaseAddress; 1275 UINT32 Length; 1276 1277} ACPI_MADT_GENERIC_REDISTRIBUTOR; 1278 1279 1280/* 15: Generic Translator (ACPI 6.0) */ 1281 1282typedef struct acpi_madt_generic_translator 1283{ 1284 ACPI_SUBTABLE_HEADER Header; 1285 UINT16 Reserved; /* reserved - must be zero */ 1286 UINT32 TranslationId; 1287 UINT64 BaseAddress; 1288 UINT32 Reserved2; 1289 1290} ACPI_MADT_GENERIC_TRANSLATOR; 1291 1292/* 16: Multiprocessor wakeup (ACPI 6.4) */ 1293 1294typedef struct acpi_madt_multiproc_wakeup 1295{ 1296 ACPI_SUBTABLE_HEADER Header; 1297 UINT16 MailboxVersion; 1298 UINT32 Reserved; /* reserved - must be zero */ 1299 UINT64 BaseAddress; 1300 1301} ACPI_MADT_MULTIPROC_WAKEUP; 1302 1303#define ACPI_MULTIPROC_WAKEUP_MB_OS_SIZE 2032 1304#define ACPI_MULTIPROC_WAKEUP_MB_FIRMWARE_SIZE 2048 1305 1306typedef struct acpi_madt_multiproc_wakeup_mailbox 1307{ 1308 UINT16 Command; 1309 UINT16 Reserved; /* reserved - must be zero */ 1310 UINT32 ApicId; 1311 UINT64 WakeupVector; 1312 UINT8 ReservedOs[ACPI_MULTIPROC_WAKEUP_MB_OS_SIZE]; /* reserved for OS use */ 1313 UINT8 ReservedFirmware[ACPI_MULTIPROC_WAKEUP_MB_FIRMWARE_SIZE]; /* reserved for firmware use */ 1314 1315} ACPI_MADT_MULTIPROC_WAKEUP_MAILBOX; 1316 1317#define ACPI_MP_WAKE_COMMAND_WAKEUP 1 1318 1319/* 17: CPU Core Interrupt Controller (ACPI 6.5) */ 1320 1321typedef struct acpi_madt_core_pic { 1322 ACPI_SUBTABLE_HEADER Header; 1323 UINT8 Version; 1324 UINT32 ProcessorId; 1325 UINT32 CoreId; 1326 UINT32 Flags; 1327} ACPI_MADT_CORE_PIC; 1328 1329/* Values for Version field above */ 1330 1331enum AcpiMadtCorePicVersion { 1332 ACPI_MADT_CORE_PIC_VERSION_NONE = 0, 1333 ACPI_MADT_CORE_PIC_VERSION_V1 = 1, 1334 ACPI_MADT_CORE_PIC_VERSION_RESERVED = 2 /* 2 and greater are reserved */ 1335}; 1336 1337/* 18: Legacy I/O Interrupt Controller (ACPI 6.5) */ 1338 1339typedef struct acpi_madt_lio_pic { 1340 ACPI_SUBTABLE_HEADER Header; 1341 UINT8 Version; 1342 UINT64 Address; 1343 UINT16 Size; 1344 UINT8 Cascade[2]; 1345 UINT32 CascadeMap[2]; 1346} ACPI_MADT_LIO_PIC; 1347 1348/* Values for Version field above */ 1349 1350enum AcpiMadtLioPicVersion { 1351 ACPI_MADT_LIO_PIC_VERSION_NONE = 0, 1352 ACPI_MADT_LIO_PIC_VERSION_V1 = 1, 1353 ACPI_MADT_LIO_PIC_VERSION_RESERVED = 2 /* 2 and greater are reserved */ 1354}; 1355 1356/* 19: HT Interrupt Controller (ACPI 6.5) */ 1357 1358typedef struct acpi_madt_ht_pic { 1359 ACPI_SUBTABLE_HEADER Header; 1360 UINT8 Version; 1361 UINT64 Address; 1362 UINT16 Size; 1363 UINT8 Cascade[8]; 1364} ACPI_MADT_HT_PIC; 1365 1366/* Values for Version field above */ 1367 1368enum AcpiMadtHtPicVersion { 1369 ACPI_MADT_HT_PIC_VERSION_NONE = 0, 1370 ACPI_MADT_HT_PIC_VERSION_V1 = 1, 1371 ACPI_MADT_HT_PIC_VERSION_RESERVED = 2 /* 2 and greater are reserved */ 1372}; 1373 1374/* 20: Extend I/O Interrupt Controller (ACPI 6.5) */ 1375 1376typedef struct acpi_madt_eio_pic { 1377 ACPI_SUBTABLE_HEADER Header; 1378 UINT8 Version; 1379 UINT8 Cascade; 1380 UINT8 Node; 1381 UINT64 NodeMap; 1382} ACPI_MADT_EIO_PIC; 1383 1384/* Values for Version field above */ 1385 1386enum AcpiMadtEioPicVersion { 1387 ACPI_MADT_EIO_PIC_VERSION_NONE = 0, 1388 ACPI_MADT_EIO_PIC_VERSION_V1 = 1, 1389 ACPI_MADT_EIO_PIC_VERSION_RESERVED = 2 /* 2 and greater are reserved */ 1390}; 1391 1392/* 21: MSI Interrupt Controller (ACPI 6.5) */ 1393 1394typedef struct acpi_madt_msi_pic { 1395 ACPI_SUBTABLE_HEADER Header; 1396 UINT8 Version; 1397 UINT64 MsgAddress; 1398 UINT32 Start; 1399 UINT32 Count; 1400} ACPI_MADT_MSI_PIC; 1401 1402/* Values for Version field above */ 1403 1404enum AcpiMadtMsiPicVersion { 1405 ACPI_MADT_MSI_PIC_VERSION_NONE = 0, 1406 ACPI_MADT_MSI_PIC_VERSION_V1 = 1, 1407 ACPI_MADT_MSI_PIC_VERSION_RESERVED = 2 /* 2 and greater are reserved */ 1408}; 1409 1410/* 22: Bridge I/O Interrupt Controller (ACPI 6.5) */ 1411 1412typedef struct acpi_madt_bio_pic { 1413 ACPI_SUBTABLE_HEADER Header; 1414 UINT8 Version; 1415 UINT64 Address; 1416 UINT16 Size; 1417 UINT16 Id; 1418 UINT16 GsiBase; 1419} ACPI_MADT_BIO_PIC; 1420 1421/* Values for Version field above */ 1422 1423enum AcpiMadtBioPicVersion { 1424 ACPI_MADT_BIO_PIC_VERSION_NONE = 0, 1425 ACPI_MADT_BIO_PIC_VERSION_V1 = 1, 1426 ACPI_MADT_BIO_PIC_VERSION_RESERVED = 2 /* 2 and greater are reserved */ 1427}; 1428 1429/* 23: LPC Interrupt Controller (ACPI 6.5) */ 1430 1431typedef struct acpi_madt_lpc_pic { 1432 ACPI_SUBTABLE_HEADER Header; 1433 UINT8 Version; 1434 UINT64 Address; 1435 UINT16 Size; 1436 UINT8 Cascade; 1437} ACPI_MADT_LPC_PIC; 1438 1439/* Values for Version field above */ 1440 1441enum AcpiMadtLpcPicVersion { 1442 ACPI_MADT_LPC_PIC_VERSION_NONE = 0, 1443 ACPI_MADT_LPC_PIC_VERSION_V1 = 1, 1444 ACPI_MADT_LPC_PIC_VERSION_RESERVED = 2 /* 2 and greater are reserved */ 1445}; 1446 1447/* 24: RISC-V INTC */ 1448typedef struct acpi_madt_rintc { 1449 ACPI_SUBTABLE_HEADER Header; 1450 UINT8 Version; 1451 UINT8 Reserved; 1452 UINT32 Flags; 1453 UINT64 HartId; 1454 UINT32 Uid; /* ACPI processor UID */ 1455 UINT32 ExtIntcId; /* External INTC Id */ 1456 UINT64 ImsicAddr; /* IMSIC base address */ 1457 UINT32 ImsicSize; /* IMSIC size */ 1458} ACPI_MADT_RINTC; 1459 1460/* Values for RISC-V INTC Version field above */ 1461 1462enum AcpiMadtRintcVersion { 1463 ACPI_MADT_RINTC_VERSION_NONE = 0, 1464 ACPI_MADT_RINTC_VERSION_V1 = 1, 1465 ACPI_MADT_RINTC_VERSION_RESERVED = 2 /* 2 and greater are reserved */ 1466}; 1467 1468/* 25: RISC-V IMSIC */ 1469typedef struct acpi_madt_imsic { 1470 ACPI_SUBTABLE_HEADER Header; 1471 UINT8 Version; 1472 UINT8 Reserved; 1473 UINT32 Flags; 1474 UINT16 NumIds; 1475 UINT16 NumGuestIds; 1476 UINT8 GuestIndexBits; 1477 UINT8 HartIndexBits; 1478 UINT8 GroupIndexBits; 1479 UINT8 GroupIndexShift; 1480} ACPI_MADT_IMSIC; 1481 1482/* 26: RISC-V APLIC */ 1483typedef struct acpi_madt_aplic { 1484 ACPI_SUBTABLE_HEADER Header; 1485 UINT8 Version; 1486 UINT8 Id; 1487 UINT32 Flags; 1488 UINT8 HwId[8]; 1489 UINT16 NumIdcs; 1490 UINT16 NumSources; 1491 UINT32 GsiBase; 1492 UINT64 BaseAddr; 1493 UINT32 Size; 1494} ACPI_MADT_APLIC; 1495 1496/* 27: RISC-V PLIC */ 1497typedef struct acpi_madt_plic { 1498 ACPI_SUBTABLE_HEADER Header; 1499 UINT8 Version; 1500 UINT8 Id; 1501 UINT8 HwId[8]; 1502 UINT16 NumIrqs; 1503 UINT16 MaxPrio; 1504 UINT32 Flags; 1505 UINT32 Size; 1506 UINT64 BaseAddr; 1507 UINT32 GsiBase; 1508} ACPI_MADT_PLIC; 1509 1510 1511/* 80: OEM data */ 1512 1513typedef struct acpi_madt_oem_data 1514{ 1515 ACPI_FLEX_ARRAY(UINT8, OemData); 1516} ACPI_MADT_OEM_DATA; 1517 1518 1519/* 1520 * Common flags fields for MADT subtables 1521 */ 1522 1523/* MADT Local APIC flags */ 1524 1525#define ACPI_MADT_ENABLED (1) /* 00: Processor is usable if set */ 1526#define ACPI_MADT_ONLINE_CAPABLE (2) /* 01: System HW supports enabling processor at runtime */ 1527 1528/* MADT MPS INTI flags (IntiFlags) */ 1529 1530#define ACPI_MADT_POLARITY_MASK (3) /* 00-01: Polarity of APIC I/O input signals */ 1531#define ACPI_MADT_TRIGGER_MASK (3<<2) /* 02-03: Trigger mode of APIC input signals */ 1532 1533/* Values for MPS INTI flags */ 1534 1535#define ACPI_MADT_POLARITY_CONFORMS 0 1536#define ACPI_MADT_POLARITY_ACTIVE_HIGH 1 1537#define ACPI_MADT_POLARITY_RESERVED 2 1538#define ACPI_MADT_POLARITY_ACTIVE_LOW 3 1539 1540#define ACPI_MADT_TRIGGER_CONFORMS (0) 1541#define ACPI_MADT_TRIGGER_EDGE (1<<2) 1542#define ACPI_MADT_TRIGGER_RESERVED (2<<2) 1543#define ACPI_MADT_TRIGGER_LEVEL (3<<2) 1544 1545 1546/******************************************************************************* 1547 * 1548 * MCFG - PCI Memory Mapped Configuration table and subtable 1549 * Version 1 1550 * 1551 * Conforms to "PCI Firmware Specification", Revision 3.0, June 20, 2005 1552 * 1553 ******************************************************************************/ 1554 1555typedef struct acpi_table_mcfg 1556{ 1557 ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 1558 UINT8 Reserved[8]; 1559 1560} ACPI_TABLE_MCFG; 1561 1562 1563/* Subtable */ 1564 1565typedef struct acpi_mcfg_allocation 1566{ 1567 UINT64 Address; /* Base address, processor-relative */ 1568 UINT16 PciSegment; /* PCI segment group number */ 1569 UINT8 StartBusNumber; /* Starting PCI Bus number */ 1570 UINT8 EndBusNumber; /* Final PCI Bus number */ 1571 UINT32 Reserved; 1572 1573} ACPI_MCFG_ALLOCATION; 1574 1575 1576/******************************************************************************* 1577 * 1578 * MCHI - Management Controller Host Interface Table 1579 * Version 1 1580 * 1581 * Conforms to "Management Component Transport Protocol (MCTP) Host 1582 * Interface Specification", Revision 1.0.0a, October 13, 2009 1583 * 1584 ******************************************************************************/ 1585 1586typedef struct acpi_table_mchi 1587{ 1588 ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 1589 UINT8 InterfaceType; 1590 UINT8 Protocol; 1591 UINT64 ProtocolData; 1592 UINT8 InterruptType; 1593 UINT8 Gpe; 1594 UINT8 PciDeviceFlag; 1595 UINT32 GlobalInterrupt; 1596 ACPI_GENERIC_ADDRESS ControlRegister; 1597 UINT8 PciSegment; 1598 UINT8 PciBus; 1599 UINT8 PciDevice; 1600 UINT8 PciFunction; 1601 1602} ACPI_TABLE_MCHI; 1603 1604/******************************************************************************* 1605 * 1606 * MPAM - Memory System Resource Partitioning and Monitoring 1607 * 1608 * Conforms to "ACPI for Memory System Resource Partitioning and Monitoring 2.0" 1609 * Document number: ARM DEN 0065, December, 2022. 1610 * 1611 ******************************************************************************/ 1612 1613/* MPAM RIS locator types. Table 11, Location types */ 1614enum AcpiMpamLocatorType { 1615 ACPI_MPAM_LOCATION_TYPE_PROCESSOR_CACHE = 0, 1616 ACPI_MPAM_LOCATION_TYPE_MEMORY = 1, 1617 ACPI_MPAM_LOCATION_TYPE_SMMU = 2, 1618 ACPI_MPAM_LOCATION_TYPE_MEMORY_CACHE = 3, 1619 ACPI_MPAM_LOCATION_TYPE_ACPI_DEVICE = 4, 1620 ACPI_MPAM_LOCATION_TYPE_INTERCONNECT = 5, 1621 ACPI_MPAM_LOCATION_TYPE_UNKNOWN = 0xFF 1622}; 1623 1624/* MPAM Functional dependency descriptor. Table 10 */ 1625typedef struct acpi_mpam_func_deps 1626{ 1627 UINT32 Producer; 1628 UINT32 Reserved; 1629} ACPI_MPAM_FUNC_DEPS; 1630 1631/* MPAM Processor cache locator descriptor. Table 13 */ 1632typedef struct acpi_mpam_resource_cache_locator 1633{ 1634 UINT64 CacheReference; 1635 UINT32 Reserved; 1636} ACPI_MPAM_RESOURCE_CACHE_LOCATOR; 1637 1638/* MPAM Memory locator descriptor. Table 14 */ 1639typedef struct acpi_mpam_resource_memory_locator 1640{ 1641 UINT64 ProximityDomain; 1642 UINT32 Reserved; 1643} ACPI_MPAM_RESOURCE_MEMORY_LOCATOR; 1644 1645/* MPAM SMMU locator descriptor. Table 15 */ 1646typedef struct acpi_mpam_resource_smmu_locator 1647{ 1648 UINT64 SmmuInterface; 1649 UINT32 Reserved; 1650} ACPI_MPAM_RESOURCE_SMMU_INTERFACE; 1651 1652/* MPAM Memory-side cache locator descriptor. Table 16 */ 1653typedef struct acpi_mpam_resource_memcache_locator 1654{ 1655 UINT8 Reserved[7]; 1656 UINT8 Level; 1657 UINT32 Reference; 1658} ACPI_MPAM_RESOURCE_MEMCACHE_INTERFACE; 1659 1660/* MPAM ACPI device locator descriptor. Table 17 */ 1661typedef struct acpi_mpam_resource_acpi_locator 1662{ 1663 UINT64 AcpiHwId; 1664 UINT32 AcpiUniqueId; 1665} ACPI_MPAM_RESOURCE_ACPI_INTERFACE; 1666 1667/* MPAM Interconnect locator descriptor. Table 18 */ 1668typedef struct acpi_mpam_resource_interconnect_locator 1669{ 1670 UINT64 InterConnectDescTblOff; 1671 UINT32 Reserved; 1672} ACPI_MPAM_RESOURCE_INTERCONNECT_INTERFACE; 1673 1674/* MPAM Locator structure. Table 12 */ 1675typedef struct acpi_mpam_resource_generic_locator 1676{ 1677 UINT64 Descriptor1; 1678 UINT32 Descriptor2; 1679} ACPI_MPAM_RESOURCE_GENERIC_LOCATOR; 1680 1681typedef union acpi_mpam_resource_locator 1682{ 1683 ACPI_MPAM_RESOURCE_CACHE_LOCATOR CacheLocator; 1684 ACPI_MPAM_RESOURCE_MEMORY_LOCATOR MemoryLocator; 1685 ACPI_MPAM_RESOURCE_SMMU_INTERFACE SmmuLocator; 1686 ACPI_MPAM_RESOURCE_MEMCACHE_INTERFACE MemCacheLocator; 1687 ACPI_MPAM_RESOURCE_ACPI_INTERFACE AcpiLocator; 1688 ACPI_MPAM_RESOURCE_INTERCONNECT_INTERFACE InterconnectIfcLocator; 1689 ACPI_MPAM_RESOURCE_GENERIC_LOCATOR GenericLocator; 1690} ACPI_MPAM_RESOURCE_LOCATOR; 1691 1692/* Memory System Component Resource Node Structure Table 9 */ 1693typedef struct acpi_mpam_resource_node 1694{ 1695 UINT32 Identifier; 1696 UINT8 RISIndex; 1697 UINT16 Reserved1; 1698 UINT8 LocatorType; 1699 ACPI_MPAM_RESOURCE_LOCATOR Locator; 1700 UINT32 NumFunctionalDeps; 1701} ACPI_MPAM_RESOURCE_NODE; 1702 1703/* Memory System Component (MSC) Node Structure. Table 4 */ 1704typedef struct acpi_mpam_msc_node 1705{ 1706 UINT16 Length; 1707 UINT8 InterfaceType; 1708 UINT8 Reserved; 1709 UINT32 Identifier; 1710 UINT64 BaseAddress; 1711 UINT32 MMIOSize; 1712 UINT32 OverflowInterrupt; 1713 UINT32 OverflowInterruptFlags; 1714 UINT32 Reserved1; 1715 UINT32 OverflowInterruptAffinity; 1716 UINT32 ErrorInterrupt; 1717 UINT32 ErrorInterruptFlags; 1718 UINT32 Reserved2; 1719 UINT32 ErrorInterruptAffinity; 1720 UINT32 MaxNrdyUsec; 1721 UINT64 HardwareIdLinkedDevice; 1722 UINT32 InstanceIdLinkedDevice; 1723 UINT32 NumResouceNodes; 1724} ACPI_MPAM_MSC_NODE; 1725 1726typedef struct acpi_table_mpam 1727{ 1728 ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 1729} ACPI_TABLE_MPAM; 1730 1731/******************************************************************************* 1732 * 1733 * MPST - Memory Power State Table (ACPI 5.0) 1734 * Version 1 1735 * 1736 ******************************************************************************/ 1737 1738#define ACPI_MPST_CHANNEL_INFO \ 1739 UINT8 ChannelId; \ 1740 UINT8 Reserved1[3]; \ 1741 UINT16 PowerNodeCount; \ 1742 UINT16 Reserved2; 1743 1744/* Main table */ 1745 1746typedef struct acpi_table_mpst 1747{ 1748 ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 1749 ACPI_MPST_CHANNEL_INFO /* Platform Communication Channel */ 1750 1751} ACPI_TABLE_MPST; 1752 1753 1754/* Memory Platform Communication Channel Info */ 1755 1756typedef struct acpi_mpst_channel 1757{ 1758 ACPI_MPST_CHANNEL_INFO /* Platform Communication Channel */ 1759 1760} ACPI_MPST_CHANNEL; 1761 1762 1763/* Memory Power Node Structure */ 1764 1765typedef struct acpi_mpst_power_node 1766{ 1767 UINT8 Flags; 1768 UINT8 Reserved1; 1769 UINT16 NodeId; 1770 UINT32 Length; 1771 UINT64 RangeAddress; 1772 UINT64 RangeLength; 1773 UINT32 NumPowerStates; 1774 UINT32 NumPhysicalComponents; 1775 1776} ACPI_MPST_POWER_NODE; 1777 1778/* Values for Flags field above */ 1779 1780#define ACPI_MPST_ENABLED 1 1781#define ACPI_MPST_POWER_MANAGED 2 1782#define ACPI_MPST_HOT_PLUG_CAPABLE 4 1783 1784 1785/* Memory Power State Structure (follows POWER_NODE above) */ 1786 1787typedef struct acpi_mpst_power_state 1788{ 1789 UINT8 PowerState; 1790 UINT8 InfoIndex; 1791 1792} ACPI_MPST_POWER_STATE; 1793 1794 1795/* Physical Component ID Structure (follows POWER_STATE above) */ 1796 1797typedef struct acpi_mpst_component 1798{ 1799 UINT16 ComponentId; 1800 1801} ACPI_MPST_COMPONENT; 1802 1803 1804/* Memory Power State Characteristics Structure (follows all POWER_NODEs) */ 1805 1806typedef struct acpi_mpst_data_hdr 1807{ 1808 UINT16 CharacteristicsCount; 1809 UINT16 Reserved; 1810 1811} ACPI_MPST_DATA_HDR; 1812 1813typedef struct acpi_mpst_power_data 1814{ 1815 UINT8 StructureId; 1816 UINT8 Flags; 1817 UINT16 Reserved1; 1818 UINT32 AveragePower; 1819 UINT32 PowerSaving; 1820 UINT64 ExitLatency; 1821 UINT64 Reserved2; 1822 1823} ACPI_MPST_POWER_DATA; 1824 1825/* Values for Flags field above */ 1826 1827#define ACPI_MPST_PRESERVE 1 1828#define ACPI_MPST_AUTOENTRY 2 1829#define ACPI_MPST_AUTOEXIT 4 1830 1831 1832/* Shared Memory Region (not part of an ACPI table) */ 1833 1834typedef struct acpi_mpst_shared 1835{ 1836 UINT32 Signature; 1837 UINT16 PccCommand; 1838 UINT16 PccStatus; 1839 UINT32 CommandRegister; 1840 UINT32 StatusRegister; 1841 UINT32 PowerStateId; 1842 UINT32 PowerNodeId; 1843 UINT64 EnergyConsumed; 1844 UINT64 AveragePower; 1845 1846} ACPI_MPST_SHARED; 1847 1848 1849/******************************************************************************* 1850 * 1851 * MSCT - Maximum System Characteristics Table (ACPI 4.0) 1852 * Version 1 1853 * 1854 ******************************************************************************/ 1855 1856typedef struct acpi_table_msct 1857{ 1858 ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 1859 UINT32 ProximityOffset; /* Location of proximity info struct(s) */ 1860 UINT32 MaxProximityDomains;/* Max number of proximity domains */ 1861 UINT32 MaxClockDomains; /* Max number of clock domains */ 1862 UINT64 MaxAddress; /* Max physical address in system */ 1863 1864} ACPI_TABLE_MSCT; 1865 1866 1867/* Subtable - Maximum Proximity Domain Information. Version 1 */ 1868 1869typedef struct acpi_msct_proximity 1870{ 1871 UINT8 Revision; 1872 UINT8 Length; 1873 UINT32 RangeStart; /* Start of domain range */ 1874 UINT32 RangeEnd; /* End of domain range */ 1875 UINT32 ProcessorCapacity; 1876 UINT64 MemoryCapacity; /* In bytes */ 1877 1878} ACPI_MSCT_PROXIMITY; 1879 1880 1881/******************************************************************************* 1882 * 1883 * MSDM - Microsoft Data Management table 1884 * 1885 * Conforms to "Microsoft Software Licensing Tables (SLIC and MSDM)", 1886 * November 29, 2011. Copyright 2011 Microsoft 1887 * 1888 ******************************************************************************/ 1889 1890/* Basic MSDM table is only the common ACPI header */ 1891 1892typedef struct acpi_table_msdm 1893{ 1894 ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 1895 1896} ACPI_TABLE_MSDM; 1897 1898 1899/******************************************************************************* 1900 * 1901 * NFIT - NVDIMM Interface Table (ACPI 6.0+) 1902 * Version 1 1903 * 1904 ******************************************************************************/ 1905 1906typedef struct acpi_table_nfit 1907{ 1908 ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 1909 UINT32 Reserved; /* Reserved, must be zero */ 1910 1911} ACPI_TABLE_NFIT; 1912 1913/* Subtable header for NFIT */ 1914 1915typedef struct acpi_nfit_header 1916{ 1917 UINT16 Type; 1918 UINT16 Length; 1919 1920} ACPI_NFIT_HEADER; 1921 1922 1923/* Values for subtable type in ACPI_NFIT_HEADER */ 1924 1925enum AcpiNfitType 1926{ 1927 ACPI_NFIT_TYPE_SYSTEM_ADDRESS = 0, 1928 ACPI_NFIT_TYPE_MEMORY_MAP = 1, 1929 ACPI_NFIT_TYPE_INTERLEAVE = 2, 1930 ACPI_NFIT_TYPE_SMBIOS = 3, 1931 ACPI_NFIT_TYPE_CONTROL_REGION = 4, 1932 ACPI_NFIT_TYPE_DATA_REGION = 5, 1933 ACPI_NFIT_TYPE_FLUSH_ADDRESS = 6, 1934 ACPI_NFIT_TYPE_CAPABILITIES = 7, 1935 ACPI_NFIT_TYPE_RESERVED = 8 /* 8 and greater are reserved */ 1936}; 1937 1938/* 1939 * NFIT Subtables 1940 */ 1941 1942/* 0: System Physical Address Range Structure */ 1943 1944typedef struct acpi_nfit_system_address 1945{ 1946 ACPI_NFIT_HEADER Header; 1947 UINT16 RangeIndex; 1948 UINT16 Flags; 1949 UINT32 Reserved; /* Reserved, must be zero */ 1950 UINT32 ProximityDomain; 1951 UINT8 RangeGuid[16]; 1952 UINT64 Address; 1953 UINT64 Length; 1954 UINT64 MemoryMapping; 1955 UINT64 LocationCookie; /* ACPI 6.4 */ 1956 1957} ACPI_NFIT_SYSTEM_ADDRESS; 1958 1959/* Flags */ 1960 1961#define ACPI_NFIT_ADD_ONLINE_ONLY (1) /* 00: Add/Online Operation Only */ 1962#define ACPI_NFIT_PROXIMITY_VALID (1<<1) /* 01: Proximity Domain Valid */ 1963#define ACPI_NFIT_LOCATION_COOKIE_VALID (1<<2) /* 02: SPA location cookie valid (ACPI 6.4) */ 1964 1965/* Range Type GUIDs appear in the include/acuuid.h file */ 1966 1967 1968/* 1: Memory Device to System Address Range Map Structure */ 1969 1970typedef struct acpi_nfit_memory_map 1971{ 1972 ACPI_NFIT_HEADER Header; 1973 UINT32 DeviceHandle; 1974 UINT16 PhysicalId; 1975 UINT16 RegionId; 1976 UINT16 RangeIndex; 1977 UINT16 RegionIndex; 1978 UINT64 RegionSize; 1979 UINT64 RegionOffset; 1980 UINT64 Address; 1981 UINT16 InterleaveIndex; 1982 UINT16 InterleaveWays; 1983 UINT16 Flags; 1984 UINT16 Reserved; /* Reserved, must be zero */ 1985 1986} ACPI_NFIT_MEMORY_MAP; 1987 1988/* Flags */ 1989 1990#define ACPI_NFIT_MEM_SAVE_FAILED (1) /* 00: Last SAVE to Memory Device failed */ 1991#define ACPI_NFIT_MEM_RESTORE_FAILED (1<<1) /* 01: Last RESTORE from Memory Device failed */ 1992#define ACPI_NFIT_MEM_FLUSH_FAILED (1<<2) /* 02: Platform flush failed */ 1993#define ACPI_NFIT_MEM_NOT_ARMED (1<<3) /* 03: Memory Device is not armed */ 1994#define ACPI_NFIT_MEM_HEALTH_OBSERVED (1<<4) /* 04: Memory Device observed SMART/health events */ 1995#define ACPI_NFIT_MEM_HEALTH_ENABLED (1<<5) /* 05: SMART/health events enabled */ 1996#define ACPI_NFIT_MEM_MAP_FAILED (1<<6) /* 06: Mapping to SPA failed */ 1997 1998 1999/* 2: Interleave Structure */ 2000 2001typedef struct acpi_nfit_interleave 2002{ 2003 ACPI_NFIT_HEADER Header; 2004 UINT16 InterleaveIndex; 2005 UINT16 Reserved; /* Reserved, must be zero */ 2006 UINT32 LineCount; 2007 UINT32 LineSize; 2008 UINT32 LineOffset[]; /* Variable length */ 2009 2010} ACPI_NFIT_INTERLEAVE; 2011 2012 2013/* 3: SMBIOS Management Information Structure */ 2014 2015typedef struct acpi_nfit_smbios 2016{ 2017 ACPI_NFIT_HEADER Header; 2018 UINT32 Reserved; /* Reserved, must be zero */ 2019 UINT8 Data[]; /* Variable length */ 2020 2021} ACPI_NFIT_SMBIOS; 2022 2023 2024/* 4: NVDIMM Control Region Structure */ 2025 2026typedef struct acpi_nfit_control_region 2027{ 2028 ACPI_NFIT_HEADER Header; 2029 UINT16 RegionIndex; 2030 UINT16 VendorId; 2031 UINT16 DeviceId; 2032 UINT16 RevisionId; 2033 UINT16 SubsystemVendorId; 2034 UINT16 SubsystemDeviceId; 2035 UINT16 SubsystemRevisionId; 2036 UINT8 ValidFields; 2037 UINT8 ManufacturingLocation; 2038 UINT16 ManufacturingDate; 2039 UINT8 Reserved[2]; /* Reserved, must be zero */ 2040 UINT32 SerialNumber; 2041 UINT16 Code; 2042 UINT16 Windows; 2043 UINT64 WindowSize; 2044 UINT64 CommandOffset; 2045 UINT64 CommandSize; 2046 UINT64 StatusOffset; 2047 UINT64 StatusSize; 2048 UINT16 Flags; 2049 UINT8 Reserved1[6]; /* Reserved, must be zero */ 2050 2051} ACPI_NFIT_CONTROL_REGION; 2052 2053/* Flags */ 2054 2055#define ACPI_NFIT_CONTROL_BUFFERED (1) /* Block Data Windows implementation is buffered */ 2056 2057/* ValidFields bits */ 2058 2059#define ACPI_NFIT_CONTROL_MFG_INFO_VALID (1) /* Manufacturing fields are valid */ 2060 2061 2062/* 5: NVDIMM Block Data Window Region Structure */ 2063 2064typedef struct acpi_nfit_data_region 2065{ 2066 ACPI_NFIT_HEADER Header; 2067 UINT16 RegionIndex; 2068 UINT16 Windows; 2069 UINT64 Offset; 2070 UINT64 Size; 2071 UINT64 Capacity; 2072 UINT64 StartAddress; 2073 2074} ACPI_NFIT_DATA_REGION; 2075 2076 2077/* 6: Flush Hint Address Structure */ 2078 2079typedef struct acpi_nfit_flush_address 2080{ 2081 ACPI_NFIT_HEADER Header; 2082 UINT32 DeviceHandle; 2083 UINT16 HintCount; 2084 UINT8 Reserved[6]; /* Reserved, must be zero */ 2085 UINT64 HintAddress[]; /* Variable length */ 2086 2087} ACPI_NFIT_FLUSH_ADDRESS; 2088 2089 2090/* 7: Platform Capabilities Structure */ 2091 2092typedef struct acpi_nfit_capabilities 2093{ 2094 ACPI_NFIT_HEADER Header; 2095 UINT8 HighestCapability; 2096 UINT8 Reserved[3]; /* Reserved, must be zero */ 2097 UINT32 Capabilities; 2098 UINT32 Reserved2; 2099 2100} ACPI_NFIT_CAPABILITIES; 2101 2102/* Capabilities Flags */ 2103 2104#define ACPI_NFIT_CAPABILITY_CACHE_FLUSH (1) /* 00: Cache Flush to NVDIMM capable */ 2105#define ACPI_NFIT_CAPABILITY_MEM_FLUSH (1<<1) /* 01: Memory Flush to NVDIMM capable */ 2106#define ACPI_NFIT_CAPABILITY_MEM_MIRRORING (1<<2) /* 02: Memory Mirroring capable */ 2107 2108 2109/* 2110 * NFIT/DVDIMM device handle support - used as the _ADR for each NVDIMM 2111 */ 2112typedef struct nfit_device_handle 2113{ 2114 UINT32 Handle; 2115 2116} NFIT_DEVICE_HANDLE; 2117 2118/* Device handle construction and extraction macros */ 2119 2120#define ACPI_NFIT_DIMM_NUMBER_MASK 0x0000000F 2121#define ACPI_NFIT_CHANNEL_NUMBER_MASK 0x000000F0 2122#define ACPI_NFIT_MEMORY_ID_MASK 0x00000F00 2123#define ACPI_NFIT_SOCKET_ID_MASK 0x0000F000 2124#define ACPI_NFIT_NODE_ID_MASK 0x0FFF0000 2125 2126#define ACPI_NFIT_DIMM_NUMBER_OFFSET 0 2127#define ACPI_NFIT_CHANNEL_NUMBER_OFFSET 4 2128#define ACPI_NFIT_MEMORY_ID_OFFSET 8 2129#define ACPI_NFIT_SOCKET_ID_OFFSET 12 2130#define ACPI_NFIT_NODE_ID_OFFSET 16 2131 2132/* Macro to construct a NFIT/NVDIMM device handle */ 2133 2134#define ACPI_NFIT_BUILD_DEVICE_HANDLE(dimm, channel, memory, socket, node) \ 2135 ((dimm) | \ 2136 ((channel) << ACPI_NFIT_CHANNEL_NUMBER_OFFSET) | \ 2137 ((memory) << ACPI_NFIT_MEMORY_ID_OFFSET) | \ 2138 ((socket) << ACPI_NFIT_SOCKET_ID_OFFSET) | \ 2139 ((node) << ACPI_NFIT_NODE_ID_OFFSET)) 2140 2141/* Macros to extract individual fields from a NFIT/NVDIMM device handle */ 2142 2143#define ACPI_NFIT_GET_DIMM_NUMBER(handle) \ 2144 ((handle) & ACPI_NFIT_DIMM_NUMBER_MASK) 2145 2146#define ACPI_NFIT_GET_CHANNEL_NUMBER(handle) \ 2147 (((handle) & ACPI_NFIT_CHANNEL_NUMBER_MASK) >> ACPI_NFIT_CHANNEL_NUMBER_OFFSET) 2148 2149#define ACPI_NFIT_GET_MEMORY_ID(handle) \ 2150 (((handle) & ACPI_NFIT_MEMORY_ID_MASK) >> ACPI_NFIT_MEMORY_ID_OFFSET) 2151 2152#define ACPI_NFIT_GET_SOCKET_ID(handle) \ 2153 (((handle) & ACPI_NFIT_SOCKET_ID_MASK) >> ACPI_NFIT_SOCKET_ID_OFFSET) 2154 2155#define ACPI_NFIT_GET_NODE_ID(handle) \ 2156 (((handle) & ACPI_NFIT_NODE_ID_MASK) >> ACPI_NFIT_NODE_ID_OFFSET) 2157 2158 2159/******************************************************************************* 2160 * 2161 * NHLT - Non HD Audio Link Table 2162 * 2163 * Conforms to: Intel Smart Sound Technology NHLT Specification 2164 * Version 0.8.1, January 2020. 2165 * 2166 ******************************************************************************/ 2167 2168/* Main table */ 2169 2170typedef struct acpi_table_nhlt 2171{ 2172 ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 2173 UINT8 EndpointCount; 2174 2175} ACPI_TABLE_NHLT; 2176 2177typedef struct acpi_table_nhlt_endpoint_count 2178{ 2179 UINT8 EndpointCount; 2180 2181} ACPI_TABLE_NHLT_ENDPOINT_COUNT; 2182 2183typedef struct acpi_nhlt_endpoint 2184{ 2185 UINT32 DescriptorLength; 2186 UINT8 LinkType; 2187 UINT8 InstanceId; 2188 UINT16 VendorId; 2189 UINT16 DeviceId; 2190 UINT16 RevisionId; 2191 UINT32 SubsystemId; 2192 UINT8 DeviceType; 2193 UINT8 Direction; 2194 UINT8 VirtualBusId; 2195 2196} ACPI_NHLT_ENDPOINT; 2197 2198/* Types for LinkType field above */ 2199 2200#define ACPI_NHLT_RESERVED_HD_AUDIO 0 2201#define ACPI_NHLT_RESERVED_DSP 1 2202#define ACPI_NHLT_PDM 2 2203#define ACPI_NHLT_SSP 3 2204#define ACPI_NHLT_RESERVED_SLIMBUS 4 2205#define ACPI_NHLT_RESERVED_SOUNDWIRE 5 2206#define ACPI_NHLT_TYPE_RESERVED 6 /* 6 and above are reserved */ 2207 2208/* All other values above are reserved */ 2209 2210/* Values for DeviceId field above */ 2211 2212#define ACPI_NHLT_PDM_DMIC 0xAE20 2213#define ACPI_NHLT_BT_SIDEBAND 0xAE30 2214#define ACPI_NHLT_I2S_TDM_CODECS 0xAE23 2215 2216/* Values for DeviceType field above */ 2217 2218/* SSP Link */ 2219 2220#define ACPI_NHLT_LINK_BT_SIDEBAND 0 2221#define ACPI_NHLT_LINK_FM 1 2222#define ACPI_NHLT_LINK_MODEM 2 2223/* 3 is reserved */ 2224#define ACPI_NHLT_LINK_SSP_ANALOG_CODEC 4 2225 2226/* PDM Link */ 2227 2228#define ACPI_NHLT_PDM_ON_CAVS_1P8 0 2229#define ACPI_NHLT_PDM_ON_CAVS_1P5 1 2230 2231/* Values for Direction field above */ 2232 2233#define ACPI_NHLT_DIR_RENDER 0 2234#define ACPI_NHLT_DIR_CAPTURE 1 2235#define ACPI_NHLT_DIR_RENDER_LOOPBACK 2 2236#define ACPI_NHLT_DIR_RENDER_FEEDBACK 3 2237#define ACPI_NHLT_DIR_RESERVED 4 /* 4 and above are reserved */ 2238 2239/* Capabilities = 2 */ 2240 2241typedef struct acpi_nhlt_device_specific_config 2242{ 2243 UINT32 CapabilitiesSize; 2244 UINT8 VirtualSlot; 2245 UINT8 ConfigType; 2246 2247} ACPI_NHLT_DEVICE_SPECIFIC_CONFIG; 2248 2249/* Capabilities = 3 */ 2250 2251typedef struct acpi_nhlt_device_specific_config_a 2252{ 2253 UINT32 CapabilitiesSize; 2254 UINT8 VirtualSlot; 2255 UINT8 ConfigType; 2256 UINT8 ArrayType; 2257 2258} ACPI_NHLT_DEVICE_SPECIFIC_CONFIG_A; 2259 2260/* Capabilities = 3 */ 2261 2262typedef struct acpi_nhlt_device_specific_config_d 2263{ 2264 UINT8 VirtualSlot; 2265 UINT8 ConfigType; 2266 UINT8 ArrayType; 2267 2268} ACPI_NHLT_DEVICE_SPECIFIC_CONFIG_D; 2269 2270/* Values for Config Type above */ 2271 2272#define ACPI_NHLT_CONFIG_TYPE_GENERIC 0x00 2273#define ACPI_NHLT_CONFIG_TYPE_MIC_ARRAY 0x01 2274#define ACPI_NHLT_CONFIG_TYPE_RENDER_FEEDBACK 0x03 2275#define ACPI_NHLT_CONFIG_TYPE_RESERVED 0x04 /* 4 and above are reserved */ 2276 2277/* Capabilities = 0 */ 2278 2279typedef struct acpi_nhlt_device_specific_config_b 2280{ 2281 UINT32 CapabilitiesSize; 2282 2283} ACPI_NHLT_DEVICE_SPECIFIC_CONFIG_B; 2284 2285/* Capabilities = 1 */ 2286 2287typedef struct acpi_nhlt_device_specific_config_c 2288{ 2289 UINT32 CapabilitiesSize; 2290 UINT8 VirtualSlot; 2291 2292} ACPI_NHLT_DEVICE_SPECIFIC_CONFIG_C; 2293 2294typedef struct acpi_nhlt_render_device_specific_config 2295{ 2296 UINT32 CapabilitiesSize; 2297 UINT8 VirtualSlot; 2298 2299} ACPI_NHLT_RENDER_DEVICE_SPECIFIC_CONFIG; 2300 2301typedef struct acpi_nhlt_wave_extensible 2302{ 2303 UINT16 FormatTag; 2304 UINT16 ChannelCount; 2305 UINT32 SamplesPerSec; 2306 UINT32 AvgBytesPerSec; 2307 UINT16 BlockAlign; 2308 UINT16 BitsPerSample; 2309 UINT16 ExtraFormatSize; 2310 UINT16 ValidBitsPerSample; 2311 UINT32 ChannelMask; 2312 UINT8 SubFormatGuid[16]; 2313 2314} ACPI_NHLT_WAVE_EXTENSIBLE; 2315 2316/* Values for ChannelMask above */ 2317 2318#define ACPI_NHLT_SPKR_FRONT_LEFT 0x1 2319#define ACPI_NHLT_SPKR_FRONT_RIGHT 0x2 2320#define ACPI_NHLT_SPKR_FRONT_CENTER 0x4 2321#define ACPI_NHLT_SPKR_LOW_FREQ 0x8 2322#define ACPI_NHLT_SPKR_BACK_LEFT 0x10 2323#define ACPI_NHLT_SPKR_BACK_RIGHT 0x20 2324#define ACPI_NHLT_SPKR_FRONT_LEFT_OF_CENTER 0x40 2325#define ACPI_NHLT_SPKR_FRONT_RIGHT_OF_CENTER 0x80 2326#define ACPI_NHLT_SPKR_BACK_CENTER 0x100 2327#define ACPI_NHLT_SPKR_SIDE_LEFT 0x200 2328#define ACPI_NHLT_SPKR_SIDE_RIGHT 0x400 2329#define ACPI_NHLT_SPKR_TOP_CENTER 0x800 2330#define ACPI_NHLT_SPKR_TOP_FRONT_LEFT 0x1000 2331#define ACPI_NHLT_SPKR_TOP_FRONT_CENTER 0x2000 2332#define ACPI_NHLT_SPKR_TOP_FRONT_RIGHT 0x4000 2333#define ACPI_NHLT_SPKR_TOP_BACK_LEFT 0x8000 2334#define ACPI_NHLT_SPKR_TOP_BACK_CENTER 0x10000 2335#define ACPI_NHLT_SPKR_TOP_BACK_RIGHT 0x20000 2336 2337typedef struct acpi_nhlt_format_config 2338{ 2339 ACPI_NHLT_WAVE_EXTENSIBLE Format; 2340 UINT32 CapabilitySize; 2341 UINT8 Capabilities[]; 2342 2343} ACPI_NHLT_FORMAT_CONFIG; 2344 2345typedef struct acpi_nhlt_formats_config 2346{ 2347 UINT8 FormatsCount; 2348 2349} ACPI_NHLT_FORMATS_CONFIG; 2350 2351typedef struct acpi_nhlt_device_specific_hdr 2352{ 2353 UINT8 VirtualSlot; 2354 UINT8 ConfigType; 2355 2356} ACPI_NHLT_DEVICE_SPECIFIC_HDR; 2357 2358/* Types for ConfigType above */ 2359 2360#define ACPI_NHLT_GENERIC 0 2361#define ACPI_NHLT_MIC 1 2362#define ACPI_NHLT_RENDER 3 2363 2364typedef struct acpi_nhlt_mic_device_specific_config 2365{ 2366 ACPI_NHLT_DEVICE_SPECIFIC_HDR DeviceConfig; 2367 UINT8 ArrayTypeExt; 2368 2369} ACPI_NHLT_MIC_DEVICE_SPECIFIC_CONFIG; 2370 2371/* Values for ArrayTypeExt above */ 2372 2373#define ACPI_NHLT_ARRAY_TYPE_RESERVED 0x09 /* 9 and below are reserved */ 2374#define ACPI_NHLT_SMALL_LINEAR_2ELEMENT 0x0A 2375#define ACPI_NHLT_BIG_LINEAR_2ELEMENT 0x0B 2376#define ACPI_NHLT_FIRST_GEOMETRY_LINEAR_4ELEMENT 0x0C 2377#define ACPI_NHLT_PLANAR_LSHAPED_4ELEMENT 0x0D 2378#define ACPI_NHLT_SECOND_GEOMETRY_LINEAR_4ELEMENT 0x0E 2379#define ACPI_NHLT_VENDOR_DEFINED 0x0F 2380#define ACPI_NHLT_ARRAY_TYPE_MASK 0x0F 2381#define ACPI_NHLT_ARRAY_TYPE_EXT_MASK 0x10 2382 2383#define ACPI_NHLT_NO_EXTENSION 0x0 2384#define ACPI_NHLT_MIC_SNR_SENSITIVITY_EXT (1<<4) 2385 2386typedef struct acpi_nhlt_vendor_mic_count 2387{ 2388 UINT8 MicrophoneCount; 2389 2390} ACPI_NHLT_VENDOR_MIC_COUNT; 2391 2392typedef struct acpi_nhlt_vendor_mic_config 2393{ 2394 UINT8 Type; 2395 UINT8 Panel; 2396 UINT16 SpeakerPositionDistance; /* mm */ 2397 UINT16 HorizontalOffset; /* mm */ 2398 UINT16 VerticalOffset; /* mm */ 2399 UINT8 FrequencyLowBand; /* 5*Hz */ 2400 UINT8 FrequencyHighBand; /* 500*Hz */ 2401 UINT16 DirectionAngle; /* -180 - + 180 */ 2402 UINT16 ElevationAngle; /* -180 - + 180 */ 2403 UINT16 WorkVerticalAngleBegin; /* -180 - + 180 with 2 deg step */ 2404 UINT16 WorkVerticalAngleEnd; /* -180 - + 180 with 2 deg step */ 2405 UINT16 WorkHorizontalAngleBegin; /* -180 - + 180 with 2 deg step */ 2406 UINT16 WorkHorizontalAngleEnd; /* -180 - + 180 with 2 deg step */ 2407 2408} ACPI_NHLT_VENDOR_MIC_CONFIG; 2409 2410/* Values for Type field above */ 2411 2412#define ACPI_NHLT_MIC_OMNIDIRECTIONAL 0 2413#define ACPI_NHLT_MIC_SUBCARDIOID 1 2414#define ACPI_NHLT_MIC_CARDIOID 2 2415#define ACPI_NHLT_MIC_SUPER_CARDIOID 3 2416#define ACPI_NHLT_MIC_HYPER_CARDIOID 4 2417#define ACPI_NHLT_MIC_8_SHAPED 5 2418#define ACPI_NHLT_MIC_RESERVED6 6 /* 6 is reserved */ 2419#define ACPI_NHLT_MIC_VENDOR_DEFINED 7 2420#define ACPI_NHLT_MIC_RESERVED 8 /* 8 and above are reserved */ 2421 2422/* Values for Panel field above */ 2423 2424#define ACPI_NHLT_MIC_POSITION_TOP 0 2425#define ACPI_NHLT_MIC_POSITION_BOTTOM 1 2426#define ACPI_NHLT_MIC_POSITION_LEFT 2 2427#define ACPI_NHLT_MIC_POSITION_RIGHT 3 2428#define ACPI_NHLT_MIC_POSITION_FRONT 4 2429#define ACPI_NHLT_MIC_POSITION_BACK 5 2430#define ACPI_NHLT_MIC_POSITION_RESERVED 6 /* 6 and above are reserved */ 2431 2432typedef struct acpi_nhlt_vendor_mic_device_specific_config 2433{ 2434 ACPI_NHLT_MIC_DEVICE_SPECIFIC_CONFIG MicArrayDeviceConfig; 2435 UINT8 NumberOfMicrophones; 2436 ACPI_NHLT_VENDOR_MIC_CONFIG MicConfig[]; /* Indexed by NumberOfMicrophones */ 2437 2438} ACPI_NHLT_VENDOR_MIC_DEVICE_SPECIFIC_CONFIG; 2439 2440/* Microphone SNR and Sensitivity extension */ 2441 2442typedef struct acpi_nhlt_mic_snr_sensitivity_extension 2443{ 2444 UINT32 SNR; 2445 UINT32 Sensitivity; 2446 2447} ACPI_NHLT_MIC_SNR_SENSITIVITY_EXTENSION; 2448 2449/* Render device with feedback */ 2450 2451typedef struct acpi_nhlt_render_feedback_device_specific_config 2452{ 2453 UINT8 FeedbackVirtualSlot; /* Render slot in case of capture */ 2454 UINT16 FeedbackChannels; /* Informative only */ 2455 UINT16 FeedbackValidBitsPerSample; 2456 2457} ACPI_NHLT_RENDER_FEEDBACK_DEVICE_SPECIFIC_CONFIG; 2458 2459/* Non documented structures */ 2460 2461typedef struct acpi_nhlt_device_info_count 2462{ 2463 UINT8 StructureCount; 2464 2465} ACPI_NHLT_DEVICE_INFO_COUNT; 2466 2467typedef struct acpi_nhlt_device_info 2468{ 2469 UINT8 DeviceId[16]; 2470 UINT8 DeviceInstanceId; 2471 UINT8 DevicePortId; 2472 2473} ACPI_NHLT_DEVICE_INFO; 2474 2475 2476/******************************************************************************* 2477 * 2478 * PCCT - Platform Communications Channel Table (ACPI 5.0) 2479 * Version 2 (ACPI 6.2) 2480 * 2481 ******************************************************************************/ 2482 2483typedef struct acpi_table_pcct 2484{ 2485 ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 2486 UINT32 Flags; 2487 UINT64 Reserved; 2488 2489} ACPI_TABLE_PCCT; 2490 2491/* Values for Flags field above */ 2492 2493#define ACPI_PCCT_DOORBELL 1 2494 2495/* Values for subtable type in ACPI_SUBTABLE_HEADER */ 2496 2497enum AcpiPcctType 2498{ 2499 ACPI_PCCT_TYPE_GENERIC_SUBSPACE = 0, 2500 ACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE = 1, 2501 ACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE_TYPE2 = 2, /* ACPI 6.1 */ 2502 ACPI_PCCT_TYPE_EXT_PCC_MASTER_SUBSPACE = 3, /* ACPI 6.2 */ 2503 ACPI_PCCT_TYPE_EXT_PCC_SLAVE_SUBSPACE = 4, /* ACPI 6.2 */ 2504 ACPI_PCCT_TYPE_HW_REG_COMM_SUBSPACE = 5, /* ACPI 6.4 */ 2505 ACPI_PCCT_TYPE_RESERVED = 6 /* 6 and greater are reserved */ 2506}; 2507 2508/* 2509 * PCCT Subtables, correspond to Type in ACPI_SUBTABLE_HEADER 2510 */ 2511 2512/* 0: Generic Communications Subspace */ 2513 2514typedef struct acpi_pcct_subspace 2515{ 2516 ACPI_SUBTABLE_HEADER Header; 2517 UINT8 Reserved[6]; 2518 UINT64 BaseAddress; 2519 UINT64 Length; 2520 ACPI_GENERIC_ADDRESS DoorbellRegister; 2521 UINT64 PreserveMask; 2522 UINT64 WriteMask; 2523 UINT32 Latency; 2524 UINT32 MaxAccessRate; 2525 UINT16 MinTurnaroundTime; 2526 2527} ACPI_PCCT_SUBSPACE; 2528 2529 2530/* 1: HW-reduced Communications Subspace (ACPI 5.1) */ 2531 2532typedef struct acpi_pcct_hw_reduced 2533{ 2534 ACPI_SUBTABLE_HEADER Header; 2535 UINT32 PlatformInterrupt; 2536 UINT8 Flags; 2537 UINT8 Reserved; 2538 UINT64 BaseAddress; 2539 UINT64 Length; 2540 ACPI_GENERIC_ADDRESS DoorbellRegister; 2541 UINT64 PreserveMask; 2542 UINT64 WriteMask; 2543 UINT32 Latency; 2544 UINT32 MaxAccessRate; 2545 UINT16 MinTurnaroundTime; 2546 2547} ACPI_PCCT_HW_REDUCED; 2548 2549 2550/* 2: HW-reduced Communications Subspace Type 2 (ACPI 6.1) */ 2551 2552typedef struct acpi_pcct_hw_reduced_type2 2553{ 2554 ACPI_SUBTABLE_HEADER Header; 2555 UINT32 PlatformInterrupt; 2556 UINT8 Flags; 2557 UINT8 Reserved; 2558 UINT64 BaseAddress; 2559 UINT64 Length; 2560 ACPI_GENERIC_ADDRESS DoorbellRegister; 2561 UINT64 PreserveMask; 2562 UINT64 WriteMask; 2563 UINT32 Latency; 2564 UINT32 MaxAccessRate; 2565 UINT16 MinTurnaroundTime; 2566 ACPI_GENERIC_ADDRESS PlatformAckRegister; 2567 UINT64 AckPreserveMask; 2568 UINT64 AckWriteMask; 2569 2570} ACPI_PCCT_HW_REDUCED_TYPE2; 2571 2572 2573/* 3: Extended PCC Master Subspace Type 3 (ACPI 6.2) */ 2574 2575typedef struct acpi_pcct_ext_pcc_master 2576{ 2577 ACPI_SUBTABLE_HEADER Header; 2578 UINT32 PlatformInterrupt; 2579 UINT8 Flags; 2580 UINT8 Reserved1; 2581 UINT64 BaseAddress; 2582 UINT32 Length; 2583 ACPI_GENERIC_ADDRESS DoorbellRegister; 2584 UINT64 PreserveMask; 2585 UINT64 WriteMask; 2586 UINT32 Latency; 2587 UINT32 MaxAccessRate; 2588 UINT32 MinTurnaroundTime; 2589 ACPI_GENERIC_ADDRESS PlatformAckRegister; 2590 UINT64 AckPreserveMask; 2591 UINT64 AckSetMask; 2592 UINT64 Reserved2; 2593 ACPI_GENERIC_ADDRESS CmdCompleteRegister; 2594 UINT64 CmdCompleteMask; 2595 ACPI_GENERIC_ADDRESS CmdUpdateRegister; 2596 UINT64 CmdUpdatePreserveMask; 2597 UINT64 CmdUpdateSetMask; 2598 ACPI_GENERIC_ADDRESS ErrorStatusRegister; 2599 UINT64 ErrorStatusMask; 2600 2601} ACPI_PCCT_EXT_PCC_MASTER; 2602 2603 2604/* 4: Extended PCC Slave Subspace Type 4 (ACPI 6.2) */ 2605 2606typedef struct acpi_pcct_ext_pcc_slave 2607{ 2608 ACPI_SUBTABLE_HEADER Header; 2609 UINT32 PlatformInterrupt; 2610 UINT8 Flags; 2611 UINT8 Reserved1; 2612 UINT64 BaseAddress; 2613 UINT32 Length; 2614 ACPI_GENERIC_ADDRESS DoorbellRegister; 2615 UINT64 PreserveMask; 2616 UINT64 WriteMask; 2617 UINT32 Latency; 2618 UINT32 MaxAccessRate; 2619 UINT32 MinTurnaroundTime; 2620 ACPI_GENERIC_ADDRESS PlatformAckRegister; 2621 UINT64 AckPreserveMask; 2622 UINT64 AckSetMask; 2623 UINT64 Reserved2; 2624 ACPI_GENERIC_ADDRESS CmdCompleteRegister; 2625 UINT64 CmdCompleteMask; 2626 ACPI_GENERIC_ADDRESS CmdUpdateRegister; 2627 UINT64 CmdUpdatePreserveMask; 2628 UINT64 CmdUpdateSetMask; 2629 ACPI_GENERIC_ADDRESS ErrorStatusRegister; 2630 UINT64 ErrorStatusMask; 2631 2632} ACPI_PCCT_EXT_PCC_SLAVE; 2633 2634/* 5: HW Registers based Communications Subspace */ 2635 2636typedef struct acpi_pcct_hw_reg 2637{ 2638 ACPI_SUBTABLE_HEADER Header; 2639 UINT16 Version; 2640 UINT64 BaseAddress; 2641 UINT64 Length; 2642 ACPI_GENERIC_ADDRESS DoorbellRegister; 2643 UINT64 DoorbellPreserve; 2644 UINT64 DoorbellWrite; 2645 ACPI_GENERIC_ADDRESS CmdCompleteRegister; 2646 UINT64 CmdCompleteMask; 2647 ACPI_GENERIC_ADDRESS ErrorStatusRegister; 2648 UINT64 ErrorStatusMask; 2649 UINT32 NominalLatency; 2650 UINT32 MinTurnaroundTime; 2651 2652} ACPI_PCCT_HW_REG; 2653 2654 2655/* Values for doorbell flags above */ 2656 2657#define ACPI_PCCT_INTERRUPT_POLARITY (1) 2658#define ACPI_PCCT_INTERRUPT_MODE (1<<1) 2659 2660 2661/* 2662 * PCC memory structures (not part of the ACPI table) 2663 */ 2664 2665/* Shared Memory Region */ 2666 2667typedef struct acpi_pcct_shared_memory 2668{ 2669 UINT32 Signature; 2670 UINT16 Command; 2671 UINT16 Status; 2672 2673} ACPI_PCCT_SHARED_MEMORY; 2674 2675 2676/* Extended PCC Subspace Shared Memory Region (ACPI 6.2) */ 2677 2678typedef struct acpi_pcct_ext_pcc_shared_memory 2679{ 2680 UINT32 Signature; 2681 UINT32 Flags; 2682 UINT32 Length; 2683 UINT32 Command; 2684 2685} ACPI_PCCT_EXT_PCC_SHARED_MEMORY; 2686 2687 2688/******************************************************************************* 2689 * 2690 * PDTT - Platform Debug Trigger Table (ACPI 6.2) 2691 * Version 0 2692 * 2693 ******************************************************************************/ 2694 2695typedef struct acpi_table_pdtt 2696{ 2697 ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 2698 UINT8 TriggerCount; 2699 UINT8 Reserved[3]; 2700 UINT32 ArrayOffset; 2701 2702} ACPI_TABLE_PDTT; 2703 2704 2705/* 2706 * PDTT Communication Channel Identifier Structure. 2707 * The number of these structures is defined by TriggerCount above, 2708 * starting at ArrayOffset. 2709 */ 2710typedef struct acpi_pdtt_channel 2711{ 2712 UINT8 SubchannelId; 2713 UINT8 Flags; 2714 2715} ACPI_PDTT_CHANNEL; 2716 2717/* Flags for above */ 2718 2719#define ACPI_PDTT_RUNTIME_TRIGGER (1) 2720#define ACPI_PDTT_WAIT_COMPLETION (1<<1) 2721#define ACPI_PDTT_TRIGGER_ORDER (1<<2) 2722 2723 2724/******************************************************************************* 2725 * 2726 * PHAT - Platform Health Assessment Table (ACPI 6.4) 2727 * Version 1 2728 * 2729 ******************************************************************************/ 2730 2731typedef struct acpi_table_phat 2732{ 2733 ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 2734 2735} ACPI_TABLE_PHAT; 2736 2737/* Common header for PHAT subtables that follow main table */ 2738 2739typedef struct acpi_phat_header 2740{ 2741 UINT16 Type; 2742 UINT16 Length; 2743 UINT8 Revision; 2744 2745} ACPI_PHAT_HEADER; 2746 2747 2748/* Values for Type field above */ 2749 2750#define ACPI_PHAT_TYPE_FW_VERSION_DATA 0 2751#define ACPI_PHAT_TYPE_FW_HEALTH_DATA 1 2752#define ACPI_PHAT_TYPE_RESERVED 2 /* 0x02-0xFFFF are reserved */ 2753 2754/* 2755 * PHAT subtables, correspond to Type in ACPI_PHAT_HEADER 2756 */ 2757 2758/* 0: Firmware Version Data Record */ 2759 2760typedef struct acpi_phat_version_data 2761{ 2762 ACPI_PHAT_HEADER Header; 2763 UINT8 Reserved[3]; 2764 UINT32 ElementCount; 2765 2766} ACPI_PHAT_VERSION_DATA; 2767 2768typedef struct acpi_phat_version_element 2769{ 2770 UINT8 Guid[16]; 2771 UINT64 VersionValue; 2772 UINT32 ProducerId; 2773 2774} ACPI_PHAT_VERSION_ELEMENT; 2775 2776 2777/* 1: Firmware Health Data Record */ 2778 2779typedef struct acpi_phat_health_data 2780{ 2781 ACPI_PHAT_HEADER Header; 2782 UINT8 Reserved[2]; 2783 UINT8 Health; 2784 UINT8 DeviceGuid[16]; 2785 UINT32 DeviceSpecificOffset; /* Zero if no Device-specific data */ 2786 2787} ACPI_PHAT_HEALTH_DATA; 2788 2789/* Values for Health field above */ 2790 2791#define ACPI_PHAT_ERRORS_FOUND 0 2792#define ACPI_PHAT_NO_ERRORS 1 2793#define ACPI_PHAT_UNKNOWN_ERRORS 2 2794#define ACPI_PHAT_ADVISORY 3 2795 2796 2797/******************************************************************************* 2798 * 2799 * PMTT - Platform Memory Topology Table (ACPI 5.0) 2800 * Version 1 2801 * 2802 ******************************************************************************/ 2803 2804typedef struct acpi_table_pmtt 2805{ 2806 ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 2807 UINT32 MemoryDeviceCount; 2808 /* 2809 * Immediately followed by: 2810 * MEMORY_DEVICE MemoryDeviceStruct[MemoryDeviceCount]; 2811 */ 2812 2813} ACPI_TABLE_PMTT; 2814 2815 2816/* Common header for PMTT subtables that follow main table */ 2817 2818typedef struct acpi_pmtt_header 2819{ 2820 UINT8 Type; 2821 UINT8 Reserved1; 2822 UINT16 Length; 2823 UINT16 Flags; 2824 UINT16 Reserved2; 2825 UINT32 MemoryDeviceCount; /* Zero means no memory device structs follow */ 2826 /* 2827 * Immediately followed by: 2828 * UINT8 TypeSpecificData[] 2829 * MEMORY_DEVICE MemoryDeviceStruct[MemoryDeviceCount]; 2830 */ 2831 2832} ACPI_PMTT_HEADER; 2833 2834/* Values for Type field above */ 2835 2836#define ACPI_PMTT_TYPE_SOCKET 0 2837#define ACPI_PMTT_TYPE_CONTROLLER 1 2838#define ACPI_PMTT_TYPE_DIMM 2 2839#define ACPI_PMTT_TYPE_RESERVED 3 /* 0x03-0xFE are reserved */ 2840#define ACPI_PMTT_TYPE_VENDOR 0xFF 2841 2842/* Values for Flags field above */ 2843 2844#define ACPI_PMTT_TOP_LEVEL 0x0001 2845#define ACPI_PMTT_PHYSICAL 0x0002 2846#define ACPI_PMTT_MEMORY_TYPE 0x000C 2847 2848 2849/* 2850 * PMTT subtables, correspond to Type in acpi_pmtt_header 2851 */ 2852 2853 2854/* 0: Socket Structure */ 2855 2856typedef struct acpi_pmtt_socket 2857{ 2858 ACPI_PMTT_HEADER Header; 2859 UINT16 SocketId; 2860 UINT16 Reserved; 2861 2862} ACPI_PMTT_SOCKET; 2863 /* 2864 * Immediately followed by: 2865 * MEMORY_DEVICE MemoryDeviceStruct[MemoryDeviceCount]; 2866 */ 2867 2868 2869/* 1: Memory Controller subtable */ 2870 2871typedef struct acpi_pmtt_controller 2872{ 2873 ACPI_PMTT_HEADER Header; 2874 UINT16 ControllerId; 2875 UINT16 Reserved; 2876 2877} ACPI_PMTT_CONTROLLER; 2878 /* 2879 * Immediately followed by: 2880 * MEMORY_DEVICE MemoryDeviceStruct[MemoryDeviceCount]; 2881 */ 2882 2883 2884/* 2: Physical Component Identifier (DIMM) */ 2885 2886typedef struct acpi_pmtt_physical_component 2887{ 2888 ACPI_PMTT_HEADER Header; 2889 UINT32 BiosHandle; 2890 2891} ACPI_PMTT_PHYSICAL_COMPONENT; 2892 2893 2894/* 0xFF: Vendor Specific Data */ 2895 2896typedef struct acpi_pmtt_vendor_specific 2897{ 2898 ACPI_PMTT_HEADER Header; 2899 UINT8 TypeUuid[16]; 2900 UINT8 Specific[]; 2901 /* 2902 * Immediately followed by: 2903 * UINT8 VendorSpecificData[]; 2904 * MEMORY_DEVICE MemoryDeviceStruct[MemoryDeviceCount]; 2905 */ 2906 2907} ACPI_PMTT_VENDOR_SPECIFIC; 2908 2909 2910/******************************************************************************* 2911 * 2912 * PPTT - Processor Properties Topology Table (ACPI 6.2) 2913 * Version 1 2914 * 2915 ******************************************************************************/ 2916 2917typedef struct acpi_table_pptt 2918{ 2919 ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 2920 2921} ACPI_TABLE_PPTT; 2922 2923/* Values for Type field above */ 2924 2925enum AcpiPpttType 2926{ 2927 ACPI_PPTT_TYPE_PROCESSOR = 0, 2928 ACPI_PPTT_TYPE_CACHE = 1, 2929 ACPI_PPTT_TYPE_ID = 2, 2930 ACPI_PPTT_TYPE_RESERVED = 3 2931}; 2932 2933 2934/* 0: Processor Hierarchy Node Structure */ 2935 2936typedef struct acpi_pptt_processor 2937{ 2938 ACPI_SUBTABLE_HEADER Header; 2939 UINT16 Reserved; 2940 UINT32 Flags; 2941 UINT32 Parent; 2942 UINT32 AcpiProcessorId; 2943 UINT32 NumberOfPrivResources; 2944 2945} ACPI_PPTT_PROCESSOR; 2946 2947/* Flags */ 2948 2949#define ACPI_PPTT_PHYSICAL_PACKAGE (1) 2950#define ACPI_PPTT_ACPI_PROCESSOR_ID_VALID (1<<1) 2951#define ACPI_PPTT_ACPI_PROCESSOR_IS_THREAD (1<<2) /* ACPI 6.3 */ 2952#define ACPI_PPTT_ACPI_LEAF_NODE (1<<3) /* ACPI 6.3 */ 2953#define ACPI_PPTT_ACPI_IDENTICAL (1<<4) /* ACPI 6.3 */ 2954 2955 2956/* 1: Cache Type Structure */ 2957 2958typedef struct acpi_pptt_cache 2959{ 2960 ACPI_SUBTABLE_HEADER Header; 2961 UINT16 Reserved; 2962 UINT32 Flags; 2963 UINT32 NextLevelOfCache; 2964 UINT32 Size; 2965 UINT32 NumberOfSets; 2966 UINT8 Associativity; 2967 UINT8 Attributes; 2968 UINT16 LineSize; 2969 2970} ACPI_PPTT_CACHE; 2971 2972/* 1: Cache Type Structure for PPTT version 3 */ 2973 2974typedef struct acpi_pptt_cache_v1 2975{ 2976 UINT32 CacheId; 2977 2978} ACPI_PPTT_CACHE_V1; 2979 2980 2981/* Flags */ 2982 2983#define ACPI_PPTT_SIZE_PROPERTY_VALID (1) /* Physical property valid */ 2984#define ACPI_PPTT_NUMBER_OF_SETS_VALID (1<<1) /* Number of sets valid */ 2985#define ACPI_PPTT_ASSOCIATIVITY_VALID (1<<2) /* Associativity valid */ 2986#define ACPI_PPTT_ALLOCATION_TYPE_VALID (1<<3) /* Allocation type valid */ 2987#define ACPI_PPTT_CACHE_TYPE_VALID (1<<4) /* Cache type valid */ 2988#define ACPI_PPTT_WRITE_POLICY_VALID (1<<5) /* Write policy valid */ 2989#define ACPI_PPTT_LINE_SIZE_VALID (1<<6) /* Line size valid */ 2990#define ACPI_PPTT_CACHE_ID_VALID (1<<7) /* Cache ID valid */ 2991 2992/* Masks for Attributes */ 2993 2994#define ACPI_PPTT_MASK_ALLOCATION_TYPE (0x03) /* Allocation type */ 2995#define ACPI_PPTT_MASK_CACHE_TYPE (0x0C) /* Cache type */ 2996#define ACPI_PPTT_MASK_WRITE_POLICY (0x10) /* Write policy */ 2997 2998/* Attributes describing cache */ 2999#define ACPI_PPTT_CACHE_READ_ALLOCATE (0x0) /* Cache line is allocated on read */ 3000#define ACPI_PPTT_CACHE_WRITE_ALLOCATE (0x01) /* Cache line is allocated on write */ 3001#define ACPI_PPTT_CACHE_RW_ALLOCATE (0x02) /* Cache line is allocated on read and write */ 3002#define ACPI_PPTT_CACHE_RW_ALLOCATE_ALT (0x03) /* Alternate representation of above */ 3003 3004#define ACPI_PPTT_CACHE_TYPE_DATA (0x0) /* Data cache */ 3005#define ACPI_PPTT_CACHE_TYPE_INSTR (1<<2) /* Instruction cache */ 3006#define ACPI_PPTT_CACHE_TYPE_UNIFIED (2<<2) /* Unified I & D cache */ 3007#define ACPI_PPTT_CACHE_TYPE_UNIFIED_ALT (3<<2) /* Alternate representation of above */ 3008 3009#define ACPI_PPTT_CACHE_POLICY_WB (0x0) /* Cache is write back */ 3010#define ACPI_PPTT_CACHE_POLICY_WT (1<<4) /* Cache is write through */ 3011 3012/* 2: ID Structure */ 3013 3014typedef struct acpi_pptt_id 3015{ 3016 ACPI_SUBTABLE_HEADER Header; 3017 UINT16 Reserved; 3018 UINT32 VendorId; 3019 UINT64 Level1Id; 3020 UINT64 Level2Id; 3021 UINT16 MajorRev; 3022 UINT16 MinorRev; 3023 UINT16 SpinRev; 3024 3025} ACPI_PPTT_ID; 3026 3027 3028/******************************************************************************* 3029 * 3030 * PRMT - Platform Runtime Mechanism Table 3031 * Version 1 3032 * 3033 ******************************************************************************/ 3034 3035typedef struct acpi_table_prmt 3036{ 3037 ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 3038 3039} ACPI_TABLE_PRMT; 3040 3041typedef struct acpi_table_prmt_header 3042{ 3043 UINT8 PlatformGuid[16]; 3044 UINT32 ModuleInfoOffset; 3045 UINT32 ModuleInfoCount; 3046 3047} ACPI_TABLE_PRMT_HEADER; 3048 3049typedef struct acpi_prmt_module_header 3050{ 3051 UINT16 Revision; 3052 UINT16 Length; 3053 3054} ACPI_PRMT_MODULE_HEADER; 3055 3056typedef struct acpi_prmt_module_info 3057{ 3058 UINT16 Revision; 3059 UINT16 Length; 3060 UINT8 ModuleGuid[16]; 3061 UINT16 MajorRev; 3062 UINT16 MinorRev; 3063 UINT16 HandlerInfoCount; 3064 UINT32 HandlerInfoOffset; 3065 UINT64 MmioListPointer; 3066 3067} ACPI_PRMT_MODULE_INFO; 3068 3069typedef struct acpi_prmt_handler_info 3070{ 3071 UINT16 Revision; 3072 UINT16 Length; 3073 UINT8 HandlerGuid[16]; 3074 UINT64 HandlerAddress; 3075 UINT64 StaticDataBufferAddress; 3076 UINT64 AcpiParamBufferAddress; 3077 3078} ACPI_PRMT_HANDLER_INFO; 3079 3080 3081/******************************************************************************* 3082 * 3083 * RASF - RAS Feature Table (ACPI 5.0) 3084 * Version 1 3085 * 3086 ******************************************************************************/ 3087 3088typedef struct acpi_table_rasf 3089{ 3090 ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 3091 UINT8 ChannelId[12]; 3092 3093} ACPI_TABLE_RASF; 3094 3095/* RASF Platform Communication Channel Shared Memory Region */ 3096 3097typedef struct acpi_rasf_shared_memory 3098{ 3099 UINT32 Signature; 3100 UINT16 Command; 3101 UINT16 Status; 3102 UINT16 Version; 3103 UINT8 Capabilities[16]; 3104 UINT8 SetCapabilities[16]; 3105 UINT16 NumParameterBlocks; 3106 UINT32 SetCapabilitiesStatus; 3107 3108} ACPI_RASF_SHARED_MEMORY; 3109 3110/* RASF Parameter Block Structure Header */ 3111 3112typedef struct acpi_rasf_parameter_block 3113{ 3114 UINT16 Type; 3115 UINT16 Version; 3116 UINT16 Length; 3117 3118} ACPI_RASF_PARAMETER_BLOCK; 3119 3120/* RASF Parameter Block Structure for PATROL_SCRUB */ 3121 3122typedef struct acpi_rasf_patrol_scrub_parameter 3123{ 3124 ACPI_RASF_PARAMETER_BLOCK Header; 3125 UINT16 PatrolScrubCommand; 3126 UINT64 RequestedAddressRange[2]; 3127 UINT64 ActualAddressRange[2]; 3128 UINT16 Flags; 3129 UINT8 RequestedSpeed; 3130 3131} ACPI_RASF_PATROL_SCRUB_PARAMETER; 3132 3133/* Masks for Flags and Speed fields above */ 3134 3135#define ACPI_RASF_SCRUBBER_RUNNING 1 3136#define ACPI_RASF_SPEED (7<<1) 3137#define ACPI_RASF_SPEED_SLOW (0<<1) 3138#define ACPI_RASF_SPEED_MEDIUM (4<<1) 3139#define ACPI_RASF_SPEED_FAST (7<<1) 3140 3141/* Channel Commands */ 3142 3143enum AcpiRasfCommands 3144{ 3145 ACPI_RASF_EXECUTE_RASF_COMMAND = 1 3146}; 3147 3148/* Platform RAS Capabilities */ 3149 3150enum AcpiRasfCapabiliities 3151{ 3152 ACPI_HW_PATROL_SCRUB_SUPPORTED = 0, 3153 ACPI_SW_PATROL_SCRUB_EXPOSED = 1 3154}; 3155 3156/* Patrol Scrub Commands */ 3157 3158enum AcpiRasfPatrolScrubCommands 3159{ 3160 ACPI_RASF_GET_PATROL_PARAMETERS = 1, 3161 ACPI_RASF_START_PATROL_SCRUBBER = 2, 3162 ACPI_RASF_STOP_PATROL_SCRUBBER = 3 3163}; 3164 3165/* Channel Command flags */ 3166 3167#define ACPI_RASF_GENERATE_SCI (1<<15) 3168 3169/* Status values */ 3170 3171enum AcpiRasfStatus 3172{ 3173 ACPI_RASF_SUCCESS = 0, 3174 ACPI_RASF_NOT_VALID = 1, 3175 ACPI_RASF_NOT_SUPPORTED = 2, 3176 ACPI_RASF_BUSY = 3, 3177 ACPI_RASF_FAILED = 4, 3178 ACPI_RASF_ABORTED = 5, 3179 ACPI_RASF_INVALID_DATA = 6 3180}; 3181 3182/* Status flags */ 3183 3184#define ACPI_RASF_COMMAND_COMPLETE (1) 3185#define ACPI_RASF_SCI_DOORBELL (1<<1) 3186#define ACPI_RASF_ERROR (1<<2) 3187#define ACPI_RASF_STATUS (0x1F<<3) 3188 3189 3190/******************************************************************************* 3191 * 3192 * RGRT - Regulatory Graphics Resource Table 3193 * Version 1 3194 * 3195 * Conforms to "ACPI RGRT" available at: 3196 * https://microsoft.github.io/mu/dyn/mu_plus/MsCorePkg/AcpiRGRT/feature_acpi_rgrt/ 3197 * 3198 ******************************************************************************/ 3199 3200typedef struct acpi_table_rgrt 3201{ 3202 ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 3203 UINT16 Version; 3204 UINT8 ImageType; 3205 UINT8 Reserved; 3206 UINT8 Image[]; 3207 3208} ACPI_TABLE_RGRT; 3209 3210/* ImageType values */ 3211 3212enum AcpiRgrtImageType 3213{ 3214 ACPI_RGRT_TYPE_RESERVED0 = 0, 3215 ACPI_RGRT_IMAGE_TYPE_PNG = 1, 3216 ACPI_RGRT_TYPE_RESERVED = 2 /* 2 and greater are reserved */ 3217}; 3218 3219 3220/******************************************************************************* 3221 * 3222 * RHCT - RISC-V Hart Capabilities Table 3223 * Version 1 3224 * 3225 ******************************************************************************/ 3226 3227typedef struct acpi_table_rhct { 3228 ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 3229 UINT32 Flags; /* RHCT flags */ 3230 UINT64 TimeBaseFreq; 3231 UINT32 NodeCount; 3232 UINT32 NodeOffset; 3233} ACPI_TABLE_RHCT; 3234 3235/* RHCT Flags */ 3236 3237#define ACPI_RHCT_TIMER_CANNOT_WAKEUP_CPU (1) 3238/* 3239 * RHCT subtables 3240 */ 3241typedef struct acpi_rhct_node_header { 3242 UINT16 Type; 3243 UINT16 Length; 3244 UINT16 Revision; 3245} ACPI_RHCT_NODE_HEADER; 3246 3247/* Values for RHCT subtable Type above */ 3248 3249enum acpi_rhct_node_type { 3250 ACPI_RHCT_NODE_TYPE_ISA_STRING = 0x0000, 3251 ACPI_RHCT_NODE_TYPE_CMO = 0x0001, 3252 ACPI_RHCT_NODE_TYPE_MMU = 0x0002, 3253 ACPI_RHCT_NODE_TYPE_RESERVED = 0x0003, 3254 ACPI_RHCT_NODE_TYPE_HART_INFO = 0xFFFF, 3255}; 3256 3257/* 3258 * RHCT node specific subtables 3259 */ 3260 3261/* ISA string node structure */ 3262typedef struct acpi_rhct_isa_string { 3263 UINT16 IsaLength; 3264 char Isa[]; 3265} ACPI_RHCT_ISA_STRING; 3266 3267typedef struct acpi_rhct_cmo_node { 3268 UINT8 Reserved; /* Must be zero */ 3269 UINT8 CbomSize; /* CBOM size in powerof 2 */ 3270 UINT8 CbopSize; /* CBOP size in powerof 2 */ 3271 UINT8 CbozSize; /* CBOZ size in powerof 2 */ 3272} ACPI_RHCT_CMO_NODE; 3273 3274typedef struct acpi_rhct_mmu_node { 3275 UINT8 Reserved; /* Must be zero */ 3276 UINT8 MmuType; /* Virtual Address Scheme */ 3277} ACPI_RHCT_MMU_NODE; 3278 3279enum acpi_rhct_mmu_type { 3280 ACPI_RHCT_MMU_TYPE_SV39 = 0, 3281 ACPI_RHCT_MMU_TYPE_SV48 = 1, 3282 ACPI_RHCT_MMU_TYPE_SV57 = 2 3283}; 3284 3285/* Hart Info node structure */ 3286typedef struct acpi_rhct_hart_info { 3287 UINT16 NumOffsets; 3288 UINT32 Uid; /* ACPI processor UID */ 3289} ACPI_RHCT_HART_INFO; 3290 3291/******************************************************************************* 3292 * 3293 * SBST - Smart Battery Specification Table 3294 * Version 1 3295 * 3296 ******************************************************************************/ 3297 3298typedef struct acpi_table_sbst 3299{ 3300 ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 3301 UINT32 WarningLevel; 3302 UINT32 LowLevel; 3303 UINT32 CriticalLevel; 3304 3305} ACPI_TABLE_SBST; 3306 3307 3308/******************************************************************************* 3309 * 3310 * SDEI - Software Delegated Exception Interface Descriptor Table 3311 * 3312 * Conforms to "Software Delegated Exception Interface (SDEI)" ARM DEN0054A, 3313 * May 8th, 2017. Copyright 2017 ARM Ltd. 3314 * 3315 ******************************************************************************/ 3316 3317typedef struct acpi_table_sdei 3318{ 3319 ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 3320 3321} ACPI_TABLE_SDEI; 3322 3323 3324/******************************************************************************* 3325 * 3326 * SDEV - Secure Devices Table (ACPI 6.2) 3327 * Version 1 3328 * 3329 ******************************************************************************/ 3330 3331typedef struct acpi_table_sdev 3332{ 3333 ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 3334 3335} ACPI_TABLE_SDEV; 3336 3337 3338typedef struct acpi_sdev_header 3339{ 3340 UINT8 Type; 3341 UINT8 Flags; 3342 UINT16 Length; 3343 3344} ACPI_SDEV_HEADER; 3345 3346 3347/* Values for subtable type above */ 3348 3349enum AcpiSdevType 3350{ 3351 ACPI_SDEV_TYPE_NAMESPACE_DEVICE = 0, 3352 ACPI_SDEV_TYPE_PCIE_ENDPOINT_DEVICE = 1, 3353 ACPI_SDEV_TYPE_RESERVED = 2 /* 2 and greater are reserved */ 3354}; 3355 3356/* Values for flags above */ 3357 3358#define ACPI_SDEV_HANDOFF_TO_UNSECURE_OS (1) 3359#define ACPI_SDEV_SECURE_COMPONENTS_PRESENT (1<<1) 3360 3361/* 3362 * SDEV subtables 3363 */ 3364 3365/* 0: Namespace Device Based Secure Device Structure */ 3366 3367typedef struct acpi_sdev_namespace 3368{ 3369 ACPI_SDEV_HEADER Header; 3370 UINT16 DeviceIdOffset; 3371 UINT16 DeviceIdLength; 3372 UINT16 VendorDataOffset; 3373 UINT16 VendorDataLength; 3374 3375} ACPI_SDEV_NAMESPACE; 3376 3377typedef struct acpi_sdev_secure_component 3378{ 3379 UINT16 SecureComponentOffset; 3380 UINT16 SecureComponentLength; 3381 3382} ACPI_SDEV_SECURE_COMPONENT; 3383 3384 3385/* 3386 * SDEV sub-subtables ("Components") for above 3387 */ 3388typedef struct acpi_sdev_component 3389{ 3390 ACPI_SDEV_HEADER Header; 3391 3392} ACPI_SDEV_COMPONENT; 3393 3394 3395/* Values for sub-subtable type above */ 3396 3397enum AcpiSacType 3398{ 3399 ACPI_SDEV_TYPE_ID_COMPONENT = 0, 3400 ACPI_SDEV_TYPE_MEM_COMPONENT = 1 3401}; 3402 3403typedef struct acpi_sdev_id_component 3404{ 3405 ACPI_SDEV_HEADER Header; 3406 UINT16 HardwareIdOffset; 3407 UINT16 HardwareIdLength; 3408 UINT16 SubsystemIdOffset; 3409 UINT16 SubsystemIdLength; 3410 UINT16 HardwareRevision; 3411 UINT8 HardwareRevPresent; 3412 UINT8 ClassCodePresent; 3413 UINT8 PciBaseClass; 3414 UINT8 PciSubClass; 3415 UINT8 PciProgrammingXface; 3416 3417} ACPI_SDEV_ID_COMPONENT; 3418 3419typedef struct acpi_sdev_mem_component 3420{ 3421 ACPI_SDEV_HEADER Header; 3422 UINT32 Reserved; 3423 UINT64 MemoryBaseAddress; 3424 UINT64 MemoryLength; 3425 3426} ACPI_SDEV_MEM_COMPONENT; 3427 3428 3429/* 1: PCIe Endpoint Device Based Device Structure */ 3430 3431typedef struct acpi_sdev_pcie 3432{ 3433 ACPI_SDEV_HEADER Header; 3434 UINT16 Segment; 3435 UINT16 StartBus; 3436 UINT16 PathOffset; 3437 UINT16 PathLength; 3438 UINT16 VendorDataOffset; 3439 UINT16 VendorDataLength; 3440 3441} ACPI_SDEV_PCIE; 3442 3443/* 1a: PCIe Endpoint path entry */ 3444 3445typedef struct acpi_sdev_pcie_path 3446{ 3447 UINT8 Device; 3448 UINT8 Function; 3449 3450} ACPI_SDEV_PCIE_PATH; 3451 3452 3453/******************************************************************************* 3454 * 3455 * SVKL - Storage Volume Key Location Table (ACPI 6.4) 3456 * From: "Guest-Host-Communication Interface (GHCI) for Intel 3457 * Trust Domain Extensions (Intel TDX)". 3458 * Version 1 3459 * 3460 ******************************************************************************/ 3461 3462typedef struct acpi_table_svkl 3463{ 3464 ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 3465 UINT32 Count; 3466 3467} ACPI_TABLE_SVKL; 3468 3469typedef struct acpi_svkl_key 3470{ 3471 UINT16 Type; 3472 UINT16 Format; 3473 UINT32 Size; 3474 UINT64 Address; 3475 3476} ACPI_SVKL_KEY; 3477 3478enum acpi_svkl_type 3479{ 3480 ACPI_SVKL_TYPE_MAIN_STORAGE = 0, 3481 ACPI_SVKL_TYPE_RESERVED = 1 /* 1 and greater are reserved */ 3482}; 3483 3484enum acpi_svkl_format 3485{ 3486 ACPI_SVKL_FORMAT_RAW_BINARY = 0, 3487 ACPI_SVKL_FORMAT_RESERVED = 1 /* 1 and greater are reserved */ 3488}; 3489 3490 3491/******************************************************************************* 3492 * 3493 * TDEL - TD-Event Log 3494 * From: "Guest-Host-Communication Interface (GHCI) for Intel 3495 * Trust Domain Extensions (Intel TDX)". 3496 * September 2020 3497 * 3498 ******************************************************************************/ 3499 3500typedef struct acpi_table_tdel 3501{ 3502 ACPI_TABLE_HEADER Header; /* Common ACPI table header */ 3503 UINT32 Reserved; 3504 UINT64 LogAreaMinimumLength; 3505 UINT64 LogAreaStartAddress; 3506 3507} ACPI_TABLE_TDEL; 3508 3509/* Reset to default packing */ 3510 3511#pragma pack() 3512 3513#endif /* __ACTBL2_H__ */ 3514