/** @file
Memory DXE Policy definitions
Copyright (c) 2019 Intel Corporation. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent
**/
#ifndef _MEMORY_DXE_CONFIG_H_
#define _MEMORY_DXE_CONFIG_H_
#pragma pack(push, 1)
#define MEMORY_DXE_CONFIG_REVISION 1
/**
The Memory Configuration includes DIMM SPD address Map and DIMM Slot Mechanical present bit map.
The data elements should be initialized by a Platform Module.\n
Revision 1:
- Initial version.
**/
typedef struct {
CONFIG_BLOCK_HEADER Header; ///< Offset 0-27: Config Block Header
/**
Offset 28:
Dimm SPD address
Only Server support 2 channels * 3 slots per channel = 6 sockets totally
The Desktop and mobile only support 2 channels * 2 slots per channel = 4 sockets totally
So there is mapping rule here for Desktop and mobile that there are no more 4 DIMMS totally in a system:
Channel A/ Slot 0 --> Dimm 0 --> SpdAddressTable[0]
Channel A/ Slot 1 --> Dimm 1 --> SpdAddressTable[1]
Channel B/ Slot 0 --> Dimm 2 --> SpdAddressTable[2]
Channel B/ Slot 1 --> Dimm 3 --> SpdAddressTable[3]
Refer to SmbiosMemory.c for use
If change the mapping rule, please update the Revision number.
**/
UINT8 *SpdAddressTable;
/**
Offset 36:
Channel A DIMM Slot Mechanical present bit map, bit 0 -> DIMM 0, bit 1 -> DIMM1, ...
if the bit is 1, the related DIMM slot is present.
E.g. if channel A has 2 DIMMs, ChannelASlotMap = 0x03;
E.g. if channel A has only 1 DIMMs, ChannelASlotMap = 0x01;
Refer to SmbiosMemory.c
**/
UINT8 ChannelASlotMap;
/**
Offset 37:
Channel B DIMM Slot Mechanical present bit map, bit 0 -> DIMM 0, bit 1 -> DIMM1, ...
if the bit is 1, the related DIMM slot is present.
E.g. if channel B has 2 DIMMs, ChannelBSlotMap = 0x03;
E.g. if channel B has only 1 DIMMs, ChannelBSlotMap = 0x01;
Refer to SmbiosMemory.c
**/
UINT8 ChannelBSlotMap;
UINT8 MrcTimeMeasure; ///< Offset 38: MRC execution time measurement: 0=Disable, 1=Enable
UINT8 MrcFastBoot; ///< Offset 39: Fast boot: 0=Disable, 1=Enable
} MEMORY_DXE_CONFIG;
#pragma pack(pop)
#endif // _MEMORY_DXE_CONFIG_H_