162306a36Sopenharmony_ci/* SPDX-License-Identifier: BSD-3-Clause OR GPL-2.0 */ 262306a36Sopenharmony_ci/****************************************************************************** 362306a36Sopenharmony_ci * 462306a36Sopenharmony_ci * Name: actbl2.h - ACPI Table Definitions (tables not in ACPI spec) 562306a36Sopenharmony_ci * 662306a36Sopenharmony_ci * Copyright (C) 2000 - 2023, Intel Corp. 762306a36Sopenharmony_ci * 862306a36Sopenharmony_ci *****************************************************************************/ 962306a36Sopenharmony_ci 1062306a36Sopenharmony_ci#ifndef __ACTBL2_H__ 1162306a36Sopenharmony_ci#define __ACTBL2_H__ 1262306a36Sopenharmony_ci 1362306a36Sopenharmony_ci/******************************************************************************* 1462306a36Sopenharmony_ci * 1562306a36Sopenharmony_ci * Additional ACPI Tables (2) 1662306a36Sopenharmony_ci * 1762306a36Sopenharmony_ci * These tables are not consumed directly by the ACPICA subsystem, but are 1862306a36Sopenharmony_ci * included here to support device drivers and the AML disassembler. 1962306a36Sopenharmony_ci * 2062306a36Sopenharmony_ci ******************************************************************************/ 2162306a36Sopenharmony_ci 2262306a36Sopenharmony_ci/* 2362306a36Sopenharmony_ci * Values for description table header signatures for tables defined in this 2462306a36Sopenharmony_ci * file. Useful because they make it more difficult to inadvertently type in 2562306a36Sopenharmony_ci * the wrong signature. 2662306a36Sopenharmony_ci */ 2762306a36Sopenharmony_ci#define ACPI_SIG_AGDI "AGDI" /* Arm Generic Diagnostic Dump and Reset Device Interface */ 2862306a36Sopenharmony_ci#define ACPI_SIG_APMT "APMT" /* Arm Performance Monitoring Unit table */ 2962306a36Sopenharmony_ci#define ACPI_SIG_BDAT "BDAT" /* BIOS Data ACPI Table */ 3062306a36Sopenharmony_ci#define ACPI_SIG_CCEL "CCEL" /* CC Event Log Table */ 3162306a36Sopenharmony_ci#define ACPI_SIG_CDAT "CDAT" /* Coherent Device Attribute Table */ 3262306a36Sopenharmony_ci#define ACPI_SIG_IORT "IORT" /* IO Remapping Table */ 3362306a36Sopenharmony_ci#define ACPI_SIG_IVRS "IVRS" /* I/O Virtualization Reporting Structure */ 3462306a36Sopenharmony_ci#define ACPI_SIG_LPIT "LPIT" /* Low Power Idle Table */ 3562306a36Sopenharmony_ci#define ACPI_SIG_MADT "APIC" /* Multiple APIC Description Table */ 3662306a36Sopenharmony_ci#define ACPI_SIG_MCFG "MCFG" /* PCI Memory Mapped Configuration table */ 3762306a36Sopenharmony_ci#define ACPI_SIG_MCHI "MCHI" /* Management Controller Host Interface table */ 3862306a36Sopenharmony_ci#define ACPI_SIG_MPAM "MPAM" /* Memory System Resource Partitioning and Monitoring Table */ 3962306a36Sopenharmony_ci#define ACPI_SIG_MPST "MPST" /* Memory Power State Table */ 4062306a36Sopenharmony_ci#define ACPI_SIG_MSDM "MSDM" /* Microsoft Data Management Table */ 4162306a36Sopenharmony_ci#define ACPI_SIG_NFIT "NFIT" /* NVDIMM Firmware Interface Table */ 4262306a36Sopenharmony_ci#define ACPI_SIG_NHLT "NHLT" /* Non HD Audio Link Table */ 4362306a36Sopenharmony_ci#define ACPI_SIG_PCCT "PCCT" /* Platform Communications Channel Table */ 4462306a36Sopenharmony_ci#define ACPI_SIG_PDTT "PDTT" /* Platform Debug Trigger Table */ 4562306a36Sopenharmony_ci#define ACPI_SIG_PHAT "PHAT" /* Platform Health Assessment Table */ 4662306a36Sopenharmony_ci#define ACPI_SIG_PMTT "PMTT" /* Platform Memory Topology Table */ 4762306a36Sopenharmony_ci#define ACPI_SIG_PPTT "PPTT" /* Processor Properties Topology Table */ 4862306a36Sopenharmony_ci#define ACPI_SIG_PRMT "PRMT" /* Platform Runtime Mechanism Table */ 4962306a36Sopenharmony_ci#define ACPI_SIG_RASF "RASF" /* RAS Feature table */ 5062306a36Sopenharmony_ci#define ACPI_SIG_RGRT "RGRT" /* Regulatory Graphics Resource Table */ 5162306a36Sopenharmony_ci#define ACPI_SIG_RHCT "RHCT" /* RISC-V Hart Capabilities Table */ 5262306a36Sopenharmony_ci#define ACPI_SIG_SBST "SBST" /* Smart Battery Specification Table */ 5362306a36Sopenharmony_ci#define ACPI_SIG_SDEI "SDEI" /* Software Delegated Exception Interface Table */ 5462306a36Sopenharmony_ci#define ACPI_SIG_SDEV "SDEV" /* Secure Devices table */ 5562306a36Sopenharmony_ci#define ACPI_SIG_SVKL "SVKL" /* Storage Volume Key Location Table */ 5662306a36Sopenharmony_ci#define ACPI_SIG_TDEL "TDEL" /* TD Event Log Table */ 5762306a36Sopenharmony_ci 5862306a36Sopenharmony_ci/* 5962306a36Sopenharmony_ci * All tables must be byte-packed to match the ACPI specification, since 6062306a36Sopenharmony_ci * the tables are provided by the system BIOS. 6162306a36Sopenharmony_ci */ 6262306a36Sopenharmony_ci#pragma pack(1) 6362306a36Sopenharmony_ci 6462306a36Sopenharmony_ci/* 6562306a36Sopenharmony_ci * Note: C bitfields are not used for this reason: 6662306a36Sopenharmony_ci * 6762306a36Sopenharmony_ci * "Bitfields are great and easy to read, but unfortunately the C language 6862306a36Sopenharmony_ci * does not specify the layout of bitfields in memory, which means they are 6962306a36Sopenharmony_ci * essentially useless for dealing with packed data in on-disk formats or 7062306a36Sopenharmony_ci * binary wire protocols." (Or ACPI tables and buffers.) "If you ask me, 7162306a36Sopenharmony_ci * this decision was a design error in C. Ritchie could have picked an order 7262306a36Sopenharmony_ci * and stuck with it." Norman Ramsey. 7362306a36Sopenharmony_ci * See http://stackoverflow.com/a/1053662/41661 7462306a36Sopenharmony_ci */ 7562306a36Sopenharmony_ci 7662306a36Sopenharmony_ci/******************************************************************************* 7762306a36Sopenharmony_ci * 7862306a36Sopenharmony_ci * AEST - Arm Error Source Table 7962306a36Sopenharmony_ci * 8062306a36Sopenharmony_ci * Conforms to: ACPI for the Armv8 RAS Extensions 1.1 Platform Design Document 8162306a36Sopenharmony_ci * September 2020. 8262306a36Sopenharmony_ci * 8362306a36Sopenharmony_ci ******************************************************************************/ 8462306a36Sopenharmony_ci 8562306a36Sopenharmony_cistruct acpi_table_aest { 8662306a36Sopenharmony_ci struct acpi_table_header header; 8762306a36Sopenharmony_ci}; 8862306a36Sopenharmony_ci 8962306a36Sopenharmony_ci/* Common Subtable header - one per Node Structure (Subtable) */ 9062306a36Sopenharmony_ci 9162306a36Sopenharmony_cistruct acpi_aest_hdr { 9262306a36Sopenharmony_ci u8 type; 9362306a36Sopenharmony_ci u16 length; 9462306a36Sopenharmony_ci u8 reserved; 9562306a36Sopenharmony_ci u32 node_specific_offset; 9662306a36Sopenharmony_ci u32 node_interface_offset; 9762306a36Sopenharmony_ci u32 node_interrupt_offset; 9862306a36Sopenharmony_ci u32 node_interrupt_count; 9962306a36Sopenharmony_ci u64 timestamp_rate; 10062306a36Sopenharmony_ci u64 reserved1; 10162306a36Sopenharmony_ci u64 error_injection_rate; 10262306a36Sopenharmony_ci}; 10362306a36Sopenharmony_ci 10462306a36Sopenharmony_ci/* Values for Type above */ 10562306a36Sopenharmony_ci 10662306a36Sopenharmony_ci#define ACPI_AEST_PROCESSOR_ERROR_NODE 0 10762306a36Sopenharmony_ci#define ACPI_AEST_MEMORY_ERROR_NODE 1 10862306a36Sopenharmony_ci#define ACPI_AEST_SMMU_ERROR_NODE 2 10962306a36Sopenharmony_ci#define ACPI_AEST_VENDOR_ERROR_NODE 3 11062306a36Sopenharmony_ci#define ACPI_AEST_GIC_ERROR_NODE 4 11162306a36Sopenharmony_ci#define ACPI_AEST_NODE_TYPE_RESERVED 5 /* 5 and above are reserved */ 11262306a36Sopenharmony_ci 11362306a36Sopenharmony_ci/* 11462306a36Sopenharmony_ci * AEST subtables (Error nodes) 11562306a36Sopenharmony_ci */ 11662306a36Sopenharmony_ci 11762306a36Sopenharmony_ci/* 0: Processor Error */ 11862306a36Sopenharmony_ci 11962306a36Sopenharmony_citypedef struct acpi_aest_processor { 12062306a36Sopenharmony_ci u32 processor_id; 12162306a36Sopenharmony_ci u8 resource_type; 12262306a36Sopenharmony_ci u8 reserved; 12362306a36Sopenharmony_ci u8 flags; 12462306a36Sopenharmony_ci u8 revision; 12562306a36Sopenharmony_ci u64 processor_affinity; 12662306a36Sopenharmony_ci 12762306a36Sopenharmony_ci} acpi_aest_processor; 12862306a36Sopenharmony_ci 12962306a36Sopenharmony_ci/* Values for resource_type above, related structs below */ 13062306a36Sopenharmony_ci 13162306a36Sopenharmony_ci#define ACPI_AEST_CACHE_RESOURCE 0 13262306a36Sopenharmony_ci#define ACPI_AEST_TLB_RESOURCE 1 13362306a36Sopenharmony_ci#define ACPI_AEST_GENERIC_RESOURCE 2 13462306a36Sopenharmony_ci#define ACPI_AEST_RESOURCE_RESERVED 3 /* 3 and above are reserved */ 13562306a36Sopenharmony_ci 13662306a36Sopenharmony_ci/* 0R: Processor Cache Resource Substructure */ 13762306a36Sopenharmony_ci 13862306a36Sopenharmony_citypedef struct acpi_aest_processor_cache { 13962306a36Sopenharmony_ci u32 cache_reference; 14062306a36Sopenharmony_ci u32 reserved; 14162306a36Sopenharmony_ci 14262306a36Sopenharmony_ci} acpi_aest_processor_cache; 14362306a36Sopenharmony_ci 14462306a36Sopenharmony_ci/* Values for cache_type above */ 14562306a36Sopenharmony_ci 14662306a36Sopenharmony_ci#define ACPI_AEST_CACHE_DATA 0 14762306a36Sopenharmony_ci#define ACPI_AEST_CACHE_INSTRUCTION 1 14862306a36Sopenharmony_ci#define ACPI_AEST_CACHE_UNIFIED 2 14962306a36Sopenharmony_ci#define ACPI_AEST_CACHE_RESERVED 3 /* 3 and above are reserved */ 15062306a36Sopenharmony_ci 15162306a36Sopenharmony_ci/* 1R: Processor TLB Resource Substructure */ 15262306a36Sopenharmony_ci 15362306a36Sopenharmony_citypedef struct acpi_aest_processor_tlb { 15462306a36Sopenharmony_ci u32 tlb_level; 15562306a36Sopenharmony_ci u32 reserved; 15662306a36Sopenharmony_ci 15762306a36Sopenharmony_ci} acpi_aest_processor_tlb; 15862306a36Sopenharmony_ci 15962306a36Sopenharmony_ci/* 2R: Processor Generic Resource Substructure */ 16062306a36Sopenharmony_ci 16162306a36Sopenharmony_citypedef struct acpi_aest_processor_generic { 16262306a36Sopenharmony_ci u32 resource; 16362306a36Sopenharmony_ci 16462306a36Sopenharmony_ci} acpi_aest_processor_generic; 16562306a36Sopenharmony_ci 16662306a36Sopenharmony_ci/* 1: Memory Error */ 16762306a36Sopenharmony_ci 16862306a36Sopenharmony_citypedef struct acpi_aest_memory { 16962306a36Sopenharmony_ci u32 srat_proximity_domain; 17062306a36Sopenharmony_ci 17162306a36Sopenharmony_ci} acpi_aest_memory; 17262306a36Sopenharmony_ci 17362306a36Sopenharmony_ci/* 2: Smmu Error */ 17462306a36Sopenharmony_ci 17562306a36Sopenharmony_citypedef struct acpi_aest_smmu { 17662306a36Sopenharmony_ci u32 iort_node_reference; 17762306a36Sopenharmony_ci u32 subcomponent_reference; 17862306a36Sopenharmony_ci 17962306a36Sopenharmony_ci} acpi_aest_smmu; 18062306a36Sopenharmony_ci 18162306a36Sopenharmony_ci/* 3: Vendor Defined */ 18262306a36Sopenharmony_ci 18362306a36Sopenharmony_citypedef struct acpi_aest_vendor { 18462306a36Sopenharmony_ci u32 acpi_hid; 18562306a36Sopenharmony_ci u32 acpi_uid; 18662306a36Sopenharmony_ci u8 vendor_specific_data[16]; 18762306a36Sopenharmony_ci 18862306a36Sopenharmony_ci} acpi_aest_vendor; 18962306a36Sopenharmony_ci 19062306a36Sopenharmony_ci/* 4: Gic Error */ 19162306a36Sopenharmony_ci 19262306a36Sopenharmony_citypedef struct acpi_aest_gic { 19362306a36Sopenharmony_ci u32 interface_type; 19462306a36Sopenharmony_ci u32 instance_id; 19562306a36Sopenharmony_ci 19662306a36Sopenharmony_ci} acpi_aest_gic; 19762306a36Sopenharmony_ci 19862306a36Sopenharmony_ci/* Values for interface_type above */ 19962306a36Sopenharmony_ci 20062306a36Sopenharmony_ci#define ACPI_AEST_GIC_CPU 0 20162306a36Sopenharmony_ci#define ACPI_AEST_GIC_DISTRIBUTOR 1 20262306a36Sopenharmony_ci#define ACPI_AEST_GIC_REDISTRIBUTOR 2 20362306a36Sopenharmony_ci#define ACPI_AEST_GIC_ITS 3 20462306a36Sopenharmony_ci#define ACPI_AEST_GIC_RESERVED 4 /* 4 and above are reserved */ 20562306a36Sopenharmony_ci 20662306a36Sopenharmony_ci/* Node Interface Structure */ 20762306a36Sopenharmony_ci 20862306a36Sopenharmony_citypedef struct acpi_aest_node_interface { 20962306a36Sopenharmony_ci u8 type; 21062306a36Sopenharmony_ci u8 reserved[3]; 21162306a36Sopenharmony_ci u32 flags; 21262306a36Sopenharmony_ci u64 address; 21362306a36Sopenharmony_ci u32 error_record_index; 21462306a36Sopenharmony_ci u32 error_record_count; 21562306a36Sopenharmony_ci u64 error_record_implemented; 21662306a36Sopenharmony_ci u64 error_status_reporting; 21762306a36Sopenharmony_ci u64 addressing_mode; 21862306a36Sopenharmony_ci 21962306a36Sopenharmony_ci} acpi_aest_node_interface; 22062306a36Sopenharmony_ci 22162306a36Sopenharmony_ci/* Values for Type field above */ 22262306a36Sopenharmony_ci 22362306a36Sopenharmony_ci#define ACPI_AEST_NODE_SYSTEM_REGISTER 0 22462306a36Sopenharmony_ci#define ACPI_AEST_NODE_MEMORY_MAPPED 1 22562306a36Sopenharmony_ci#define ACPI_AEST_XFACE_RESERVED 2 /* 2 and above are reserved */ 22662306a36Sopenharmony_ci 22762306a36Sopenharmony_ci/* Node Interrupt Structure */ 22862306a36Sopenharmony_ci 22962306a36Sopenharmony_citypedef struct acpi_aest_node_interrupt { 23062306a36Sopenharmony_ci u8 type; 23162306a36Sopenharmony_ci u8 reserved[2]; 23262306a36Sopenharmony_ci u8 flags; 23362306a36Sopenharmony_ci u32 gsiv; 23462306a36Sopenharmony_ci u8 iort_id; 23562306a36Sopenharmony_ci u8 reserved1[3]; 23662306a36Sopenharmony_ci 23762306a36Sopenharmony_ci} acpi_aest_node_interrupt; 23862306a36Sopenharmony_ci 23962306a36Sopenharmony_ci/* Values for Type field above */ 24062306a36Sopenharmony_ci 24162306a36Sopenharmony_ci#define ACPI_AEST_NODE_FAULT_HANDLING 0 24262306a36Sopenharmony_ci#define ACPI_AEST_NODE_ERROR_RECOVERY 1 24362306a36Sopenharmony_ci#define ACPI_AEST_XRUPT_RESERVED 2 /* 2 and above are reserved */ 24462306a36Sopenharmony_ci 24562306a36Sopenharmony_ci/******************************************************************************* 24662306a36Sopenharmony_ci * AGDI - Arm Generic Diagnostic Dump and Reset Device Interface 24762306a36Sopenharmony_ci * 24862306a36Sopenharmony_ci * Conforms to "ACPI for Arm Components 1.1, Platform Design Document" 24962306a36Sopenharmony_ci * ARM DEN0093 v1.1 25062306a36Sopenharmony_ci * 25162306a36Sopenharmony_ci ******************************************************************************/ 25262306a36Sopenharmony_cistruct acpi_table_agdi { 25362306a36Sopenharmony_ci struct acpi_table_header header; /* Common ACPI table header */ 25462306a36Sopenharmony_ci u8 flags; 25562306a36Sopenharmony_ci u8 reserved[3]; 25662306a36Sopenharmony_ci u32 sdei_event; 25762306a36Sopenharmony_ci u32 gsiv; 25862306a36Sopenharmony_ci}; 25962306a36Sopenharmony_ci 26062306a36Sopenharmony_ci/* Mask for Flags field above */ 26162306a36Sopenharmony_ci 26262306a36Sopenharmony_ci#define ACPI_AGDI_SIGNALING_MODE (1) 26362306a36Sopenharmony_ci 26462306a36Sopenharmony_ci/******************************************************************************* 26562306a36Sopenharmony_ci * 26662306a36Sopenharmony_ci * APMT - ARM Performance Monitoring Unit Table 26762306a36Sopenharmony_ci * 26862306a36Sopenharmony_ci * Conforms to: 26962306a36Sopenharmony_ci * ARM Performance Monitoring Unit Architecture 1.0 Platform Design Document 27062306a36Sopenharmony_ci * ARM DEN0117 v1.0 November 25, 2021 27162306a36Sopenharmony_ci * 27262306a36Sopenharmony_ci ******************************************************************************/ 27362306a36Sopenharmony_ci 27462306a36Sopenharmony_cistruct acpi_table_apmt { 27562306a36Sopenharmony_ci struct acpi_table_header header; /* Common ACPI table header */ 27662306a36Sopenharmony_ci}; 27762306a36Sopenharmony_ci 27862306a36Sopenharmony_ci#define ACPI_APMT_NODE_ID_LENGTH 4 27962306a36Sopenharmony_ci 28062306a36Sopenharmony_ci/* 28162306a36Sopenharmony_ci * APMT subtables 28262306a36Sopenharmony_ci */ 28362306a36Sopenharmony_cistruct acpi_apmt_node { 28462306a36Sopenharmony_ci u16 length; 28562306a36Sopenharmony_ci u8 flags; 28662306a36Sopenharmony_ci u8 type; 28762306a36Sopenharmony_ci u32 id; 28862306a36Sopenharmony_ci u64 inst_primary; 28962306a36Sopenharmony_ci u32 inst_secondary; 29062306a36Sopenharmony_ci u64 base_address0; 29162306a36Sopenharmony_ci u64 base_address1; 29262306a36Sopenharmony_ci u32 ovflw_irq; 29362306a36Sopenharmony_ci u32 reserved; 29462306a36Sopenharmony_ci u32 ovflw_irq_flags; 29562306a36Sopenharmony_ci u32 proc_affinity; 29662306a36Sopenharmony_ci u32 impl_id; 29762306a36Sopenharmony_ci}; 29862306a36Sopenharmony_ci 29962306a36Sopenharmony_ci/* Masks for Flags field above */ 30062306a36Sopenharmony_ci 30162306a36Sopenharmony_ci#define ACPI_APMT_FLAGS_DUAL_PAGE (1<<0) 30262306a36Sopenharmony_ci#define ACPI_APMT_FLAGS_AFFINITY (1<<1) 30362306a36Sopenharmony_ci#define ACPI_APMT_FLAGS_ATOMIC (1<<2) 30462306a36Sopenharmony_ci 30562306a36Sopenharmony_ci/* Values for Flags dual page field above */ 30662306a36Sopenharmony_ci 30762306a36Sopenharmony_ci#define ACPI_APMT_FLAGS_DUAL_PAGE_NSUPP (0<<0) 30862306a36Sopenharmony_ci#define ACPI_APMT_FLAGS_DUAL_PAGE_SUPP (1<<0) 30962306a36Sopenharmony_ci 31062306a36Sopenharmony_ci/* Values for Flags processor affinity field above */ 31162306a36Sopenharmony_ci#define ACPI_APMT_FLAGS_AFFINITY_PROC (0<<1) 31262306a36Sopenharmony_ci#define ACPI_APMT_FLAGS_AFFINITY_PROC_CONTAINER (1<<1) 31362306a36Sopenharmony_ci 31462306a36Sopenharmony_ci/* Values for Flags 64-bit atomic field above */ 31562306a36Sopenharmony_ci#define ACPI_APMT_FLAGS_ATOMIC_NSUPP (0<<2) 31662306a36Sopenharmony_ci#define ACPI_APMT_FLAGS_ATOMIC_SUPP (1<<2) 31762306a36Sopenharmony_ci 31862306a36Sopenharmony_ci/* Values for Type field above */ 31962306a36Sopenharmony_ci 32062306a36Sopenharmony_cienum acpi_apmt_node_type { 32162306a36Sopenharmony_ci ACPI_APMT_NODE_TYPE_MC = 0x00, 32262306a36Sopenharmony_ci ACPI_APMT_NODE_TYPE_SMMU = 0x01, 32362306a36Sopenharmony_ci ACPI_APMT_NODE_TYPE_PCIE_ROOT = 0x02, 32462306a36Sopenharmony_ci ACPI_APMT_NODE_TYPE_ACPI = 0x03, 32562306a36Sopenharmony_ci ACPI_APMT_NODE_TYPE_CACHE = 0x04, 32662306a36Sopenharmony_ci ACPI_APMT_NODE_TYPE_COUNT 32762306a36Sopenharmony_ci}; 32862306a36Sopenharmony_ci 32962306a36Sopenharmony_ci/* Masks for ovflw_irq_flags field above */ 33062306a36Sopenharmony_ci 33162306a36Sopenharmony_ci#define ACPI_APMT_OVFLW_IRQ_FLAGS_MODE (1<<0) 33262306a36Sopenharmony_ci#define ACPI_APMT_OVFLW_IRQ_FLAGS_TYPE (1<<1) 33362306a36Sopenharmony_ci 33462306a36Sopenharmony_ci/* Values for ovflw_irq_flags mode field above */ 33562306a36Sopenharmony_ci 33662306a36Sopenharmony_ci#define ACPI_APMT_OVFLW_IRQ_FLAGS_MODE_LEVEL (0<<0) 33762306a36Sopenharmony_ci#define ACPI_APMT_OVFLW_IRQ_FLAGS_MODE_EDGE (1<<0) 33862306a36Sopenharmony_ci 33962306a36Sopenharmony_ci/* Values for ovflw_irq_flags type field above */ 34062306a36Sopenharmony_ci 34162306a36Sopenharmony_ci#define ACPI_APMT_OVFLW_IRQ_FLAGS_TYPE_WIRED (0<<1) 34262306a36Sopenharmony_ci 34362306a36Sopenharmony_ci/******************************************************************************* 34462306a36Sopenharmony_ci * 34562306a36Sopenharmony_ci * BDAT - BIOS Data ACPI Table 34662306a36Sopenharmony_ci * 34762306a36Sopenharmony_ci * Conforms to "BIOS Data ACPI Table", Interface Specification v4.0 Draft 5 34862306a36Sopenharmony_ci * Nov 2020 34962306a36Sopenharmony_ci * 35062306a36Sopenharmony_ci ******************************************************************************/ 35162306a36Sopenharmony_ci 35262306a36Sopenharmony_cistruct acpi_table_bdat { 35362306a36Sopenharmony_ci struct acpi_table_header header; 35462306a36Sopenharmony_ci struct acpi_generic_address gas; 35562306a36Sopenharmony_ci}; 35662306a36Sopenharmony_ci 35762306a36Sopenharmony_ci/******************************************************************************* 35862306a36Sopenharmony_ci * 35962306a36Sopenharmony_ci * CCEL - CC-Event Log 36062306a36Sopenharmony_ci * From: "Guest-Host-Communication Interface (GHCI) for Intel 36162306a36Sopenharmony_ci * Trust Domain Extensions (Intel TDX)". Feb 2022 36262306a36Sopenharmony_ci * 36362306a36Sopenharmony_ci ******************************************************************************/ 36462306a36Sopenharmony_ci 36562306a36Sopenharmony_cistruct acpi_table_ccel { 36662306a36Sopenharmony_ci struct acpi_table_header header; /* Common ACPI table header */ 36762306a36Sopenharmony_ci u8 CCtype; 36862306a36Sopenharmony_ci u8 Ccsub_type; 36962306a36Sopenharmony_ci u16 reserved; 37062306a36Sopenharmony_ci u64 log_area_minimum_length; 37162306a36Sopenharmony_ci u64 log_area_start_address; 37262306a36Sopenharmony_ci}; 37362306a36Sopenharmony_ci 37462306a36Sopenharmony_ci/******************************************************************************* 37562306a36Sopenharmony_ci * 37662306a36Sopenharmony_ci * IORT - IO Remapping Table 37762306a36Sopenharmony_ci * 37862306a36Sopenharmony_ci * Conforms to "IO Remapping Table System Software on ARM Platforms", 37962306a36Sopenharmony_ci * Document number: ARM DEN 0049E.e, Sep 2022 38062306a36Sopenharmony_ci * 38162306a36Sopenharmony_ci ******************************************************************************/ 38262306a36Sopenharmony_ci 38362306a36Sopenharmony_cistruct acpi_table_iort { 38462306a36Sopenharmony_ci struct acpi_table_header header; 38562306a36Sopenharmony_ci u32 node_count; 38662306a36Sopenharmony_ci u32 node_offset; 38762306a36Sopenharmony_ci u32 reserved; 38862306a36Sopenharmony_ci}; 38962306a36Sopenharmony_ci 39062306a36Sopenharmony_ci/* 39162306a36Sopenharmony_ci * IORT subtables 39262306a36Sopenharmony_ci */ 39362306a36Sopenharmony_cistruct acpi_iort_node { 39462306a36Sopenharmony_ci u8 type; 39562306a36Sopenharmony_ci u16 length; 39662306a36Sopenharmony_ci u8 revision; 39762306a36Sopenharmony_ci u32 identifier; 39862306a36Sopenharmony_ci u32 mapping_count; 39962306a36Sopenharmony_ci u32 mapping_offset; 40062306a36Sopenharmony_ci char node_data[]; 40162306a36Sopenharmony_ci}; 40262306a36Sopenharmony_ci 40362306a36Sopenharmony_ci/* Values for subtable Type above */ 40462306a36Sopenharmony_ci 40562306a36Sopenharmony_cienum acpi_iort_node_type { 40662306a36Sopenharmony_ci ACPI_IORT_NODE_ITS_GROUP = 0x00, 40762306a36Sopenharmony_ci ACPI_IORT_NODE_NAMED_COMPONENT = 0x01, 40862306a36Sopenharmony_ci ACPI_IORT_NODE_PCI_ROOT_COMPLEX = 0x02, 40962306a36Sopenharmony_ci ACPI_IORT_NODE_SMMU = 0x03, 41062306a36Sopenharmony_ci ACPI_IORT_NODE_SMMU_V3 = 0x04, 41162306a36Sopenharmony_ci ACPI_IORT_NODE_PMCG = 0x05, 41262306a36Sopenharmony_ci ACPI_IORT_NODE_RMR = 0x06, 41362306a36Sopenharmony_ci}; 41462306a36Sopenharmony_ci 41562306a36Sopenharmony_cistruct acpi_iort_id_mapping { 41662306a36Sopenharmony_ci u32 input_base; /* Lowest value in input range */ 41762306a36Sopenharmony_ci u32 id_count; /* Number of IDs */ 41862306a36Sopenharmony_ci u32 output_base; /* Lowest value in output range */ 41962306a36Sopenharmony_ci u32 output_reference; /* A reference to the output node */ 42062306a36Sopenharmony_ci u32 flags; 42162306a36Sopenharmony_ci}; 42262306a36Sopenharmony_ci 42362306a36Sopenharmony_ci/* Masks for Flags field above for IORT subtable */ 42462306a36Sopenharmony_ci 42562306a36Sopenharmony_ci#define ACPI_IORT_ID_SINGLE_MAPPING (1) 42662306a36Sopenharmony_ci 42762306a36Sopenharmony_cistruct acpi_iort_memory_access { 42862306a36Sopenharmony_ci u32 cache_coherency; 42962306a36Sopenharmony_ci u8 hints; 43062306a36Sopenharmony_ci u16 reserved; 43162306a36Sopenharmony_ci u8 memory_flags; 43262306a36Sopenharmony_ci}; 43362306a36Sopenharmony_ci 43462306a36Sopenharmony_ci/* Values for cache_coherency field above */ 43562306a36Sopenharmony_ci 43662306a36Sopenharmony_ci#define ACPI_IORT_NODE_COHERENT 0x00000001 /* The device node is fully coherent */ 43762306a36Sopenharmony_ci#define ACPI_IORT_NODE_NOT_COHERENT 0x00000000 /* The device node is not coherent */ 43862306a36Sopenharmony_ci 43962306a36Sopenharmony_ci/* Masks for Hints field above */ 44062306a36Sopenharmony_ci 44162306a36Sopenharmony_ci#define ACPI_IORT_HT_TRANSIENT (1) 44262306a36Sopenharmony_ci#define ACPI_IORT_HT_WRITE (1<<1) 44362306a36Sopenharmony_ci#define ACPI_IORT_HT_READ (1<<2) 44462306a36Sopenharmony_ci#define ACPI_IORT_HT_OVERRIDE (1<<3) 44562306a36Sopenharmony_ci 44662306a36Sopenharmony_ci/* Masks for memory_flags field above */ 44762306a36Sopenharmony_ci 44862306a36Sopenharmony_ci#define ACPI_IORT_MF_COHERENCY (1) 44962306a36Sopenharmony_ci#define ACPI_IORT_MF_ATTRIBUTES (1<<1) 45062306a36Sopenharmony_ci 45162306a36Sopenharmony_ci/* 45262306a36Sopenharmony_ci * IORT node specific subtables 45362306a36Sopenharmony_ci */ 45462306a36Sopenharmony_cistruct acpi_iort_its_group { 45562306a36Sopenharmony_ci u32 its_count; 45662306a36Sopenharmony_ci u32 identifiers[]; /* GIC ITS identifier array */ 45762306a36Sopenharmony_ci}; 45862306a36Sopenharmony_ci 45962306a36Sopenharmony_cistruct acpi_iort_named_component { 46062306a36Sopenharmony_ci u32 node_flags; 46162306a36Sopenharmony_ci u64 memory_properties; /* Memory access properties */ 46262306a36Sopenharmony_ci u8 memory_address_limit; /* Memory address size limit */ 46362306a36Sopenharmony_ci char device_name[]; /* Path of namespace object */ 46462306a36Sopenharmony_ci}; 46562306a36Sopenharmony_ci 46662306a36Sopenharmony_ci/* Masks for Flags field above */ 46762306a36Sopenharmony_ci 46862306a36Sopenharmony_ci#define ACPI_IORT_NC_STALL_SUPPORTED (1) 46962306a36Sopenharmony_ci#define ACPI_IORT_NC_PASID_BITS (31<<1) 47062306a36Sopenharmony_ci 47162306a36Sopenharmony_cistruct acpi_iort_root_complex { 47262306a36Sopenharmony_ci u64 memory_properties; /* Memory access properties */ 47362306a36Sopenharmony_ci u32 ats_attribute; 47462306a36Sopenharmony_ci u32 pci_segment_number; 47562306a36Sopenharmony_ci u8 memory_address_limit; /* Memory address size limit */ 47662306a36Sopenharmony_ci u16 pasid_capabilities; /* PASID Capabilities */ 47762306a36Sopenharmony_ci u8 reserved[]; /* Reserved, must be zero */ 47862306a36Sopenharmony_ci}; 47962306a36Sopenharmony_ci 48062306a36Sopenharmony_ci/* Masks for ats_attribute field above */ 48162306a36Sopenharmony_ci 48262306a36Sopenharmony_ci#define ACPI_IORT_ATS_SUPPORTED (1) /* The root complex ATS support */ 48362306a36Sopenharmony_ci#define ACPI_IORT_PRI_SUPPORTED (1<<1) /* The root complex PRI support */ 48462306a36Sopenharmony_ci#define ACPI_IORT_PASID_FWD_SUPPORTED (1<<2) /* The root complex PASID forward support */ 48562306a36Sopenharmony_ci 48662306a36Sopenharmony_ci/* Masks for pasid_capabilities field above */ 48762306a36Sopenharmony_ci#define ACPI_IORT_PASID_MAX_WIDTH (0x1F) /* Bits 0-4 */ 48862306a36Sopenharmony_ci 48962306a36Sopenharmony_cistruct acpi_iort_smmu { 49062306a36Sopenharmony_ci u64 base_address; /* SMMU base address */ 49162306a36Sopenharmony_ci u64 span; /* Length of memory range */ 49262306a36Sopenharmony_ci u32 model; 49362306a36Sopenharmony_ci u32 flags; 49462306a36Sopenharmony_ci u32 global_interrupt_offset; 49562306a36Sopenharmony_ci u32 context_interrupt_count; 49662306a36Sopenharmony_ci u32 context_interrupt_offset; 49762306a36Sopenharmony_ci u32 pmu_interrupt_count; 49862306a36Sopenharmony_ci u32 pmu_interrupt_offset; 49962306a36Sopenharmony_ci u64 interrupts[]; /* Interrupt array */ 50062306a36Sopenharmony_ci}; 50162306a36Sopenharmony_ci 50262306a36Sopenharmony_ci/* Values for Model field above */ 50362306a36Sopenharmony_ci 50462306a36Sopenharmony_ci#define ACPI_IORT_SMMU_V1 0x00000000 /* Generic SMMUv1 */ 50562306a36Sopenharmony_ci#define ACPI_IORT_SMMU_V2 0x00000001 /* Generic SMMUv2 */ 50662306a36Sopenharmony_ci#define ACPI_IORT_SMMU_CORELINK_MMU400 0x00000002 /* ARM Corelink MMU-400 */ 50762306a36Sopenharmony_ci#define ACPI_IORT_SMMU_CORELINK_MMU500 0x00000003 /* ARM Corelink MMU-500 */ 50862306a36Sopenharmony_ci#define ACPI_IORT_SMMU_CORELINK_MMU401 0x00000004 /* ARM Corelink MMU-401 */ 50962306a36Sopenharmony_ci#define ACPI_IORT_SMMU_CAVIUM_THUNDERX 0x00000005 /* Cavium thunder_x SMMUv2 */ 51062306a36Sopenharmony_ci 51162306a36Sopenharmony_ci/* Masks for Flags field above */ 51262306a36Sopenharmony_ci 51362306a36Sopenharmony_ci#define ACPI_IORT_SMMU_DVM_SUPPORTED (1) 51462306a36Sopenharmony_ci#define ACPI_IORT_SMMU_COHERENT_WALK (1<<1) 51562306a36Sopenharmony_ci 51662306a36Sopenharmony_ci/* Global interrupt format */ 51762306a36Sopenharmony_ci 51862306a36Sopenharmony_cistruct acpi_iort_smmu_gsi { 51962306a36Sopenharmony_ci u32 nsg_irpt; 52062306a36Sopenharmony_ci u32 nsg_irpt_flags; 52162306a36Sopenharmony_ci u32 nsg_cfg_irpt; 52262306a36Sopenharmony_ci u32 nsg_cfg_irpt_flags; 52362306a36Sopenharmony_ci}; 52462306a36Sopenharmony_ci 52562306a36Sopenharmony_cistruct acpi_iort_smmu_v3 { 52662306a36Sopenharmony_ci u64 base_address; /* SMMUv3 base address */ 52762306a36Sopenharmony_ci u32 flags; 52862306a36Sopenharmony_ci u32 reserved; 52962306a36Sopenharmony_ci u64 vatos_address; 53062306a36Sopenharmony_ci u32 model; 53162306a36Sopenharmony_ci u32 event_gsiv; 53262306a36Sopenharmony_ci u32 pri_gsiv; 53362306a36Sopenharmony_ci u32 gerr_gsiv; 53462306a36Sopenharmony_ci u32 sync_gsiv; 53562306a36Sopenharmony_ci u32 pxm; 53662306a36Sopenharmony_ci u32 id_mapping_index; 53762306a36Sopenharmony_ci}; 53862306a36Sopenharmony_ci 53962306a36Sopenharmony_ci/* Values for Model field above */ 54062306a36Sopenharmony_ci 54162306a36Sopenharmony_ci#define ACPI_IORT_SMMU_V3_GENERIC 0x00000000 /* Generic SMMUv3 */ 54262306a36Sopenharmony_ci#define ACPI_IORT_SMMU_V3_HISILICON_HI161X 0x00000001 /* hi_silicon Hi161x SMMUv3 */ 54362306a36Sopenharmony_ci#define ACPI_IORT_SMMU_V3_CAVIUM_CN99XX 0x00000002 /* Cavium CN99xx SMMUv3 */ 54462306a36Sopenharmony_ci 54562306a36Sopenharmony_ci/* Masks for Flags field above */ 54662306a36Sopenharmony_ci 54762306a36Sopenharmony_ci#define ACPI_IORT_SMMU_V3_COHACC_OVERRIDE (1) 54862306a36Sopenharmony_ci#define ACPI_IORT_SMMU_V3_HTTU_OVERRIDE (3<<1) 54962306a36Sopenharmony_ci#define ACPI_IORT_SMMU_V3_PXM_VALID (1<<3) 55062306a36Sopenharmony_ci#define ACPI_IORT_SMMU_V3_DEVICEID_VALID (1<<4) 55162306a36Sopenharmony_ci 55262306a36Sopenharmony_cistruct acpi_iort_pmcg { 55362306a36Sopenharmony_ci u64 page0_base_address; 55462306a36Sopenharmony_ci u32 overflow_gsiv; 55562306a36Sopenharmony_ci u32 node_reference; 55662306a36Sopenharmony_ci u64 page1_base_address; 55762306a36Sopenharmony_ci}; 55862306a36Sopenharmony_ci 55962306a36Sopenharmony_cistruct acpi_iort_rmr { 56062306a36Sopenharmony_ci u32 flags; 56162306a36Sopenharmony_ci u32 rmr_count; 56262306a36Sopenharmony_ci u32 rmr_offset; 56362306a36Sopenharmony_ci}; 56462306a36Sopenharmony_ci 56562306a36Sopenharmony_ci/* Masks for Flags field above */ 56662306a36Sopenharmony_ci#define ACPI_IORT_RMR_REMAP_PERMITTED (1) 56762306a36Sopenharmony_ci#define ACPI_IORT_RMR_ACCESS_PRIVILEGE (1<<1) 56862306a36Sopenharmony_ci 56962306a36Sopenharmony_ci/* 57062306a36Sopenharmony_ci * Macro to access the Access Attributes in flags field above: 57162306a36Sopenharmony_ci * Access Attributes is encoded in bits 9:2 57262306a36Sopenharmony_ci */ 57362306a36Sopenharmony_ci#define ACPI_IORT_RMR_ACCESS_ATTRIBUTES(flags) (((flags) >> 2) & 0xFF) 57462306a36Sopenharmony_ci 57562306a36Sopenharmony_ci/* Values for above Access Attributes */ 57662306a36Sopenharmony_ci 57762306a36Sopenharmony_ci#define ACPI_IORT_RMR_ATTR_DEVICE_NGNRNE 0x00 57862306a36Sopenharmony_ci#define ACPI_IORT_RMR_ATTR_DEVICE_NGNRE 0x01 57962306a36Sopenharmony_ci#define ACPI_IORT_RMR_ATTR_DEVICE_NGRE 0x02 58062306a36Sopenharmony_ci#define ACPI_IORT_RMR_ATTR_DEVICE_GRE 0x03 58162306a36Sopenharmony_ci#define ACPI_IORT_RMR_ATTR_NORMAL_NC 0x04 58262306a36Sopenharmony_ci#define ACPI_IORT_RMR_ATTR_NORMAL_IWB_OWB 0x05 58362306a36Sopenharmony_ci 58462306a36Sopenharmony_cistruct acpi_iort_rmr_desc { 58562306a36Sopenharmony_ci u64 base_address; 58662306a36Sopenharmony_ci u64 length; 58762306a36Sopenharmony_ci u32 reserved; 58862306a36Sopenharmony_ci}; 58962306a36Sopenharmony_ci 59062306a36Sopenharmony_ci/******************************************************************************* 59162306a36Sopenharmony_ci * 59262306a36Sopenharmony_ci * IVRS - I/O Virtualization Reporting Structure 59362306a36Sopenharmony_ci * Version 1 59462306a36Sopenharmony_ci * 59562306a36Sopenharmony_ci * Conforms to "AMD I/O Virtualization Technology (IOMMU) Specification", 59662306a36Sopenharmony_ci * Revision 1.26, February 2009. 59762306a36Sopenharmony_ci * 59862306a36Sopenharmony_ci ******************************************************************************/ 59962306a36Sopenharmony_ci 60062306a36Sopenharmony_cistruct acpi_table_ivrs { 60162306a36Sopenharmony_ci struct acpi_table_header header; /* Common ACPI table header */ 60262306a36Sopenharmony_ci u32 info; /* Common virtualization info */ 60362306a36Sopenharmony_ci u64 reserved; 60462306a36Sopenharmony_ci}; 60562306a36Sopenharmony_ci 60662306a36Sopenharmony_ci/* Values for Info field above */ 60762306a36Sopenharmony_ci 60862306a36Sopenharmony_ci#define ACPI_IVRS_PHYSICAL_SIZE 0x00007F00 /* 7 bits, physical address size */ 60962306a36Sopenharmony_ci#define ACPI_IVRS_VIRTUAL_SIZE 0x003F8000 /* 7 bits, virtual address size */ 61062306a36Sopenharmony_ci#define ACPI_IVRS_ATS_RESERVED 0x00400000 /* ATS address translation range reserved */ 61162306a36Sopenharmony_ci 61262306a36Sopenharmony_ci/* IVRS subtable header */ 61362306a36Sopenharmony_ci 61462306a36Sopenharmony_cistruct acpi_ivrs_header { 61562306a36Sopenharmony_ci u8 type; /* Subtable type */ 61662306a36Sopenharmony_ci u8 flags; 61762306a36Sopenharmony_ci u16 length; /* Subtable length */ 61862306a36Sopenharmony_ci u16 device_id; /* ID of IOMMU */ 61962306a36Sopenharmony_ci}; 62062306a36Sopenharmony_ci 62162306a36Sopenharmony_ci/* Values for subtable Type above */ 62262306a36Sopenharmony_ci 62362306a36Sopenharmony_cienum acpi_ivrs_type { 62462306a36Sopenharmony_ci ACPI_IVRS_TYPE_HARDWARE1 = 0x10, 62562306a36Sopenharmony_ci ACPI_IVRS_TYPE_HARDWARE2 = 0x11, 62662306a36Sopenharmony_ci ACPI_IVRS_TYPE_HARDWARE3 = 0x40, 62762306a36Sopenharmony_ci ACPI_IVRS_TYPE_MEMORY1 = 0x20, 62862306a36Sopenharmony_ci ACPI_IVRS_TYPE_MEMORY2 = 0x21, 62962306a36Sopenharmony_ci ACPI_IVRS_TYPE_MEMORY3 = 0x22 63062306a36Sopenharmony_ci}; 63162306a36Sopenharmony_ci 63262306a36Sopenharmony_ci/* Masks for Flags field above for IVHD subtable */ 63362306a36Sopenharmony_ci 63462306a36Sopenharmony_ci#define ACPI_IVHD_TT_ENABLE (1) 63562306a36Sopenharmony_ci#define ACPI_IVHD_PASS_PW (1<<1) 63662306a36Sopenharmony_ci#define ACPI_IVHD_RES_PASS_PW (1<<2) 63762306a36Sopenharmony_ci#define ACPI_IVHD_ISOC (1<<3) 63862306a36Sopenharmony_ci#define ACPI_IVHD_IOTLB (1<<4) 63962306a36Sopenharmony_ci 64062306a36Sopenharmony_ci/* Masks for Flags field above for IVMD subtable */ 64162306a36Sopenharmony_ci 64262306a36Sopenharmony_ci#define ACPI_IVMD_UNITY (1) 64362306a36Sopenharmony_ci#define ACPI_IVMD_READ (1<<1) 64462306a36Sopenharmony_ci#define ACPI_IVMD_WRITE (1<<2) 64562306a36Sopenharmony_ci#define ACPI_IVMD_EXCLUSION_RANGE (1<<3) 64662306a36Sopenharmony_ci 64762306a36Sopenharmony_ci/* 64862306a36Sopenharmony_ci * IVRS subtables, correspond to Type in struct acpi_ivrs_header 64962306a36Sopenharmony_ci */ 65062306a36Sopenharmony_ci 65162306a36Sopenharmony_ci/* 0x10: I/O Virtualization Hardware Definition Block (IVHD) */ 65262306a36Sopenharmony_ci 65362306a36Sopenharmony_cistruct acpi_ivrs_hardware_10 { 65462306a36Sopenharmony_ci struct acpi_ivrs_header header; 65562306a36Sopenharmony_ci u16 capability_offset; /* Offset for IOMMU control fields */ 65662306a36Sopenharmony_ci u64 base_address; /* IOMMU control registers */ 65762306a36Sopenharmony_ci u16 pci_segment_group; 65862306a36Sopenharmony_ci u16 info; /* MSI number and unit ID */ 65962306a36Sopenharmony_ci u32 feature_reporting; 66062306a36Sopenharmony_ci}; 66162306a36Sopenharmony_ci 66262306a36Sopenharmony_ci/* 0x11: I/O Virtualization Hardware Definition Block (IVHD) */ 66362306a36Sopenharmony_ci 66462306a36Sopenharmony_cistruct acpi_ivrs_hardware_11 { 66562306a36Sopenharmony_ci struct acpi_ivrs_header header; 66662306a36Sopenharmony_ci u16 capability_offset; /* Offset for IOMMU control fields */ 66762306a36Sopenharmony_ci u64 base_address; /* IOMMU control registers */ 66862306a36Sopenharmony_ci u16 pci_segment_group; 66962306a36Sopenharmony_ci u16 info; /* MSI number and unit ID */ 67062306a36Sopenharmony_ci u32 attributes; 67162306a36Sopenharmony_ci u64 efr_register_image; 67262306a36Sopenharmony_ci u64 reserved; 67362306a36Sopenharmony_ci}; 67462306a36Sopenharmony_ci 67562306a36Sopenharmony_ci/* Masks for Info field above */ 67662306a36Sopenharmony_ci 67762306a36Sopenharmony_ci#define ACPI_IVHD_MSI_NUMBER_MASK 0x001F /* 5 bits, MSI message number */ 67862306a36Sopenharmony_ci#define ACPI_IVHD_UNIT_ID_MASK 0x1F00 /* 5 bits, unit_ID */ 67962306a36Sopenharmony_ci 68062306a36Sopenharmony_ci/* 68162306a36Sopenharmony_ci * Device Entries for IVHD subtable, appear after struct acpi_ivrs_hardware structure. 68262306a36Sopenharmony_ci * Upper two bits of the Type field are the (encoded) length of the structure. 68362306a36Sopenharmony_ci * Currently, only 4 and 8 byte entries are defined. 16 and 32 byte entries 68462306a36Sopenharmony_ci * are reserved for future use but not defined. 68562306a36Sopenharmony_ci */ 68662306a36Sopenharmony_cistruct acpi_ivrs_de_header { 68762306a36Sopenharmony_ci u8 type; 68862306a36Sopenharmony_ci u16 id; 68962306a36Sopenharmony_ci u8 data_setting; 69062306a36Sopenharmony_ci}; 69162306a36Sopenharmony_ci 69262306a36Sopenharmony_ci/* Length of device entry is in the top two bits of Type field above */ 69362306a36Sopenharmony_ci 69462306a36Sopenharmony_ci#define ACPI_IVHD_ENTRY_LENGTH 0xC0 69562306a36Sopenharmony_ci 69662306a36Sopenharmony_ci/* Values for device entry Type field above */ 69762306a36Sopenharmony_ci 69862306a36Sopenharmony_cienum acpi_ivrs_device_entry_type { 69962306a36Sopenharmony_ci /* 4-byte device entries, all use struct acpi_ivrs_device4 */ 70062306a36Sopenharmony_ci 70162306a36Sopenharmony_ci ACPI_IVRS_TYPE_PAD4 = 0, 70262306a36Sopenharmony_ci ACPI_IVRS_TYPE_ALL = 1, 70362306a36Sopenharmony_ci ACPI_IVRS_TYPE_SELECT = 2, 70462306a36Sopenharmony_ci ACPI_IVRS_TYPE_START = 3, 70562306a36Sopenharmony_ci ACPI_IVRS_TYPE_END = 4, 70662306a36Sopenharmony_ci 70762306a36Sopenharmony_ci /* 8-byte device entries */ 70862306a36Sopenharmony_ci 70962306a36Sopenharmony_ci ACPI_IVRS_TYPE_PAD8 = 64, 71062306a36Sopenharmony_ci ACPI_IVRS_TYPE_NOT_USED = 65, 71162306a36Sopenharmony_ci ACPI_IVRS_TYPE_ALIAS_SELECT = 66, /* Uses struct acpi_ivrs_device8a */ 71262306a36Sopenharmony_ci ACPI_IVRS_TYPE_ALIAS_START = 67, /* Uses struct acpi_ivrs_device8a */ 71362306a36Sopenharmony_ci ACPI_IVRS_TYPE_EXT_SELECT = 70, /* Uses struct acpi_ivrs_device8b */ 71462306a36Sopenharmony_ci ACPI_IVRS_TYPE_EXT_START = 71, /* Uses struct acpi_ivrs_device8b */ 71562306a36Sopenharmony_ci ACPI_IVRS_TYPE_SPECIAL = 72, /* Uses struct acpi_ivrs_device8c */ 71662306a36Sopenharmony_ci 71762306a36Sopenharmony_ci /* Variable-length device entries */ 71862306a36Sopenharmony_ci 71962306a36Sopenharmony_ci ACPI_IVRS_TYPE_HID = 240 /* Uses ACPI_IVRS_DEVICE_HID */ 72062306a36Sopenharmony_ci}; 72162306a36Sopenharmony_ci 72262306a36Sopenharmony_ci/* Values for Data field above */ 72362306a36Sopenharmony_ci 72462306a36Sopenharmony_ci#define ACPI_IVHD_INIT_PASS (1) 72562306a36Sopenharmony_ci#define ACPI_IVHD_EINT_PASS (1<<1) 72662306a36Sopenharmony_ci#define ACPI_IVHD_NMI_PASS (1<<2) 72762306a36Sopenharmony_ci#define ACPI_IVHD_SYSTEM_MGMT (3<<4) 72862306a36Sopenharmony_ci#define ACPI_IVHD_LINT0_PASS (1<<6) 72962306a36Sopenharmony_ci#define ACPI_IVHD_LINT1_PASS (1<<7) 73062306a36Sopenharmony_ci 73162306a36Sopenharmony_ci/* Types 0-4: 4-byte device entry */ 73262306a36Sopenharmony_ci 73362306a36Sopenharmony_cistruct acpi_ivrs_device4 { 73462306a36Sopenharmony_ci struct acpi_ivrs_de_header header; 73562306a36Sopenharmony_ci}; 73662306a36Sopenharmony_ci 73762306a36Sopenharmony_ci/* Types 66-67: 8-byte device entry */ 73862306a36Sopenharmony_ci 73962306a36Sopenharmony_cistruct acpi_ivrs_device8a { 74062306a36Sopenharmony_ci struct acpi_ivrs_de_header header; 74162306a36Sopenharmony_ci u8 reserved1; 74262306a36Sopenharmony_ci u16 used_id; 74362306a36Sopenharmony_ci u8 reserved2; 74462306a36Sopenharmony_ci}; 74562306a36Sopenharmony_ci 74662306a36Sopenharmony_ci/* Types 70-71: 8-byte device entry */ 74762306a36Sopenharmony_ci 74862306a36Sopenharmony_cistruct acpi_ivrs_device8b { 74962306a36Sopenharmony_ci struct acpi_ivrs_de_header header; 75062306a36Sopenharmony_ci u32 extended_data; 75162306a36Sopenharmony_ci}; 75262306a36Sopenharmony_ci 75362306a36Sopenharmony_ci/* Values for extended_data above */ 75462306a36Sopenharmony_ci 75562306a36Sopenharmony_ci#define ACPI_IVHD_ATS_DISABLED (1<<31) 75662306a36Sopenharmony_ci 75762306a36Sopenharmony_ci/* Type 72: 8-byte device entry */ 75862306a36Sopenharmony_ci 75962306a36Sopenharmony_cistruct acpi_ivrs_device8c { 76062306a36Sopenharmony_ci struct acpi_ivrs_de_header header; 76162306a36Sopenharmony_ci u8 handle; 76262306a36Sopenharmony_ci u16 used_id; 76362306a36Sopenharmony_ci u8 variety; 76462306a36Sopenharmony_ci}; 76562306a36Sopenharmony_ci 76662306a36Sopenharmony_ci/* Values for Variety field above */ 76762306a36Sopenharmony_ci 76862306a36Sopenharmony_ci#define ACPI_IVHD_IOAPIC 1 76962306a36Sopenharmony_ci#define ACPI_IVHD_HPET 2 77062306a36Sopenharmony_ci 77162306a36Sopenharmony_ci/* Type 240: variable-length device entry */ 77262306a36Sopenharmony_ci 77362306a36Sopenharmony_cistruct acpi_ivrs_device_hid { 77462306a36Sopenharmony_ci struct acpi_ivrs_de_header header; 77562306a36Sopenharmony_ci u64 acpi_hid; 77662306a36Sopenharmony_ci u64 acpi_cid; 77762306a36Sopenharmony_ci u8 uid_type; 77862306a36Sopenharmony_ci u8 uid_length; 77962306a36Sopenharmony_ci}; 78062306a36Sopenharmony_ci 78162306a36Sopenharmony_ci/* Values for uid_type above */ 78262306a36Sopenharmony_ci 78362306a36Sopenharmony_ci#define ACPI_IVRS_UID_NOT_PRESENT 0 78462306a36Sopenharmony_ci#define ACPI_IVRS_UID_IS_INTEGER 1 78562306a36Sopenharmony_ci#define ACPI_IVRS_UID_IS_STRING 2 78662306a36Sopenharmony_ci 78762306a36Sopenharmony_ci/* 0x20, 0x21, 0x22: I/O Virtualization Memory Definition Block (IVMD) */ 78862306a36Sopenharmony_ci 78962306a36Sopenharmony_cistruct acpi_ivrs_memory { 79062306a36Sopenharmony_ci struct acpi_ivrs_header header; 79162306a36Sopenharmony_ci u16 aux_data; 79262306a36Sopenharmony_ci u64 reserved; 79362306a36Sopenharmony_ci u64 start_address; 79462306a36Sopenharmony_ci u64 memory_length; 79562306a36Sopenharmony_ci}; 79662306a36Sopenharmony_ci 79762306a36Sopenharmony_ci/******************************************************************************* 79862306a36Sopenharmony_ci * 79962306a36Sopenharmony_ci * LPIT - Low Power Idle Table 80062306a36Sopenharmony_ci * 80162306a36Sopenharmony_ci * Conforms to "ACPI Low Power Idle Table (LPIT)" July 2014. 80262306a36Sopenharmony_ci * 80362306a36Sopenharmony_ci ******************************************************************************/ 80462306a36Sopenharmony_ci 80562306a36Sopenharmony_cistruct acpi_table_lpit { 80662306a36Sopenharmony_ci struct acpi_table_header header; /* Common ACPI table header */ 80762306a36Sopenharmony_ci}; 80862306a36Sopenharmony_ci 80962306a36Sopenharmony_ci/* LPIT subtable header */ 81062306a36Sopenharmony_ci 81162306a36Sopenharmony_cistruct acpi_lpit_header { 81262306a36Sopenharmony_ci u32 type; /* Subtable type */ 81362306a36Sopenharmony_ci u32 length; /* Subtable length */ 81462306a36Sopenharmony_ci u16 unique_id; 81562306a36Sopenharmony_ci u16 reserved; 81662306a36Sopenharmony_ci u32 flags; 81762306a36Sopenharmony_ci}; 81862306a36Sopenharmony_ci 81962306a36Sopenharmony_ci/* Values for subtable Type above */ 82062306a36Sopenharmony_ci 82162306a36Sopenharmony_cienum acpi_lpit_type { 82262306a36Sopenharmony_ci ACPI_LPIT_TYPE_NATIVE_CSTATE = 0x00, 82362306a36Sopenharmony_ci ACPI_LPIT_TYPE_RESERVED = 0x01 /* 1 and above are reserved */ 82462306a36Sopenharmony_ci}; 82562306a36Sopenharmony_ci 82662306a36Sopenharmony_ci/* Masks for Flags field above */ 82762306a36Sopenharmony_ci 82862306a36Sopenharmony_ci#define ACPI_LPIT_STATE_DISABLED (1) 82962306a36Sopenharmony_ci#define ACPI_LPIT_NO_COUNTER (1<<1) 83062306a36Sopenharmony_ci 83162306a36Sopenharmony_ci/* 83262306a36Sopenharmony_ci * LPIT subtables, correspond to Type in struct acpi_lpit_header 83362306a36Sopenharmony_ci */ 83462306a36Sopenharmony_ci 83562306a36Sopenharmony_ci/* 0x00: Native C-state instruction based LPI structure */ 83662306a36Sopenharmony_ci 83762306a36Sopenharmony_cistruct acpi_lpit_native { 83862306a36Sopenharmony_ci struct acpi_lpit_header header; 83962306a36Sopenharmony_ci struct acpi_generic_address entry_trigger; 84062306a36Sopenharmony_ci u32 residency; 84162306a36Sopenharmony_ci u32 latency; 84262306a36Sopenharmony_ci struct acpi_generic_address residency_counter; 84362306a36Sopenharmony_ci u64 counter_frequency; 84462306a36Sopenharmony_ci}; 84562306a36Sopenharmony_ci 84662306a36Sopenharmony_ci/******************************************************************************* 84762306a36Sopenharmony_ci * 84862306a36Sopenharmony_ci * MADT - Multiple APIC Description Table 84962306a36Sopenharmony_ci * Version 3 85062306a36Sopenharmony_ci * 85162306a36Sopenharmony_ci ******************************************************************************/ 85262306a36Sopenharmony_ci 85362306a36Sopenharmony_cistruct acpi_table_madt { 85462306a36Sopenharmony_ci struct acpi_table_header header; /* Common ACPI table header */ 85562306a36Sopenharmony_ci u32 address; /* Physical address of local APIC */ 85662306a36Sopenharmony_ci u32 flags; 85762306a36Sopenharmony_ci}; 85862306a36Sopenharmony_ci 85962306a36Sopenharmony_ci/* Masks for Flags field above */ 86062306a36Sopenharmony_ci 86162306a36Sopenharmony_ci#define ACPI_MADT_PCAT_COMPAT (1) /* 00: System also has dual 8259s */ 86262306a36Sopenharmony_ci 86362306a36Sopenharmony_ci/* Values for PCATCompat flag */ 86462306a36Sopenharmony_ci 86562306a36Sopenharmony_ci#define ACPI_MADT_DUAL_PIC 1 86662306a36Sopenharmony_ci#define ACPI_MADT_MULTIPLE_APIC 0 86762306a36Sopenharmony_ci 86862306a36Sopenharmony_ci/* Values for MADT subtable type in struct acpi_subtable_header */ 86962306a36Sopenharmony_ci 87062306a36Sopenharmony_cienum acpi_madt_type { 87162306a36Sopenharmony_ci ACPI_MADT_TYPE_LOCAL_APIC = 0, 87262306a36Sopenharmony_ci ACPI_MADT_TYPE_IO_APIC = 1, 87362306a36Sopenharmony_ci ACPI_MADT_TYPE_INTERRUPT_OVERRIDE = 2, 87462306a36Sopenharmony_ci ACPI_MADT_TYPE_NMI_SOURCE = 3, 87562306a36Sopenharmony_ci ACPI_MADT_TYPE_LOCAL_APIC_NMI = 4, 87662306a36Sopenharmony_ci ACPI_MADT_TYPE_LOCAL_APIC_OVERRIDE = 5, 87762306a36Sopenharmony_ci ACPI_MADT_TYPE_IO_SAPIC = 6, 87862306a36Sopenharmony_ci ACPI_MADT_TYPE_LOCAL_SAPIC = 7, 87962306a36Sopenharmony_ci ACPI_MADT_TYPE_INTERRUPT_SOURCE = 8, 88062306a36Sopenharmony_ci ACPI_MADT_TYPE_LOCAL_X2APIC = 9, 88162306a36Sopenharmony_ci ACPI_MADT_TYPE_LOCAL_X2APIC_NMI = 10, 88262306a36Sopenharmony_ci ACPI_MADT_TYPE_GENERIC_INTERRUPT = 11, 88362306a36Sopenharmony_ci ACPI_MADT_TYPE_GENERIC_DISTRIBUTOR = 12, 88462306a36Sopenharmony_ci ACPI_MADT_TYPE_GENERIC_MSI_FRAME = 13, 88562306a36Sopenharmony_ci ACPI_MADT_TYPE_GENERIC_REDISTRIBUTOR = 14, 88662306a36Sopenharmony_ci ACPI_MADT_TYPE_GENERIC_TRANSLATOR = 15, 88762306a36Sopenharmony_ci ACPI_MADT_TYPE_MULTIPROC_WAKEUP = 16, 88862306a36Sopenharmony_ci ACPI_MADT_TYPE_CORE_PIC = 17, 88962306a36Sopenharmony_ci ACPI_MADT_TYPE_LIO_PIC = 18, 89062306a36Sopenharmony_ci ACPI_MADT_TYPE_HT_PIC = 19, 89162306a36Sopenharmony_ci ACPI_MADT_TYPE_EIO_PIC = 20, 89262306a36Sopenharmony_ci ACPI_MADT_TYPE_MSI_PIC = 21, 89362306a36Sopenharmony_ci ACPI_MADT_TYPE_BIO_PIC = 22, 89462306a36Sopenharmony_ci ACPI_MADT_TYPE_LPC_PIC = 23, 89562306a36Sopenharmony_ci ACPI_MADT_TYPE_RINTC = 24, 89662306a36Sopenharmony_ci ACPI_MADT_TYPE_IMSIC = 25, 89762306a36Sopenharmony_ci ACPI_MADT_TYPE_APLIC = 26, 89862306a36Sopenharmony_ci ACPI_MADT_TYPE_PLIC = 27, 89962306a36Sopenharmony_ci ACPI_MADT_TYPE_RESERVED = 28, /* 28 to 0x7F are reserved */ 90062306a36Sopenharmony_ci ACPI_MADT_TYPE_OEM_RESERVED = 0x80 /* 0x80 to 0xFF are reserved for OEM use */ 90162306a36Sopenharmony_ci}; 90262306a36Sopenharmony_ci 90362306a36Sopenharmony_ci/* 90462306a36Sopenharmony_ci * MADT Subtables, correspond to Type in struct acpi_subtable_header 90562306a36Sopenharmony_ci */ 90662306a36Sopenharmony_ci 90762306a36Sopenharmony_ci/* 0: Processor Local APIC */ 90862306a36Sopenharmony_ci 90962306a36Sopenharmony_cistruct acpi_madt_local_apic { 91062306a36Sopenharmony_ci struct acpi_subtable_header header; 91162306a36Sopenharmony_ci u8 processor_id; /* ACPI processor id */ 91262306a36Sopenharmony_ci u8 id; /* Processor's local APIC id */ 91362306a36Sopenharmony_ci u32 lapic_flags; 91462306a36Sopenharmony_ci}; 91562306a36Sopenharmony_ci 91662306a36Sopenharmony_ci/* 1: IO APIC */ 91762306a36Sopenharmony_ci 91862306a36Sopenharmony_cistruct acpi_madt_io_apic { 91962306a36Sopenharmony_ci struct acpi_subtable_header header; 92062306a36Sopenharmony_ci u8 id; /* I/O APIC ID */ 92162306a36Sopenharmony_ci u8 reserved; /* reserved - must be zero */ 92262306a36Sopenharmony_ci u32 address; /* APIC physical address */ 92362306a36Sopenharmony_ci u32 global_irq_base; /* Global system interrupt where INTI lines start */ 92462306a36Sopenharmony_ci}; 92562306a36Sopenharmony_ci 92662306a36Sopenharmony_ci/* 2: Interrupt Override */ 92762306a36Sopenharmony_ci 92862306a36Sopenharmony_cistruct acpi_madt_interrupt_override { 92962306a36Sopenharmony_ci struct acpi_subtable_header header; 93062306a36Sopenharmony_ci u8 bus; /* 0 - ISA */ 93162306a36Sopenharmony_ci u8 source_irq; /* Interrupt source (IRQ) */ 93262306a36Sopenharmony_ci u32 global_irq; /* Global system interrupt */ 93362306a36Sopenharmony_ci u16 inti_flags; 93462306a36Sopenharmony_ci}; 93562306a36Sopenharmony_ci 93662306a36Sopenharmony_ci/* 3: NMI Source */ 93762306a36Sopenharmony_ci 93862306a36Sopenharmony_cistruct acpi_madt_nmi_source { 93962306a36Sopenharmony_ci struct acpi_subtable_header header; 94062306a36Sopenharmony_ci u16 inti_flags; 94162306a36Sopenharmony_ci u32 global_irq; /* Global system interrupt */ 94262306a36Sopenharmony_ci}; 94362306a36Sopenharmony_ci 94462306a36Sopenharmony_ci/* 4: Local APIC NMI */ 94562306a36Sopenharmony_ci 94662306a36Sopenharmony_cistruct acpi_madt_local_apic_nmi { 94762306a36Sopenharmony_ci struct acpi_subtable_header header; 94862306a36Sopenharmony_ci u8 processor_id; /* ACPI processor id */ 94962306a36Sopenharmony_ci u16 inti_flags; 95062306a36Sopenharmony_ci u8 lint; /* LINTn to which NMI is connected */ 95162306a36Sopenharmony_ci}; 95262306a36Sopenharmony_ci 95362306a36Sopenharmony_ci/* 5: Address Override */ 95462306a36Sopenharmony_ci 95562306a36Sopenharmony_cistruct acpi_madt_local_apic_override { 95662306a36Sopenharmony_ci struct acpi_subtable_header header; 95762306a36Sopenharmony_ci u16 reserved; /* Reserved, must be zero */ 95862306a36Sopenharmony_ci u64 address; /* APIC physical address */ 95962306a36Sopenharmony_ci}; 96062306a36Sopenharmony_ci 96162306a36Sopenharmony_ci/* 6: I/O Sapic */ 96262306a36Sopenharmony_ci 96362306a36Sopenharmony_cistruct acpi_madt_io_sapic { 96462306a36Sopenharmony_ci struct acpi_subtable_header header; 96562306a36Sopenharmony_ci u8 id; /* I/O SAPIC ID */ 96662306a36Sopenharmony_ci u8 reserved; /* Reserved, must be zero */ 96762306a36Sopenharmony_ci u32 global_irq_base; /* Global interrupt for SAPIC start */ 96862306a36Sopenharmony_ci u64 address; /* SAPIC physical address */ 96962306a36Sopenharmony_ci}; 97062306a36Sopenharmony_ci 97162306a36Sopenharmony_ci/* 7: Local Sapic */ 97262306a36Sopenharmony_ci 97362306a36Sopenharmony_cistruct acpi_madt_local_sapic { 97462306a36Sopenharmony_ci struct acpi_subtable_header header; 97562306a36Sopenharmony_ci u8 processor_id; /* ACPI processor id */ 97662306a36Sopenharmony_ci u8 id; /* SAPIC ID */ 97762306a36Sopenharmony_ci u8 eid; /* SAPIC EID */ 97862306a36Sopenharmony_ci u8 reserved[3]; /* Reserved, must be zero */ 97962306a36Sopenharmony_ci u32 lapic_flags; 98062306a36Sopenharmony_ci u32 uid; /* Numeric UID - ACPI 3.0 */ 98162306a36Sopenharmony_ci char uid_string[]; /* String UID - ACPI 3.0 */ 98262306a36Sopenharmony_ci}; 98362306a36Sopenharmony_ci 98462306a36Sopenharmony_ci/* 8: Platform Interrupt Source */ 98562306a36Sopenharmony_ci 98662306a36Sopenharmony_cistruct acpi_madt_interrupt_source { 98762306a36Sopenharmony_ci struct acpi_subtable_header header; 98862306a36Sopenharmony_ci u16 inti_flags; 98962306a36Sopenharmony_ci u8 type; /* 1=PMI, 2=INIT, 3=corrected */ 99062306a36Sopenharmony_ci u8 id; /* Processor ID */ 99162306a36Sopenharmony_ci u8 eid; /* Processor EID */ 99262306a36Sopenharmony_ci u8 io_sapic_vector; /* Vector value for PMI interrupts */ 99362306a36Sopenharmony_ci u32 global_irq; /* Global system interrupt */ 99462306a36Sopenharmony_ci u32 flags; /* Interrupt Source Flags */ 99562306a36Sopenharmony_ci}; 99662306a36Sopenharmony_ci 99762306a36Sopenharmony_ci/* Masks for Flags field above */ 99862306a36Sopenharmony_ci 99962306a36Sopenharmony_ci#define ACPI_MADT_CPEI_OVERRIDE (1) 100062306a36Sopenharmony_ci 100162306a36Sopenharmony_ci/* 9: Processor Local X2APIC (ACPI 4.0) */ 100262306a36Sopenharmony_ci 100362306a36Sopenharmony_cistruct acpi_madt_local_x2apic { 100462306a36Sopenharmony_ci struct acpi_subtable_header header; 100562306a36Sopenharmony_ci u16 reserved; /* reserved - must be zero */ 100662306a36Sopenharmony_ci u32 local_apic_id; /* Processor x2APIC ID */ 100762306a36Sopenharmony_ci u32 lapic_flags; 100862306a36Sopenharmony_ci u32 uid; /* ACPI processor UID */ 100962306a36Sopenharmony_ci}; 101062306a36Sopenharmony_ci 101162306a36Sopenharmony_ci/* 10: Local X2APIC NMI (ACPI 4.0) */ 101262306a36Sopenharmony_ci 101362306a36Sopenharmony_cistruct acpi_madt_local_x2apic_nmi { 101462306a36Sopenharmony_ci struct acpi_subtable_header header; 101562306a36Sopenharmony_ci u16 inti_flags; 101662306a36Sopenharmony_ci u32 uid; /* ACPI processor UID */ 101762306a36Sopenharmony_ci u8 lint; /* LINTn to which NMI is connected */ 101862306a36Sopenharmony_ci u8 reserved[3]; /* reserved - must be zero */ 101962306a36Sopenharmony_ci}; 102062306a36Sopenharmony_ci 102162306a36Sopenharmony_ci/* 11: Generic interrupt - GICC (ACPI 5.0 + ACPI 6.0 + ACPI 6.3 + ACPI 6.5 changes) */ 102262306a36Sopenharmony_ci 102362306a36Sopenharmony_cistruct acpi_madt_generic_interrupt { 102462306a36Sopenharmony_ci struct acpi_subtable_header header; 102562306a36Sopenharmony_ci u16 reserved; /* reserved - must be zero */ 102662306a36Sopenharmony_ci u32 cpu_interface_number; 102762306a36Sopenharmony_ci u32 uid; 102862306a36Sopenharmony_ci u32 flags; 102962306a36Sopenharmony_ci u32 parking_version; 103062306a36Sopenharmony_ci u32 performance_interrupt; 103162306a36Sopenharmony_ci u64 parked_address; 103262306a36Sopenharmony_ci u64 base_address; 103362306a36Sopenharmony_ci u64 gicv_base_address; 103462306a36Sopenharmony_ci u64 gich_base_address; 103562306a36Sopenharmony_ci u32 vgic_interrupt; 103662306a36Sopenharmony_ci u64 gicr_base_address; 103762306a36Sopenharmony_ci u64 arm_mpidr; 103862306a36Sopenharmony_ci u8 efficiency_class; 103962306a36Sopenharmony_ci u8 reserved2[1]; 104062306a36Sopenharmony_ci u16 spe_interrupt; /* ACPI 6.3 */ 104162306a36Sopenharmony_ci u16 trbe_interrupt; /* ACPI 6.5 */ 104262306a36Sopenharmony_ci}; 104362306a36Sopenharmony_ci 104462306a36Sopenharmony_ci/* Masks for Flags field above */ 104562306a36Sopenharmony_ci 104662306a36Sopenharmony_ci/* ACPI_MADT_ENABLED (1) Processor is usable if set */ 104762306a36Sopenharmony_ci#define ACPI_MADT_PERFORMANCE_IRQ_MODE (1<<1) /* 01: Performance Interrupt Mode */ 104862306a36Sopenharmony_ci#define ACPI_MADT_VGIC_IRQ_MODE (1<<2) /* 02: VGIC Maintenance Interrupt mode */ 104962306a36Sopenharmony_ci 105062306a36Sopenharmony_ci/* 12: Generic Distributor (ACPI 5.0 + ACPI 6.0 changes) */ 105162306a36Sopenharmony_ci 105262306a36Sopenharmony_cistruct acpi_madt_generic_distributor { 105362306a36Sopenharmony_ci struct acpi_subtable_header header; 105462306a36Sopenharmony_ci u16 reserved; /* reserved - must be zero */ 105562306a36Sopenharmony_ci u32 gic_id; 105662306a36Sopenharmony_ci u64 base_address; 105762306a36Sopenharmony_ci u32 global_irq_base; 105862306a36Sopenharmony_ci u8 version; 105962306a36Sopenharmony_ci u8 reserved2[3]; /* reserved - must be zero */ 106062306a36Sopenharmony_ci}; 106162306a36Sopenharmony_ci 106262306a36Sopenharmony_ci/* Values for Version field above */ 106362306a36Sopenharmony_ci 106462306a36Sopenharmony_cienum acpi_madt_gic_version { 106562306a36Sopenharmony_ci ACPI_MADT_GIC_VERSION_NONE = 0, 106662306a36Sopenharmony_ci ACPI_MADT_GIC_VERSION_V1 = 1, 106762306a36Sopenharmony_ci ACPI_MADT_GIC_VERSION_V2 = 2, 106862306a36Sopenharmony_ci ACPI_MADT_GIC_VERSION_V3 = 3, 106962306a36Sopenharmony_ci ACPI_MADT_GIC_VERSION_V4 = 4, 107062306a36Sopenharmony_ci ACPI_MADT_GIC_VERSION_RESERVED = 5 /* 5 and greater are reserved */ 107162306a36Sopenharmony_ci}; 107262306a36Sopenharmony_ci 107362306a36Sopenharmony_ci/* 13: Generic MSI Frame (ACPI 5.1) */ 107462306a36Sopenharmony_ci 107562306a36Sopenharmony_cistruct acpi_madt_generic_msi_frame { 107662306a36Sopenharmony_ci struct acpi_subtable_header header; 107762306a36Sopenharmony_ci u16 reserved; /* reserved - must be zero */ 107862306a36Sopenharmony_ci u32 msi_frame_id; 107962306a36Sopenharmony_ci u64 base_address; 108062306a36Sopenharmony_ci u32 flags; 108162306a36Sopenharmony_ci u16 spi_count; 108262306a36Sopenharmony_ci u16 spi_base; 108362306a36Sopenharmony_ci}; 108462306a36Sopenharmony_ci 108562306a36Sopenharmony_ci/* Masks for Flags field above */ 108662306a36Sopenharmony_ci 108762306a36Sopenharmony_ci#define ACPI_MADT_OVERRIDE_SPI_VALUES (1) 108862306a36Sopenharmony_ci 108962306a36Sopenharmony_ci/* 14: Generic Redistributor (ACPI 5.1) */ 109062306a36Sopenharmony_ci 109162306a36Sopenharmony_cistruct acpi_madt_generic_redistributor { 109262306a36Sopenharmony_ci struct acpi_subtable_header header; 109362306a36Sopenharmony_ci u16 reserved; /* reserved - must be zero */ 109462306a36Sopenharmony_ci u64 base_address; 109562306a36Sopenharmony_ci u32 length; 109662306a36Sopenharmony_ci}; 109762306a36Sopenharmony_ci 109862306a36Sopenharmony_ci/* 15: Generic Translator (ACPI 6.0) */ 109962306a36Sopenharmony_ci 110062306a36Sopenharmony_cistruct acpi_madt_generic_translator { 110162306a36Sopenharmony_ci struct acpi_subtable_header header; 110262306a36Sopenharmony_ci u16 reserved; /* reserved - must be zero */ 110362306a36Sopenharmony_ci u32 translation_id; 110462306a36Sopenharmony_ci u64 base_address; 110562306a36Sopenharmony_ci u32 reserved2; 110662306a36Sopenharmony_ci}; 110762306a36Sopenharmony_ci 110862306a36Sopenharmony_ci/* 16: Multiprocessor wakeup (ACPI 6.4) */ 110962306a36Sopenharmony_ci 111062306a36Sopenharmony_cistruct acpi_madt_multiproc_wakeup { 111162306a36Sopenharmony_ci struct acpi_subtable_header header; 111262306a36Sopenharmony_ci u16 mailbox_version; 111362306a36Sopenharmony_ci u32 reserved; /* reserved - must be zero */ 111462306a36Sopenharmony_ci u64 base_address; 111562306a36Sopenharmony_ci}; 111662306a36Sopenharmony_ci 111762306a36Sopenharmony_ci#define ACPI_MULTIPROC_WAKEUP_MB_OS_SIZE 2032 111862306a36Sopenharmony_ci#define ACPI_MULTIPROC_WAKEUP_MB_FIRMWARE_SIZE 2048 111962306a36Sopenharmony_ci 112062306a36Sopenharmony_cistruct acpi_madt_multiproc_wakeup_mailbox { 112162306a36Sopenharmony_ci u16 command; 112262306a36Sopenharmony_ci u16 reserved; /* reserved - must be zero */ 112362306a36Sopenharmony_ci u32 apic_id; 112462306a36Sopenharmony_ci u64 wakeup_vector; 112562306a36Sopenharmony_ci u8 reserved_os[ACPI_MULTIPROC_WAKEUP_MB_OS_SIZE]; /* reserved for OS use */ 112662306a36Sopenharmony_ci u8 reserved_firmware[ACPI_MULTIPROC_WAKEUP_MB_FIRMWARE_SIZE]; /* reserved for firmware use */ 112762306a36Sopenharmony_ci}; 112862306a36Sopenharmony_ci 112962306a36Sopenharmony_ci#define ACPI_MP_WAKE_COMMAND_WAKEUP 1 113062306a36Sopenharmony_ci 113162306a36Sopenharmony_ci/* 17: CPU Core Interrupt Controller (ACPI 6.5) */ 113262306a36Sopenharmony_ci 113362306a36Sopenharmony_cistruct acpi_madt_core_pic { 113462306a36Sopenharmony_ci struct acpi_subtable_header header; 113562306a36Sopenharmony_ci u8 version; 113662306a36Sopenharmony_ci u32 processor_id; 113762306a36Sopenharmony_ci u32 core_id; 113862306a36Sopenharmony_ci u32 flags; 113962306a36Sopenharmony_ci}; 114062306a36Sopenharmony_ci 114162306a36Sopenharmony_ci/* Values for Version field above */ 114262306a36Sopenharmony_ci 114362306a36Sopenharmony_cienum acpi_madt_core_pic_version { 114462306a36Sopenharmony_ci ACPI_MADT_CORE_PIC_VERSION_NONE = 0, 114562306a36Sopenharmony_ci ACPI_MADT_CORE_PIC_VERSION_V1 = 1, 114662306a36Sopenharmony_ci ACPI_MADT_CORE_PIC_VERSION_RESERVED = 2 /* 2 and greater are reserved */ 114762306a36Sopenharmony_ci}; 114862306a36Sopenharmony_ci 114962306a36Sopenharmony_ci/* 18: Legacy I/O Interrupt Controller (ACPI 6.5) */ 115062306a36Sopenharmony_ci 115162306a36Sopenharmony_cistruct acpi_madt_lio_pic { 115262306a36Sopenharmony_ci struct acpi_subtable_header header; 115362306a36Sopenharmony_ci u8 version; 115462306a36Sopenharmony_ci u64 address; 115562306a36Sopenharmony_ci u16 size; 115662306a36Sopenharmony_ci u8 cascade[2]; 115762306a36Sopenharmony_ci u32 cascade_map[2]; 115862306a36Sopenharmony_ci}; 115962306a36Sopenharmony_ci 116062306a36Sopenharmony_ci/* Values for Version field above */ 116162306a36Sopenharmony_ci 116262306a36Sopenharmony_cienum acpi_madt_lio_pic_version { 116362306a36Sopenharmony_ci ACPI_MADT_LIO_PIC_VERSION_NONE = 0, 116462306a36Sopenharmony_ci ACPI_MADT_LIO_PIC_VERSION_V1 = 1, 116562306a36Sopenharmony_ci ACPI_MADT_LIO_PIC_VERSION_RESERVED = 2 /* 2 and greater are reserved */ 116662306a36Sopenharmony_ci}; 116762306a36Sopenharmony_ci 116862306a36Sopenharmony_ci/* 19: HT Interrupt Controller (ACPI 6.5) */ 116962306a36Sopenharmony_ci 117062306a36Sopenharmony_cistruct acpi_madt_ht_pic { 117162306a36Sopenharmony_ci struct acpi_subtable_header header; 117262306a36Sopenharmony_ci u8 version; 117362306a36Sopenharmony_ci u64 address; 117462306a36Sopenharmony_ci u16 size; 117562306a36Sopenharmony_ci u8 cascade[8]; 117662306a36Sopenharmony_ci}; 117762306a36Sopenharmony_ci 117862306a36Sopenharmony_ci/* Values for Version field above */ 117962306a36Sopenharmony_ci 118062306a36Sopenharmony_cienum acpi_madt_ht_pic_version { 118162306a36Sopenharmony_ci ACPI_MADT_HT_PIC_VERSION_NONE = 0, 118262306a36Sopenharmony_ci ACPI_MADT_HT_PIC_VERSION_V1 = 1, 118362306a36Sopenharmony_ci ACPI_MADT_HT_PIC_VERSION_RESERVED = 2 /* 2 and greater are reserved */ 118462306a36Sopenharmony_ci}; 118562306a36Sopenharmony_ci 118662306a36Sopenharmony_ci/* 20: Extend I/O Interrupt Controller (ACPI 6.5) */ 118762306a36Sopenharmony_ci 118862306a36Sopenharmony_cistruct acpi_madt_eio_pic { 118962306a36Sopenharmony_ci struct acpi_subtable_header header; 119062306a36Sopenharmony_ci u8 version; 119162306a36Sopenharmony_ci u8 cascade; 119262306a36Sopenharmony_ci u8 node; 119362306a36Sopenharmony_ci u64 node_map; 119462306a36Sopenharmony_ci}; 119562306a36Sopenharmony_ci 119662306a36Sopenharmony_ci/* Values for Version field above */ 119762306a36Sopenharmony_ci 119862306a36Sopenharmony_cienum acpi_madt_eio_pic_version { 119962306a36Sopenharmony_ci ACPI_MADT_EIO_PIC_VERSION_NONE = 0, 120062306a36Sopenharmony_ci ACPI_MADT_EIO_PIC_VERSION_V1 = 1, 120162306a36Sopenharmony_ci ACPI_MADT_EIO_PIC_VERSION_RESERVED = 2 /* 2 and greater are reserved */ 120262306a36Sopenharmony_ci}; 120362306a36Sopenharmony_ci 120462306a36Sopenharmony_ci/* 21: MSI Interrupt Controller (ACPI 6.5) */ 120562306a36Sopenharmony_ci 120662306a36Sopenharmony_cistruct acpi_madt_msi_pic { 120762306a36Sopenharmony_ci struct acpi_subtable_header header; 120862306a36Sopenharmony_ci u8 version; 120962306a36Sopenharmony_ci u64 msg_address; 121062306a36Sopenharmony_ci u32 start; 121162306a36Sopenharmony_ci u32 count; 121262306a36Sopenharmony_ci}; 121362306a36Sopenharmony_ci 121462306a36Sopenharmony_ci/* Values for Version field above */ 121562306a36Sopenharmony_ci 121662306a36Sopenharmony_cienum acpi_madt_msi_pic_version { 121762306a36Sopenharmony_ci ACPI_MADT_MSI_PIC_VERSION_NONE = 0, 121862306a36Sopenharmony_ci ACPI_MADT_MSI_PIC_VERSION_V1 = 1, 121962306a36Sopenharmony_ci ACPI_MADT_MSI_PIC_VERSION_RESERVED = 2 /* 2 and greater are reserved */ 122062306a36Sopenharmony_ci}; 122162306a36Sopenharmony_ci 122262306a36Sopenharmony_ci/* 22: Bridge I/O Interrupt Controller (ACPI 6.5) */ 122362306a36Sopenharmony_ci 122462306a36Sopenharmony_cistruct acpi_madt_bio_pic { 122562306a36Sopenharmony_ci struct acpi_subtable_header header; 122662306a36Sopenharmony_ci u8 version; 122762306a36Sopenharmony_ci u64 address; 122862306a36Sopenharmony_ci u16 size; 122962306a36Sopenharmony_ci u16 id; 123062306a36Sopenharmony_ci u16 gsi_base; 123162306a36Sopenharmony_ci}; 123262306a36Sopenharmony_ci 123362306a36Sopenharmony_ci/* Values for Version field above */ 123462306a36Sopenharmony_ci 123562306a36Sopenharmony_cienum acpi_madt_bio_pic_version { 123662306a36Sopenharmony_ci ACPI_MADT_BIO_PIC_VERSION_NONE = 0, 123762306a36Sopenharmony_ci ACPI_MADT_BIO_PIC_VERSION_V1 = 1, 123862306a36Sopenharmony_ci ACPI_MADT_BIO_PIC_VERSION_RESERVED = 2 /* 2 and greater are reserved */ 123962306a36Sopenharmony_ci}; 124062306a36Sopenharmony_ci 124162306a36Sopenharmony_ci/* 23: LPC Interrupt Controller (ACPI 6.5) */ 124262306a36Sopenharmony_ci 124362306a36Sopenharmony_cistruct acpi_madt_lpc_pic { 124462306a36Sopenharmony_ci struct acpi_subtable_header header; 124562306a36Sopenharmony_ci u8 version; 124662306a36Sopenharmony_ci u64 address; 124762306a36Sopenharmony_ci u16 size; 124862306a36Sopenharmony_ci u8 cascade; 124962306a36Sopenharmony_ci}; 125062306a36Sopenharmony_ci 125162306a36Sopenharmony_ci/* Values for Version field above */ 125262306a36Sopenharmony_ci 125362306a36Sopenharmony_cienum acpi_madt_lpc_pic_version { 125462306a36Sopenharmony_ci ACPI_MADT_LPC_PIC_VERSION_NONE = 0, 125562306a36Sopenharmony_ci ACPI_MADT_LPC_PIC_VERSION_V1 = 1, 125662306a36Sopenharmony_ci ACPI_MADT_LPC_PIC_VERSION_RESERVED = 2 /* 2 and greater are reserved */ 125762306a36Sopenharmony_ci}; 125862306a36Sopenharmony_ci 125962306a36Sopenharmony_ci/* 24: RISC-V INTC */ 126062306a36Sopenharmony_cistruct acpi_madt_rintc { 126162306a36Sopenharmony_ci struct acpi_subtable_header header; 126262306a36Sopenharmony_ci u8 version; 126362306a36Sopenharmony_ci u8 reserved; 126462306a36Sopenharmony_ci u32 flags; 126562306a36Sopenharmony_ci u64 hart_id; 126662306a36Sopenharmony_ci u32 uid; /* ACPI processor UID */ 126762306a36Sopenharmony_ci u32 ext_intc_id; /* External INTC Id */ 126862306a36Sopenharmony_ci u64 imsic_addr; /* IMSIC base address */ 126962306a36Sopenharmony_ci u32 imsic_size; /* IMSIC size */ 127062306a36Sopenharmony_ci}; 127162306a36Sopenharmony_ci 127262306a36Sopenharmony_ci/* Values for RISC-V INTC Version field above */ 127362306a36Sopenharmony_ci 127462306a36Sopenharmony_cienum acpi_madt_rintc_version { 127562306a36Sopenharmony_ci ACPI_MADT_RINTC_VERSION_NONE = 0, 127662306a36Sopenharmony_ci ACPI_MADT_RINTC_VERSION_V1 = 1, 127762306a36Sopenharmony_ci ACPI_MADT_RINTC_VERSION_RESERVED = 2 /* 2 and greater are reserved */ 127862306a36Sopenharmony_ci}; 127962306a36Sopenharmony_ci 128062306a36Sopenharmony_ci/* 25: RISC-V IMSIC */ 128162306a36Sopenharmony_cistruct acpi_madt_imsic { 128262306a36Sopenharmony_ci struct acpi_subtable_header header; 128362306a36Sopenharmony_ci u8 version; 128462306a36Sopenharmony_ci u8 reserved; 128562306a36Sopenharmony_ci u32 flags; 128662306a36Sopenharmony_ci u16 num_ids; 128762306a36Sopenharmony_ci u16 num_guest_ids; 128862306a36Sopenharmony_ci u8 guest_index_bits; 128962306a36Sopenharmony_ci u8 hart_index_bits; 129062306a36Sopenharmony_ci u8 group_index_bits; 129162306a36Sopenharmony_ci u8 group_index_shift; 129262306a36Sopenharmony_ci}; 129362306a36Sopenharmony_ci 129462306a36Sopenharmony_ci/* 26: RISC-V APLIC */ 129562306a36Sopenharmony_cistruct acpi_madt_aplic { 129662306a36Sopenharmony_ci struct acpi_subtable_header header; 129762306a36Sopenharmony_ci u8 version; 129862306a36Sopenharmony_ci u8 id; 129962306a36Sopenharmony_ci u32 flags; 130062306a36Sopenharmony_ci u8 hw_id[8]; 130162306a36Sopenharmony_ci u16 num_idcs; 130262306a36Sopenharmony_ci u16 num_sources; 130362306a36Sopenharmony_ci u32 gsi_base; 130462306a36Sopenharmony_ci u64 base_addr; 130562306a36Sopenharmony_ci u32 size; 130662306a36Sopenharmony_ci}; 130762306a36Sopenharmony_ci 130862306a36Sopenharmony_ci/* 27: RISC-V PLIC */ 130962306a36Sopenharmony_cistruct acpi_madt_plic { 131062306a36Sopenharmony_ci struct acpi_subtable_header header; 131162306a36Sopenharmony_ci u8 version; 131262306a36Sopenharmony_ci u8 id; 131362306a36Sopenharmony_ci u8 hw_id[8]; 131462306a36Sopenharmony_ci u16 num_irqs; 131562306a36Sopenharmony_ci u16 max_prio; 131662306a36Sopenharmony_ci u32 flags; 131762306a36Sopenharmony_ci u32 size; 131862306a36Sopenharmony_ci u64 base_addr; 131962306a36Sopenharmony_ci u32 gsi_base; 132062306a36Sopenharmony_ci}; 132162306a36Sopenharmony_ci 132262306a36Sopenharmony_ci/* 80: OEM data */ 132362306a36Sopenharmony_ci 132462306a36Sopenharmony_cistruct acpi_madt_oem_data { 132562306a36Sopenharmony_ci ACPI_FLEX_ARRAY(u8, oem_data); 132662306a36Sopenharmony_ci}; 132762306a36Sopenharmony_ci 132862306a36Sopenharmony_ci/* 132962306a36Sopenharmony_ci * Common flags fields for MADT subtables 133062306a36Sopenharmony_ci */ 133162306a36Sopenharmony_ci 133262306a36Sopenharmony_ci/* MADT Local APIC flags */ 133362306a36Sopenharmony_ci 133462306a36Sopenharmony_ci#define ACPI_MADT_ENABLED (1) /* 00: Processor is usable if set */ 133562306a36Sopenharmony_ci#define ACPI_MADT_ONLINE_CAPABLE (2) /* 01: System HW supports enabling processor at runtime */ 133662306a36Sopenharmony_ci 133762306a36Sopenharmony_ci/* MADT MPS INTI flags (inti_flags) */ 133862306a36Sopenharmony_ci 133962306a36Sopenharmony_ci#define ACPI_MADT_POLARITY_MASK (3) /* 00-01: Polarity of APIC I/O input signals */ 134062306a36Sopenharmony_ci#define ACPI_MADT_TRIGGER_MASK (3<<2) /* 02-03: Trigger mode of APIC input signals */ 134162306a36Sopenharmony_ci 134262306a36Sopenharmony_ci/* Values for MPS INTI flags */ 134362306a36Sopenharmony_ci 134462306a36Sopenharmony_ci#define ACPI_MADT_POLARITY_CONFORMS 0 134562306a36Sopenharmony_ci#define ACPI_MADT_POLARITY_ACTIVE_HIGH 1 134662306a36Sopenharmony_ci#define ACPI_MADT_POLARITY_RESERVED 2 134762306a36Sopenharmony_ci#define ACPI_MADT_POLARITY_ACTIVE_LOW 3 134862306a36Sopenharmony_ci 134962306a36Sopenharmony_ci#define ACPI_MADT_TRIGGER_CONFORMS (0) 135062306a36Sopenharmony_ci#define ACPI_MADT_TRIGGER_EDGE (1<<2) 135162306a36Sopenharmony_ci#define ACPI_MADT_TRIGGER_RESERVED (2<<2) 135262306a36Sopenharmony_ci#define ACPI_MADT_TRIGGER_LEVEL (3<<2) 135362306a36Sopenharmony_ci 135462306a36Sopenharmony_ci/******************************************************************************* 135562306a36Sopenharmony_ci * 135662306a36Sopenharmony_ci * MCFG - PCI Memory Mapped Configuration table and subtable 135762306a36Sopenharmony_ci * Version 1 135862306a36Sopenharmony_ci * 135962306a36Sopenharmony_ci * Conforms to "PCI Firmware Specification", Revision 3.0, June 20, 2005 136062306a36Sopenharmony_ci * 136162306a36Sopenharmony_ci ******************************************************************************/ 136262306a36Sopenharmony_ci 136362306a36Sopenharmony_cistruct acpi_table_mcfg { 136462306a36Sopenharmony_ci struct acpi_table_header header; /* Common ACPI table header */ 136562306a36Sopenharmony_ci u8 reserved[8]; 136662306a36Sopenharmony_ci}; 136762306a36Sopenharmony_ci 136862306a36Sopenharmony_ci/* Subtable */ 136962306a36Sopenharmony_ci 137062306a36Sopenharmony_cistruct acpi_mcfg_allocation { 137162306a36Sopenharmony_ci u64 address; /* Base address, processor-relative */ 137262306a36Sopenharmony_ci u16 pci_segment; /* PCI segment group number */ 137362306a36Sopenharmony_ci u8 start_bus_number; /* Starting PCI Bus number */ 137462306a36Sopenharmony_ci u8 end_bus_number; /* Final PCI Bus number */ 137562306a36Sopenharmony_ci u32 reserved; 137662306a36Sopenharmony_ci}; 137762306a36Sopenharmony_ci 137862306a36Sopenharmony_ci/******************************************************************************* 137962306a36Sopenharmony_ci * 138062306a36Sopenharmony_ci * MCHI - Management Controller Host Interface Table 138162306a36Sopenharmony_ci * Version 1 138262306a36Sopenharmony_ci * 138362306a36Sopenharmony_ci * Conforms to "Management Component Transport Protocol (MCTP) Host 138462306a36Sopenharmony_ci * Interface Specification", Revision 1.0.0a, October 13, 2009 138562306a36Sopenharmony_ci * 138662306a36Sopenharmony_ci ******************************************************************************/ 138762306a36Sopenharmony_ci 138862306a36Sopenharmony_cistruct acpi_table_mchi { 138962306a36Sopenharmony_ci struct acpi_table_header header; /* Common ACPI table header */ 139062306a36Sopenharmony_ci u8 interface_type; 139162306a36Sopenharmony_ci u8 protocol; 139262306a36Sopenharmony_ci u64 protocol_data; 139362306a36Sopenharmony_ci u8 interrupt_type; 139462306a36Sopenharmony_ci u8 gpe; 139562306a36Sopenharmony_ci u8 pci_device_flag; 139662306a36Sopenharmony_ci u32 global_interrupt; 139762306a36Sopenharmony_ci struct acpi_generic_address control_register; 139862306a36Sopenharmony_ci u8 pci_segment; 139962306a36Sopenharmony_ci u8 pci_bus; 140062306a36Sopenharmony_ci u8 pci_device; 140162306a36Sopenharmony_ci u8 pci_function; 140262306a36Sopenharmony_ci}; 140362306a36Sopenharmony_ci 140462306a36Sopenharmony_ci/******************************************************************************* 140562306a36Sopenharmony_ci * 140662306a36Sopenharmony_ci * MPAM - Memory System Resource Partitioning and Monitoring 140762306a36Sopenharmony_ci * 140862306a36Sopenharmony_ci * Conforms to "ACPI for Memory System Resource Partitioning and Monitoring 2.0" 140962306a36Sopenharmony_ci * Document number: ARM DEN 0065, December, 2022. 141062306a36Sopenharmony_ci * 141162306a36Sopenharmony_ci ******************************************************************************/ 141262306a36Sopenharmony_ci 141362306a36Sopenharmony_ci/* MPAM RIS locator types. Table 11, Location types */ 141462306a36Sopenharmony_cienum acpi_mpam_locator_type { 141562306a36Sopenharmony_ci ACPI_MPAM_LOCATION_TYPE_PROCESSOR_CACHE = 0, 141662306a36Sopenharmony_ci ACPI_MPAM_LOCATION_TYPE_MEMORY = 1, 141762306a36Sopenharmony_ci ACPI_MPAM_LOCATION_TYPE_SMMU = 2, 141862306a36Sopenharmony_ci ACPI_MPAM_LOCATION_TYPE_MEMORY_CACHE = 3, 141962306a36Sopenharmony_ci ACPI_MPAM_LOCATION_TYPE_ACPI_DEVICE = 4, 142062306a36Sopenharmony_ci ACPI_MPAM_LOCATION_TYPE_INTERCONNECT = 5, 142162306a36Sopenharmony_ci ACPI_MPAM_LOCATION_TYPE_UNKNOWN = 0xFF 142262306a36Sopenharmony_ci}; 142362306a36Sopenharmony_ci 142462306a36Sopenharmony_ci/* MPAM Functional dependency descriptor. Table 10 */ 142562306a36Sopenharmony_cistruct acpi_mpam_func_deps { 142662306a36Sopenharmony_ci u32 producer; 142762306a36Sopenharmony_ci u32 reserved; 142862306a36Sopenharmony_ci}; 142962306a36Sopenharmony_ci 143062306a36Sopenharmony_ci/* MPAM Processor cache locator descriptor. Table 13 */ 143162306a36Sopenharmony_cistruct acpi_mpam_resource_cache_locator { 143262306a36Sopenharmony_ci u64 cache_reference; 143362306a36Sopenharmony_ci u32 reserved; 143462306a36Sopenharmony_ci}; 143562306a36Sopenharmony_ci 143662306a36Sopenharmony_ci/* MPAM Memory locator descriptor. Table 14 */ 143762306a36Sopenharmony_cistruct acpi_mpam_resource_memory_locator { 143862306a36Sopenharmony_ci u64 proximity_domain; 143962306a36Sopenharmony_ci u32 reserved; 144062306a36Sopenharmony_ci}; 144162306a36Sopenharmony_ci 144262306a36Sopenharmony_ci/* MPAM SMMU locator descriptor. Table 15 */ 144362306a36Sopenharmony_cistruct acpi_mpam_resource_smmu_locator { 144462306a36Sopenharmony_ci u64 smmu_interface; 144562306a36Sopenharmony_ci u32 reserved; 144662306a36Sopenharmony_ci}; 144762306a36Sopenharmony_ci 144862306a36Sopenharmony_ci/* MPAM Memory-side cache locator descriptor. Table 16 */ 144962306a36Sopenharmony_cistruct acpi_mpam_resource_memcache_locator { 145062306a36Sopenharmony_ci u8 reserved[7]; 145162306a36Sopenharmony_ci u8 level; 145262306a36Sopenharmony_ci u32 reference; 145362306a36Sopenharmony_ci}; 145462306a36Sopenharmony_ci 145562306a36Sopenharmony_ci/* MPAM ACPI device locator descriptor. Table 17 */ 145662306a36Sopenharmony_cistruct acpi_mpam_resource_acpi_locator { 145762306a36Sopenharmony_ci u64 acpi_hw_id; 145862306a36Sopenharmony_ci u32 acpi_unique_id; 145962306a36Sopenharmony_ci}; 146062306a36Sopenharmony_ci 146162306a36Sopenharmony_ci/* MPAM Interconnect locator descriptor. Table 18 */ 146262306a36Sopenharmony_cistruct acpi_mpam_resource_interconnect_locator { 146362306a36Sopenharmony_ci u64 inter_connect_desc_tbl_off; 146462306a36Sopenharmony_ci u32 reserved; 146562306a36Sopenharmony_ci}; 146662306a36Sopenharmony_ci 146762306a36Sopenharmony_ci/* MPAM Locator structure. Table 12 */ 146862306a36Sopenharmony_cistruct acpi_mpam_resource_generic_locator { 146962306a36Sopenharmony_ci u64 descriptor1; 147062306a36Sopenharmony_ci u32 descriptor2; 147162306a36Sopenharmony_ci}; 147262306a36Sopenharmony_ci 147362306a36Sopenharmony_ciunion acpi_mpam_resource_locator { 147462306a36Sopenharmony_ci struct acpi_mpam_resource_cache_locator cache_locator; 147562306a36Sopenharmony_ci struct acpi_mpam_resource_memory_locator memory_locator; 147662306a36Sopenharmony_ci struct acpi_mpam_resource_smmu_locator smmu_locator; 147762306a36Sopenharmony_ci struct acpi_mpam_resource_memcache_locator mem_cache_locator; 147862306a36Sopenharmony_ci struct acpi_mpam_resource_acpi_locator acpi_locator; 147962306a36Sopenharmony_ci struct acpi_mpam_resource_interconnect_locator interconnect_ifc_locator; 148062306a36Sopenharmony_ci struct acpi_mpam_resource_generic_locator generic_locator; 148162306a36Sopenharmony_ci}; 148262306a36Sopenharmony_ci 148362306a36Sopenharmony_ci/* Memory System Component Resource Node Structure Table 9 */ 148462306a36Sopenharmony_cistruct acpi_mpam_resource_node { 148562306a36Sopenharmony_ci u32 identifier; 148662306a36Sopenharmony_ci u8 ris_index; 148762306a36Sopenharmony_ci u16 reserved1; 148862306a36Sopenharmony_ci u8 locator_type; 148962306a36Sopenharmony_ci union acpi_mpam_resource_locator locator; 149062306a36Sopenharmony_ci u32 num_functional_deps; 149162306a36Sopenharmony_ci}; 149262306a36Sopenharmony_ci 149362306a36Sopenharmony_ci/* Memory System Component (MSC) Node Structure. Table 4 */ 149462306a36Sopenharmony_cistruct acpi_mpam_msc_node { 149562306a36Sopenharmony_ci u16 length; 149662306a36Sopenharmony_ci u8 interface_type; 149762306a36Sopenharmony_ci u8 reserved; 149862306a36Sopenharmony_ci u32 identifier; 149962306a36Sopenharmony_ci u64 base_address; 150062306a36Sopenharmony_ci u32 mmio_size; 150162306a36Sopenharmony_ci u32 overflow_interrupt; 150262306a36Sopenharmony_ci u32 overflow_interrupt_flags; 150362306a36Sopenharmony_ci u32 reserved1; 150462306a36Sopenharmony_ci u32 overflow_interrupt_affinity; 150562306a36Sopenharmony_ci u32 error_interrupt; 150662306a36Sopenharmony_ci u32 error_interrupt_flags; 150762306a36Sopenharmony_ci u32 reserved2; 150862306a36Sopenharmony_ci u32 error_interrupt_affinity; 150962306a36Sopenharmony_ci u32 max_nrdy_usec; 151062306a36Sopenharmony_ci u64 hardware_id_linked_device; 151162306a36Sopenharmony_ci u32 instance_id_linked_device; 151262306a36Sopenharmony_ci u32 num_resouce_nodes; 151362306a36Sopenharmony_ci}; 151462306a36Sopenharmony_ci 151562306a36Sopenharmony_cistruct acpi_table_mpam { 151662306a36Sopenharmony_ci struct acpi_table_header header; /* Common ACPI table header */ 151762306a36Sopenharmony_ci}; 151862306a36Sopenharmony_ci 151962306a36Sopenharmony_ci/******************************************************************************* 152062306a36Sopenharmony_ci * 152162306a36Sopenharmony_ci * MPST - Memory Power State Table (ACPI 5.0) 152262306a36Sopenharmony_ci * Version 1 152362306a36Sopenharmony_ci * 152462306a36Sopenharmony_ci ******************************************************************************/ 152562306a36Sopenharmony_ci 152662306a36Sopenharmony_ci#define ACPI_MPST_CHANNEL_INFO \ 152762306a36Sopenharmony_ci u8 channel_id; \ 152862306a36Sopenharmony_ci u8 reserved1[3]; \ 152962306a36Sopenharmony_ci u16 power_node_count; \ 153062306a36Sopenharmony_ci u16 reserved2; 153162306a36Sopenharmony_ci 153262306a36Sopenharmony_ci/* Main table */ 153362306a36Sopenharmony_ci 153462306a36Sopenharmony_cistruct acpi_table_mpst { 153562306a36Sopenharmony_ci struct acpi_table_header header; /* Common ACPI table header */ 153662306a36Sopenharmony_ci ACPI_MPST_CHANNEL_INFO /* Platform Communication Channel */ 153762306a36Sopenharmony_ci}; 153862306a36Sopenharmony_ci 153962306a36Sopenharmony_ci/* Memory Platform Communication Channel Info */ 154062306a36Sopenharmony_ci 154162306a36Sopenharmony_cistruct acpi_mpst_channel { 154262306a36Sopenharmony_ci ACPI_MPST_CHANNEL_INFO /* Platform Communication Channel */ 154362306a36Sopenharmony_ci}; 154462306a36Sopenharmony_ci 154562306a36Sopenharmony_ci/* Memory Power Node Structure */ 154662306a36Sopenharmony_ci 154762306a36Sopenharmony_cistruct acpi_mpst_power_node { 154862306a36Sopenharmony_ci u8 flags; 154962306a36Sopenharmony_ci u8 reserved1; 155062306a36Sopenharmony_ci u16 node_id; 155162306a36Sopenharmony_ci u32 length; 155262306a36Sopenharmony_ci u64 range_address; 155362306a36Sopenharmony_ci u64 range_length; 155462306a36Sopenharmony_ci u32 num_power_states; 155562306a36Sopenharmony_ci u32 num_physical_components; 155662306a36Sopenharmony_ci}; 155762306a36Sopenharmony_ci 155862306a36Sopenharmony_ci/* Values for Flags field above */ 155962306a36Sopenharmony_ci 156062306a36Sopenharmony_ci#define ACPI_MPST_ENABLED 1 156162306a36Sopenharmony_ci#define ACPI_MPST_POWER_MANAGED 2 156262306a36Sopenharmony_ci#define ACPI_MPST_HOT_PLUG_CAPABLE 4 156362306a36Sopenharmony_ci 156462306a36Sopenharmony_ci/* Memory Power State Structure (follows POWER_NODE above) */ 156562306a36Sopenharmony_ci 156662306a36Sopenharmony_cistruct acpi_mpst_power_state { 156762306a36Sopenharmony_ci u8 power_state; 156862306a36Sopenharmony_ci u8 info_index; 156962306a36Sopenharmony_ci}; 157062306a36Sopenharmony_ci 157162306a36Sopenharmony_ci/* Physical Component ID Structure (follows POWER_STATE above) */ 157262306a36Sopenharmony_ci 157362306a36Sopenharmony_cistruct acpi_mpst_component { 157462306a36Sopenharmony_ci u16 component_id; 157562306a36Sopenharmony_ci}; 157662306a36Sopenharmony_ci 157762306a36Sopenharmony_ci/* Memory Power State Characteristics Structure (follows all POWER_NODEs) */ 157862306a36Sopenharmony_ci 157962306a36Sopenharmony_cistruct acpi_mpst_data_hdr { 158062306a36Sopenharmony_ci u16 characteristics_count; 158162306a36Sopenharmony_ci u16 reserved; 158262306a36Sopenharmony_ci}; 158362306a36Sopenharmony_ci 158462306a36Sopenharmony_cistruct acpi_mpst_power_data { 158562306a36Sopenharmony_ci u8 structure_id; 158662306a36Sopenharmony_ci u8 flags; 158762306a36Sopenharmony_ci u16 reserved1; 158862306a36Sopenharmony_ci u32 average_power; 158962306a36Sopenharmony_ci u32 power_saving; 159062306a36Sopenharmony_ci u64 exit_latency; 159162306a36Sopenharmony_ci u64 reserved2; 159262306a36Sopenharmony_ci}; 159362306a36Sopenharmony_ci 159462306a36Sopenharmony_ci/* Values for Flags field above */ 159562306a36Sopenharmony_ci 159662306a36Sopenharmony_ci#define ACPI_MPST_PRESERVE 1 159762306a36Sopenharmony_ci#define ACPI_MPST_AUTOENTRY 2 159862306a36Sopenharmony_ci#define ACPI_MPST_AUTOEXIT 4 159962306a36Sopenharmony_ci 160062306a36Sopenharmony_ci/* Shared Memory Region (not part of an ACPI table) */ 160162306a36Sopenharmony_ci 160262306a36Sopenharmony_cistruct acpi_mpst_shared { 160362306a36Sopenharmony_ci u32 signature; 160462306a36Sopenharmony_ci u16 pcc_command; 160562306a36Sopenharmony_ci u16 pcc_status; 160662306a36Sopenharmony_ci u32 command_register; 160762306a36Sopenharmony_ci u32 status_register; 160862306a36Sopenharmony_ci u32 power_state_id; 160962306a36Sopenharmony_ci u32 power_node_id; 161062306a36Sopenharmony_ci u64 energy_consumed; 161162306a36Sopenharmony_ci u64 average_power; 161262306a36Sopenharmony_ci}; 161362306a36Sopenharmony_ci 161462306a36Sopenharmony_ci/******************************************************************************* 161562306a36Sopenharmony_ci * 161662306a36Sopenharmony_ci * MSCT - Maximum System Characteristics Table (ACPI 4.0) 161762306a36Sopenharmony_ci * Version 1 161862306a36Sopenharmony_ci * 161962306a36Sopenharmony_ci ******************************************************************************/ 162062306a36Sopenharmony_ci 162162306a36Sopenharmony_cistruct acpi_table_msct { 162262306a36Sopenharmony_ci struct acpi_table_header header; /* Common ACPI table header */ 162362306a36Sopenharmony_ci u32 proximity_offset; /* Location of proximity info struct(s) */ 162462306a36Sopenharmony_ci u32 max_proximity_domains; /* Max number of proximity domains */ 162562306a36Sopenharmony_ci u32 max_clock_domains; /* Max number of clock domains */ 162662306a36Sopenharmony_ci u64 max_address; /* Max physical address in system */ 162762306a36Sopenharmony_ci}; 162862306a36Sopenharmony_ci 162962306a36Sopenharmony_ci/* subtable - Maximum Proximity Domain Information. Version 1 */ 163062306a36Sopenharmony_ci 163162306a36Sopenharmony_cistruct acpi_msct_proximity { 163262306a36Sopenharmony_ci u8 revision; 163362306a36Sopenharmony_ci u8 length; 163462306a36Sopenharmony_ci u32 range_start; /* Start of domain range */ 163562306a36Sopenharmony_ci u32 range_end; /* End of domain range */ 163662306a36Sopenharmony_ci u32 processor_capacity; 163762306a36Sopenharmony_ci u64 memory_capacity; /* In bytes */ 163862306a36Sopenharmony_ci}; 163962306a36Sopenharmony_ci 164062306a36Sopenharmony_ci/******************************************************************************* 164162306a36Sopenharmony_ci * 164262306a36Sopenharmony_ci * MSDM - Microsoft Data Management table 164362306a36Sopenharmony_ci * 164462306a36Sopenharmony_ci * Conforms to "Microsoft Software Licensing Tables (SLIC and MSDM)", 164562306a36Sopenharmony_ci * November 29, 2011. Copyright 2011 Microsoft 164662306a36Sopenharmony_ci * 164762306a36Sopenharmony_ci ******************************************************************************/ 164862306a36Sopenharmony_ci 164962306a36Sopenharmony_ci/* Basic MSDM table is only the common ACPI header */ 165062306a36Sopenharmony_ci 165162306a36Sopenharmony_cistruct acpi_table_msdm { 165262306a36Sopenharmony_ci struct acpi_table_header header; /* Common ACPI table header */ 165362306a36Sopenharmony_ci}; 165462306a36Sopenharmony_ci 165562306a36Sopenharmony_ci/******************************************************************************* 165662306a36Sopenharmony_ci * 165762306a36Sopenharmony_ci * NFIT - NVDIMM Interface Table (ACPI 6.0+) 165862306a36Sopenharmony_ci * Version 1 165962306a36Sopenharmony_ci * 166062306a36Sopenharmony_ci ******************************************************************************/ 166162306a36Sopenharmony_ci 166262306a36Sopenharmony_cistruct acpi_table_nfit { 166362306a36Sopenharmony_ci struct acpi_table_header header; /* Common ACPI table header */ 166462306a36Sopenharmony_ci u32 reserved; /* Reserved, must be zero */ 166562306a36Sopenharmony_ci}; 166662306a36Sopenharmony_ci 166762306a36Sopenharmony_ci/* Subtable header for NFIT */ 166862306a36Sopenharmony_ci 166962306a36Sopenharmony_cistruct acpi_nfit_header { 167062306a36Sopenharmony_ci u16 type; 167162306a36Sopenharmony_ci u16 length; 167262306a36Sopenharmony_ci}; 167362306a36Sopenharmony_ci 167462306a36Sopenharmony_ci/* Values for subtable type in struct acpi_nfit_header */ 167562306a36Sopenharmony_ci 167662306a36Sopenharmony_cienum acpi_nfit_type { 167762306a36Sopenharmony_ci ACPI_NFIT_TYPE_SYSTEM_ADDRESS = 0, 167862306a36Sopenharmony_ci ACPI_NFIT_TYPE_MEMORY_MAP = 1, 167962306a36Sopenharmony_ci ACPI_NFIT_TYPE_INTERLEAVE = 2, 168062306a36Sopenharmony_ci ACPI_NFIT_TYPE_SMBIOS = 3, 168162306a36Sopenharmony_ci ACPI_NFIT_TYPE_CONTROL_REGION = 4, 168262306a36Sopenharmony_ci ACPI_NFIT_TYPE_DATA_REGION = 5, 168362306a36Sopenharmony_ci ACPI_NFIT_TYPE_FLUSH_ADDRESS = 6, 168462306a36Sopenharmony_ci ACPI_NFIT_TYPE_CAPABILITIES = 7, 168562306a36Sopenharmony_ci ACPI_NFIT_TYPE_RESERVED = 8 /* 8 and greater are reserved */ 168662306a36Sopenharmony_ci}; 168762306a36Sopenharmony_ci 168862306a36Sopenharmony_ci/* 168962306a36Sopenharmony_ci * NFIT Subtables 169062306a36Sopenharmony_ci */ 169162306a36Sopenharmony_ci 169262306a36Sopenharmony_ci/* 0: System Physical Address Range Structure */ 169362306a36Sopenharmony_ci 169462306a36Sopenharmony_cistruct acpi_nfit_system_address { 169562306a36Sopenharmony_ci struct acpi_nfit_header header; 169662306a36Sopenharmony_ci u16 range_index; 169762306a36Sopenharmony_ci u16 flags; 169862306a36Sopenharmony_ci u32 reserved; /* Reserved, must be zero */ 169962306a36Sopenharmony_ci u32 proximity_domain; 170062306a36Sopenharmony_ci u8 range_guid[16]; 170162306a36Sopenharmony_ci u64 address; 170262306a36Sopenharmony_ci u64 length; 170362306a36Sopenharmony_ci u64 memory_mapping; 170462306a36Sopenharmony_ci u64 location_cookie; /* ACPI 6.4 */ 170562306a36Sopenharmony_ci}; 170662306a36Sopenharmony_ci 170762306a36Sopenharmony_ci/* Flags */ 170862306a36Sopenharmony_ci 170962306a36Sopenharmony_ci#define ACPI_NFIT_ADD_ONLINE_ONLY (1) /* 00: Add/Online Operation Only */ 171062306a36Sopenharmony_ci#define ACPI_NFIT_PROXIMITY_VALID (1<<1) /* 01: Proximity Domain Valid */ 171162306a36Sopenharmony_ci#define ACPI_NFIT_LOCATION_COOKIE_VALID (1<<2) /* 02: SPA location cookie valid (ACPI 6.4) */ 171262306a36Sopenharmony_ci 171362306a36Sopenharmony_ci/* Range Type GUIDs appear in the include/acuuid.h file */ 171462306a36Sopenharmony_ci 171562306a36Sopenharmony_ci/* 1: Memory Device to System Address Range Map Structure */ 171662306a36Sopenharmony_ci 171762306a36Sopenharmony_cistruct acpi_nfit_memory_map { 171862306a36Sopenharmony_ci struct acpi_nfit_header header; 171962306a36Sopenharmony_ci u32 device_handle; 172062306a36Sopenharmony_ci u16 physical_id; 172162306a36Sopenharmony_ci u16 region_id; 172262306a36Sopenharmony_ci u16 range_index; 172362306a36Sopenharmony_ci u16 region_index; 172462306a36Sopenharmony_ci u64 region_size; 172562306a36Sopenharmony_ci u64 region_offset; 172662306a36Sopenharmony_ci u64 address; 172762306a36Sopenharmony_ci u16 interleave_index; 172862306a36Sopenharmony_ci u16 interleave_ways; 172962306a36Sopenharmony_ci u16 flags; 173062306a36Sopenharmony_ci u16 reserved; /* Reserved, must be zero */ 173162306a36Sopenharmony_ci}; 173262306a36Sopenharmony_ci 173362306a36Sopenharmony_ci/* Flags */ 173462306a36Sopenharmony_ci 173562306a36Sopenharmony_ci#define ACPI_NFIT_MEM_SAVE_FAILED (1) /* 00: Last SAVE to Memory Device failed */ 173662306a36Sopenharmony_ci#define ACPI_NFIT_MEM_RESTORE_FAILED (1<<1) /* 01: Last RESTORE from Memory Device failed */ 173762306a36Sopenharmony_ci#define ACPI_NFIT_MEM_FLUSH_FAILED (1<<2) /* 02: Platform flush failed */ 173862306a36Sopenharmony_ci#define ACPI_NFIT_MEM_NOT_ARMED (1<<3) /* 03: Memory Device is not armed */ 173962306a36Sopenharmony_ci#define ACPI_NFIT_MEM_HEALTH_OBSERVED (1<<4) /* 04: Memory Device observed SMART/health events */ 174062306a36Sopenharmony_ci#define ACPI_NFIT_MEM_HEALTH_ENABLED (1<<5) /* 05: SMART/health events enabled */ 174162306a36Sopenharmony_ci#define ACPI_NFIT_MEM_MAP_FAILED (1<<6) /* 06: Mapping to SPA failed */ 174262306a36Sopenharmony_ci 174362306a36Sopenharmony_ci/* 2: Interleave Structure */ 174462306a36Sopenharmony_ci 174562306a36Sopenharmony_cistruct acpi_nfit_interleave { 174662306a36Sopenharmony_ci struct acpi_nfit_header header; 174762306a36Sopenharmony_ci u16 interleave_index; 174862306a36Sopenharmony_ci u16 reserved; /* Reserved, must be zero */ 174962306a36Sopenharmony_ci u32 line_count; 175062306a36Sopenharmony_ci u32 line_size; 175162306a36Sopenharmony_ci u32 line_offset[]; /* Variable length */ 175262306a36Sopenharmony_ci}; 175362306a36Sopenharmony_ci 175462306a36Sopenharmony_ci/* 3: SMBIOS Management Information Structure */ 175562306a36Sopenharmony_ci 175662306a36Sopenharmony_cistruct acpi_nfit_smbios { 175762306a36Sopenharmony_ci struct acpi_nfit_header header; 175862306a36Sopenharmony_ci u32 reserved; /* Reserved, must be zero */ 175962306a36Sopenharmony_ci u8 data[]; /* Variable length */ 176062306a36Sopenharmony_ci}; 176162306a36Sopenharmony_ci 176262306a36Sopenharmony_ci/* 4: NVDIMM Control Region Structure */ 176362306a36Sopenharmony_ci 176462306a36Sopenharmony_cistruct acpi_nfit_control_region { 176562306a36Sopenharmony_ci struct acpi_nfit_header header; 176662306a36Sopenharmony_ci u16 region_index; 176762306a36Sopenharmony_ci u16 vendor_id; 176862306a36Sopenharmony_ci u16 device_id; 176962306a36Sopenharmony_ci u16 revision_id; 177062306a36Sopenharmony_ci u16 subsystem_vendor_id; 177162306a36Sopenharmony_ci u16 subsystem_device_id; 177262306a36Sopenharmony_ci u16 subsystem_revision_id; 177362306a36Sopenharmony_ci u8 valid_fields; 177462306a36Sopenharmony_ci u8 manufacturing_location; 177562306a36Sopenharmony_ci u16 manufacturing_date; 177662306a36Sopenharmony_ci u8 reserved[2]; /* Reserved, must be zero */ 177762306a36Sopenharmony_ci u32 serial_number; 177862306a36Sopenharmony_ci u16 code; 177962306a36Sopenharmony_ci u16 windows; 178062306a36Sopenharmony_ci u64 window_size; 178162306a36Sopenharmony_ci u64 command_offset; 178262306a36Sopenharmony_ci u64 command_size; 178362306a36Sopenharmony_ci u64 status_offset; 178462306a36Sopenharmony_ci u64 status_size; 178562306a36Sopenharmony_ci u16 flags; 178662306a36Sopenharmony_ci u8 reserved1[6]; /* Reserved, must be zero */ 178762306a36Sopenharmony_ci}; 178862306a36Sopenharmony_ci 178962306a36Sopenharmony_ci/* Flags */ 179062306a36Sopenharmony_ci 179162306a36Sopenharmony_ci#define ACPI_NFIT_CONTROL_BUFFERED (1) /* Block Data Windows implementation is buffered */ 179262306a36Sopenharmony_ci 179362306a36Sopenharmony_ci/* valid_fields bits */ 179462306a36Sopenharmony_ci 179562306a36Sopenharmony_ci#define ACPI_NFIT_CONTROL_MFG_INFO_VALID (1) /* Manufacturing fields are valid */ 179662306a36Sopenharmony_ci 179762306a36Sopenharmony_ci/* 5: NVDIMM Block Data Window Region Structure */ 179862306a36Sopenharmony_ci 179962306a36Sopenharmony_cistruct acpi_nfit_data_region { 180062306a36Sopenharmony_ci struct acpi_nfit_header header; 180162306a36Sopenharmony_ci u16 region_index; 180262306a36Sopenharmony_ci u16 windows; 180362306a36Sopenharmony_ci u64 offset; 180462306a36Sopenharmony_ci u64 size; 180562306a36Sopenharmony_ci u64 capacity; 180662306a36Sopenharmony_ci u64 start_address; 180762306a36Sopenharmony_ci}; 180862306a36Sopenharmony_ci 180962306a36Sopenharmony_ci/* 6: Flush Hint Address Structure */ 181062306a36Sopenharmony_ci 181162306a36Sopenharmony_cistruct acpi_nfit_flush_address { 181262306a36Sopenharmony_ci struct acpi_nfit_header header; 181362306a36Sopenharmony_ci u32 device_handle; 181462306a36Sopenharmony_ci u16 hint_count; 181562306a36Sopenharmony_ci u8 reserved[6]; /* Reserved, must be zero */ 181662306a36Sopenharmony_ci u64 hint_address[]; /* Variable length */ 181762306a36Sopenharmony_ci}; 181862306a36Sopenharmony_ci 181962306a36Sopenharmony_ci/* 7: Platform Capabilities Structure */ 182062306a36Sopenharmony_ci 182162306a36Sopenharmony_cistruct acpi_nfit_capabilities { 182262306a36Sopenharmony_ci struct acpi_nfit_header header; 182362306a36Sopenharmony_ci u8 highest_capability; 182462306a36Sopenharmony_ci u8 reserved[3]; /* Reserved, must be zero */ 182562306a36Sopenharmony_ci u32 capabilities; 182662306a36Sopenharmony_ci u32 reserved2; 182762306a36Sopenharmony_ci}; 182862306a36Sopenharmony_ci 182962306a36Sopenharmony_ci/* Capabilities Flags */ 183062306a36Sopenharmony_ci 183162306a36Sopenharmony_ci#define ACPI_NFIT_CAPABILITY_CACHE_FLUSH (1) /* 00: Cache Flush to NVDIMM capable */ 183262306a36Sopenharmony_ci#define ACPI_NFIT_CAPABILITY_MEM_FLUSH (1<<1) /* 01: Memory Flush to NVDIMM capable */ 183362306a36Sopenharmony_ci#define ACPI_NFIT_CAPABILITY_MEM_MIRRORING (1<<2) /* 02: Memory Mirroring capable */ 183462306a36Sopenharmony_ci 183562306a36Sopenharmony_ci/* 183662306a36Sopenharmony_ci * NFIT/DVDIMM device handle support - used as the _ADR for each NVDIMM 183762306a36Sopenharmony_ci */ 183862306a36Sopenharmony_cistruct nfit_device_handle { 183962306a36Sopenharmony_ci u32 handle; 184062306a36Sopenharmony_ci}; 184162306a36Sopenharmony_ci 184262306a36Sopenharmony_ci/* Device handle construction and extraction macros */ 184362306a36Sopenharmony_ci 184462306a36Sopenharmony_ci#define ACPI_NFIT_DIMM_NUMBER_MASK 0x0000000F 184562306a36Sopenharmony_ci#define ACPI_NFIT_CHANNEL_NUMBER_MASK 0x000000F0 184662306a36Sopenharmony_ci#define ACPI_NFIT_MEMORY_ID_MASK 0x00000F00 184762306a36Sopenharmony_ci#define ACPI_NFIT_SOCKET_ID_MASK 0x0000F000 184862306a36Sopenharmony_ci#define ACPI_NFIT_NODE_ID_MASK 0x0FFF0000 184962306a36Sopenharmony_ci 185062306a36Sopenharmony_ci#define ACPI_NFIT_DIMM_NUMBER_OFFSET 0 185162306a36Sopenharmony_ci#define ACPI_NFIT_CHANNEL_NUMBER_OFFSET 4 185262306a36Sopenharmony_ci#define ACPI_NFIT_MEMORY_ID_OFFSET 8 185362306a36Sopenharmony_ci#define ACPI_NFIT_SOCKET_ID_OFFSET 12 185462306a36Sopenharmony_ci#define ACPI_NFIT_NODE_ID_OFFSET 16 185562306a36Sopenharmony_ci 185662306a36Sopenharmony_ci/* Macro to construct a NFIT/NVDIMM device handle */ 185762306a36Sopenharmony_ci 185862306a36Sopenharmony_ci#define ACPI_NFIT_BUILD_DEVICE_HANDLE(dimm, channel, memory, socket, node) \ 185962306a36Sopenharmony_ci ((dimm) | \ 186062306a36Sopenharmony_ci ((channel) << ACPI_NFIT_CHANNEL_NUMBER_OFFSET) | \ 186162306a36Sopenharmony_ci ((memory) << ACPI_NFIT_MEMORY_ID_OFFSET) | \ 186262306a36Sopenharmony_ci ((socket) << ACPI_NFIT_SOCKET_ID_OFFSET) | \ 186362306a36Sopenharmony_ci ((node) << ACPI_NFIT_NODE_ID_OFFSET)) 186462306a36Sopenharmony_ci 186562306a36Sopenharmony_ci/* Macros to extract individual fields from a NFIT/NVDIMM device handle */ 186662306a36Sopenharmony_ci 186762306a36Sopenharmony_ci#define ACPI_NFIT_GET_DIMM_NUMBER(handle) \ 186862306a36Sopenharmony_ci ((handle) & ACPI_NFIT_DIMM_NUMBER_MASK) 186962306a36Sopenharmony_ci 187062306a36Sopenharmony_ci#define ACPI_NFIT_GET_CHANNEL_NUMBER(handle) \ 187162306a36Sopenharmony_ci (((handle) & ACPI_NFIT_CHANNEL_NUMBER_MASK) >> ACPI_NFIT_CHANNEL_NUMBER_OFFSET) 187262306a36Sopenharmony_ci 187362306a36Sopenharmony_ci#define ACPI_NFIT_GET_MEMORY_ID(handle) \ 187462306a36Sopenharmony_ci (((handle) & ACPI_NFIT_MEMORY_ID_MASK) >> ACPI_NFIT_MEMORY_ID_OFFSET) 187562306a36Sopenharmony_ci 187662306a36Sopenharmony_ci#define ACPI_NFIT_GET_SOCKET_ID(handle) \ 187762306a36Sopenharmony_ci (((handle) & ACPI_NFIT_SOCKET_ID_MASK) >> ACPI_NFIT_SOCKET_ID_OFFSET) 187862306a36Sopenharmony_ci 187962306a36Sopenharmony_ci#define ACPI_NFIT_GET_NODE_ID(handle) \ 188062306a36Sopenharmony_ci (((handle) & ACPI_NFIT_NODE_ID_MASK) >> ACPI_NFIT_NODE_ID_OFFSET) 188162306a36Sopenharmony_ci 188262306a36Sopenharmony_ci/******************************************************************************* 188362306a36Sopenharmony_ci * 188462306a36Sopenharmony_ci * NHLT - Non HD Audio Link Table 188562306a36Sopenharmony_ci * 188662306a36Sopenharmony_ci * Conforms to: Intel Smart Sound Technology NHLT Specification 188762306a36Sopenharmony_ci * Version 0.8.1, January 2020. 188862306a36Sopenharmony_ci * 188962306a36Sopenharmony_ci ******************************************************************************/ 189062306a36Sopenharmony_ci 189162306a36Sopenharmony_ci/* Main table */ 189262306a36Sopenharmony_ci 189362306a36Sopenharmony_cistruct acpi_table_nhlt { 189462306a36Sopenharmony_ci struct acpi_table_header header; /* Common ACPI table header */ 189562306a36Sopenharmony_ci u8 endpoint_count; 189662306a36Sopenharmony_ci}; 189762306a36Sopenharmony_ci 189862306a36Sopenharmony_cistruct acpi_nhlt_endpoint { 189962306a36Sopenharmony_ci u32 descriptor_length; 190062306a36Sopenharmony_ci u8 link_type; 190162306a36Sopenharmony_ci u8 instance_id; 190262306a36Sopenharmony_ci u16 vendor_id; 190362306a36Sopenharmony_ci u16 device_id; 190462306a36Sopenharmony_ci u16 revision_id; 190562306a36Sopenharmony_ci u32 subsystem_id; 190662306a36Sopenharmony_ci u8 device_type; 190762306a36Sopenharmony_ci u8 direction; 190862306a36Sopenharmony_ci u8 virtual_bus_id; 190962306a36Sopenharmony_ci}; 191062306a36Sopenharmony_ci 191162306a36Sopenharmony_ci/* Types for link_type field above */ 191262306a36Sopenharmony_ci 191362306a36Sopenharmony_ci#define ACPI_NHLT_RESERVED_HD_AUDIO 0 191462306a36Sopenharmony_ci#define ACPI_NHLT_RESERVED_DSP 1 191562306a36Sopenharmony_ci#define ACPI_NHLT_PDM 2 191662306a36Sopenharmony_ci#define ACPI_NHLT_SSP 3 191762306a36Sopenharmony_ci#define ACPI_NHLT_RESERVED_SLIMBUS 4 191862306a36Sopenharmony_ci#define ACPI_NHLT_RESERVED_SOUNDWIRE 5 191962306a36Sopenharmony_ci#define ACPI_NHLT_TYPE_RESERVED 6 /* 6 and above are reserved */ 192062306a36Sopenharmony_ci 192162306a36Sopenharmony_ci/* All other values above are reserved */ 192262306a36Sopenharmony_ci 192362306a36Sopenharmony_ci/* Values for device_id field above */ 192462306a36Sopenharmony_ci 192562306a36Sopenharmony_ci#define ACPI_NHLT_PDM_DMIC 0xAE20 192662306a36Sopenharmony_ci#define ACPI_NHLT_BT_SIDEBAND 0xAE30 192762306a36Sopenharmony_ci#define ACPI_NHLT_I2S_TDM_CODECS 0xAE23 192862306a36Sopenharmony_ci 192962306a36Sopenharmony_ci/* Values for device_type field above */ 193062306a36Sopenharmony_ci 193162306a36Sopenharmony_ci/* SSP Link */ 193262306a36Sopenharmony_ci 193362306a36Sopenharmony_ci#define ACPI_NHLT_LINK_BT_SIDEBAND 0 193462306a36Sopenharmony_ci#define ACPI_NHLT_LINK_FM 1 193562306a36Sopenharmony_ci#define ACPI_NHLT_LINK_MODEM 2 193662306a36Sopenharmony_ci/* 3 is reserved */ 193762306a36Sopenharmony_ci#define ACPI_NHLT_LINK_SSP_ANALOG_CODEC 4 193862306a36Sopenharmony_ci 193962306a36Sopenharmony_ci/* PDM Link */ 194062306a36Sopenharmony_ci 194162306a36Sopenharmony_ci#define ACPI_NHLT_PDM_ON_CAVS_1P8 0 194262306a36Sopenharmony_ci#define ACPI_NHLT_PDM_ON_CAVS_1P5 1 194362306a36Sopenharmony_ci 194462306a36Sopenharmony_ci/* Values for Direction field above */ 194562306a36Sopenharmony_ci 194662306a36Sopenharmony_ci#define ACPI_NHLT_DIR_RENDER 0 194762306a36Sopenharmony_ci#define ACPI_NHLT_DIR_CAPTURE 1 194862306a36Sopenharmony_ci#define ACPI_NHLT_DIR_RENDER_LOOPBACK 2 194962306a36Sopenharmony_ci#define ACPI_NHLT_DIR_RENDER_FEEDBACK 3 195062306a36Sopenharmony_ci#define ACPI_NHLT_DIR_RESERVED 4 /* 4 and above are reserved */ 195162306a36Sopenharmony_ci 195262306a36Sopenharmony_cistruct acpi_nhlt_device_specific_config { 195362306a36Sopenharmony_ci u32 capabilities_size; 195462306a36Sopenharmony_ci u8 virtual_slot; 195562306a36Sopenharmony_ci u8 config_type; 195662306a36Sopenharmony_ci}; 195762306a36Sopenharmony_ci 195862306a36Sopenharmony_cistruct acpi_nhlt_device_specific_config_a { 195962306a36Sopenharmony_ci u32 capabilities_size; 196062306a36Sopenharmony_ci u8 virtual_slot; 196162306a36Sopenharmony_ci u8 config_type; 196262306a36Sopenharmony_ci u8 array_type; 196362306a36Sopenharmony_ci}; 196462306a36Sopenharmony_ci 196562306a36Sopenharmony_ci/* Values for Config Type above */ 196662306a36Sopenharmony_ci 196762306a36Sopenharmony_ci#define ACPI_NHLT_CONFIG_TYPE_GENERIC 0x00 196862306a36Sopenharmony_ci#define ACPI_NHLT_CONFIG_TYPE_MIC_ARRAY 0x01 196962306a36Sopenharmony_ci#define ACPI_NHLT_CONFIG_TYPE_RENDER_FEEDBACK 0x03 197062306a36Sopenharmony_ci#define ACPI_NHLT_CONFIG_TYPE_RESERVED 0x04 /* 4 and above are reserved */ 197162306a36Sopenharmony_ci 197262306a36Sopenharmony_cistruct acpi_nhlt_device_specific_config_b { 197362306a36Sopenharmony_ci u32 capabilities_size; 197462306a36Sopenharmony_ci}; 197562306a36Sopenharmony_ci 197662306a36Sopenharmony_cistruct acpi_nhlt_device_specific_config_c { 197762306a36Sopenharmony_ci u32 capabilities_size; 197862306a36Sopenharmony_ci u8 virtual_slot; 197962306a36Sopenharmony_ci}; 198062306a36Sopenharmony_ci 198162306a36Sopenharmony_cistruct acpi_nhlt_render_device_specific_config { 198262306a36Sopenharmony_ci u32 capabilities_size; 198362306a36Sopenharmony_ci u8 virtual_slot; 198462306a36Sopenharmony_ci}; 198562306a36Sopenharmony_ci 198662306a36Sopenharmony_cistruct acpi_nhlt_wave_extensible { 198762306a36Sopenharmony_ci u16 format_tag; 198862306a36Sopenharmony_ci u16 channel_count; 198962306a36Sopenharmony_ci u32 samples_per_sec; 199062306a36Sopenharmony_ci u32 avg_bytes_per_sec; 199162306a36Sopenharmony_ci u16 block_align; 199262306a36Sopenharmony_ci u16 bits_per_sample; 199362306a36Sopenharmony_ci u16 extra_format_size; 199462306a36Sopenharmony_ci u16 valid_bits_per_sample; 199562306a36Sopenharmony_ci u32 channel_mask; 199662306a36Sopenharmony_ci u8 sub_format_guid[16]; 199762306a36Sopenharmony_ci}; 199862306a36Sopenharmony_ci 199962306a36Sopenharmony_ci/* Values for channel_mask above */ 200062306a36Sopenharmony_ci 200162306a36Sopenharmony_ci#define ACPI_NHLT_SPKR_FRONT_LEFT 0x1 200262306a36Sopenharmony_ci#define ACPI_NHLT_SPKR_FRONT_RIGHT 0x2 200362306a36Sopenharmony_ci#define ACPI_NHLT_SPKR_FRONT_CENTER 0x4 200462306a36Sopenharmony_ci#define ACPI_NHLT_SPKR_LOW_FREQ 0x8 200562306a36Sopenharmony_ci#define ACPI_NHLT_SPKR_BACK_LEFT 0x10 200662306a36Sopenharmony_ci#define ACPI_NHLT_SPKR_BACK_RIGHT 0x20 200762306a36Sopenharmony_ci#define ACPI_NHLT_SPKR_FRONT_LEFT_OF_CENTER 0x40 200862306a36Sopenharmony_ci#define ACPI_NHLT_SPKR_FRONT_RIGHT_OF_CENTER 0x80 200962306a36Sopenharmony_ci#define ACPI_NHLT_SPKR_BACK_CENTER 0x100 201062306a36Sopenharmony_ci#define ACPI_NHLT_SPKR_SIDE_LEFT 0x200 201162306a36Sopenharmony_ci#define ACPI_NHLT_SPKR_SIDE_RIGHT 0x400 201262306a36Sopenharmony_ci#define ACPI_NHLT_SPKR_TOP_CENTER 0x800 201362306a36Sopenharmony_ci#define ACPI_NHLT_SPKR_TOP_FRONT_LEFT 0x1000 201462306a36Sopenharmony_ci#define ACPI_NHLT_SPKR_TOP_FRONT_CENTER 0x2000 201562306a36Sopenharmony_ci#define ACPI_NHLT_SPKR_TOP_FRONT_RIGHT 0x4000 201662306a36Sopenharmony_ci#define ACPI_NHLT_SPKR_TOP_BACK_LEFT 0x8000 201762306a36Sopenharmony_ci#define ACPI_NHLT_SPKR_TOP_BACK_CENTER 0x10000 201862306a36Sopenharmony_ci#define ACPI_NHLT_SPKR_TOP_BACK_RIGHT 0x20000 201962306a36Sopenharmony_ci 202062306a36Sopenharmony_cistruct acpi_nhlt_format_config { 202162306a36Sopenharmony_ci struct acpi_nhlt_wave_extensible format; 202262306a36Sopenharmony_ci u32 capability_size; 202362306a36Sopenharmony_ci u8 capabilities[]; 202462306a36Sopenharmony_ci}; 202562306a36Sopenharmony_ci 202662306a36Sopenharmony_cistruct acpi_nhlt_formats_config { 202762306a36Sopenharmony_ci u8 formats_count; 202862306a36Sopenharmony_ci}; 202962306a36Sopenharmony_ci 203062306a36Sopenharmony_cistruct acpi_nhlt_device_specific_hdr { 203162306a36Sopenharmony_ci u8 virtual_slot; 203262306a36Sopenharmony_ci u8 config_type; 203362306a36Sopenharmony_ci}; 203462306a36Sopenharmony_ci 203562306a36Sopenharmony_ci/* Types for config_type above */ 203662306a36Sopenharmony_ci 203762306a36Sopenharmony_ci#define ACPI_NHLT_GENERIC 0 203862306a36Sopenharmony_ci#define ACPI_NHLT_MIC 1 203962306a36Sopenharmony_ci#define ACPI_NHLT_RENDER 3 204062306a36Sopenharmony_ci 204162306a36Sopenharmony_cistruct acpi_nhlt_mic_device_specific_config { 204262306a36Sopenharmony_ci struct acpi_nhlt_device_specific_hdr device_config; 204362306a36Sopenharmony_ci u8 array_type_ext; 204462306a36Sopenharmony_ci}; 204562306a36Sopenharmony_ci 204662306a36Sopenharmony_ci/* Values for array_type_ext above */ 204762306a36Sopenharmony_ci 204862306a36Sopenharmony_ci#define ACPI_NHLT_ARRAY_TYPE_RESERVED 0x09 /* 9 and below are reserved */ 204962306a36Sopenharmony_ci#define ACPI_NHLT_SMALL_LINEAR_2ELEMENT 0x0A 205062306a36Sopenharmony_ci#define ACPI_NHLT_BIG_LINEAR_2ELEMENT 0x0B 205162306a36Sopenharmony_ci#define ACPI_NHLT_FIRST_GEOMETRY_LINEAR_4ELEMENT 0x0C 205262306a36Sopenharmony_ci#define ACPI_NHLT_PLANAR_LSHAPED_4ELEMENT 0x0D 205362306a36Sopenharmony_ci#define ACPI_NHLT_SECOND_GEOMETRY_LINEAR_4ELEMENT 0x0E 205462306a36Sopenharmony_ci#define ACPI_NHLT_VENDOR_DEFINED 0x0F 205562306a36Sopenharmony_ci#define ACPI_NHLT_ARRAY_TYPE_MASK 0x0F 205662306a36Sopenharmony_ci#define ACPI_NHLT_ARRAY_TYPE_EXT_MASK 0x10 205762306a36Sopenharmony_ci 205862306a36Sopenharmony_ci#define ACPI_NHLT_NO_EXTENSION 0x0 205962306a36Sopenharmony_ci#define ACPI_NHLT_MIC_SNR_SENSITIVITY_EXT (1<<4) 206062306a36Sopenharmony_ci 206162306a36Sopenharmony_cistruct acpi_nhlt_vendor_mic_count { 206262306a36Sopenharmony_ci u8 microphone_count; 206362306a36Sopenharmony_ci}; 206462306a36Sopenharmony_ci 206562306a36Sopenharmony_cistruct acpi_nhlt_vendor_mic_config { 206662306a36Sopenharmony_ci u8 type; 206762306a36Sopenharmony_ci u8 panel; 206862306a36Sopenharmony_ci u16 speaker_position_distance; /* mm */ 206962306a36Sopenharmony_ci u16 horizontal_offset; /* mm */ 207062306a36Sopenharmony_ci u16 vertical_offset; /* mm */ 207162306a36Sopenharmony_ci u8 frequency_low_band; /* 5*Hz */ 207262306a36Sopenharmony_ci u8 frequency_high_band; /* 500*Hz */ 207362306a36Sopenharmony_ci u16 direction_angle; /* -180 - + 180 */ 207462306a36Sopenharmony_ci u16 elevation_angle; /* -180 - + 180 */ 207562306a36Sopenharmony_ci u16 work_vertical_angle_begin; /* -180 - + 180 with 2 deg step */ 207662306a36Sopenharmony_ci u16 work_vertical_angle_end; /* -180 - + 180 with 2 deg step */ 207762306a36Sopenharmony_ci u16 work_horizontal_angle_begin; /* -180 - + 180 with 2 deg step */ 207862306a36Sopenharmony_ci u16 work_horizontal_angle_end; /* -180 - + 180 with 2 deg step */ 207962306a36Sopenharmony_ci}; 208062306a36Sopenharmony_ci 208162306a36Sopenharmony_ci/* Values for Type field above */ 208262306a36Sopenharmony_ci 208362306a36Sopenharmony_ci#define ACPI_NHLT_MIC_OMNIDIRECTIONAL 0 208462306a36Sopenharmony_ci#define ACPI_NHLT_MIC_SUBCARDIOID 1 208562306a36Sopenharmony_ci#define ACPI_NHLT_MIC_CARDIOID 2 208662306a36Sopenharmony_ci#define ACPI_NHLT_MIC_SUPER_CARDIOID 3 208762306a36Sopenharmony_ci#define ACPI_NHLT_MIC_HYPER_CARDIOID 4 208862306a36Sopenharmony_ci#define ACPI_NHLT_MIC_8_SHAPED 5 208962306a36Sopenharmony_ci#define ACPI_NHLT_MIC_RESERVED6 6 /* 6 is reserved */ 209062306a36Sopenharmony_ci#define ACPI_NHLT_MIC_VENDOR_DEFINED 7 209162306a36Sopenharmony_ci#define ACPI_NHLT_MIC_RESERVED 8 /* 8 and above are reserved */ 209262306a36Sopenharmony_ci 209362306a36Sopenharmony_ci/* Values for Panel field above */ 209462306a36Sopenharmony_ci 209562306a36Sopenharmony_ci#define ACPI_NHLT_MIC_POSITION_TOP 0 209662306a36Sopenharmony_ci#define ACPI_NHLT_MIC_POSITION_BOTTOM 1 209762306a36Sopenharmony_ci#define ACPI_NHLT_MIC_POSITION_LEFT 2 209862306a36Sopenharmony_ci#define ACPI_NHLT_MIC_POSITION_RIGHT 3 209962306a36Sopenharmony_ci#define ACPI_NHLT_MIC_POSITION_FRONT 4 210062306a36Sopenharmony_ci#define ACPI_NHLT_MIC_POSITION_BACK 5 210162306a36Sopenharmony_ci#define ACPI_NHLT_MIC_POSITION_RESERVED 6 /* 6 and above are reserved */ 210262306a36Sopenharmony_ci 210362306a36Sopenharmony_cistruct acpi_nhlt_vendor_mic_device_specific_config { 210462306a36Sopenharmony_ci struct acpi_nhlt_mic_device_specific_config mic_array_device_config; 210562306a36Sopenharmony_ci u8 number_of_microphones; 210662306a36Sopenharmony_ci struct acpi_nhlt_vendor_mic_config mic_config[]; /* Indexed by number_of_microphones */ 210762306a36Sopenharmony_ci}; 210862306a36Sopenharmony_ci 210962306a36Sopenharmony_ci/* Microphone SNR and Sensitivity extension */ 211062306a36Sopenharmony_ci 211162306a36Sopenharmony_cistruct acpi_nhlt_mic_snr_sensitivity_extension { 211262306a36Sopenharmony_ci u32 SNR; 211362306a36Sopenharmony_ci u32 sensitivity; 211462306a36Sopenharmony_ci}; 211562306a36Sopenharmony_ci 211662306a36Sopenharmony_ci/* Render device with feedback */ 211762306a36Sopenharmony_ci 211862306a36Sopenharmony_cistruct acpi_nhlt_render_feedback_device_specific_config { 211962306a36Sopenharmony_ci u8 feedback_virtual_slot; /* Render slot in case of capture */ 212062306a36Sopenharmony_ci u16 feedback_channels; /* Informative only */ 212162306a36Sopenharmony_ci u16 feedback_valid_bits_per_sample; 212262306a36Sopenharmony_ci}; 212362306a36Sopenharmony_ci 212462306a36Sopenharmony_ci/* Non documented structures */ 212562306a36Sopenharmony_ci 212662306a36Sopenharmony_cistruct acpi_nhlt_device_info_count { 212762306a36Sopenharmony_ci u8 structure_count; 212862306a36Sopenharmony_ci}; 212962306a36Sopenharmony_ci 213062306a36Sopenharmony_cistruct acpi_nhlt_device_info { 213162306a36Sopenharmony_ci u8 device_id[16]; 213262306a36Sopenharmony_ci u8 device_instance_id; 213362306a36Sopenharmony_ci u8 device_port_id; 213462306a36Sopenharmony_ci}; 213562306a36Sopenharmony_ci 213662306a36Sopenharmony_ci/******************************************************************************* 213762306a36Sopenharmony_ci * 213862306a36Sopenharmony_ci * PCCT - Platform Communications Channel Table (ACPI 5.0) 213962306a36Sopenharmony_ci * Version 2 (ACPI 6.2) 214062306a36Sopenharmony_ci * 214162306a36Sopenharmony_ci ******************************************************************************/ 214262306a36Sopenharmony_ci 214362306a36Sopenharmony_cistruct acpi_table_pcct { 214462306a36Sopenharmony_ci struct acpi_table_header header; /* Common ACPI table header */ 214562306a36Sopenharmony_ci u32 flags; 214662306a36Sopenharmony_ci u64 reserved; 214762306a36Sopenharmony_ci}; 214862306a36Sopenharmony_ci 214962306a36Sopenharmony_ci/* Values for Flags field above */ 215062306a36Sopenharmony_ci 215162306a36Sopenharmony_ci#define ACPI_PCCT_DOORBELL 1 215262306a36Sopenharmony_ci 215362306a36Sopenharmony_ci/* Values for subtable type in struct acpi_subtable_header */ 215462306a36Sopenharmony_ci 215562306a36Sopenharmony_cienum acpi_pcct_type { 215662306a36Sopenharmony_ci ACPI_PCCT_TYPE_GENERIC_SUBSPACE = 0, 215762306a36Sopenharmony_ci ACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE = 1, 215862306a36Sopenharmony_ci ACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE_TYPE2 = 2, /* ACPI 6.1 */ 215962306a36Sopenharmony_ci ACPI_PCCT_TYPE_EXT_PCC_MASTER_SUBSPACE = 3, /* ACPI 6.2 */ 216062306a36Sopenharmony_ci ACPI_PCCT_TYPE_EXT_PCC_SLAVE_SUBSPACE = 4, /* ACPI 6.2 */ 216162306a36Sopenharmony_ci ACPI_PCCT_TYPE_HW_REG_COMM_SUBSPACE = 5, /* ACPI 6.4 */ 216262306a36Sopenharmony_ci ACPI_PCCT_TYPE_RESERVED = 6 /* 6 and greater are reserved */ 216362306a36Sopenharmony_ci}; 216462306a36Sopenharmony_ci 216562306a36Sopenharmony_ci/* 216662306a36Sopenharmony_ci * PCCT Subtables, correspond to Type in struct acpi_subtable_header 216762306a36Sopenharmony_ci */ 216862306a36Sopenharmony_ci 216962306a36Sopenharmony_ci/* 0: Generic Communications Subspace */ 217062306a36Sopenharmony_ci 217162306a36Sopenharmony_cistruct acpi_pcct_subspace { 217262306a36Sopenharmony_ci struct acpi_subtable_header header; 217362306a36Sopenharmony_ci u8 reserved[6]; 217462306a36Sopenharmony_ci u64 base_address; 217562306a36Sopenharmony_ci u64 length; 217662306a36Sopenharmony_ci struct acpi_generic_address doorbell_register; 217762306a36Sopenharmony_ci u64 preserve_mask; 217862306a36Sopenharmony_ci u64 write_mask; 217962306a36Sopenharmony_ci u32 latency; 218062306a36Sopenharmony_ci u32 max_access_rate; 218162306a36Sopenharmony_ci u16 min_turnaround_time; 218262306a36Sopenharmony_ci}; 218362306a36Sopenharmony_ci 218462306a36Sopenharmony_ci/* 1: HW-reduced Communications Subspace (ACPI 5.1) */ 218562306a36Sopenharmony_ci 218662306a36Sopenharmony_cistruct acpi_pcct_hw_reduced { 218762306a36Sopenharmony_ci struct acpi_subtable_header header; 218862306a36Sopenharmony_ci u32 platform_interrupt; 218962306a36Sopenharmony_ci u8 flags; 219062306a36Sopenharmony_ci u8 reserved; 219162306a36Sopenharmony_ci u64 base_address; 219262306a36Sopenharmony_ci u64 length; 219362306a36Sopenharmony_ci struct acpi_generic_address doorbell_register; 219462306a36Sopenharmony_ci u64 preserve_mask; 219562306a36Sopenharmony_ci u64 write_mask; 219662306a36Sopenharmony_ci u32 latency; 219762306a36Sopenharmony_ci u32 max_access_rate; 219862306a36Sopenharmony_ci u16 min_turnaround_time; 219962306a36Sopenharmony_ci}; 220062306a36Sopenharmony_ci 220162306a36Sopenharmony_ci/* 2: HW-reduced Communications Subspace Type 2 (ACPI 6.1) */ 220262306a36Sopenharmony_ci 220362306a36Sopenharmony_cistruct acpi_pcct_hw_reduced_type2 { 220462306a36Sopenharmony_ci struct acpi_subtable_header header; 220562306a36Sopenharmony_ci u32 platform_interrupt; 220662306a36Sopenharmony_ci u8 flags; 220762306a36Sopenharmony_ci u8 reserved; 220862306a36Sopenharmony_ci u64 base_address; 220962306a36Sopenharmony_ci u64 length; 221062306a36Sopenharmony_ci struct acpi_generic_address doorbell_register; 221162306a36Sopenharmony_ci u64 preserve_mask; 221262306a36Sopenharmony_ci u64 write_mask; 221362306a36Sopenharmony_ci u32 latency; 221462306a36Sopenharmony_ci u32 max_access_rate; 221562306a36Sopenharmony_ci u16 min_turnaround_time; 221662306a36Sopenharmony_ci struct acpi_generic_address platform_ack_register; 221762306a36Sopenharmony_ci u64 ack_preserve_mask; 221862306a36Sopenharmony_ci u64 ack_write_mask; 221962306a36Sopenharmony_ci}; 222062306a36Sopenharmony_ci 222162306a36Sopenharmony_ci/* 3: Extended PCC Master Subspace Type 3 (ACPI 6.2) */ 222262306a36Sopenharmony_ci 222362306a36Sopenharmony_cistruct acpi_pcct_ext_pcc_master { 222462306a36Sopenharmony_ci struct acpi_subtable_header header; 222562306a36Sopenharmony_ci u32 platform_interrupt; 222662306a36Sopenharmony_ci u8 flags; 222762306a36Sopenharmony_ci u8 reserved1; 222862306a36Sopenharmony_ci u64 base_address; 222962306a36Sopenharmony_ci u32 length; 223062306a36Sopenharmony_ci struct acpi_generic_address doorbell_register; 223162306a36Sopenharmony_ci u64 preserve_mask; 223262306a36Sopenharmony_ci u64 write_mask; 223362306a36Sopenharmony_ci u32 latency; 223462306a36Sopenharmony_ci u32 max_access_rate; 223562306a36Sopenharmony_ci u32 min_turnaround_time; 223662306a36Sopenharmony_ci struct acpi_generic_address platform_ack_register; 223762306a36Sopenharmony_ci u64 ack_preserve_mask; 223862306a36Sopenharmony_ci u64 ack_set_mask; 223962306a36Sopenharmony_ci u64 reserved2; 224062306a36Sopenharmony_ci struct acpi_generic_address cmd_complete_register; 224162306a36Sopenharmony_ci u64 cmd_complete_mask; 224262306a36Sopenharmony_ci struct acpi_generic_address cmd_update_register; 224362306a36Sopenharmony_ci u64 cmd_update_preserve_mask; 224462306a36Sopenharmony_ci u64 cmd_update_set_mask; 224562306a36Sopenharmony_ci struct acpi_generic_address error_status_register; 224662306a36Sopenharmony_ci u64 error_status_mask; 224762306a36Sopenharmony_ci}; 224862306a36Sopenharmony_ci 224962306a36Sopenharmony_ci/* 4: Extended PCC Slave Subspace Type 4 (ACPI 6.2) */ 225062306a36Sopenharmony_ci 225162306a36Sopenharmony_cistruct acpi_pcct_ext_pcc_slave { 225262306a36Sopenharmony_ci struct acpi_subtable_header header; 225362306a36Sopenharmony_ci u32 platform_interrupt; 225462306a36Sopenharmony_ci u8 flags; 225562306a36Sopenharmony_ci u8 reserved1; 225662306a36Sopenharmony_ci u64 base_address; 225762306a36Sopenharmony_ci u32 length; 225862306a36Sopenharmony_ci struct acpi_generic_address doorbell_register; 225962306a36Sopenharmony_ci u64 preserve_mask; 226062306a36Sopenharmony_ci u64 write_mask; 226162306a36Sopenharmony_ci u32 latency; 226262306a36Sopenharmony_ci u32 max_access_rate; 226362306a36Sopenharmony_ci u32 min_turnaround_time; 226462306a36Sopenharmony_ci struct acpi_generic_address platform_ack_register; 226562306a36Sopenharmony_ci u64 ack_preserve_mask; 226662306a36Sopenharmony_ci u64 ack_set_mask; 226762306a36Sopenharmony_ci u64 reserved2; 226862306a36Sopenharmony_ci struct acpi_generic_address cmd_complete_register; 226962306a36Sopenharmony_ci u64 cmd_complete_mask; 227062306a36Sopenharmony_ci struct acpi_generic_address cmd_update_register; 227162306a36Sopenharmony_ci u64 cmd_update_preserve_mask; 227262306a36Sopenharmony_ci u64 cmd_update_set_mask; 227362306a36Sopenharmony_ci struct acpi_generic_address error_status_register; 227462306a36Sopenharmony_ci u64 error_status_mask; 227562306a36Sopenharmony_ci}; 227662306a36Sopenharmony_ci 227762306a36Sopenharmony_ci/* 5: HW Registers based Communications Subspace */ 227862306a36Sopenharmony_ci 227962306a36Sopenharmony_cistruct acpi_pcct_hw_reg { 228062306a36Sopenharmony_ci struct acpi_subtable_header header; 228162306a36Sopenharmony_ci u16 version; 228262306a36Sopenharmony_ci u64 base_address; 228362306a36Sopenharmony_ci u64 length; 228462306a36Sopenharmony_ci struct acpi_generic_address doorbell_register; 228562306a36Sopenharmony_ci u64 doorbell_preserve; 228662306a36Sopenharmony_ci u64 doorbell_write; 228762306a36Sopenharmony_ci struct acpi_generic_address cmd_complete_register; 228862306a36Sopenharmony_ci u64 cmd_complete_mask; 228962306a36Sopenharmony_ci struct acpi_generic_address error_status_register; 229062306a36Sopenharmony_ci u64 error_status_mask; 229162306a36Sopenharmony_ci u32 nominal_latency; 229262306a36Sopenharmony_ci u32 min_turnaround_time; 229362306a36Sopenharmony_ci}; 229462306a36Sopenharmony_ci 229562306a36Sopenharmony_ci/* Values for doorbell flags above */ 229662306a36Sopenharmony_ci 229762306a36Sopenharmony_ci#define ACPI_PCCT_INTERRUPT_POLARITY (1) 229862306a36Sopenharmony_ci#define ACPI_PCCT_INTERRUPT_MODE (1<<1) 229962306a36Sopenharmony_ci 230062306a36Sopenharmony_ci/* 230162306a36Sopenharmony_ci * PCC memory structures (not part of the ACPI table) 230262306a36Sopenharmony_ci */ 230362306a36Sopenharmony_ci 230462306a36Sopenharmony_ci/* Shared Memory Region */ 230562306a36Sopenharmony_ci 230662306a36Sopenharmony_cistruct acpi_pcct_shared_memory { 230762306a36Sopenharmony_ci u32 signature; 230862306a36Sopenharmony_ci u16 command; 230962306a36Sopenharmony_ci u16 status; 231062306a36Sopenharmony_ci}; 231162306a36Sopenharmony_ci 231262306a36Sopenharmony_ci/* Extended PCC Subspace Shared Memory Region (ACPI 6.2) */ 231362306a36Sopenharmony_ci 231462306a36Sopenharmony_cistruct acpi_pcct_ext_pcc_shared_memory { 231562306a36Sopenharmony_ci u32 signature; 231662306a36Sopenharmony_ci u32 flags; 231762306a36Sopenharmony_ci u32 length; 231862306a36Sopenharmony_ci u32 command; 231962306a36Sopenharmony_ci}; 232062306a36Sopenharmony_ci 232162306a36Sopenharmony_ci/******************************************************************************* 232262306a36Sopenharmony_ci * 232362306a36Sopenharmony_ci * PDTT - Platform Debug Trigger Table (ACPI 6.2) 232462306a36Sopenharmony_ci * Version 0 232562306a36Sopenharmony_ci * 232662306a36Sopenharmony_ci ******************************************************************************/ 232762306a36Sopenharmony_ci 232862306a36Sopenharmony_cistruct acpi_table_pdtt { 232962306a36Sopenharmony_ci struct acpi_table_header header; /* Common ACPI table header */ 233062306a36Sopenharmony_ci u8 trigger_count; 233162306a36Sopenharmony_ci u8 reserved[3]; 233262306a36Sopenharmony_ci u32 array_offset; 233362306a36Sopenharmony_ci}; 233462306a36Sopenharmony_ci 233562306a36Sopenharmony_ci/* 233662306a36Sopenharmony_ci * PDTT Communication Channel Identifier Structure. 233762306a36Sopenharmony_ci * The number of these structures is defined by trigger_count above, 233862306a36Sopenharmony_ci * starting at array_offset. 233962306a36Sopenharmony_ci */ 234062306a36Sopenharmony_cistruct acpi_pdtt_channel { 234162306a36Sopenharmony_ci u8 subchannel_id; 234262306a36Sopenharmony_ci u8 flags; 234362306a36Sopenharmony_ci}; 234462306a36Sopenharmony_ci 234562306a36Sopenharmony_ci/* Flags for above */ 234662306a36Sopenharmony_ci 234762306a36Sopenharmony_ci#define ACPI_PDTT_RUNTIME_TRIGGER (1) 234862306a36Sopenharmony_ci#define ACPI_PDTT_WAIT_COMPLETION (1<<1) 234962306a36Sopenharmony_ci#define ACPI_PDTT_TRIGGER_ORDER (1<<2) 235062306a36Sopenharmony_ci 235162306a36Sopenharmony_ci/******************************************************************************* 235262306a36Sopenharmony_ci * 235362306a36Sopenharmony_ci * PHAT - Platform Health Assessment Table (ACPI 6.4) 235462306a36Sopenharmony_ci * Version 1 235562306a36Sopenharmony_ci * 235662306a36Sopenharmony_ci ******************************************************************************/ 235762306a36Sopenharmony_ci 235862306a36Sopenharmony_cistruct acpi_table_phat { 235962306a36Sopenharmony_ci struct acpi_table_header header; /* Common ACPI table header */ 236062306a36Sopenharmony_ci}; 236162306a36Sopenharmony_ci 236262306a36Sopenharmony_ci/* Common header for PHAT subtables that follow main table */ 236362306a36Sopenharmony_ci 236462306a36Sopenharmony_cistruct acpi_phat_header { 236562306a36Sopenharmony_ci u16 type; 236662306a36Sopenharmony_ci u16 length; 236762306a36Sopenharmony_ci u8 revision; 236862306a36Sopenharmony_ci}; 236962306a36Sopenharmony_ci 237062306a36Sopenharmony_ci/* Values for Type field above */ 237162306a36Sopenharmony_ci 237262306a36Sopenharmony_ci#define ACPI_PHAT_TYPE_FW_VERSION_DATA 0 237362306a36Sopenharmony_ci#define ACPI_PHAT_TYPE_FW_HEALTH_DATA 1 237462306a36Sopenharmony_ci#define ACPI_PHAT_TYPE_RESERVED 2 /* 0x02-0xFFFF are reserved */ 237562306a36Sopenharmony_ci 237662306a36Sopenharmony_ci/* 237762306a36Sopenharmony_ci * PHAT subtables, correspond to Type in struct acpi_phat_header 237862306a36Sopenharmony_ci */ 237962306a36Sopenharmony_ci 238062306a36Sopenharmony_ci/* 0: Firmware Version Data Record */ 238162306a36Sopenharmony_ci 238262306a36Sopenharmony_cistruct acpi_phat_version_data { 238362306a36Sopenharmony_ci struct acpi_phat_header header; 238462306a36Sopenharmony_ci u8 reserved[3]; 238562306a36Sopenharmony_ci u32 element_count; 238662306a36Sopenharmony_ci}; 238762306a36Sopenharmony_ci 238862306a36Sopenharmony_cistruct acpi_phat_version_element { 238962306a36Sopenharmony_ci u8 guid[16]; 239062306a36Sopenharmony_ci u64 version_value; 239162306a36Sopenharmony_ci u32 producer_id; 239262306a36Sopenharmony_ci}; 239362306a36Sopenharmony_ci 239462306a36Sopenharmony_ci/* 1: Firmware Health Data Record */ 239562306a36Sopenharmony_ci 239662306a36Sopenharmony_cistruct acpi_phat_health_data { 239762306a36Sopenharmony_ci struct acpi_phat_header header; 239862306a36Sopenharmony_ci u8 reserved[2]; 239962306a36Sopenharmony_ci u8 health; 240062306a36Sopenharmony_ci u8 device_guid[16]; 240162306a36Sopenharmony_ci u32 device_specific_offset; /* Zero if no Device-specific data */ 240262306a36Sopenharmony_ci}; 240362306a36Sopenharmony_ci 240462306a36Sopenharmony_ci/* Values for Health field above */ 240562306a36Sopenharmony_ci 240662306a36Sopenharmony_ci#define ACPI_PHAT_ERRORS_FOUND 0 240762306a36Sopenharmony_ci#define ACPI_PHAT_NO_ERRORS 1 240862306a36Sopenharmony_ci#define ACPI_PHAT_UNKNOWN_ERRORS 2 240962306a36Sopenharmony_ci#define ACPI_PHAT_ADVISORY 3 241062306a36Sopenharmony_ci 241162306a36Sopenharmony_ci/******************************************************************************* 241262306a36Sopenharmony_ci * 241362306a36Sopenharmony_ci * PMTT - Platform Memory Topology Table (ACPI 5.0) 241462306a36Sopenharmony_ci * Version 1 241562306a36Sopenharmony_ci * 241662306a36Sopenharmony_ci ******************************************************************************/ 241762306a36Sopenharmony_ci 241862306a36Sopenharmony_cistruct acpi_table_pmtt { 241962306a36Sopenharmony_ci struct acpi_table_header header; /* Common ACPI table header */ 242062306a36Sopenharmony_ci u32 memory_device_count; 242162306a36Sopenharmony_ci /* 242262306a36Sopenharmony_ci * Immediately followed by: 242362306a36Sopenharmony_ci * MEMORY_DEVICE memory_device_struct[memory_device_count]; 242462306a36Sopenharmony_ci */ 242562306a36Sopenharmony_ci}; 242662306a36Sopenharmony_ci 242762306a36Sopenharmony_ci/* Common header for PMTT subtables that follow main table */ 242862306a36Sopenharmony_ci 242962306a36Sopenharmony_cistruct acpi_pmtt_header { 243062306a36Sopenharmony_ci u8 type; 243162306a36Sopenharmony_ci u8 reserved1; 243262306a36Sopenharmony_ci u16 length; 243362306a36Sopenharmony_ci u16 flags; 243462306a36Sopenharmony_ci u16 reserved2; 243562306a36Sopenharmony_ci u32 memory_device_count; /* Zero means no memory device structs follow */ 243662306a36Sopenharmony_ci /* 243762306a36Sopenharmony_ci * Immediately followed by: 243862306a36Sopenharmony_ci * u8 type_specific_data[] 243962306a36Sopenharmony_ci * MEMORY_DEVICE memory_device_struct[memory_device_count]; 244062306a36Sopenharmony_ci */ 244162306a36Sopenharmony_ci}; 244262306a36Sopenharmony_ci 244362306a36Sopenharmony_ci/* Values for Type field above */ 244462306a36Sopenharmony_ci 244562306a36Sopenharmony_ci#define ACPI_PMTT_TYPE_SOCKET 0 244662306a36Sopenharmony_ci#define ACPI_PMTT_TYPE_CONTROLLER 1 244762306a36Sopenharmony_ci#define ACPI_PMTT_TYPE_DIMM 2 244862306a36Sopenharmony_ci#define ACPI_PMTT_TYPE_RESERVED 3 /* 0x03-0xFE are reserved */ 244962306a36Sopenharmony_ci#define ACPI_PMTT_TYPE_VENDOR 0xFF 245062306a36Sopenharmony_ci 245162306a36Sopenharmony_ci/* Values for Flags field above */ 245262306a36Sopenharmony_ci 245362306a36Sopenharmony_ci#define ACPI_PMTT_TOP_LEVEL 0x0001 245462306a36Sopenharmony_ci#define ACPI_PMTT_PHYSICAL 0x0002 245562306a36Sopenharmony_ci#define ACPI_PMTT_MEMORY_TYPE 0x000C 245662306a36Sopenharmony_ci 245762306a36Sopenharmony_ci/* 245862306a36Sopenharmony_ci * PMTT subtables, correspond to Type in struct acpi_pmtt_header 245962306a36Sopenharmony_ci */ 246062306a36Sopenharmony_ci 246162306a36Sopenharmony_ci/* 0: Socket Structure */ 246262306a36Sopenharmony_ci 246362306a36Sopenharmony_cistruct acpi_pmtt_socket { 246462306a36Sopenharmony_ci struct acpi_pmtt_header header; 246562306a36Sopenharmony_ci u16 socket_id; 246662306a36Sopenharmony_ci u16 reserved; 246762306a36Sopenharmony_ci}; 246862306a36Sopenharmony_ci /* 246962306a36Sopenharmony_ci * Immediately followed by: 247062306a36Sopenharmony_ci * MEMORY_DEVICE memory_device_struct[memory_device_count]; 247162306a36Sopenharmony_ci */ 247262306a36Sopenharmony_ci 247362306a36Sopenharmony_ci/* 1: Memory Controller subtable */ 247462306a36Sopenharmony_ci 247562306a36Sopenharmony_cistruct acpi_pmtt_controller { 247662306a36Sopenharmony_ci struct acpi_pmtt_header header; 247762306a36Sopenharmony_ci u16 controller_id; 247862306a36Sopenharmony_ci u16 reserved; 247962306a36Sopenharmony_ci}; 248062306a36Sopenharmony_ci /* 248162306a36Sopenharmony_ci * Immediately followed by: 248262306a36Sopenharmony_ci * MEMORY_DEVICE memory_device_struct[memory_device_count]; 248362306a36Sopenharmony_ci */ 248462306a36Sopenharmony_ci 248562306a36Sopenharmony_ci/* 2: Physical Component Identifier (DIMM) */ 248662306a36Sopenharmony_ci 248762306a36Sopenharmony_cistruct acpi_pmtt_physical_component { 248862306a36Sopenharmony_ci struct acpi_pmtt_header header; 248962306a36Sopenharmony_ci u32 bios_handle; 249062306a36Sopenharmony_ci}; 249162306a36Sopenharmony_ci 249262306a36Sopenharmony_ci/* 0xFF: Vendor Specific Data */ 249362306a36Sopenharmony_ci 249462306a36Sopenharmony_cistruct acpi_pmtt_vendor_specific { 249562306a36Sopenharmony_ci struct acpi_pmtt_header header; 249662306a36Sopenharmony_ci u8 type_uuid[16]; 249762306a36Sopenharmony_ci u8 specific[]; 249862306a36Sopenharmony_ci /* 249962306a36Sopenharmony_ci * Immediately followed by: 250062306a36Sopenharmony_ci * u8 vendor_specific_data[]; 250162306a36Sopenharmony_ci * MEMORY_DEVICE memory_device_struct[memory_device_count]; 250262306a36Sopenharmony_ci */ 250362306a36Sopenharmony_ci}; 250462306a36Sopenharmony_ci 250562306a36Sopenharmony_ci/******************************************************************************* 250662306a36Sopenharmony_ci * 250762306a36Sopenharmony_ci * PPTT - Processor Properties Topology Table (ACPI 6.2) 250862306a36Sopenharmony_ci * Version 1 250962306a36Sopenharmony_ci * 251062306a36Sopenharmony_ci ******************************************************************************/ 251162306a36Sopenharmony_ci 251262306a36Sopenharmony_cistruct acpi_table_pptt { 251362306a36Sopenharmony_ci struct acpi_table_header header; /* Common ACPI table header */ 251462306a36Sopenharmony_ci}; 251562306a36Sopenharmony_ci 251662306a36Sopenharmony_ci/* Values for Type field above */ 251762306a36Sopenharmony_ci 251862306a36Sopenharmony_cienum acpi_pptt_type { 251962306a36Sopenharmony_ci ACPI_PPTT_TYPE_PROCESSOR = 0, 252062306a36Sopenharmony_ci ACPI_PPTT_TYPE_CACHE = 1, 252162306a36Sopenharmony_ci ACPI_PPTT_TYPE_ID = 2, 252262306a36Sopenharmony_ci ACPI_PPTT_TYPE_RESERVED = 3 252362306a36Sopenharmony_ci}; 252462306a36Sopenharmony_ci 252562306a36Sopenharmony_ci/* 0: Processor Hierarchy Node Structure */ 252662306a36Sopenharmony_ci 252762306a36Sopenharmony_cistruct acpi_pptt_processor { 252862306a36Sopenharmony_ci struct acpi_subtable_header header; 252962306a36Sopenharmony_ci u16 reserved; 253062306a36Sopenharmony_ci u32 flags; 253162306a36Sopenharmony_ci u32 parent; 253262306a36Sopenharmony_ci u32 acpi_processor_id; 253362306a36Sopenharmony_ci u32 number_of_priv_resources; 253462306a36Sopenharmony_ci}; 253562306a36Sopenharmony_ci 253662306a36Sopenharmony_ci/* Flags */ 253762306a36Sopenharmony_ci 253862306a36Sopenharmony_ci#define ACPI_PPTT_PHYSICAL_PACKAGE (1) 253962306a36Sopenharmony_ci#define ACPI_PPTT_ACPI_PROCESSOR_ID_VALID (1<<1) 254062306a36Sopenharmony_ci#define ACPI_PPTT_ACPI_PROCESSOR_IS_THREAD (1<<2) /* ACPI 6.3 */ 254162306a36Sopenharmony_ci#define ACPI_PPTT_ACPI_LEAF_NODE (1<<3) /* ACPI 6.3 */ 254262306a36Sopenharmony_ci#define ACPI_PPTT_ACPI_IDENTICAL (1<<4) /* ACPI 6.3 */ 254362306a36Sopenharmony_ci 254462306a36Sopenharmony_ci/* 1: Cache Type Structure */ 254562306a36Sopenharmony_ci 254662306a36Sopenharmony_cistruct acpi_pptt_cache { 254762306a36Sopenharmony_ci struct acpi_subtable_header header; 254862306a36Sopenharmony_ci u16 reserved; 254962306a36Sopenharmony_ci u32 flags; 255062306a36Sopenharmony_ci u32 next_level_of_cache; 255162306a36Sopenharmony_ci u32 size; 255262306a36Sopenharmony_ci u32 number_of_sets; 255362306a36Sopenharmony_ci u8 associativity; 255462306a36Sopenharmony_ci u8 attributes; 255562306a36Sopenharmony_ci u16 line_size; 255662306a36Sopenharmony_ci}; 255762306a36Sopenharmony_ci 255862306a36Sopenharmony_ci/* 1: Cache Type Structure for PPTT version 3 */ 255962306a36Sopenharmony_ci 256062306a36Sopenharmony_cistruct acpi_pptt_cache_v1 { 256162306a36Sopenharmony_ci u32 cache_id; 256262306a36Sopenharmony_ci}; 256362306a36Sopenharmony_ci 256462306a36Sopenharmony_ci/* Flags */ 256562306a36Sopenharmony_ci 256662306a36Sopenharmony_ci#define ACPI_PPTT_SIZE_PROPERTY_VALID (1) /* Physical property valid */ 256762306a36Sopenharmony_ci#define ACPI_PPTT_NUMBER_OF_SETS_VALID (1<<1) /* Number of sets valid */ 256862306a36Sopenharmony_ci#define ACPI_PPTT_ASSOCIATIVITY_VALID (1<<2) /* Associativity valid */ 256962306a36Sopenharmony_ci#define ACPI_PPTT_ALLOCATION_TYPE_VALID (1<<3) /* Allocation type valid */ 257062306a36Sopenharmony_ci#define ACPI_PPTT_CACHE_TYPE_VALID (1<<4) /* Cache type valid */ 257162306a36Sopenharmony_ci#define ACPI_PPTT_WRITE_POLICY_VALID (1<<5) /* Write policy valid */ 257262306a36Sopenharmony_ci#define ACPI_PPTT_LINE_SIZE_VALID (1<<6) /* Line size valid */ 257362306a36Sopenharmony_ci#define ACPI_PPTT_CACHE_ID_VALID (1<<7) /* Cache ID valid */ 257462306a36Sopenharmony_ci 257562306a36Sopenharmony_ci/* Masks for Attributes */ 257662306a36Sopenharmony_ci 257762306a36Sopenharmony_ci#define ACPI_PPTT_MASK_ALLOCATION_TYPE (0x03) /* Allocation type */ 257862306a36Sopenharmony_ci#define ACPI_PPTT_MASK_CACHE_TYPE (0x0C) /* Cache type */ 257962306a36Sopenharmony_ci#define ACPI_PPTT_MASK_WRITE_POLICY (0x10) /* Write policy */ 258062306a36Sopenharmony_ci 258162306a36Sopenharmony_ci/* Attributes describing cache */ 258262306a36Sopenharmony_ci#define ACPI_PPTT_CACHE_READ_ALLOCATE (0x0) /* Cache line is allocated on read */ 258362306a36Sopenharmony_ci#define ACPI_PPTT_CACHE_WRITE_ALLOCATE (0x01) /* Cache line is allocated on write */ 258462306a36Sopenharmony_ci#define ACPI_PPTT_CACHE_RW_ALLOCATE (0x02) /* Cache line is allocated on read and write */ 258562306a36Sopenharmony_ci#define ACPI_PPTT_CACHE_RW_ALLOCATE_ALT (0x03) /* Alternate representation of above */ 258662306a36Sopenharmony_ci 258762306a36Sopenharmony_ci#define ACPI_PPTT_CACHE_TYPE_DATA (0x0) /* Data cache */ 258862306a36Sopenharmony_ci#define ACPI_PPTT_CACHE_TYPE_INSTR (1<<2) /* Instruction cache */ 258962306a36Sopenharmony_ci#define ACPI_PPTT_CACHE_TYPE_UNIFIED (2<<2) /* Unified I & D cache */ 259062306a36Sopenharmony_ci#define ACPI_PPTT_CACHE_TYPE_UNIFIED_ALT (3<<2) /* Alternate representation of above */ 259162306a36Sopenharmony_ci 259262306a36Sopenharmony_ci#define ACPI_PPTT_CACHE_POLICY_WB (0x0) /* Cache is write back */ 259362306a36Sopenharmony_ci#define ACPI_PPTT_CACHE_POLICY_WT (1<<4) /* Cache is write through */ 259462306a36Sopenharmony_ci 259562306a36Sopenharmony_ci/* 2: ID Structure */ 259662306a36Sopenharmony_ci 259762306a36Sopenharmony_cistruct acpi_pptt_id { 259862306a36Sopenharmony_ci struct acpi_subtable_header header; 259962306a36Sopenharmony_ci u16 reserved; 260062306a36Sopenharmony_ci u32 vendor_id; 260162306a36Sopenharmony_ci u64 level1_id; 260262306a36Sopenharmony_ci u64 level2_id; 260362306a36Sopenharmony_ci u16 major_rev; 260462306a36Sopenharmony_ci u16 minor_rev; 260562306a36Sopenharmony_ci u16 spin_rev; 260662306a36Sopenharmony_ci}; 260762306a36Sopenharmony_ci 260862306a36Sopenharmony_ci/******************************************************************************* 260962306a36Sopenharmony_ci * 261062306a36Sopenharmony_ci * PRMT - Platform Runtime Mechanism Table 261162306a36Sopenharmony_ci * Version 1 261262306a36Sopenharmony_ci * 261362306a36Sopenharmony_ci ******************************************************************************/ 261462306a36Sopenharmony_ci 261562306a36Sopenharmony_cistruct acpi_table_prmt { 261662306a36Sopenharmony_ci struct acpi_table_header header; /* Common ACPI table header */ 261762306a36Sopenharmony_ci}; 261862306a36Sopenharmony_ci 261962306a36Sopenharmony_cistruct acpi_table_prmt_header { 262062306a36Sopenharmony_ci u8 platform_guid[16]; 262162306a36Sopenharmony_ci u32 module_info_offset; 262262306a36Sopenharmony_ci u32 module_info_count; 262362306a36Sopenharmony_ci}; 262462306a36Sopenharmony_ci 262562306a36Sopenharmony_cistruct acpi_prmt_module_header { 262662306a36Sopenharmony_ci u16 revision; 262762306a36Sopenharmony_ci u16 length; 262862306a36Sopenharmony_ci}; 262962306a36Sopenharmony_ci 263062306a36Sopenharmony_cistruct acpi_prmt_module_info { 263162306a36Sopenharmony_ci u16 revision; 263262306a36Sopenharmony_ci u16 length; 263362306a36Sopenharmony_ci u8 module_guid[16]; 263462306a36Sopenharmony_ci u16 major_rev; 263562306a36Sopenharmony_ci u16 minor_rev; 263662306a36Sopenharmony_ci u16 handler_info_count; 263762306a36Sopenharmony_ci u32 handler_info_offset; 263862306a36Sopenharmony_ci u64 mmio_list_pointer; 263962306a36Sopenharmony_ci}; 264062306a36Sopenharmony_ci 264162306a36Sopenharmony_cistruct acpi_prmt_handler_info { 264262306a36Sopenharmony_ci u16 revision; 264362306a36Sopenharmony_ci u16 length; 264462306a36Sopenharmony_ci u8 handler_guid[16]; 264562306a36Sopenharmony_ci u64 handler_address; 264662306a36Sopenharmony_ci u64 static_data_buffer_address; 264762306a36Sopenharmony_ci u64 acpi_param_buffer_address; 264862306a36Sopenharmony_ci}; 264962306a36Sopenharmony_ci 265062306a36Sopenharmony_ci/******************************************************************************* 265162306a36Sopenharmony_ci * 265262306a36Sopenharmony_ci * RASF - RAS Feature Table (ACPI 5.0) 265362306a36Sopenharmony_ci * Version 1 265462306a36Sopenharmony_ci * 265562306a36Sopenharmony_ci ******************************************************************************/ 265662306a36Sopenharmony_ci 265762306a36Sopenharmony_cistruct acpi_table_rasf { 265862306a36Sopenharmony_ci struct acpi_table_header header; /* Common ACPI table header */ 265962306a36Sopenharmony_ci u8 channel_id[12]; 266062306a36Sopenharmony_ci}; 266162306a36Sopenharmony_ci 266262306a36Sopenharmony_ci/* RASF Platform Communication Channel Shared Memory Region */ 266362306a36Sopenharmony_ci 266462306a36Sopenharmony_cistruct acpi_rasf_shared_memory { 266562306a36Sopenharmony_ci u32 signature; 266662306a36Sopenharmony_ci u16 command; 266762306a36Sopenharmony_ci u16 status; 266862306a36Sopenharmony_ci u16 version; 266962306a36Sopenharmony_ci u8 capabilities[16]; 267062306a36Sopenharmony_ci u8 set_capabilities[16]; 267162306a36Sopenharmony_ci u16 num_parameter_blocks; 267262306a36Sopenharmony_ci u32 set_capabilities_status; 267362306a36Sopenharmony_ci}; 267462306a36Sopenharmony_ci 267562306a36Sopenharmony_ci/* RASF Parameter Block Structure Header */ 267662306a36Sopenharmony_ci 267762306a36Sopenharmony_cistruct acpi_rasf_parameter_block { 267862306a36Sopenharmony_ci u16 type; 267962306a36Sopenharmony_ci u16 version; 268062306a36Sopenharmony_ci u16 length; 268162306a36Sopenharmony_ci}; 268262306a36Sopenharmony_ci 268362306a36Sopenharmony_ci/* RASF Parameter Block Structure for PATROL_SCRUB */ 268462306a36Sopenharmony_ci 268562306a36Sopenharmony_cistruct acpi_rasf_patrol_scrub_parameter { 268662306a36Sopenharmony_ci struct acpi_rasf_parameter_block header; 268762306a36Sopenharmony_ci u16 patrol_scrub_command; 268862306a36Sopenharmony_ci u64 requested_address_range[2]; 268962306a36Sopenharmony_ci u64 actual_address_range[2]; 269062306a36Sopenharmony_ci u16 flags; 269162306a36Sopenharmony_ci u8 requested_speed; 269262306a36Sopenharmony_ci}; 269362306a36Sopenharmony_ci 269462306a36Sopenharmony_ci/* Masks for Flags and Speed fields above */ 269562306a36Sopenharmony_ci 269662306a36Sopenharmony_ci#define ACPI_RASF_SCRUBBER_RUNNING 1 269762306a36Sopenharmony_ci#define ACPI_RASF_SPEED (7<<1) 269862306a36Sopenharmony_ci#define ACPI_RASF_SPEED_SLOW (0<<1) 269962306a36Sopenharmony_ci#define ACPI_RASF_SPEED_MEDIUM (4<<1) 270062306a36Sopenharmony_ci#define ACPI_RASF_SPEED_FAST (7<<1) 270162306a36Sopenharmony_ci 270262306a36Sopenharmony_ci/* Channel Commands */ 270362306a36Sopenharmony_ci 270462306a36Sopenharmony_cienum acpi_rasf_commands { 270562306a36Sopenharmony_ci ACPI_RASF_EXECUTE_RASF_COMMAND = 1 270662306a36Sopenharmony_ci}; 270762306a36Sopenharmony_ci 270862306a36Sopenharmony_ci/* Platform RAS Capabilities */ 270962306a36Sopenharmony_ci 271062306a36Sopenharmony_cienum acpi_rasf_capabiliities { 271162306a36Sopenharmony_ci ACPI_HW_PATROL_SCRUB_SUPPORTED = 0, 271262306a36Sopenharmony_ci ACPI_SW_PATROL_SCRUB_EXPOSED = 1 271362306a36Sopenharmony_ci}; 271462306a36Sopenharmony_ci 271562306a36Sopenharmony_ci/* Patrol Scrub Commands */ 271662306a36Sopenharmony_ci 271762306a36Sopenharmony_cienum acpi_rasf_patrol_scrub_commands { 271862306a36Sopenharmony_ci ACPI_RASF_GET_PATROL_PARAMETERS = 1, 271962306a36Sopenharmony_ci ACPI_RASF_START_PATROL_SCRUBBER = 2, 272062306a36Sopenharmony_ci ACPI_RASF_STOP_PATROL_SCRUBBER = 3 272162306a36Sopenharmony_ci}; 272262306a36Sopenharmony_ci 272362306a36Sopenharmony_ci/* Channel Command flags */ 272462306a36Sopenharmony_ci 272562306a36Sopenharmony_ci#define ACPI_RASF_GENERATE_SCI (1<<15) 272662306a36Sopenharmony_ci 272762306a36Sopenharmony_ci/* Status values */ 272862306a36Sopenharmony_ci 272962306a36Sopenharmony_cienum acpi_rasf_status { 273062306a36Sopenharmony_ci ACPI_RASF_SUCCESS = 0, 273162306a36Sopenharmony_ci ACPI_RASF_NOT_VALID = 1, 273262306a36Sopenharmony_ci ACPI_RASF_NOT_SUPPORTED = 2, 273362306a36Sopenharmony_ci ACPI_RASF_BUSY = 3, 273462306a36Sopenharmony_ci ACPI_RASF_FAILED = 4, 273562306a36Sopenharmony_ci ACPI_RASF_ABORTED = 5, 273662306a36Sopenharmony_ci ACPI_RASF_INVALID_DATA = 6 273762306a36Sopenharmony_ci}; 273862306a36Sopenharmony_ci 273962306a36Sopenharmony_ci/* Status flags */ 274062306a36Sopenharmony_ci 274162306a36Sopenharmony_ci#define ACPI_RASF_COMMAND_COMPLETE (1) 274262306a36Sopenharmony_ci#define ACPI_RASF_SCI_DOORBELL (1<<1) 274362306a36Sopenharmony_ci#define ACPI_RASF_ERROR (1<<2) 274462306a36Sopenharmony_ci#define ACPI_RASF_STATUS (0x1F<<3) 274562306a36Sopenharmony_ci 274662306a36Sopenharmony_ci/******************************************************************************* 274762306a36Sopenharmony_ci * 274862306a36Sopenharmony_ci * RGRT - Regulatory Graphics Resource Table 274962306a36Sopenharmony_ci * Version 1 275062306a36Sopenharmony_ci * 275162306a36Sopenharmony_ci * Conforms to "ACPI RGRT" available at: 275262306a36Sopenharmony_ci * https://microsoft.github.io/mu/dyn/mu_plus/ms_core_pkg/acpi_RGRT/feature_acpi_rgrt/ 275362306a36Sopenharmony_ci * 275462306a36Sopenharmony_ci ******************************************************************************/ 275562306a36Sopenharmony_ci 275662306a36Sopenharmony_cistruct acpi_table_rgrt { 275762306a36Sopenharmony_ci struct acpi_table_header header; /* Common ACPI table header */ 275862306a36Sopenharmony_ci u16 version; 275962306a36Sopenharmony_ci u8 image_type; 276062306a36Sopenharmony_ci u8 reserved; 276162306a36Sopenharmony_ci u8 image[]; 276262306a36Sopenharmony_ci}; 276362306a36Sopenharmony_ci 276462306a36Sopenharmony_ci/* image_type values */ 276562306a36Sopenharmony_ci 276662306a36Sopenharmony_cienum acpi_rgrt_image_type { 276762306a36Sopenharmony_ci ACPI_RGRT_TYPE_RESERVED0 = 0, 276862306a36Sopenharmony_ci ACPI_RGRT_IMAGE_TYPE_PNG = 1, 276962306a36Sopenharmony_ci ACPI_RGRT_TYPE_RESERVED = 2 /* 2 and greater are reserved */ 277062306a36Sopenharmony_ci}; 277162306a36Sopenharmony_ci 277262306a36Sopenharmony_ci/******************************************************************************* 277362306a36Sopenharmony_ci * 277462306a36Sopenharmony_ci * RHCT - RISC-V Hart Capabilities Table 277562306a36Sopenharmony_ci * Version 1 277662306a36Sopenharmony_ci * 277762306a36Sopenharmony_ci ******************************************************************************/ 277862306a36Sopenharmony_ci 277962306a36Sopenharmony_cistruct acpi_table_rhct { 278062306a36Sopenharmony_ci struct acpi_table_header header; /* Common ACPI table header */ 278162306a36Sopenharmony_ci u32 flags; /* RHCT flags */ 278262306a36Sopenharmony_ci u64 time_base_freq; 278362306a36Sopenharmony_ci u32 node_count; 278462306a36Sopenharmony_ci u32 node_offset; 278562306a36Sopenharmony_ci}; 278662306a36Sopenharmony_ci 278762306a36Sopenharmony_ci/* RHCT Flags */ 278862306a36Sopenharmony_ci 278962306a36Sopenharmony_ci#define ACPI_RHCT_TIMER_CANNOT_WAKEUP_CPU (1) 279062306a36Sopenharmony_ci/* 279162306a36Sopenharmony_ci * RHCT subtables 279262306a36Sopenharmony_ci */ 279362306a36Sopenharmony_cistruct acpi_rhct_node_header { 279462306a36Sopenharmony_ci u16 type; 279562306a36Sopenharmony_ci u16 length; 279662306a36Sopenharmony_ci u16 revision; 279762306a36Sopenharmony_ci}; 279862306a36Sopenharmony_ci 279962306a36Sopenharmony_ci/* Values for RHCT subtable Type above */ 280062306a36Sopenharmony_ci 280162306a36Sopenharmony_cienum acpi_rhct_node_type { 280262306a36Sopenharmony_ci ACPI_RHCT_NODE_TYPE_ISA_STRING = 0x0000, 280362306a36Sopenharmony_ci ACPI_RHCT_NODE_TYPE_CMO = 0x0001, 280462306a36Sopenharmony_ci ACPI_RHCT_NODE_TYPE_MMU = 0x0002, 280562306a36Sopenharmony_ci ACPI_RHCT_NODE_TYPE_RESERVED = 0x0003, 280662306a36Sopenharmony_ci ACPI_RHCT_NODE_TYPE_HART_INFO = 0xFFFF, 280762306a36Sopenharmony_ci}; 280862306a36Sopenharmony_ci 280962306a36Sopenharmony_ci/* 281062306a36Sopenharmony_ci * RHCT node specific subtables 281162306a36Sopenharmony_ci */ 281262306a36Sopenharmony_ci 281362306a36Sopenharmony_ci/* ISA string node structure */ 281462306a36Sopenharmony_cistruct acpi_rhct_isa_string { 281562306a36Sopenharmony_ci u16 isa_length; 281662306a36Sopenharmony_ci char isa[]; 281762306a36Sopenharmony_ci}; 281862306a36Sopenharmony_ci 281962306a36Sopenharmony_cistruct acpi_rhct_cmo_node { 282062306a36Sopenharmony_ci u8 reserved; /* Must be zero */ 282162306a36Sopenharmony_ci u8 cbom_size; /* CBOM size in powerof 2 */ 282262306a36Sopenharmony_ci u8 cbop_size; /* CBOP size in powerof 2 */ 282362306a36Sopenharmony_ci u8 cboz_size; /* CBOZ size in powerof 2 */ 282462306a36Sopenharmony_ci}; 282562306a36Sopenharmony_ci 282662306a36Sopenharmony_cistruct acpi_rhct_mmu_node { 282762306a36Sopenharmony_ci u8 reserved; /* Must be zero */ 282862306a36Sopenharmony_ci u8 mmu_type; /* Virtual Address Scheme */ 282962306a36Sopenharmony_ci}; 283062306a36Sopenharmony_ci 283162306a36Sopenharmony_cienum acpi_rhct_mmu_type { 283262306a36Sopenharmony_ci ACPI_RHCT_MMU_TYPE_SV39 = 0, 283362306a36Sopenharmony_ci ACPI_RHCT_MMU_TYPE_SV48 = 1, 283462306a36Sopenharmony_ci ACPI_RHCT_MMU_TYPE_SV57 = 2 283562306a36Sopenharmony_ci}; 283662306a36Sopenharmony_ci 283762306a36Sopenharmony_ci/* Hart Info node structure */ 283862306a36Sopenharmony_cistruct acpi_rhct_hart_info { 283962306a36Sopenharmony_ci u16 num_offsets; 284062306a36Sopenharmony_ci u32 uid; /* ACPI processor UID */ 284162306a36Sopenharmony_ci}; 284262306a36Sopenharmony_ci 284362306a36Sopenharmony_ci/******************************************************************************* 284462306a36Sopenharmony_ci * 284562306a36Sopenharmony_ci * SBST - Smart Battery Specification Table 284662306a36Sopenharmony_ci * Version 1 284762306a36Sopenharmony_ci * 284862306a36Sopenharmony_ci ******************************************************************************/ 284962306a36Sopenharmony_ci 285062306a36Sopenharmony_cistruct acpi_table_sbst { 285162306a36Sopenharmony_ci struct acpi_table_header header; /* Common ACPI table header */ 285262306a36Sopenharmony_ci u32 warning_level; 285362306a36Sopenharmony_ci u32 low_level; 285462306a36Sopenharmony_ci u32 critical_level; 285562306a36Sopenharmony_ci}; 285662306a36Sopenharmony_ci 285762306a36Sopenharmony_ci/******************************************************************************* 285862306a36Sopenharmony_ci * 285962306a36Sopenharmony_ci * SDEI - Software Delegated Exception Interface Descriptor Table 286062306a36Sopenharmony_ci * 286162306a36Sopenharmony_ci * Conforms to "Software Delegated Exception Interface (SDEI)" ARM DEN0054A, 286262306a36Sopenharmony_ci * May 8th, 2017. Copyright 2017 ARM Ltd. 286362306a36Sopenharmony_ci * 286462306a36Sopenharmony_ci ******************************************************************************/ 286562306a36Sopenharmony_ci 286662306a36Sopenharmony_cistruct acpi_table_sdei { 286762306a36Sopenharmony_ci struct acpi_table_header header; /* Common ACPI table header */ 286862306a36Sopenharmony_ci}; 286962306a36Sopenharmony_ci 287062306a36Sopenharmony_ci/******************************************************************************* 287162306a36Sopenharmony_ci * 287262306a36Sopenharmony_ci * SDEV - Secure Devices Table (ACPI 6.2) 287362306a36Sopenharmony_ci * Version 1 287462306a36Sopenharmony_ci * 287562306a36Sopenharmony_ci ******************************************************************************/ 287662306a36Sopenharmony_ci 287762306a36Sopenharmony_cistruct acpi_table_sdev { 287862306a36Sopenharmony_ci struct acpi_table_header header; /* Common ACPI table header */ 287962306a36Sopenharmony_ci}; 288062306a36Sopenharmony_ci 288162306a36Sopenharmony_cistruct acpi_sdev_header { 288262306a36Sopenharmony_ci u8 type; 288362306a36Sopenharmony_ci u8 flags; 288462306a36Sopenharmony_ci u16 length; 288562306a36Sopenharmony_ci}; 288662306a36Sopenharmony_ci 288762306a36Sopenharmony_ci/* Values for subtable type above */ 288862306a36Sopenharmony_ci 288962306a36Sopenharmony_cienum acpi_sdev_type { 289062306a36Sopenharmony_ci ACPI_SDEV_TYPE_NAMESPACE_DEVICE = 0, 289162306a36Sopenharmony_ci ACPI_SDEV_TYPE_PCIE_ENDPOINT_DEVICE = 1, 289262306a36Sopenharmony_ci ACPI_SDEV_TYPE_RESERVED = 2 /* 2 and greater are reserved */ 289362306a36Sopenharmony_ci}; 289462306a36Sopenharmony_ci 289562306a36Sopenharmony_ci/* Values for flags above */ 289662306a36Sopenharmony_ci 289762306a36Sopenharmony_ci#define ACPI_SDEV_HANDOFF_TO_UNSECURE_OS (1) 289862306a36Sopenharmony_ci#define ACPI_SDEV_SECURE_COMPONENTS_PRESENT (1<<1) 289962306a36Sopenharmony_ci 290062306a36Sopenharmony_ci/* 290162306a36Sopenharmony_ci * SDEV subtables 290262306a36Sopenharmony_ci */ 290362306a36Sopenharmony_ci 290462306a36Sopenharmony_ci/* 0: Namespace Device Based Secure Device Structure */ 290562306a36Sopenharmony_ci 290662306a36Sopenharmony_cistruct acpi_sdev_namespace { 290762306a36Sopenharmony_ci struct acpi_sdev_header header; 290862306a36Sopenharmony_ci u16 device_id_offset; 290962306a36Sopenharmony_ci u16 device_id_length; 291062306a36Sopenharmony_ci u16 vendor_data_offset; 291162306a36Sopenharmony_ci u16 vendor_data_length; 291262306a36Sopenharmony_ci}; 291362306a36Sopenharmony_ci 291462306a36Sopenharmony_cistruct acpi_sdev_secure_component { 291562306a36Sopenharmony_ci u16 secure_component_offset; 291662306a36Sopenharmony_ci u16 secure_component_length; 291762306a36Sopenharmony_ci}; 291862306a36Sopenharmony_ci 291962306a36Sopenharmony_ci/* 292062306a36Sopenharmony_ci * SDEV sub-subtables ("Components") for above 292162306a36Sopenharmony_ci */ 292262306a36Sopenharmony_cistruct acpi_sdev_component { 292362306a36Sopenharmony_ci struct acpi_sdev_header header; 292462306a36Sopenharmony_ci}; 292562306a36Sopenharmony_ci 292662306a36Sopenharmony_ci/* Values for sub-subtable type above */ 292762306a36Sopenharmony_ci 292862306a36Sopenharmony_cienum acpi_sac_type { 292962306a36Sopenharmony_ci ACPI_SDEV_TYPE_ID_COMPONENT = 0, 293062306a36Sopenharmony_ci ACPI_SDEV_TYPE_MEM_COMPONENT = 1 293162306a36Sopenharmony_ci}; 293262306a36Sopenharmony_ci 293362306a36Sopenharmony_cistruct acpi_sdev_id_component { 293462306a36Sopenharmony_ci struct acpi_sdev_header header; 293562306a36Sopenharmony_ci u16 hardware_id_offset; 293662306a36Sopenharmony_ci u16 hardware_id_length; 293762306a36Sopenharmony_ci u16 subsystem_id_offset; 293862306a36Sopenharmony_ci u16 subsystem_id_length; 293962306a36Sopenharmony_ci u16 hardware_revision; 294062306a36Sopenharmony_ci u8 hardware_rev_present; 294162306a36Sopenharmony_ci u8 class_code_present; 294262306a36Sopenharmony_ci u8 pci_base_class; 294362306a36Sopenharmony_ci u8 pci_sub_class; 294462306a36Sopenharmony_ci u8 pci_programming_xface; 294562306a36Sopenharmony_ci}; 294662306a36Sopenharmony_ci 294762306a36Sopenharmony_cistruct acpi_sdev_mem_component { 294862306a36Sopenharmony_ci struct acpi_sdev_header header; 294962306a36Sopenharmony_ci u32 reserved; 295062306a36Sopenharmony_ci u64 memory_base_address; 295162306a36Sopenharmony_ci u64 memory_length; 295262306a36Sopenharmony_ci}; 295362306a36Sopenharmony_ci 295462306a36Sopenharmony_ci/* 1: PCIe Endpoint Device Based Device Structure */ 295562306a36Sopenharmony_ci 295662306a36Sopenharmony_cistruct acpi_sdev_pcie { 295762306a36Sopenharmony_ci struct acpi_sdev_header header; 295862306a36Sopenharmony_ci u16 segment; 295962306a36Sopenharmony_ci u16 start_bus; 296062306a36Sopenharmony_ci u16 path_offset; 296162306a36Sopenharmony_ci u16 path_length; 296262306a36Sopenharmony_ci u16 vendor_data_offset; 296362306a36Sopenharmony_ci u16 vendor_data_length; 296462306a36Sopenharmony_ci}; 296562306a36Sopenharmony_ci 296662306a36Sopenharmony_ci/* 1a: PCIe Endpoint path entry */ 296762306a36Sopenharmony_ci 296862306a36Sopenharmony_cistruct acpi_sdev_pcie_path { 296962306a36Sopenharmony_ci u8 device; 297062306a36Sopenharmony_ci u8 function; 297162306a36Sopenharmony_ci}; 297262306a36Sopenharmony_ci 297362306a36Sopenharmony_ci/******************************************************************************* 297462306a36Sopenharmony_ci * 297562306a36Sopenharmony_ci * SVKL - Storage Volume Key Location Table (ACPI 6.4) 297662306a36Sopenharmony_ci * From: "Guest-Host-Communication Interface (GHCI) for Intel 297762306a36Sopenharmony_ci * Trust Domain Extensions (Intel TDX)". 297862306a36Sopenharmony_ci * Version 1 297962306a36Sopenharmony_ci * 298062306a36Sopenharmony_ci ******************************************************************************/ 298162306a36Sopenharmony_ci 298262306a36Sopenharmony_cistruct acpi_table_svkl { 298362306a36Sopenharmony_ci struct acpi_table_header header; /* Common ACPI table header */ 298462306a36Sopenharmony_ci u32 count; 298562306a36Sopenharmony_ci}; 298662306a36Sopenharmony_ci 298762306a36Sopenharmony_cistruct acpi_svkl_key { 298862306a36Sopenharmony_ci u16 type; 298962306a36Sopenharmony_ci u16 format; 299062306a36Sopenharmony_ci u32 size; 299162306a36Sopenharmony_ci u64 address; 299262306a36Sopenharmony_ci}; 299362306a36Sopenharmony_ci 299462306a36Sopenharmony_cienum acpi_svkl_type { 299562306a36Sopenharmony_ci ACPI_SVKL_TYPE_MAIN_STORAGE = 0, 299662306a36Sopenharmony_ci ACPI_SVKL_TYPE_RESERVED = 1 /* 1 and greater are reserved */ 299762306a36Sopenharmony_ci}; 299862306a36Sopenharmony_ci 299962306a36Sopenharmony_cienum acpi_svkl_format { 300062306a36Sopenharmony_ci ACPI_SVKL_FORMAT_RAW_BINARY = 0, 300162306a36Sopenharmony_ci ACPI_SVKL_FORMAT_RESERVED = 1 /* 1 and greater are reserved */ 300262306a36Sopenharmony_ci}; 300362306a36Sopenharmony_ci 300462306a36Sopenharmony_ci/******************************************************************************* 300562306a36Sopenharmony_ci * 300662306a36Sopenharmony_ci * TDEL - TD-Event Log 300762306a36Sopenharmony_ci * From: "Guest-Host-Communication Interface (GHCI) for Intel 300862306a36Sopenharmony_ci * Trust Domain Extensions (Intel TDX)". 300962306a36Sopenharmony_ci * September 2020 301062306a36Sopenharmony_ci * 301162306a36Sopenharmony_ci ******************************************************************************/ 301262306a36Sopenharmony_ci 301362306a36Sopenharmony_cistruct acpi_table_tdel { 301462306a36Sopenharmony_ci struct acpi_table_header header; /* Common ACPI table header */ 301562306a36Sopenharmony_ci u32 reserved; 301662306a36Sopenharmony_ci u64 log_area_minimum_length; 301762306a36Sopenharmony_ci u64 log_area_start_address; 301862306a36Sopenharmony_ci}; 301962306a36Sopenharmony_ci 302062306a36Sopenharmony_ci/* Reset to default packing */ 302162306a36Sopenharmony_ci 302262306a36Sopenharmony_ci#pragma pack() 302362306a36Sopenharmony_ci 302462306a36Sopenharmony_ci#endif /* __ACTBL2_H__ */ 3025