13705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao/** @file 23705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao Guid & data structure used for Delivering Capsules Containing Updates to 33705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao EDKII System Firmware Management Protocol 43705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao 53705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao Copyright (c) 2016, Intel Corporation. All rights reserved.<BR> 63705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao This program and the accompanying materials 73705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao are licensed and made available under the terms and conditions of the BSD License 83705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao which accompanies this distribution. The full text of the license may be found at 93705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao http://opensource.org/licenses/bsd-license.php 103705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao 113705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, 123705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. 133705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao 143705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao**/ 153705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao 163705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao 173705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao#ifndef __EDKII_SYSTEM_FMP_CAPSULE_GUID_H__ 183705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao#define __EDKII_SYSTEM_FMP_CAPSULE_GUID_H__ 193705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao 203705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao/** 213705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao 223705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao 1. Capsule Layout is below: 233705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao +------------------------------------------+ 243705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao | Capsule Header (OPTIONAL, WFU) | <== ESRT.FwClass (Optional) 253705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao +------------------------------------------+ 263705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao | FMP Capsule Header | <== EFI_FIRMWARE_MANAGEMENT_CAPSULE_ID_GUID 273705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao +------------------------------------------+ 283705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao | FIRMWARE_MANAGEMENT_CAPSULE_IMAGE_HEADER | <== PcdSystemFmpCapsuleImageTypeIdGuid 293705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao +------------------------------------------+ 303705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao | EFI_FIRMWARE_IMAGE_AUTHENTICATION | 313705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao +------------------------------------------+ 323705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao | FMP Payload | 333705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao +------------------------------------------+ 343705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao 353705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao 2. System FMP Payload is below: 363705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao +------------------------------------------+ 373705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao | EFI_FIRMWARE_VOLUME | 383705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao | +------------------------------------+ | 393705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao | | FFS (Configure File) | | <== gEdkiiSystemFmpCapsuleConfigFileGuid 403705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao | +------------------------------------+ | 413705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao | | FFS (Driver FV) | | <== gEdkiiSystemFmpCapsuleDriverFvFileGuid 423705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao | +------------------------------------+ | 433705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao | | FFS (System Firmware Image) | | <== PcdEdkiiSystemFirmwareFileGuid 443705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao | | +------------------------------+ | | 453705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao | | | FV Recovery | | | 463705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao | | |------------------------------| | | 473705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao | | | FV Main | | | 483705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao | | +------------------------------+ | | 493705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao | +------------------------------------+ | 503705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao +------------------------------------------+ 513705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao 523705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao NOTE: There might be multiple FFS (System Firmware Image) exist in the System FMP Capsule. 533705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao Only the one, whose FFS GUID matches PcdEdkiiSystemFirmwareFileGuid, takes effect. 543705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao The other FFS is ignored. 553705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao 563705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao 3. The format of the recovery configuration is below: 573705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao 583705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao [Head] 593705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao NumOfRecovery = <Num> # Decimal 603705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao Recovery0 = <Name1> # String 613705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao Recovery1 = <Name2> # String 623705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao Recovery<Num-1> = <NameX> # String 633705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao 643705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao [Name?] 653705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao Length = <Length> # Fv Length (HEX) 663705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao ImageOffset = <ImageOffset> # Fv offset of this SystemFirmware image (HEX) 673705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao FileGuid = XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX # PcdEdkiiSystemFirmwareFileGuid 683705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao 693705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao NOTE: The [Name?] entry may have differnt FileGuid. 703705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao Only the one, whose FileGuid matches PcdEdkiiSystemFirmwareFileGuid, takes effect. 713705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao The other entry is ignored. 723705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao 733705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao 4. The format of the capsule update configuration is below: 743705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao 753705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao [Head] 763705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao NumOfUpdate = <Num> # Decimal 773705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao Update0 = <Name1> # String 783705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao Update1 = <Name2> # String 793705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao Update<Num-1> = <NameX> # String 803705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao 813705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao [Name?] 823705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao FirmwareType = 0 # 0 - SystemFirmware, 1 - NvRam 833705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao AddressType = 0 # 0 - relative address, 1 - absolute address. 843705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao BaseAddress = <BaseAddress> # Base address offset on flash (HEX) 853705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao Length = <Length> # Image Length (HEX) 863705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao ImageOffset = <ImageOffset> # Image offset of this SystemFirmware image (HEX) 873705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao FileGuid = XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX # PcdEdkiiSystemFirmwareFileGuid 883705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao 893705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao NOTE: The [Name?] entry may have differnt FileGuid. 903705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao Only the one, whose FileGuid matches PcdEdkiiSystemFirmwareFileGuid, takes effect. 913705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao The other entry is ignored. 923705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao 933705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao**/ 943705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao 953705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao#define EDKII_SYSTEM_FIRMWARE_IMAGE_DESCRIPTOR_SIGNATURE SIGNATURE_32('S', 'F', 'I', 'D') 963705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao 973705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao#pragma pack(1) 983705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yaotypedef struct { 993705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao UINT32 Signature; 1003705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao UINT32 HeaderLength; // Length of EDKII_SYSTEM_FIRMWARE_IMAGE_DESCRIPTOR, excluding NameString 1013705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao UINT32 Length; // Length of the data structure, including NameString 1023705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao // Below structure is similar as UEFI EFI_FIRMWARE_MANAGEMENT_PROTOCOL.GetPackageInfo() 1033705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao UINT32 PackageVersion; 1043705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao UINT32 PackageVersionNameStringOffset; // Offset from head, CHAR16 string including NULL terminate char 1053705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao // Below structure is similar as UEFI EFI_FIRMWARE_IMAGE_DESCRIPTOR 1063705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao UINT8 ImageIndex; 1073705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao UINT8 Reserved[3]; 1083705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao EFI_GUID ImageTypeId; 1093705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao UINT64 ImageId; 1103705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao UINT32 ImageIdNameStringOffset; // Offset from head, CHAR16 string including NULL terminate char 1113705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao UINT32 Version; 1123705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao UINT32 VersionNameStringOffset; // Offset from head, CHAR16 string including NULL terminate char 1133705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao UINT8 Reserved2[4]; 1143705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao UINT64 Size; 1153705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao UINT64 AttributesSupported; 1163705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao UINT64 AttributesSetting; 1173705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao UINT64 Compatibilities; 1183705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao UINT32 LowestSupportedImageVersion; 1193705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao UINT32 LastAttemptVersion; 1203705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao UINT32 LastAttemptStatus; 1213705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao UINT8 Reserved3[4]; 1223705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao UINT64 HardwareInstance; 1233705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao // real string data 1243705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao//CHAR16 ImageIdNameStr[]; // CHAR16 string including NULL terminate char 1253705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao//CHAR16 VersionNameStr[]; // CHAR16 string including NULL terminate char 1263705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao//CHAR16 PackageVersionNameStr[]; // CHAR16 string including NULL terminate char 1273705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao} EDKII_SYSTEM_FIRMWARE_IMAGE_DESCRIPTOR; 1283705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao#pragma pack() 1293705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao 1303705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao/** 1313705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao System Firmware Image Descriptor is below: 1323705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao +----------------------+ 1333705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao | System Firmware (FV) | 1343705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao |+--------------------+| 1353705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao || FFS (Freeform) || <== gEdkiiSystemFirmwareImageDescriptorFileGuid 1363705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao ||+------------------+|| 1373705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao ||| SECTION (RAW) ||| 1383705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao ||| System Firmware ||| 1393705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao ||| Image Descriptor ||| 1403705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao ||+------------------+|| 1413705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao |+--------------------+| 1423705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao | | 1433705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao | | 1443705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao +----------------------+ 1453705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao**/ 1463705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao 1473705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yaoextern EFI_GUID gEdkiiSystemFirmwareImageDescriptorFileGuid; 1483705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yaoextern EFI_GUID gEdkiiSystemFmpCapsuleConfigFileGuid; 1493705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yaoextern EFI_GUID gEdkiiSystemFmpCapsuleDriverFvFileGuid; 1503705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao 1513705cf4281e56a4ac53e84e228d100cbd4abaaefJiewen Yao#endif 152