/** @file
Include the the general MRC types
Copyright (c) 2017, Intel Corporation. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent
**/
#ifndef _MRC_TYPES_H
#define _MRC_TYPES_H
#ifdef MRC_MINIBIOS_BUILD
#include "MrcMiniBiosEfiDefs.h"
#else
#include
#endif // MRC_MINIBIOS_BUILD
//
// Data Types
//
typedef union {
struct {
UINT32 Low;
UINT32 High;
} Data32;
UINT64 Data;
} UINT64_STRUCT;
typedef union {
struct {
INT32 Low;
INT32 High;
} Data32;
INT64 Data;
} INT64_STRUCT;
#define UNSUPPORT 0
#define SUPPORT 1
typedef enum {
mrcSuccess,
mrcFail,
mrcWrongInputParameter,
mrcCasError,
mrcTimingError,
mrcSenseAmpErr,
mrcReadMPRErr,
mrcReadLevelingError,
mrcWriteLevelingError,
mrcDataTimeCentering1DErr,
mrcWriteVoltage2DError,
mrcReadVoltage2DError,
mrcMiscTrainingError,
mrcWrError,
mrcDimmNotSupport,
mrcChannelNotSupport,
mrcPiSettingError,
mrcDqsPiSettingError,
mrcDeviceBusy,
mrcFrequencyChange,
mrcReutSequenceError,
mrcCrcError,
mrcFrequencyError,
mrcDimmNotExist,
mrcColdBootRequired,
mrcRoundTripLatencyError,
mrcMixedDimmSystem,
mrcAliasDetected,
mrcRetrain,
mrcRtpError,
mrcUnsupportedTechnology,
mrcMappingError,
mrcSocketNotSupported,
mrcControllerNotSupported,
mrcRankNotSupported,
mrcTurnAroundTripError
} MrcStatus;
//
// general macros
//
#ifndef MIN
#define MIN(a, b) (((a) < (b)) ? (a) : (b))
#endif
#ifndef MAX
#define MAX(a, b) (((a) > (b)) ? (a) : (b))
#endif
#ifndef ABS
#define ABS(x) (((x) < 0) ? (-(x)) : (x))
#endif
//
// Make sure x is inside the range of [a..b]
//
#ifndef RANGE
#define RANGE(x, a, b) (MIN ((b), MAX ((x), (a))))
#endif
#ifndef DIVIDECEIL
#define DIVIDECEIL(a, b) (((a) + (b) - 1) / (b))
#endif
#ifndef DIVIDEROUND
#define DIVIDEROUND(a, b) (((a) * (b) > 0) ? ((a) + (b) / 2) / (b) : ((a) - (b) / 2) / (b))
#endif
#ifndef DIVIDEFLOOR
#define DIVIDEFLOOR(a, b) ((a) / (b))
#endif
//
// Number of elements in a 1D array
//
#ifndef ARRAY_COUNT
#define ARRAY_COUNT(a) (sizeof (a) / sizeof (a[0]))
#endif
//
// use for ignore parames
//
// #define MRC_IGNORE_PARAM(x) ((x) = (x))
//
#if _MSC_EXTENSIONS
//
// Disable warning that make it impossible to compile at /W4
// This only works for Microsoft* tools
//
//
// Disabling bitfield type checking warnings.
//
#pragma warning (disable : 4214)
//
// Unreferenced formal parameter - We are object oriented, so we pass parameters even
// if we don't need them.
//
#pragma warning (disable : 4100)
//
// ASSERT(FALSE) or while (TRUE) are legal constructs so supress this warning
//
#pragma warning(disable : 4127)
//
// The given function was selected for inline expansion, but the compiler did not perform the inlining.
//
#pragma warning(disable : 4710)
#endif // _MSC_EXTENSIONS
#define MRC_BIT0 0x00000001
#define MRC_BIT1 0x00000002
#define MRC_BIT2 0x00000004
#define MRC_BIT3 0x00000008
#define MRC_BIT4 0x00000010
#define MRC_BIT5 0x00000020
#define MRC_BIT6 0x00000040
#define MRC_BIT7 0x00000080
#define MRC_BIT8 0x00000100
#define MRC_BIT9 0x00000200
#define MRC_BIT10 0x00000400
#define MRC_BIT11 0x00000800
#define MRC_BIT12 0x00001000
#define MRC_BIT13 0x00002000
#define MRC_BIT14 0x00004000
#define MRC_BIT15 0x00008000
#define MRC_BIT16 0x00010000
#define MRC_BIT17 0x00020000
#define MRC_BIT18 0x00040000
#define MRC_BIT19 0x00080000
#define MRC_BIT20 0x00100000
#define MRC_BIT21 0x00200000
#define MRC_BIT22 0x00400000
#define MRC_BIT23 0x00800000
#define MRC_BIT24 0x01000000
#define MRC_BIT25 0x02000000
#define MRC_BIT26 0x04000000
#define MRC_BIT27 0x08000000
#define MRC_BIT28 0x10000000
#define MRC_BIT29 0x20000000
#define MRC_BIT30 0x40000000
#define MRC_BIT31 0x80000000
#define MRC_BIT32 0x100000000ULL
#define MRC_BIT33 0x200000000ULL
#define MRC_BIT34 0x400000000ULL
#define MRC_BIT35 0x800000000ULL
#define MRC_BIT36 0x1000000000ULL
#define MRC_BIT37 0x2000000000ULL
#define MRC_BIT38 0x4000000000ULL
#define MRC_BIT39 0x8000000000ULL
#define MRC_BIT40 0x10000000000ULL
#define MRC_BIT41 0x20000000000ULL
#define MRC_BIT42 0x40000000000ULL
#define MRC_BIT43 0x80000000000ULL
#define MRC_BIT44 0x100000000000ULL
#define MRC_BIT45 0x200000000000ULL
#define MRC_BIT46 0x400000000000ULL
#define MRC_BIT47 0x800000000000ULL
#define MRC_BIT48 0x1000000000000ULL
#define MRC_BIT49 0x2000000000000ULL
#define MRC_BIT50 0x4000000000000ULL
#define MRC_BIT51 0x8000000000000ULL
#define MRC_BIT52 0x10000000000000ULL
#define MRC_BIT53 0x20000000000000ULL
#define MRC_BIT54 0x40000000000000ULL
#define MRC_BIT55 0x80000000000000ULL
#define MRC_BIT56 0x100000000000000ULL
#define MRC_BIT57 0x200000000000000ULL
#define MRC_BIT58 0x400000000000000ULL
#define MRC_BIT59 0x800000000000000ULL
#define MRC_BIT60 0x1000000000000000ULL
#define MRC_BIT61 0x2000000000000000ULL
#define MRC_BIT62 0x4000000000000000ULL
#define MRC_BIT63 0x8000000000000000ULL
#define MRC_DEADLOOP() { volatile int __iii; __iii = 1; while (__iii); }
#ifndef ASM
#define ASM __asm
#endif
///
/// Type Max/Min Values
///
#define MRC_INT32_MAX (0x7FFFFFFF)
#define MRC_INT32_MIN (0x80000000)
#define MRC_INT64_MAX (0x7FFFFFFFFFFFFFFFLL)
#define MRC_INT64_MIN (0x8000000000000000LL)
#define MRC_UINT32_MAX (0xFFFFFFFF)
#define MRC_UINT64_MAX (0xFFFFFFFFFFFFFFFFULL)
#define MRC_UINT_MIN (0x0)
#endif