| /** @file | |
| Guid & data structure used for Delivering Capsules Containing Updates to | |
| EDKII System Firmware Management Protocol | |
| Copyright (c) 2016, Intel Corporation. All rights reserved.<BR> | |
| SPDX-License-Identifier: BSD-2-Clause-Patent | |
| **/ | |
| #ifndef __EDKII_SYSTEM_FMP_CAPSULE_GUID_H__ | |
| #define __EDKII_SYSTEM_FMP_CAPSULE_GUID_H__ | |
| /** | |
| 1. Capsule Layout is below: | |
| +------------------------------------------+ | |
| | Capsule Header (OPTIONAL, WFU) | <== ESRT.FwClass (Optional) | |
| +------------------------------------------+ | |
| | FMP Capsule Header | <== EFI_FIRMWARE_MANAGEMENT_CAPSULE_ID_GUID | |
| +------------------------------------------+ | |
| | FIRMWARE_MANAGEMENT_CAPSULE_IMAGE_HEADER | <== PcdSystemFmpCapsuleImageTypeIdGuid | |
| +------------------------------------------+ | |
| | EFI_FIRMWARE_IMAGE_AUTHENTICATION | | |
| +------------------------------------------+ | |
| | FMP Payload | | |
| +------------------------------------------+ | |
| 2. System FMP Payload is below: | |
| +------------------------------------------+ | |
| | EFI_FIRMWARE_VOLUME | | |
| | +------------------------------------+ | | |
| | | FFS (Configure File) | | <== gEdkiiSystemFmpCapsuleConfigFileGuid | |
| | +------------------------------------+ | | |
| | | FFS (Driver FV) | | <== gEdkiiSystemFmpCapsuleDriverFvFileGuid | |
| | +------------------------------------+ | | |
| | | FFS (System Firmware Image) | | <== PcdEdkiiSystemFirmwareFileGuid | |
| | | +------------------------------+ | | | |
| | | | FV Recovery | | | | |
| | | |------------------------------| | | | |
| | | | FV Main | | | | |
| | | +------------------------------+ | | | |
| | +------------------------------------+ | | |
| +------------------------------------------+ | |
| NOTE: There might be multiple FFS (System Firmware Image) exist in the System FMP Capsule. | |
| Only the one, whose FFS GUID matches PcdEdkiiSystemFirmwareFileGuid, takes effect. | |
| The other FFS is ignored. | |
| 3. The format of the recovery configuration is below: | |
| [Head] | |
| NumOfRecovery = <Num> # Decimal | |
| Recovery0 = <Name1> # String | |
| Recovery1 = <Name2> # String | |
| Recovery<Num-1> = <NameX> # String | |
| [Name?] | |
| Length = <Length> # Fv Length (HEX) | |
| ImageOffset = <ImageOffset> # Fv offset of this SystemFirmware image (HEX) | |
| FileGuid = XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX # PcdEdkiiSystemFirmwareFileGuid | |
| NOTE: The [Name?] entry may have different FileGuid. | |
| Only the one, whose FileGuid matches PcdEdkiiSystemFirmwareFileGuid, takes effect. | |
| The other entry is ignored. | |
| 4. The format of the capsule update configuration is below: | |
| [Head] | |
| NumOfUpdate = <Num> # Decimal | |
| Update0 = <Name1> # String | |
| Update1 = <Name2> # String | |
| Update<Num-1> = <NameX> # String | |
| [Name?] | |
| FirmwareType = 0 # 0 - SystemFirmware, 1 - NvRam | |
| AddressType = 0 # 0 - relative address, 1 - absolute address. | |
| BaseAddress = <BaseAddress> # Base address offset on flash (HEX) | |
| Length = <Length> # Image Length (HEX) | |
| ImageOffset = <ImageOffset> # Image offset of this SystemFirmware image (HEX) | |
| FileGuid = XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX # PcdEdkiiSystemFirmwareFileGuid | |
| NOTE: The [Name?] entry may have different FileGuid. | |
| Only the one, whose FileGuid matches PcdEdkiiSystemFirmwareFileGuid, takes effect. | |
| The other entry is ignored. | |
| **/ | |
| #define EDKII_SYSTEM_FIRMWARE_IMAGE_DESCRIPTOR_SIGNATURE SIGNATURE_32('S', 'F', 'I', 'D') | |
| #pragma pack(1) | |
| typedef struct { | |
| UINT32 Signature; | |
| UINT32 HeaderLength; // Length of EDKII_SYSTEM_FIRMWARE_IMAGE_DESCRIPTOR, excluding NameString | |
| UINT32 Length; // Length of the data structure, including NameString | |
| // Below structure is similar as UEFI EFI_FIRMWARE_MANAGEMENT_PROTOCOL.GetPackageInfo() | |
| UINT32 PackageVersion; | |
| UINT32 PackageVersionNameStringOffset; // Offset from head, CHAR16 string including NULL terminate char | |
| // Below structure is similar as UEFI EFI_FIRMWARE_IMAGE_DESCRIPTOR | |
| UINT8 ImageIndex; | |
| UINT8 Reserved[3]; | |
| EFI_GUID ImageTypeId; | |
| UINT64 ImageId; | |
| UINT32 ImageIdNameStringOffset; // Offset from head, CHAR16 string including NULL terminate char | |
| UINT32 Version; | |
| UINT32 VersionNameStringOffset; // Offset from head, CHAR16 string including NULL terminate char | |
| UINT8 Reserved2[4]; | |
| UINT64 Size; | |
| UINT64 AttributesSupported; | |
| UINT64 AttributesSetting; | |
| UINT64 Compatibilities; | |
| UINT32 LowestSupportedImageVersion; | |
| UINT32 LastAttemptVersion; | |
| UINT32 LastAttemptStatus; | |
| UINT8 Reserved3[4]; | |
| UINT64 HardwareInstance; | |
| // real string data | |
| // CHAR16 ImageIdNameStr[]; // CHAR16 string including NULL terminate char | |
| // CHAR16 VersionNameStr[]; // CHAR16 string including NULL terminate char | |
| // CHAR16 PackageVersionNameStr[]; // CHAR16 string including NULL terminate char | |
| } EDKII_SYSTEM_FIRMWARE_IMAGE_DESCRIPTOR; | |
| #pragma pack() | |
| /** | |
| System Firmware Image Descriptor is below: | |
| +----------------------+ | |
| | System Firmware (FV) | | |
| |+--------------------+| | |
| || FFS (Freeform) || <== gEdkiiSystemFirmwareImageDescriptorFileGuid | |
| ||+------------------+|| | |
| ||| SECTION (RAW) ||| | |
| ||| System Firmware ||| | |
| ||| Image Descriptor ||| | |
| ||+------------------+|| | |
| |+--------------------+| | |
| | | | |
| | | | |
| +----------------------+ | |
| **/ | |
| extern EFI_GUID gEdkiiSystemFirmwareImageDescriptorFileGuid; | |
| extern EFI_GUID gEdkiiSystemFmpCapsuleConfigFileGuid; | |
| extern EFI_GUID gEdkiiSystemFmpCapsuleDriverFvFileGuid; | |
| #endif |