diff options
Diffstat (limited to 'ReferenceCode/Haswell/Library/OverclockingLib/OverclockingLibrary.h')
-rw-r--r-- | ReferenceCode/Haswell/Library/OverclockingLib/OverclockingLibrary.h | 352 |
1 files changed, 352 insertions, 0 deletions
diff --git a/ReferenceCode/Haswell/Library/OverclockingLib/OverclockingLibrary.h b/ReferenceCode/Haswell/Library/OverclockingLib/OverclockingLibrary.h new file mode 100644 index 0000000..fd32d1f --- /dev/null +++ b/ReferenceCode/Haswell/Library/OverclockingLib/OverclockingLibrary.h @@ -0,0 +1,352 @@ +/** @file + Header file for Cpu Platform Lib implementation. + +@copyright + Copyright (c) 2012 Intel Corporation. All rights reserved + This software and associated documentation (if any) is furnished + under a license and may only be used or copied in accordance + with the terms of the license. Except as permitted by such + license, no part of this software or documentation may be + reproduced, stored in a retrieval system, or transmitted in any + form or by any means without the express written consent of + Intel Corporation. + + This file contains a 'Sample Driver' and is licensed as such + under the terms of your license agreement with Intel or your + vendor. This file may be modified by the user, subject to + the additional terms of the license agreement +**/ +#ifndef _OVERCLOCKING_LIBRARY_H_ +#define _OVERCLOCKING_LIBRARY_H_ + +#if !defined(EDK_RELEASE_VERSION) || (EDK_RELEASE_VERSION < 0x00020000) +#include "EdkIIGlueBase.h" +#endif + +// +// OC Mailbox MSR +// +#define MSR_OC_MAILBOX 0x00000150 +#define OC_LIB_WAIT_TIMEOUT 5000 ///< 5 milliseconds + +// +// OC Mailbox commands +// +#define OC_LIB_CMD_GET_OC_CAPABILITIES 0x01 +#define OC_LIB_CMD_GET_PER_CORE_RATIO_LIMIT 0x02 +#define OC_LIB_CMD_GET_VOLTAGE_FREQUENCY 0x10 +#define OC_LIB_CMD_SET_VOLTAGE_FREQUENCY 0x11 +#define OC_LIB_CMD_GET_SVID_CONFIG 0x12 +#define OC_LIB_CMD_SET_SVID_CONFIG 0x13 +#define OC_LIB_CMD_GET_GLOBAL_CONFIG 0x14 +#define OC_LIB_CMD_SET_GLOBAL_CONFIG 0x15 + +// +// OC Mailbox completion codes +// +#define OC_LIB_COMPLETION_CODE_SUCCESS 0x00 +#define OC_LIB_COMPLETION_CODE_OC_LOCKED 0x01 +#define OC_LIB_COMPLETION_CODE_INVALID_DOMAIN 0x02 +#define OC_LIB_COMPLETION_CODE_MAX_RATIO_EXCEEDED 0x03 +#define OC_LIB_COMPLETION_CODE_MAX_VOLTAGE_EXCEEDED 0x04 +#define OC_LIB_COMPLETION_CODE_OC_NOT_SUPPORTED 0x05 +#define OC_LIB_COMPLETION_CODE_WRITE_FAILED 0x06 +#define OC_LIB_COMPLETION_CODE_READ_FAILED 0x07 + +// +// Domain ID definitions +// +#define OC_LIB_DOMAIN_ID_IA_CORE 0x00 +#define OC_LIB_DOMAIN_ID_GT 0x01 +#define OC_LIB_DOMAIN_ID_CLR 0x02 +#define OC_LIB_DOMAIN_ID_UNCORE 0x03 +#define OC_LIB_DOMAIN_ID_IOA 0x04 +#define OC_LIB_DOMAIN_ID_IOD 0x05 + +// +// Bit 10 is the S11.0.10V sign bit +// +#define FIXED_POINT_SIGN_BIT_MASK 0x0400 +#define INT16_SIGN_BIT_MASK 0x8000 + +// +// Voltage Conversion defines +// +#define MILLIVOLTS_PER_VOLT 1000 +#define MAX_TARGET_MV 4095 +#define MAX_OFFSET_MV 500 + +#define CONVERT_TO_FIXED_POINT_VOLTS 0 +#define CONVERT_TO_BINARY_MILLIVOLT 1 + +// +// Masks and offsets +// +#define BIT0_MASK 0x1 +#define MAX_RATIO_MASK 0x000000FF +#define VOLTAGE_TARGET_MASK 0x000FFF00 +#define VOLTAGE_TARGET_OFFSET 8 +#define VOLTAGE_MODE_MASK 0x00100000 +#define VOLTAGE_MODE_OFFSET 20 +#define VOLTAGE_OFFSET_MASK 0xFFE00000 +#define VOLTAGE_OFFSET_OFFSET 21 + +#define SVID_DISABLE_MASK 0x80000000 +#define SVID_DISABLE_OFFSET 31 +#define SVID_VOLTAGE_MASK 0x00000FFF + +#define FIVR_FAULTS_MASK 0x00000001 +#define FIVR_EFFICIENCY_MASK 0x00000002 +#define FIVR_EFFICIENCY_OFFSET 1 + +#define OC_CAPS_MAX_RATIO_MASK 0x000000FF +#define OC_CAPS_RATIO_SUPPORT_MASK 0x00000100 +#define OC_CAPS_RATIO_SUPPORT_OFFSET 8 +#define OC_CAPS_OVERRIDE_SUPPORT_MASK 0x00000200 +#define OC_CAPS_OVERRIDE_SUPPORT_OFFSET 9 +#define OC_CAPS_OFFSET_SUPPORT_MASK 0x00000400 +#define OC_CAPS_OFFSET_SUPPORT_OFFSET 10 + +// +// Voltage offset definitions +// +#define OC_LIB_OFFSET_ADAPTIVE 0 +#define OC_LIB_OFFSET_OVERRIDE 1 +#define OC_LIB_VOLTAGE_DO_NOT_UPDATE 0xFFFF + +/// +/// OC Library structures +/// +typedef struct { + UINT32 CommandData; + UINT8 CommandCompletion : 8; + UINT8 Param1 : 8; + UINT8 Param2 : 8; + UINT8 Reserved : 7; + UINT8 RunBusy : 1; +} OC_LIBRARY_COMMAND; + +typedef union _OC_MAILBOX_COMMAND { + UINT32 InterfaceData; + struct { + UINT8 CommandCompletion : 8; + UINT8 Param1 : 8; + UINT8 Param2 : 8; + UINT8 Reserved : 7; + UINT8 RunBusy : 1; + } Fields; +} OC_MAILBOX_COMMAND; + +typedef struct _OC_MAILBOX_ITEM { + UINT32 Data; + OC_MAILBOX_COMMAND Interface; +} OC_MAILBOX_ITEM; + +typedef struct { + UINT8 MaxOcRatio; + UINT8 VoltageTargetMode; + UINT16 VoltageTarget; + INT16 VoltageOffset; +} VOLTAGE_FREQUENCY_SETTINGS; + +typedef struct { + VOLTAGE_FREQUENCY_SETTINGS VfSettings; + UINT8 DomainId; +} VOLTAGE_FREQUENCY_ITEM; + +typedef enum { + IaCore, + Gt, + Clr, + Uncore +} CPU_DOMAIN_ID; + +typedef struct { + UINT16 VoltageTarget; + BOOLEAN SvidDisable; +} SVID_CONFIG_ITEM; + +typedef struct { + UINT8 MaxOcRatioLimit; + BOOLEAN RatioOcSupported; + BOOLEAN VoltageOverridesSupported; + BOOLEAN VoltageOffsetSupported; + UINT8 DomainId; +} OC_CAPABILITIES_ITEM; + +typedef struct { + UINT8 MaxOcRatioLimit1C; + UINT8 MaxOcRatioLimit2C; + UINT8 MaxOcRatioLimit3C; + UINT8 MaxOcRatioLimit4C; + UINT8 Index; +} CORE_RATIO_LIMITS_ITEM; + +typedef struct { + UINT8 DisableFivrFaults; + UINT8 DisableFivrEfficiency; +} GLOBAL_CONFIG_ITEM; + +typedef struct { + UINT32 MaxOcRatio : 8; + UINT32 VoltageTargetU12 : 12; + UINT32 TargetMode : 1; + UINT32 VoltageOffsetS11 : 11; +} VF_MAILBOX_COMMAND_DATA; + +/// +/// OC Library Function Prototypes +/// +EFI_STATUS +EFIAPI GetVoltageFrequencyItem ( + OUT VOLTAGE_FREQUENCY_ITEM *VfSettings, + OUT UINT32 *LibStatus + ) +/** + Gets the Voltage and Frequency information for a given CPU domain + + @param[OUT] *VfSettings + @param[OUT] *LibStatus + + @retval EFI_STATUS +**/ +; + +EFI_STATUS +EFIAPI SetVoltageFrequencyItem ( + IN VOLTAGE_FREQUENCY_ITEM VfSettings, + OUT UINT32 *LibStatus + ) +/** + Sets the Voltage and Frequency information for a given CPU domain + + @param[IN] *VfSettings + @param[OUT] *LibStatus + + @retval EFI_STATUS +**/ +; + +EFI_STATUS +EFIAPI GetFivrConfig ( + OUT GLOBAL_CONFIG_ITEM *FivrConfig, + OUT UINT32 *LibStatus + ) +/** + Get the global FIVR Configuration information + + @param[OUT] *FivrConfig + @param[OUT] *LibStatus + + @retval EFI_STATUS +**/ +; + +EFI_STATUS +EFIAPI SetFivrConfig ( + IN GLOBAL_CONFIG_ITEM FivrConfig, + OUT UINT32 *LibStatus + ) +/** + Set the Global FIVR Configuration information + + @param[IN] FivrConfig + @param[OUT] *LibStatus + + @retval EFI_STATUS +**/ +; + +EFI_STATUS +EFIAPI GetSvidConfig ( + OUT SVID_CONFIG_ITEM *SvidConfig, + OUT UINT32 *LibStatus + ) +/** + Get the SVID Configuration information + + @param[OUT] *SvidConfig + @param[OUT] *LibStatus + + @retval EFI_STATUS +**/ +; + +EFI_STATUS +EFIAPI SetSvidConfig ( + IN SVID_CONFIG_ITEM SvidConfig, + OUT UINT32 *LibStatus + ) +/** + Set the SVID Configuration information + + @param[IN] SvidConfig + @param[OUT] *LibStatus + + @retval EFI_STATUS +**/ +; + +EFI_STATUS +EFIAPI GetOcCapabilities ( + OUT OC_CAPABILITIES_ITEM *OcCapabilities, + OUT UINT32 *LibStatus + ) +/** + Get the overclocking capabilities for a given CPU Domain + + @param[OUT] *OcCapabilities + @param[OUT] *LibStatus + + @retval EFI_STATUS +**/ +; + +VOID +ConvertVoltageTarget ( + IN UINT16 InputVoltageTarget, + OUT UINT16 *OutputVoltageTarget, + IN UINT8 ConversionType + ) +/** + Converts the input voltage target to the fixed point U12.2.10 Volt format or + the Binary millivolts representation based on the ConversionType + +@param[IN] InputVoltageTarget +@param[OUT] *OutputVoltageTarget +@param[IN] ConversionType - 0:fixed point, 1:Binary millivolts +**/ +; + +VOID +ConvertVoltageOffset ( + IN INT16 InputVoltageOffset, + OUT INT16 *OutputVoltageOffset, + IN UINT8 ConversionType + ) +/** + Converts the input votlage Offset to the fixed point S11.0.10 Volt format or + to Binary illivolts representation based on the ConversionType. + +@param[IN] InputVoltageTarget +@param[OUT] *OutputVoltageTarget +@param[IN] ConversionType - 0:fixed point, 1:Signed Binary millivolts +**/ +; + +VOID +ConvertToMailboxFormat ( + IN VOID *InputData, + OUT OC_MAILBOX_ITEM *MailboxData, + IN UINT32 CommandId + ) +/** + Converts the input data to valid mailbox command format based on CommandID + +@param[IN] InputData +@param[OUT] *MailboxData +@param[IN] CommandId +**/ +; + +#endif |