/** @file
SysHost.h
@copyright
Copyright 2006 - 2021 Intel Corporation.
SPDX-License-Identifier: BSD-2-Clause-Patent
**/
#ifndef _SYS_HOST_H_
#define _SYS_HOST_H_
#include "SysHostChipCommon.h"
#define MAX_LINE 256
#define RC_SIM_FASTCADB 0
typedef struct sysHost SYSHOST, *PSYSHOST;
#include "DataTypes.h"
#include "SysHostChipCommon.h"
#include "PlatformHost.h"
#include "MemHost.h"
#include
///
/// Enhanced Warning Log Header
///
typedef struct {
EFI_GUID EwlGuid; /// GUID that uniquely identifies the EWL revision
UINT32 Size; /// Total size in bytes including the header and buffer
UINT32 FreeOffset; /// Offset of the beginning of the free space from byte 0
/// of the buffer immediately following this structure
/// Can be used to determine if buffer has sufficient space for next entry
UINT32 Crc; /// 32-bit CRC generated over the whole size minus this crc field
/// Note: UEFI 32-bit CRC implementation (CalculateCrc32) (References [7])
/// Consumers can ignore CRC check if not needed.
UINT32 Reserved; /// Reserved for future use, must be initialized to 0
} EWL_HEADER;
///
/// Enhanced Warning Log Spec defined data log structure
///
typedef struct {
EWL_HEADER Header; /// The size will vary by implementation and should not be assumed
UINT8 Buffer[4 * 1024]; /// The spec requirement is that the buffer follow the header
} EWL_PUBLIC_DATA;
///
/// EWL private data structure. This is going to be implementation dependent
/// When we separate OEM hooks via a PPI, we can remove this
///
typedef struct {
UINT32 bufSizeOverflow; // Number of bytes that could not be added to buffer
UINT32 numEntries; // Number of entries currently logged
EWL_PUBLIC_DATA status; // Spec defined EWL
} EWL_PRIVATE_DATA;
#pragma pack(1)
///
/// System NVRAM structure
//
struct sysNvram {
struct memNvram mem;
struct commonNvram common;
}; //struct sysNvram
#pragma pack()
//
// -----------------------------------------------------------------------------
// Variable structures
//
typedef struct CpuidRegisterInfo {
UINT32 Eax;
UINT32 Ebx;
UINT32 Ecx;
UINT32 Edx;
} CPUID_REGISTER_INFO;
typedef struct processorCommon {
UINT32 capid0;
UINT32 capid1;
UINT32 capid2;
UINT32 capid3;
UINT32 capid4;
UINT32 capid5;
UINT32 capid6lo;
UINT32 capid6hi;
CPUID_REGISTER_INFO ExtCpuid7;
CPUID_REGISTER_INFO ExtCpuid1B;
} PROCESSOR_COMMON;
///
/// Common variable structure
///
struct commonVar {
RC_VERSION RcVersion; ///< Version of the reference code last executed
UINT32 rcStatus; ///< Non-zero indicates fatal error
UINT8 chopType[MAX_SOCKET]; ///< HCC, MCC, LCC, MCC-DE, LCC-DE (HSX family only)
UINT8 sbsp; ///< Non-zero value indicates that the socket is System BSP
UINT16 pmBase; ///< Power Management Base Address
UINT32 tohmLimit;
UINT32 JumpBuffer;
#ifdef COMPRESS_RC
UINT32 rcSrc; ///< Decompression source code pointer
UINT32 rcDest; ///< Decompression destination pointer
UINT32 rcDecompressSourceAddr; ///< Decompression routine address of type func(UINT8*Src, UINT8*Dest);
#endif // #ifdef COMPRESS_RC
UINT32 heapBase;
UINT32 heapSize;
UINT32 oemVariable;
EWL_PRIVATE_DATA ewlPrivateData; // implementation data for EWL
struct processorCommon procCom[MAX_SOCKET];
UINT32 MicroCodeRev;
#define MAX_PROMOTE_WARN_LIMIT 90
UINT32 promoteWarnLimit;
UINT16 promoteWarnList[MAX_PROMOTE_WARN_LIMIT];
UINT32 printfDepth; ///< handle nested calls to get/releasePrintFControl
UINT32 meRequestedSize; /// Size of the memory range requested by ME FW, in MB
UINT32 ieRequestedSize; /// Size of the memory range requested by IE FW, in MB
}; //struct commonVar
///
/// System Variable structure
///
struct sysVar {
struct memVar mem;
struct commonVar common;
}; //struct sysVar
// Bit definitions for commonSetup.options
// ; PROMOTE_WARN_EN enables warnings to be treated as fatal error
// ; PROMOTE_MRC_WARN_EN enables MRC warnings to be treated as fatal error
// ; HALT_ON_ERROR_EN enables errors to loop forever
// ; HALT_ON_ERROR_AUTO auto reset with Maximum Serial port debug message level when fatal error is encountered.
#define PROMOTE_WARN_EN BIT0
#define PROMOTE_MRC_WARN_EN BIT1
#define HALT_ON_ERROR_EN BIT2
#define HALT_ON_ERROR_AUTO BIT3
typedef union _RMT_FLAGS {
UINT8 Data;
struct {
UINT8 EnableShortFormat :1;
UINT8 SkipPerBitMargin :1;
UINT8 SkipDisplayPerBitEyes :1;
UINT8 SkipDisplayPerBitMargins :1;
UINT8 SkipRmtRxDqs :1;
UINT8 SkipRmtRxVref :1;
UINT8 SkipRmtTxDq :1;
UINT8 SkipRmtTxVref :1;
} Bits;
} RMT_FLAGS;
///
/// System Host (root structure)
///
struct sysHost {
struct sysVar var; ///< variable, volatile data
struct sysNvram nvram; ///< variable, non-volatile data for S3 and fast path
UINT8 ChannelModeOperation;
UINT32 cpuFlows; ///< Which flows to take
UINT32 ktiFlows;
UINT32 qpiFlows;
UINT32 opioFlows;
UINT32 memFlows;
UINT32 memFlowsExt;
UINT32 memFlowsExt2;
UINT32 memFlowsExt3;
UINT32 MrcHooksServicesPpi;
UINT32 MrcHooksChipServicesPpi;
BOOLEAN PrintCsr; // Enable / disable printing CSR
BOOLEAN MtrrCheck; // Check number of used MTRR's
INT32 DdrioUltSupport;
RMT_FLAGS RmtFlags;
};
#endif // #ifndef _SYS_HOST_H_