/** @file Definition of the global NVS area protocol. This protocol publishes the address and format of a global ACPI NVS buffer used as a communications buffer between SMM code and ASL code. Note: Data structures defined in this protocol are not naturally aligned. @copyright Copyright 2004 - 2021 Intel Corporation.
SPDX-License-Identifier: BSD-2-Clause-Patent **/ #ifndef _EFI_GLOBAL_NVS_AREA_H_ #define _EFI_GLOBAL_NVS_AREA_H_ // // Global NVS Area Protocol GUID // #define EFI_GLOBAL_NVS_AREA_PROTOCOL_GUID { 0x74e1e48, 0x8132, 0x47a1, 0x8c, 0x2c, 0x3f, 0x14, 0xad, 0x9a, 0x66, 0xdc } // // Because of ASL constrains cannot use MAX_SOCKET and MAX_LOGIC_IIO_STACK to configure ACPI objects. The symbols // below are the largest values of MAX_SOCKET or MAX_LOGIC_IIO_STACK currently supported in BiosParameterRegion.asi. // #define NVS_MAX_SOCKETS 8 #define NVS_MAX_LOGIC_IIO_STACKS 14 #if NVS_MAX_SOCKETS < MAX_SOCKET #error "Must update NVS_MAX_SOCKETS and BiosParameterRegion.asi to handle so many sockets" #endif #if NVS_MAX_LOGIC_IIO_STACKS < MAX_LOGIC_IIO_STACK #error "Must update NVS_MAX_LOGIC_IIO_STACKS and BiosParameterRegion.asi to handle so many stacks" #endif // // Extern the GUID for protocol users. // extern EFI_GUID gEfiGlobalNvsAreaProtocolGuid; // // Global NVS Area definition // BIOS parameters region provided by POST code to ASL, defined as PSYS in BiosParametersRegion.asi // #pragma pack (1) typedef struct { // IOAPIC Start UINT32 PlatformId; UINT64 IoApicEnable; UINT8 ApicIdOverrided :1; UINT8 PchIoApic_24_119 :1; UINT8 Cpx4Detect :1; UINT8 Reserved0 :5; // IOAPIC End // Power Management Start UINT8 TpmEnable :1; UINT8 CStateEnable :1; UINT8 C3Enable :1; UINT8 C6Enable :1; UINT8 C7Enable :1; UINT8 MonitorMwaitEnable :1; UINT8 PStateEnable :1; UINT8 EmcaEn :1; UINT8 HWAllEnable :2; UINT8 KBPresent :1; UINT8 MousePresent :1; UINT8 TStateEnable :1; UINT8 TStateFineGrained :1; UINT8 OSCX :1; UINT8 Reserved1 :1; // Power Management End // RAS Start UINT8 CpuChangeMask; UINT8 IioChangeMask; UINT16 IioPresentBitMask[NVS_MAX_SOCKETS]; UINT32 SocketBitMask; // make sure this is at 4byte boundary UINT8 CpuCoreThreadsCount; UINT32 ProcessorApicIdBase[NVS_MAX_SOCKETS]; UINT64 ProcessorBitMask[NVS_MAX_SOCKETS]; // cores 0-63 for each socket UINT64 ProcessorBitMaskHi[NVS_MAX_SOCKETS]; // cores 64-127 for each socket UINT32 MmCfg; UINT32 TsegSize; UINT32 SmiRequestParam[4]; UINT32 SciRequestParam[4]; UINT64 MigrationActionRegionAddress; UINT8 Cpu0Uuid[16]; UINT8 Cpu1Uuid[16]; UINT8 Cpu2Uuid[16]; UINT8 Cpu3Uuid[16]; UINT8 Cpu4Uuid[16]; UINT8 Cpu5Uuid[16]; UINT8 Cpu6Uuid[16]; UINT8 Cpu7Uuid[16]; UINT8 CpuSpareMask; UINT8 Mem0Uuid[16]; UINT8 Mem1Uuid[16]; UINT8 Mem2Uuid[16]; UINT8 Mem3Uuid[16]; UINT8 Mem4Uuid[16]; UINT8 Mem5Uuid[16]; UINT8 Mem6Uuid[16]; UINT8 Mem7Uuid[16]; UINT8 Mem8Uuid[16]; UINT8 Mem9Uuid[16]; UINT8 Mem10Uuid[16]; UINT8 Mem11Uuid[16]; UINT8 Mem12Uuid[16]; UINT8 Mem13Uuid[16]; UINT8 Mem14Uuid[16]; UINT8 Mem15Uuid[16]; UINT64 EmcaL1DirAddr; UINT32 ProcessorId; UINT8 PcieAcpiHotPlugEnable; UINT8 WheaEnabled; UINT8 WheaSci; UINT8 PropagateSerrOption; UINT8 PropagatePerrOption; // RAS End // VTD Start UINT64 DrhdAddr[3]; UINT64 AtsrAddr[3]; UINT64 RhsaAddr[3]; // VTD End // SR-IOV WA Start UINT8 WmaaSICaseValue; UINT16 WmaaSISeg; UINT8 WmaaSIBus; UINT8 WmaaSIDevice; UINT8 WmaaSIFunction; UINT8 WmaaSISts; UINT8 WheaSupportEn; // SR-IOV End // BIOS Guard Start UINT64 BiosGuardMemAddress; UINT8 BiosGuardMemSize; UINT16 BiosGuardIoTrapAddress; UINT8 CpuSkuNumOfBitShift; // BIOS Guard End // USB3 Start UINT8 XhciMode; UINT8 HostAlertVector1; UINT8 HostAlertVector2; // USB3 End // HWPM Start UINT8 HWPMEnable :2; // HWPM UINT8 Reserved3 :1; // reserved bit UINT8 HwpInterrupt :1; // HWP Interrupt UINT8 Reserved2 :4; // reserved bits // HWPM End // SGX Start UINT8 SgxStatus; UINT64 EpcLength[8]; // MAX_IMC * MAX_SOCKET UINT64 EpcBaseAddress[8]; // MAX_IMC * MAX_SOCKET // SGX End // PCIe Multi-Seg Start UINT8 BusBase[NVS_MAX_SOCKETS][NVS_MAX_LOGIC_IIO_STACKS]; // PCI bus base number for each stack UINT8 PcieMultiSegSupport; // Enable /Disable switch UINT8 PcieSegNum[NVS_MAX_SOCKETS]; // PCI segment number array for each socket // PCIe Multi-seg end UINT8 SncAnd2Cluster; // 0 - SNC disabled, 2 - SNC enabled (2 clusters), 4 - SNC enabled (4 clusters) // XTU Start UINT32 XTUBaseAddress; // 193 XTU Base Address UINT32 XTUSize; // 197 XTU Entries Size UINT32 XMPBaseAddress; // 201 XTU Base Address UINT8 DDRReferenceFreq; // 205 DDR Reference Frequency UINT8 Rtd3Support; // 206 Runtime D3 support. UINT8 Rtd3P0dl; // 207 User selctable Delay for Device D0 transition. UINT8 Rtd3P3dl; // 208 User selctable Delay for Device D0 transition. // XTU End // FPGA Root Port Bus UINT8 FpgaBusBase[8]; UINT8 FpgaBusLimit[8]; // FPGA present bit UINT8 FpgaPresent[8]; // FPGA Resource Allocation UINT32 VFPBMemBase[8]; UINT32 VFPBMemLimit[8]; // FPGA KTI present bitmap UINT32 FpgaKtiPresent; // FPGA Bus for KTI UINT8 FpgaKtiBase[8]; UINT16 PmBase; // ACPI IO Base Address UINT8 DebugModeIndicator; // Debug Mode Indicator UINT8 IioPcieRpCapOffset; // IIO PCIe root port PCIe Capability offset UINT8 ArtTscLinkFlag; // Flag to indicate if TSC is linked to ART } BIOS_ACPI_PARAM; #pragma pack () // // Global NVS Area Protocol // typedef struct _EFI_GLOBAL_NVS_AREA_PROTOCOL { BIOS_ACPI_PARAM *Area; } EFI_GLOBAL_NVS_AREA_PROTOCOL; #endif