/** @file
|
GUID used for Memory Map Data entries in the HOB list.
|
|
@copyright
|
Copyright 1999 - 2021 Intel Corporation. <BR>
|
|
SPDX-License-Identifier: BSD-2-Clause-Patent
|
**/
|
|
#ifndef _MEMORY_MAP_DATA_H_
|
#define _MEMORY_MAP_DATA_H_
|
|
#include "SysHost.h"
|
#include "PartialMirrorGuid.h"
|
|
#define RESERVED_2 2
|
#define RESERVED_4 4
|
|
//
|
// System Memory Map HOB information
|
//
|
|
#pragma pack(1)
|
struct RankDevice {
|
UINT8 enabled; // 0 = disabled, 1 = enabled
|
UINT8 logicalRank; // Logical Rank number (0 - 7)
|
UINT16 rankSize; // Units of 64 MB
|
};
|
|
struct PersisentDpaMap
|
{
|
UINT32 perRegionDPAOffset;
|
UINT32 SPALimit;
|
};
|
|
typedef struct DimmDevice {
|
UINT8 Present;
|
BOOLEAN Enabled;
|
UINT8 DcpmmPresent; // 1 - This is a DCPMM
|
UINT8 X4Present;
|
UINT8 NumRanks;
|
UINT8 keyByte;
|
UINT8 actKeyByte2; // Actual module type reported by SPD
|
UINT8 actSPDModuleOrg; // Actual number of DRAM ranks and device width
|
UINT8 dimmTs; // Thermal sensor data.
|
UINT16 VolCap; // Volatile capacity (AEP DIMM only)
|
UINT16 nonVolCap; // Non-volatile capacity (AEP DIMM only)
|
UINT16 DimmSize;
|
UINT32 NVmemSize;
|
UINT16 SPDMMfgId; // Module Mfg Id from SPD
|
UINT16 VendorID;
|
UINT16 DeviceID;
|
UINT16 RevisionID;
|
UINT32 perRegionDPA; // DPA of PMEM that Nfit needs
|
struct PersisentDpaMap perDPAMap[MAX_UNIQUE_NGN_DIMM_INTERLEAVE]; // DPA map
|
UINT8 serialNumber[NGN_MAX_SERIALNUMBER_STRLEN]; // Serial Number
|
UINT8 PartNumber[NGN_MAX_PARTNUMBER_STRLEN]; // Part Number
|
UINT8 FirmwareVersionStr[NGN_FW_VER_LEN]; // Used to update the SMBIOS TYPE 17
|
struct firmwareRev FirmwareVersion; // Firmware revision
|
struct RankDevice rankList[MAX_RANK_DIMM];
|
UINT16 InterfaceFormatCode;
|
UINT16 SubsystemVendorID;
|
UINT16 SubsystemDeviceID;
|
UINT16 SubsystemRevisionID;
|
UINT16 FisVersion; // Firmware Interface Specification version
|
UINT8 DimmSku; // Dimm SKU info
|
UINT8 manufacturingLocation; // Manufacturing location for the NVDIMM
|
UINT16 manufacturingDate; // Date the NVDIMM was manufactured
|
INT32 commonTck;
|
UINT8 EnergyType; // 0: 12V aux power; 1: dedicated backup energy source; 2: no backup energy source
|
BOOLEAN NvDimmNPresent; ///< JEDEC NVDIMM-N Type Memory Present
|
UINT16 SPDRegVen; ///< Register Vendor ID in SPD
|
UINT8 CidBitMap; // SubRankPer CS for DIMM device
|
} MEMMAP_DIMM_DEVICE_INFO_STRUCT;
|
|
struct ChannelDevice {
|
UINT8 Enabled; // 0 = channel disabled, 1 = channel enabled
|
UINT8 Features; // Bit mask of features to enable or disable
|
UINT8 MaxDimm; // Number of DIMM
|
UINT8 NumRanks; // Number of ranks on this channel
|
UINT8 chFailed;
|
UINT8 ngnChFailed;
|
UINT8 SpareLogicalRank[MAX_SPARE_RANK]; // Logical rank, selected as Spare
|
UINT8 SparePhysicalRank[MAX_SPARE_RANK]; // Physical rank, selected as spare
|
UINT16 SpareRankSize[MAX_SPARE_RANK]; // spare rank size
|
UINT8 EnabledLogicalRanks; // Bitmap of Logical ranks that are enabled
|
MEMMAP_DIMM_DEVICE_INFO_STRUCT DimmInfo[MAX_DIMM];
|
};
|
|
struct memcontroller {
|
UINT32 MemSize;
|
};
|
|
typedef struct socket {
|
UINT8 SocketEnabled;
|
UINT16 IioStackBitmap;
|
BOOLEAN Reserved[RESERVED_4];
|
UINT8 imcEnabled[MAX_IMC];
|
UINT8 SadIntList[MAX_DRAM_CLUSTERS * MAX_SAD_RULES][MC_MAX_NODE]; // SAD interleave list
|
UINT8 SktSkuValid; // Whether Socket SKU value is valid from PCU
|
UINT32 SktSkuLimit; // SKU limit value from PCU
|
UINT32 SktTotMemMapSPA; // Total memory mapped to SPA
|
UINT32 SktPmemMapSpa; // Total persistent memory mapped to SPA
|
UINT32 SktMemSize2LM; // Total memory excluded from Limit
|
SAD_TABLE SAD[MAX_DRAM_CLUSTERS * MAX_SAD_RULES]; // SAD table
|
struct memcontroller imc[MAX_IMC];
|
struct ChannelDevice ChannelInfo[MAX_CH];
|
} MEMMAP_SOCKET;
|
|
typedef struct SystemMemoryMapElement {
|
UINT16 Type; // Type of this memory element; Bit0: 1LM Bit1: 2LM Bit2: PMEM Bit3: PMEM-cache Bit4: BLK Window Bit5: CSR/Mailbox/Ctrl region
|
UINT8 NodeId; // Node ID of the HA Owning the memory
|
UINT8 SocketId; // Socket Id of socket that has his memory - ONLY IN NUMA
|
UINT8 SktInterBitmap; // Socket interleave bitmap, if more that on socket then ImcInterBitmap and ChInterBitmap are identical in all sockets
|
UINT8 ImcInterBitmap; // IMC interleave bitmap for this memory
|
UINT8 ChInterBitmap[MAX_IMC];//Bit map to denote which channels are interleaved per IMC eg: 111b - Ch 2,1 & 0 are interleaved; 011b denotes Ch1 & 0 are interleaved
|
UINT32 BaseAddress; // Base Address of the element in 64MB chunks
|
UINT32 ElementSize; // Size of this memory element in 64MB chunks
|
} SYSTEM_MEMORY_MAP_ELEMENT;
|
|
typedef struct SystemMemoryMapHob {
|
//
|
// Total Clusters. In SNC2 mode there are 2 clusters and SNC4 mode has 4 clusters.
|
// All2All/Quad/Hemi modes can be considered as having only one cluster (i.e SNC1).
|
//
|
UINT8 TotalClusters;
|
|
MEMORY_MAP_BLOCK_DECODER_DATA BlockDecoderData; // block decoder data structure
|
UINT32 lowMemBase; // Mem base in 64MB units for below 4GB mem.
|
UINT32 lowMemSize; // Mem size in 64MB units for below 4GB mem.
|
UINT32 highMemBase; // Mem base in 64MB units for above 4GB mem.
|
UINT32 highMemSize; // Mem size in 64MB units for above 4GB mem.
|
UINT32 memSize; // Total physical memory size
|
UINT16 memFreq; // Mem Frequency
|
UINT8 memMode; // 0 - Independent, 1 - Lockstep
|
UINT8 volMemMode; // 0 - 1LM, 1 - 2LM
|
UINT8 CacheMemType; // 0 - DDR$DDRT
|
UINT8 DdrtIntlvGranularity; // 1 - 256B, 2 - 4KB
|
UINT16 DramType;
|
UINT8 SmbMode[MAX_SOCKET][MAX_SMB_INSTANCE]; // Stores type of smbus mode: 0 - I2C mode, 1 - I3C mode
|
UINT8 DdrVoltage;
|
UINT8 DcpmmPresent; // If at least one DCPMM Present (used by Nfit), then this should get set
|
BOOLEAN EkvPresent; // Set if EKV controller on system
|
BOOLEAN BwvPresent; // Set if BWV controller on system
|
UINT8 XMPProfilesSup;
|
UINT16 Reserved1[MAX_SOCKET];
|
UINT32 Reserved2;
|
UINT32 Reserved3;
|
UINT16 Reserved4;
|
UINT16 Reserved5;
|
UINT8 SystemRasType;
|
UINT8 RasModesEnabled; // RAS modes that are enabled
|
UINT16 ExRasModesEnabled; // Extended RAS modes that are enabled
|
UINT8 sncEnabled; // 0 - SNC disabled for this configuration, 1 - SNC enabled for this configuration
|
UINT8 NumOfCluster;
|
UINT8 NumChPerMC;
|
UINT8 numberEntries; // Number of Memory Map Elements
|
SYSTEM_MEMORY_MAP_ELEMENT Element[(MAX_SOCKET * MAX_DRAM_CLUSTERS * MAX_SAD_RULES) + MAX_FPGA_REMOTE_SAD_RULES];
|
struct memSetup MemSetup;
|
MEM_RESERVED_1 Reserved142;
|
MEMMAP_SOCKET Socket[MAX_SOCKET];
|
struct memTiming profileMemTime[2];
|
|
UINT32 Reserved6;
|
UINT8 Reserved7[RESERVED_2];
|
EFI_GUID Reserved8[RESERVED_2];
|
UINT8 Reserved9;
|
RASMEMORYINFO RasMeminfo;
|
UINT8 LatchSystemShutdownState;
|
BOOLEAN IsWpqFlushSupported;
|
UINT8 EadrSupport;
|
UINT8 EadrCacheFlushMode;
|
UINT8 SetSecureEraseSktChHob[MAX_SOCKET][MAX_CH]; //MAX_CH * MAX_SOCKET * MAX_DCPMM_CH
|
HOST_DDRT_DIMM_DEVICE_INFO_STRUCT HostDdrtDimmInfo[MAX_SOCKET][MAX_CH];
|
UINT32 DdrCacheSize[MAX_SOCKET][MAX_CH]; // Size of DDR memory reserved for 2LM cache (64MB granularity)
|
BOOLEAN AdrStateForPmemModule[MAX_SOCKET][MAX_CH]; // ADR state for Intel PMEM Modules
|
UINT16 BiosFisVersion; // Firmware Interface Specification version currently supported by BIOS
|
UINT16 MaxAveragePowerLimit; // Max Power limit in mW used for averaged power ( Valid range ends at 15000mW)
|
UINT16 MinAveragePowerLimit; // Min Power limit in mW used for averaged power ( Valid range starts from 10000mW)
|
UINT16 CurrAveragePowerLimit; // Current Power limit in mW used for average power
|
UINT16 MaxMbbPowerLimit; // Max MBB power limit ( Valid range ends at 18000mW).
|
UINT16 MinMbbPowerLimit; // Min MBB power limit ( Valid range starts from 15000mW).
|
UINT16 CurrMbbPowerLimit; // Current Power limit in mW used for MBB power
|
UINT32 MaxMbbAveragePowerTimeConstant; // Max MBB Average Power Time Constant
|
UINT32 MinMbbAveragePowerTimeConstant; // Min MBB Average Power Time Constant
|
UINT32 CurrMbbAveragePowerTimeConstant; // Current MBB Average Power Time Constant
|
UINT32 MmiohBase; // MMIOH base in 64MB granularity
|
UINT8 MaxSadRules; // Maximum SAD entries supported by silicon (24 for 14nm silicon, 16 for 10nm silicon)
|
UINT8 NumberofChaDramClusters; // Number of CHA DRAM decoder clusters
|
UINT8 VirtualNumaEnable; // Enable or Disable Virtual NUMA
|
UINT8 VirtualNumOfCluster; // Number of Virtual NUMA nodes in each physical NUMA node (Socket or SNC cluster)
|
BOOLEAN NumaEnable; // Information if NUMA is enabled or not
|
} SYSTEM_MEMORY_MAP_HOB;
|
|
#pragma pack()
|
|
#endif // _MEMORY_MAP_DATA_H_
|