/** @file
This file contains CPU Gnvs Struct specific to processor
Copyright (c) 2017, Intel Corporation. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent
**/
#ifndef _POWER_MGMT_NVS_STRUCT_H_
#define _POWER_MGMT_NVS_STRUCT_H_
//
// Processor Power Management GlobalNvs Revisions
//
#define CPU_GLOBAL_NVS_AREA_REVISION 2
//
// Structure Declarations
//
#pragma pack(1)
///
/// Config TDP level settings.
///
typedef struct {
UINT16 CtdpPowerLimit1; ///< CTDP Power Limit1
UINT16 CtdpPowerLimit2; ///< CTDP Power Limit2
UINT8 CtdpPowerLimitWindow; ///< CTDP Power Limit Time Window
UINT8 CtdpCtc; ///< CTDP CTC
UINT8 CtdpTar; ///< CTDP TAR
UINT8 CtdpPpc; ///< CTDP PPC
} CTDP_LEVEL_SETTINGS;
///
/// CPU Global NVS Area definition
///
typedef struct {
/**
This member specifies the revision of the CPU_GLOBAL_NVS_AREA. This field is used to indicate backward
compatible changes to the NVS AREA. Any such changes to this PPI will result in an update in the revision number.
Revision 1:
- Initial version.
**/
UINT8 Revision; ///< (0) CPU GlobalNvs Revision
//
// PPM Flag Values
//
UINT32 PpmFlags; ///< (1-4) PPM Flags
UINT8 Reserved; ///< (5) Reserved
//
// Thermal Configuration Values
//
UINT8 AutoCriticalTripPoint; ///< (6) Auto Critical Trip Point
UINT8 AutoPassiveTripPoint; ///< (7) Auto Passive Trip Point
UINT8 AutoActiveTripPoint; ///< (8) Auto Active Trip Point
UINT32 Cpuid; ///< (9) CPUID
//
// ConfigTDP Values
//
UINT8 ConfigurablePpc; ///< (13) Boot Mode vlues for _PPC
//
// ConfigTDP Level settngs
//
UINT8 CtdpLevelsSupported; ///< (14) ConfigTdp Number Of Levels
UINT8 ConfigTdpBootModeIndex; ///< (15) CTDP Boot Mode Index
///
/// (16) CTDP Level 0 Power Limit1
/// (18) CTDP Level 0 Power Limit2
/// (20) CTDP Level 0 Power Limit1 Time Window
/// (21) CTDP Level 0 CTC
/// (22) CTDP Level 0 TAR
/// (23) CTDP Level 0 PPC
/// (24) CTDP Level 1 Power Limit1
/// (26) CTDP Level 1 Power Limit2
/// (28) CTDP Level 1 Power Limit1 Time Window
/// (29) CTDP Level 1 CTC
/// (30) CTDP Level 1 TAR
/// (31) CTDP Level 1 PPC
/// (32) CTDP Level 2 Power Limit1
/// (34) CTDP Level 2 Power Limit2
/// (36) CTDP Level 2 Power Limit1 Time Window
/// (37) CTDP Level 2 CTC
/// (38) CTDP Level 2 TAR
/// (39) CTDP Level 2 PPC
///
CTDP_LEVEL_SETTINGS CtdpLevelSettings[3];
//
// Mwait Hints and Latency values for C3/C6/C7/C7S
//
UINT8 C3MwaitValue; ///< (40) Mwait Hint value for C3
UINT8 C6MwaitValue; ///< (41) Mwait Hint value for C6
UINT8 C7MwaitValue; ///< (42) Mwait Hint value for C6
UINT8 CDMwaitValue; ///< (43) Mwait Hint value for C7/C8/C9/C10
UINT16 C3Latency; ///< (44-45) Latency value for C3
UINT16 C6Latency; ///< (46-47) Latency Value for C6
UINT16 C7Latency; ///< (48-49) Latency Value for C6
UINT16 CDLatency; ///< (50-51) Latency Value for C7/C8/C9/C10
UINT16 CDIOLevel; ///< (52-53) IO Level Value for C7/C8/C9/C10
UINT16 CDPowerValue; ///< (54-55) Power Value for C7/C8/C9/C10
UINT8 MiscPowerManagementFlags; ///< (55) MiscPowerManagementFlags
//
// DTS
//
UINT8 EnableDigitalThermalSensor; ///< (57) DTS Function enable
UINT8 BspDigitalThermalSensorTemperature; ///< (58) Temperature of BSP
UINT8 ApDigitalThermalSensorTemperature; ///< (59) Temperature of AP
UINT8 DigitalThermalSensorSmiFunction; ///< (60) SMI function call via DTS IO Trap
UINT8 PackageDTSTemperature; ///< (61) Package temperature
UINT8 IsPackageTempMSRAvailable; ///< (62) Package Temperature MSR available
UINT8 Ap2DigitalThermalSensorTemperature; ///< (63) Temperature of the second AP
UINT8 Ap3DigitalThermalSensorTemperature; ///< (64) Temperature of the third AP
//
// BIOS Guard
//
UINT64 BiosGuardMemAddress; ///< (65-72) BIOS Guard Memory Address for Tool Interface
UINT8 BiosGuardMemSize; ///< (73) BIOS Guard Memory Size for Tool Interface
UINT16 BiosGuardIoTrapAddress; ///< (74-75) IoTrap Address for Tool Interface
UINT16 BiosGuardIoTrapLength; ///< (76-77) IoTrap Length for Tool Interface
//
// DTS I/O Trap
//
UINT16 DtsIoTrapAddress; ///< (78-79) DTS IO trap Address
UINT8 DtsIoTrapLength; ///< (80) DTS IO trap Length
UINT8 DtsAcpiEnable; ///< (81) DTS is in ACPI Mode Enabled
//
// Software Guard Extension
//
UINT8 SgxStatus; ///< (82) SE Status
UINT64 EpcBaseAddress; ///< (83-90) EPC Base Address
UINT64 EpcLength; ///< (91-98) EPC Length
//
// HWP
//
UINT8 HwpVersion; ///< (99) HWP Status
UINT16 HwpIoTrapAddress; ///< (100-101) IoTrap Address for HWP
UINT16 HwpIoTrapLength; ///< (102-103) IoTrap Length for HWP
UINT8 PowerState; ///< (104) Power State
UINT8 EnableHdcPolicy; ///< (105) Hardware Duty Cycling Policy
UINT8 HwpInterruptStatus; ///< (106) HWP Interrupt Status
UINT8 DtsInterruptStatus; ///< (107) DTS Interrupt Status
} CPU_GLOBAL_NVS;
#pragma pack()
typedef struct _CPU_GLOBAL_NVS_AREA_CONFIG {
CPU_GLOBAL_NVS *Area;
} CPU_GLOBAL_NVS_AREA_CONFIG;
typedef struct _FVID_HEADER {
UINT32 Stepping; ///< Matches value returned by CPUID function 1
UINT16 MaxBusRatio; ///< Matches BUS_RATIO_MAX field in PERF_STS_MSR
UINT16 EistStates; ///< Number of states of FVID (N)
} FVID_HEADER;
typedef struct _FVID_STATE {
UINT32 State; ///< State Number (0 - N-1)
UINT16 BusRatio; ///< BUS_RATIO_SEL value to be written to PERF_CTL
UINT32 Power; ///< Typical power consumed by CPU in this state
UINT32 Limit16State; ///< State Number (0 - N-1) with limit 16 P-states
UINT16 Limit16BusRatio; ///< BUS_RATIO_SEL value to be written to PERF_CTL with limit 16 P-states
UINT32 Limit16Power; ///< Typical power consumed by CPU in this state with limit 16 P-states
} FVID_STATE;
typedef union _FVID_TABLE {
FVID_HEADER FvidHeader;
FVID_STATE FvidState;
UINT64 FvidData;
} FVID_TABLE;
#endif