summaryrefslogtreecommitdiff
path: root/ReferenceCode/Chipset/SystemAgent/MemoryInit/Pei/Source/Include/MrcGlobal.h
diff options
context:
space:
mode:
Diffstat (limited to 'ReferenceCode/Chipset/SystemAgent/MemoryInit/Pei/Source/Include/MrcGlobal.h')
-rw-r--r--ReferenceCode/Chipset/SystemAgent/MemoryInit/Pei/Source/Include/MrcGlobal.h993
1 files changed, 993 insertions, 0 deletions
diff --git a/ReferenceCode/Chipset/SystemAgent/MemoryInit/Pei/Source/Include/MrcGlobal.h b/ReferenceCode/Chipset/SystemAgent/MemoryInit/Pei/Source/Include/MrcGlobal.h
new file mode 100644
index 0000000..0264c6a
--- /dev/null
+++ b/ReferenceCode/Chipset/SystemAgent/MemoryInit/Pei/Source/Include/MrcGlobal.h
@@ -0,0 +1,993 @@
+/** @file
+ This file includes all the data structures that the MRC considers "global data".
+
+@copyright
+ Copyright (c) 1999 - 2013 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 an 'Intel Peripheral Driver' and uniquely
+ identified as "Intel Reference Module" and is
+ licensed for Intel CPUs and chipsets under the terms of your
+ license agreement with Intel or your vendor. This file may
+ be modified by the user, subject to additional terms of the
+ license agreement
+**/
+#ifndef _MrcGlobal_h_
+#define _MrcGlobal_h_
+#pragma pack (push, 1)
+
+#include "MrcTypes.h"
+#include "MrcApi.h"
+#include "MrcOemDebugPrint.h"
+#include "MrcRmtData.h"
+#include "MrcSpdData.h"
+#include "McAddress.h"
+
+///
+///***************************************************
+/// Structures common to all "global data" elements.
+///***************************************************
+///
+typedef U8 MrcIteration;
+#define MRC_ITERATION_MAX ((1 << ((sizeof (MrcIteration) * 8) - 1)) + ((1 << ((sizeof (MrcIteration) * 8) - 1)) - 1))
+
+#define MRC_NUMBER_UPM_PWR_RETRAIN_MARGINS (9)
+
+typedef struct {
+ ///
+ ///< Thermal Options
+ ///
+ U8 EnableExtts;
+ U8 EnableCltm;
+ U8 EnableOltm;
+ U8 EnablePwrDn;
+#ifdef ULT_FLAG
+ U8 EnablePwrDnLpddr;
+#endif // ULT_FLAG
+ U8 Refresh2X;
+ U8 LpddrThermalSensor;
+ U8 LockPTMregs;
+ U8 UserPowerWeightsEn;
+
+ U8 EnergyScaleFact;
+ U8 RaplPwrFl[MAX_CHANNEL];
+
+ U8 RaplLim2Lock;
+ U8 RaplLim2WindX;
+ U8 RaplLim2WindY;
+ U8 RaplLim2Ena;
+ U16 RaplLim2Pwr;
+ U8 RaplLim1WindX;
+ U8 RaplLim1WindY;
+ U8 RaplLim1Ena;
+ U16 RaplLim1Pwr;
+
+ U8 WarmThreshold[MAX_CHANNEL][MAX_DIMMS_IN_CHANNEL];
+ U8 HotThreshold[MAX_CHANNEL][MAX_DIMMS_IN_CHANNEL];
+ U8 WarmBudget[MAX_CHANNEL][MAX_DIMMS_IN_CHANNEL];
+ U8 HotBudget[MAX_CHANNEL][MAX_DIMMS_IN_CHANNEL];
+
+ U8 IdleEnergy[MAX_CHANNEL][MAX_DIMMS_IN_CHANNEL];
+ U8 PdEnergy[MAX_CHANNEL][MAX_DIMMS_IN_CHANNEL];
+ U8 ActEnergy[MAX_CHANNEL][MAX_DIMMS_IN_CHANNEL];
+ U8 RdEnergy[MAX_CHANNEL][MAX_DIMMS_IN_CHANNEL];
+ U8 WrEnergy[MAX_CHANNEL][MAX_DIMMS_IN_CHANNEL];
+ U8 SrefCfgEna;
+ U16 SrefCfgIdleTmr;
+ U8 ThrtCkeMinDefeat;
+ U8 ThrtCkeMinTmr;
+#ifdef ULT_FLAG
+ U8 ThrtCkeMinDefeatLpddr;
+ U8 ThrtCkeMinTmrLpddr;
+#endif // ULT_FLAG
+#ifdef UPSERVER_SUPPORT
+ // CLTM and TSOD settings
+ U8 Altitude;
+ U8 UserThresholdEn;
+ U8 UserBudgetEn;
+ U8 TSOD_TcritMax;
+ U8 TSOD_EventMode;
+ U8 TSOD_EventPolarity;
+ U8 TSOD_CriticalEventOnly;
+ U8 TSOD_EventOutputControl;
+ U8 TSOD_AlarmwindowLockBit;
+ U8 TSOD_CriticaltripLockBit;
+ U8 TSOD_ShutdownMode;
+ U8 TSOD_ThigMax;
+ U8 TSOD_ManEn;
+
+#endif
+} ThermalMngmtEn;
+
+
+typedef struct {
+ MrcBool GdxcEnable; ///< GDXC MOT enable
+ U8 GdxcIotSize; ///< IOT size in multiples of 8MEG
+ U8 GdxcMotSize; ///< MOT size in multiples of 8MEG
+} MrcGdxc;
+
+typedef struct {
+ U32 ECT : 1; ///< BIT0 - Early Command Training
+ U32 SOT : 1; ///< BIT1 - Sense Amp Offset Training
+ U32 RDMPRT : 1; ///< BIT2 - Read MPR Training
+ U32 RCVET : 1; ///< BIT3 - Read Leveling Training (RcvEn)
+ U32 JWRL : 1; ///< BIT4 - Jedec Write Leveling
+ U32 FWRL : 1; ///< BIT5 - Functional Write Leveling
+ U32 WRTC1D : 1; ///< BIT6 - Write Timing Centerin 1D
+ U32 RDTC1D : 1; ///< BIT7 - Read Timing Centering 1D
+ U32 DIMMODTT : 1; ///< BIT8 - Dimm ODT Training
+ U32 WRDST : 1; ///< BIT9 - Write Drive Strength Training
+ U32 WREQT : 1; ///< BIT10 - Write Equalization Training
+ U32 RCVENC1D: 1; ///< BIT11 - Receive Enable Centering 1D
+ U32 RDODTT : 1; ///< BIT12 - Read ODT Training
+ U32 RDEQT : 1; ///< BIT13 - Read Equalization Training
+ U32 RDAPT : 1; ///< BIT14 - Read Amplifier Power Training
+ U32 WRTC2D : 1; ///< BIT15 - Write Timing Centerin 2D
+ U32 RDTC2D : 1; ///< BIT16 - Read Timing Centering 2D
+ U32 CMDVC : 1; ///< BIT17 - Command Voltage Centering
+ U32 WRVC2D : 1; ///< BIT18 - Write Voltage Centering 2D
+ U32 RDVC2D : 1; ///< BIT19 - Read Voltage Centering 2D
+ U32 RMC : 1; ///< BIT20 - Retrain Margin Check
+ U32 : 1; ///< BIT21 -
+ U32 LCT : 1; ///< BIT22 - Late Command Training
+ U32 RTL : 1; ///< BIT23 - Round Trip latency
+ U32 TAT : 1; ///< BIT24 - Turn Around Timing
+ U32 RMT : 1; ///< BIT25 - RMT Tool
+ U32 MEMTST : 1; ///< BIT26 - Memory Test
+ U32 DIMMODTT1D : 1; ///< BIT27 - DIMMODTT1d
+ U32 WRSRT : 1; ///< BIT28 - Write Slew Rate Training
+ U32 DIMMRONT : 1; ///< BIT29 - Dimm Ron Training
+ U32 ALIASCHK: 1; ///< BIT30 - SPD Alias Check
+} TrainingStepsEn;
+
+typedef enum {
+ MrcModeFull,
+ MrcModeMini
+} MrcMode;
+
+typedef enum {
+ LastRxV,
+ LastRxT,
+ LastTxV,
+ LastTxT,
+ LastRcvEna,
+ LastWrLevel,
+ LastCmdT,
+ LastCmdV,
+ MAX_RESULT_TYPE
+} MrcMarginResult;
+
+///
+/// Define the MRC recommended boot modes.
+///
+typedef enum {
+ bmCold, ///< Cold boot
+ bmWarm, ///< Warm boot
+ bmS3, ///< S3 resume
+ bmFast, ///< Fast boot
+} MrcBootMode;
+
+///
+/// DIMM SPD Security Status
+///
+typedef enum {
+ MrcSpdStatusGood, ///< Memory is in a secure state.
+ MrcSpdStatusAliased, ///< Memory is aliased.
+
+ MrcSpdStatusLast ///< Must be last in the list
+} MrcSpdStatus;
+
+///
+/// Define the virtual channel.
+///
+typedef enum {
+ vcA, ///< Virtual channel A
+ vcB, ///< Virtual channel B
+} MrcVirtualChannel;
+
+///
+/// Define the board types.
+///
+typedef enum {
+ btCRBMB, ///< 0 - CRB Mobile
+ btCRBDT, ///< 1 - CRB Desktop
+ btUser1, ///< 2 - SV mobile
+ btUser2, ///< 3 - SV desktop
+ btUser3, ///< 4 - SV server?
+ btUser4, ///< 5 - Ult
+ btCRBEMB, ///< 6 - CRB Embedded
+ btUnknown, ///< 7 - Unknown
+} MrcBoardType;
+
+///
+/// Define the CPU family/model.
+///
+typedef enum {
+ cmHSW = 0x306C0, ///< Haswell
+ cmHSW_ULT = 0x40650, ///< Haswell-ULT
+ cmCRW = 0x40660, ///< Crystalwell
+ cmBDW = 0x306D0 ///< Broadwell
+} MrcCpuModel;
+
+///
+/// Define the CPU stepping number.
+///
+typedef enum {
+ ///
+ /// Haswell
+ ///
+ csHswA0 = 1,
+ csHswB0 = 2,
+ csHswC0 = 3,
+ csHswLast = csHswC0,
+
+ ///
+ /// Crystalwell
+ ///
+ csCrwB0 = 0,
+ csCrwC0 = 1,
+ csCrwLast = csCrwC0,
+
+ ///
+ /// Haswell-ULT
+ ///
+ csHswUltB0 = 0,
+ csHswUltC0 = 1,
+ csHswUltLast = csHswUltC0,
+
+ ///
+ /// Broadwell
+ ///
+ csBdwA0 = 0,
+ csBdwLast = csBdwA0
+} MrcCpuStepping;
+
+typedef enum {
+ CONTROLLER_NOT_PRESENT, ///< There is no controller present in the system.
+ CONTROLLER_DISABLED, ///< There is a controller present but it is disabled.
+ CONTROLLER_PRESENT ///< There is a controller present and it is enabled.
+} MrcControllerSts;
+
+typedef enum {
+ CHANNEL_NOT_PRESENT, ///< There is no channel present on the controller.
+ CHANNEL_DISABLED, ///< There is a channel present but it is disabled.
+ CHANNEL_PRESENT ///< There is a channel present and it is enabled.
+} MrcChannelSts;
+
+typedef enum {
+ DIMM_ENABLED, ///< DIMM/rank Pair is enabled, presence TBD
+ DIMM_DISABLED, ///< DIMM/rank Pair is disabled, regardless of presence.
+ DIMM_PRESENT, ///< There is a DIMM present in the slot/rank pair and it will be used.
+ DIMM_NOT_PRESENT ///< There is no DIMM present in the slot/rank pair.
+} MrcDimmSts;
+
+typedef enum {
+ STD_PROFILE, ///< Standard DIMM profile select.
+ USER_PROFILE, ///< User specifies various override values.
+ XMP_PROFILE1, ///< XMP enthusiast settings select (XMP profile #1).
+ XMP_PROFILE2, ///< XMP extreme settings select (XMP profile #2).
+ MAX_PROFILE ///< Delimiter
+} MrcProfile;
+
+typedef enum {
+ MRC_REF_CLOCK_133,
+ MRC_REF_CLOCK_100,
+ MRC_REF_CLOCK_MAXIMUM ///< Delimiter
+} MrcRefClkSelect; ///< This value times the MrcClockRatio determines the MrcFrequency.
+
+typedef U32 MrcBClkRef;
+
+typedef enum {
+ MRC_DDR_TYPE_UNKNOWN,
+ MRC_DDR_TYPE_DDR3,
+ MRC_DDR_TYPE_LPDDR3
+} MrcDdrType;
+
+typedef enum {
+ MRC_MODULE_TYPE_UNKNOWN,
+ MRC_MODULE_TYPE_RDIMM,
+ MRC_MODULE_TYPE_UDIMM,
+ MRC_MODULE_TYPE_SODIMM,
+ MRC_MODULE_MICRO_DIMM,
+ MRC_MODULE_MINI_RDIMM,
+ MRC_MODULE_MINI_UDIMM,
+ MRC_MODULE_MINI_CDIMM,
+ MRC_MODULE_72B_SO_UDIMM,
+ MRC_MODULE_72B_SO_RDIMM,
+ MRC_MODULE_72B_SO_CDIMM,
+ MRC_MODULE_LRDIMM,
+ MRC_MODULE_16B_SO_DIMM,
+ MRC_MODULE_32B_SO_DIMM
+} MrcModuleType;
+
+typedef enum {
+ MrcIterationClock = 0,
+ MrcIterationCmdN = 1,
+ MrcIterationCmdS = 2,
+ MrcIterationCke = 3,
+ MrcIterationCtl = 4,
+ MrcIterationCmdV = 5,
+ MrcIterationMax
+} MrcIterationType;
+
+typedef enum {
+ UpmLimit,
+ PowerLimit,
+ RetrainLimit,
+ MarginLimitMax
+} MRC_MARGIN_LIMIT_TYPE;
+
+typedef U8 MrcClockRatio; ///< This value times the MrcRefClkSelect determines the MrcFrequency.
+typedef U32 MrcGfxDataSize; ///< The size of the stolen graphics data memory, in MBytes.
+typedef U32 MrcGfxGttSize; ///< The size of the graphics translation table, in MBytes.
+
+///
+/// UPM PWR and Retrain Limits
+///
+typedef struct {
+ U8 Param;
+ U16 ParamLimit[MarginLimitMax];
+} MrcUpmPwrRetrainLimits;
+
+typedef union {
+ MrcUpmPwrRetrainLimits *Pointer;
+ U64 Data;
+} MrcUPRLimitPtr;
+
+typedef union {
+ U64 Data;
+ U32 Data32[2];
+} MrcCapId; ///< The memory controller capabilities.
+
+///
+/// MRC version description.
+///
+typedef struct {
+ U8 Major; ///< Major version number
+ U8 Minor; ///< Minor version number
+ U8 Rev; ///< Revision number
+ U8 Build; ///< Build number
+} MrcVersion;
+
+///
+/// Memory map configuration information.
+///
+typedef struct {
+ U32 TomMinusMe;
+ U32 ToludBase;
+ U32 BdsmBase;
+ U32 GttBase;
+ U32 GraphicsControlRegister;
+ U32 TsegBase;
+ MrcBool ReclaimEnable;
+ U32 RemapBase;
+ U32 RemapLimit;
+ U32 TouudBase;
+ U32 TotalPhysicalMemorySize;
+ U32 MeStolenBase;
+ U32 MeStolenSize;
+ U32 GdxcMotBase;
+ U32 GdxcMotSize;
+ U32 GdxcIotBase;
+ U32 GdxcIotSize;
+ U32 DprSize;
+ U32 FtpmStolenBase;
+} MrcMemoryMap;
+
+///
+/// Real time clock information.
+///
+typedef struct {
+ U8 Seconds;
+ U8 Minutes;
+ U8 Hours;
+ U8 DayOfMonth;
+ U8 Month;
+ U16 Year;
+} MrcBaseTime;
+
+///
+/// DIMM timings
+///
+typedef struct {
+ U32 tCK; ///< Memory cycle time, in femtoseconds.
+ U16 NMode; ///< Number of tCK cycles for the channel DIMM's command rate mode.
+ U16 tCL; ///< Number of tCK cycles for the channel DIMM's CAS latency.
+ U16 tCWL; ///< Number of tCK cycles for the channel DIMM's minimum CAS write latency time.
+ U16 tFAW; ///< Number of tCK cycles for the channel DIMM's minimum four activate window delay time.
+ U16 tRAS; ///< Number of tCK cycles for the channel DIMM's minimum active to precharge delay time.
+ U16 tRC; ///< Number of tCK cycles for the channel DIMM's minimum active to active/refresh delay time.
+ U16 tRCD; ///< Number of tCK cycles for the channel DIMM's minimum RAS# to CAS# delay time.
+ U16 tREFI; ///< Number of tCK cycles for the channel DIMM's minimum Average Periodic Refresh Interval.
+ U16 tRFC; ///< Number of tCK cycles for the channel DIMM's minimum refresh recovery delay time.
+ U16 tRFC2; ///< Number of tCK cycles for the channel DIMM's minimum refresh recovery delay time.
+ U16 tRFC4; ///< Number of tCK cycles for the channel DIMM's minimum refresh recovery delay time.
+ U16 tRP; ///< Number of tCK cycles for the channel DIMM's minimum row precharge delay time.
+ U16 tRPab; ///< Number of tCK cycles for the channel DIMM's minimum row precharge delay time for all banks.
+ U16 tRRD; ///< Number of tCK cycles for the channel DIMM's minimum row active to row active delay time.
+ U16 tRRD_L; ///< Number of tCK cycles for the channel DIMM's minimum row active to row active delay time for same bank groups.
+ U16 tRRD_S; ///< Number of tCK cycles for the channel DIMM's minimum row active to row active delay time for different bank groups.
+ U16 tRTP; ///< Number of tCK cycles for the channel DIMM's minimum internal read to precharge command delay time.
+ U16 tWR; ///< Number of tCK cycles for the channel DIMM's minimum write recovery time.
+ U16 tWTR; ///< Number of tCK cycles for the channel DIMM's minimum internal write to read command delay time.
+} MrcTiming;
+
+typedef struct {
+ S32 Mtb; ///< Medium time base.
+ S32 Ftb; ///< Fine time base.
+} MrcTimeBase;
+
+typedef struct {
+ U8 Left; ///< The left side of the timing eye.
+ U8 Center; ///< The center of the timing eye.
+ U8 Right; ///< The right side of the timing eye.
+} MrcDqTimeMargin;
+
+typedef struct {
+ U8 High; ///< The high side of the Vref eye.
+ U8 Center; ///< The center of the Vref eye.
+ U8 Low; ///< The low side of the Vref eye.
+} MrcDqVrefMargin;
+
+typedef struct {
+ U8 Left; ///< The left side of the command eye.
+ U8 Right; ///< The right side of the command eye.
+ U8 High; ///< The high side of the command eye.
+ U8 Low; ///< The low side of the command eye.
+} MrcCommandMargin;
+
+typedef struct {
+ U8 Left; ///< The left side of the receive enable eye.
+ U8 Right; ///< The right side of the receive enableeye.
+} MrcRecvEnMargin;
+
+typedef struct {
+ U8 Left; ///< The left side of the write leveling eye.
+ U8 Right; ///< The right side of the write leveling eye.
+} MrcWrLevelMargin;
+
+#ifdef SSA_FLAG
+typedef struct {
+ U8 *BufBase;
+ U32 BufLimit;
+ union {
+ struct {
+ U8 Occupied : 1;
+ U8 HeapEnd : 1;
+ } Bits;
+ U8 Data;
+ } BufFlags;
+} HeapBufHeader;
+#endif // SSA_FLAG
+
+#if ((defined SSA_FLAG) || (defined MRC_DEBUG_PRINT))
+typedef union {
+ struct {
+ U8 Init : 1; ///< 1 is SSA heap initialized.
+ U8 : 7;
+ } Bits;
+ U8 Data;
+ } SsaHeapFlagType;
+#endif
+
+///
+///*****************************************
+/// Output related "global data" structures.
+///*****************************************
+///
+/// This data structure contains all the "global data" values that are considered output by the MRC.
+/// The following are SDRAM level definitions. All ranks on a rank are set to these values.
+///
+/* Commented out until needed, in order to save space.
+typedef struct {
+} MrcSdramOut;
+*/
+
+///
+/// This data structure contains all the "global data" values that are considered output by the MRC.
+/// The following are rank level definitions. All ranks on a DIMM are set to these values.
+///
+typedef struct {
+//MrcSdramOut Sdram[MAX_SDRAM_IN_DIMM];
+ U16 MR[MAX_MR_IN_DIMM]; ///< DRAM mode register value.
+#ifdef ULT_FLAG
+ U16 MR11; ///< LPDDR3 ODT MR
+#endif
+} MrcRankOut;
+
+///
+/// This data structure contains all the "global data" values that are considered output by the MRC.
+/// The following are DIMM level definitions. All ranks on a DIMM are set to these values.
+///
+typedef struct {
+ MrcDimmSts Status; ///< See MrcDimmSts for the definition of this field.
+ MrcTiming Timing[MAX_PROFILE]; ///< The DIMMs timing values.
+ MrcVddSelect VddVoltage[MAX_PROFILE];///< The voltage (VDD) setting for this DIMM, per profile.
+ MrcBool EccSupport; ///< TRUE if ECC is enabled and supported on this DIMM.
+ MrcBool IgnoreNonEccDimm; ///< TRUE if a DIMM without ECC capability should be ignored.
+ MrcBool AddressMirrored; ///< TRUE if the DIMM is address mirrored.
+ MrcBool SelfRefreshTemp; ///< TRUE if the DIMM supports self refresh extended operating temperature range (SRT).
+ MrcBool AutoSelfRefresh; ///< TRUE if the DIMM supports automatic self refresh (ASR).
+ MrcBool PartialSelfRefresh; ///< TRUE if the DIMM supports Partial Array Self Refresh (PASR).
+ MrcBool OnDieThermalSensor; ///< TRUE if the DIMM supports On-die Thermal Sensor (ODTS) Readout.
+ MrcBool ExtendedTemperRange; ///< TRUE if the DIMM supports Extended Temperature Range (ETR).
+ MrcBool ExtendedTemperRefresh; ///< TRUE if the DIMM supports 1x Extended Temperature Refresh rate, FALSE = 2x.
+ MrcDdrType DdrType; ///< DDR type: DDR3 or LPDDR3
+ MrcModuleType ModuleType; ///< Module type: UDIMM, SO-DIMM, etc.
+ U32 SdramCount; ///< The number of SDRAM components on a DIMM.
+ U32 DimmCapacity; ///< DIMM size in MBytes.
+ U32 RowSize; ///< The DIMMs row address size.
+ U16 ColumnSize; ///< The DIMMs column address size.
+ U16 Crc; ///< Calculated CRC16 of the DIMM's provided SPD. Can be used to detect DIMM change.
+ U8 RankInDIMM; ///< The number of ranks in this DIMM.
+ U8 Banks; ///< Number of banks the DIMM contains.
+ U8 BankGroups; ///< Number of bank groups the DIMM contains.
+ U8 PrimaryBusWidth; ///< DIMM primary bus width.
+ U8 SdramWidth; ///< DIMM SDRAM width.
+ U8 SdramWidthIndex; ///< DIMM SDRAM width index (0 = x4, 1 = x8, 2 = x16, 3 = x32).
+ U8 DensityIndex; ///< Total SDRAM capacity index (0 = 256Mb, 1 = 512Mb, 2 = 1Gb, etc).
+ U8 ReferenceRawCard; ///< Indicates which JEDEC reference design raw card was used as the basis for the module assembly.
+ U8 XmpSupport; ///< Indicates if XMP profiles are supported. 0 = None, 1 = XMP1 only, 2 = XMP2 only, 3 = All.
+ U8 XmpRevision; ///< Indicates the XMP revision of this DIMM. 0 = None, 12h = 1.2, 13h = 1.3.
+ MrcRankOut Rank[MAX_RANK_IN_DIMM];
+} MrcDimmOut;
+
+///
+/// This data structure contains all the "global data" values that are considered output by the MRC.
+/// The following are channel level definitions. All DIMMs on a memory channel are set to these values.
+///
+typedef struct {
+ MrcChannelSts Status; ///< Indicates whether this channel should be used.
+ MrcVirtualChannel VirtualChannel; ///< define the virtual channel type A or B.
+ MrcTiming Timing[MAX_PROFILE]; ///< The channel timing values.
+ MrcTimeBase TimeBase[MAX_DIMMS_IN_CHANNEL][MAX_PROFILE];
+ MrcBool EccSupport; ///< TRUE if ECC is enabled and supported on this channel.
+ U32 Capacity; ///< Amount of memory in this channel, in MBytes.
+ U32 DimmCount; ///< Number of valid DIMMs that exist in the channel.
+ U32 DataOffsetTrain[MAX_SDRAM_IN_DIMM];///< DataOffsetTrain CR
+ U32 DataCompOffset[MAX_SDRAM_IN_DIMM]; ///< DataCompOffset CR
+ DDRDATA0CH0_CR_DDRCRDATACONTROL0_STRUCT DqControl0; ///< DqControl0 CR
+ DDRDATA0CH0_CR_DDRCRDATACONTROL1_STRUCT DqControl1[MAX_SDRAM_IN_DIMM]; ///< DqControl1 CR
+ DDRDATA0CH0_CR_DDRCRDATACONTROL2_STRUCT DqControl2[MAX_SDRAM_IN_DIMM]; ///< DqControl2 CR
+ U32 CkeCmdPiCode[2]; ///< CKE CmdPiCode CR, per group
+ U32 CmdsCmdPiCode[2]; ///< CmdS CmdPiCode CR, per group
+ U32 CmdnCmdPiCode[2]; ///< CmdN CmdPiCode CR, per group
+ U32 MchbarBANK; ///< tRCD tRP tRAS tRDPRE (tRTP) tWRPRE and tRRD values.
+ U32 MchbarBANKRANKA; ///< Mchbar TC Read to Read Turnaround CR
+ U32 MchbarBANKRANKB; ///< Mchbar TC Write to x Turnaround CR
+ U32 MchbarBANKRANKC; ///< Mchbar TC Read to Write Turnaround CR
+ U32 MchbarBANKRANKD; ///< Mchbar TC Write /Read Duration
+ U32 TxXtalk[MAX_SDRAM_IN_DIMM]; ///< TxXtalk Setting
+ U16 TxDqs[MAX_RANK_IN_CHANNEL][MAX_SDRAM_IN_DIMM]; ///< TxDQS PI Code
+ U16 TxDq[MAX_RANK_IN_CHANNEL][MAX_SDRAM_IN_DIMM]; ///< TxDQ Pi Code
+ U16 RcvEn[MAX_RANK_IN_CHANNEL][MAX_SDRAM_IN_DIMM]; ///< RcvEn PI Code
+ U16 WlDelay[MAX_RANK_IN_CHANNEL][MAX_SDRAM_IN_DIMM];
+ U8 ClkPiCode[MAX_RANK_IN_CHANNEL]; ///< CLK ClkPiCode
+ U8 CtlPiCode[MAX_RANK_IN_CHANNEL]; ///< CTL CtlPiCode
+ U8 CkePiCode[MAX_RANK_IN_CHANNEL]; ///< CKE CtlPiCode
+ U8 TxEq[MAX_RANK_IN_CHANNEL][MAX_SDRAM_IN_DIMM]; ///< TxEq Setting
+ MrcCommandMargin Command[MAX_RANK_IN_CHANNEL];
+ MrcDqTimeMargin RxDqPb[MAX_RANK_IN_CHANNEL][MAX_SDRAM_IN_DIMM][MAX_BITS]; ///< Rx PerBit Pi Code
+ MrcDqTimeMargin TxDqPb[MAX_RANK_IN_CHANNEL][MAX_SDRAM_IN_DIMM][MAX_BITS]; ///< Tx PerBit Pi Code
+ MrcDqVrefMargin RxDqVrefPb[MAX_RANK_IN_CHANNEL][MAX_SDRAM_IN_DIMM][MAX_BITS]; ///< Rx PerBit Vref
+ MrcDqVrefMargin TxDqVrefPb[MAX_RANK_IN_CHANNEL][MAX_SDRAM_IN_DIMM][MAX_BITS]; ///< Rx PerBit Vref
+ MrcRecvEnMargin ReceiveEnable[MAX_RANK_IN_CHANNEL]; ///< Receive enable per rank
+ MrcWrLevelMargin WriteLevel[MAX_RANK_IN_CHANNEL]; ///< Write leveling per rank
+ U8 IoLatency[MAX_RANK_IN_CHANNEL]; ///< IOLatency
+ U8 RTLatency[MAX_RANK_IN_CHANNEL]; ///< RoundTripLatency
+ U32 RTIoComp; ///< RoundTrip IO Compensation of the Channel
+ U8 RxVref[MAX_SDRAM_IN_DIMM]; ///< RX Vref in steps of 7.9 mv
+ U8 RxEq[MAX_RANK_IN_CHANNEL][MAX_SDRAM_IN_DIMM]; ///< RxEQ Setting
+ U8 RxDqsP[MAX_RANK_IN_CHANNEL][MAX_SDRAM_IN_DIMM];/// RxDQSP PI Code
+ U8 RxDqsN[MAX_RANK_IN_CHANNEL][MAX_SDRAM_IN_DIMM];/// RxDQSN PI Code
+ U8 RankInChannel; ///< Number of valid ranks that exist in the channel.
+ U8 ValidRankBitMask; ///< Bit map of the populated ranks per channel
+ U8 ValidCkeBitMask; ///< Bit map of the used CKE pins per channel
+ MrcDimmOut Dimm[MAX_DIMMS_IN_CHANNEL];
+} MrcChannelOut;
+
+///
+/// This data structure contains all the "global data" values that are considered output by the MRC.
+/// The following are memory controller level definitions. All channels on a controller are set to these values.
+///
+typedef struct {
+ MrcControllerSts Status; ///< Indicates whether this controller should be used.
+ U16 DeviceId; ///< The PCI device id of this memory controller.
+ U8 RevisionId; ///< The PCI revision id of this memory controller.
+ U8 ChannelCount; ///< Number of valid channels that exist on the controller.
+ MrcChannelOut Channel[MAX_CHANNEL]; ///< The following are channel level definitions.
+} MrcControllerOut;
+
+///
+/// This data structure contains all the "DDR power saving data" values that are considered output by the MRC.
+/// The following are memory controller level definitions. All channels on a controller are set to these values.
+///
+typedef struct {
+ BOOL BaseFlag; ///< Indicates if the base line of power was already calculated.
+ U16 BaseSavingRd; ///< Indicates the base line of power consume by the ddr on read.
+ U16 BaseSavingWr; ///< Indicates the base line of power consume by the ddr on write.
+ U16 BaseSavingCmd; ///< Indicates the base line of power consume by the ddr on command.
+ U16 MrcSavingRd; ///< Indicates the power consume by the ddr on read at the end of MRC.
+ U16 MrcSavingWr; ///< Indicates the power consume by the ddr on write at the end of MRC.
+ U16 MrcSavingCmd; ///< Indicates the power consume by the ddr on command at the end of MRC.
+} MrcOdtPowerSaving;
+
+///
+/// This data structure contains all the "global data" values that are considered output by the MRC.
+/// The following are system level definitions. All memory controllers in the system are set to these values.
+///
+typedef struct {
+ MrcVersion Version; ///< The memory reference code version.
+ MrcFrequency FreqMax; ///< The requested maximum valid frequency.
+ MrcFrequency Frequency; ///< The system's common memory controller frequency.
+ U32 MemoryClockMax; ///< The system's common memory controller maximum clock, in femtoseconds.
+ U32 MemoryClock; ///< The system's common memory controller clock, in femtoseconds.
+ MrcRefClkSelect RefClk; ///< The memory controller is going to use this reference clock.
+ MrcClockRatio Ratio; ///< Request for this memory controller to use this clock ratio.
+ MrcBootMode BootMode; ///< The system's common memory controller boot mode.
+ MrcMemoryMap MemoryMapData; ///< The system's memory map data.
+ MrcGfxDataSize GraphicsStolenSize; ///< Graphics Data Stolen Memory size in MB
+ MrcGfxGttSize GraphicsGttSize; ///< GTT graphics stolen memory size in MB
+ MrcVddSelect VddVoltage[MAX_PROFILE]; ///< The currently running voltage (VDD) setting for all DIMMs in the system, per profile.
+ MrcGdxc Gdxc; ///< GDXC enable and size.
+ MrcBool VddVoltageDone; ///< To determine if VddVoltageDone update has been done already
+ MrcBool EccSupport; ///< TRUE if ECC is enabled and supported on this controller.
+ MrcBool EnDumRd; ///< Enable/Disable Logic Analizer
+ MrcBool RestoreMRs; ///< Enable/Disable restoring
+ MrcBool AsyncOdtDis; ///< Enable Asyncronous ODT
+ MrcBool LpddrEctDone; ///< Set to TRUE once Early Command Training on LPDDR is done, and we can run JEDEC Init
+ MrcBool LpddrJedecInitDone; ///< Set to TRUE once JEDEC Init on LPDDR is done
+ MrcBool XmpProfileEnable; ///< XMP capable DIMMs detected in system (0 = no, 1 = yes).
+ MrcBool Capable100; ///< The MC is capable of 100 reference clock (0 = no, 1 = yes).
+ MrcBool AutoSelfRefresh; ///< Indicates ASR is supported for all the DIMMS for 2xRefresh
+ MrcDdrType DdrType; ///< Current memory type: DDR3 or LPDDR3
+ MrcSpdStatus SpdSecurityStatus; ///< Status variable to inform BIOS that memory contains an alias.
+ U32 MrcTotalChannelLimit; ///< The maximum allowed memory size per channel, in MBytes.
+ U8 SdramCount; ///< The number of SDRAM components on a DIMM.
+ U32 CompCtl0; ///< CompCtl0 CR
+ U32 CompCtl1; ///< CompCtl1 CR
+ U32 DimmVref; ///< DimmVref CR
+ U32 MiscControl0; ///< MiscCOntrol0 CR
+ U16 Qclkps; ///< Qclk period in pS
+ U8 DQPat; ///< Global Variables storing the current DQPat REUT Test
+ S8 DQPatLC; ///< Global Variables storing the current DQPat Loopcount
+ U8 ValidRankMask; ///< Rank bit map - includes both channels
+ U8 ValidChBitMask; ///< Channel bit map of the populated channels
+ MrcUPRLimitPtr UpmPwrRetrainLimits; ///< Pointer to Global UPM/PWR/RETRAIN Limits on the stack the size of MRC_NUMBER_UPM_PWR_RETRAIN_MARGINS
+ U32 MarginResult[MAX_RESULT_TYPE][MAX_RANK_IN_CHANNEL][MAX_CHANNEL][MAX_SDRAM_IN_DIMM][MAX_EDGES]; ///< Stores last margin measurement.
+ MrcControllerOut Controller[MAX_CONTROLLERS];
+ MrcOdtPowerSaving OdtPowerSavingData;
+#ifdef UPSERVER_SUPPORT
+ U16 CLTM_SPD_Conf; ///< CLTM SPD Configuration Done(0 = process not executed, 0xFF = process failed, XX = process save CLTM_SPD_Conf
+#endif ///< CLTM_SPD_Conf = h=2xRefreshState i = Density , j = Frequency , k1 = Adjacent DIMM prescence in Channel 1, k0 = Adjacent DIMM prescence in Channel 0
+} MrcOutput;
+
+///
+///****************************************
+/// Input related "global data" structures.
+///****************************************
+///
+/// This data structure contains all the "global data" values that are considered input by the MRC.
+/// The following are SDRAM level definitions. All ranks on a rank are set to these values.
+///
+/* Commented out until needed, in order to save space.
+typedef struct {
+ U8 Placeholder; ///< TODO: Is there anything that needs to go in here?
+} MrcSdramIn;
+*/
+
+///
+/// This data structure contains all the "global data" values that are considered input by the MRC.
+/// The following are rank level definitions. All ranks on a DIMM are set to these values.
+///
+/* Commented out until needed, in order to save space.
+typedef struct {
+ MrcSdramIn Sdram[MAX_SDRAM_IN_DIMM];
+} MrcRankIn;
+*/
+
+///
+/// This data structure contains all the "global data" values that are considered input by the MRC.
+/// The following are DIMM level definitions. All ranks on a DIMM are set to these values.
+///
+typedef struct {
+ MrcDimmSts Status; ///< Indicates whether this DIMM should be used.
+ U8 SpdValid[sizeof (MrcSpd) / (CHAR_BITS * sizeof (U8))]; ///< Each valid bit maps to SPD byte.
+ MrcSpd Spd; ///< The SPD data for each DIMM. SPDGeneral field = 0 when absent.
+ MrcTiming Timing; ///< The DIMMs requested timing overrides.
+ U8 SpdAddress; ///< The SMBus address for the DIMM's SPD data.
+//MrcRankIn Rank[MAX_RANK_IN_DIMM];
+} MrcDimmIn;
+
+///
+/// This data structure contains all the "global data" values that are considered input by the MRC.
+/// The following are channel level definitions. All DIMMs on a memory channel are set to these values.
+///
+typedef struct {
+ MrcChannelSts Status; ///< Indicates whether this channel should be used.
+ U32 DimmCount; ///< The maximum number of DIMMs on this channel.
+ MrcDimmIn Dimm[MAX_DIMMS_IN_CHANNEL];
+#ifdef ULT_FLAG
+ U8 DqsMapCpu2Dram[8]; ///< Mapping from CPU DQS pins to SDRAM DQS pins
+ U8 DqMapCpu2Dram[8][MAX_BITS]; ///< Mapping from CPU DQ pins to SDRAM DQ pins
+ U8 DQByteMap[MrcIterationMax][2]; ///< Maps which PI clocks are used by what LPDDR DQ Bytes (from CPU side), per group
+ ///< DQByteMap[0] - ClkDQByteMap:
+ ///< If clock is per rank, program to [0xFF, 0xFF]
+ ///< If clock is shared by 2 ranks, program to [0xFF, 0] or [0, 0xFF]
+ ///< If clock is shared by 2 ranks but does not go to all bytes,
+ ///< Entry[i] defines which DQ bytes Group i services
+ ///< DQByteMap[1] - CmdNDQByteMap: Entry[0] is CmdN/CAA and Entry[1] is CmdN/CAB
+ ///< DQByteMap[2] - CmdSDQByteMap: Entry[0] is CmdS/CAA and Entry[1] is CmdS/CAB
+ ///< DQByteMap[3] - CkeDQByteMap : Entry[0] is CKE /CAA and Entry[1] is CKE /CAB
+ ///< For DDR, DQByteMap[3:1] = [0xFF, 0]
+ ///< DQByteMap[4] - CtlDQByteMap : Always program to [0xFF, 0] since we have 1 CTL / rank
+ ///< Variable only exists to make the code easier to use
+ ///< DQByteMap[5] - CmdVDQByteMap: Always program to [0xFF, 0] since we have 1 CA Vref
+ ///< Variable only exists to make the code easier to use
+#endif // ULT_FLAG
+} MrcChannelIn;
+
+///
+/// This data structure contains all the "global data" values that are considered input by the MRC.
+/// The following are memory controller level definitions. All channels on a controller are set to these values.
+///
+typedef struct {
+ MrcControllerSts Status; ///< Indicates whether this controller should be used.
+ U8 ChannelCount; ///< Number of valid channels that are requested on the controller.
+ MrcChannelIn Channel[MAX_CHANNEL]; ///< The following are channel level definitions.
+} MrcControllerIn;
+
+///
+/// This data structure contains all the "global data" values that are considered input by the MRC.
+/// The following are system level definitions. All memory controllers in the system are set to these values.
+///
+typedef struct {
+ MrcDebug Debug;
+ MrcFrequency FreqMax; ///< The requested maximum valid frequency.
+ MrcClockRatio Ratio; ///< Request for this memory controller to use this clock ratio.
+ MrcRefClkSelect RefClk; ///< Request for this memory controller to use this reference clock.
+ MrcBClkRef BClkFrequency; ///< Base reference clock value, in Hertz.
+ MrcBoardType BoardType; ///< define the board type (CRBMB,CRBDT,User1,User2). the OEM can add more boards.
+ MrcCpuStepping CpuStepping; ///< define the CPU stepping.
+ MrcCpuModel CpuModel; ///< define the CPU model.
+ MrcGfxDataSize GraphicsStolenSize; ///< Graphics Data Stolen Memory size in MB
+ MrcGfxGttSize GraphicsGttSize; ///< GTT graphics stolen memory size in MB
+ MrcBaseTime BaseTime; ///< RTC base time.
+ MrcIteration Iteration; ///
+ MrcMode MrcMode; ///< The control for full or MiniBIOS MRC.
+ MrcVddSelect VddVoltage; ///< The requested voltage (VDD) setting.
+ MrcProfile MemoryProfile; ///< The memory profile requested to be used.
+ MrcBootMode BootMode; ///< The requested memory controller boot mode.
+ MrcBool TxtFlag; ///
+ MrcBool MobilePlatform; ///< define Mobile or Desktop platform. true is mobile.
+ MrcBool EccSupport; ///< Tell to the MRC if ECC supporting or not. if false the ecc will not be support even if the DIMM will support in ECC.
+ MrcBool SetRxDqs32; ///
+ MrcBool GfxIsVersatileAcceleration; ///< iGFX engines are in Versatile Acceleration
+ MrcBool ScramblerEnable; ///< Enable/Disable scrambling
+ MrcBool McLock; ///
+ MrcBool RemapEnable; ///
+ MrcBool AutoSelfRefreshSupport; ///< FALSE = No auto self refresh support, TRUE = auto self refresh support.
+ MrcBool ExtTemperatureSupport; ///< FALSE = No extended temperature support, TRUE = extended temperature support.
+ U32 SaMemCfgAddress;
+ U32 SaMemCfgSize;
+ U32 PciEBaseAddress; ///< define the PciE base address.
+ U32 MchBarBaseAddress; ///< define the MCH bar base address.
+ U32 SmbusBaseAddress; ///< This field defines the smbus base address.
+ U32 GdxcBaseAddress; ///< This field defines the GDXC base address.
+ U32 HpetBaseAddress; ///< This field defines the hpet base address.
+ U32 MeStolenSize; ///< define the size that the ME need in MB.
+ U32 MmioSize; ///< define the MMIO size in MB.
+ U32 TsegSize; ///< TSEG size that require by the system in MB.
+ U32 IedSize; ///< IED size that require by the system in MB.
+ U32 DprSize; ///< DPR size required by system in MB.
+ U32 VddSettleWaitTime; ///< The minimum time in nanoseconds to wait for VDD to settle after being changed.
+ U16 VccIomV; ///< VccIO logic voltage in mV.
+ U8 PowerDownMode; ///< Option to select No PD, APD or PPD-DLLoff
+ U8 PwdwnIdleCounter; ///< Option to select the power down Idle counter.
+ MrcBool RankInterleave; ///< Option to Enable Rank Interleave.
+ MrcBool EnhancedInterleave; ///< Option to Enable Enhanced Interleave.
+ MrcBool WeaklockEn; ///< Option to Enable Weaklock for CMD, CTL and CKE
+ U8 EnCmdRate; ///< Option to Enable and select the number of CMDs for 1.5NMode
+ MrcBool CmdTriStateDis; ///< Option to Disable cmd tri-state
+ MrcBool RefreshRate2x; ///< Tells the MRC to enable 2x Refresh.
+ MrcBool ChHashEnable; ///< Option to Enable Channel Hash.
+ U16 ChHashMask; ///< Option to select Address bits[19:6] to include in Channel XOR function.
+ U8 ChHashInterleaveBit; ///< Option to select interleave Address bit. Valid values are 0 - 3 for BITS 6 - 9.
+ ThermalMngmtEn ThermalEnables; ///< Options to Enable Thermal management settings
+ MrcControllerIn Controller[MAX_CONTROLLERS];
+#ifdef SSA_FLAG
+ U32 SsaCallbackPpi;
+#endif // SSA_FLAG
+#if ((defined SSA_FLAG) || (defined MRC_DEBUG_PRINT))
+ U32 SsaHeapBase; ///< Starting address of the SSA services heap space.
+ U32 SsaHeapSize; ///< Size of the SSA services heap space, in bytes.
+ SsaHeapFlagType SsaHeapFlag; ///< Bit 0 = 1 is SSA heap initialized, all other bits reserved.
+#endif
+ MrcGdxc Gdxc; ///< GDXC enable and size.
+ MrcBool MemoryTrace; ///< Option to Enable Memory Trace to second DDR channel using Stacked Mode
+ TrainingStepsEn TrainingEnables; ///< Options to Enable individual training steps
+ MrcBool OemCleanMemory; ///< TRUE to request a memory clean
+ MrcBool RmtBdatEnable; ///< Option to enable output of training results into BDAT.
+#ifdef ULT_FLAG
+ MrcBool DqPinsInterleaved; ///< Interleaving mode of DQ/DQS pins - depends on board routing
+ MrcBool LpddrDramOdt; ///< TRUE if LPDDR DRAM ODT is used - depends on board design
+ U8 CkeRankMapping; ///< [3:0] - Channel 0, [7:4] - Channel 1.
+ ///< Bit [i] specifies which rank CKE[i] goes to.
+#endif
+ U8 MaxRttWr; ///< Maximum DIMM RTT_WR to use in power training 0 = Off, 1 = 120 ohms
+} MrcInput;
+
+///
+///********************************************
+/// Saved data related "global data" structures.
+///********************************************
+///
+
+///
+/// This data structure contains all the "global data" values that are considered to be needed
+/// by the MRC between power state transitions (S0->S3->S0) and also fast and warm boot modes.
+/// The following are channel level definitions.
+///
+typedef struct {
+ MrcChannelSts Status; ///< Indicates whether this channel should be used.
+ MrcBool EccSupport; ///< TRUE if ECC is enabled and supported on this DIMM.
+ U32 DimmCount; ///< Number of valid DIMMs that exist in the channel.
+ U8 ValidRankBitMask; ///< Bit map of the populated ranks per channel
+ MrcTiming Timing[MAX_PROFILE]; ///< The channel timing values.
+ MrcDimmOut Dimm[MAX_DIMMS_IN_CHANNEL];
+ MrcSpdSave SpdSave[MAX_DIMMS_IN_CHANNEL]; ///< Save SPD information needed for SMBIOS structure creation.
+} MrcChannelSave;
+
+///
+/// This data structure contains all the "global data" values that are considered to be needed
+/// by the MRC between power state transitions (S0->S3->S0) and also fast and warm boot modes.
+/// The following are controller level definitions.
+///
+typedef struct {
+ MrcControllerSts Status; ///< Indicates whether this controller should be used.
+ U8 ChannelCount; ///< Number of valid channels that exist on the controller.
+ MrcChannelSave Channel[MAX_CHANNEL];
+} MrcContSave;
+
+///
+/// This data structure contains all the "global data" values that are considered to be needed
+/// by the MRC between power state transitions (S0->S3->S0) and also fast and warm boot modes.
+/// The following are system level definitions.
+///
+typedef struct {
+ U32 Crc; ///< The CRC-32 of the data in this structure.
+} MrcSaveHeader;
+
+//
+// ------- IMPORTANT NOTE --------
+// MRC_MC_REGISTER_COUNT in Global.h should match the table in MrcSaveRestore.c.
+// Update this define whenever you add/remove registers from this table.
+//
+ #define MRC_MC_REGISTER_COUNT (1 + (2496 / sizeof (U32))) ///< The number of MC registers that need to be saved.
+
+typedef struct {
+ MrcCapId McCapId; ///< The memory controller's capabilities.
+ U32 MeStolenSize;
+ U32 McRegister[MRC_MC_REGISTER_COUNT]; ///< The memory controllers registers.
+ MrcCpuStepping CpuStepping; ///< The last cold boot happended with this CPU stepping.
+ MrcCpuModel CpuModel; ///< The last cold boot happended with this CPU model.
+ MrcVersion Version; ///< The last cold boot happended with this MRC version.
+ U32 SaMemCfgCrc; ///< The CRC32 of the system agent memory configuration structure.
+ MrcContSave Controller[MAX_CONTROLLERS];
+ MrcFrequency Frequency; ///< The system's common memory controller frequency.
+ U32 MemoryClock; ///< The system's common memory controller clock, in femtoseconds.
+ MrcRefClkSelect RefClk; ///< The memory controller is going to use this reference clock.
+ MrcClockRatio Ratio; ///< Request for this memory controller to use this clock ratio.
+ MrcVddSelect VddVoltage[MAX_PROFILE]; ///< The voltage (VDD) setting for all DIMMs in the system, per profile.
+ MrcBool EccSupport; ///< TRUE if ECC is enabled and supported on this controller.
+ MrcDdrType DdrType; ///< DDR type: DDR3 or LPDDR3
+ MrcBool XmpProfileEnable; ///< XMP capable DIMMs detected in system (0 = no, 1 = yes).
+#ifdef UPSERVER_SUPPORT
+ U16 CLTM_SPD_Conf; ///< CLTM SPD Configuration Done(0 = process not executed, 0xFF = process failed, XX = process save CLTM_SPD_Conf
+#endif // UPSERVER_SUPPORT ///< CLTM_SPD_Conf = i = Density , j = Frequency , k1 = Adjacent DIMM prescence in Channel 1, k0 = Adjacent DIMM prescence in Channel 0
+} MrcSaveData;
+
+typedef struct {
+ MrcSaveHeader Header; ///< The header portion of the MRC saved data.
+ MrcSaveData Data; ///< The data portion of the MRC saved data.
+} MrcSave;
+
+typedef struct {
+ MrcInput Inputs;
+} SysInput;
+
+typedef struct {
+ MrcOutput Outputs;
+} SysOutput;
+
+typedef struct {
+ MrcSave Save;
+} SysSave;
+
+///
+/// This data structure contains all of the MRC "global data" values.
+///
+typedef struct {
+ U32 SaveSize;
+ SysSave SysSave;
+ SysInput SysIn;
+ SysOutput SysOut;
+ U64 Oem;
+#ifdef BDAT_SUPPORT
+ RmtData Rmt;
+#endif
+} MrcParameters;
+
+#ifdef UPSERVER_SUPPORT
+
+
+
+#define WarmThreshold_1X_MAX_TEMP 83
+#define WarmThreshold_2X_MAX_TEMP 85
+#define HotThreshold_1X_MAX_TEMP 83
+#define HotThreshold_2X_MAX_TEMP 92
+
+
+#define CRITICAL_TEMP 105
+#define THOT_2X_MAX_TEMP 93
+#define THOT_1X_MAX_TEMP 83
+#define DISABLE_REFRESH2X 0
+
+//Power Weight Table Defines
+#define WARM_BUDGET_POSITION 6
+
+// CLTM Process Status Defines
+#define PROCESS_NOT_INITIALIZED 0x0000
+#define PROCESS_FAILED 0xFFFF
+#define CONTROLLER_NOT_LOADED 0xFF
+#define CLTM_DISABLE 0
+
+//CAMARILLO Interrupt Defines
+#define TWOX_REFRESH_INTERRUPT_ENABLE 1
+#define FORCEMEMPR_INTERRUPT_ENABLE 1
+
+//TSE2002 Thermal Sensor Defines
+#define MTS_CAPABILITIES 0
+#define MTS_CFG 1
+#define MTS_THIGH 2
+#define MTS_TLOW 3
+#define MTS_TCRIT 4
+#define TEMPERATURE_REGISTER 5
+#define MTS_MFGID 6
+#define MTS_DID 7
+#define THERMAL_MODULE_MASK 0x30
+
+//TSOD definitions
+#define HYST_DISABLE 0
+
+typedef union {
+ struct {
+ U16 EVENT_MODE : 1; // Bits 0:0
+ U16 EVENT_POLARITY : 1; // Bits 1:1
+ U16 CRICAL_EVENT_ONLY : 1; // Bits 2:2
+ U16 EVENT_OUTPUT_CONTROL : 1; // Bits 3:3
+ U16 EVENT_STATUS : 1; // Bits 4:4
+ U16 CLEAR_EVENT : 1; // Bits 5:5
+ U16 ALARM_WINDOW_LOCK : 1; // Bits 6:6
+ U16 CRITICAL_LOCK : 1; // Bits 7:7
+ U16 SHUTDOWNMODE : 1; // Bits 8:8
+ U16 HYST_ENABLE : 1; // Bits 10:9
+ U16 : 4; // Bits 15:11
+ } Bits;
+ U16 Data;
+} TSOD_CONF_REGISTER_STRUCT;
+
+//#define MTS_CFG_EVENT ((0x01) | (0x04) | (0x08)) //Bit 0 = 1, Bit 1 = 0, Bit 2 = 1, Bit 3 = 1 , Bit8 = 0, Bit 10 =0
+
+#endif //UPSERVER_SUPPORT
+
+
+#pragma pack (pop)
+#endif
+