/* $NoKeywords */ /** * @file * * MemIscp.h * * Contains common Memory Training ISCP-related structures and defines. * * @xrefitem bom "File Content Label" "Release Content" * @e project: FDK * @e sub-project: UEFI * @e version: $Revision: 317558 $ @e date: $Date: 2015-04-24 17:20:55 -0700 (Fri, 24 Apr 2015) $ * */ /***************************************************************************** * * Copyright 2013 - 2016 ADVANCED MICRO DEVICES, INC. All Rights Reserved. * * This program and the accompanying materials are licensed and made available * under the terms and conditions of the BSD License which accompanies this * distribution. The full text of the license may be found at * http://opensource.org/licenses/bsd-license.php * * THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, * WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR * IMPLIED. * ***************************************************************************/ //######################################################################### //######################################################################### //######################################################################### // NOTE: This file shared between SCP and UEFI, make sure all // // changes are reflected in both copies. // //######################################################################### //######################################################################### //######################################################################### #ifndef MEMISCP_H_ #define MEMISCP_H_ #ifdef __cplusplus extern "C" { #endif /*---------------------------------------------------------------------------------------- * M O D U L E S U S E D *---------------------------------------------------------------------------------------- */ /*---------------------------------------------------------------------------------------- * T Y P E D E F S A N D S T R U C T U R E S *---------------------------------------------------------------------------------------- */ /// Memory Attribute enum typedef enum { MEM_AVAILABLE = 1, ///< Memory Available MEM_RESERVED, ///< Memory Reserved MEM_ACPI, ///< Memory ACPI MEM_NVS, ///< Memory NVS MEM_UNUSABLE ///< Memory Unavailable } MEMORY_ATTRIBUTE; /// Memory descriptor structure for each memory range typedef struct { UINT64 Base0; ///< Base address of memory range 0 UINT64 Size0; ///< Size of memory range 0 MEMORY_ATTRIBUTE Attribute0; ///< Attribute of memory range 0 UINT32 Padding0; ///< 4-byte Padding to get 8-byte alignment UINT64 Base1; ///< Base address of memory range 1 UINT64 Size1; ///< Size of memory range 1 MEMORY_ATTRIBUTE Attribute1; ///< Attribute of memory range 1 UINT32 Padding1; ///< 4-byte Padding to get 8-byte alignment UINT64 Base2; ///< Base address of memory range 2 UINT64 Size2; ///< Size of memory range 2 MEMORY_ATTRIBUTE Attribute2; ///< Attribute of memory range 2 UINT32 Padding2; ///< 4-byte Padding to get 8-byte alignment UINT64 Base3; ///< Base address of memory range 3 UINT64 Size3; ///< Size of memory range 3 MEMORY_ATTRIBUTE Attribute3; ///< Attribute of memory range 3 UINT32 Padding3; ///< 4-byte Padding to get 8-byte alignment } AMD_MEMORY_RANGE_DESCRIPTOR; /// SMBIOS Structure Header typedef struct { UINT8 Type; ///< TYPE UINT8 Length; ///< Length of TYPE UINT16 Handle; ///< structure handle, a unique 16-bit number in the range 0 to 0FEFFh } ISCP_SMBIOS_STRUCTURE_HEADER; /// DMI Type 16 - Physical Memory Array typedef struct { UINT16 Location; ///< The physical location of the Memory Array, ///< whether on the system board or an add-in board. UINT16 Use; ///< Identifies the function for which the array ///< is used. UINT16 MemoryErrorCorrection; ///< The primary hardware error correction or ///< detection method supported by this memory array. ///< ..for memory devices in this array. UINT16 NumberOfMemoryDevices; ///< The number of slots or sockets available.. ///< ..for memory devices in this array. } ISCP_TYPE16_SMBIOS_INFO; /// DMI Type 17 offset 13h - Type Detail typedef struct { UINT16 Reserved1:1; ///< Reserved UINT16 Other:1; ///< Other UINT16 Unknown:1; ///< Unknown UINT16 FastPaged:1; ///< Fast-Paged UINT16 StaticColumn:1; ///< Static column UINT16 PseudoStatic:1; ///< Pseudo-static UINT16 Rambus:1; ///< RAMBUS UINT16 Synchronous:1; ///< Synchronous UINT16 Cmos:1; ///< CMOS UINT16 Edo:1; ///< EDO UINT16 WindowDram:1; ///< Window DRAM UINT16 CacheDram:1; ///< Cache Dram UINT16 NonVolatile:1; ///< Non-volatile UINT16 Registered:1; ///< Registered (Buffered) UINT16 Unbuffered:1; ///< Unbuffered (Unregistered) UINT16 Reserved2:1; ///< Reserved } SMBIOS_T17_TYPE_DETAIL; /// DMI Type 17 - Memory Device typedef struct { UINT16 Handle; ///< The temporary handle, or instance number, associated with the structure UINT16 TotalWidth; ///< Total Width, in bits, of this memory device, including any check or error-correction bits. UINT16 DataWidth; ///< Data Width, in bits, of this memory device. UINT16 MemorySize; ///< The size of the memory device. UINT16 FormFactor; ///< The implementation form factor for this memory device. UINT16 DeviceSet; ///< Identifies when the Memory Device is one of a set of.. ///< ..memory devices that must be populated with all devices of.. ///< ..the same type and size, and the set to which this device belongs. CHAR8 DeviceLocator[8]; ///< The string number of the string that identifies the physically labeled socket or board position where the memory device is located. CHAR8 BankLocator[16]; ///< The string number of the string that identifies the physically labeled bank where the memory device is located. UINT16 MemoryType; ///< The type of memory used in this device. SMBIOS_T17_TYPE_DETAIL TypeDetail; ///< Additional detail on the memory device type UINT16 Speed; ///< Identifies the speed of the device, in megahertz (MHz). UINT8 ManufacturerIdCode[8]; ///< Manufacturer ID code. CHAR8 SerialNumber[16]; ///< Serial Number. CHAR8 PartNumber[20]; ///< Part Number. UINT16 Attributes; ///< Bits 7-4: Reserved, Bits 3-0: rank. UINT32 ExtSize; ///< Extended Size. UINT16 ConfigSpeed; ///< Configured memory clock speed } ISCP_TYPE17_SMBIOS_INFO; /// DMI Type 19 - Memory Array Mapped Address typedef struct { UINT32 StartingAddr; ///< The physical address, in kilobytes, ///< of a range of memory mapped to the ///< specified physical memory array. UINT32 EndingAddr; ///< The physical ending address of the ///< last kilobyte of a range of addresses ///< mapped to the specified physical memory array. UINT16 MemoryArrayHandle; ///< The handle, or instance number, associated ///< with the physical memory array to which this ///< address range is mapped. UINT8 PartitionWidth; ///< Identifies the number of memory devices that ///< form a single row of memory for the address ///< partition defined by this structure. UINT64 ExtStartingAddr; ///< The physical address, in bytes, of a range of ///< memory mapped to the specified Physical Memory Array. UINT64 ExtEndingAddr; ///< The physical address, in bytes, of a range of ///< memory mapped to the specified Physical Memory Array. } ISCP_TYPE19_SMBIOS_INFO; #ifdef __cplusplus } #endif #endif /* MEMISCP_H_ */