From: Kruti Pendharkar Date: Wed, 6 Aug 2025 06:34:17 +0000 (-0700) Subject: Change to common header file not applicable to open-vm-tools. X-Git-Tag: stable-13.1.0~86 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=49e89de1572ca7265e1aaf8e14fe4dcf713c3933;p=thirdparty%2Fopen-vm-tools.git Change to common header file not applicable to open-vm-tools. --- diff --git a/open-vm-tools/lib/include/acpi_table_defs.h b/open-vm-tools/lib/include/acpi_table_defs.h new file mode 100644 index 000000000..83cb39d57 --- /dev/null +++ b/open-vm-tools/lib/include/acpi_table_defs.h @@ -0,0 +1,954 @@ +/********************************************************* + * Copyright (c) 2000-2025 Broadcom. All Rights Reserved. + * The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries. + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation version 2.1 and no later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the Lesser GNU General Public + * License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + *********************************************************/ + +/* + * acpi_table_defs.h -- + * + * ACPI specification + */ + +#ifndef _ACPI_TABLE_DEFS_H_ +#define _ACPI_TABLE_DEFS_H_ + +#include "vm_basic_defs.h" +#include "vm_atomic.h" + +/* + * Root System Description Pointer + * Floating structure pointing to the actual table + */ +#define RSDP_SIGNATURE "RSD PTR " +#define RSDP_HI_WINDOW_BASE 0xE0000 +#define RSDP_HI_WINDOW_SIZE 0x20000 +#define RSDP_PARAGRAPH_SIZE 16 +#define RSDP_CHECKSUM_LENGTH 20 +#define RSDP_REVISION_ACPI10 0 +#define RSDP_REVISION_ACPI20 2 + +#pragma pack(push, 1) +typedef struct { + char signature[8]; // "RSD PTR " + uint8 checksum; // checksum of ACPI1.0 part (makes sum 0) + char oemId[6]; // OEM ID + uint8 revision; // Specification version + uint32 rsdtAddress; // Physical address of RSDT + uint32 length; // Length of this whole structure + uint64 xsdtAddress; // Physical address of XSDT + uint8 extendedChecksum; // checksum of this structure (makes sum 0) + uint8 reserved[3]; +} ACPITableRSDP; +#pragma pack(pop) + +/* + * Header common to all Description Tables + */ +#pragma pack(push, 1) +typedef struct { + char signature[4]; // identifies type of table + uint32 length; // length of table, in bytes, including header + uint8 revision; // specification minor version # + uint8 checksum; // to make sum of entire table == 0 + char oemId[6]; // OEM identification + char oemTableId[8]; // OEM table identification + uint32 oemRevision; // OEM revision number + char aslCreatorId[4]; // ASL creator vendor ID + uint32 aslCreatorRevision; // ASL creator revision number +} ACPITableHeader; +#pragma pack(pop) + +/* + * Generic Address Structure + */ +#pragma pack(push, 1) +typedef struct { + uint8 spaceID; + uint8 bitWidth; + uint8 bitOffset; + uint8 accessWidth; + uint64 address; +} ACPIAddress; +#pragma pack(pop) + +enum acpi_space_id { + ACPI_SPACE_MEMORY = 0, + ACPI_SPACE_IO = 1, + ACPI_SPACE_PCI = 2, + ACPI_SPACE_EMBEDDED = 3, + ACPI_SPACE_SMBUS = 4, + ACPI_SPACE_PCC = 10, + ACPI_SPACE_FUNCTIONAL = 0x7f, +}; + +enum acpi_access_width { + ACPI_ACCESS_WIDTH_UNDEF = 0, + ACPI_ACCESS_WIDTH_BYTE = 1, + ACPI_ACCESS_WIDTH_WORD = 2, + ACPI_ACCESS_WIDTH_DWORD = 3, + ACPI_ACCESS_WIDTH_QWORD = 4, +}; + +/* + * Root System Description Table + */ +#define RSDT_SIGNATURE "RSDT" +#define RSDT_MAX_DTS 20 + +#pragma pack(push, 1) +typedef struct { + ACPITableHeader header; // Signature is "RSDT" + uint32 entries[1]; // Array of addresses of descript. tables +} ACPITableRSDT; +#pragma pack(pop) + +/* + * Extended System Description Table + */ +#define XSDT_SIGNATURE "XSDT" + +#pragma pack(push, 1) +typedef struct { + ACPITableHeader header; // Signature is "XSDT" + uint64 entries[1]; // Array of addresses of descript. tables +} ACPITableXSDT; +#pragma pack(pop) + +/* + * Multiple APIC Description Table + */ +#define MADT_SIGNATURE "APIC" +#define MADT_PCAT_COMPAT 0x1 // PC-AT dual 8259 PIC present + +#pragma pack(push, 1) +typedef struct { + ACPITableHeader header; // Signature is "APIC" + uint32 localApicAddress; // Address where local APIC is seen + uint32 flags; + uint8 entries[1]; // Array of variable-length structures +} ACPITableMADT; +#pragma pack(pop) + +/* + * Header common to all entries in some Description Table + */ +#pragma pack(push, 1) +typedef struct { + uint8 type; + uint8 length; +} ACPIDTEntryHeader; +#pragma pack(pop) + +/* + * Possible entries for MADT + */ +#define MADT_ENABLED 1 + +enum { + ACPI_MADT_LAPIC = 0, + ACPI_MADT_IOAPIC, + ACPI_MADT_INT, + ACPI_MADT_NMI, + ACPI_MADT_LAPIC_NMI, + ACPI_MADT_LAPIC_ADDR_OVR, + ACPI_MADT_IOSAPIC, + ACPI_MADT_LSAPIC, + ACPI_MADT_PLATFORM_INT, + ACPI_MADT_LX2APIC, + ACPI_MADT_LX2APIC_NMI, + ACPI_MADT_GIC, + ACPI_MADT_GICD, + ACPI_MADT_GIC_MSI, + ACPI_MADT_GICR, + ACPI_MADT_ITS, + ACPI_MADT_MPWK, + ACPI_MADT_OEM_80 = 0x80, +}; + +#pragma pack(push, 1) +typedef struct { + ACPIDTEntryHeader header; + uint8 acpiId; // The processor's ACPI ID + uint8 id; // The processor's local APIC ID + uint32 flags; // MADT_ENABLED +} ACPIMADTLocalApic; +#pragma pack(pop) + +#pragma pack(push, 1) +typedef struct { + ACPIDTEntryHeader header; + uint8 id; // I/O APIC ID + uint8 reserved; // 0 + uint32 address; // 32-bit physical address of this I/O APIC + uint32 globalIntBase; // Global interrupt base for this I/O APIC +} ACPIMADTIOApic; +#pragma pack(pop) + +#pragma pack(push, 1) +typedef struct { + ACPIDTEntryHeader header; + uint8 bus; // 0 Constant, meaning ISA + uint8 sourceIRQ; // Bus-relative interrupt source (IRQ) + uint32 globalInt; // Global System interrupt for this bus IRQ + uint16 flags; // MPS_POLARITY_xx, MPS_TRIGGER_xx +} ACPIMADTIntrSrcOverride; +#pragma pack(pop) + +#pragma pack(push, 1) +typedef struct { + ACPIDTEntryHeader header; + uint16 flags; // MPS_POLARITY_xx, MPS_TRIGGER_xx + uint32 globalInt; // Global system interrupt for this NMI +} ACPIMADTNMISrc; +#pragma pack(pop) + +#pragma pack(push, 1) +typedef struct { + ACPIDTEntryHeader header; + uint8 acpiId; // The processor's ACPI ID, or 0xff for all + uint16 flags; // MPS_POLARITY_xx, MPS_TRIGGER_xx + uint8 lint; // Local APIC interrupt for this NMI +} ACPIMADTLocalApicNMI; +#pragma pack(pop) + +#pragma pack(push, 1) +typedef struct { + ACPIDTEntryHeader header; + uint16 reserved; // Reserved - Must be set to zero + uint64 address; // Physical address of Local APIC +} ACPIMADTLocalApicAddrOverride; +#pragma pack(pop) + +#pragma pack(push, 1) +typedef struct { + ACPIDTEntryHeader header; + uint8 id; // I/O SAPIC ID + uint8 reserved; // Reserved - Must be zero + uint32 globalIntBase; // Global interrupt base for this I/O SAPIC + uint64 address; // 64-bit physical address of this I/O SAPIC +} ACPIMADTIOSApic; +#pragma pack(pop) + +#pragma pack(push, 1) +typedef struct { + ACPIDTEntryHeader header; + uint8 acpiId; // The processor's ACPI ID + uint8 id; // The processor’s local SAPIC ID + uint8 EId; // The processor’s local SAPIC EID + uint8 reserved[3]; // Reserved - Must be zero + uint32 flags; // MADT_ENABLED + uint32 uidValue; // ACPI Processor UID value + uint8 uidString[1]; // ACPI Processor UID string +} ACPIMADTLocalSApic; +#pragma pack(pop) + +#define MADT_PMI 1 +#define MADT_INIT 2 +#define MADT_CORRECTED_PLATFORM_ERROR_INT 3 + +#pragma pack(push, 1) +typedef struct { + ACPIDTEntryHeader header; + uint16 flags; // MPS_POLARITY_xx, MPS_TRIGGER_xx + uint8 type; // MADT_PMI, MADT_INIT, MADT_CORR... + uint8 destId; // Processor ID of destination + uint8 destEId; // Processor EID of destination + uint8 ioSApicVector; // entry in the I/O SAPIC redirection table + uint32 globalInt; // Global System interrupt for this PMI + uint32 IntrSrcFlags; // Platform interrupt source flags +} ACPIMADTPlatformIntrSrc; +#pragma pack(pop) + +#pragma pack(push, 1) +typedef struct { + ACPIDTEntryHeader header; + uint16 reserved; // Reserved - Must be zero + uint32 id; // x2APIC ID + uint32 flags; // Same as Local APIC + uint32 acpiId; // ACPI processor UID for this x2APIC +} ACPIMADTLocalX2Apic; +#pragma pack(pop) + +/* + * arm64 Generic Interrupt Controller (GIC). + */ +#define MADT_GIC_PMU_EDGE (1 << 1) +#define MADT_GIC_VGIC_EDGE (1 << 2) + +#pragma pack(push, 1) +typedef struct { + ACPIDTEntryHeader header; + uint16 reserved; // Reserved - Must be zero + uint32 id; // The local GIC's hardware ID. + uint32 acpiId; // ACPI processor UID for this GIC. + uint32 flags; // GIC flags. + uint32 parkingVers; // Parking protocol implemented. + uint32 pmuGsiv; // GSIV for PMU interrupts. + uint64 mailBox; // Parking protocol mailbox. + uint64 base; // GIC base + uint64 vgicBase; // VGIC base + uint64 gichBase; // GICH + uint32 gichGsiv; // GSIV for GICH maintenance interrupt + uint64 gicrBase; // GICv3 and later. + uint64 mpidr; // Actual MPIDR value +} ACPIMADTGIC; +#pragma pack(pop) + +#pragma pack(push, 1) +typedef struct { + ACPIDTEntryHeader header; + uint16 reserved; // Reserved - Must be zero + uint32 id; // The GIC distributor's hardware ID. + uint64 base; // GIC distributor base. + uint32 globalIntBase; // System vector base. + uint8 version; // GIC version. + uint8 reserved2[3]; // Must be zero. +} ACPIMADTGICD; +#pragma pack(pop) + +/* + * arm64 Generic Interrupt Controller (GIC) MSI frame. + */ +#define MADT_GIC_MSI_OVERRIDE (1 << 0) + +#pragma pack(push, 1) +typedef struct { + ACPIDTEntryHeader header; + uint16 reserved; // Reserved - Must be zero + uint32 id; // MSI frame ID. + uint64 base; // MSI frame base. + uint32 flags; // MSI frame flags. + uint16 spiCount; // SPI count. + uint16 spiBase; // SPI base. +} ACPIMADTGICMSI; +#pragma pack(pop) + +#pragma pack(push, 1) +typedef struct { + ACPIDTEntryHeader header; + uint16 reserved; // Reserved - Must be zero + uint64 base; // all GIC re-distributor base. + uint32 length; // all GIC re-distributor length. +} ACPIMADTGICR; +#pragma pack(pop) + +#pragma pack(push, 1) +typedef struct { + ACPIDTEntryHeader header; + uint16 reserved; // Reserved - Must be zero + uint32 id; // GIC ITS ID. + uint64 base; // GIC ITS base. + uint32 reserved1; // Reserved - Must be zero +} ACPIMADTITS; +#pragma pack(pop) + +/* + * Multiprocessor Wakeup (MPWK) + */ +#define MADT_MPWK_MAILBOX_VERSION 0 + +#pragma pack(push, 1) +typedef struct { + ACPIDTEntryHeader header; + uint16 mailboxVers; // Mailbox version (0 in current spec) + uint32 reserved; // Reserved - Must be zero + uint64 mailboxAddr; // Physical address of mailbox +} ACPIMADTMPWK; +#pragma pack(pop) + +#pragma pack(push, 1) +typedef struct { + Atomic_uint16 command; // Command (see enum below) + uint16 reserved; // Reserved - Must be zero + Atomic_uint32 apicId; // Target processor's local APIC ID + Atomic_uint64 wakeupVector; // Wakeup address for AP + uint8 osRsvd[2032]; // Reserved for OS use + uint8 fwRsvd[2048]; // Reserved for firmware use +} ACPIMPWKMailbox; +#pragma pack(pop) + +MY_ASSERTS(ACPIMPWK_ASSERTS, + ASSERT_ON_COMPILE(sizeof (ACPIMPWKMailbox) == 4096); +) + +enum { + ACPI_MPWK_COMMAND_NOOP = 0, + ACPI_MPWK_COMMAND_WAKEUP = 1 +}; + +/* + * Static Resource Affinity Table + */ +#define SRAT_SIGNATURE "SRAT" + +#pragma pack(push, 1) +typedef struct { + ACPITableHeader header; // Signature is "SRAT" + uint8 unknown[12]; + uint8 entries[1]; // Array of variable-length structures +} ACPITableSRAT; +#pragma pack(pop) + +/* + * Possible entries for SRAT + */ +enum { + SRAT_PROC = 0, + SRAT_MEM, + SRAT_PROC_X2APIC, + SRAT_PROC_GICC, + SRAT_GIC_ITS_AFFINITY, + SRAT_GENERIC_INITIATOR, +}; + +#define SRAT_ENABLED (1 << 0) +#define SRAT_HOT_PLUGGABLE (1 << 1) +#define SRAT_NON_VOLATILE (1 << 2) + + +#pragma pack(push, 1) +typedef struct { + ACPIDTEntryHeader header; + uint8 nodeIdLo; // Bit[7:0] Proximity domain for the logical proc + uint8 apicId; // The processor local (S)APIC ID + uint32 flags; // SRAT_ENABLED + uint8 localSapicEid; // The processor local (S)APIC EID + uint8 nodeIdHi[3]; // Bit[31:8] Proximity domain for the logical proc + uint32 clockId; // Clock domain for the logical processor +} ACPISRATProcApic; +#pragma pack(pop) + +#pragma pack(push, 1) +typedef struct { + ACPIDTEntryHeader header; + uint16 reserved; // Reserved - Must be zero + uint32 nodeId; // Proximity domain for the logical proc + uint32 x2ApicId; // The processor local x2APIC ID + uint32 flags; // Flags + uint32 clockId; // Clock domain for the logical processor + uint8 unknown[4]; // Reserved +} ACPISRATProcX2Apic; +#pragma pack(pop) + +#pragma pack(push, 1) +typedef struct { + ACPIDTEntryHeader header; + uint32 nodeId; // Proximity domain for the logical proc + uint32 acpiId; // Processor UID (as per ACPI) +#define SRAT_GICC_ENABLED (1 << 0) // If clear, OSPM ignores this SRAT structure + uint32 flags; + uint32 clockId; // Clock domain for the logical processor +} ACPISRATProcGICC; +#pragma pack(pop) + +#pragma pack(push, 1) +typedef struct { + ACPIDTEntryHeader header; + uint32 nodeId; // Proximity domain for the GIC ITS + uint16 unknown; + uint32 itsId; // The ITS ID +} ACPISRATGICITSAffinity; +#pragma pack(pop) + +#pragma pack(push, 1) +typedef struct { + ACPIDTEntryHeader header; + uint32 nodeId; // Proximity domain for the logical proc + uint8 unknown[2]; + uint64 base; // Base address of the memory range + uint64 length; // Size of the memory range + uint8 unknown2[4]; // Reserved + uint32 flags; // Flags + uint8 unknown3[8]; // Reserved +} ACPISRATMemory; +#pragma pack(pop) + +/* + * SRAT Generic Initiator Affinity Structure. + */ + +// Supported generic initiator device types +enum AcpiGenericInitiatorType { + SRAT_GENERIC_INITIATOR_TYPE_ACPI = 0, + SRAT_GENERIC_INITIATOR_TYPE_PCI = 1, + SRAT_GENERIC_INITIATOR_TYPE_INVALID = 0xff, +}; + +// ACPI device handle of generic initiator. +#pragma pack(push, 1) +typedef struct { + uint64 hid; // ACPI _HID + uint32 uid; // ACPI _UID + uint8 reserved[4]; // Reserved +} ACPIGiasAcpiHandle; +#pragma pack(pop) + +// PCI device handle of generic initiator. +#pragma pack(push, 1) +typedef struct { + uint16 seg; // S: segment + uint16 bus:8; // B: bus + uint16 dev:5; // D: device + uint16 fun:3; // F: function + uint8 reserved[12]; // Reserved +} ACPIGiasPCIHandle; +#pragma pack(pop) + +// Common data structure for device handle. +#pragma pack(push, 1) +typedef union { + ACPIGiasAcpiHandle acpi; // ACPI device handle + ACPIGiasPCIHandle pci; // PCI device handle +} ACPIGiasDeviceHandle; +#pragma pack(pop) + +#pragma pack(push, 1) +typedef struct { + ACPIDTEntryHeader header; + uint8 reserved1; // Reserved + uint8 deviceType; // Device handle type + // - 0: ACPI device + // - 1: PCI device + uint32 pxmID; // Proximity domain which generic + // initiator belongs to + ACPIGiasDeviceHandle deviceHandle; // ACPI/PCI device handle +#define SRAT_GENERIC_INITIATOR_ENABLED (1 << 0) + uint32 flags; // Flags + uint8 reserved2[4]; // Reserved +} ACPISRATGenericInitiator; +#pragma pack(pop) + +/* + * High Precision Event Timers Table + */ +#define HPET_SIGNATURE "HPET" + +#pragma pack(push, 1) +typedef struct { + ACPITableHeader header; // Signature is "HPET" + uint32 blockId; + uint32 acpiAddr; + uint64 baseAddr; + uint8 number; + uint16 minTick; + uint8 attributes; +} ACPITableHPET; +#pragma pack(pop) + +/* + * Fixed ACPI Description Table + */ + +#define FADT_SIGNATURE "FACP" +#define FADT_REVISION_ACPI10 1 +#define FADT_REVISION_ACPI20 3 +#define FADT_REVISION_ACPI30 4 +#define FADT_REVISION_ACPI40 4 +#define FADT_REVISION_ACPI50 5 +#define FADT_REVISION_ACPI60 6 + +#pragma pack(push, 1) +typedef struct { + ACPITableHeader header; // Signature is "FACP" + uint32 facsAddr; + uint32 dsdtAddr; + uint8 reserved1; + uint8 preferredPmProfile; + uint16 sciInt; + uint32 smiCmd; + uint8 acpiEnable; + uint8 acpiDisable; + uint8 s4biosReq; + uint8 pstateCnt; + uint32 pm1aEvtBlk; + uint32 pm1bEvtBlk; + uint32 pm1aCntBlk; + uint32 pm1bCntBlk; + uint32 pm2CntBlk; + uint32 pmTmrBlk; + uint32 gpe0Blk; + uint32 gpe1Blk; + uint8 pm1EvtLen; + uint8 pm1CntLen; + uint8 pm2CntLen; + uint8 pmTmrLen; + uint8 gpe0BlkLen; + uint8 gpe1BlkLen; + uint8 gpe1Base; + uint8 cstCnt; + uint16 pLvl2Lat; + uint16 pLvl3Lat; + uint16 flushSize; + uint16 flushStride; + uint8 dutyOffset; + uint8 dutyWidth; + uint8 dayAlrm; + uint8 monAlrm; + uint8 century; + uint16 iapcBootArch; + uint8 reserved2; + uint32 flags; + ACPIAddress resetReg; + uint8 resetValue; + uint16 armBootArch; + uint8 minorVersion; + uint64 xFacsAddr; + uint64 xDsdtAddr; + ACPIAddress xPm1aEvtBlk; + ACPIAddress xPm1bEvtBlk; + ACPIAddress xPm1aCntBlk; + ACPIAddress xPm1bCntBlk; + ACPIAddress xPm2CntBlk; + ACPIAddress xPmTmrBlk; + ACPIAddress xGpe0Blk; + ACPIAddress xGpe1Blk; + ACPIAddress sleepCtlReg; + ACPIAddress sleepStsReg; + uint64 hypervisorVendor; +} ACPITableFADT; +#pragma pack(pop) + +enum acpi_fadt_flags { + FADT_WBINVD = 0x00000001, + FADT_WBINVD_FLUSH = 0x00000002, + FADT_PROC_C1 = 0x00000004, + FADT_P_LVL2_UP = 0x00000008, + FADT_PWR_BUTTON = 0x00000010, + FADT_SLP_BUTTON = 0x00000020, + FADT_FIX_RTC = 0x00000040, + FADT_RTC_S4 = 0x00000080, + FADT_TMR_VAL_EXT = 0x00000100, + FADT_DCK_CAP = 0x00000200, + FADT_RESET_REG_SUP = 0x00000400, + FADT_SEALED_CASE = 0x00000800, + FADT_HEADLESS = 0x00001000, + FADT_CPU_SW_SLP = 0x00002000, + FADT_PCI_EXP_WAK = 0x00004000, + FADT_USE_PLATFORM_CLOCK = 0x00008000, + FADT_S4_RTS_STS_VALID = 0x00010000, + FADT_REMOTE_POWER_ON_CAPABLE = 0x00020000, + FADT_FORCE_APIC_CLUSTER_MODE = 0x00040000, + FADT_FORCE_APIC_PHYSICAL_DESTINATION_MODE = 0x00080000, + FADT_HW_REDUCED = 0x00100000, + FADT_LOW_POWER_S0 = 0x00200000, +}; + +/* + * ACPI FADT register block types + */ +typedef enum { + ACPI_FADT_REG_BLK_FIRST = 0, + ACPI_FADT_PM1A_EVT = 0, + ACPI_FADT_PM1B_EVT, + ACPI_FADT_PM1A_CNT, + ACPI_FADT_PM1B_CNT, + ACPI_FADT_PM2_CNT, + ACPI_FADT_PM_TMR, + ACPI_FADT_GPE0, + ACPI_FADT_GPE1, + ACPI_FADT_RESET_REG, + ACPI_FADT_SLEEP_CTL, + ACPI_FADT_SLEEP_STS, + ACPI_FADT_REG_BLK_LAST = ACPI_FADT_SLEEP_STS +} AcpiFadtRegBlkType; + + +#define DSDT_SIGNATURE "DSDT" + +#pragma pack(push, 1) +typedef struct { + ACPITableHeader header; + uint8 data[1]; // We don't need the exact format +} ACPITableDSDT; +#pragma pack(pop) + +/* + * Embedded controller boot resources table + */ +#define ECDT_SIGNATURE "ECDT" + +#pragma pack(push, 1) +typedef struct { + ACPITableHeader header; + ACPIAddress ecControl; + ACPIAddress ecData; + uint32 uid; + uint8 gpeBit; + uint8 ecId[1]; // variable length, null-terminated string +} ACPITableECDT; +#pragma pack(pop) + +/* + * NVIDIA BlueField TMFIFO Table (TMFF), used to discover the remote shim-based + * console in place of PL011. + */ +#define TMFF_SIGNATURE "TMFF" + +#pragma pack(push, 1) +typedef struct { + ACPITableHeader header; + uint64 base; + uint64 size; +#define TMFIFO_CON_OVERRIDES_SPCR_FOR_EARLY_CONSOLE 0x1 +#define TMFIFO_CON_OVERRIDES_DBG2 0x2 +#define TMFIFO_NET_OVERRIDES_DBG2 0x4 + uint64 flags; +} ACPITableTMFF; +#pragma pack(pop) + +/* + * Serial Port Console Redirection Table (SPCR) + */ +#define SPCR_SIGNATURE "SPCR" + +#pragma pack(push, 1) +typedef struct { + ACPITableHeader header; + uint8 interfaceType; + uint8 reserved1[3]; + ACPIAddress portAddr; + uint8 interruptType; + uint8 irq; + uint32 globalSysInterrupt; + uint8 baudRate; + uint8 parity; + uint8 stopBits; + uint8 flowControl; + uint8 terminalType; + uint8 reserved2; + uint16 pciVid; + uint16 pciDid; + uint8 pciBus; + uint8 pciDev; + uint8 pciFunc; + uint32 pciFlags; + uint8 pciSeg; + uint32 reserved3[4]; +} ACPITableSPCR; +#pragma pack(pop) + +/* + * interfaceType field definitions + */ +#define ACPI_SPCR_16550 0x0 +#define ACPI_SPCR_16550_DBGP_SUBSET 0x1 +#define ACPI_SPCR_MAX311xE 0x2 +#define ACPI_SPCR_PL011 0x3 +#define ACPI_SPCR_MSM8x60 0x4 +#define ACPI_SPCR_NVIDIA_16550 0x5 +#define ACPI_SPCR_TI_OMAP 0x6 +#define ACPI_SPCR_APM88xxxx 0x8 +#define ACPI_SPCR_MSM8974 0x9 +#define ACPI_SPCR_SAM5250 0xa +#define ACPI_SPCR_INTEL_USIF 0xb +#define ACPI_SPCR_IMX6 0xc +#define ACPI_SPCR_SBSA_32BIT 0xd +#define ACPI_SPCR_SBSA 0xe +#define ACPI_SPCR_ARM_DCC 0xf +#define ACPI_SPCR_BCM2835 0x10 +#define ACPI_SPCR_SDM845_18432 0x11 +/* + * This is a DBG2 type inherited by SPCR, but all SPCR-described + * ports must correctly fill the ACPI Generic Address Structure + * covering the controller registers. + */ +#define ACPI_SPCR_16550_HONOR_GAS 0x12 +#define ACPI_SPCR_SDM845_7372 0x13 +#define ACPI_SPCR_INTEL_LPSS 0x14 + +/* + * interruptType field definitions + */ +#define ACPI_SPCR_INT_PIC 0x1 +#define ACPI_SPCR_INT_IOAPIC 0x2 +#define ACPI_SPCR_INT_IOSAPIC 0x4 +#define ACPI_SPCR_INT_GIC 0x8 + +/* + * Trusted Computing Platform Alliance (TCPA) table for TPM 1.2. + * + * See TCG ACPI Specification, Family "1.2" and "2.0", Level 00 Revision + * 00.37, December 19, 2014. + */ +#define TCPA_SIGNATURE "TCPA" + +#pragma pack(push, 1) +typedef struct { + ACPITableHeader header; + uint16 platformClass; + union { + struct { + uint32 logAreaMinLength; + uint64 logAreaAddress; + } client; + struct { + uint16 reserved1; + uint64 logAreaMinLength; + uint64 logAreaAddress; + uint16 specificationRevision; + uint8 deviceFlags; + uint8 interruptFlags; + uint8 gpe; + uint8 reserved2[3]; + uint32 globalSystemInterrupt; + ACPIAddress baseAddress; + uint32 reserved3; + ACPIAddress configurationAddress; + uint16 pciSegmentGroupNumber; + uint8 pciBusNumber; + uint8 pciDeviceNumber; + uint8 pciFunctionNumber; + } server; + } platform; +} ACPITableTCPA; +#pragma pack(pop) + +/* Possible entries for the TCPA platform class. */ +enum { + TCPA_PLATFORM_PC_CLIENT = 0x0, + TCPA_PLATFORM_SERVER = 0x1, +}; + +/* + * ACPI table for TPM 2. + * + * There are two versions of this table. Later versions of the spec + * added the address of a copy of the TCG event log. + */ +#define TPM2_SIGNATURE "TPM2" + +/* + * See TCG ACPI Specification, Family "1.2" and "2.0", Level 00 Revision + * 00.37, December 19, 2014, Table 7: TCG Hardware Interface Description + * Table for TPM 2.0. + */ +#pragma pack(push, 1) +typedef struct { + ACPITableHeader header; + uint16 platformClass; + uint16 reserved; + uint64 controlArea; + uint32 startMethod; + uint8 platformSpecific[]; +} ACPITableTPM2; +#pragma pack(pop) + +/* + * See TCG ACPI Specification, Family "1.2" and "2.0", Version 1.2, + * Revision 8, August 18, 2017, Table 7: TCG Hardware Interface + * Description Table for TPM 2.0. + */ +#pragma pack(push, 1) +typedef struct { + ACPITableHeader header; + uint16 platformClass; + uint16 reserved; + uint64 controlArea; + uint32 startMethod; + uint8 platformSpecific[12]; // Up to 12 bytes + uint32 logAreaMinLength; // Optional + uint64 logAreaStartAddr; // Optional +} ACPITableTPM2Ex; +#pragma pack(pop) + +/* Possible entries of the 'startMethod' field in the TPM2 table. */ +typedef enum { + ACPI_TPM2_START_METHOD_INVALID = 0, + ACPI_TPM2_START_METHOD_LEGACY1 = 1, + ACPI_TPM2_START_METHOD_ACPI = 2, + ACPI_TPM2_START_METHOD_LEGACY3 = 3, + ACPI_TPM2_START_METHOD_LEGACY4 = 4, + ACPI_TPM2_START_METHOD_LEGACY5 = 5, + ACPI_TPM2_START_METHOD_MMIO_TIS = 6, + ACPI_TPM2_START_METHOD_CRB = 7, + ACPI_TPM2_START_METHOD_CRB_WITH_ACPI = 8, + ACPI_TPM2_START_METHOD_LEGACY9 = 9, + ACPI_TPM2_START_METHOD_LEGACY10 = 10, + ACPI_TPM2_START_METHOD_CRB_WITH_ARM_SMC = 11, +} AcpiTpm2StartMethod; + +/* Possible entries for the 'platformClass' field in the TPM2 table. */ +typedef enum { + ACPI_TPM2_PLATFORM_PC_CLIENT = 0x0, + ACPI_TPM2_PLATFORM_SERVER = 0x1, +} AcpiTpm2PlatformClass; + +#define IBFT_SIGNATURE1 "iBFT" +#define IBFT_SIGNATURE2 "IBFT" +#define MPST_SIGNATURE "MPST" +#define SLIC_SIGNATURE "SLIC" +#define DMAR_SIGNATURE "DMAR" + +/* + * Special values used in the ACPI SLIT table. + * + * Based on the ACPI documentation (Revision 4.0, June 16, 2009 ), + * section 5.2.17. + */ +#define ACPI_SLIT_LOCAL_DISTANCE (10) +#define ACPI_SLIT_UNREACHABLE (255) +#define ACPI_SLIT_LOWEST_VALID_DISTANCE (ACPI_SLIT_LOCAL_DISTANCE) +#define ACPI_SLIT_HIGHEST_VALID_DISTANCE (ACPI_SLIT_UNREACHABLE - 1) +#define ACPI_SLIT_INVALID (ACPI_SLIT_UNREACHABLE + 1) + +/* + * arm64 Generic Timer Description Table (GTDT). + */ +#define GTDT_SIGNATURE "GTDT" + +#pragma pack(push, 1) +typedef struct { + ACPITableHeader header; + uint64 address; + uint32 flags; + uint32 secureEL1Gsiv; + uint32 secureEL1Flags; + uint32 nonSecureEL1Gsiv; + uint32 nonSecureEL1Flags; + uint32 virtualEL1Gsiv; + uint32 virtualEL1Flags; + uint32 nonSecureEL2Gsiv; + uint32 nonSecureEL2Flags; + uint64 cntReadBase; + uint32 platformTimerCount; + uint32 platformTimerOffset; + uint32 virtualEL2Gsiv; + uint32 virtualEL2Flags; + uint8 platformTimers[0]; +} ACPITableGTDT; +#pragma pack(pop) + +/* For flags field. */ +#define ACPI_GTDT_MAPPED_BLOCK_PRESENT 1 + +/* For ACPITableGTDT *Flags */ +#define ACPI_GTDT_TRIGGER_MASK 1 +#define ACPI_GTDT_TRIGGER_LEVEL 0 +#define ACPI_GTDT_TRIGGER_EDGE 1 +#define ACPI_GTDT_POLARITY_MASK 2 +#define ACPI_GTDT_POLARITY_HIGH 0 +#define ACPI_GTDT_POLARITY_LOW 2 + +#define PPTT_SIGNATURE "PPTT" + +/* + * arm64 IO Remapping Table (IORT). + */ +#define IORT_SIGNATURE "IORT" + + +#endif /* !_ACPI_TABLE_DEFS_H_ */