#ifndef MPI30_IMAGE_H
#define MPI30_IMAGE_H 1
typedef struct _MPI3_COMP_IMAGE_VERSION
{
U16 BuildNum;
U16 CustomerID;
U8 PhaseMinor;
U8 PhaseMajor;
U8 GenMinor;
U8 GenMajor;
} MPI3_COMP_IMAGE_VERSION, MPI3_POINTER PTR_MPI3_COMP_IMAGE_VERSION,
Mpi3CompImageVersion_t, MPI3_POINTER pMpi3CompImageVersion_t;
typedef struct _MPI3_HASH_EXCLUSION_FORMAT
{
U32 Offset;
U32 Size;
} MPI3_HASH_EXCLUSION_FORMAT, MPI3_POINTER PTR_MPI3_HASH_EXCLUSION_FORMAT,
Mpi3HashSxclusionFormat_t, MPI3_POINTER pMpi3HashExclusionFormat_t;
#define MPI3_IMAGE_HASH_EXCUSION_NUM (4)
typedef struct _MPI3_COMPONENT_IMAGE_HEADER
{
U32 Signature0;
U32 LoadAddress;
U32 DataSize;
U32 StartOffset;
U32 Signature1;
U32 FlashOffset;
U32 ImageSize;
U32 VersionStringOffset;
U32 BuildDateStringOffset;
U32 BuildTimeStringOffset;
U32 EnvironmentVariableOffset;
U32 ApplicationSpecific;
U32 Signature2;
U32 HeaderSize;
U32 Crc;
U32 Flags;
U32 SecondaryFlashOffset;
U32 ETPOffset;
U32 ETPSize;
MPI3_VERSION_UNION RMCInterfaceVersion;
MPI3_VERSION_UNION ETPInterfaceVersion;
MPI3_COMP_IMAGE_VERSION ComponentImageVersion;
MPI3_HASH_EXCLUSION_FORMAT HashExclusion[MPI3_IMAGE_HASH_EXCUSION_NUM];
U32 NextImageHeaderOffset;
MPI3_VERSION_UNION SecurityVersion;
U32 Reserved84[31];
} MPI3_COMPONENT_IMAGE_HEADER, MPI3_POINTER PTR_MPI3_COMPONENT_IMAGE_HEADER,
Mpi3ComponentImageHeader_t, MPI3_POINTER pMpi3ComponentImageHeader_t;
#define MPI3_IMAGE_HEADER_SIGNATURE0_MPI3 (0xEB00003E)
#define MPI3_IMAGE_HEADER_LOAD_ADDRESS_INVALID (0x00000000)
#define MPI3_IMAGE_HEADER_SIGNATURE1_APPLICATION (0x20505041)
#define MPI3_IMAGE_HEADER_SIGNATURE1_FIRST_MUTABLE (0x20434D46)
#define MPI3_IMAGE_HEADER_SIGNATURE1_BSP (0x20505342)
#define MPI3_IMAGE_HEADER_SIGNATURE1_ROM_BIOS (0x534F4942)
#define MPI3_IMAGE_HEADER_SIGNATURE1_HII_X64 (0x4D494948)
#define MPI3_IMAGE_HEADER_SIGNATURE1_HII_ARM (0x41494948)
#define MPI3_IMAGE_HEADER_SIGNATURE1_CPLD (0x444C5043)
#define MPI3_IMAGE_HEADER_SIGNATURE1_SPD (0x20445053)
#define MPI3_IMAGE_HEADER_SIGNATURE1_GAS_GAUGE (0x20534147)
#define MPI3_IMAGE_HEADER_SIGNATURE1_PBLP (0x504C4250)
#define MPI3_IMAGE_HEADER_SIGNATURE1_MANIFEST (0x464E414D)
#define MPI3_IMAGE_HEADER_SIGNATURE1_OEM (0x204D454F)
#define MPI3_IMAGE_HEADER_SIGNATURE1_RMC (0x20434D52)
#define MPI3_IMAGE_HEADER_SIGNATURE1_SMM (0x204D4D53)
#define MPI3_IMAGE_HEADER_SIGNATURE1_PSW (0x20575350)
#define MPI3_IMAGE_HEADER_SIGNATURE1_CSW (0x20575343)
#define MPI3_IMAGE_HEADER_SIGNATURE2_VALUE (0x50584546)
#define MPI3_IMAGE_HEADER_FLAGS_SIGNED_UEFI_MASK (0x00000300)
#define MPI3_IMAGE_HEADER_FLAGS_SIGNED_UEFI_SHIFT (8)
#define MPI3_IMAGE_HEADER_FLAGS_SIGNED_UEFI_UNSPECIFIED (0x00000000)
#define MPI3_IMAGE_HEADER_FLAGS_SIGNED_UEFI_NOT_SIGNED (0x00000100)
#define MPI3_IMAGE_HEADER_FLAGS_SIGNED_UEFI_MICROSOFT_SIGNED (0x00000200)
#define MPI3_IMAGE_HEADER_FLAGS_CERT_CHAIN_FORMAT_MASK (0x000000C0)
#define MPI3_IMAGE_HEADER_FLAGS_CERT_CHAIN_FORMAT_SHIFT (6)
#define MPI3_IMAGE_HEADER_FLAGS_CERT_CHAIN_FORMAT_DEVICE_CERT (0x00000000)
#define MPI3_IMAGE_HEADER_FLAGS_CERT_CHAIN_FORMAT_ALIAS_CERT (0x00000040)
#define MPI3_IMAGE_HEADER_FLAGS_DEVICE_KEY_BASIS_MASK (0x00000030)
#define MPI3_IMAGE_HEADER_FLAGS_DEVICE_KEY_BASIS_SHIFT (4)
#define MPI3_IMAGE_HEADER_FLAGS_DEVICE_KEY_BASIS_CDI (0x00000000)
#define MPI3_IMAGE_HEADER_FLAGS_DEVICE_KEY_BASIS_DI (0x00000010)
#define MPI3_IMAGE_HEADER_FLAGS_SIGNED_NVDATA (0x00000008)
#define MPI3_IMAGE_HEADER_FLAGS_REQUIRES_ACTIVATION (0x00000004)
#define MPI3_IMAGE_HEADER_FLAGS_COMPRESSED (0x00000002)
#define MPI3_IMAGE_HEADER_FLAGS_FLASH (0x00000001)
#define MPI3_IMAGE_HEADER_SIGNATURE0_OFFSET (0x00)
#define MPI3_IMAGE_HEADER_LOAD_ADDRESS_OFFSET (0x04)
#define MPI3_IMAGE_HEADER_DATA_SIZE_OFFSET (0x08)
#define MPI3_IMAGE_HEADER_START_OFFSET_OFFSET (0x0C)
#define MPI3_IMAGE_HEADER_SIGNATURE1_OFFSET (0x10)
#define MPI3_IMAGE_HEADER_FLASH_OFFSET_OFFSET (0x14)
#define MPI3_IMAGE_HEADER_FLASH_SIZE_OFFSET (0x18)
#define MPI3_IMAGE_HEADER_VERSION_STRING_OFFSET_OFFSET (0x1C)
#define MPI3_IMAGE_HEADER_BUILD_DATE_STRING_OFFSET_OFFSET (0x20)
#define MPI3_IMAGE_HEADER_BUILD_TIME_OFFSET_OFFSET (0x24)
#define MPI3_IMAGE_HEADER_ENVIROMENT_VAR_OFFSET_OFFSET (0x28)
#define MPI3_IMAGE_HEADER_APPLICATION_SPECIFIC_OFFSET (0x2C)
#define MPI3_IMAGE_HEADER_SIGNATURE2_OFFSET (0x30)
#define MPI3_IMAGE_HEADER_HEADER_SIZE_OFFSET (0x34)
#define MPI3_IMAGE_HEADER_CRC_OFFSET (0x38)
#define MPI3_IMAGE_HEADER_FLAGS_OFFSET (0x3C)
#define MPI3_IMAGE_HEADER_SECONDARY_FLASH_OFFSET_OFFSET (0x40)
#define MPI3_IMAGE_HEADER_ETP_OFFSET_OFFSET (0x44)
#define MPI3_IMAGE_HEADER_ETP_SIZE_OFFSET (0x48)
#define MPI3_IMAGE_HEADER_RMC_INTERFACE_VER_OFFSET (0x4C)
#define MPI3_IMAGE_HEADER_ETP_INTERFACE_VER_OFFSET (0x50)
#define MPI3_IMAGE_HEADER_COMPONENT_IMAGE_VER_OFFSET (0x54)
#define MPI3_IMAGE_HEADER_HASH_EXCLUSION_OFFSET (0x5C)
#define MPI3_IMAGE_HEADER_NEXT_IMAGE_HEADER_OFFSET_OFFSET (0x7C)
#define MPI3_IMAGE_HEADER_SIZE (0x100)
#ifndef MPI3_CI_MANIFEST_MPI_MAX
#define MPI3_CI_MANIFEST_MPI_MAX (1)
#endif
typedef struct _MPI3_CI_MANIFEST_MPI_COMP_IMAGE_REF
{
U32 Signature1;
U32 Reserved04[3];
MPI3_COMP_IMAGE_VERSION ComponentImageVersion;
U32 ComponentImageVersionStringOffset;
U32 CRC;
} MPI3_CI_MANIFEST_MPI_COMP_IMAGE_REF, MPI3_POINTER PTR_MPI3_CI_MANIFEST_MPI_COMP_IMAGE_REF,
Mpi3CIManifestMpiCompImageRef_t, MPI3_POINTER pMpi3CIManifestMpiCompImageRef_t;
typedef struct _MPI3_CI_MANIFEST_MPI
{
U8 ManifestType;
U8 Reserved01[3];
U32 Reserved04[3];
U8 NumImageReferences;
U8 ReleaseLevel;
U16 Reserved12;
U16 Reserved14;
U16 Flags;
U32 Reserved18[2];
U16 VendorID;
U16 DeviceID;
U16 SubsystemVendorID;
U16 SubsystemID;
U32 Reserved28[2];
MPI3_VERSION_UNION PackageSecurityVersion;
U32 Reserved34;
MPI3_COMP_IMAGE_VERSION PackageVersion;
U32 PackageVersionStringOffset;
U32 PackageBuildDateStringOffset;
U32 PackageBuildTimeStringOffset;
U32 Reserved4C;
U32 DiagAuthorizationIdentifier[16];
MPI3_CI_MANIFEST_MPI_COMP_IMAGE_REF ComponentImageRef[MPI3_CI_MANIFEST_MPI_MAX];
} MPI3_CI_MANIFEST_MPI, MPI3_POINTER PTR_MPI3_CI_MANIFEST_MPI,
Mpi3CIManifestMpi_t, MPI3_POINTER pMpi3CIManifestMpi_t;
#define MPI3_CI_MANIFEST_MPI_RELEASE_LEVEL_DEV (0x00)
#define MPI3_CI_MANIFEST_MPI_RELEASE_LEVEL_PRE_PRODUCTION (0x08)
#define MPI3_CI_MANIFEST_MPI_RELEASE_LEVEL_PREALPHA (0x10)
#define MPI3_CI_MANIFEST_MPI_RELEASE_LEVEL_ALPHA (0x20)
#define MPI3_CI_MANIFEST_MPI_RELEASE_LEVEL_BETA (0x30)
#define MPI3_CI_MANIFEST_MPI_RELEASE_LEVEL_RC (0x40)
#define MPI3_CI_MANIFEST_MPI_RELEASE_LEVEL_GCA (0x50)
#define MPI3_CI_MANIFEST_MPI_RELEASE_LEVEL_POINT (0x60)
#define MPI3_CI_MANIFEST_MPI_RELEASE_LEVEL_DIAG (0xF0)
#define MPI3_CI_MANIFEST_MPI_FLAGS_DIAG_AUTHORIZATION (0x01)
#define MPI3_CI_MANIFEST_MPI_SUBSYSTEMID_IGNORED (0xFFFF)
#define MPI3_CI_MANIFEST_MPI_PKG_VER_STR_OFF_UNSPECIFIED (0x00000000)
#define MPI3_CI_MANIFEST_MPI_PKG_BUILD_DATE_STR_OFF_UNSPECIFIED (0x00000000)
#define MPI3_CI_MANIFEST_MPI_PKG_BUILD_TIME_STR_OFF_UNSPECIFIED (0x00000000)
typedef union _MPI3_CI_MANIFEST
{
MPI3_CI_MANIFEST_MPI Mpi;
U32 Dword[1];
} MPI3_CI_MANIFEST, MPI3_POINTER PTR_MPI3_CI_MANIFEST,
Mpi3CIManifest_t, MPI3_POINTER pMpi3CIManifest_t;
#define MPI3_CI_MANIFEST_TYPE_MPI (0x00)
typedef struct _MPI3_EXTENDED_IMAGE_HEADER
{
U8 ImageType;
U8 Reserved01[3];
U32 Checksum;
U32 ImageSize;
U32 NextImageHeaderOffset;
U32 Reserved10[4];
U32 IdentifyString[8];
} MPI3_EXTENDED_IMAGE_HEADER, MPI3_POINTER PTR_MPI3_EXTENDED_IMAGE_HEADER,
Mpi3ExtendedImageHeader_t, MPI3_POINTER pMpi3ExtendedImageHeader_t;
#define MPI3_EXT_IMAGE_IMAGETYPE_OFFSET (0x00)
#define MPI3_EXT_IMAGE_IMAGESIZE_OFFSET (0x08)
#define MPI3_EXT_IMAGE_NEXTIMAGE_OFFSET (0x0C)
#define MPI3_EXT_IMAGE_HEADER_SIZE (0x40)
#define MPI3_EXT_IMAGE_TYPE_UNSPECIFIED (0x00)
#define MPI3_EXT_IMAGE_TYPE_NVDATA (0x03)
#define MPI3_EXT_IMAGE_TYPE_SUPPORTED_DEVICES (0x07)
#define MPI3_EXT_IMAGE_TYPE_ENCRYPTED_HASH (0x09)
#define MPI3_EXT_IMAGE_TYPE_RDE (0x0A)
#define MPI3_EXT_IMAGE_TYPE_AUXILIARY_PROCESSOR (0x0B)
#define MPI3_EXT_IMAGE_TYPE_MIN_PRODUCT_SPECIFIC (0x80)
#define MPI3_EXT_IMAGE_TYPE_MAX_PRODUCT_SPECIFIC (0xFF)
typedef struct _MPI3_SUPPORTED_DEVICE
{
U16 DeviceID;
U16 VendorID;
U16 DeviceIDMask;
U16 Reserved06;
U8 LowPCIRev;
U8 HighPCIRev;
U16 Reserved0A;
U32 Reserved0C;
} MPI3_SUPPORTED_DEVICE, MPI3_POINTER PTR_MPI3_SUPPORTED_DEVICE,
Mpi3SupportedDevice_t, MPI3_POINTER pMpi3SupportedDevice_t;
#ifndef MPI3_SUPPORTED_DEVICE_MAX
#define MPI3_SUPPORTED_DEVICE_MAX (1)
#endif
typedef struct _MPI3_SUPPORTED_DEVICES_DATA
{
U8 ImageVersion;
U8 Reserved01;
U8 NumDevices;
U8 Reserved03;
U32 Reserved04;
MPI3_SUPPORTED_DEVICE SupportedDevice[MPI3_SUPPORTED_DEVICE_MAX];
} MPI3_SUPPORTED_DEVICES_DATA, MPI3_POINTER PTR_MPI3_SUPPORTED_DEVICES_DATA,
Mpi3SupportedDevicesData_t, MPI3_POINTER pMpi3SupportedDevicesData_t;
#ifndef MPI3_PUBLIC_KEY_MAX
#define MPI3_PUBLIC_KEY_MAX (1)
#endif
typedef struct _MPI3_ENCRYPTED_HASH_ENTRY
{
U8 HashImageType;
U8 HashAlgorithm;
U8 EncryptionAlgorithm;
U8 Flags;
U16 PublicKeySize;
U16 SignatureSize;
U32 PublicKey[MPI3_PUBLIC_KEY_MAX];
} MPI3_ENCRYPTED_HASH_ENTRY, MPI3_POINTER PTR_MPI3_ENCRYPTED_HASH_ENTRY,
Mpi3EncryptedHashEntry_t, MPI3_POINTER pMpi3EncryptedHashEntry_t;
#define MPI3_HASH_IMAGE_TYPE_KEY_WITH_HASH (0x03)
#define MPI3_HASH_IMAGE_TYPE_KEY_WITH_HASH_1_OF_2 (0x04)
#define MPI3_HASH_IMAGE_TYPE_KEY_WITH_HASH_2_OF_2 (0x05)
#define MPI3_HASH_ALGORITHM_VERSION_MASK (0xE0)
#define MPI3_HASH_ALGORITHM_VERSION_SHIFT (5)
#define MPI3_HASH_ALGORITHM_VERSION_NONE (0x00)
#define MPI3_HASH_ALGORITHM_VERSION_SHA1 (0x20)
#define MPI3_HASH_ALGORITHM_VERSION_SHA2 (0x40)
#define MPI3_HASH_ALGORITHM_VERSION_SHA3 (0x60)
#define MPI3_HASH_ALGORITHM_SIZE_MASK (0x1F)
#define MPI3_HASH_ALGORITHM_SIZE_SHIFT (0)
#define MPI3_HASH_ALGORITHM_SIZE_UNUSED (0x00)
#define MPI3_HASH_ALGORITHM_SIZE_SHA256 (0x01)
#define MPI3_HASH_ALGORITHM_SIZE_SHA512 (0x02)
#define MPI3_HASH_ALGORITHM_SIZE_SHA384 (0x03)
#define MPI3_ENCRYPTION_ALGORITHM_UNUSED (0x00)
#define MPI3_ENCRYPTION_ALGORITHM_RSA256 (0x01)
#define MPI3_ENCRYPTION_ALGORITHM_RSA512 (0x02)
#define MPI3_ENCRYPTION_ALGORITHM_RSA1024 (0x03)
#define MPI3_ENCRYPTION_ALGORITHM_RSA2048 (0x04)
#define MPI3_ENCRYPTION_ALGORITHM_RSA4096 (0x05)
#define MPI3_ENCRYPTION_ALGORITHM_RSA3072 (0x06)
#define MPI3_ENCRYPTION_ALGORITHM_ECDSA_P256 (0x07)
#define MPI3_ENCRYPTION_ALGORITHM_ECDSA_P384 (0x08)
#define MPI3_ENCRYPTION_ALGORITHM_ECDSA_P521 (0x09)
#define MPI3_ENCRYPTION_ALGORITHM_LMS_HSS (0x0A)
#define MPI3_ENCRYPTION_ALGORITHM_ML_DSA_87 (0x0B)
#define MPI3_ENCRYPTION_ALGORITHM_ML_DSA_65 (0x0C)
#define MPI3_ENCRYPTION_ALGORITHM_ML_DSA_44 (0x0D)
#define MPI3_ENCRYPTED_HASH_ENTRY_FLAGS_PAIRED_KEY_MASK (0x0F)
#define MPI3_ENCRYPTED_HASH_ENTRY_FLAGS_PAIRED_KEY_SHIFT (0)
#ifndef MPI3_ENCRYPTED_HASH_ENTRY_MAX
#define MPI3_ENCRYPTED_HASH_ENTRY_MAX (1)
#endif
typedef struct _MPI3_ENCRYPTED_HASH_DATA
{
U8 ImageVersion;
U8 NumHash;
U16 Reserved02;
U32 Reserved04;
MPI3_ENCRYPTED_HASH_ENTRY EncryptedHashEntry[MPI3_ENCRYPTED_HASH_ENTRY_MAX];
} MPI3_ENCRYPTED_HASH_DATA, MPI3_POINTER PTR_MPI3_ENCRYPTED_HASH_DATA,
Mpi3EncryptedHashData_t, MPI3_POINTER pMpi3EncryptedHashData_t;
#ifndef MPI3_AUX_PROC_DATA_MAX
#define MPI3_AUX_PROC_DATA_MAX (1)
#endif
typedef struct _MPI3_AUX_PROCESSOR_DATA
{
U8 BootMethod;
U8 NumLoadAddr;
U8 Reserved02;
U8 Type;
U32 Version;
U32 LoadAddress[8];
U32 Reserved28[22];
U32 AuxProcessorData[MPI3_AUX_PROC_DATA_MAX];
} MPI3_AUX_PROCESSOR_DATA, MPI3_POINTER PTR_MPI3_AUX_PROCESSOR_DATA,
Mpi3AuxProcessorData_t, MPI3_POINTER pMpi3AuxProcessorData_t;
#define MPI3_AUX_PROC_DATA_OFFSET (0x80)
#define MPI3_AUXPROCESSOR_BOOT_METHOD_MO_MSG (0x00)
#define MPI3_AUXPROCESSOR_BOOT_METHOD_MO_DOORBELL (0x01)
#define MPI3_AUXPROCESSOR_BOOT_METHOD_COMPONENT (0x02)
#define MPI3_AUXPROCESSOR_TYPE_ARM_A15 (0x00)
#define MPI3_AUXPROCESSOR_TYPE_ARM_M0 (0x01)
#define MPI3_AUXPROCESSOR_TYPE_ARM_R4 (0x02)
#endif