/** @file Guid & data structure used for Delivering Capsules Containing Updates to EDKII System Firmware Management Protocol Copyright (c) 2016, Intel Corporation. All rights reserved.
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 = # Decimal Recovery0 = # String Recovery1 = # String Recovery = # String [Name?] Length = # Fv Length (HEX) 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 = # Decimal Update0 = # String Update1 = # String Update = # String [Name?] FirmwareType = 0 # 0 - SystemFirmware, 1 - NvRam AddressType = 0 # 0 - relative address, 1 - absolute address. BaseAddress = # Base address offset on flash (HEX) Length = # Image Length (HEX) 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