summaryrefslogtreecommitdiff
path: root/ReferenceCode/Haswell/Library/OverclockingLib/OverclockingLibrary.h
diff options
context:
space:
mode:
Diffstat (limited to 'ReferenceCode/Haswell/Library/OverclockingLib/OverclockingLibrary.h')
-rw-r--r--ReferenceCode/Haswell/Library/OverclockingLib/OverclockingLibrary.h352
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