1 /* 2 * SPDX-License-Identifier: BSD-2-Clause-FreeBSD 3 * 4 * Copyright (c) 2016-2025, Broadcom Inc. All rights reserved. 5 * Support: <fbsd-storage-driver.pdl@broadcom.com> 6 * 7 * Redistribution and use in source and binary forms, with or without 8 * modification, are permitted provided that the following conditions are 9 * met: 10 * 11 * 1. Redistributions of source code must retain the above copyright notice, 12 * this list of conditions and the following disclaimer. 13 * 2. Redistributions in binary form must reproduce the above copyright notice, 14 * this list of conditions and the following disclaimer in the documentation and/or other 15 * materials provided with the distribution. 16 * 3. Neither the name of the Broadcom Inc. nor the names of its contributors 17 * may be used to endorse or promote products derived from this software without 18 * specific prior written permission. 19 * 20 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 21 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 22 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 23 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE 24 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 25 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 26 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 27 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 28 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 29 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 30 * POSSIBILITY OF SUCH DAMAGE. 31 * 32 * The views and conclusions contained in the software and documentation are 33 * those of the authors and should not be interpreted as representing 34 * official policies,either expressed or implied, of the FreeBSD Project. 35 * 36 * Mail to: Broadcom Inc 1320 Ridder Park Dr, San Jose, CA 95131 37 * 38 * Broadcom Inc. (Broadcom) MPI3MR Adapter FreeBSD 39 * 40 */ 41 42 #ifndef MPI30_IMAGE_H 43 #define MPI30_IMAGE_H 1 44 45 /* Component Image Version */ 46 typedef struct _MPI3_COMP_IMAGE_VERSION 47 { 48 U16 BuildNum; /* 0x00 */ 49 U16 CustomerID; /* 0x02 */ 50 U8 PhaseMinor; /* 0x04 */ 51 U8 PhaseMajor; /* 0x05 */ 52 U8 GenMinor; /* 0x06 */ 53 U8 GenMajor; /* 0x07 */ 54 } MPI3_COMP_IMAGE_VERSION, MPI3_POINTER PTR_MPI3_COMP_IMAGE_VERSION, 55 Mpi3CompImageVersion_t, MPI3_POINTER pMpi3CompImageVersion_t; 56 57 /* Hash Exclusion Format */ 58 typedef struct _MPI3_HASH_EXCLUSION_FORMAT 59 { 60 U32 Offset; /* 0x00 */ 61 U32 Size; /* 0x04 */ 62 } MPI3_HASH_EXCLUSION_FORMAT, MPI3_POINTER PTR_MPI3_HASH_EXCLUSION_FORMAT, 63 Mpi3HashSxclusionFormat_t, MPI3_POINTER pMpi3HashExclusionFormat_t; 64 65 #define MPI3_IMAGE_HASH_EXCUSION_NUM (4) 66 67 /* FW Image Header */ 68 typedef struct _MPI3_COMPONENT_IMAGE_HEADER 69 { 70 U32 Signature0; /* 0x00 */ 71 U32 LoadAddress; /* 0x04 */ 72 U32 DataSize; /* 0x08 */ 73 U32 StartOffset; /* 0x0C */ 74 U32 Signature1; /* 0x10 */ 75 U32 FlashOffset; /* 0x14 */ 76 U32 ImageSize; /* 0x18 */ 77 U32 VersionStringOffset; /* 0x1C */ 78 U32 BuildDateStringOffset; /* 0x20 */ 79 U32 BuildTimeStringOffset; /* 0x24 */ 80 U32 EnvironmentVariableOffset; /* 0x28 */ 81 U32 ApplicationSpecific; /* 0x2C */ 82 U32 Signature2; /* 0x30 */ 83 U32 HeaderSize; /* 0x34 */ 84 U32 Crc; /* 0x38 */ 85 U32 Flags; /* 0x3C */ 86 U32 SecondaryFlashOffset; /* 0x40 */ 87 U32 ETPOffset; /* 0x44 */ 88 U32 ETPSize; /* 0x48 */ 89 MPI3_VERSION_UNION RMCInterfaceVersion; /* 0x4C */ 90 MPI3_VERSION_UNION ETPInterfaceVersion; /* 0x50 */ 91 MPI3_COMP_IMAGE_VERSION ComponentImageVersion; /* 0x54 */ 92 MPI3_HASH_EXCLUSION_FORMAT HashExclusion[MPI3_IMAGE_HASH_EXCUSION_NUM]; /* 0x5C */ 93 U32 NextImageHeaderOffset; /* 0x7C */ 94 MPI3_VERSION_UNION SecurityVersion; /* 0x80 */ 95 U32 Reserved84[31]; /* 0x84 -- 0xFC */ 96 } MPI3_COMPONENT_IMAGE_HEADER, MPI3_POINTER PTR_MPI3_COMPONENT_IMAGE_HEADER, 97 Mpi3ComponentImageHeader_t, MPI3_POINTER pMpi3ComponentImageHeader_t; 98 99 100 /**** Definitions for Signature0 field ****/ 101 #define MPI3_IMAGE_HEADER_SIGNATURE0_MPI3 (0xEB00003E) 102 103 /**** Definitions for LoadAddress field ****/ 104 #define MPI3_IMAGE_HEADER_LOAD_ADDRESS_INVALID (0x00000000) 105 106 /**** Definitions for Signature1 field ****/ 107 #define MPI3_IMAGE_HEADER_SIGNATURE1_APPLICATION (0x20505041) /* string "APP " */ 108 #define MPI3_IMAGE_HEADER_SIGNATURE1_FIRST_MUTABLE (0x20434D46) /* string "FMC " */ 109 #define MPI3_IMAGE_HEADER_SIGNATURE1_BSP (0x20505342) /* string "BSP " */ 110 #define MPI3_IMAGE_HEADER_SIGNATURE1_ROM_BIOS (0x534F4942) /* string "BIOS" */ 111 #define MPI3_IMAGE_HEADER_SIGNATURE1_HII_X64 (0x4D494948) /* string "HIIM" */ 112 #define MPI3_IMAGE_HEADER_SIGNATURE1_HII_ARM (0x41494948) /* string "HIIA" */ 113 #define MPI3_IMAGE_HEADER_SIGNATURE1_CPLD (0x444C5043) /* string "CPLD" */ 114 #define MPI3_IMAGE_HEADER_SIGNATURE1_SPD (0x20445053) /* string "SPD " */ 115 #define MPI3_IMAGE_HEADER_SIGNATURE1_GAS_GAUGE (0x20534147) /* string "GAS " */ 116 #define MPI3_IMAGE_HEADER_SIGNATURE1_PBLP (0x504C4250) /* string "PBLP" */ 117 #define MPI3_IMAGE_HEADER_SIGNATURE1_MANIFEST (0x464E414D) /* string "MANF" */ 118 #define MPI3_IMAGE_HEADER_SIGNATURE1_OEM (0x204D454F) /* string "OEM " */ 119 #define MPI3_IMAGE_HEADER_SIGNATURE1_RMC (0x20434D52) /* string "RMC " */ 120 #define MPI3_IMAGE_HEADER_SIGNATURE1_SMM (0x204D4D53) /* string "SMM " */ 121 #define MPI3_IMAGE_HEADER_SIGNATURE1_PSW (0x20575350) /* string "PSW " */ 122 #define MPI3_IMAGE_HEADER_SIGNATURE1_CSW (0x20575343) /* string "CSW " */ 123 124 /**** Definitions for Signature2 field ****/ 125 #define MPI3_IMAGE_HEADER_SIGNATURE2_VALUE (0x50584546) 126 127 /**** Definitions for Flags field ****/ 128 #define MPI3_IMAGE_HEADER_FLAGS_SIGNED_UEFI_MASK (0x00000300) 129 #define MPI3_IMAGE_HEADER_FLAGS_SIGNED_UEFI_SHIFT (8) 130 #define MPI3_IMAGE_HEADER_FLAGS_SIGNED_UEFI_UNSPECIFIED (0x00000000) 131 #define MPI3_IMAGE_HEADER_FLAGS_SIGNED_UEFI_NOT_SIGNED (0x00000100) 132 #define MPI3_IMAGE_HEADER_FLAGS_SIGNED_UEFI_MICROSOFT_SIGNED (0x00000200) 133 #define MPI3_IMAGE_HEADER_FLAGS_CERT_CHAIN_FORMAT_MASK (0x000000C0) 134 #define MPI3_IMAGE_HEADER_FLAGS_CERT_CHAIN_FORMAT_SHIFT (6) 135 #define MPI3_IMAGE_HEADER_FLAGS_CERT_CHAIN_FORMAT_DEVICE_CERT (0x00000000) 136 #define MPI3_IMAGE_HEADER_FLAGS_CERT_CHAIN_FORMAT_ALIAS_CERT (0x00000040) 137 #define MPI3_IMAGE_HEADER_FLAGS_DEVICE_KEY_BASIS_MASK (0x00000030) 138 #define MPI3_IMAGE_HEADER_FLAGS_DEVICE_KEY_BASIS_SHIFT (4) 139 #define MPI3_IMAGE_HEADER_FLAGS_DEVICE_KEY_BASIS_CDI (0x00000000) 140 #define MPI3_IMAGE_HEADER_FLAGS_DEVICE_KEY_BASIS_DI (0x00000010) 141 #define MPI3_IMAGE_HEADER_FLAGS_SIGNED_NVDATA (0x00000008) 142 #define MPI3_IMAGE_HEADER_FLAGS_REQUIRES_ACTIVATION (0x00000004) 143 #define MPI3_IMAGE_HEADER_FLAGS_COMPRESSED (0x00000002) 144 #define MPI3_IMAGE_HEADER_FLAGS_FLASH (0x00000001) 145 146 147 /**** Offsets for Image Header Fields ****/ 148 #define MPI3_IMAGE_HEADER_SIGNATURE0_OFFSET (0x00) 149 #define MPI3_IMAGE_HEADER_LOAD_ADDRESS_OFFSET (0x04) 150 #define MPI3_IMAGE_HEADER_DATA_SIZE_OFFSET (0x08) 151 #define MPI3_IMAGE_HEADER_START_OFFSET_OFFSET (0x0C) 152 #define MPI3_IMAGE_HEADER_SIGNATURE1_OFFSET (0x10) 153 #define MPI3_IMAGE_HEADER_FLASH_OFFSET_OFFSET (0x14) 154 #define MPI3_IMAGE_HEADER_FLASH_SIZE_OFFSET (0x18) 155 #define MPI3_IMAGE_HEADER_VERSION_STRING_OFFSET_OFFSET (0x1C) 156 #define MPI3_IMAGE_HEADER_BUILD_DATE_STRING_OFFSET_OFFSET (0x20) 157 #define MPI3_IMAGE_HEADER_BUILD_TIME_OFFSET_OFFSET (0x24) 158 #define MPI3_IMAGE_HEADER_ENVIROMENT_VAR_OFFSET_OFFSET (0x28) 159 #define MPI3_IMAGE_HEADER_APPLICATION_SPECIFIC_OFFSET (0x2C) 160 #define MPI3_IMAGE_HEADER_SIGNATURE2_OFFSET (0x30) 161 #define MPI3_IMAGE_HEADER_HEADER_SIZE_OFFSET (0x34) 162 #define MPI3_IMAGE_HEADER_CRC_OFFSET (0x38) 163 #define MPI3_IMAGE_HEADER_FLAGS_OFFSET (0x3C) 164 #define MPI3_IMAGE_HEADER_SECONDARY_FLASH_OFFSET_OFFSET (0x40) 165 #define MPI3_IMAGE_HEADER_ETP_OFFSET_OFFSET (0x44) 166 #define MPI3_IMAGE_HEADER_ETP_SIZE_OFFSET (0x48) 167 #define MPI3_IMAGE_HEADER_RMC_INTERFACE_VER_OFFSET (0x4C) 168 #define MPI3_IMAGE_HEADER_ETP_INTERFACE_VER_OFFSET (0x50) 169 #define MPI3_IMAGE_HEADER_COMPONENT_IMAGE_VER_OFFSET (0x54) 170 #define MPI3_IMAGE_HEADER_HASH_EXCLUSION_OFFSET (0x5C) 171 #define MPI3_IMAGE_HEADER_NEXT_IMAGE_HEADER_OFFSET_OFFSET (0x7C) 172 173 174 #define MPI3_IMAGE_HEADER_SIZE (0x100) 175 176 177 178 /***************************************************************************** 179 * Component Image Data * 180 *****************************************************************************/ 181 182 /* Package Manifest Data */ 183 184 #ifndef MPI3_CI_MANIFEST_MPI_MAX 185 #define MPI3_CI_MANIFEST_MPI_MAX (1) 186 #endif /* MPI3_CI_MANIFEST_MPI_MAX */ 187 188 typedef struct _MPI3_CI_MANIFEST_MPI_COMP_IMAGE_REF 189 { 190 U32 Signature1; /* 0x00 */ 191 U32 Reserved04[3]; /* 0x04 */ 192 MPI3_COMP_IMAGE_VERSION ComponentImageVersion; /* 0x10 */ 193 U32 ComponentImageVersionStringOffset; /* 0x18 */ 194 U32 CRC; /* 0x1C */ 195 } MPI3_CI_MANIFEST_MPI_COMP_IMAGE_REF, MPI3_POINTER PTR_MPI3_CI_MANIFEST_MPI_COMP_IMAGE_REF, 196 Mpi3CIManifestMpiCompImageRef_t, MPI3_POINTER pMpi3CIManifestMpiCompImageRef_t; 197 198 typedef struct _MPI3_CI_MANIFEST_MPI 199 { 200 U8 ManifestType; /* 0x00 */ 201 U8 Reserved01[3]; /* 0x01 */ 202 U32 Reserved04[3]; /* 0x04 */ 203 U8 NumImageReferences; /* 0x10 */ 204 U8 ReleaseLevel; /* 0x11 */ 205 U16 Reserved12; /* 0x12 */ 206 U16 Reserved14; /* 0x14 */ 207 U16 Flags; /* 0x16 */ 208 U32 Reserved18[2]; /* 0x18 */ 209 U16 VendorID; /* 0x20 */ 210 U16 DeviceID; /* 0x22 */ 211 U16 SubsystemVendorID; /* 0x24 */ 212 U16 SubsystemID; /* 0x26 */ 213 U32 Reserved28[2]; /* 0x28 */ 214 MPI3_VERSION_UNION PackageSecurityVersion; /* 0x30 */ 215 U32 Reserved34; /* 0x34 */ 216 MPI3_COMP_IMAGE_VERSION PackageVersion; /* 0x38 */ 217 U32 PackageVersionStringOffset; /* 0x40 */ 218 U32 PackageBuildDateStringOffset; /* 0x44 */ 219 U32 PackageBuildTimeStringOffset; /* 0x48 */ 220 U32 Reserved4C; /* 0x4C */ 221 U32 DiagAuthorizationIdentifier[16]; /* 0x50 */ 222 MPI3_CI_MANIFEST_MPI_COMP_IMAGE_REF ComponentImageRef[MPI3_CI_MANIFEST_MPI_MAX]; /* 0x90 */ /* variable length */ 223 /* StringData - offset of this field must be calculated */ /* variable length */ 224 } MPI3_CI_MANIFEST_MPI, MPI3_POINTER PTR_MPI3_CI_MANIFEST_MPI, 225 Mpi3CIManifestMpi_t, MPI3_POINTER pMpi3CIManifestMpi_t; 226 227 /* defines for the ReleaseLevel field */ 228 #define MPI3_CI_MANIFEST_MPI_RELEASE_LEVEL_DEV (0x00) 229 #define MPI3_CI_MANIFEST_MPI_RELEASE_LEVEL_PRE_PRODUCTION (0x08) 230 #define MPI3_CI_MANIFEST_MPI_RELEASE_LEVEL_PREALPHA (0x10) 231 #define MPI3_CI_MANIFEST_MPI_RELEASE_LEVEL_ALPHA (0x20) 232 #define MPI3_CI_MANIFEST_MPI_RELEASE_LEVEL_BETA (0x30) 233 #define MPI3_CI_MANIFEST_MPI_RELEASE_LEVEL_RC (0x40) 234 #define MPI3_CI_MANIFEST_MPI_RELEASE_LEVEL_GCA (0x50) 235 #define MPI3_CI_MANIFEST_MPI_RELEASE_LEVEL_POINT (0x60) 236 #define MPI3_CI_MANIFEST_MPI_RELEASE_LEVEL_DIAG (0xF0) 237 238 /* defines for the Flags field */ 239 #define MPI3_CI_MANIFEST_MPI_FLAGS_DIAG_AUTHORIZATION (0x01) 240 241 /* defines for the SubsystemID field */ 242 #define MPI3_CI_MANIFEST_MPI_SUBSYSTEMID_IGNORED (0xFFFF) 243 244 /* defines for the PackageVersionStringOffset field */ 245 #define MPI3_CI_MANIFEST_MPI_PKG_VER_STR_OFF_UNSPECIFIED (0x00000000) 246 247 /* defines for the PackageBuildDateStringOffset field */ 248 #define MPI3_CI_MANIFEST_MPI_PKG_BUILD_DATE_STR_OFF_UNSPECIFIED (0x00000000) 249 250 /* defines for the PackageBuildTimeStringOffset field */ 251 #define MPI3_CI_MANIFEST_MPI_PKG_BUILD_TIME_STR_OFF_UNSPECIFIED (0x00000000) 252 253 typedef union _MPI3_CI_MANIFEST 254 { 255 MPI3_CI_MANIFEST_MPI Mpi; 256 U32 Dword[1]; 257 } MPI3_CI_MANIFEST, MPI3_POINTER PTR_MPI3_CI_MANIFEST, 258 Mpi3CIManifest_t, MPI3_POINTER pMpi3CIManifest_t; 259 260 /* defines for ManifestType field */ 261 #define MPI3_CI_MANIFEST_TYPE_MPI (0x00) 262 263 264 /***************************************************************************** 265 * Extended Image Data * 266 *****************************************************************************/ 267 268 /* Extended Image Header */ 269 typedef struct _MPI3_EXTENDED_IMAGE_HEADER 270 { 271 U8 ImageType; /* 0x00 */ 272 U8 Reserved01[3]; /* 0x01 */ 273 U32 Checksum; /* 0x04 */ 274 U32 ImageSize; /* 0x08 */ 275 U32 NextImageHeaderOffset; /* 0x0C */ 276 U32 Reserved10[4]; /* 0x10 */ 277 U32 IdentifyString[8]; /* 0x20 */ 278 } MPI3_EXTENDED_IMAGE_HEADER, MPI3_POINTER PTR_MPI3_EXTENDED_IMAGE_HEADER, 279 Mpi3ExtendedImageHeader_t, MPI3_POINTER pMpi3ExtendedImageHeader_t; 280 281 /* useful offsets */ 282 #define MPI3_EXT_IMAGE_IMAGETYPE_OFFSET (0x00) 283 #define MPI3_EXT_IMAGE_IMAGESIZE_OFFSET (0x08) 284 #define MPI3_EXT_IMAGE_NEXTIMAGE_OFFSET (0x0C) 285 286 #define MPI3_EXT_IMAGE_HEADER_SIZE (0x40) 287 288 /* defines for the ImageType field */ 289 #define MPI3_EXT_IMAGE_TYPE_UNSPECIFIED (0x00) 290 #define MPI3_EXT_IMAGE_TYPE_NVDATA (0x03) 291 #define MPI3_EXT_IMAGE_TYPE_SUPPORTED_DEVICES (0x07) 292 #define MPI3_EXT_IMAGE_TYPE_ENCRYPTED_HASH (0x09) 293 #define MPI3_EXT_IMAGE_TYPE_RDE (0x0A) 294 #define MPI3_EXT_IMAGE_TYPE_AUXILIARY_PROCESSOR (0x0B) 295 #define MPI3_EXT_IMAGE_TYPE_MIN_PRODUCT_SPECIFIC (0x80) 296 #define MPI3_EXT_IMAGE_TYPE_MAX_PRODUCT_SPECIFIC (0xFF) 297 298 299 /* Supported Device Data Format */ 300 typedef struct _MPI3_SUPPORTED_DEVICE 301 { 302 U16 DeviceID; /* 0x00 */ 303 U16 VendorID; /* 0x02 */ 304 U16 DeviceIDMask; /* 0x04 */ 305 U16 Reserved06; /* 0x06 */ 306 U8 LowPCIRev; /* 0x08 */ 307 U8 HighPCIRev; /* 0x09 */ 308 U16 Reserved0A; /* 0x0A */ 309 U32 Reserved0C; /* 0x0C */ 310 } MPI3_SUPPORTED_DEVICE, MPI3_POINTER PTR_MPI3_SUPPORTED_DEVICE, 311 Mpi3SupportedDevice_t, MPI3_POINTER pMpi3SupportedDevice_t; 312 313 #ifndef MPI3_SUPPORTED_DEVICE_MAX 314 #define MPI3_SUPPORTED_DEVICE_MAX (1) 315 #endif /* MPI3_SUPPORTED_DEVICE_MAX */ 316 317 /* Supported Devices Extended Image Data */ 318 typedef struct _MPI3_SUPPORTED_DEVICES_DATA 319 { 320 U8 ImageVersion; /* 0x00 */ 321 U8 Reserved01; /* 0x01 */ 322 U8 NumDevices; /* 0x02 */ 323 U8 Reserved03; /* 0x03 */ 324 U32 Reserved04; /* 0x04 */ 325 MPI3_SUPPORTED_DEVICE SupportedDevice[MPI3_SUPPORTED_DEVICE_MAX]; /* 0x08 */ /* variable length */ 326 } MPI3_SUPPORTED_DEVICES_DATA, MPI3_POINTER PTR_MPI3_SUPPORTED_DEVICES_DATA, 327 Mpi3SupportedDevicesData_t, MPI3_POINTER pMpi3SupportedDevicesData_t; 328 329 #ifndef MPI3_PUBLIC_KEY_MAX 330 #define MPI3_PUBLIC_KEY_MAX (1) 331 #endif /* MPI3_PUBLIC_KEY_MAX */ 332 333 /* Encrypted Hash Entry Format */ 334 typedef struct _MPI3_ENCRYPTED_HASH_ENTRY 335 { 336 U8 HashImageType; /* 0x00 */ 337 U8 HashAlgorithm; /* 0x01 */ 338 U8 EncryptionAlgorithm; /* 0x02 */ 339 U8 Flags; /* 0x03 */ 340 U16 PublicKeySize; /* 0x04 */ 341 U16 SignatureSize; /* 0x06 */ 342 U32 PublicKey[MPI3_PUBLIC_KEY_MAX]; /* 0x08 */ /* variable length */ 343 /* Signature - offset of this field must be calculated */ /* variable length */ 344 } MPI3_ENCRYPTED_HASH_ENTRY, MPI3_POINTER PTR_MPI3_ENCRYPTED_HASH_ENTRY, 345 Mpi3EncryptedHashEntry_t, MPI3_POINTER pMpi3EncryptedHashEntry_t; 346 347 348 /* defines for the HashImageType field */ 349 #define MPI3_HASH_IMAGE_TYPE_KEY_WITH_HASH (0x03) 350 #define MPI3_HASH_IMAGE_TYPE_KEY_WITH_HASH_1_OF_2 (0x04) 351 #define MPI3_HASH_IMAGE_TYPE_KEY_WITH_HASH_2_OF_2 (0x05) 352 353 /* defines for the HashAlgorithm field */ 354 #define MPI3_HASH_ALGORITHM_VERSION_MASK (0xE0) 355 #define MPI3_HASH_ALGORITHM_VERSION_SHIFT (5) 356 #define MPI3_HASH_ALGORITHM_VERSION_NONE (0x00) 357 #define MPI3_HASH_ALGORITHM_VERSION_SHA1 (0x20) /* Obsolete */ 358 #define MPI3_HASH_ALGORITHM_VERSION_SHA2 (0x40) 359 #define MPI3_HASH_ALGORITHM_VERSION_SHA3 (0x60) 360 361 #define MPI3_HASH_ALGORITHM_SIZE_MASK (0x1F) 362 #define MPI3_HASH_ALGORITHM_SIZE_SHIFT (0) 363 #define MPI3_HASH_ALGORITHM_SIZE_UNUSED (0x00) 364 #define MPI3_HASH_ALGORITHM_SIZE_SHA256 (0x01) 365 #define MPI3_HASH_ALGORITHM_SIZE_SHA512 (0x02) 366 #define MPI3_HASH_ALGORITHM_SIZE_SHA384 (0x03) 367 368 /* defines for the EncryptionAlgorithm field */ 369 #define MPI3_ENCRYPTION_ALGORITHM_UNUSED (0x00) 370 #define MPI3_ENCRYPTION_ALGORITHM_RSA256 (0x01) /* Obsolete */ 371 #define MPI3_ENCRYPTION_ALGORITHM_RSA512 (0x02) /* Obsolete */ 372 #define MPI3_ENCRYPTION_ALGORITHM_RSA1024 (0x03) /* Obsolete */ 373 #define MPI3_ENCRYPTION_ALGORITHM_RSA2048 (0x04) 374 #define MPI3_ENCRYPTION_ALGORITHM_RSA4096 (0x05) 375 #define MPI3_ENCRYPTION_ALGORITHM_RSA3072 (0x06) 376 #define MPI3_ENCRYPTION_ALGORITHM_ECDSA_P256 (0x07) /* NIST secp256r1 curve */ 377 #define MPI3_ENCRYPTION_ALGORITHM_ECDSA_P384 (0x08) /* NIST secp384r1 curve */ 378 #define MPI3_ENCRYPTION_ALGORITHM_ECDSA_P521 (0x09) /* NIST secp521r1 curve */ 379 #define MPI3_ENCRYPTION_ALGORITHM_LMS_HSS (0x0A) /* Leighton-Micali Signature (LMS) */ 380 /* Hierarchical Signature System (HSS) */ 381 #define MPI3_ENCRYPTION_ALGORITHM_ML_DSA_87 (0x0B) /* Module-Lattice-Based Sig Algo - Category 5 */ 382 #define MPI3_ENCRYPTION_ALGORITHM_ML_DSA_65 (0x0C) /* Module-Lattice-Based Sig Algo - Category 3 */ 383 #define MPI3_ENCRYPTION_ALGORITHM_ML_DSA_44 (0x0D) /* Module-Lattice-Based Sig Algo - Category 2 */ 384 385 /* defines for the Flags field */ 386 #define MPI3_ENCRYPTED_HASH_ENTRY_FLAGS_PAIRED_KEY_MASK (0x0F) 387 #define MPI3_ENCRYPTED_HASH_ENTRY_FLAGS_PAIRED_KEY_SHIFT (0) 388 389 #ifndef MPI3_ENCRYPTED_HASH_ENTRY_MAX 390 #define MPI3_ENCRYPTED_HASH_ENTRY_MAX (1) 391 #endif /* MPI3_ENCRYPTED_HASH_ENTRY_MAX */ 392 393 /* Encrypted Hash Image Data */ 394 typedef struct _MPI3_ENCRYPTED_HASH_DATA 395 { 396 U8 ImageVersion; /* 0x00 */ 397 U8 NumHash; /* 0x01 */ 398 U16 Reserved02; /* 0x02 */ 399 U32 Reserved04; /* 0x04 */ 400 MPI3_ENCRYPTED_HASH_ENTRY EncryptedHashEntry[MPI3_ENCRYPTED_HASH_ENTRY_MAX]; /* 0x08 */ /* variable length */ 401 } MPI3_ENCRYPTED_HASH_DATA, MPI3_POINTER PTR_MPI3_ENCRYPTED_HASH_DATA, 402 Mpi3EncryptedHashData_t, MPI3_POINTER pMpi3EncryptedHashData_t; 403 404 405 #ifndef MPI3_AUX_PROC_DATA_MAX 406 #define MPI3_AUX_PROC_DATA_MAX (1) 407 #endif /* MPI3_ENCRYPTED_HASH_ENTRY_MAX */ 408 409 /* Auxiliary Processor Extended Image Data */ 410 typedef struct _MPI3_AUX_PROCESSOR_DATA 411 { 412 U8 BootMethod; /* 0x00 */ 413 U8 NumLoadAddr; /* 0x01 */ 414 U8 Reserved02; /* 0x02 */ 415 U8 Type; /* 0x03 */ 416 U32 Version; /* 0x04 */ 417 U32 LoadAddress[8]; /* 0x08 */ 418 U32 Reserved28[22]; /* 0x28 */ 419 U32 AuxProcessorData[MPI3_AUX_PROC_DATA_MAX]; /* 0x80 */ /* variable length */ 420 } MPI3_AUX_PROCESSOR_DATA, MPI3_POINTER PTR_MPI3_AUX_PROCESSOR_DATA, 421 Mpi3AuxProcessorData_t, MPI3_POINTER pMpi3AuxProcessorData_t; 422 423 #define MPI3_AUX_PROC_DATA_OFFSET (0x80) 424 425 /* defines for the BootMethod field */ 426 #define MPI3_AUXPROCESSOR_BOOT_METHOD_MO_MSG (0x00) 427 #define MPI3_AUXPROCESSOR_BOOT_METHOD_MO_DOORBELL (0x01) 428 #define MPI3_AUXPROCESSOR_BOOT_METHOD_COMPONENT (0x02) 429 430 /* defines for the Type field */ 431 #define MPI3_AUXPROCESSOR_TYPE_ARM_A15 (0x00) 432 #define MPI3_AUXPROCESSOR_TYPE_ARM_M0 (0x01) 433 #define MPI3_AUXPROCESSOR_TYPE_ARM_R4 (0x02) 434 435 #endif /* MPI30_IMAGE_H */ 436