diff --git a/SignedCapsulePkg/Include/Guid/EdkiiSystemFmpCapsule.h b/SignedCapsulePkg/Include/Guid/EdkiiSystemFmpCapsule.h
deleted file mode 100644
index c681119068..0000000000
--- a/SignedCapsulePkg/Include/Guid/EdkiiSystemFmpCapsule.h
+++ /dev/null
@@ -1,143 +0,0 @@
-/** @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
-
-**/
-
-#pragma once
-
-/**
- @verbatim
- 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.
- @endverbatim
-**/
-
-#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()
-
-/**
- @verbatim
- System Firmware Image Descriptor is below:
- +----------------------+
- | System Firmware (FV) |
- |+--------------------+|
- || FFS (Freeform) || <== gEdkiiSystemFirmwareImageDescriptorFileGuid
- ||+------------------+||
- ||| SECTION (RAW) |||
- ||| System Firmware |||
- ||| Image Descriptor |||
- ||+------------------+||
- |+--------------------+|
- | |
- | |
- +----------------------+
- @endverbatim
-**/
-
-extern EFI_GUID gEdkiiSystemFirmwareImageDescriptorFileGuid;
-extern EFI_GUID gEdkiiSystemFmpCapsuleConfigFileGuid;
-extern EFI_GUID gEdkiiSystemFmpCapsuleDriverFvFileGuid;
diff --git a/SignedCapsulePkg/Include/Library/EdkiiSystemCapsuleLib.h b/SignedCapsulePkg/Include/Library/EdkiiSystemCapsuleLib.h
deleted file mode 100644
index 8a32a0de3e..0000000000
--- a/SignedCapsulePkg/Include/Library/EdkiiSystemCapsuleLib.h
+++ /dev/null
@@ -1,143 +0,0 @@
-/** @file
- EDKII System Capsule library.
-
-Copyright (c) 2016, Intel Corporation. All rights reserved.
-SPDX-License-Identifier: BSD-2-Clause-Patent
-
-**/
-
-#pragma once
-
-#include
-
-/**
- Extract ImageFmpInfo from system firmware.
-
- @param[in] SystemFirmwareImage The System Firmware image.
- @param[in] SystemFirmwareImageSize The size of the System Firmware image in bytes.
- @param[out] ImageFmpInfo The ImageFmpInfo.
- @param[out] ImageFmpInfoSize The size of the ImageFmpInfo in bytes.
-
- @retval TRUE The ImageFmpInfo is extracted.
- @retval FALSE The ImageFmpInfo is not extracted.
-**/
-BOOLEAN
-EFIAPI
-ExtractSystemFirmwareImageFmpInfo (
- IN VOID *SystemFirmwareImage,
- IN UINTN SystemFirmwareImageSize,
- OUT EDKII_SYSTEM_FIRMWARE_IMAGE_DESCRIPTOR **ImageFmpInfo,
- OUT UINTN *ImageFmpInfoSize
- );
-
-/**
- Extract the driver FV from an authenticated image.
-
- @param[in] AuthenticatedImage The authenticated capsule image.
- @param[in] AuthenticatedImageSize The size of the authenticated capsule image in bytes.
- @param[out] DriverFvImage The driver FV image.
- @param[out] DriverFvImageSize The size of the driver FV image in bytes.
-
- @retval TRUE The driver Fv is extracted.
- @retval FALSE The driver Fv is not extracted.
-**/
-BOOLEAN
-EFIAPI
-ExtractDriverFvImage (
- IN VOID *AuthenticatedImage,
- IN UINTN AuthenticatedImageSize,
- OUT VOID **DriverFvImage,
- OUT UINTN *DriverFvImageSize
- );
-
-/**
- Extract the config image from an authenticated image.
-
- @param[in] AuthenticatedImage The authenticated capsule image.
- @param[in] AuthenticatedImageSize The size of the authenticated capsule image in bytes.
- @param[out] ConfigImage The config image.
- @param[out] ConfigImageSize The size of the config image in bytes.
-
- @retval TRUE The config image is extracted.
- @retval FALSE The config image is not extracted.
-**/
-BOOLEAN
-EFIAPI
-ExtractConfigImage (
- IN VOID *AuthenticatedImage,
- IN UINTN AuthenticatedImageSize,
- OUT VOID **ConfigImage,
- OUT UINTN *ConfigImageSize
- );
-
-/**
- Extract the System Firmware image from an authenticated image.
-
- @param[in] AuthenticatedImage The authenticated capsule image.
- @param[in] AuthenticatedImageSize The size of the authenticated capsule image in bytes.
- @param[out] SystemFirmwareImage The System Firmware image.
- @param[out] SystemFirmwareImageSize The size of the System Firmware image in bytes.
-
- @retval TRUE The System Firmware image is extracted.
- @retval FALSE The System Firmware image is not extracted.
-**/
-BOOLEAN
-EFIAPI
-ExtractSystemFirmwareImage (
- IN VOID *AuthenticatedImage,
- IN UINTN AuthenticatedImageSize,
- OUT VOID **SystemFirmwareImage,
- OUT UINTN *SystemFirmwareImageSize
- );
-
-/**
- Extract the authenticated image from an FMP capsule image.
-
- @param[in] Image The FMP capsule image, including EFI_FIRMWARE_IMAGE_AUTHENTICATION.
- @param[in] ImageSize The size of FMP capsule image in bytes.
- @param[out] LastAttemptStatus The last attempt status, which will be recorded in ESRT and FMP EFI_FIRMWARE_IMAGE_DESCRIPTOR.
- @param[out] AuthenticatedImage The authenticated capsule image, excluding EFI_FIRMWARE_IMAGE_AUTHENTICATION.
- @param[out] AuthenticatedImageSize The size of the authenticated capsule image in bytes.
-
- @retval TRUE The authenticated image is extracted.
- @retval FALSE The authenticated image is not extracted.
-**/
-BOOLEAN
-EFIAPI
-ExtractAuthenticatedImage (
- IN VOID *Image,
- IN UINTN ImageSize,
- OUT UINT32 *LastAttemptStatus,
- OUT VOID **AuthenticatedImage,
- OUT UINTN *AuthenticatedImageSize
- );
-
-/**
- Authenticated system firmware FMP capsule image.
-
- Caution: This function may receive untrusted input.
-
- @param[in] Image The FMP capsule image, including EFI_FIRMWARE_IMAGE_AUTHENTICATION.
- @param[in] ImageSize The size of FMP capsule image in bytes.
- @param[in] ForceVersionMatch TRUE: The version of capsule must be as same as the version of current image.
- FALSE: The version of capsule must be as same as greater than the lowest
- supported version of current image.
- @param[out] LastAttemptVersion The last attempt version, which will be recorded in ESRT and FMP EFI_FIRMWARE_IMAGE_DESCRIPTOR.
- @param[out] LastAttemptStatus The last attempt status, which will be recorded in ESRT and FMP EFI_FIRMWARE_IMAGE_DESCRIPTOR.
- @param[out] AuthenticatedImage The authenticated capsule image, excluding EFI_FIRMWARE_IMAGE_AUTHENTICATION.
- @param[out] AuthenticatedImageSize The size of the authenticated capsule image in bytes.
-
- @retval TRUE Authentication passes and the authenticated image is extracted.
- @retval FALSE Authentication fails and the authenticated image is not extracted.
-**/
-EFI_STATUS
-EFIAPI
-CapsuleAuthenticateSystemFirmware (
- IN VOID *Image,
- IN UINTN ImageSize,
- IN BOOLEAN ForceVersionMatch,
- OUT UINT32 *LastAttemptVersion,
- OUT UINT32 *LastAttemptStatus,
- OUT VOID **AuthenticatedImage,
- OUT UINTN *AuthenticatedImageSize
- );
diff --git a/SignedCapsulePkg/Include/Library/IniParsingLib.h b/SignedCapsulePkg/Include/Library/IniParsingLib.h
deleted file mode 100644
index b198d2643b..0000000000
--- a/SignedCapsulePkg/Include/Library/IniParsingLib.h
+++ /dev/null
@@ -1,155 +0,0 @@
-/** @file
- INI configuration parsing library.
-
- The INI file format is:
- ================
- [SectionName]
- EntryName=EntryValue
- ================
-
- Where:
- 1) SectionName is an ASCII string. The valid format is [A-Za-z0-9_]+
- 2) EntryName is an ASCII string. The valid format is [A-Za-z0-9_]+
- 3) EntryValue can be:
- 3.1) an ASCII String. The valid format is [A-Za-z0-9_]+
- 3.2) a GUID. The valid format is xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx, where x is [A-Fa-f0-9]
- 3.3) a decimal value. The valid format is [0-9]+
- 3.4) a hexadecimal value. The valid format is 0x[A-Fa-f0-9]+
- 4) '#' or ';' can be used as comment at anywhere.
- 5) TAB(0x20) or SPACE(0x9) can be used as separator.
- 6) LF(\n, 0xA) or CR(\r, 0xD) can be used as line break.
-
-Copyright (c) 2016, Intel Corporation. All rights reserved.
-SPDX-License-Identifier: BSD-2-Clause-Patent
-
-**/
-
-#pragma once
-
-/**
- Open an INI config file and return a context.
-
- @param[in] DataBuffer Config raw file buffer.
- @param[in] BufferSize Size of raw buffer.
-
- @return Config data buffer is opened and context is returned.
- @retval NULL No enough memory is allocated.
- @retval NULL Config data buffer is invalid.
-**/
-VOID *
-EFIAPI
-OpenIniFile (
- IN UINT8 *DataBuffer,
- IN UINTN BufferSize
- );
-
-/**
- Get section entry string value.
-
- @param[in] Context INI Config file context.
- @param[in] SectionName Section name.
- @param[in] EntryName Section entry name.
- @param[out] EntryValue Point to the got entry string value.
-
- @retval EFI_SUCCESS Section entry string value is got.
- @retval EFI_NOT_FOUND Section is not found.
-**/
-EFI_STATUS
-EFIAPI
-GetStringFromDataFile (
- IN VOID *Context,
- IN CHAR8 *SectionName,
- IN CHAR8 *EntryName,
- OUT CHAR8 **EntryValue
- );
-
-/**
- Get section entry GUID value.
-
- @param[in] Context INI Config file context.
- @param[in] SectionName Section name.
- @param[in] EntryName Section entry name.
- @param[out] Guid Point to the got GUID value.
-
- @retval EFI_SUCCESS Section entry GUID value is got.
- @retval EFI_NOT_FOUND Section is not found.
-**/
-EFI_STATUS
-EFIAPI
-GetGuidFromDataFile (
- IN VOID *Context,
- IN CHAR8 *SectionName,
- IN CHAR8 *EntryName,
- OUT EFI_GUID *Guid
- );
-
-/**
- Get section entry decimal UINTN value.
-
- @param[in] Context INI Config file context.
- @param[in] SectionName Section name.
- @param[in] EntryName Section entry name.
- @param[out] Data Point to the got decimal UINTN value.
-
- @retval EFI_SUCCESS Section entry decimal UINTN value is got.
- @retval EFI_NOT_FOUND Section is not found.
-**/
-EFI_STATUS
-EFIAPI
-GetDecimalUintnFromDataFile (
- IN VOID *Context,
- IN CHAR8 *SectionName,
- IN CHAR8 *EntryName,
- OUT UINTN *Data
- );
-
-/**
- Get section entry hexadecimal UINTN value.
-
- @param[in] Context INI Config file context.
- @param[in] SectionName Section name.
- @param[in] EntryName Section entry name.
- @param[out] Data Point to the got hexadecimal UINTN value.
-
- @retval EFI_SUCCESS Section entry hexadecimal UINTN value is got.
- @retval EFI_NOT_FOUND Section is not found.
-**/
-EFI_STATUS
-EFIAPI
-GetHexUintnFromDataFile (
- IN VOID *Context,
- IN CHAR8 *SectionName,
- IN CHAR8 *EntryName,
- OUT UINTN *Data
- );
-
-/**
- Get section entry hexadecimal UINT64 value.
-
- @param[in] Context INI Config file context.
- @param[in] SectionName Section name.
- @param[in] EntryName Section entry name.
- @param[out] Data Point to the got hexadecimal UINT64 value.
-
- @retval EFI_SUCCESS Section entry hexadecimal UINT64 value is got.
- @retval EFI_NOT_FOUND Section is not found.
-**/
-EFI_STATUS
-EFIAPI
-GetHexUint64FromDataFile (
- IN VOID *Context,
- IN CHAR8 *SectionName,
- IN CHAR8 *EntryName,
- OUT UINT64 *Data
- );
-
-/**
- Close an INI config file and free the context.
-
- @param[in] Context INI Config file context.
-**/
-VOID
-EFIAPI
-CloseIniFile (
- IN VOID *Context
- );
diff --git a/SignedCapsulePkg/Include/Library/PlatformFlashAccessLib.h b/SignedCapsulePkg/Include/Library/PlatformFlashAccessLib.h
deleted file mode 100644
index 434287e937..0000000000
--- a/SignedCapsulePkg/Include/Library/PlatformFlashAccessLib.h
+++ /dev/null
@@ -1,92 +0,0 @@
-/** @file
- Platform flash device access library.
-
- Copyright (c) 2016 - 2018, Intel Corporation. All rights reserved.
- SPDX-License-Identifier: BSD-2-Clause-Patent
-
-**/
-
-#pragma once
-
-#include
-
-typedef enum {
- FlashAddressTypeRelativeAddress,
- FlashAddressTypeAbsoluteAddress,
-} FLASH_ADDRESS_TYPE;
-
-//
-// Type 0 ~ 0x7FFFFFFF is defined in this library.
-// Type 0x80000000 ~ 0xFFFFFFFF is reserved for OEM.
-//
-typedef enum {
- PlatformFirmwareTypeSystemFirmware,
- PlatformFirmwareTypeNvRam,
-} PLATFORM_FIRMWARE_TYPE;
-
-/**
- Perform flash write operation.
-
- @param[in] FirmwareType The type of firmware.
- @param[in] FlashAddress The address of flash device to be accessed.
- @param[in] FlashAddressType The type of flash device address.
- @param[in] Buffer The pointer to the data buffer.
- @param[in] Length The length of data buffer in bytes.
-
- @retval EFI_SUCCESS The operation returns successfully.
- @retval EFI_WRITE_PROTECTED The flash device is read only.
- @retval EFI_UNSUPPORTED The flash device access is unsupported.
- @retval EFI_INVALID_PARAMETER The input parameter is not valid.
-**/
-EFI_STATUS
-EFIAPI
-PerformFlashWrite (
- IN PLATFORM_FIRMWARE_TYPE FirmwareType,
- IN EFI_PHYSICAL_ADDRESS FlashAddress,
- IN FLASH_ADDRESS_TYPE FlashAddressType,
- IN VOID *Buffer,
- IN UINTN Length
- );
-
-/**
- Perform flash write operation with progress indicator. The start and end
- completion percentage values are passed into this function. If the requested
- flash write operation is broken up, then completion percentage between the
- start and end values may be passed to the provided Progress function. The
- caller of this function is required to call the Progress function for the
- start and end completion percentage values. This allows the Progress,
- StartPercentage, and EndPercentage parameters to be ignored if the requested
- flash write operation can not be broken up
-
- @param[in] FirmwareType The type of firmware.
- @param[in] FlashAddress The address of flash device to be accessed.
- @param[in] FlashAddressType The type of flash device address.
- @param[in] Buffer The pointer to the data buffer.
- @param[in] Length The length of data buffer in bytes.
- @param[in] Progress A function used report the progress of the
- firmware update. This is an optional parameter
- that may be NULL.
- @param[in] StartPercentage The start completion percentage value that may
- be used to report progress during the flash
- write operation.
- @param[in] EndPercentage The end completion percentage value that may
- be used to report progress during the flash
- write operation.
-
- @retval EFI_SUCCESS The operation returns successfully.
- @retval EFI_WRITE_PROTECTED The flash device is read only.
- @retval EFI_UNSUPPORTED The flash device access is unsupported.
- @retval EFI_INVALID_PARAMETER The input parameter is not valid.
-**/
-EFI_STATUS
-EFIAPI
-PerformFlashWriteWithProgress (
- IN PLATFORM_FIRMWARE_TYPE FirmwareType,
- IN EFI_PHYSICAL_ADDRESS FlashAddress,
- IN FLASH_ADDRESS_TYPE FlashAddressType,
- IN VOID *Buffer,
- IN UINTN Length,
- IN EFI_FIRMWARE_MANAGEMENT_UPDATE_IMAGE_PROGRESS Progress OPTIONAL,
- IN UINTN StartPercentage,
- IN UINTN EndPercentage
- );
diff --git a/SignedCapsulePkg/Library/EdkiiSystemCapsuleLib/EdkiiSystemCapsuleLib.c b/SignedCapsulePkg/Library/EdkiiSystemCapsuleLib/EdkiiSystemCapsuleLib.c
deleted file mode 100644
index d65d988c75..0000000000
--- a/SignedCapsulePkg/Library/EdkiiSystemCapsuleLib/EdkiiSystemCapsuleLib.c
+++ /dev/null
@@ -1,773 +0,0 @@
-/** @file
- EDKII System Capsule library.
-
- EDKII System Capsule library instance.
-
- CapsuleAuthenticateSystemFirmware(), ExtractAuthenticatedImage() will receive
- untrusted input and do basic validation.
-
- Copyright (c) 2016 - 2018, Intel Corporation. All rights reserved.
- SPDX-License-Identifier: BSD-2-Clause-Patent
-
-**/
-
-#include
-
-#include
-#include
-#include
-#include
-#include
-#include
-
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-
-#include
-
-EDKII_SYSTEM_FIRMWARE_IMAGE_DESCRIPTOR *mImageFmpInfo;
-UINTN mImageFmpInfoSize;
-EFI_GUID mEdkiiSystemFirmwareFileGuid;
-
-/**
- Check if a block of buffer is erased.
-
- @param[in] ErasePolarity Erase polarity attribute of the firmware volume
- @param[in] InBuffer The buffer to be checked
- @param[in] BufferSize Size of the buffer in bytes
-
- @retval TRUE The block of buffer is erased
- @retval FALSE The block of buffer is not erased
-**/
-BOOLEAN
-IsBufferErased (
- IN UINT8 ErasePolarity,
- IN VOID *InBuffer,
- IN UINTN BufferSize
- )
-{
- UINTN Count;
- UINT8 EraseByte;
- UINT8 *Buffer;
-
- if (ErasePolarity == 1) {
- EraseByte = 0xFF;
- } else {
- EraseByte = 0;
- }
-
- Buffer = InBuffer;
- for (Count = 0; Count < BufferSize; Count++) {
- if (Buffer[Count] != EraseByte) {
- return FALSE;
- }
- }
-
- return TRUE;
-}
-
-/**
- Get Section buffer pointer by SectionType and SectionInstance.
-
- @param[in] SectionBuffer The buffer of section
- @param[in] SectionBufferSize The size of SectionBuffer in bytes
- @param[in] SectionType The SectionType of Section to be found
- @param[in] SectionInstance The Instance of Section to be found
- @param[out] OutSectionBuffer The section found, including SECTION_HEADER
- @param[out] OutSectionSize The size of section found, including SECTION_HEADER
-
- @retval TRUE The FFS buffer is found.
- @retval FALSE The FFS buffer is not found.
-**/
-BOOLEAN
-GetSectionByType (
- IN VOID *SectionBuffer,
- IN UINT32 SectionBufferSize,
- IN EFI_SECTION_TYPE SectionType,
- IN UINTN SectionInstance,
- OUT VOID **OutSectionBuffer,
- OUT UINTN *OutSectionSize
- )
-{
- EFI_COMMON_SECTION_HEADER *SectionHeader;
- UINTN SectionSize;
- UINTN Instance;
-
- DEBUG ((DEBUG_INFO, "GetSectionByType - Buffer: 0x%08x - 0x%08x\n", SectionBuffer, SectionBufferSize));
-
- //
- // Find Section
- //
- SectionHeader = SectionBuffer;
-
- Instance = 0;
- while ((UINTN)SectionHeader < (UINTN)SectionBuffer + SectionBufferSize) {
- DEBUG ((DEBUG_INFO, "GetSectionByType - Section: 0x%08x\n", SectionHeader));
- if (IS_SECTION2 (SectionHeader)) {
- SectionSize = SECTION2_SIZE (SectionHeader);
- } else {
- SectionSize = SECTION_SIZE (SectionHeader);
- }
-
- if (SectionHeader->Type == SectionType) {
- if (Instance == SectionInstance) {
- *OutSectionBuffer = (UINT8 *)SectionHeader;
- *OutSectionSize = SectionSize;
- DEBUG ((DEBUG_INFO, "GetSectionByType - 0x%x - 0x%x\n", *OutSectionBuffer, *OutSectionSize));
- return TRUE;
- } else {
- DEBUG ((DEBUG_INFO, "GetSectionByType - find section instance %x\n", Instance));
- Instance++;
- }
- } else {
- //
- // Skip other section type
- //
- DEBUG ((DEBUG_INFO, "GetSectionByType - other section type 0x%x\n", SectionHeader->Type));
- }
-
- //
- // Next Section
- //
- SectionHeader = (EFI_COMMON_SECTION_HEADER *)((UINTN)SectionHeader + ALIGN_VALUE (SectionSize, 4));
- }
-
- return FALSE;
-}
-
-/**
- Get FFS buffer pointer by FileName GUID and FileType.
-
- @param[in] FdStart The System Firmware FD image
- @param[in] FdSize The size of System Firmware FD image
- @param[in] FileName The FileName GUID of FFS to be found
- @param[in] Type The FileType of FFS to be found
- @param[out] OutFfsBuffer The FFS buffer found, including FFS_FILE_HEADER
- @param[out] OutFfsBufferSize The size of FFS buffer found, including FFS_FILE_HEADER
-
- @retval TRUE The FFS buffer is found.
- @retval FALSE The FFS buffer is not found.
-**/
-BOOLEAN
-GetFfsByName (
- IN VOID *FdStart,
- IN UINTN FdSize,
- IN EFI_GUID *FileName,
- IN EFI_FV_FILETYPE Type,
- OUT VOID **OutFfsBuffer,
- OUT UINTN *OutFfsBufferSize
- )
-{
- UINTN FvSize;
- EFI_FIRMWARE_VOLUME_HEADER *FvHeader;
- EFI_FIRMWARE_VOLUME_EXT_HEADER *FvExtHeader;
- EFI_FFS_FILE_HEADER *FfsHeader;
- UINT32 FfsSize;
- UINTN TestLength;
- BOOLEAN FvFound;
-
- DEBUG ((DEBUG_INFO, "GetFfsByName - FV: 0x%08x - 0x%08x\n", (UINTN)FdStart, (UINTN)FdSize));
-
- FvFound = FALSE;
- FvHeader = (EFI_FIRMWARE_VOLUME_HEADER *)FdStart;
- while ((UINTN)FvHeader < (UINTN)FdStart + FdSize - 1) {
- FvSize = (UINTN)FdStart + FdSize - (UINTN)FvHeader;
-
- if (FvHeader->Signature != EFI_FVH_SIGNATURE) {
- FvHeader = (EFI_FIRMWARE_VOLUME_HEADER *)((UINTN)FvHeader + SIZE_4KB);
- continue;
- }
-
- DEBUG ((DEBUG_INFO, "checking FV....0x%08x - 0x%x\n", FvHeader, FvHeader->FvLength));
- FvFound = TRUE;
- if (FvHeader->FvLength > FvSize) {
- DEBUG ((DEBUG_ERROR, "GetFfsByName - FvSize: 0x%08x, MaxSize - 0x%08x\n", (UINTN)FvHeader->FvLength, (UINTN)FvSize));
- return FALSE;
- }
-
- FvSize = (UINTN)FvHeader->FvLength;
-
- //
- // Find FFS
- //
- if (FvHeader->ExtHeaderOffset != 0) {
- FvExtHeader = (EFI_FIRMWARE_VOLUME_EXT_HEADER *)((UINT8 *)FvHeader + FvHeader->ExtHeaderOffset);
- FfsHeader = (EFI_FFS_FILE_HEADER *)((UINT8 *)FvExtHeader + FvExtHeader->ExtHeaderSize);
- } else {
- FfsHeader = (EFI_FFS_FILE_HEADER *)((UINT8 *)FvHeader + FvHeader->HeaderLength);
- }
-
- FfsHeader = (EFI_FFS_FILE_HEADER *)((UINTN)FvHeader + ALIGN_VALUE ((UINTN)FfsHeader - (UINTN)FvHeader, 8));
-
- while ((UINTN)FfsHeader < (UINTN)FvHeader + FvSize - 1) {
- DEBUG ((DEBUG_INFO, "GetFfsByName - FFS: 0x%08x\n", FfsHeader));
- TestLength = (UINTN)((UINTN)FvHeader + FvSize - (UINTN)FfsHeader);
- if (TestLength > sizeof (EFI_FFS_FILE_HEADER)) {
- TestLength = sizeof (EFI_FFS_FILE_HEADER);
- }
-
- if (IsBufferErased (1, FfsHeader, TestLength)) {
- break;
- }
-
- if (IS_FFS_FILE2 (FfsHeader)) {
- FfsSize = FFS_FILE2_SIZE (FfsHeader);
- } else {
- FfsSize = FFS_FILE_SIZE (FfsHeader);
- }
-
- if (CompareGuid (FileName, &FfsHeader->Name) &&
- ((Type == EFI_FV_FILETYPE_ALL) || (FfsHeader->Type == Type)))
- {
- *OutFfsBuffer = FfsHeader;
- *OutFfsBufferSize = FfsSize;
- return TRUE;
- } else {
- //
- // Any other type is not allowed
- //
- DEBUG ((DEBUG_INFO, "GetFfsByName - other FFS type 0x%x, name %g\n", FfsHeader->Type, &FfsHeader->Name));
- }
-
- //
- // Next File
- //
- FfsHeader = (EFI_FFS_FILE_HEADER *)((UINTN)FfsHeader + ALIGN_VALUE (FfsSize, 8));
- }
-
- //
- // Next FV
- //
- FvHeader = (VOID *)(UINTN)((UINTN)FvHeader + FvHeader->FvLength);
- }
-
- if (!FvFound) {
- DEBUG ((DEBUG_ERROR, "GetFfsByName - NO FV Found\n"));
- }
-
- return FALSE;
-}
-
-/**
- Extract the driver FV from an authenticated image.
-
- @param[in] AuthenticatedImage The authenticated capsule image.
- @param[in] AuthenticatedImageSize The size of the authenticated capsule image in bytes.
- @param[out] DriverFvImage The driver FV image.
- @param[out] DriverFvImageSize The size of the driver FV image in bytes.
-
- @retval TRUE The driver Fv is extracted.
- @retval FALSE The driver Fv is not extracted.
-**/
-BOOLEAN
-EFIAPI
-ExtractDriverFvImage (
- IN VOID *AuthenticatedImage,
- IN UINTN AuthenticatedImageSize,
- OUT VOID **DriverFvImage,
- OUT UINTN *DriverFvImageSize
- )
-{
- BOOLEAN Result;
- UINT32 FileHeaderSize;
-
- *DriverFvImage = NULL;
- *DriverFvImageSize = 0;
-
- Result = GetFfsByName (AuthenticatedImage, AuthenticatedImageSize, &gEdkiiSystemFmpCapsuleDriverFvFileGuid, EFI_FV_FILETYPE_RAW, DriverFvImage, DriverFvImageSize);
- if (!Result) {
- return FALSE;
- }
-
- if (IS_FFS_FILE2 (*DriverFvImage)) {
- FileHeaderSize = sizeof (EFI_FFS_FILE_HEADER2);
- } else {
- FileHeaderSize = sizeof (EFI_FFS_FILE_HEADER);
- }
-
- *DriverFvImage = (UINT8 *)*DriverFvImage + FileHeaderSize;
- *DriverFvImageSize = *DriverFvImageSize - FileHeaderSize;
-
- return Result;
-}
-
-/**
- Extract the config image from an authenticated image.
-
- @param[in] AuthenticatedImage The authenticated capsule image.
- @param[in] AuthenticatedImageSize The size of the authenticated capsule image in bytes.
- @param[out] ConfigImage The config image.
- @param[out] ConfigImageSize The size of the config image in bytes.
-
- @retval TRUE The config image is extracted.
- @retval FALSE The config image is not extracted.
-**/
-BOOLEAN
-EFIAPI
-ExtractConfigImage (
- IN VOID *AuthenticatedImage,
- IN UINTN AuthenticatedImageSize,
- OUT VOID **ConfigImage,
- OUT UINTN *ConfigImageSize
- )
-{
- BOOLEAN Result;
- UINT32 FileHeaderSize;
-
- *ConfigImage = NULL;
- *ConfigImageSize = 0;
-
- Result = GetFfsByName (AuthenticatedImage, AuthenticatedImageSize, &gEdkiiSystemFmpCapsuleConfigFileGuid, EFI_FV_FILETYPE_RAW, ConfigImage, ConfigImageSize);
- if (!Result) {
- return FALSE;
- }
-
- if (IS_FFS_FILE2 (*ConfigImage)) {
- FileHeaderSize = sizeof (EFI_FFS_FILE_HEADER2);
- } else {
- FileHeaderSize = sizeof (EFI_FFS_FILE_HEADER);
- }
-
- *ConfigImage = (UINT8 *)*ConfigImage + FileHeaderSize;
- *ConfigImageSize = *ConfigImageSize - FileHeaderSize;
-
- return Result;
-}
-
-/**
- Extract the authenticated image from an FMP capsule image.
-
- Caution: This function may receive untrusted input.
-
- @param[in] Image The FMP capsule image, including EFI_FIRMWARE_IMAGE_AUTHENTICATION.
- @param[in] ImageSize The size of FMP capsule image in bytes.
- @param[out] LastAttemptStatus The last attempt status, which will be recorded in ESRT and FMP EFI_FIRMWARE_IMAGE_DESCRIPTOR.
- @param[out] AuthenticatedImage The authenticated capsule image, excluding EFI_FIRMWARE_IMAGE_AUTHENTICATION.
- @param[out] AuthenticatedImageSize The size of the authenticated capsule image in bytes.
-
- @retval TRUE The authenticated image is extracted.
- @retval FALSE The authenticated image is not extracted.
-**/
-BOOLEAN
-EFIAPI
-ExtractAuthenticatedImage (
- IN VOID *Image,
- IN UINTN ImageSize,
- OUT UINT32 *LastAttemptStatus,
- OUT VOID **AuthenticatedImage,
- OUT UINTN *AuthenticatedImageSize
- )
-{
- EFI_FIRMWARE_IMAGE_AUTHENTICATION *ImageAuth;
- EFI_STATUS Status;
- GUID *CertType;
- VOID *PublicKeyData;
- UINTN PublicKeyDataLength;
-
- DEBUG ((DEBUG_INFO, "ExtractAuthenticatedImage - Image: 0x%08x - 0x%08x\n", (UINTN)Image, (UINTN)ImageSize));
-
- *LastAttemptStatus = LAST_ATTEMPT_STATUS_ERROR_INVALID_FORMAT;
- if ((Image == NULL) || (ImageSize == 0)) {
- return FALSE;
- }
-
- ImageAuth = (EFI_FIRMWARE_IMAGE_AUTHENTICATION *)Image;
- if (ImageSize < sizeof (EFI_FIRMWARE_IMAGE_AUTHENTICATION)) {
- DEBUG ((DEBUG_ERROR, "ExtractAuthenticatedImage - ImageSize too small\n"));
- return FALSE;
- }
-
- if (ImageAuth->AuthInfo.Hdr.dwLength <= OFFSET_OF (WIN_CERTIFICATE_UEFI_GUID, CertData)) {
- DEBUG ((DEBUG_ERROR, "ExtractAuthenticatedImage - dwLength too small\n"));
- return FALSE;
- }
-
- if ((UINTN)ImageAuth->AuthInfo.Hdr.dwLength > MAX_UINTN - sizeof (UINT64)) {
- DEBUG ((DEBUG_ERROR, "ExtractAuthenticatedImage - dwLength too big\n"));
- return FALSE;
- }
-
- if (ImageSize <= sizeof (ImageAuth->MonotonicCount) + ImageAuth->AuthInfo.Hdr.dwLength) {
- DEBUG ((DEBUG_ERROR, "ExtractAuthenticatedImage - ImageSize too small\n"));
- return FALSE;
- }
-
- if (ImageAuth->AuthInfo.Hdr.wRevision != 0x0200) {
- DEBUG ((DEBUG_ERROR, "ExtractAuthenticatedImage - wRevision: 0x%02x, expect - 0x%02x\n", (UINTN)ImageAuth->AuthInfo.Hdr.wRevision, (UINTN)0x0200));
- return FALSE;
- }
-
- if (ImageAuth->AuthInfo.Hdr.wCertificateType != WIN_CERT_TYPE_EFI_GUID) {
- DEBUG ((DEBUG_ERROR, "ExtractAuthenticatedImage - wCertificateType: 0x%02x, expect - 0x%02x\n", (UINTN)ImageAuth->AuthInfo.Hdr.wCertificateType, (UINTN)WIN_CERT_TYPE_EFI_GUID));
- return FALSE;
- }
-
- CertType = &ImageAuth->AuthInfo.CertType;
- DEBUG ((DEBUG_INFO, "ExtractAuthenticatedImage - CertType: %g\n", CertType));
-
- if (CompareGuid (&gEfiCertPkcs7Guid, CertType)) {
- PublicKeyData = PcdGetPtr (PcdPkcs7CertBuffer);
- PublicKeyDataLength = PcdGetSize (PcdPkcs7CertBuffer);
- } else if (CompareGuid (&gEfiCertTypeRsa2048Sha256Guid, CertType)) {
- PublicKeyData = PcdGetPtr (PcdRsa2048Sha256PublicKeyBuffer);
- PublicKeyDataLength = PcdGetSize (PcdRsa2048Sha256PublicKeyBuffer);
- } else {
- return FALSE;
- }
-
- ASSERT (PublicKeyData != NULL);
- ASSERT (PublicKeyDataLength != 0);
-
- Status = AuthenticateFmpImage (
- ImageAuth,
- ImageSize,
- PublicKeyData,
- PublicKeyDataLength
- );
- switch (Status) {
- case RETURN_SUCCESS:
- *LastAttemptStatus = LAST_ATTEMPT_STATUS_SUCCESS;
- break;
- case RETURN_SECURITY_VIOLATION:
- *LastAttemptStatus = LAST_ATTEMPT_STATUS_ERROR_AUTH_ERROR;
- break;
- case RETURN_INVALID_PARAMETER:
- *LastAttemptStatus = LAST_ATTEMPT_STATUS_ERROR_INVALID_FORMAT;
- break;
- case RETURN_UNSUPPORTED:
- *LastAttemptStatus = LAST_ATTEMPT_STATUS_ERROR_INVALID_FORMAT;
- break;
- case RETURN_OUT_OF_RESOURCES:
- *LastAttemptStatus = LAST_ATTEMPT_STATUS_ERROR_INSUFFICIENT_RESOURCES;
- break;
- default:
- *LastAttemptStatus = LAST_ATTEMPT_STATUS_ERROR_UNSUCCESSFUL;
- break;
- }
-
- if (EFI_ERROR (Status)) {
- return FALSE;
- }
-
- if (AuthenticatedImage != NULL) {
- *AuthenticatedImage = (UINT8 *)ImageAuth + ImageAuth->AuthInfo.Hdr.dwLength + sizeof (ImageAuth->MonotonicCount);
- }
-
- if (AuthenticatedImageSize != NULL) {
- *AuthenticatedImageSize = ImageSize - ImageAuth->AuthInfo.Hdr.dwLength - sizeof (ImageAuth->MonotonicCount);
- }
-
- return TRUE;
-}
-
-/**
- Extract ImageFmpInfo from system firmware.
-
- @param[in] SystemFirmwareImage The System Firmware image.
- @param[in] SystemFirmwareImageSize The size of the System Firmware image in bytes.
- @param[out] ImageFmpInfo The ImageFmpInfo.
- @param[out] ImageFmpInfoSize The size of the ImageFmpInfo in bytes.
-
- @retval TRUE The ImageFmpInfo is extracted.
- @retval FALSE The ImageFmpInfo is not extracted.
-**/
-BOOLEAN
-EFIAPI
-ExtractSystemFirmwareImageFmpInfo (
- IN VOID *SystemFirmwareImage,
- IN UINTN SystemFirmwareImageSize,
- OUT EDKII_SYSTEM_FIRMWARE_IMAGE_DESCRIPTOR **ImageFmpInfo,
- OUT UINTN *ImageFmpInfoSize
- )
-{
- BOOLEAN Result;
- UINT32 SectionHeaderSize;
- UINT32 FileHeaderSize;
-
- *ImageFmpInfo = NULL;
- *ImageFmpInfoSize = 0;
-
- Result = GetFfsByName (SystemFirmwareImage, SystemFirmwareImageSize, &gEdkiiSystemFirmwareImageDescriptorFileGuid, EFI_FV_FILETYPE_ALL, (VOID **)ImageFmpInfo, ImageFmpInfoSize);
- if (!Result) {
- return FALSE;
- }
-
- if (IS_FFS_FILE2 (*ImageFmpInfo)) {
- FileHeaderSize = sizeof (EFI_FFS_FILE_HEADER2);
- } else {
- FileHeaderSize = sizeof (EFI_FFS_FILE_HEADER);
- }
-
- *ImageFmpInfo = (VOID *)((UINT8 *)*ImageFmpInfo + FileHeaderSize);
- *ImageFmpInfoSize = *ImageFmpInfoSize - FileHeaderSize;
-
- Result = GetSectionByType (*ImageFmpInfo, (UINT32)*ImageFmpInfoSize, EFI_SECTION_RAW, 0, (VOID **)ImageFmpInfo, ImageFmpInfoSize);
- if (!Result) {
- return FALSE;
- }
-
- if (IS_SECTION2 (*ImageFmpInfo)) {
- SectionHeaderSize = sizeof (EFI_RAW_SECTION2);
- } else {
- SectionHeaderSize = sizeof (EFI_RAW_SECTION);
- }
-
- *ImageFmpInfo = (VOID *)((UINT8 *)*ImageFmpInfo + SectionHeaderSize);
- *ImageFmpInfoSize = *ImageFmpInfoSize - SectionHeaderSize;
-
- return TRUE;
-}
-
-/**
- Extract the System Firmware image from an authenticated image.
-
- @param[in] AuthenticatedImage The authenticated capsule image.
- @param[in] AuthenticatedImageSize The size of the authenticated capsule image in bytes.
- @param[out] SystemFirmwareImage The System Firmware image.
- @param[out] SystemFirmwareImageSize The size of the System Firmware image in bytes.
-
- @retval TRUE The System Firmware image is extracted.
- @retval FALSE The System Firmware image is not extracted.
-**/
-BOOLEAN
-EFIAPI
-ExtractSystemFirmwareImage (
- IN VOID *AuthenticatedImage,
- IN UINTN AuthenticatedImageSize,
- OUT VOID **SystemFirmwareImage,
- OUT UINTN *SystemFirmwareImageSize
- )
-{
- BOOLEAN Result;
- UINT32 FileHeaderSize;
-
- *SystemFirmwareImage = NULL;
- *SystemFirmwareImageSize = 0;
-
- Result = GetFfsByName (AuthenticatedImage, AuthenticatedImageSize, &mEdkiiSystemFirmwareFileGuid, EFI_FV_FILETYPE_RAW, SystemFirmwareImage, SystemFirmwareImageSize);
- if (!Result) {
- // no nested FV, just return all data.
- *SystemFirmwareImage = AuthenticatedImage;
- *SystemFirmwareImageSize = AuthenticatedImageSize;
-
- return TRUE;
- }
-
- if (IS_FFS_FILE2 (*SystemFirmwareImage)) {
- FileHeaderSize = sizeof (EFI_FFS_FILE_HEADER2);
- } else {
- FileHeaderSize = sizeof (EFI_FFS_FILE_HEADER);
- }
-
- *SystemFirmwareImage = (UINT8 *)*SystemFirmwareImage + FileHeaderSize;
- *SystemFirmwareImageSize = *SystemFirmwareImageSize - FileHeaderSize;
-
- return Result;
-}
-
-/**
- Authenticated system firmware FMP capsule image.
-
- Caution: This function may receive untrusted input.
-
- @param[in] Image The FMP capsule image, including EFI_FIRMWARE_IMAGE_AUTHENTICATION.
- @param[in] ImageSize The size of FMP capsule image in bytes.
- @param[in] ForceVersionMatch TRUE: The version of capsule must be as same as the version of current image.
- FALSE: The version of capsule must be as same as greater than the lowest
- supported version of current image.
- @param[out] LastAttemptVersion The last attempt version, which will be recorded in ESRT and FMP EFI_FIRMWARE_IMAGE_DESCRIPTOR.
- @param[out] LastAttemptStatus The last attempt status, which will be recorded in ESRT and FMP EFI_FIRMWARE_IMAGE_DESCRIPTOR.
- @param[out] AuthenticatedImage The authenticated capsule image, excluding EFI_FIRMWARE_IMAGE_AUTHENTICATION.
- @param[out] AuthenticatedImageSize The size of the authenticated capsule image in bytes.
-
- @retval TRUE Authentication passes and the authenticated image is extracted.
- @retval FALSE Authentication fails and the authenticated image is not extracted.
-**/
-EFI_STATUS
-EFIAPI
-CapsuleAuthenticateSystemFirmware (
- IN VOID *Image,
- IN UINTN ImageSize,
- IN BOOLEAN ForceVersionMatch,
- OUT UINT32 *LastAttemptVersion,
- OUT UINT32 *LastAttemptStatus,
- OUT VOID **AuthenticatedImage,
- OUT UINTN *AuthenticatedImageSize
- )
-{
- BOOLEAN Result;
- EDKII_SYSTEM_FIRMWARE_IMAGE_DESCRIPTOR *ImageFmpInfo;
- UINTN ImageFmpInfoSize;
- EDKII_SYSTEM_FIRMWARE_IMAGE_DESCRIPTOR *CurrentImageFmpInfo;
- UINTN CurrentImageFmpInfoSize;
- VOID *SystemFirmwareImage;
- UINTN SystemFirmwareImageSize;
-
- *LastAttemptVersion = 0;
-
- //
- // NOTE: This function need run in an isolated environment.
- // Do not touch FMP protocol and its private structure.
- //
- if (mImageFmpInfo == NULL) {
- DEBUG ((DEBUG_INFO, "ImageFmpInfo is not set\n"));
- return EFI_SECURITY_VIOLATION;
- }
-
- Result = ExtractAuthenticatedImage ((VOID *)Image, ImageSize, LastAttemptStatus, AuthenticatedImage, AuthenticatedImageSize);
- if (!Result) {
- DEBUG ((DEBUG_INFO, "ExtractAuthenticatedImage - fail\n"));
- return EFI_SECURITY_VIOLATION;
- }
-
- DEBUG ((DEBUG_INFO, "AuthenticatedImage - 0x%x - 0x%x\n", *AuthenticatedImage, *AuthenticatedImageSize));
-
- Result = ExtractSystemFirmwareImage (*AuthenticatedImage, *AuthenticatedImageSize, &SystemFirmwareImage, &SystemFirmwareImageSize);
- if (!Result) {
- *LastAttemptStatus = LAST_ATTEMPT_STATUS_ERROR_INVALID_FORMAT;
- DEBUG ((DEBUG_INFO, "ExtractSystemFirmwareImage - fail\n"));
- return EFI_SECURITY_VIOLATION;
- }
-
- DEBUG ((DEBUG_INFO, "SystemFirmwareImage - 0x%x - 0x%x\n", SystemFirmwareImage, SystemFirmwareImageSize));
-
- Result = ExtractSystemFirmwareImageFmpInfo (SystemFirmwareImage, SystemFirmwareImageSize, &ImageFmpInfo, &ImageFmpInfoSize);
- if (!Result) {
- *LastAttemptStatus = LAST_ATTEMPT_STATUS_ERROR_INVALID_FORMAT;
- DEBUG ((DEBUG_INFO, "ExtractSystemFirmwareImageFmpInfo - fail\n"));
- return EFI_SECURITY_VIOLATION;
- }
-
- *LastAttemptVersion = ImageFmpInfo->Version;
- DEBUG ((DEBUG_INFO, "ImageFmpInfo - 0x%x - 0x%x\n", ImageFmpInfo, ImageFmpInfoSize));
- DEBUG ((DEBUG_INFO, "NewImage Version - 0x%x\n", ImageFmpInfo->Version));
- DEBUG ((DEBUG_INFO, "NewImage LowestSupportedImageVersion - 0x%x\n", ImageFmpInfo->LowestSupportedImageVersion));
-
- CurrentImageFmpInfo = mImageFmpInfo;
- CurrentImageFmpInfoSize = mImageFmpInfoSize;
-
- DEBUG ((DEBUG_INFO, "ImageFmpInfo - 0x%x - 0x%x\n", CurrentImageFmpInfo, CurrentImageFmpInfoSize));
- DEBUG ((DEBUG_INFO, "Current Version - 0x%x\n", CurrentImageFmpInfo->Version));
- DEBUG ((DEBUG_INFO, "Current LowestSupportedImageVersion - 0x%x\n", CurrentImageFmpInfo->LowestSupportedImageVersion));
-
- if (ForceVersionMatch) {
- if (CurrentImageFmpInfo->Version != ImageFmpInfo->Version) {
- *LastAttemptStatus = LAST_ATTEMPT_STATUS_ERROR_INCORRECT_VERSION;
- DEBUG ((DEBUG_INFO, "ForceVersionMatch check - fail\n"));
- return EFI_SECURITY_VIOLATION;
- }
- } else {
- if (ImageFmpInfo->Version < CurrentImageFmpInfo->LowestSupportedImageVersion) {
- *LastAttemptStatus = LAST_ATTEMPT_STATUS_ERROR_INCORRECT_VERSION;
- DEBUG ((DEBUG_INFO, "LowestSupportedImageVersion check - fail\n"));
- return EFI_SECURITY_VIOLATION;
- }
- }
-
- *LastAttemptStatus = LAST_ATTEMPT_STATUS_SUCCESS;
- return EFI_SUCCESS;
-}
-
-/**
- PcdCallBack gets the real set PCD value
-
- @param[in] CallBackGuid The PCD token GUID being set.
- @param[in] CallBackToken The PCD token number being set.
- @param[in, out] TokenData A pointer to the token data being set.
- @param[in] TokenDataSize The size, in bytes, of the data being set.
-
-**/
-VOID
-EFIAPI
-EdkiiSystemCapsuleLibPcdCallBack (
- IN CONST GUID *CallBackGuid OPTIONAL,
- IN UINTN CallBackToken,
- IN OUT VOID *TokenData,
- IN UINTN TokenDataSize
- )
-{
- if (CompareGuid (CallBackGuid, &gEfiSignedCapsulePkgTokenSpaceGuid) &&
- (CallBackToken == PcdToken (PcdEdkiiSystemFirmwareImageDescriptor)))
- {
- mImageFmpInfoSize = TokenDataSize;
- mImageFmpInfo = AllocateCopyPool (mImageFmpInfoSize, TokenData);
- ASSERT (mImageFmpInfo != NULL);
- //
- // Cancel Callback after get the real set value
- //
- LibPcdCancelCallback (
- &gEfiSignedCapsulePkgTokenSpaceGuid,
- PcdToken (PcdEdkiiSystemFirmwareImageDescriptor),
- EdkiiSystemCapsuleLibPcdCallBack
- );
- }
-
- if (CompareGuid (CallBackGuid, &gEfiSignedCapsulePkgTokenSpaceGuid) &&
- (CallBackToken == PcdToken (PcdEdkiiSystemFirmwareFileGuid)))
- {
- CopyGuid (&mEdkiiSystemFirmwareFileGuid, TokenData);
- //
- // Cancel Callback after get the real set value
- //
- LibPcdCancelCallback (
- &gEfiSignedCapsulePkgTokenSpaceGuid,
- PcdToken (PcdEdkiiSystemFirmwareFileGuid),
- EdkiiSystemCapsuleLibPcdCallBack
- );
- }
-}
-
-/**
- The constructor function.
-
- @retval EFI_SUCCESS The constructor successfully .
-**/
-EFI_STATUS
-EFIAPI
-EdkiiSystemCapsuleLibConstructor (
- VOID
- )
-{
- mImageFmpInfoSize = PcdGetSize (PcdEdkiiSystemFirmwareImageDescriptor);
- mImageFmpInfo = PcdGetPtr (PcdEdkiiSystemFirmwareImageDescriptor);
- //
- // Verify Firmware Image Descriptor first
- //
- if ((mImageFmpInfoSize < sizeof (EDKII_SYSTEM_FIRMWARE_IMAGE_DESCRIPTOR)) ||
- (mImageFmpInfo->Signature != EDKII_SYSTEM_FIRMWARE_IMAGE_DESCRIPTOR_SIGNATURE))
- {
- //
- // SystemFirmwareImageDescriptor is not set.
- // Register PCD set callback to hook PCD value set.
- //
- mImageFmpInfo = NULL;
- mImageFmpInfoSize = 0;
- LibPcdCallbackOnSet (
- &gEfiSignedCapsulePkgTokenSpaceGuid,
- PcdToken (PcdEdkiiSystemFirmwareImageDescriptor),
- EdkiiSystemCapsuleLibPcdCallBack
- );
- } else {
- mImageFmpInfo = AllocateCopyPool (mImageFmpInfoSize, mImageFmpInfo);
- ASSERT (mImageFmpInfo != NULL);
- }
-
- CopyGuid (&mEdkiiSystemFirmwareFileGuid, PcdGetPtr (PcdEdkiiSystemFirmwareFileGuid));
- //
- // Verify GUID value first
- //
- if (CompareGuid (&mEdkiiSystemFirmwareFileGuid, &gZeroGuid)) {
- LibPcdCallbackOnSet (
- &gEfiSignedCapsulePkgTokenSpaceGuid,
- PcdToken (PcdEdkiiSystemFirmwareFileGuid),
- EdkiiSystemCapsuleLibPcdCallBack
- );
- }
-
- return EFI_SUCCESS;
-}
diff --git a/SignedCapsulePkg/Library/EdkiiSystemCapsuleLib/EdkiiSystemCapsuleLib.inf b/SignedCapsulePkg/Library/EdkiiSystemCapsuleLib/EdkiiSystemCapsuleLib.inf
deleted file mode 100644
index 611c1bfeef..0000000000
--- a/SignedCapsulePkg/Library/EdkiiSystemCapsuleLib/EdkiiSystemCapsuleLib.inf
+++ /dev/null
@@ -1,58 +0,0 @@
-## @file
-# EDKII System Capsule library.
-#
-# EDKII System Capsule library instance for DXE/PEI post memory phase.
-#
-# Copyright (c) 2016 - 2018, Intel Corporation. All rights reserved.
-# SPDX-License-Identifier: BSD-2-Clause-Patent
-#
-##
-
-[Defines]
- INF_VERSION = 0x00010005
- BASE_NAME = EdkiiSystemCapsuleLib
- MODULE_UNI_FILE = EdkiiSystemCapsuleLib.uni
- FILE_GUID = 109D5FC6-56E6-481A-88EF-0CB828FBE0F6
- MODULE_TYPE = BASE
- VERSION_STRING = 1.0
- LIBRARY_CLASS = EdkiiSystemCapsuleLib
- CONSTRUCTOR = EdkiiSystemCapsuleLibConstructor
-
-#
-# The following information is for reference only and not required by the build tools.
-#
-# VALID_ARCHITECTURES = IA32 X64 EBC
-#
-
-[Sources]
- EdkiiSystemCapsuleLib.c
-
-[Packages]
- MdePkg/MdePkg.dec
- MdeModulePkg/MdeModulePkg.dec
- SecurityPkg/SecurityPkg.dec
- SignedCapsulePkg/SignedCapsulePkg.dec
-
-[LibraryClasses]
- BaseLib
- BaseMemoryLib
- DebugLib
- PcdLib
- MemoryAllocationLib
- FmpAuthenticationLib
-
-[Pcd]
- gEfiSignedCapsulePkgTokenSpaceGuid.PcdEdkiiSystemFirmwareImageDescriptor ## CONSUMES
- gEfiSignedCapsulePkgTokenSpaceGuid.PcdEdkiiSystemFirmwareFileGuid ## CONSUMES
- gEfiSecurityPkgTokenSpaceGuid.PcdRsa2048Sha256PublicKeyBuffer ## CONSUMES
- gEfiSecurityPkgTokenSpaceGuid.PcdPkcs7CertBuffer ## CONSUMES
-
-[Guids]
- gEdkiiSystemFirmwareImageDescriptorFileGuid ## SOMETIMES_CONSUMES ## GUID
- gEdkiiSystemFmpCapsuleConfigFileGuid ## SOMETIMES_CONSUMES ## GUID
- gEdkiiSystemFmpCapsuleDriverFvFileGuid ## SOMETIMES_CONSUMES ## GUID
- gEfiCertPkcs7Guid ## SOMETIMES_CONSUMES ## GUID
- gEfiCertTypeRsa2048Sha256Guid ## SOMETIMES_CONSUMES ## GUID
- gEfiSignedCapsulePkgTokenSpaceGuid ## SOMETIMES_CONSUMES ## GUID
- gZeroGuid ## SOMETIMES_CONSUMES ## GUID
-
diff --git a/SignedCapsulePkg/Library/EdkiiSystemCapsuleLib/EdkiiSystemCapsuleLib.uni b/SignedCapsulePkg/Library/EdkiiSystemCapsuleLib/EdkiiSystemCapsuleLib.uni
deleted file mode 100644
index 945eaca5d8..0000000000
--- a/SignedCapsulePkg/Library/EdkiiSystemCapsuleLib/EdkiiSystemCapsuleLib.uni
+++ /dev/null
@@ -1,16 +0,0 @@
-// /** @file
-// EDKII System Capsule library.
-//
-// EDKII System Capsule library instance for DXE/PEI post memory phase.
-//
-// Copyright (c) 2016, Intel Corporation. All rights reserved.
-//
-// SPDX-License-Identifier: BSD-2-Clause-Patent
-//
-// **/
-
-
-#string STR_MODULE_ABSTRACT #language en-US "EDKII System Capsule library."
-
-#string STR_MODULE_DESCRIPTION #language en-US "EDKII System Capsule library instance for DXE/PEI post memory phase."
-
diff --git a/SignedCapsulePkg/Library/IniParsingLib/IniParsingLib.c b/SignedCapsulePkg/Library/IniParsingLib/IniParsingLib.c
deleted file mode 100644
index 0a44131a08..0000000000
--- a/SignedCapsulePkg/Library/IniParsingLib/IniParsingLib.c
+++ /dev/null
@@ -1,1340 +0,0 @@
-/** @file
- This library parses the INI configuration file.
-
- The INI file format is:
- ================
- [SectionName]
- EntryName=EntryValue
- ================
-
- Where:
- 1) SectionName is an ASCII string. The valid format is [A-Za-z0-9_]+
- 2) EntryName is an ASCII string. The valid format is [A-Za-z0-9_]+
- 3) EntryValue can be:
- 3.1) an ASCII String. The valid format is [A-Za-z0-9_]+
- 3.2) a GUID. The valid format is xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx, where x is [A-Fa-f0-9]
- 3.3) a decimal value. The valid format is [0-9]+
- 3.4) a hexadecimal value. The valid format is 0x[A-Fa-f0-9]+
- 4) '#' or ';' can be used as comment at anywhere.
- 5) TAB(0x20) or SPACE(0x9) can be used as separator.
- 6) LF(\n, 0xA) or CR(\r, 0xD) can be used as line break.
-
- Caution: This module requires additional review when modified.
- This driver will have external input - INI data file.
-
- OpenIniFile(), PreProcessDataFile(), ProfileGetSection(), ProfileGetEntry()
- will receive untrusted input and do basic validation.
-
- Copyright (c) 2016 - 2017, Intel Corporation. All rights reserved.
-
- SPDX-License-Identifier: BSD-2-Clause-Patent
-
-**/
-
-#include
-#include
-#include
-#include
-#include
-
-#define IS_HYPHEN(a) ((a) == '-')
-#define IS_NULL(a) ((a) == '\0')
-
-// This is default allocation. Reallocation will happen if it is not enough.
-#define MAX_LINE_LENGTH 512
-
-typedef struct _INI_SECTION_ITEM SECTION_ITEM;
-struct _INI_SECTION_ITEM {
- CHAR8 *PtrSection;
- UINTN SecNameLen;
- CHAR8 *PtrEntry;
- CHAR8 *PtrValue;
- SECTION_ITEM *PtrNext;
-};
-
-typedef struct _INI_COMMENT_LINE COMMENT_LINE;
-struct _INI_COMMENT_LINE {
- CHAR8 *PtrComment;
- COMMENT_LINE *PtrNext;
-};
-
-typedef struct {
- SECTION_ITEM *SectionHead;
- COMMENT_LINE *CommentHead;
-} INI_PARSING_LIB_CONTEXT;
-
-/**
- Return if the digital char is valid.
-
- @param[in] DigitalChar The digital char to be checked.
- @param[in] IncludeHex If it include HEX char.
-
- @retval TRUE The digital char is valid.
- @retval FALSE The digital char is invalid.
-**/
-BOOLEAN
-IsValidDigitalChar (
- IN CHAR8 DigitalChar,
- IN BOOLEAN IncludeHex
- )
-{
- if ((DigitalChar >= '0') && (DigitalChar <= '9')) {
- return TRUE;
- }
-
- if (IncludeHex) {
- if ((DigitalChar >= 'a') && (DigitalChar <= 'f')) {
- return TRUE;
- }
-
- if ((DigitalChar >= 'A') && (DigitalChar <= 'F')) {
- return TRUE;
- }
- }
-
- return FALSE;
-}
-
-/**
- Return if the name char is valid.
-
- @param[in] NameChar The name char to be checked.
-
- @retval TRUE The name char is valid.
- @retval FALSE The name char is invalid.
-**/
-BOOLEAN
-IsValidNameChar (
- IN CHAR8 NameChar
- )
-{
- if ((NameChar >= 'a') && (NameChar <= 'z')) {
- return TRUE;
- }
-
- if ((NameChar >= 'A') && (NameChar <= 'Z')) {
- return TRUE;
- }
-
- if ((NameChar >= '0') && (NameChar <= '9')) {
- return TRUE;
- }
-
- if (NameChar == '_') {
- return TRUE;
- }
-
- return FALSE;
-}
-
-/**
- Return if the digital string is valid.
-
- @param[in] Digital The digital to be checked.
- @param[in] Length The length of digital string in bytes.
- @param[in] IncludeHex If it include HEX char.
-
- @retval TRUE The digital string is valid.
- @retval FALSE The digital string is invalid.
-**/
-BOOLEAN
-IsValidDigital (
- IN CHAR8 *Digital,
- IN UINTN Length,
- IN BOOLEAN IncludeHex
- )
-{
- UINTN Index;
-
- for (Index = 0; Index < Length; Index++) {
- if (!IsValidDigitalChar (Digital[Index], IncludeHex)) {
- return FALSE;
- }
- }
-
- return TRUE;
-}
-
-/**
- Return if the decimal string is valid.
-
- @param[in] Decimal The decimal string to be checked.
- @param[in] Length The length of decimal string in bytes.
-
- @retval TRUE The decimal string is valid.
- @retval FALSE The decimal string is invalid.
-**/
-BOOLEAN
-IsValidDecimalString (
- IN CHAR8 *Decimal,
- IN UINTN Length
- )
-{
- return IsValidDigital (Decimal, Length, FALSE);
-}
-
-/**
- Return if the hexadecimal string is valid.
-
- @param[in] Hex The hexadecimal string to be checked.
- @param[in] Length The length of hexadecimal string in bytes.
-
- @retval TRUE The hexadecimal string is valid.
- @retval FALSE The hexadecimal string is invalid.
-**/
-BOOLEAN
-IsValidHexString (
- IN CHAR8 *Hex,
- IN UINTN Length
- )
-{
- if (Length <= 2) {
- return FALSE;
- }
-
- if (Hex[0] != '0') {
- return FALSE;
- }
-
- if ((Hex[1] != 'x') && (Hex[1] != 'X')) {
- return FALSE;
- }
-
- return IsValidDigital (&Hex[2], Length - 2, TRUE);
-}
-
-/**
- Return if the name string is valid.
-
- @param[in] Name The name to be checked.
- @param[in] Length The length of name string in bytes.
-
- @retval TRUE The name string is valid.
- @retval FALSE The name string is invalid.
-**/
-BOOLEAN
-IsValidName (
- IN CHAR8 *Name,
- IN UINTN Length
- )
-{
- UINTN Index;
-
- for (Index = 0; Index < Length; Index++) {
- if (!IsValidNameChar (Name[Index])) {
- return FALSE;
- }
- }
-
- return TRUE;
-}
-
-/**
- Return if the value string is valid GUID.
-
- @param[in] Value The value to be checked.
- @param[in] Length The length of value string in bytes.
-
- @retval TRUE The value string is valid GUID.
- @retval FALSE The value string is invalid GUID.
-**/
-BOOLEAN
-IsValidGuid (
- IN CHAR8 *Value,
- IN UINTN Length
- )
-{
- if (Length != sizeof ("xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx") - 1) {
- return FALSE;
- }
-
- if (!IS_HYPHEN (Value[8])) {
- return FALSE;
- }
-
- if (!IS_HYPHEN (Value[13])) {
- return FALSE;
- }
-
- if (!IS_HYPHEN (Value[18])) {
- return FALSE;
- }
-
- if (!IS_HYPHEN (Value[23])) {
- return FALSE;
- }
-
- if (!IsValidDigital (&Value[0], 8, TRUE)) {
- return FALSE;
- }
-
- if (!IsValidDigital (&Value[9], 4, TRUE)) {
- return FALSE;
- }
-
- if (!IsValidDigital (&Value[14], 4, TRUE)) {
- return FALSE;
- }
-
- if (!IsValidDigital (&Value[19], 4, TRUE)) {
- return FALSE;
- }
-
- if (!IsValidDigital (&Value[24], 12, TRUE)) {
- return FALSE;
- }
-
- return TRUE;
-}
-
-/**
- Return if the value string is valid.
-
- @param[in] Value The value to be checked.
- @param[in] Length The length of value string in bytes.
-
- @retval TRUE The name string is valid.
- @retval FALSE The name string is invalid.
-**/
-BOOLEAN
-IsValidValue (
- IN CHAR8 *Value,
- IN UINTN Length
- )
-{
- if (IsValidName (Value, Length) || IsValidGuid (Value, Length)) {
- return TRUE;
- }
-
- return FALSE;
-}
-
-/**
- Dump an INI config file context.
-
- @param[in] Context INI Config file context.
-**/
-VOID
-DumpIniSection (
- IN VOID *Context
- )
-{
- INI_PARSING_LIB_CONTEXT *IniContext;
- SECTION_ITEM *PtrSection;
- SECTION_ITEM *Section;
-
- if (Context == NULL) {
- return;
- }
-
- IniContext = Context;
- Section = IniContext->SectionHead;
-
- while (Section != NULL) {
- PtrSection = Section;
- Section = Section->PtrNext;
- if (PtrSection->PtrSection != NULL) {
- DEBUG ((DEBUG_VERBOSE, "Section - %a\n", PtrSection->PtrSection));
- }
-
- if (PtrSection->PtrEntry != NULL) {
- DEBUG ((DEBUG_VERBOSE, " Entry - %a\n", PtrSection->PtrEntry));
- }
-
- if (PtrSection->PtrValue != NULL) {
- DEBUG ((DEBUG_VERBOSE, " Value - %a\n", PtrSection->PtrValue));
- }
- }
-}
-
-/**
- Copy one line data from buffer data to the line buffer.
-
- @param[in] Buffer Buffer data.
- @param[in] BufferSize Buffer Size.
- @param[in, out] LineBuffer Line buffer to store the found line data.
- @param[in, out] LineSize On input, size of the input line buffer.
- On output, size of the actual line buffer.
-
- @retval EFI_BUFFER_TOO_SMALL The size of input line buffer is not enough.
- @retval EFI_SUCCESS Copy line data into the line buffer.
-
-**/
-EFI_STATUS
-ProfileGetLine (
- IN UINT8 *Buffer,
- IN UINTN BufferSize,
- IN OUT UINT8 *LineBuffer,
- IN OUT UINTN *LineSize
- )
-{
- UINTN Length;
- UINT8 *PtrBuf;
- UINTN PtrEnd;
-
- PtrBuf = Buffer;
- PtrEnd = (UINTN)Buffer + BufferSize;
-
- //
- // 0x0D indicates a line break. Otherwise there is no line break
- //
- while ((UINTN)PtrBuf < PtrEnd) {
- if ((*PtrBuf == 0x0D) || (*PtrBuf == 0x0A)) {
- break;
- }
-
- PtrBuf++;
- }
-
- if ((UINTN)PtrBuf >= (PtrEnd - 1)) {
- //
- // The buffer ends without any line break
- // or it is the last character of the buffer
- //
- Length = BufferSize;
- } else if (*(PtrBuf + 1) == 0x0A) {
- //
- // Further check if a 0x0A follows. If yes, count 0xA
- //
- Length = (UINTN)PtrBuf - (UINTN)Buffer + 2;
- } else {
- Length = (UINTN)PtrBuf - (UINTN)Buffer + 1;
- }
-
- if (Length > (*LineSize)) {
- *LineSize = Length;
- return EFI_BUFFER_TOO_SMALL;
- }
-
- SetMem (LineBuffer, *LineSize, 0x0);
- *LineSize = Length;
- CopyMem (LineBuffer, Buffer, Length);
-
- return EFI_SUCCESS;
-}
-
-/**
- Trim Buffer by removing all CR, LF, TAB, and SPACE chars in its head and tail.
-
- @param[in, out] Buffer On input, buffer data to be trimmed.
- On output, the trimmed buffer.
- @param[in, out] BufferSize On input, size of original buffer data.
- On output, size of the trimmed buffer.
-
-**/
-VOID
-ProfileTrim (
- IN OUT UINT8 *Buffer,
- IN OUT UINTN *BufferSize
- )
-{
- UINTN Length;
- UINT8 *PtrBuf;
- UINT8 *PtrEnd;
-
- if (*BufferSize == 0) {
- return;
- }
-
- //
- // Trim the tail first, include CR, LF, TAB, and SPACE.
- //
- Length = *BufferSize;
- PtrBuf = (UINT8 *)((UINTN)Buffer + Length - 1);
- while (PtrBuf >= Buffer) {
- if ( (*PtrBuf != 0x0D) && (*PtrBuf != 0x0A)
- && (*PtrBuf != 0x20) && (*PtrBuf != 0x09))
- {
- break;
- }
-
- PtrBuf--;
- }
-
- //
- // all spaces, a blank line, return directly;
- //
- if (PtrBuf < Buffer) {
- *BufferSize = 0;
- return;
- }
-
- Length = (UINTN)PtrBuf - (UINTN)Buffer + 1;
- PtrEnd = PtrBuf;
- PtrBuf = Buffer;
-
- //
- // Now skip the heading CR, LF, TAB and SPACE
- //
- while (PtrBuf <= PtrEnd) {
- if ( (*PtrBuf != 0x0D) && (*PtrBuf != 0x0A)
- && (*PtrBuf != 0x20) && (*PtrBuf != 0x09))
- {
- break;
- }
-
- PtrBuf++;
- }
-
- //
- // If no heading CR, LF, TAB or SPACE, directly return
- //
- if (PtrBuf == Buffer) {
- *BufferSize = Length;
- return;
- }
-
- *BufferSize = (UINTN)PtrEnd - (UINTN)PtrBuf + 1;
-
- //
- // The first Buffer..PtrBuf characters are CR, LF, TAB or SPACE.
- // Now move out all these characters.
- //
- while (PtrBuf <= PtrEnd) {
- *Buffer = *PtrBuf;
- Buffer++;
- PtrBuf++;
- }
-
- return;
-}
-
-/**
- Insert new comment item into comment head.
-
- @param[in] Buffer Comment buffer to be added.
- @param[in] BufferSize Size of comment buffer.
- @param[in, out] CommentHead Comment Item head entry.
-
- @retval EFI_OUT_OF_RESOURCES No enough memory is allocated.
- @retval EFI_SUCCESS New comment item is inserted.
-
-**/
-EFI_STATUS
-ProfileGetComments (
- IN UINT8 *Buffer,
- IN UINTN BufferSize,
- IN OUT COMMENT_LINE **CommentHead
- )
-{
- COMMENT_LINE *CommentItem;
-
- CommentItem = NULL;
- CommentItem = AllocatePool (sizeof (COMMENT_LINE));
- if (CommentItem == NULL) {
- return EFI_OUT_OF_RESOURCES;
- }
-
- CommentItem->PtrNext = *CommentHead;
- *CommentHead = CommentItem;
-
- //
- // Add a trailing '\0'
- //
- CommentItem->PtrComment = AllocatePool (BufferSize + 1);
- if (CommentItem->PtrComment == NULL) {
- FreePool (CommentItem);
- return EFI_OUT_OF_RESOURCES;
- }
-
- CopyMem (CommentItem->PtrComment, Buffer, BufferSize);
- *(CommentItem->PtrComment + BufferSize) = '\0';
-
- return EFI_SUCCESS;
-}
-
-/**
- Add new section item into Section head.
-
- @param[in] Buffer Section item data buffer.
- @param[in] BufferSize Size of section item.
- @param[in, out] SectionHead Section item head entry.
-
- @retval EFI_OUT_OF_RESOURCES No enough memory is allocated.
- @retval EFI_SUCCESS Section item is NULL or Section item is added.
-
-**/
-EFI_STATUS
-ProfileGetSection (
- IN UINT8 *Buffer,
- IN UINTN BufferSize,
- IN OUT SECTION_ITEM **SectionHead
- )
-{
- SECTION_ITEM *SectionItem;
- UINTN Length;
- UINT8 *PtrBuf;
- UINT8 *PtrEnd;
-
- ASSERT (BufferSize >= 1);
- //
- // The first character of Buffer is '[', now we want for ']'
- //
- PtrEnd = (UINT8 *)((UINTN)Buffer + BufferSize - 1);
- PtrBuf = (UINT8 *)((UINTN)Buffer + 1);
- while (PtrBuf <= PtrEnd) {
- if (*PtrBuf == ']') {
- break;
- }
-
- PtrBuf++;
- }
-
- if (PtrBuf > PtrEnd) {
- //
- // Not found. Invalid line
- //
- return EFI_NOT_FOUND;
- }
-
- if (PtrBuf <= Buffer + 1) {
- // Empty name
- return EFI_NOT_FOUND;
- }
-
- //
- // excluding the heading '[' and tailing ']'
- //
- Length = PtrBuf - Buffer - 1;
- ProfileTrim (
- Buffer + 1,
- &Length
- );
-
- //
- // Invalid line if the section name is null
- //
- if (Length == 0) {
- return EFI_NOT_FOUND;
- }
-
- if (!IsValidName ((CHAR8 *)Buffer + 1, Length)) {
- return EFI_INVALID_PARAMETER;
- }
-
- SectionItem = AllocatePool (sizeof (SECTION_ITEM));
- if (SectionItem == NULL) {
- return EFI_OUT_OF_RESOURCES;
- }
-
- SectionItem->PtrSection = NULL;
- SectionItem->SecNameLen = Length;
- SectionItem->PtrEntry = NULL;
- SectionItem->PtrValue = NULL;
- SectionItem->PtrNext = *SectionHead;
- *SectionHead = SectionItem;
-
- //
- // Add a trailing '\0'
- //
- SectionItem->PtrSection = AllocatePool (Length + 1);
- if (SectionItem->PtrSection == NULL) {
- return EFI_OUT_OF_RESOURCES;
- }
-
- //
- // excluding the heading '['
- //
- CopyMem (SectionItem->PtrSection, Buffer + 1, Length);
- *(SectionItem->PtrSection + Length) = '\0';
-
- return EFI_SUCCESS;
-}
-
-/**
- Add new section entry and entry value into Section head.
-
- @param[in] Buffer Section entry data buffer.
- @param[in] BufferSize Size of section entry.
- @param[in, out] SectionHead Section item head entry.
-
- @retval EFI_OUT_OF_RESOURCES No enough memory is allocated.
- @retval EFI_SUCCESS Section entry is added.
- @retval EFI_NOT_FOUND Section entry is not found.
- @retval EFI_INVALID_PARAMETER Section entry is invalid.
-
-**/
-EFI_STATUS
-ProfileGetEntry (
- IN UINT8 *Buffer,
- IN UINTN BufferSize,
- IN OUT SECTION_ITEM **SectionHead
- )
-{
- EFI_STATUS Status;
- SECTION_ITEM *SectionItem;
- SECTION_ITEM *PtrSection;
- UINTN Length;
- UINT8 *PtrBuf;
- UINT8 *PtrEnd;
-
- Status = EFI_SUCCESS;
- PtrBuf = Buffer;
- PtrEnd = (UINT8 *)((UINTN)Buffer + BufferSize - 1);
-
- //
- // First search for '='
- //
- while (PtrBuf <= PtrEnd) {
- if (*PtrBuf == '=') {
- break;
- }
-
- PtrBuf++;
- }
-
- if (PtrBuf > PtrEnd) {
- //
- // Not found. Invalid line
- //
- return EFI_NOT_FOUND;
- }
-
- if (PtrBuf <= Buffer) {
- // Empty name
- return EFI_NOT_FOUND;
- }
-
- //
- // excluding the tailing '='
- //
- Length = PtrBuf - Buffer;
- ProfileTrim (
- Buffer,
- &Length
- );
-
- //
- // Invalid line if the entry name is null
- //
- if (Length == 0) {
- return EFI_NOT_FOUND;
- }
-
- if (!IsValidName ((CHAR8 *)Buffer, Length)) {
- return EFI_INVALID_PARAMETER;
- }
-
- //
- // Omit this line if no section header has been found before
- //
- if (*SectionHead == NULL) {
- return Status;
- }
-
- PtrSection = *SectionHead;
-
- SectionItem = AllocatePool (sizeof (SECTION_ITEM));
- if (SectionItem == NULL) {
- return EFI_OUT_OF_RESOURCES;
- }
-
- SectionItem->PtrSection = NULL;
- SectionItem->PtrEntry = NULL;
- SectionItem->PtrValue = NULL;
- SectionItem->SecNameLen = PtrSection->SecNameLen;
- SectionItem->PtrNext = *SectionHead;
- *SectionHead = SectionItem;
-
- //
- // SectionName, add a trailing '\0'
- //
- SectionItem->PtrSection = AllocatePool (PtrSection->SecNameLen + 1);
- if (SectionItem->PtrSection == NULL) {
- return EFI_OUT_OF_RESOURCES;
- }
-
- CopyMem (SectionItem->PtrSection, PtrSection->PtrSection, PtrSection->SecNameLen + 1);
-
- //
- // EntryName, add a trailing '\0'
- //
- SectionItem->PtrEntry = AllocatePool (Length + 1);
- if (SectionItem->PtrEntry == NULL) {
- FreePool (SectionItem->PtrSection);
- return EFI_OUT_OF_RESOURCES;
- }
-
- CopyMem (SectionItem->PtrEntry, Buffer, Length);
- *(SectionItem->PtrEntry + Length) = '\0';
-
- //
- // Next search for '#' or ';'
- //
- PtrBuf = PtrBuf + 1;
- Buffer = PtrBuf;
- while (PtrBuf <= PtrEnd) {
- if ((*PtrBuf == '#') || (*PtrBuf == ';')) {
- break;
- }
-
- PtrBuf++;
- }
-
- if (PtrBuf <= Buffer) {
- // Empty name
- FreePool (SectionItem->PtrEntry);
- FreePool (SectionItem->PtrSection);
- return EFI_NOT_FOUND;
- }
-
- Length = PtrBuf - Buffer;
- ProfileTrim (
- Buffer,
- &Length
- );
-
- //
- // Invalid line if the entry value is null
- //
- if (Length == 0) {
- FreePool (SectionItem->PtrEntry);
- FreePool (SectionItem->PtrSection);
- return EFI_NOT_FOUND;
- }
-
- if (!IsValidValue ((CHAR8 *)Buffer, Length)) {
- FreePool (SectionItem->PtrEntry);
- FreePool (SectionItem->PtrSection);
- return EFI_INVALID_PARAMETER;
- }
-
- //
- // EntryValue, add a trailing '\0'
- //
- SectionItem->PtrValue = AllocatePool (Length + 1);
- if (SectionItem->PtrValue == NULL) {
- FreePool (SectionItem->PtrEntry);
- FreePool (SectionItem->PtrSection);
- return EFI_OUT_OF_RESOURCES;
- }
-
- CopyMem (SectionItem->PtrValue, Buffer, Length);
- *(SectionItem->PtrValue + Length) = '\0';
-
- return EFI_SUCCESS;
-}
-
-/**
- Free all comment entry and section entry.
-
- @param[in] Section Section entry list.
- @param[in] Comment Comment entry list.
-
-**/
-VOID
-FreeAllList (
- IN SECTION_ITEM *Section,
- IN COMMENT_LINE *Comment
- )
-{
- SECTION_ITEM *PtrSection;
- COMMENT_LINE *PtrComment;
-
- while (Section != NULL) {
- PtrSection = Section;
- Section = Section->PtrNext;
- if (PtrSection->PtrEntry != NULL) {
- FreePool (PtrSection->PtrEntry);
- }
-
- if (PtrSection->PtrSection != NULL) {
- FreePool (PtrSection->PtrSection);
- }
-
- if (PtrSection->PtrValue != NULL) {
- FreePool (PtrSection->PtrValue);
- }
-
- FreePool (PtrSection);
- }
-
- while (Comment != NULL) {
- PtrComment = Comment;
- Comment = Comment->PtrNext;
- if (PtrComment->PtrComment != NULL) {
- FreePool (PtrComment->PtrComment);
- }
-
- FreePool (PtrComment);
- }
-
- return;
-}
-
-/**
- Get section entry value.
-
- @param[in] Section Section entry list.
- @param[in] SectionName Section name.
- @param[in] EntryName Section entry name.
- @param[out] EntryValue Point to the got entry value.
-
- @retval EFI_NOT_FOUND Section is not found.
- @retval EFI_SUCCESS Section entry value is got.
-
-**/
-EFI_STATUS
-UpdateGetProfileString (
- IN SECTION_ITEM *Section,
- IN CHAR8 *SectionName,
- IN CHAR8 *EntryName,
- OUT CHAR8 **EntryValue
- )
-{
- *EntryValue = NULL;
-
- while (Section != NULL) {
- if (AsciiStrCmp ((CONST CHAR8 *)Section->PtrSection, (CONST CHAR8 *)SectionName) == 0) {
- if (Section->PtrEntry != NULL) {
- if (AsciiStrCmp ((CONST CHAR8 *)Section->PtrEntry, (CONST CHAR8 *)EntryName) == 0) {
- break;
- }
- }
- }
-
- Section = Section->PtrNext;
- }
-
- if (Section == NULL) {
- return EFI_NOT_FOUND;
- }
-
- *EntryValue = Section->PtrValue;
-
- return EFI_SUCCESS;
-}
-
-/**
- Pre process config data buffer into Section entry list and Comment entry list.
-
- @param[in] DataBuffer Config raw file buffer.
- @param[in] BufferSize Size of raw buffer.
- @param[in, out] SectionHead Pointer to the section entry list.
- @param[in, out] CommentHead Pointer to the comment entry list.
-
- @retval EFI_OUT_OF_RESOURCES No enough memory is allocated.
- @retval EFI_SUCCESS Config data buffer is preprocessed.
- @retval EFI_NOT_FOUND Config data buffer is invalid, because Section or Entry is not found.
- @retval EFI_INVALID_PARAMETER Config data buffer is invalid, because Section or Entry is invalid.
-
-**/
-EFI_STATUS
-PreProcessDataFile (
- IN UINT8 *DataBuffer,
- IN UINTN BufferSize,
- IN OUT SECTION_ITEM **SectionHead,
- IN OUT COMMENT_LINE **CommentHead
- )
-{
- EFI_STATUS Status;
- CHAR8 *Source;
- CHAR8 *CurrentPtr;
- CHAR8 *BufferEnd;
- CHAR8 *PtrLine;
- UINTN LineLength;
- UINTN SourceLength;
- UINTN MaxLineLength;
-
- *SectionHead = NULL;
- *CommentHead = NULL;
- BufferEnd = (CHAR8 *)((UINTN)DataBuffer + BufferSize);
- CurrentPtr = (CHAR8 *)DataBuffer;
- MaxLineLength = MAX_LINE_LENGTH;
- Status = EFI_SUCCESS;
-
- PtrLine = AllocatePool (MaxLineLength);
- if (PtrLine == NULL) {
- return EFI_OUT_OF_RESOURCES;
- }
-
- while (CurrentPtr < BufferEnd) {
- Source = CurrentPtr;
- SourceLength = (UINTN)BufferEnd - (UINTN)CurrentPtr;
- LineLength = MaxLineLength;
- //
- // With the assumption that line length is less than 512
- // characters. Otherwise BUFFER_TOO_SMALL will be returned.
- //
- Status = ProfileGetLine (
- (UINT8 *)Source,
- SourceLength,
- (UINT8 *)PtrLine,
- &LineLength
- );
- if (EFI_ERROR (Status)) {
- if (Status == EFI_BUFFER_TOO_SMALL) {
- //
- // If buffer too small, re-allocate the buffer according
- // to the returned LineLength and try again.
- //
- FreePool (PtrLine);
- PtrLine = NULL;
- PtrLine = AllocatePool (LineLength);
- if (PtrLine == NULL) {
- Status = EFI_OUT_OF_RESOURCES;
- break;
- }
-
- SourceLength = LineLength;
- Status = ProfileGetLine (
- (UINT8 *)Source,
- SourceLength,
- (UINT8 *)PtrLine,
- &LineLength
- );
- if (EFI_ERROR (Status)) {
- break;
- }
-
- MaxLineLength = LineLength;
- } else {
- break;
- }
- }
-
- CurrentPtr = (CHAR8 *)((UINTN)CurrentPtr + LineLength);
-
- //
- // Line got. Trim the line before processing it.
- //
- ProfileTrim (
- (UINT8 *)PtrLine,
- &LineLength
- );
-
- //
- // Blank line
- //
- if (LineLength == 0) {
- continue;
- }
-
- if ((PtrLine[0] == '#') || (PtrLine[0] == ';')) {
- Status = ProfileGetComments (
- (UINT8 *)PtrLine,
- LineLength,
- CommentHead
- );
- } else if (PtrLine[0] == '[') {
- Status = ProfileGetSection (
- (UINT8 *)PtrLine,
- LineLength,
- SectionHead
- );
- } else {
- Status = ProfileGetEntry (
- (UINT8 *)PtrLine,
- LineLength,
- SectionHead
- );
- }
-
- if (EFI_ERROR (Status)) {
- break;
- }
- }
-
- //
- // Free buffer
- //
- FreePool (PtrLine);
-
- return Status;
-}
-
-/**
- Open an INI config file and return a context.
-
- @param[in] DataBuffer Config raw file buffer.
- @param[in] BufferSize Size of raw buffer.
-
- @return Config data buffer is opened and context is returned.
- @retval NULL No enough memory is allocated.
- @retval NULL Config data buffer is invalid.
-**/
-VOID *
-EFIAPI
-OpenIniFile (
- IN UINT8 *DataBuffer,
- IN UINTN BufferSize
- )
-{
- EFI_STATUS Status;
- INI_PARSING_LIB_CONTEXT *IniContext;
-
- if ((DataBuffer == NULL) || (BufferSize == 0)) {
- return NULL;
- }
-
- IniContext = AllocateZeroPool (sizeof (INI_PARSING_LIB_CONTEXT));
- if (IniContext == NULL) {
- return NULL;
- }
-
- //
- // First process the data buffer and get all sections and entries
- //
- Status = PreProcessDataFile (
- DataBuffer,
- BufferSize,
- &IniContext->SectionHead,
- &IniContext->CommentHead
- );
- if (EFI_ERROR (Status)) {
- FreePool (IniContext);
- return NULL;
- }
-
- DEBUG_CODE_BEGIN ();
- DumpIniSection (IniContext);
- DEBUG_CODE_END ();
- return IniContext;
-}
-
-/**
- Get section entry string value.
-
- @param[in] Context INI Config file context.
- @param[in] SectionName Section name.
- @param[in] EntryName Section entry name.
- @param[out] EntryValue Point to the got entry string value.
-
- @retval EFI_SUCCESS Section entry string value is got.
- @retval EFI_NOT_FOUND Section is not found.
-**/
-EFI_STATUS
-EFIAPI
-GetStringFromDataFile (
- IN VOID *Context,
- IN CHAR8 *SectionName,
- IN CHAR8 *EntryName,
- OUT CHAR8 **EntryValue
- )
-{
- INI_PARSING_LIB_CONTEXT *IniContext;
- EFI_STATUS Status;
-
- if ((Context == NULL) || (SectionName == NULL) || (EntryName == NULL) || (EntryValue == NULL)) {
- return EFI_INVALID_PARAMETER;
- }
-
- IniContext = Context;
-
- *EntryValue = NULL;
- Status = UpdateGetProfileString (
- IniContext->SectionHead,
- SectionName,
- EntryName,
- EntryValue
- );
- return Status;
-}
-
-/**
- Get section entry GUID value.
-
- @param[in] Context INI Config file context.
- @param[in] SectionName Section name.
- @param[in] EntryName Section entry name.
- @param[out] Guid Point to the got GUID value.
-
- @retval EFI_SUCCESS Section entry GUID value is got.
- @retval EFI_NOT_FOUND Section is not found.
-**/
-EFI_STATUS
-EFIAPI
-GetGuidFromDataFile (
- IN VOID *Context,
- IN CHAR8 *SectionName,
- IN CHAR8 *EntryName,
- OUT EFI_GUID *Guid
- )
-{
- CHAR8 *Value;
- EFI_STATUS Status;
- RETURN_STATUS RStatus;
-
- if ((Context == NULL) || (SectionName == NULL) || (EntryName == NULL) || (Guid == NULL)) {
- return EFI_INVALID_PARAMETER;
- }
-
- Status = GetStringFromDataFile (
- Context,
- SectionName,
- EntryName,
- &Value
- );
- if (EFI_ERROR (Status)) {
- return EFI_NOT_FOUND;
- }
-
- ASSERT (Value != NULL);
- RStatus = AsciiStrToGuid (Value, Guid);
- if (RETURN_ERROR (RStatus) || (Value[GUID_STRING_LENGTH] != '\0')) {
- return EFI_NOT_FOUND;
- }
-
- return EFI_SUCCESS;
-}
-
-/**
- Get section entry decimal UINTN value.
-
- @param[in] Context INI Config file context.
- @param[in] SectionName Section name.
- @param[in] EntryName Section entry name.
- @param[out] Data Point to the got decimal UINTN value.
-
- @retval EFI_SUCCESS Section entry decimal UINTN value is got.
- @retval EFI_NOT_FOUND Section is not found.
-**/
-EFI_STATUS
-EFIAPI
-GetDecimalUintnFromDataFile (
- IN VOID *Context,
- IN CHAR8 *SectionName,
- IN CHAR8 *EntryName,
- OUT UINTN *Data
- )
-{
- CHAR8 *Value;
- EFI_STATUS Status;
-
- if ((Context == NULL) || (SectionName == NULL) || (EntryName == NULL) || (Data == NULL)) {
- return EFI_INVALID_PARAMETER;
- }
-
- Status = GetStringFromDataFile (
- Context,
- SectionName,
- EntryName,
- &Value
- );
- if (EFI_ERROR (Status)) {
- return EFI_NOT_FOUND;
- }
-
- ASSERT (Value != NULL);
- if (!IsValidDecimalString (Value, AsciiStrLen (Value))) {
- return EFI_NOT_FOUND;
- }
-
- *Data = AsciiStrDecimalToUintn (Value);
- return EFI_SUCCESS;
-}
-
-/**
- Get section entry hexadecimal UINTN value.
-
- @param[in] Context INI Config file context.
- @param[in] SectionName Section name.
- @param[in] EntryName Section entry name.
- @param[out] Data Point to the got hexadecimal UINTN value.
-
- @retval EFI_SUCCESS Section entry hexadecimal UINTN value is got.
- @retval EFI_NOT_FOUND Section is not found.
-**/
-EFI_STATUS
-EFIAPI
-GetHexUintnFromDataFile (
- IN VOID *Context,
- IN CHAR8 *SectionName,
- IN CHAR8 *EntryName,
- OUT UINTN *Data
- )
-{
- CHAR8 *Value;
- EFI_STATUS Status;
-
- if ((Context == NULL) || (SectionName == NULL) || (EntryName == NULL) || (Data == NULL)) {
- return EFI_INVALID_PARAMETER;
- }
-
- Status = GetStringFromDataFile (
- Context,
- SectionName,
- EntryName,
- &Value
- );
- if (EFI_ERROR (Status)) {
- return EFI_NOT_FOUND;
- }
-
- ASSERT (Value != NULL);
- if (!IsValidHexString (Value, AsciiStrLen (Value))) {
- return EFI_NOT_FOUND;
- }
-
- *Data = AsciiStrHexToUintn (Value);
- return EFI_SUCCESS;
-}
-
-/**
- Get section entry hexadecimal UINT64 value.
-
- @param[in] Context INI Config file context.
- @param[in] SectionName Section name.
- @param[in] EntryName Section entry name.
- @param[out] Data Point to the got hexadecimal UINT64 value.
-
- @retval EFI_SUCCESS Section entry hexadecimal UINT64 value is got.
- @retval EFI_NOT_FOUND Section is not found.
-**/
-EFI_STATUS
-EFIAPI
-GetHexUint64FromDataFile (
- IN VOID *Context,
- IN CHAR8 *SectionName,
- IN CHAR8 *EntryName,
- OUT UINT64 *Data
- )
-{
- CHAR8 *Value;
- EFI_STATUS Status;
-
- if ((Context == NULL) || (SectionName == NULL) || (EntryName == NULL) || (Data == NULL)) {
- return EFI_INVALID_PARAMETER;
- }
-
- Status = GetStringFromDataFile (
- Context,
- SectionName,
- EntryName,
- &Value
- );
- if (EFI_ERROR (Status)) {
- return EFI_NOT_FOUND;
- }
-
- ASSERT (Value != NULL);
- if (!IsValidHexString (Value, AsciiStrLen (Value))) {
- return EFI_NOT_FOUND;
- }
-
- *Data = AsciiStrHexToUint64 (Value);
- return EFI_SUCCESS;
-}
-
-/**
- Close an INI config file and free the context.
-
- @param[in] Context INI Config file context.
-**/
-VOID
-EFIAPI
-CloseIniFile (
- IN VOID *Context
- )
-{
- INI_PARSING_LIB_CONTEXT *IniContext;
-
- if (Context == NULL) {
- return;
- }
-
- IniContext = Context;
- FreeAllList (IniContext->SectionHead, IniContext->CommentHead);
-
- return;
-}
diff --git a/SignedCapsulePkg/Library/IniParsingLib/IniParsingLib.inf b/SignedCapsulePkg/Library/IniParsingLib/IniParsingLib.inf
deleted file mode 100644
index 66af32eea0..0000000000
--- a/SignedCapsulePkg/Library/IniParsingLib/IniParsingLib.inf
+++ /dev/null
@@ -1,37 +0,0 @@
-## @file
-# INI configuration parsing library.
-#
-# This library parses the INI configuration file.
-#
-# Copyright (c) 2016 - 2018, Intel Corporation. All rights reserved.
-# SPDX-License-Identifier: BSD-2-Clause-Patent
-#
-##
-
-[Defines]
- INF_VERSION = 0x00010005
- BASE_NAME = IniParsingLib
- MODULE_UNI_FILE = IniParsingLib.uni
- FILE_GUID = 6E4CD200-43E5-43CE-89E9-D715CF9526C4
- MODULE_TYPE = BASE
- VERSION_STRING = 1.0
- LIBRARY_CLASS = IniParsingLib
-
-#
-# The following information is for reference only and not required by the build tools.
-#
-# VALID_ARCHITECTURES = IA32 X64 EBC
-#
-
-[Sources]
- IniParsingLib.c
-
-[Packages]
- MdePkg/MdePkg.dec
- SignedCapsulePkg/SignedCapsulePkg.dec
-
-[LibraryClasses]
- BaseLib
- BaseMemoryLib
- DebugLib
- MemoryAllocationLib
diff --git a/SignedCapsulePkg/Library/IniParsingLib/IniParsingLib.uni b/SignedCapsulePkg/Library/IniParsingLib/IniParsingLib.uni
deleted file mode 100644
index 1c0f3601a1..0000000000
--- a/SignedCapsulePkg/Library/IniParsingLib/IniParsingLib.uni
+++ /dev/null
@@ -1,16 +0,0 @@
-// /** @file
-// INI configuration parsing library.
-//
-// This library parses the INI configuration file.
-//
-// Copyright (c) 2016, Intel Corporation. All rights reserved.
-//
-// SPDX-License-Identifier: BSD-2-Clause-Patent
-//
-// **/
-
-
-#string STR_MODULE_ABSTRACT #language en-US "INI configuration parsing library."
-
-#string STR_MODULE_DESCRIPTION #language en-US "This library parses the INI configuration file."
-
diff --git a/SignedCapsulePkg/Library/PlatformFlashAccessLibNull/PlatformFlashAccessLibNull.c b/SignedCapsulePkg/Library/PlatformFlashAccessLibNull/PlatformFlashAccessLibNull.c
deleted file mode 100644
index 1a73b5da2e..0000000000
--- a/SignedCapsulePkg/Library/PlatformFlashAccessLibNull/PlatformFlashAccessLibNull.c
+++ /dev/null
@@ -1,101 +0,0 @@
-/** @file
- Platform flash device access library NULL instance.
-
- Copyright (c) 2016 - 2018, Intel Corporation. All rights reserved.
- SPDX-License-Identifier: BSD-2-Clause-Patent
-
-**/
-
-#include
-
-#include
-#include
-
-UINT64 mInternalFdAddress;
-
-/**
- Perform flash write operation with progress indicator. The start and end
- completion percentage values are passed into this function. If the requested
- flash write operation is broken up, then completion percentage between the
- start and end values may be passed to the provided Progress function. The
- caller of this function is required to call the Progress function for the
- start and end completion percentage values. This allows the Progress,
- StartPercentage, and EndPercentage parameters to be ignored if the requested
- flash write operation can not be broken up
-
- @param[in] FirmwareType The type of firmware.
- @param[in] FlashAddress The address of flash device to be accessed.
- @param[in] FlashAddressType The type of flash device address.
- @param[in] Buffer The pointer to the data buffer.
- @param[in] Length The length of data buffer in bytes.
- @param[in] Progress A function used report the progress of the
- firmware update. This is an optional parameter
- that may be NULL.
- @param[in] StartPercentage The start completion percentage value that may
- be used to report progress during the flash
- write operation.
- @param[in] EndPercentage The end completion percentage value that may
- be used to report progress during the flash
- write operation.
-
- @retval EFI_SUCCESS The operation returns successfully.
- @retval EFI_WRITE_PROTECTED The flash device is read only.
- @retval EFI_UNSUPPORTED The flash device access is unsupported.
- @retval EFI_INVALID_PARAMETER The input parameter is not valid.
-**/
-EFI_STATUS
-EFIAPI
-PerformFlashWriteWithProgress (
- IN PLATFORM_FIRMWARE_TYPE FirmwareType,
- IN EFI_PHYSICAL_ADDRESS FlashAddress,
- IN FLASH_ADDRESS_TYPE FlashAddressType,
- IN VOID *Buffer,
- IN UINTN Length,
- IN EFI_FIRMWARE_MANAGEMENT_UPDATE_IMAGE_PROGRESS Progress OPTIONAL,
- IN UINTN StartPercentage,
- IN UINTN EndPercentage
- )
-{
- if (FlashAddressType == FlashAddressTypeRelativeAddress) {
- FlashAddress = FlashAddress + mInternalFdAddress;
- }
-
- CopyMem ((VOID *)(UINTN)(FlashAddress), Buffer, Length);
- return EFI_SUCCESS;
-}
-
-/**
- Perform flash write operation.
-
- @param[in] FirmwareType The type of firmware.
- @param[in] FlashAddress The address of flash device to be accessed.
- @param[in] FlashAddressType The type of flash device address.
- @param[in] Buffer The pointer to the data buffer.
- @param[in] Length The length of data buffer in bytes.
-
- @retval EFI_SUCCESS The operation returns successfully.
- @retval EFI_WRITE_PROTECTED The flash device is read only.
- @retval EFI_UNSUPPORTED The flash device access is unsupported.
- @retval EFI_INVALID_PARAMETER The input parameter is not valid.
-**/
-EFI_STATUS
-EFIAPI
-PerformFlashWrite (
- IN PLATFORM_FIRMWARE_TYPE FirmwareType,
- IN EFI_PHYSICAL_ADDRESS FlashAddress,
- IN FLASH_ADDRESS_TYPE FlashAddressType,
- IN VOID *Buffer,
- IN UINTN Length
- )
-{
- return PerformFlashWriteWithProgress (
- FirmwareType,
- FlashAddress,
- FlashAddressType,
- Buffer,
- Length,
- NULL,
- 0,
- 0
- );
-}
diff --git a/SignedCapsulePkg/Library/PlatformFlashAccessLibNull/PlatformFlashAccessLibNull.inf b/SignedCapsulePkg/Library/PlatformFlashAccessLibNull/PlatformFlashAccessLibNull.inf
deleted file mode 100644
index e9f156b558..0000000000
--- a/SignedCapsulePkg/Library/PlatformFlashAccessLibNull/PlatformFlashAccessLibNull.inf
+++ /dev/null
@@ -1,34 +0,0 @@
-## @file
-# Platform flash device access library.
-#
-# Platform flash device access library NULL instance.
-#
-# Copyright (c) 2016 - 2018, Intel Corporation. All rights reserved.
-# SPDX-License-Identifier: BSD-2-Clause-Patent
-#
-##
-
-[Defines]
- INF_VERSION = 0x00010005
- BASE_NAME = PlatformFlashAccessLibNull
- MODULE_UNI_FILE = PlatformFlashAccessLibNull.uni
- FILE_GUID = A0534D92-9776-4E4E-9234-C9DC1849DBB5
- MODULE_TYPE = BASE
- VERSION_STRING = 1.0
- LIBRARY_CLASS = PlatformFlashAccessLib
-
-#
-# The following information is for reference only and not required by the build tools.
-#
-# VALID_ARCHITECTURES = IA32 X64 EBC
-#
-
-[Sources]
- PlatformFlashAccessLibNull.c
-
-[Packages]
- MdePkg/MdePkg.dec
- SignedCapsulePkg/SignedCapsulePkg.dec
-
-[LibraryClasses]
- BaseMemoryLib
diff --git a/SignedCapsulePkg/Library/PlatformFlashAccessLibNull/PlatformFlashAccessLibNull.uni b/SignedCapsulePkg/Library/PlatformFlashAccessLibNull/PlatformFlashAccessLibNull.uni
deleted file mode 100644
index 573d4265f9..0000000000
--- a/SignedCapsulePkg/Library/PlatformFlashAccessLibNull/PlatformFlashAccessLibNull.uni
+++ /dev/null
@@ -1,16 +0,0 @@
-// /** @file
-// Platform flash device access library.
-//
-// Platform flash device access library NULL instance.
-//
-// Copyright (c) 2016, Intel Corporation. All rights reserved.
-//
-// SPDX-License-Identifier: BSD-2-Clause-Patent
-//
-// **/
-
-
-#string STR_MODULE_ABSTRACT #language en-US "Platform flash device access library."
-
-#string STR_MODULE_DESCRIPTION #language en-US "Platform flash device access library NULL instance."
-
diff --git a/SignedCapsulePkg/Readme.md b/SignedCapsulePkg/Readme.md
deleted file mode 100644
index 88b95a25a8..0000000000
--- a/SignedCapsulePkg/Readme.md
+++ /dev/null
@@ -1,11 +0,0 @@
-# SignedCapsulePkg
-
-This package provides a signed capsule solution in EDKII to support a secure capsule update and recovery solution.
-
-Source Repository: https://github.com/tianocore/edk2/tree/master/SignedCapsulePkg
-
-A whitepaper to describe the capsule design: https://github.com/tianocore-docs/Docs/raw/master/White_Papers/A_Tour_Beyond_BIOS_Capsule_Update_and_Recovery_in_EDK_II.pdf
-
-Wiki page with additional information:
-
-[Capsule-Based Firmware Update and Firmware Recovery](https://www.tianocore.org/tianocore-wiki.github.io/reference/specs-standards/capsule_based_firmware_update_and_firmware_recovery.html)
diff --git a/SignedCapsulePkg/SignedCapsulePkg.ci.yaml b/SignedCapsulePkg/SignedCapsulePkg.ci.yaml
deleted file mode 100644
index e25218f959..0000000000
--- a/SignedCapsulePkg/SignedCapsulePkg.ci.yaml
+++ /dev/null
@@ -1,93 +0,0 @@
-## @file
-# Core CI configuration for SignedCapsulePkg
-#
-# Copyright (c) Microsoft Corporation
-#
-# SPDX-License-Identifier: BSD-2-Clause-Patent
-##
-{
- "PrEval": {
- "DscPath": "SignedCapsulePkg.dsc",
- },
- ## options defined .pytool/Plugin/LicenseCheck
- "LicenseCheck": {
- "IgnoreFiles": []
- },
-
- "EccCheck": {
- ## Exception sample looks like below:
- ## "ExceptionList": [
- ## "", ""
- ## ]
- "ExceptionList": [
- ],
- ## Both file path and directory path are accepted.
- "IgnoreFiles": []
- },
-
- ## options defined .pytool/Plugin/CompilerPlugin
- "CompilerPlugin": {
- "DscPath": "SignedCapsulePkg.dsc"
- },
-
- ## options defined .pytool/Plugin/HostUnitTestCompilerPlugin
- "HostUnitTestCompilerPlugin": {
- "DscPath": "" # Don't support this test
- },
-
- ## options defined .pytool/Plugin/CharEncodingCheck
- "CharEncodingCheck": {
- "IgnoreFiles": []
- },
-
- ## options defined .pytool/Plugin/DependencyCheck
- "DependencyCheck": {
- "AcceptableDependencies": [
- "MdeModulePkg/MdeModulePkg.dec",
- "MdePkg/MdePkg.dec",
- "SecurityPkg/SecurityPkg.dec",
- "SignedCapsulePkg/SignedCapsulePkg.dec"
- ],
- # For host based unit tests
- "AcceptableDependencies-HOST_APPLICATION":[
- "UnitTestFrameworkPkg/UnitTestFrameworkPkg.dec"
- ],
- # For UEFI shell based apps
- "AcceptableDependencies-UEFI_APPLICATION":[],
- "IgnoreInf": []
- },
-
- ## options defined .pytool/Plugin/DscCompleteCheck
- "DscCompleteCheck": {
- "IgnoreInf": [""],
- "DscPath": "SignedCapsulePkg.dsc"
- },
-
- ## options defined .pytool/Plugin/HostUnitTestDscCompleteCheck
- "HostUnitTestDscCompleteCheck": {
- "IgnoreInf": [""],
- "DscPath": "" # Don't support this test
- },
-
- ## options defined .pytool/Plugin/GuidCheck
- "GuidCheck": {
- "IgnoreGuidName": [],
- "IgnoreGuidValue": [],
- "IgnoreFoldersAndFiles": [],
- "IgnoreDuplicates": [],
- },
-
- ## options defined .pytool/Plugin/LibraryClassCheck
- "LibraryClassCheck": {
- "IgnoreHeaderFile": []
- },
-
- ## options defined .pytool/Plugin/SpellCheck
- "SpellCheck": {
- "AuditOnly": True, # Failures need to be reviewed and resolved in the future
- "IgnoreFiles": [], # use gitignore syntax to ignore errors in matching files
- "ExtendWords": [], # words to extend to the dictionary for this package
- "IgnoreStandardPaths": [], # Standard Plugin defined paths that should be ignore
- "AdditionalIncludePaths": [] # Additional paths to spell check (wildcards supported)
- }
-}
diff --git a/SignedCapsulePkg/SignedCapsulePkg.dec b/SignedCapsulePkg/SignedCapsulePkg.dec
deleted file mode 100644
index 04dbf62af4..0000000000
--- a/SignedCapsulePkg/SignedCapsulePkg.dec
+++ /dev/null
@@ -1,74 +0,0 @@
-## @file
-# This package provides EDKII capsule related support.
-#
-# Copyright (c) 2016, Intel Corporation. All rights reserved.
-# SPDX-License-Identifier: BSD-2-Clause-Patent
-#
-##
-
-
-[Defines]
- DEC_SPECIFICATION = 0x00010005
- PACKAGE_NAME = SignedCapsulePkg
- PACKAGE_GUID = 75AA5D82-7BC4-44A9-82FB-0820EBC79BED
- PACKAGE_VERSION = 0.1
-
-[Includes]
- Include
-
-[LibraryClasses]
- ## @libraryclass Provides services for EDKII system FMP capsule.
- #
- EdkiiSystemCapsuleLib|Include/Library/EdkiiSystemCapsuleLib.h
-
- ## @libraryclass Provides services to parse the INI configuration file.
- #
- IniParsingLib|Include/Library/IniParsingLib.h
-
- ## @libraryclass Provides services to access flash device.
- #
- PlatformFlashAccessLib|Include/Library/PlatformFlashAccessLib.h
-
-[Guids]
- gEfiSignedCapsulePkgTokenSpaceGuid = { 0xe1eb612f, 0x1c6c, 0x485d, { 0x9d, 0x6, 0x65, 0x8, 0x44, 0x88, 0x15, 0x69 }}
-
- ## Include/Guid/EdkiiSystemFmpCapsule.h
- gEdkiiSystemFirmwareImageDescriptorFileGuid = {0x90b2b846, 0xca6d, 0x4d6e, {0xa8, 0xd3, 0xc1, 0x40, 0xa8, 0xe1, 0x10, 0xac}}
- gEdkiiSystemFmpCapsuleConfigFileGuid = {0x812136d3, 0x4d3a, 0x433a, {0x94, 0x18, 0x29, 0xbb, 0x9b, 0xf7, 0x8f, 0x6e}}
- gEdkiiSystemFmpCapsuleDriverFvFileGuid = {0xce57b167, 0xb0e4, 0x41e8, {0xa8, 0x97, 0x5f, 0x4f, 0xeb, 0x78, 0x1d, 0x40}}
-
-[PcdsFixedAtBuild, PcdsPatchableInModule, PcdsDynamic, PcdsDynamicEx]
- ## This is the GUID of the FFS which contains the Rsa2048Sha256TestPublicKeyFile as a RAW section.
- # @Prompt GUID of the FFS which contains the Rsa2048Sha256TestPublicKeyFile.
- gEfiSignedCapsulePkgTokenSpaceGuid.PcdEdkiiRsa2048Sha256TestPublicKeyFileGuid|{0x04, 0xe1, 0xfe, 0xc4, 0x57, 0x66, 0x36, 0x49, 0xa6, 0x11, 0x13, 0x8d, 0xbc, 0x2a, 0x76, 0xad}|VOID*|0xA0010001
-
- ## This is the GUID of the FFS which contains the Pkcs7TestPublicKeyFile as a RAW section.
- # @Prompt GUID of the FFS which contains the Pkcs7TestPublicKeyFile.
- gEfiSignedCapsulePkgTokenSpaceGuid.PcdEdkiiPkcs7TestPublicKeyFileGuid|{0xba, 0xf5, 0x93, 0xf0, 0x37, 0x6f, 0x16, 0x48, 0x9e, 0x52, 0x91, 0xbe, 0xa0, 0xf7, 0xe0, 0xb8}|VOID*|0xA0010002
-
- ## This is the lowest supported version number that can be upgraded to, as exposed via the System Firmware descriptor.
- # @Prompt Lowest support version number that can be upgraded to via capsule update
- gEfiSignedCapsulePkgTokenSpaceGuid.PcdLowestSupportedFirmwareVersion|0x1|UINT32|0xA0010003
-
-[PcdsDynamicEx]
- ## This dynamic PCD holds the EDKII system firmware image descriptor.
- # This information can be used for version check in EDKII system FMP capsule.
- # Only if the new EdkiiSystemFirmwareImageDescriptor.Version is not less than
- # the current PcdEdkiiSystemFirmwareImageDescriptor.LowestSupportedVersion,
- # the EDKII system FmpCapsule will be processed.
- # The data structure of this PCD is EDKII_SYSTEM_FIRMWARE_IMAGE_DESCRIPTOR,
- # SignedCapsulePkg/Include/Guid/EdkiiSystemFmpCapsule.h.
- # It must be in [PcdsDynamicEx], because the EDKII system firmware update module may
- # consume the PCD produced in current system firmware.
- # @Prompt EDKII system firmware image descriptor.
- gEfiSignedCapsulePkgTokenSpaceGuid.PcdEdkiiSystemFirmwareImageDescriptor|{0x0}|VOID*|0x00000037
-
- ## This dynamic PCD hold the GUID of a firmware FFS which includes EDKII
- # system firmware image.
- # An EDKII system firmware update module need consume this PCD to extract
- # the EDKII system firmware from the capsule image.
- # It must be in [PcdsDynamicEx], because the EDKII system firmware update module may
- # consume the PCD produced in current system firmware image.
- # @Prompt EDKII system firmware image FFS GUID.
- gEfiSignedCapsulePkgTokenSpaceGuid.PcdEdkiiSystemFirmwareFileGuid|{0x0}|VOID*|0x00001010
-
diff --git a/SignedCapsulePkg/SignedCapsulePkg.dsc b/SignedCapsulePkg/SignedCapsulePkg.dsc
deleted file mode 100644
index f9e88be8dc..0000000000
--- a/SignedCapsulePkg/SignedCapsulePkg.dsc
+++ /dev/null
@@ -1,238 +0,0 @@
-## @file
-# This package provides EDKII capsule related support.
-#
-# Copyright (c) 2016 - 2021, Intel Corporation. All rights reserved.
-#
-# SPDX-License-Identifier: BSD-2-Clause-Patent
-#
-##
-
-[Defines]
- PLATFORM_NAME = SignedCapsulePkg
- PLATFORM_GUID = 164E16D7-B56A-416D-92FF-0A63983733F6
- PLATFORM_VERSION = 0.96
- DSC_SPECIFICATION = 0x00010005
- OUTPUT_DIRECTORY = Build/SignedCapsulePkg
- SUPPORTED_ARCHITECTURES = AARCH64|IA32|X64
- BUILD_TARGETS = DEBUG|RELEASE|NOOPT
- SKUID_IDENTIFIER = DEFAULT
-
-!include MdePkg/MdeLibs.dsc.inc
-
-[LibraryClasses]
- #
- # Entry point
- #
- PeiCoreEntryPoint|MdePkg/Library/PeiCoreEntryPoint/PeiCoreEntryPoint.inf
- PeimEntryPoint|MdePkg/Library/PeimEntryPoint/PeimEntryPoint.inf
- DxeCoreEntryPoint|MdePkg/Library/DxeCoreEntryPoint/DxeCoreEntryPoint.inf
- UefiDriverEntryPoint|MdePkg/Library/UefiDriverEntryPoint/UefiDriverEntryPoint.inf
- UefiApplicationEntryPoint|MdePkg/Library/UefiApplicationEntryPoint/UefiApplicationEntryPoint.inf
- #
- # Basic
- #
- BaseLib|MdePkg/Library/BaseLib/BaseLib.inf
- BaseMemoryLib|MdePkg/Library/BaseMemoryLib/BaseMemoryLib.inf
- SynchronizationLib|MdePkg/Library/BaseSynchronizationLib/BaseSynchronizationLib.inf
- PrintLib|MdePkg/Library/BasePrintLib/BasePrintLib.inf
- IoLib|MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsic.inf
- PciLib|MdePkg/Library/BasePciLibCf8/BasePciLibCf8.inf
- PciCf8Lib|MdePkg/Library/BasePciCf8Lib/BasePciCf8Lib.inf
- PciSegmentLib|MdePkg/Library/BasePciSegmentLibPci/BasePciSegmentLibPci.inf
- CacheMaintenanceLib|MdePkg/Library/BaseCacheMaintenanceLib/BaseCacheMaintenanceLib.inf
- PeCoffLib|MdePkg/Library/BasePeCoffLib/BasePeCoffLib.inf
- PeCoffGetEntryPointLib|MdePkg/Library/BasePeCoffGetEntryPointLib/BasePeCoffGetEntryPointLib.inf
- SortLib|MdeModulePkg/Library/BaseSortLib/BaseSortLib.inf
- #
- # UEFI & PI
- #
- UefiBootServicesTableLib|MdePkg/Library/UefiBootServicesTableLib/UefiBootServicesTableLib.inf
- UefiRuntimeServicesTableLib|MdePkg/Library/UefiRuntimeServicesTableLib/UefiRuntimeServicesTableLib.inf
- UefiRuntimeLib|MdePkg/Library/UefiRuntimeLib/UefiRuntimeLib.inf
- UefiLib|MdePkg/Library/UefiLib/UefiLib.inf
- UefiHiiServicesLib|MdeModulePkg/Library/UefiHiiServicesLib/UefiHiiServicesLib.inf
- HiiLib|MdeModulePkg/Library/UefiHiiLib/UefiHiiLib.inf
- DevicePathLib|MdePkg/Library/UefiDevicePathLib/UefiDevicePathLib.inf
- UefiDecompressLib|MdePkg/Library/BaseUefiDecompressLib/BaseUefiDecompressLib.inf
- PeiServicesTablePointerLib|MdePkg/Library/PeiServicesTablePointerLib/PeiServicesTablePointerLib.inf
- PeiServicesLib|MdePkg/Library/PeiServicesLib/PeiServicesLib.inf
- DxeServicesLib|MdePkg/Library/DxeServicesLib/DxeServicesLib.inf
- DxeServicesTableLib|MdePkg/Library/DxeServicesTableLib/DxeServicesTableLib.inf
- #
- # Generic Modules
- #
- UefiUsbLib|MdePkg/Library/UefiUsbLib/UefiUsbLib.inf
- UefiScsiLib|MdePkg/Library/UefiScsiLib/UefiScsiLib.inf
- SecurityManagementLib|MdeModulePkg/Library/DxeSecurityManagementLib/DxeSecurityManagementLib.inf
- TimerLib|MdePkg/Library/BaseTimerLibNullTemplate/BaseTimerLibNullTemplate.inf
- SerialPortLib|MdePkg/Library/BaseSerialPortLibNull/BaseSerialPortLibNull.inf
- CapsuleLib|MdeModulePkg/Library/DxeCapsuleLibNull/DxeCapsuleLibNull.inf
- PcdLib|MdePkg/Library/BasePcdLibNull/BasePcdLibNull.inf
- CustomizedDisplayLib|MdeModulePkg/Library/CustomizedDisplayLib/CustomizedDisplayLib.inf
- #
- # Misc
- #
- DebugLib|MdePkg/Library/BaseDebugLibNull/BaseDebugLibNull.inf
- DebugPrintErrorLevelLib|MdePkg/Library/BaseDebugPrintErrorLevelLib/BaseDebugPrintErrorLevelLib.inf
- ReportStatusCodeLib|MdePkg/Library/BaseReportStatusCodeLibNull/BaseReportStatusCodeLibNull.inf
- PeCoffExtraActionLib|MdePkg/Library/BasePeCoffExtraActionLibNull/BasePeCoffExtraActionLibNull.inf
- PerformanceLib|MdePkg/Library/BasePerformanceLibNull/BasePerformanceLibNull.inf
- DebugAgentLib|MdeModulePkg/Library/DebugAgentLibNull/DebugAgentLibNull.inf
- PlatformHookLib|MdeModulePkg/Library/BasePlatformHookLibNull/BasePlatformHookLibNull.inf
- ResetSystemLib|MdeModulePkg/Library/BaseResetSystemLibNull/BaseResetSystemLibNull.inf
- SmbusLib|MdePkg/Library/DxeSmbusLib/DxeSmbusLib.inf
- S3BootScriptLib|MdeModulePkg/Library/PiDxeS3BootScriptLib/DxeS3BootScriptLib.inf
- CpuExceptionHandlerLib|MdeModulePkg/Library/CpuExceptionHandlerLibNull/CpuExceptionHandlerLibNull.inf
- PlatformBootManagerLib|MdeModulePkg/Library/PlatformBootManagerLibNull/PlatformBootManagerLibNull.inf
- PciHostBridgeLib|MdeModulePkg/Library/PciHostBridgeLibNull/PciHostBridgeLibNull.inf
- TpmMeasurementLib|MdeModulePkg/Library/TpmMeasurementLibNull/TpmMeasurementLibNull.inf
- AuthVariableLib|MdeModulePkg/Library/AuthVariableLibNull/AuthVariableLibNull.inf
- VarCheckLib|MdeModulePkg/Library/VarCheckLib/VarCheckLib.inf
- FileExplorerLib|MdeModulePkg/Library/FileExplorerLib/FileExplorerLib.inf
-
- EdkiiSystemCapsuleLib|SignedCapsulePkg/Library/EdkiiSystemCapsuleLib/EdkiiSystemCapsuleLib.inf
- IniParsingLib|SignedCapsulePkg/Library/IniParsingLib/IniParsingLib.inf
- PlatformFlashAccessLib|SignedCapsulePkg/Library/PlatformFlashAccessLibNull/PlatformFlashAccessLibNull.inf
- RngLib|MdePkg/Library/BaseRngLib/BaseRngLib.inf
-
-[LibraryClasses.RISCV64]
- RngLib|MdeModulePkg/Library/BaseRngLibTimerLib/BaseRngLibTimerLib.inf
-
-[LibraryClasses.common.PEI_CORE]
- HobLib|MdePkg/Library/PeiHobLib/PeiHobLib.inf
- MemoryAllocationLib|MdePkg/Library/PeiMemoryAllocationLib/PeiMemoryAllocationLib.inf
-
-[LibraryClasses.common.PEIM]
- HobLib|MdePkg/Library/PeiHobLib/PeiHobLib.inf
- MemoryAllocationLib|MdePkg/Library/PeiMemoryAllocationLib/PeiMemoryAllocationLib.inf
- LockBoxLib|MdeModulePkg/Library/SmmLockBoxLib/SmmLockBoxPeiLib.inf
-!ifdef CONTINUOUS_INTEGRATION
- BaseCryptLib|CryptoPkg/Library/BaseCryptLibNull/BaseCryptLibNull.inf
-!else
- IntrinsicLib|CryptoPkg/Library/IntrinsicLib/IntrinsicLib.inf
- OpensslLib|CryptoPkg/Library/OpensslLib/OpensslLib.inf
- BaseCryptLib|CryptoPkg/Library/BaseCryptLib/PeiCryptLib.inf
-!endif
-
-[LibraryClasses.common.DXE_CORE]
- HobLib|MdePkg/Library/DxeCoreHobLib/DxeCoreHobLib.inf
- MemoryAllocationLib|MdeModulePkg/Library/DxeCoreMemoryAllocationLib/DxeCoreMemoryAllocationLib.inf
-
-[LibraryClasses.common.DXE_DRIVER]
- HobLib|MdePkg/Library/DxeHobLib/DxeHobLib.inf
- MemoryAllocationLib|MdePkg/Library/UefiMemoryAllocationLib/UefiMemoryAllocationLib.inf
-!ifdef CONTINUOUS_INTEGRATION
- BaseCryptLib|CryptoPkg/Library/BaseCryptLibNull/BaseCryptLibNull.inf
-!else
- IntrinsicLib|CryptoPkg/Library/IntrinsicLib/IntrinsicLib.inf
- OpensslLib|CryptoPkg/Library/OpensslLib/OpensslLib.inf
- BaseCryptLib|CryptoPkg/Library/BaseCryptLib/BaseCryptLib.inf
-!endif
-
- CapsuleLib|MdeModulePkg/Library/DxeCapsuleLibFmp/DxeCapsuleLib.inf
-
-[LibraryClasses.common.DXE_RUNTIME_DRIVER]
- HobLib|MdePkg/Library/DxeHobLib/DxeHobLib.inf
- MemoryAllocationLib|MdePkg/Library/UefiMemoryAllocationLib/UefiMemoryAllocationLib.inf
- DebugLib|MdePkg/Library/UefiDebugLibConOut/UefiDebugLibConOut.inf
-!ifdef CONTINUOUS_INTEGRATION
- BaseCryptLib|CryptoPkg/Library/BaseCryptLibNull/BaseCryptLibNull.inf
-!else
- IntrinsicLib|CryptoPkg/Library/IntrinsicLib/IntrinsicLib.inf
- OpensslLib|CryptoPkg/Library/OpensslLib/OpensslLib.inf
- BaseCryptLib|CryptoPkg/Library/BaseCryptLib/RuntimeCryptLib.inf
-!endif
-
- CapsuleLib|MdeModulePkg/Library/DxeCapsuleLibFmp/DxeRuntimeCapsuleLib.inf
-
-[LibraryClasses.common.SMM_CORE]
- HobLib|MdePkg/Library/DxeHobLib/DxeHobLib.inf
- MemoryAllocationLib|MdeModulePkg/Library/PiSmmCoreMemoryAllocationLib/PiSmmCoreMemoryAllocationLib.inf
- SmmServicesTableLib|MdeModulePkg/Library/PiSmmCoreSmmServicesTableLib/PiSmmCoreSmmServicesTableLib.inf
- SmmCorePlatformHookLib|MdeModulePkg/Library/SmmCorePlatformHookLibNull/SmmCorePlatformHookLibNull.inf
- SmmMemLib|MdePkg/Library/SmmMemLib/SmmMemLib.inf
-
-[LibraryClasses.common.DXE_SMM_DRIVER]
- HobLib|MdePkg/Library/DxeHobLib/DxeHobLib.inf
- DebugLib|MdePkg/Library/BaseDebugLibNull/BaseDebugLibNull.inf
- MemoryAllocationLib|MdePkg/Library/SmmMemoryAllocationLib/SmmMemoryAllocationLib.inf
- SmmServicesTableLib|MdePkg/Library/SmmServicesTableLib/SmmServicesTableLib.inf
- SmmMemLib|MdePkg/Library/SmmMemLib/SmmMemLib.inf
-!ifdef CONTINUOUS_INTEGRATION
- BaseCryptLib|CryptoPkg/Library/BaseCryptLibNull/BaseCryptLibNull.inf
-!else
- IntrinsicLib|CryptoPkg/Library/IntrinsicLib/IntrinsicLib.inf
- OpensslLib|CryptoPkg/Library/OpensslLib/OpensslLib.inf
- BaseCryptLib|CryptoPkg/Library/BaseCryptLib/SmmCryptLib.inf
-!endif
-
-[LibraryClasses.common.UEFI_DRIVER]
- HobLib|MdePkg/Library/DxeHobLib/DxeHobLib.inf
- MemoryAllocationLib|MdePkg/Library/UefiMemoryAllocationLib/UefiMemoryAllocationLib.inf
- DebugLib|MdePkg/Library/UefiDebugLibConOut/UefiDebugLibConOut.inf
-!ifdef CONTINUOUS_INTEGRATION
- BaseCryptLib|CryptoPkg/Library/BaseCryptLibNull/BaseCryptLibNull.inf
-!else
- IntrinsicLib|CryptoPkg/Library/IntrinsicLib/IntrinsicLib.inf
- OpensslLib|CryptoPkg/Library/OpensslLib/OpensslLib.inf
- BaseCryptLib|CryptoPkg/Library/BaseCryptLib/BaseCryptLib.inf
-!endif
-
-[LibraryClasses.common.UEFI_APPLICATION]
- HobLib|MdePkg/Library/DxeHobLib/DxeHobLib.inf
- MemoryAllocationLib|MdePkg/Library/UefiMemoryAllocationLib/UefiMemoryAllocationLib.inf
- DebugLib|MdePkg/Library/UefiDebugLibStdErr/UefiDebugLibStdErr.inf
-!ifdef CONTINUOUS_INTEGRATION
- BaseCryptLib|CryptoPkg/Library/BaseCryptLibNull/BaseCryptLibNull.inf
-!else
- IntrinsicLib|CryptoPkg/Library/IntrinsicLib/IntrinsicLib.inf
- OpensslLib|CryptoPkg/Library/OpensslLib/OpensslLib.inf
- BaseCryptLib|CryptoPkg/Library/BaseCryptLib/BaseCryptLib.inf
-!endif
-
-[PcdsFixedAtBuild]
- gEfiMdePkgTokenSpaceGuid.PcdDebugPropertyMask|0x0f
- gEfiMdePkgTokenSpaceGuid.PcdReportStatusCodePropertyMask|0x06
-
-[PcdsDynamicExDefault]
- gEfiSignedCapsulePkgTokenSpaceGuid.PcdEdkiiSystemFirmwareImageDescriptor|{0x0}|VOID*|0x100
-
-###################################################################################################
-#
-# Components Section - list of the modules and components that will be processed by compilation
-# tools and the EDK II tools to generate PE32/PE32+/Coff image files.
-#
-# Note: The EDK II DSC file is not used to specify how compiled binary images get placed
-# into firmware volume images. This section is just a list of modules to compile from
-# source into UEFI-compliant binaries.
-# It is the FDF file that contains information on combining binary files into firmware
-# volume images, whose concept is beyond UEFI and is described in PI specification.
-# Binary modules do not need to be listed in this section, as they should be
-# specified in the FDF file. For example: Shell binary (Shell_Full.efi), FAT binary (Fat.efi),
-# Logo (Logo.bmp), and etc.
-# There may also be modules listed in this section that are not required in the FDF file,
-# When a module listed here is excluded from FDF file, then UEFI-compliant binary will be
-# generated for it, but the binary will not be put into any firmware volume.
-#
-###################################################################################################
-
-[Components]
- SignedCapsulePkg/Library/EdkiiSystemCapsuleLib/EdkiiSystemCapsuleLib.inf
- SignedCapsulePkg/Library/IniParsingLib/IniParsingLib.inf
- SignedCapsulePkg/Library/PlatformFlashAccessLibNull/PlatformFlashAccessLibNull.inf
-
- SignedCapsulePkg/Universal/SystemFirmwareUpdate/SystemFirmwareReportDxe.inf {
-
- FmpAuthenticationLib|SecurityPkg/Library/FmpAuthenticationLibPkcs7/FmpAuthenticationLibPkcs7.inf
- }
- SignedCapsulePkg/Universal/SystemFirmwareUpdate/SystemFirmwareUpdateDxe.inf {
-
- FmpAuthenticationLib|SecurityPkg/Library/FmpAuthenticationLibPkcs7/FmpAuthenticationLibPkcs7.inf
- }
- SignedCapsulePkg/Universal/RecoveryModuleLoadPei/RecoveryModuleLoadPei.inf {
-
- FmpAuthenticationLib|SecurityPkg/Library/FmpAuthenticationLibRsa2048Sha256/FmpAuthenticationLibRsa2048Sha256.inf
- }
-
-[BuildOptions]
- *_*_*_CC_FLAGS = -D DISABLE_NEW_DEPRECATED_INTERFACES
diff --git a/SignedCapsulePkg/Universal/RecoveryModuleLoadPei/ParseConfigProfile.c b/SignedCapsulePkg/Universal/RecoveryModuleLoadPei/ParseConfigProfile.c
deleted file mode 100644
index 3d4066f847..0000000000
--- a/SignedCapsulePkg/Universal/RecoveryModuleLoadPei/ParseConfigProfile.c
+++ /dev/null
@@ -1,163 +0,0 @@
-/** @file
- Parse the INI configuration file and pass the information to the recovery driver
- so that the driver can perform recovery accordingly.
-
- Copyright (c) 2016 - 2017, Intel Corporation. All rights reserved.
-
- SPDX-License-Identifier: BSD-2-Clause-Patent
-
-**/
-
-#include "RecoveryModuleLoadPei.h"
-#include
-#include
-
-#define MAX_LINE_LENGTH 512
-
-/**
- Parse Config data file to get the updated data array.
-
- @param[in] DataBuffer Config raw file buffer.
- @param[in] BufferSize Size of raw buffer.
- @param[in, out] ConfigHeader Pointer to the config header.
- @param[in, out] RecoveryArray Pointer to the config of recovery data.
-
- @retval EFI_NOT_FOUND No config data is found.
- @retval EFI_OUT_OF_RESOURCES No enough memory is allocated.
- @retval EFI_SUCCESS Parse the config file successfully.
-
-**/
-EFI_STATUS
-ParseRecoveryDataFile (
- IN UINT8 *DataBuffer,
- IN UINTN BufferSize,
- IN OUT CONFIG_HEADER *ConfigHeader,
- IN OUT RECOVERY_CONFIG_DATA **RecoveryArray
- )
-{
- EFI_STATUS Status;
- CHAR8 *SectionName;
- CHAR8 Entry[MAX_LINE_LENGTH];
- UINTN Num;
- UINTN Index;
- EFI_GUID FileGuid;
- VOID *Context;
-
- //
- // First process the data buffer and get all sections and entries
- //
- Context = OpenIniFile (DataBuffer, BufferSize);
- if (Context == NULL) {
- return EFI_INVALID_PARAMETER;
- }
-
- //
- // Now get NumOfUpdate
- //
- Status = GetDecimalUintnFromDataFile (
- Context,
- "Head",
- "NumOfRecovery",
- &Num
- );
- if (EFI_ERROR (Status) || (Num == 0)) {
- DEBUG ((DEBUG_ERROR, "NumOfRecovery not found\n"));
- CloseIniFile (Context);
- return EFI_NOT_FOUND;
- }
-
- ConfigHeader->NumOfRecovery = Num;
- *RecoveryArray = AllocateZeroPool ((sizeof (RECOVERY_CONFIG_DATA) * Num));
- if (*RecoveryArray == NULL) {
- CloseIniFile (Context);
- return EFI_OUT_OF_RESOURCES;
- }
-
- for (Index = 0; Index < ConfigHeader->NumOfRecovery; Index++) {
- //
- // Get the section name of each update
- //
- AsciiStrCpyS (Entry, MAX_LINE_LENGTH, "Recovery");
- AsciiValueToStringS (
- Entry + AsciiStrnLenS (Entry, MAX_LINE_LENGTH),
- MAX_LINE_LENGTH - AsciiStrnLenS (Entry, MAX_LINE_LENGTH),
- 0,
- Index,
- 0
- );
- Status = GetStringFromDataFile (
- Context,
- "Head",
- Entry,
- &SectionName
- );
- if (EFI_ERROR (Status) || (SectionName == NULL)) {
- DEBUG ((DEBUG_ERROR, "[%d] %a not found\n", Index, Entry));
- CloseIniFile (Context);
- return EFI_NOT_FOUND;
- }
-
- //
- // The section name of this update has been found.
- // Now looks for all the config data of this update
- //
-
- //
- // FileGuid
- //
- Status = GetGuidFromDataFile (
- Context,
- SectionName,
- "FileGuid",
- &FileGuid
- );
- if (EFI_ERROR (Status)) {
- CloseIniFile (Context);
- DEBUG ((DEBUG_ERROR, "[%d] FileGuid not found\n", Index));
- return EFI_NOT_FOUND;
- }
-
- CopyGuid (&((*RecoveryArray)[Index].FileGuid), &FileGuid);
-
- //
- // Length
- //
- Status = GetHexUintnFromDataFile (
- Context,
- SectionName,
- "Length",
- &Num
- );
- if (EFI_ERROR (Status)) {
- CloseIniFile (Context);
- DEBUG ((DEBUG_ERROR, "[%d] Length not found\n", Index));
- return EFI_NOT_FOUND;
- }
-
- (*RecoveryArray)[Index].Length = Num;
-
- //
- // ImageOffset
- //
- Status = GetHexUintnFromDataFile (
- Context,
- SectionName,
- "ImageOffset",
- &Num
- );
- if (EFI_ERROR (Status)) {
- CloseIniFile (Context);
- DEBUG ((DEBUG_ERROR, "[%d] ImageOffset not found\n", Index));
- return EFI_NOT_FOUND;
- }
-
- (*RecoveryArray)[Index].ImageOffset = Num;
- }
-
- //
- // Now all configuration data got. Free those temporary buffers
- //
- CloseIniFile (Context);
-
- return EFI_SUCCESS;
-}
diff --git a/SignedCapsulePkg/Universal/RecoveryModuleLoadPei/RecoveryModuleLoadPei.c b/SignedCapsulePkg/Universal/RecoveryModuleLoadPei/RecoveryModuleLoadPei.c
deleted file mode 100644
index b361e90d25..0000000000
--- a/SignedCapsulePkg/Universal/RecoveryModuleLoadPei/RecoveryModuleLoadPei.c
+++ /dev/null
@@ -1,833 +0,0 @@
-/** @file
- Recovery module.
-
- Caution: This module requires additional review when modified.
- This module will have external input - capsule image.
- This external input must be validated carefully to avoid security issue like
- buffer overflow, integer overflow.
-
- ProcessRecoveryCapsule(), ProcessFmpCapsuleImage(), ProcessRecoveryImage(),
- ValidateFmpCapsule() will receive untrusted input and do basic validation.
-
-Copyright (c) 2016 - 2019, Intel Corporation. All rights reserved.
-SPDX-License-Identifier: BSD-2-Clause-Patent
-
-**/
-
-//
-// The package level header files this module uses
-//
-#include
-#include
-//
-// The protocols, PPI and GUID definitions for this module
-//
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-
-//
-// The Library classes this module consumes
-//
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-
-#include "RecoveryModuleLoadPei.h"
-
-/**
- Loads a DXE capsule from some media into memory and updates the HOB table
- with the DXE firmware volume information.
-
- @param[in] PeiServices General-purpose services that are available to every PEIM.
- @param[in] This Indicates the EFI_PEI_RECOVERY_MODULE_PPI instance.
-
- @retval EFI_SUCCESS The capsule was loaded correctly.
- @retval EFI_DEVICE_ERROR A device error occurred.
- @retval EFI_NOT_FOUND A recovery DXE capsule cannot be found.
-
-**/
-EFI_STATUS
-EFIAPI
-LoadRecoveryCapsule (
- IN EFI_PEI_SERVICES **PeiServices,
- IN EFI_PEI_RECOVERY_MODULE_PPI *This
- );
-
-EFI_PEI_RECOVERY_MODULE_PPI mRecoveryPpi = {
- LoadRecoveryCapsule
-};
-
-EFI_PEI_PPI_DESCRIPTOR mRecoveryPpiList = {
- (EFI_PEI_PPI_DESCRIPTOR_PPI | EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST),
- &gEfiPeiRecoveryModulePpiGuid,
- &mRecoveryPpi
-};
-
-/**
- Parse Config data file to get the updated data array.
-
- @param[in] DataBuffer Config raw file buffer.
- @param[in] BufferSize Size of raw buffer.
- @param[in, out] ConfigHeader Pointer to the config header.
- @param[in, out] RecoveryArray Pointer to the config of recovery data.
-
- @retval EFI_NOT_FOUND No config data is found.
- @retval EFI_OUT_OF_RESOURCES No enough memory is allocated.
- @retval EFI_SUCCESS Parse the config file successfully.
-
-**/
-EFI_STATUS
-ParseRecoveryDataFile (
- IN UINT8 *DataBuffer,
- IN UINTN BufferSize,
- IN OUT CONFIG_HEADER *ConfigHeader,
- IN OUT RECOVERY_CONFIG_DATA **RecoveryArray
- );
-
-/**
- Return if this FMP is a system FMP or a device FMP, based upon FmpImageInfo.
-
- @param[in] FmpImageHeader A pointer to EFI_FIRMWARE_MANAGEMENT_CAPSULE_IMAGE_HEADER
-
- @return TRUE It is a system FMP.
- @return FALSE It is a device FMP.
-**/
-BOOLEAN
-IsSystemFmpImage (
- IN EFI_FIRMWARE_MANAGEMENT_CAPSULE_IMAGE_HEADER *FmpImageHeader
- )
-{
- GUID *Guid;
- UINTN Count;
- UINTN Index;
-
- Guid = PcdGetPtr (PcdSystemFmpCapsuleImageTypeIdGuid);
- Count = PcdGetSize (PcdSystemFmpCapsuleImageTypeIdGuid) / sizeof (GUID);
-
- for (Index = 0; Index < Count; Index++, Guid++) {
- if (CompareGuid (&FmpImageHeader->UpdateImageTypeId, Guid)) {
- return TRUE;
- }
- }
-
- return FALSE;
-}
-
-/**
- Return if this CapsuleGuid is a FMP capsule GUID or not.
-
- @param[in] CapsuleGuid A pointer to EFI_GUID
-
- @return TRUE It is a FMP capsule GUID.
- @return FALSE It is not a FMP capsule GUID.
-**/
-BOOLEAN
-IsFmpCapsuleGuid (
- IN EFI_GUID *CapsuleGuid
- )
-{
- if (CompareGuid (&gEfiFmpCapsuleGuid, CapsuleGuid)) {
- return TRUE;
- }
-
- return FALSE;
-}
-
-/**
- This function assumes the input Capsule image already passes basic check in
- ValidateFmpCapsule().
-
- Criteria of system FMP capsule is:
- 1) FmpCapsuleHeader->EmbeddedDriverCount is 0.
- 2) FmpCapsuleHeader->PayloadItemCount is not 0.
- 3) All ImageHeader->UpdateImageTypeId matches PcdSystemFmpCapsuleImageTypeIdGuid.
-
- @param[in] CapsuleHeader Points to a capsule header.
-
- @retval TRUE Input capsule is a correct system FMP capsule.
- @retval FALSE Input capsule is not a correct system FMP capsule.
-**/
-BOOLEAN
-IsSystemFmpCapsuleImage (
- IN EFI_CAPSULE_HEADER *CapsuleHeader
- )
-{
- EFI_FIRMWARE_MANAGEMENT_CAPSULE_HEADER *FmpCapsuleHeader;
- EFI_FIRMWARE_MANAGEMENT_CAPSULE_IMAGE_HEADER *ImageHeader;
- UINT64 *ItemOffsetList;
- UINT32 ItemNum;
- UINTN Index;
-
- FmpCapsuleHeader = (EFI_FIRMWARE_MANAGEMENT_CAPSULE_HEADER *)((UINT8 *)CapsuleHeader + CapsuleHeader->HeaderSize);
-
- if (FmpCapsuleHeader->EmbeddedDriverCount != 0) {
- return FALSE;
- }
-
- if (FmpCapsuleHeader->PayloadItemCount == 0) {
- return FALSE;
- }
-
- ItemNum = FmpCapsuleHeader->EmbeddedDriverCount + FmpCapsuleHeader->PayloadItemCount;
-
- ItemOffsetList = (UINT64 *)(FmpCapsuleHeader + 1);
-
- for (Index = 0; Index < ItemNum; Index++) {
- ImageHeader = (EFI_FIRMWARE_MANAGEMENT_CAPSULE_IMAGE_HEADER *)((UINT8 *)FmpCapsuleHeader + ItemOffsetList[Index]);
- if (!IsSystemFmpImage (ImageHeader)) {
- return FALSE;
- }
- }
-
- return TRUE;
-}
-
-/**
- Validate if it is valid capsule header
-
- This function assumes the caller provided correct CapsuleHeader pointer
- and CapsuleSize.
-
- This function validates the fields in EFI_CAPSULE_HEADER.
-
- @param[in] CapsuleHeader Points to a capsule header.
- @param[in] CapsuleSize Size of the whole capsule image.
-
-**/
-BOOLEAN
-IsValidCapsuleHeader (
- IN EFI_CAPSULE_HEADER *CapsuleHeader,
- IN UINT64 CapsuleSize
- )
-{
- if (CapsuleHeader->CapsuleImageSize != CapsuleSize) {
- return FALSE;
- }
-
- if (CapsuleHeader->HeaderSize >= CapsuleHeader->CapsuleImageSize) {
- return FALSE;
- }
-
- return TRUE;
-}
-
-/**
- Validate Fmp capsules layout.
-
- Caution: This function may receive untrusted input.
-
- This function assumes the caller validated the capsule by using
- IsValidCapsuleHeader(), so that all fields in EFI_CAPSULE_HEADER are correct.
- The capsule buffer size is CapsuleHeader->CapsuleImageSize.
-
- This function validates the fields in EFI_FIRMWARE_MANAGEMENT_CAPSULE_HEADER
- and EFI_FIRMWARE_MANAGEMENT_CAPSULE_IMAGE_HEADER.
-
- @param[in] CapsuleHeader Points to a capsule header.
- @param[out] IsSystemFmp If it is a system FMP.
- @param[out] EmbeddedDriverCount The EmbeddedDriverCount in the FMP capsule.
-
- @retval EFI_SUCCESS Input capsule is a correct FMP capsule.
- @retval EFI_INVALID_PARAMETER Input capsule is not a correct FMP capsule.
-**/
-EFI_STATUS
-ValidateFmpCapsule (
- IN EFI_CAPSULE_HEADER *CapsuleHeader,
- OUT BOOLEAN *IsSystemFmp OPTIONAL,
- OUT UINT16 *EmbeddedDriverCount OPTIONAL
- )
-{
- EFI_FIRMWARE_MANAGEMENT_CAPSULE_HEADER *FmpCapsuleHeader;
- UINT8 *EndOfCapsule;
- EFI_FIRMWARE_MANAGEMENT_CAPSULE_IMAGE_HEADER *ImageHeader;
- UINT8 *EndOfPayload;
- UINT64 *ItemOffsetList;
- UINT32 ItemNum;
- UINTN Index;
- UINTN FmpCapsuleSize;
- UINTN FmpCapsuleHeaderSize;
- UINT64 FmpImageSize;
- UINTN FmpImageHeaderSize;
-
- if (CapsuleHeader->HeaderSize >= CapsuleHeader->CapsuleImageSize) {
- DEBUG ((DEBUG_ERROR, "HeaderSize(0x%x) >= CapsuleImageSize(0x%x)\n", CapsuleHeader->HeaderSize, CapsuleHeader->CapsuleImageSize));
- return EFI_INVALID_PARAMETER;
- }
-
- FmpCapsuleHeader = (EFI_FIRMWARE_MANAGEMENT_CAPSULE_HEADER *)((UINT8 *)CapsuleHeader + CapsuleHeader->HeaderSize);
- EndOfCapsule = (UINT8 *)CapsuleHeader + CapsuleHeader->CapsuleImageSize;
- FmpCapsuleSize = (UINTN)EndOfCapsule - (UINTN)FmpCapsuleHeader;
-
- if (FmpCapsuleSize < sizeof (EFI_FIRMWARE_MANAGEMENT_CAPSULE_HEADER)) {
- DEBUG ((DEBUG_ERROR, "FmpCapsuleSize(0x%x) < EFI_FIRMWARE_MANAGEMENT_CAPSULE_HEADER\n", FmpCapsuleSize));
- return EFI_INVALID_PARAMETER;
- }
-
- // Check EFI_FIRMWARE_MANAGEMENT_CAPSULE_HEADER
- if (FmpCapsuleHeader->Version != EFI_FIRMWARE_MANAGEMENT_CAPSULE_HEADER_INIT_VERSION) {
- DEBUG ((DEBUG_ERROR, "FmpCapsuleHeader->Version(0x%x) != EFI_FIRMWARE_MANAGEMENT_CAPSULE_HEADER_INIT_VERSION\n", FmpCapsuleHeader->Version));
- return EFI_INVALID_PARAMETER;
- }
-
- ItemOffsetList = (UINT64 *)(FmpCapsuleHeader + 1);
-
- // No overflow
- ItemNum = FmpCapsuleHeader->EmbeddedDriverCount + FmpCapsuleHeader->PayloadItemCount;
-
- if ((FmpCapsuleSize - sizeof (EFI_FIRMWARE_MANAGEMENT_CAPSULE_HEADER))/sizeof (UINT64) < ItemNum) {
- DEBUG ((DEBUG_ERROR, "ItemNum(0x%x) too big\n", ItemNum));
- return EFI_INVALID_PARAMETER;
- }
-
- FmpCapsuleHeaderSize = sizeof (EFI_FIRMWARE_MANAGEMENT_CAPSULE_HEADER) + sizeof (UINT64)*ItemNum;
-
- // Check ItemOffsetList
- for (Index = 0; Index < ItemNum; Index++) {
- if (ItemOffsetList[Index] >= FmpCapsuleSize) {
- DEBUG ((DEBUG_ERROR, "ItemOffsetList[%d](0x%lx) >= FmpCapsuleSize(0x%x)\n", Index, ItemOffsetList[Index], FmpCapsuleSize));
- return EFI_INVALID_PARAMETER;
- }
-
- if (ItemOffsetList[Index] < FmpCapsuleHeaderSize) {
- DEBUG ((DEBUG_ERROR, "ItemOffsetList[%d](0x%lx) < FmpCapsuleHeaderSize(0x%x)\n", Index, ItemOffsetList[Index], FmpCapsuleHeaderSize));
- return EFI_INVALID_PARAMETER;
- }
-
- //
- // All the address in ItemOffsetList must be stored in ascending order
- //
- if (Index > 0) {
- if (ItemOffsetList[Index] <= ItemOffsetList[Index - 1]) {
- DEBUG ((DEBUG_ERROR, "ItemOffsetList[%d](0x%lx) < ItemOffsetList[%d](0x%x)\n", Index, ItemOffsetList[Index], Index, ItemOffsetList[Index - 1]));
- return EFI_INVALID_PARAMETER;
- }
- }
- }
-
- // Check EFI_FIRMWARE_MANAGEMENT_CAPSULE_IMAGE_HEADER
- for (Index = FmpCapsuleHeader->EmbeddedDriverCount; Index < ItemNum; Index++) {
- ImageHeader = (EFI_FIRMWARE_MANAGEMENT_CAPSULE_IMAGE_HEADER *)((UINT8 *)FmpCapsuleHeader + ItemOffsetList[Index]);
- if (Index == ItemNum - 1) {
- EndOfPayload = (UINT8 *)((UINTN)EndOfCapsule - (UINTN)FmpCapsuleHeader);
- } else {
- EndOfPayload = (UINT8 *)(UINTN)ItemOffsetList[Index+1];
- }
-
- FmpImageSize = (UINTN)EndOfPayload - ItemOffsetList[Index];
-
- if (FmpImageSize < OFFSET_OF (EFI_FIRMWARE_MANAGEMENT_CAPSULE_IMAGE_HEADER, UpdateHardwareInstance)) {
- DEBUG ((DEBUG_ERROR, "FmpImageSize(0x%lx) < EFI_FIRMWARE_MANAGEMENT_CAPSULE_IMAGE_HEADER\n", FmpImageSize));
- return EFI_INVALID_PARAMETER;
- }
-
- FmpImageHeaderSize = sizeof (EFI_FIRMWARE_MANAGEMENT_CAPSULE_IMAGE_HEADER);
- if ((ImageHeader->Version > EFI_FIRMWARE_MANAGEMENT_CAPSULE_IMAGE_HEADER_INIT_VERSION) ||
- (ImageHeader->Version < 1))
- {
- DEBUG ((DEBUG_ERROR, "ImageHeader->Version(0x%x) Unknown\n", ImageHeader->Version));
- return EFI_INVALID_PARAMETER;
- }
-
- ///
- /// Current Init ImageHeader version is 3. UpdateHardwareInstance field was added in version 2
- /// and ImageCapsuleSupport field was added in version 3
- ///
- if (ImageHeader->Version == 1) {
- FmpImageHeaderSize = OFFSET_OF (EFI_FIRMWARE_MANAGEMENT_CAPSULE_IMAGE_HEADER, UpdateHardwareInstance);
- } else if (ImageHeader->Version == 2) {
- FmpImageHeaderSize = OFFSET_OF (EFI_FIRMWARE_MANAGEMENT_CAPSULE_IMAGE_HEADER, ImageCapsuleSupport);
- }
-
- // No overflow
- if (FmpImageSize != (UINT64)FmpImageHeaderSize + (UINT64)ImageHeader->UpdateImageSize + (UINT64)ImageHeader->UpdateVendorCodeSize) {
- DEBUG ((DEBUG_ERROR, "FmpImageSize(0x%lx) mismatch, UpdateImageSize(0x%x) UpdateVendorCodeSize(0x%x)\n", FmpImageSize, ImageHeader->UpdateImageSize, ImageHeader->UpdateVendorCodeSize));
- return EFI_INVALID_PARAMETER;
- }
- }
-
- if (ItemNum == 0) {
- //
- // No driver & payload element in FMP
- //
- EndOfPayload = (UINT8 *)(FmpCapsuleHeader + 1);
- if (EndOfPayload != EndOfCapsule) {
- DEBUG ((DEBUG_ERROR, "EndOfPayload(0x%x) mismatch, EndOfCapsule(0x%x)\n", EndOfPayload, EndOfCapsule));
- return EFI_INVALID_PARAMETER;
- }
-
- return EFI_UNSUPPORTED;
- }
-
- //
- // Check in system FMP capsule
- //
- if (IsSystemFmp != NULL) {
- *IsSystemFmp = IsSystemFmpCapsuleImage (CapsuleHeader);
- }
-
- if (EmbeddedDriverCount != NULL) {
- *EmbeddedDriverCount = FmpCapsuleHeader->EmbeddedDriverCount;
- }
-
- return EFI_SUCCESS;
-}
-
-/**
- Recovery module entrypoint
-
- @param[in] FileHandle Handle of the file being invoked.
- @param[in] PeiServices Describes the list of possible PEI Services.
-
- @return EFI_SUCCESS Recovery module is initialized.
-**/
-EFI_STATUS
-EFIAPI
-InitializeRecoveryModule (
- IN EFI_PEI_FILE_HANDLE FileHandle,
- IN CONST EFI_PEI_SERVICES **PeiServices
- )
-{
- EFI_STATUS Status;
- UINTN BootMode;
-
- BootMode = GetBootModeHob ();
- ASSERT (BootMode == BOOT_IN_RECOVERY_MODE);
-
- Status = (**PeiServices).InstallPpi (PeiServices, &mRecoveryPpiList);
- ASSERT_EFI_ERROR (Status);
-
- return Status;
-}
-
-/**
- Create hob and install FvInfo PPI for recovery capsule.
-
- @param[in] FvImage Points to the DXE FV image.
- @param[in] FvImageSize The length of the DXE FV image in bytes.
-
- @retval EFI_SUCCESS Create hob and install FvInfo PPI successfully.
- @retval EFI_VOLUME_CORRUPTED The input data is not an FV.
- @retval EFI_OUT_OF_RESOURCES No enough resource to process the input data.
-**/
-EFI_STATUS
-EFIAPI
-CreateHobForRecoveryCapsule (
- IN VOID *FvImage,
- IN UINTN FvImageSize
- )
-{
- EFI_FIRMWARE_VOLUME_HEADER *FvHeader;
- UINT32 FvAlignment;
- UINT64 FvLength;
- VOID *NewFvBuffer;
-
- //
- // FvImage should be at its required alignment.
- //
- FvHeader = (EFI_FIRMWARE_VOLUME_HEADER *)FvImage;
- //
- // Validate FV Header, if not as expected, return
- //
- if (ReadUnaligned32 (&FvHeader->Signature) != EFI_FVH_SIGNATURE) {
- DEBUG ((DEBUG_ERROR, "CreateHobForRecoveryCapsule (Fv Signature Error)\n"));
- return EFI_VOLUME_CORRUPTED;
- }
-
- //
- // If EFI_FVB2_WEAK_ALIGNMENT is set in the volume header then the first byte of the volume
- // can be aligned on any power-of-two boundary. A weakly aligned volume can not be moved from
- // its initial linked location and maintain its alignment.
- //
- if ((ReadUnaligned32 (&FvHeader->Attributes) & EFI_FVB2_WEAK_ALIGNMENT) != EFI_FVB2_WEAK_ALIGNMENT) {
- //
- // Get FvHeader alignment
- //
- FvAlignment = 1 << ((ReadUnaligned32 (&FvHeader->Attributes) & EFI_FVB2_ALIGNMENT) >> 16);
- //
- // FvAlignment must be greater than or equal to 8 bytes of the minimum FFS alignment value.
- //
- if (FvAlignment < 8) {
- FvAlignment = 8;
- }
-
- //
- // Allocate the aligned buffer for the FvImage.
- //
- if ((UINTN)FvHeader % FvAlignment != 0) {
- DEBUG ((DEBUG_INFO, "CreateHobForRecoveryCapsule (FvHeader 0x%lx is not aligned)\n", (UINT64)(UINTN)FvHeader));
- FvLength = ReadUnaligned64 (&FvHeader->FvLength);
- NewFvBuffer = AllocateAlignedPages (EFI_SIZE_TO_PAGES ((UINTN)FvLength), FvAlignment);
- if (NewFvBuffer == NULL) {
- DEBUG ((DEBUG_ERROR, "CreateHobForRecoveryCapsule (Not enough resource to allocate 0x%lx bytes)\n", FvLength));
- return EFI_OUT_OF_RESOURCES;
- }
-
- CopyMem (NewFvBuffer, FvHeader, (UINTN)FvLength);
- FvHeader = (EFI_FIRMWARE_VOLUME_HEADER *)NewFvBuffer;
- }
- }
-
- BuildFvHob ((UINT64)(UINTN)FvHeader, FvHeader->FvLength);
- DEBUG ((DEBUG_INFO, "BuildFvHob (FV in recovery) - 0x%lx - 0x%lx\n", (UINT64)(UINTN)FvHeader, FvHeader->FvLength));
-
- PeiServicesInstallFvInfoPpi (
- &FvHeader->FileSystemGuid,
- (VOID *)FvHeader,
- (UINT32)FvHeader->FvLength,
- NULL,
- NULL
- );
-
- return EFI_SUCCESS;
-}
-
-/**
- Create recovery context based upon System Firmware image and config file.
-
- @param[in] SystemFirmwareImage Points to the System Firmware image.
- @param[in] SystemFirmwareImageSize The length of the System Firmware image in bytes.
- @param[in] ConfigImage Points to the config file image.
- @param[in] ConfigImageSize The length of the config file image in bytes.
-
- @retval EFI_SUCCESS Process Recovery Image successfully.
-**/
-EFI_STATUS
-RecoverImage (
- IN VOID *SystemFirmwareImage,
- IN UINTN SystemFirmwareImageSize,
- IN VOID *ConfigImage,
- IN UINTN ConfigImageSize
- )
-{
- EFI_STATUS Status;
- RECOVERY_CONFIG_DATA *ConfigData;
- RECOVERY_CONFIG_DATA *RecoveryConfigData;
- CONFIG_HEADER ConfigHeader;
- UINTN Index;
-
- if (ConfigImage == NULL) {
- DEBUG ((DEBUG_INFO, "RecoverImage (NoConfig)\n"));
- Status = CreateHobForRecoveryCapsule (
- SystemFirmwareImage,
- SystemFirmwareImageSize
- );
- return Status;
- }
-
- ConfigData = NULL;
- ZeroMem (&ConfigHeader, sizeof (ConfigHeader));
- Status = ParseRecoveryDataFile (
- ConfigImage,
- ConfigImageSize,
- &ConfigHeader,
- &ConfigData
- );
- DEBUG ((DEBUG_INFO, "ParseRecoveryDataFile - %r\n", Status));
- if (EFI_ERROR (Status)) {
- return Status;
- }
-
- DEBUG ((DEBUG_INFO, "ConfigHeader.NumOfRecovery - 0x%x\n", ConfigHeader.NumOfRecovery));
- DEBUG ((DEBUG_INFO, "PcdEdkiiSystemFirmwareFileGuid - %g\n", PcdGetPtr (PcdEdkiiSystemFirmwareFileGuid)));
-
- Index = 0;
- RecoveryConfigData = ConfigData;
- while (Index < ConfigHeader.NumOfRecovery) {
- if (CompareGuid (&RecoveryConfigData->FileGuid, PcdGetPtr (PcdEdkiiSystemFirmwareFileGuid))) {
- DEBUG ((DEBUG_INFO, "FileGuid - %g (processing)\n", &RecoveryConfigData->FileGuid));
- Status = CreateHobForRecoveryCapsule (
- (UINT8 *)SystemFirmwareImage + RecoveryConfigData->ImageOffset,
- RecoveryConfigData->Length
- );
- //
- // Shall updates be serialized so that if a recovery FV is not successfully completed,
- // the remaining updates won't be performed.
- //
- if (EFI_ERROR (Status)) {
- break;
- }
- } else {
- DEBUG ((DEBUG_INFO, "FileGuid - %g (ignored)\n", &RecoveryConfigData->FileGuid));
- }
-
- Index++;
- RecoveryConfigData++;
- }
-
- return Status;
-}
-
-/**
- Process recovery image.
-
- Caution: This function may receive untrusted input.
-
- @param[in] Image Points to the recovery image.
- @param[in] Length The length of the recovery image in bytes.
-
- @retval EFI_SUCCESS Process Recovery Image successfully.
- @retval EFI_SECURITY_VIOLATION Recovery image is not processed due to security violation.
-**/
-EFI_STATUS
-ProcessRecoveryImage (
- IN VOID *Image,
- IN UINTN Length
- )
-{
- UINT32 LastAttemptVersion;
- UINT32 LastAttemptStatus;
- EFI_STATUS Status;
- VOID *SystemFirmwareImage;
- UINTN SystemFirmwareImageSize;
- VOID *ConfigImage;
- UINTN ConfigImageSize;
- VOID *AuthenticatedImage;
- UINTN AuthenticatedImageSize;
-
- AuthenticatedImage = NULL;
- AuthenticatedImageSize = 0;
-
- Status = CapsuleAuthenticateSystemFirmware (Image, Length, TRUE, &LastAttemptVersion, &LastAttemptStatus, &AuthenticatedImage, &AuthenticatedImageSize);
- if (EFI_ERROR (Status)) {
- DEBUG ((DEBUG_INFO, "CapsuleAuthenticateSystemFirmware - %r\n", Status));
- return Status;
- }
-
- ExtractSystemFirmwareImage (AuthenticatedImage, AuthenticatedImageSize, &SystemFirmwareImage, &SystemFirmwareImageSize);
- ExtractConfigImage (AuthenticatedImage, AuthenticatedImageSize, &ConfigImage, &ConfigImageSize);
-
- Status = RecoverImage (SystemFirmwareImage, SystemFirmwareImageSize, ConfigImage, ConfigImageSize);
- if (EFI_ERROR (Status)) {
- DEBUG ((DEBUG_INFO, "RecoverImage - %r\n", Status));
- return Status;
- }
-
- return EFI_SUCCESS;
-}
-
-/**
- Process Firmware management protocol data capsule.
-
- Caution: This function may receive untrusted input.
-
- This function assumes the caller validated the capsule by using
- ValidateFmpCapsule(), so that all fields in EFI_CAPSULE_HEADER,
- EFI_FIRMWARE_MANAGEMENT_CAPSULE_HEADER and
- EFI_FIRMWARE_MANAGEMENT_CAPSULE_IMAGE_HEADER are correct.
-
- @param[in] CapsuleHeader Points to a capsule header.
- @param[in] IsSystemFmp If this capsule is a system FMP capsule.
-
- @retval EFI_SUCCESS Process Capsule Image successfully.
- @retval EFI_UNSUPPORTED Capsule image is not supported by the firmware.
- @retval EFI_VOLUME_CORRUPTED FV volume in the capsule is corrupted.
- @retval EFI_OUT_OF_RESOURCES Not enough memory.
-**/
-EFI_STATUS
-ProcessFmpCapsuleImage (
- IN EFI_CAPSULE_HEADER *CapsuleHeader,
- IN BOOLEAN IsSystemFmp
- )
-{
- EFI_STATUS Status;
- EFI_FIRMWARE_MANAGEMENT_CAPSULE_HEADER *FmpCapsuleHeader;
- EFI_FIRMWARE_MANAGEMENT_CAPSULE_IMAGE_HEADER *ImageHeader;
- UINT8 *Image;
- UINT64 *ItemOffsetList;
- UINTN ItemIndex;
-
- if (!IsSystemFmp) {
- return EFI_UNSUPPORTED;
- }
-
- FmpCapsuleHeader = (EFI_FIRMWARE_MANAGEMENT_CAPSULE_HEADER *)((UINT8 *)CapsuleHeader + CapsuleHeader->HeaderSize);
- ItemOffsetList = (UINT64 *)(FmpCapsuleHeader + 1);
-
- for (ItemIndex = 0; ItemIndex < FmpCapsuleHeader->PayloadItemCount; ItemIndex++) {
- ImageHeader = (EFI_FIRMWARE_MANAGEMENT_CAPSULE_IMAGE_HEADER *)((UINT8 *)FmpCapsuleHeader + ItemOffsetList[ItemIndex]);
- if (ImageHeader->Version >= EFI_FIRMWARE_MANAGEMENT_CAPSULE_IMAGE_HEADER_INIT_VERSION) {
- Image = (UINT8 *)(ImageHeader + 1);
- } else {
- //
- // If the EFI_FIRMWARE_MANAGEMENT_CAPSULE_IMAGE_HEADER is version 1, only match ImageTypeId.
- // Header should exclude UpdateHardwareInstance field.
- // If version is 2 Header should exclude ImageCapsuleSupport field.
- //
- if (ImageHeader->Version == 1) {
- Image = (UINT8 *)ImageHeader + OFFSET_OF (EFI_FIRMWARE_MANAGEMENT_CAPSULE_IMAGE_HEADER, UpdateHardwareInstance);
- } else {
- Image = (UINT8 *)ImageHeader + OFFSET_OF (EFI_FIRMWARE_MANAGEMENT_CAPSULE_IMAGE_HEADER, ImageCapsuleSupport);
- }
- }
-
- Status = ProcessRecoveryImage (Image, ImageHeader->UpdateImageSize);
- if (EFI_ERROR (Status)) {
- return Status;
- }
- }
-
- return EFI_SUCCESS;
-}
-
-/**
- Process recovery capsule image.
-
- Caution: This function may receive untrusted input.
-
- @param[in] CapsuleBuffer The capsule image buffer.
- @param[in] CapsuleSize The size of the capsule image in bytes.
-
- @retval EFI_SUCCESS The recovery capsule is processed.
- @retval EFI_SECURITY_VIOLATION The recovery capsule is not process because of security violation.
- @retval EFI_NOT_FOUND The recovery capsule is not process because of unrecognization.
-**/
-EFI_STATUS
-EFIAPI
-ProcessRecoveryCapsule (
- IN VOID *CapsuleBuffer,
- IN UINTN CapsuleSize
- )
-{
- EFI_STATUS Status;
- BOOLEAN IsSystemFmp;
- EFI_CAPSULE_HEADER *CapsuleHeader;
-
- CapsuleHeader = CapsuleBuffer;
- if (!IsValidCapsuleHeader (CapsuleHeader, CapsuleSize)) {
- DEBUG ((DEBUG_ERROR, "CapsuleImageSize incorrect\n"));
- return EFI_SECURITY_VIOLATION;
- }
-
- //
- // Check FMP capsule layout
- //
- if (IsFmpCapsuleGuid (&CapsuleHeader->CapsuleGuid)) {
- DEBUG ((DEBUG_INFO, "CreateHobForRecoveryCapsule\n"));
-
- DEBUG ((DEBUG_INFO, "ProcessCapsuleImage for FmpCapsule ...\n"));
- DEBUG ((DEBUG_INFO, "ValidateFmpCapsule ...\n"));
- Status = ValidateFmpCapsule (CapsuleHeader, &IsSystemFmp, NULL);
- DEBUG ((DEBUG_INFO, "ValidateFmpCapsule - %r\n", Status));
- if (EFI_ERROR (Status)) {
- return Status;
- }
-
- //
- // Process EFI FMP Capsule
- //
- DEBUG ((DEBUG_INFO, "ProcessFmpCapsuleImage ...\n"));
- Status = ProcessFmpCapsuleImage (CapsuleHeader, IsSystemFmp);
- DEBUG ((DEBUG_INFO, "ProcessFmpCapsuleImage - %r\n", Status));
-
- DEBUG ((DEBUG_INFO, "CreateHobForRecoveryCapsule Done\n"));
- return Status;
- }
-
- return EFI_UNSUPPORTED;
-}
-
-/**
- Loads a DXE capsule from some media into memory and updates the HOB table
- with the DXE firmware volume information.
-
- @param[in] PeiServices General-purpose services that are available to every PEIM.
- @param[in] This Indicates the EFI_PEI_RECOVERY_MODULE_PPI instance.
-
- @retval EFI_SUCCESS The capsule was loaded correctly.
- @retval EFI_DEVICE_ERROR A device error occurred.
- @retval EFI_NOT_FOUND A recovery DXE capsule cannot be found.
-
-**/
-EFI_STATUS
-EFIAPI
-LoadRecoveryCapsule (
- IN EFI_PEI_SERVICES **PeiServices,
- IN EFI_PEI_RECOVERY_MODULE_PPI *This
- )
-{
- EFI_STATUS Status;
- EFI_PEI_DEVICE_RECOVERY_MODULE_PPI *DeviceRecoveryPpi;
- UINTN NumberRecoveryCapsules;
- UINTN Instance;
- UINTN CapsuleInstance;
- UINTN CapsuleSize;
- EFI_GUID CapsuleType;
- VOID *CapsuleBuffer;
-
- DEBUG ((DEBUG_INFO | DEBUG_LOAD, "Recovery Entry\n"));
-
- for (Instance = 0; ; Instance++) {
- Status = PeiServicesLocatePpi (
- &gEfiPeiDeviceRecoveryModulePpiGuid,
- Instance,
- NULL,
- (VOID **)&DeviceRecoveryPpi
- );
- DEBUG ((DEBUG_ERROR, "LoadRecoveryCapsule - LocateRecoveryPpi (%d) - %r\n", Instance, Status));
- if (EFI_ERROR (Status)) {
- break;
- }
-
- NumberRecoveryCapsules = 0;
- Status = DeviceRecoveryPpi->GetNumberRecoveryCapsules (
- (EFI_PEI_SERVICES **)PeiServices,
- DeviceRecoveryPpi,
- &NumberRecoveryCapsules
- );
- DEBUG ((DEBUG_ERROR, "LoadRecoveryCapsule - GetNumberRecoveryCapsules (%d) - %r\n", NumberRecoveryCapsules, Status));
- if (EFI_ERROR (Status)) {
- continue;
- }
-
- for (CapsuleInstance = 1; CapsuleInstance <= NumberRecoveryCapsules; CapsuleInstance++) {
- CapsuleSize = 0;
- Status = DeviceRecoveryPpi->GetRecoveryCapsuleInfo (
- (EFI_PEI_SERVICES **)PeiServices,
- DeviceRecoveryPpi,
- CapsuleInstance,
- &CapsuleSize,
- &CapsuleType
- );
- DEBUG ((DEBUG_ERROR, "LoadRecoveryCapsule - GetRecoveryCapsuleInfo (%d - %x) - %r\n", CapsuleInstance, CapsuleSize, Status));
- if (EFI_ERROR (Status)) {
- break;
- }
-
- CapsuleBuffer = AllocatePages (EFI_SIZE_TO_PAGES (CapsuleSize));
- if (CapsuleBuffer == NULL) {
- DEBUG ((DEBUG_ERROR, "LoadRecoveryCapsule - AllocatePool fail\n"));
- continue;
- }
-
- Status = DeviceRecoveryPpi->LoadRecoveryCapsule (
- (EFI_PEI_SERVICES **)PeiServices,
- DeviceRecoveryPpi,
- CapsuleInstance,
- CapsuleBuffer
- );
- DEBUG ((DEBUG_ERROR, "LoadRecoveryCapsule - LoadRecoveryCapsule (%d) - %r\n", CapsuleInstance, Status));
- if (EFI_ERROR (Status)) {
- FreePages (CapsuleBuffer, EFI_SIZE_TO_PAGES (CapsuleSize));
- break;
- }
-
- //
- // good, load capsule buffer
- //
- Status = ProcessRecoveryCapsule (CapsuleBuffer, CapsuleSize);
- return Status;
- }
- }
-
- return EFI_NOT_FOUND;
-}
diff --git a/SignedCapsulePkg/Universal/RecoveryModuleLoadPei/RecoveryModuleLoadPei.h b/SignedCapsulePkg/Universal/RecoveryModuleLoadPei/RecoveryModuleLoadPei.h
deleted file mode 100644
index 0e9a402d56..0000000000
--- a/SignedCapsulePkg/Universal/RecoveryModuleLoadPei/RecoveryModuleLoadPei.h
+++ /dev/null
@@ -1,34 +0,0 @@
-/** @file
- Recovery module header file.
-
- Copyright (c) 2016, Intel Corporation. All rights reserved.
- SPDX-License-Identifier: BSD-2-Clause-Patent
-
-**/
-
-#pragma once
-
-#include
-
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-
-//
-// Update data
-//
-
-typedef struct {
- UINTN NumOfRecovery;
-} CONFIG_HEADER;
-
-typedef struct {
- UINTN Index;
- EFI_GUID FileGuid;
- UINTN Length;
- UINTN ImageOffset;
-} RECOVERY_CONFIG_DATA;
diff --git a/SignedCapsulePkg/Universal/RecoveryModuleLoadPei/RecoveryModuleLoadPei.inf b/SignedCapsulePkg/Universal/RecoveryModuleLoadPei/RecoveryModuleLoadPei.inf
deleted file mode 100644
index b2320b4640..0000000000
--- a/SignedCapsulePkg/Universal/RecoveryModuleLoadPei/RecoveryModuleLoadPei.inf
+++ /dev/null
@@ -1,73 +0,0 @@
-## @file
-# Recovery module.
-#
-# Load Recovery capsule and install FV.
-#
-# Copyright (c) 2016 - 2019, Intel Corporation. All rights reserved.
-#
-# SPDX-License-Identifier: BSD-2-Clause-Patent
-#
-#
-##
-
-[Defines]
- INF_VERSION = 0x00010005
- BASE_NAME = RecoveryModuleLoadPei
- MODULE_UNI_FILE = RecoveryModuleLoadPei.uni
- FILE_GUID = 4278A574-4769-4D60-B090-DD4916691590
- MODULE_TYPE = PEIM
- VERSION_STRING = 1.0
- ENTRY_POINT = InitializeRecoveryModule
-
-#
-# The following information is for reference only and not required by the build tools.
-#
-# VALID_ARCHITECTURES = IA32 X64 EBC
-#
-
-[Sources]
- RecoveryModuleLoadPei.h
- RecoveryModuleLoadPei.c
- ParseConfigProfile.c
-
-[Packages]
- MdePkg/MdePkg.dec
- MdeModulePkg/MdeModulePkg.dec
- SignedCapsulePkg/SignedCapsulePkg.dec
-
-[LibraryClasses]
- PeimEntryPoint
- DebugLib
- HobLib
- BaseMemoryLib
- MemoryAllocationLib
- EdkiiSystemCapsuleLib
- IniParsingLib
- PrintLib
-
-[Ppis]
- gEfiPeiRecoveryModulePpiGuid ## PRODUCES
- gEfiPeiDeviceRecoveryModulePpiGuid ## CONSUMES
-
-[Guids]
- gEfiFmpCapsuleGuid ## SOMETIMES_CONSUMES ## GUID
-
-[Pcd]
- gEfiMdeModulePkgTokenSpaceGuid.PcdSystemFmpCapsuleImageTypeIdGuid ## CONSUMES
- gEfiSignedCapsulePkgTokenSpaceGuid.PcdEdkiiSystemFirmwareFileGuid ## CONSUMES
-
-[depex]
- gEfiPeiBootInRecoveryModePpiGuid
-
-[BuildOptions]
- # 4KB alignment required because this module exceeds maximum size
- # for some NOOPT build configurations. This is a post-memory PEIM
- # that can be compressed, so size impacts for 4KB alignment can be
- # minimized. Must be in DLINK2_FLAGS to override DLINK_XIPFLAGS
- # for GCC PEIM build rules flags ordering.
- GCC:*_*_*_DLINK2_FLAGS = -z common-page-size=0x1000
- CLANGPDB:*_*_*_DLINK2_FLAGS =
-
-[UserExtensions.TianoCore."ExtraFiles"]
- RecoveryModuleLoadPeiExtra.uni
-
diff --git a/SignedCapsulePkg/Universal/RecoveryModuleLoadPei/RecoveryModuleLoadPei.uni b/SignedCapsulePkg/Universal/RecoveryModuleLoadPei/RecoveryModuleLoadPei.uni
deleted file mode 100644
index 4829fa66c1..0000000000
--- a/SignedCapsulePkg/Universal/RecoveryModuleLoadPei/RecoveryModuleLoadPei.uni
+++ /dev/null
@@ -1,15 +0,0 @@
-// /** @file
-// Recovery module.
-//
-// Load Recovery capsule and install FV.
-//
-// Copyright (c) 2016, Intel Corporation. All rights reserved.
-//
-// SPDX-License-Identifier: BSD-2-Clause-Patent
-//
-// **/
-
-
-#string STR_MODULE_ABSTRACT #language en-US "Recovery module."
-
-#string STR_MODULE_DESCRIPTION #language en-US "Load Recovery capsule and install FV."
diff --git a/SignedCapsulePkg/Universal/RecoveryModuleLoadPei/RecoveryModuleLoadPeiExtra.uni b/SignedCapsulePkg/Universal/RecoveryModuleLoadPei/RecoveryModuleLoadPeiExtra.uni
deleted file mode 100644
index 0c54050c7b..0000000000
--- a/SignedCapsulePkg/Universal/RecoveryModuleLoadPei/RecoveryModuleLoadPeiExtra.uni
+++ /dev/null
@@ -1,14 +0,0 @@
-// /** @file
-// RecoveryModuleLoadPei Localized Strings and Content
-//
-// Copyright (c) 2016, Intel Corporation. All rights reserved.
-//
-// SPDX-License-Identifier: BSD-2-Clause-Patent
-//
-// **/
-
-#string STR_PROPERTIES_MODULE_NAME
-#language en-US
-"RecoveryModuleLoad PEI Driver"
-
-
diff --git a/SignedCapsulePkg/Universal/SystemFirmwareUpdate/ParseConfigProfile.c b/SignedCapsulePkg/Universal/SystemFirmwareUpdate/ParseConfigProfile.c
deleted file mode 100644
index 7edbb11eb5..0000000000
--- a/SignedCapsulePkg/Universal/SystemFirmwareUpdate/ParseConfigProfile.c
+++ /dev/null
@@ -1,216 +0,0 @@
-/** @file
- Parse the INI configuration file and pass the information to the update driver
- so that the driver can perform update accordingly.
-
- Copyright (c) 2016 - 2017, Intel Corporation. All rights reserved.
-
- SPDX-License-Identifier: BSD-2-Clause-Patent
-
-**/
-
-#include "SystemFirmwareDxe.h"
-#include
-#include
-
-#define MAX_LINE_LENGTH 512
-
-/**
- Parse Config data file to get the updated data array.
-
- @param[in] DataBuffer Config raw file buffer.
- @param[in] BufferSize Size of raw buffer.
- @param[in, out] ConfigHeader Pointer to the config header.
- @param[in, out] UpdateArray Pointer to the config of update data.
-
- @retval EFI_NOT_FOUND No config data is found.
- @retval EFI_OUT_OF_RESOURCES No enough memory is allocated.
- @retval EFI_SUCCESS Parse the config file successfully.
-
-**/
-EFI_STATUS
-ParseUpdateDataFile (
- IN UINT8 *DataBuffer,
- IN UINTN BufferSize,
- IN OUT CONFIG_HEADER *ConfigHeader,
- IN OUT UPDATE_CONFIG_DATA **UpdateArray
- )
-{
- EFI_STATUS Status;
- CHAR8 *SectionName;
- CHAR8 Entry[MAX_LINE_LENGTH];
- UINTN Num;
- UINT64 Num64;
- UINTN Index;
- EFI_GUID FileGuid;
- VOID *Context;
-
- //
- // First process the data buffer and get all sections and entries
- //
- Context = OpenIniFile (DataBuffer, BufferSize);
- if (Context == NULL) {
- return EFI_INVALID_PARAMETER;
- }
-
- //
- // Now get NumOfUpdate
- //
- Status = GetDecimalUintnFromDataFile (
- Context,
- "Head",
- "NumOfUpdate",
- &Num
- );
- if (EFI_ERROR (Status) || (Num == 0)) {
- DEBUG ((DEBUG_ERROR, "NumOfUpdate not found\n"));
- CloseIniFile (Context);
- return EFI_NOT_FOUND;
- }
-
- ConfigHeader->NumOfUpdates = Num;
- *UpdateArray = AllocateZeroPool ((sizeof (UPDATE_CONFIG_DATA) * Num));
- if (*UpdateArray == NULL) {
- CloseIniFile (Context);
- return EFI_OUT_OF_RESOURCES;
- }
-
- for (Index = 0; Index < ConfigHeader->NumOfUpdates; Index++) {
- //
- // Get the section name of each update
- //
- AsciiStrCpyS (Entry, MAX_LINE_LENGTH, "Update");
- AsciiValueToStringS (
- Entry + AsciiStrnLenS (Entry, MAX_LINE_LENGTH),
- MAX_LINE_LENGTH - AsciiStrnLenS (Entry, MAX_LINE_LENGTH),
- 0,
- Index,
- 0
- );
- Status = GetStringFromDataFile (
- Context,
- "Head",
- Entry,
- &SectionName
- );
- if (EFI_ERROR (Status) || (SectionName == NULL)) {
- DEBUG ((DEBUG_ERROR, "[%d] %a not found\n", Index, Entry));
- CloseIniFile (Context);
- return EFI_NOT_FOUND;
- }
-
- //
- // The section name of this update has been found.
- // Now looks for all the config data of this update
- //
- (*UpdateArray)[Index].Index = Index;
-
- //
- // FirmwareType
- //
- Status = GetDecimalUintnFromDataFile (
- Context,
- SectionName,
- "FirmwareType",
- &Num
- );
- if (EFI_ERROR (Status)) {
- CloseIniFile (Context);
- DEBUG ((DEBUG_ERROR, "[%d] FirmwareType not found\n", Index));
- return EFI_NOT_FOUND;
- }
-
- (*UpdateArray)[Index].FirmwareType = (PLATFORM_FIRMWARE_TYPE)Num;
-
- //
- // AddressType
- //
- Status = GetDecimalUintnFromDataFile (
- Context,
- SectionName,
- "AddressType",
- &Num
- );
- if (EFI_ERROR (Status)) {
- CloseIniFile (Context);
- DEBUG ((DEBUG_ERROR, "[%d] AddressType not found\n", Index));
- return EFI_NOT_FOUND;
- }
-
- (*UpdateArray)[Index].AddressType = (FLASH_ADDRESS_TYPE)Num;
-
- //
- // BaseAddress
- //
- Status = GetHexUint64FromDataFile (
- Context,
- SectionName,
- "BaseAddress",
- &Num64
- );
- if (EFI_ERROR (Status)) {
- CloseIniFile (Context);
- DEBUG ((DEBUG_ERROR, "[%d] BaseAddress not found\n", Index));
- return EFI_NOT_FOUND;
- }
-
- (*UpdateArray)[Index].BaseAddress = (EFI_PHYSICAL_ADDRESS)Num64;
-
- //
- // FileGuid
- //
- Status = GetGuidFromDataFile (
- Context,
- SectionName,
- "FileGuid",
- &FileGuid
- );
- if (EFI_ERROR (Status)) {
- CloseIniFile (Context);
- DEBUG ((DEBUG_ERROR, "[%d] FileGuid not found\n", Index));
- return EFI_NOT_FOUND;
- }
-
- CopyGuid (&((*UpdateArray)[Index].FileGuid), &FileGuid);
-
- //
- // Length
- //
- Status = GetHexUintnFromDataFile (
- Context,
- SectionName,
- "Length",
- &Num
- );
- if (EFI_ERROR (Status)) {
- CloseIniFile (Context);
- DEBUG ((DEBUG_ERROR, "[%d] Length not found\n", Index));
- return EFI_NOT_FOUND;
- }
-
- (*UpdateArray)[Index].Length = (UINTN)Num;
-
- //
- // ImageOffset
- //
- Status = GetHexUintnFromDataFile (
- Context,
- SectionName,
- "ImageOffset",
- &Num
- );
- if (EFI_ERROR (Status)) {
- CloseIniFile (Context);
- DEBUG ((DEBUG_ERROR, "[%d] ImageOffset not found\n", Index));
- return EFI_NOT_FOUND;
- }
-
- (*UpdateArray)[Index].ImageOffset = (UINTN)Num;
- }
-
- //
- // Now all configuration data got. Free those temporary buffers
- //
- CloseIniFile (Context);
-
- return EFI_SUCCESS;
-}
diff --git a/SignedCapsulePkg/Universal/SystemFirmwareUpdate/SystemFirmwareCommonDxe.c b/SignedCapsulePkg/Universal/SystemFirmwareUpdate/SystemFirmwareCommonDxe.c
deleted file mode 100644
index e5b78087bf..0000000000
--- a/SignedCapsulePkg/Universal/SystemFirmwareUpdate/SystemFirmwareCommonDxe.c
+++ /dev/null
@@ -1,344 +0,0 @@
-/** @file
- Produce FMP instance for system firmware.
-
- Copyright (c) 2016 - 2018, Intel Corporation. All rights reserved.
- SPDX-License-Identifier: BSD-2-Clause-Patent
-
-**/
-
-#include "SystemFirmwareDxe.h"
-
-EFI_GUID gSystemFmpLastAttemptVariableGuid = SYSTEM_FMP_LAST_ATTEMPT_VARIABLE_GUID;
-EFI_GUID gSystemFmpProtocolGuid = SYSTEM_FMP_PROTOCOL_GUID;
-
-EFI_FIRMWARE_MANAGEMENT_PROTOCOL mFirmwareManagementProtocol = {
- FmpGetImageInfo,
- FmpGetImage,
- FmpSetImage,
- FmpCheckImage,
- FmpGetPackageInfo,
- FmpSetPackageInfo
-};
-
-/**
- Returns information about the current firmware image(s) of the device.
-
- This function allows a copy of the current firmware image to be created and saved.
- The saved copy could later been used, for example, in firmware image recovery or rollback.
-
- @param[in] This A pointer to the EFI_FIRMWARE_MANAGEMENT_PROTOCOL instance.
- @param[in, out] ImageInfoSize A pointer to the size, in bytes, of the ImageInfo buffer.
- On input, this is the size of the buffer allocated by the caller.
- On output, it is the size of the buffer returned by the firmware
- if the buffer was large enough, or the size of the buffer needed
- to contain the image(s) information if the buffer was too small.
- @param[in, out] ImageInfo A pointer to the buffer in which firmware places the current image(s)
- information. The information is an array of EFI_FIRMWARE_IMAGE_DESCRIPTORs.
- @param[out] DescriptorVersion A pointer to the location in which firmware returns the version number
- associated with the EFI_FIRMWARE_IMAGE_DESCRIPTOR.
- @param[out] DescriptorCount A pointer to the location in which firmware returns the number of
- descriptors or firmware images within this device.
- @param[out] DescriptorSize A pointer to the location in which firmware returns the size, in bytes,
- of an individual EFI_FIRMWARE_IMAGE_DESCRIPTOR.
- @param[out] PackageVersion A version number that represents all the firmware images in the device.
- The format is vendor specific and new version must have a greater value
- than the old version. If PackageVersion is not supported, the value is
- 0xFFFFFFFF. A value of 0xFFFFFFFE indicates that package version comparison
- is to be performed using PackageVersionName. A value of 0xFFFFFFFD indicates
- that package version update is in progress.
- @param[out] PackageVersionName A pointer to a pointer to a null-terminated string representing the
- package version name. The buffer is allocated by this function with
- AllocatePool(), and it is the caller's responsibility to free it with a call
- to FreePool().
-
- @retval EFI_SUCCESS The device was successfully updated with the new image.
- @retval EFI_BUFFER_TOO_SMALL The ImageInfo buffer was too small. The current buffer size
- needed to hold the image(s) information is returned in ImageInfoSize.
- @retval EFI_INVALID_PARAMETER ImageInfoSize is NULL.
- @retval EFI_DEVICE_ERROR Valid information could not be returned. Possible corrupted image.
-
-**/
-EFI_STATUS
-EFIAPI
-FmpGetImageInfo (
- IN EFI_FIRMWARE_MANAGEMENT_PROTOCOL *This,
- IN OUT UINTN *ImageInfoSize,
- IN OUT EFI_FIRMWARE_IMAGE_DESCRIPTOR *ImageInfo,
- OUT UINT32 *DescriptorVersion,
- OUT UINT8 *DescriptorCount,
- OUT UINTN *DescriptorSize,
- OUT UINT32 *PackageVersion,
- OUT CHAR16 **PackageVersionName
- )
-{
- SYSTEM_FMP_PRIVATE_DATA *SystemFmpPrivate;
- EDKII_SYSTEM_FIRMWARE_IMAGE_DESCRIPTOR *ImageDescriptor;
-
- SystemFmpPrivate = SYSTEM_FMP_PRIVATE_DATA_FROM_FMP (This);
-
- if (ImageInfoSize == NULL) {
- return EFI_INVALID_PARAMETER;
- }
-
- if (*ImageInfoSize < sizeof (EFI_FIRMWARE_IMAGE_DESCRIPTOR) * SystemFmpPrivate->DescriptorCount) {
- *ImageInfoSize = sizeof (EFI_FIRMWARE_IMAGE_DESCRIPTOR) * SystemFmpPrivate->DescriptorCount;
- return EFI_BUFFER_TOO_SMALL;
- }
-
- if ((ImageInfo == NULL) ||
- (DescriptorVersion == NULL) ||
- (DescriptorCount == NULL) ||
- (DescriptorSize == NULL) ||
- (PackageVersion == NULL) ||
- (PackageVersionName == NULL))
- {
- return EFI_INVALID_PARAMETER;
- }
-
- *ImageInfoSize = sizeof (EFI_FIRMWARE_IMAGE_DESCRIPTOR) * SystemFmpPrivate->DescriptorCount;
- *DescriptorSize = sizeof (EFI_FIRMWARE_IMAGE_DESCRIPTOR);
- *DescriptorCount = SystemFmpPrivate->DescriptorCount;
- *DescriptorVersion = EFI_FIRMWARE_IMAGE_DESCRIPTOR_VERSION;
-
- //
- // supports 1 ImageInfo descriptor
- //
- ImageDescriptor = SystemFmpPrivate->ImageDescriptor;
- ImageInfo->ImageIndex = ImageDescriptor->ImageIndex;
- CopyGuid (&ImageInfo->ImageTypeId, &ImageDescriptor->ImageTypeId);
- ImageInfo->ImageId = ImageDescriptor->ImageId;
- if (ImageDescriptor->ImageIdNameStringOffset != 0) {
- ImageInfo->ImageIdName = (CHAR16 *)((UINTN)ImageDescriptor + ImageDescriptor->ImageIdNameStringOffset);
- } else {
- ImageInfo->ImageIdName = NULL;
- }
-
- ImageInfo->Version = ImageDescriptor->Version;
- if (ImageDescriptor->VersionNameStringOffset != 0) {
- ImageInfo->VersionName = (CHAR16 *)((UINTN)ImageDescriptor + ImageDescriptor->VersionNameStringOffset);
- } else {
- ImageInfo->VersionName = NULL;
- }
-
- ImageInfo->Size = (UINTN)ImageDescriptor->Size;
- ImageInfo->AttributesSupported = ImageDescriptor->AttributesSupported;
- ImageInfo->AttributesSetting = ImageDescriptor->AttributesSetting;
- ImageInfo->Compatibilities = ImageDescriptor->Compatibilities;
- ImageInfo->LowestSupportedImageVersion = ImageDescriptor->LowestSupportedImageVersion;
- ImageInfo->LastAttemptVersion = SystemFmpPrivate->LastAttempt.LastAttemptVersion;
- ImageInfo->LastAttemptStatus = SystemFmpPrivate->LastAttempt.LastAttemptStatus;
- ImageInfo->HardwareInstance = ImageDescriptor->HardwareInstance;
-
- //
- // package version
- //
- *PackageVersion = ImageDescriptor->PackageVersion;
- if (ImageDescriptor->PackageVersionNameStringOffset != 0) {
- *PackageVersionName = (VOID *)((UINTN)ImageDescriptor + ImageDescriptor->PackageVersionNameStringOffset);
- *PackageVersionName = AllocateCopyPool (StrSize (*PackageVersionName), *PackageVersionName);
- } else {
- *PackageVersionName = NULL;
- }
-
- return EFI_SUCCESS;
-}
-
-/**
- Retrieves a copy of the current firmware image of the device.
-
- This function allows a copy of the current firmware image to be created and saved.
- The saved copy could later been used, for example, in firmware image recovery or rollback.
-
- @param[in] This A pointer to the EFI_FIRMWARE_MANAGEMENT_PROTOCOL instance.
- @param[in] ImageIndex A unique number identifying the firmware image(s) within the device.
- The number is between 1 and DescriptorCount.
- @param[in,out] Image Points to the buffer where the current image is copied to.
- @param[in,out] ImageSize On entry, points to the size of the buffer pointed to by Image, in bytes.
- On return, points to the length of the image, in bytes.
-
- @retval EFI_SUCCESS The device was successfully updated with the new image.
- @retval EFI_BUFFER_TOO_SMALL The buffer specified by ImageSize is too small to hold the
- image. The current buffer size needed to hold the image is returned
- in ImageSize.
- @retval EFI_INVALID_PARAMETER The Image was NULL.
- @retval EFI_NOT_FOUND The current image is not copied to the buffer.
- @retval EFI_UNSUPPORTED The operation is not supported.
- @retval EFI_SECURITY_VIOLATION The operation could not be completed due to an image corruption.
- If the image is able to be read, the Image buffer will be updated
- with the retrieved image contents.
- @retval EFI_DEVICE_ERROR The image could not be read.
-
-**/
-EFI_STATUS
-EFIAPI
-FmpGetImage (
- IN EFI_FIRMWARE_MANAGEMENT_PROTOCOL *This,
- IN UINT8 ImageIndex,
- IN OUT VOID *Image,
- IN OUT UINTN *ImageSize
- )
-{
- return EFI_UNSUPPORTED;
-}
-
-/**
- Checks if the firmware image is valid for the device.
-
- This function allows firmware update application to validate the firmware image without
- invoking the SetImage() first.
-
- @param[in] This A pointer to the EFI_FIRMWARE_MANAGEMENT_PROTOCOL instance.
- @param[in] ImageIndex A unique number identifying the firmware image(s) within the device.
- The number is between 1 and DescriptorCount.
- @param[in] Image Points to the new image.
- @param[in] ImageSize Size of the new image in bytes.
- @param[out] ImageUpdatable Indicates if the new image is valid for update. It also provides,
- if available, additional information if the image is invalid.
-
- @retval EFI_SUCCESS The image was successfully checked.
- @retval EFI_INVALID_PARAMETER The Image was NULL.
- @retval EFI_UNSUPPORTED The operation is not supported.
- @retval EFI_SECURITY_VIOLATION The operation could not be performed due to an authentication failure.
-
-**/
-EFI_STATUS
-EFIAPI
-FmpCheckImage (
- IN EFI_FIRMWARE_MANAGEMENT_PROTOCOL *This,
- IN UINT8 ImageIndex,
- IN CONST VOID *Image,
- IN UINTN ImageSize,
- OUT UINT32 *ImageUpdatable
- )
-{
- return EFI_UNSUPPORTED;
-}
-
-/**
- Returns information about the firmware package.
-
- This function returns package information.
-
- @param[in] This A pointer to the EFI_FIRMWARE_MANAGEMENT_PROTOCOL instance.
- @param[out] PackageVersion A version number that represents all the firmware images in the device.
- The format is vendor specific and new version must have a greater value
- than the old version. If PackageVersion is not supported, the value is
- 0xFFFFFFFF. A value of 0xFFFFFFFE indicates that package version
- comparison is to be performed using PackageVersionName. A value of
- 0xFFFFFFFD indicates that package version update is in progress.
- @param[out] PackageVersionName A pointer to a pointer to a null-terminated string representing
- the package version name. The buffer is allocated by this function with
- AllocatePool(), and it is the caller's responsibility to free it with a
- call to FreePool().
- @param[out] PackageVersionNameMaxLen The maximum length of package version name if device supports update of
- package version name. A value of 0 indicates the device does not support
- update of package version name. Length is the number of Unicode characters,
- including the terminating null character.
- @param[out] AttributesSupported Package attributes that are supported by this device. See 'Package Attribute
- Definitions' for possible returned values of this parameter. A value of 1
- indicates the attribute is supported and the current setting value is
- indicated in AttributesSetting. A value of 0 indicates the attribute is not
- supported and the current setting value in AttributesSetting is meaningless.
- @param[out] AttributesSetting Package attributes. See 'Package Attribute Definitions' for possible returned
- values of this parameter
-
- @retval EFI_SUCCESS The package information was successfully returned.
- @retval EFI_UNSUPPORTED The operation is not supported.
-
-**/
-EFI_STATUS
-EFIAPI
-FmpGetPackageInfo (
- IN EFI_FIRMWARE_MANAGEMENT_PROTOCOL *This,
- OUT UINT32 *PackageVersion,
- OUT CHAR16 **PackageVersionName,
- OUT UINT32 *PackageVersionNameMaxLen,
- OUT UINT64 *AttributesSupported,
- OUT UINT64 *AttributesSetting
- )
-{
- return EFI_UNSUPPORTED;
-}
-
-/**
- Updates information about the firmware package.
-
- This function updates package information.
- This function returns EFI_UNSUPPORTED if the package information is not updatable.
- VendorCode enables vendor to implement vendor-specific package information update policy.
- Null if the caller did not specify this policy or use the default policy.
-
- @param[in] This A pointer to the EFI_FIRMWARE_MANAGEMENT_PROTOCOL instance.
- @param[in] Image Points to the authentication image.
- Null if authentication is not required.
- @param[in] ImageSize Size of the authentication image in bytes.
- 0 if authentication is not required.
- @param[in] VendorCode This enables vendor to implement vendor-specific firmware
- image update policy.
- Null indicates the caller did not specify this policy or use
- the default policy.
- @param[in] PackageVersion The new package version.
- @param[in] PackageVersionName A pointer to the new null-terminated Unicode string representing
- the package version name.
- The string length is equal to or less than the value returned in
- PackageVersionNameMaxLen.
-
- @retval EFI_SUCCESS The device was successfully updated with the new package
- information.
- @retval EFI_INVALID_PARAMETER The PackageVersionName length is longer than the value
- returned in PackageVersionNameMaxLen.
- @retval EFI_UNSUPPORTED The operation is not supported.
- @retval EFI_SECURITY_VIOLATION The operation could not be performed due to an authentication failure.
-
-**/
-EFI_STATUS
-EFIAPI
-FmpSetPackageInfo (
- IN EFI_FIRMWARE_MANAGEMENT_PROTOCOL *This,
- IN CONST VOID *Image,
- IN UINTN ImageSize,
- IN CONST VOID *VendorCode,
- IN UINT32 PackageVersion,
- IN CONST CHAR16 *PackageVersionName
- )
-{
- return EFI_UNSUPPORTED;
-}
-
-/**
- Initialize SystemFmpDriver private data structure.
-
- @param[in] SystemFmpPrivate private data structure to be initialized.
-
- @return EFI_SUCCESS private data is initialized.
-**/
-EFI_STATUS
-InitializePrivateData (
- IN SYSTEM_FMP_PRIVATE_DATA *SystemFmpPrivate
- )
-{
- EFI_STATUS VarStatus;
- UINTN VarSize;
-
- SystemFmpPrivate->Signature = SYSTEM_FMP_PRIVATE_DATA_SIGNATURE;
- SystemFmpPrivate->Handle = NULL;
- SystemFmpPrivate->DescriptorCount = 1;
- CopyMem (&SystemFmpPrivate->Fmp, &mFirmwareManagementProtocol, sizeof (EFI_FIRMWARE_MANAGEMENT_PROTOCOL));
-
- SystemFmpPrivate->ImageDescriptor = PcdGetPtr (PcdEdkiiSystemFirmwareImageDescriptor);
-
- SystemFmpPrivate->LastAttempt.LastAttemptVersion = 0x0;
- SystemFmpPrivate->LastAttempt.LastAttemptStatus = 0x0;
- VarSize = sizeof (SystemFmpPrivate->LastAttempt);
- VarStatus = gRT->GetVariable (
- SYSTEM_FMP_LAST_ATTEMPT_VARIABLE_NAME,
- &gSystemFmpLastAttemptVariableGuid,
- NULL,
- &VarSize,
- &SystemFmpPrivate->LastAttempt
- );
- DEBUG ((DEBUG_INFO, "GetLastAttempt - %r\n", VarStatus));
- DEBUG ((DEBUG_INFO, "GetLastAttempt Version - 0x%x, State - 0x%x\n", SystemFmpPrivate->LastAttempt.LastAttemptVersion, SystemFmpPrivate->LastAttempt.LastAttemptStatus));
-
- return EFI_SUCCESS;
-}
diff --git a/SignedCapsulePkg/Universal/SystemFirmwareUpdate/SystemFirmwareDxe.h b/SignedCapsulePkg/Universal/SystemFirmwareUpdate/SystemFirmwareDxe.h
deleted file mode 100644
index ad6c8b6ff2..0000000000
--- a/SignedCapsulePkg/Universal/SystemFirmwareUpdate/SystemFirmwareDxe.h
+++ /dev/null
@@ -1,395 +0,0 @@
-/** @file
- System Firmware update header file.
-
- Copyright (c) 2016 - 2018, Intel Corporation. All rights reserved.
- SPDX-License-Identifier: BSD-2-Clause-Patent
-
-**/
-
-#pragma once
-
-#include
-
-#include
-#include
-#include
-#include
-
-#include
-#include
-
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-
-typedef struct {
- UINT32 LastAttemptVersion;
- UINT32 LastAttemptStatus;
-} SYSTEM_FMP_LAST_ATTEMPT_VARIABLE;
-
-#define SYSTEM_FMP_LAST_ATTEMPT_VARIABLE_NAME L"SystemLastAttempVar"
-
-#define SYSTEM_FMP_LAST_ATTEMPT_VARIABLE_GUID {0x2f564d6f, 0xcc2c, 0x4838, { 0xb9, 0xa8, 0xbe, 0x59, 0x48, 0xb0, 0x3d, 0x59 }}
-
-#define SYSTEM_FMP_PRIVATE_DATA_SIGNATURE SIGNATURE_32('S', 'Y', 'S', 'F')
-
-#define SYSTEM_FMP_PROTOCOL_GUID {0x6d16624a, 0x26a6, 0x4cb4, { 0x84, 0xfa, 0x6, 0x78, 0x5a, 0x7e, 0x82, 0x6a }}
-
-//
-// SYSTEM FMP private data structure.
-//
-
-struct _SYSTEM_FMP_PRIVATE_DATA {
- UINT32 Signature;
- EFI_FIRMWARE_MANAGEMENT_PROTOCOL Fmp;
- EFI_HANDLE Handle;
- UINT8 DescriptorCount;
- EDKII_SYSTEM_FIRMWARE_IMAGE_DESCRIPTOR *ImageDescriptor;
- SYSTEM_FMP_LAST_ATTEMPT_VARIABLE LastAttempt;
-};
-
-typedef struct _SYSTEM_FMP_PRIVATE_DATA SYSTEM_FMP_PRIVATE_DATA;
-
-/**
- Returns a pointer to the SYSTEM_FMP_PRIVATE_DATA structure from the input a as Fmp.
-
- If the signatures matches, then a pointer to the data structure that contains
- a specified field of that data structure is returned.
-
- @param a Pointer to the field specified by ServiceBinding within
- a data structure of type SYSTEM_FMP_PRIVATE_DATA.
-
-**/
-#define SYSTEM_FMP_PRIVATE_DATA_FROM_FMP(a) \
- CR ( \
- (a), \
- SYSTEM_FMP_PRIVATE_DATA, \
- Fmp, \
- SYSTEM_FMP_PRIVATE_DATA_SIGNATURE \
- )
-
-//
-// Update data
-//
-
-typedef struct {
- UINTN NumOfUpdates;
-} CONFIG_HEADER;
-
-typedef struct {
- UINTN Index;
- PLATFORM_FIRMWARE_TYPE FirmwareType;
- FLASH_ADDRESS_TYPE AddressType;
- EFI_GUID FileGuid;
- EFI_PHYSICAL_ADDRESS BaseAddress;
- UINTN Length;
- UINTN ImageOffset;
-} UPDATE_CONFIG_DATA;
-
-//
-// System Firmware Update SMM Communication
-//
-
-#define SYSTEM_FIRMWARE_UPDATE_COMMUNICATION_FUNCTION_SET_IMAGE 1
-
-typedef struct {
- UINTN Function;
- EFI_STATUS ReturnStatus;
- // UINT8 Data[];
-} SYSTEM_FIRMWARE_UPDATE_COMMUNICATION_HEAD;
-
-#define ABORT_REASON_MAX_SIZE 0x40 // UnicodeStringSize including final L'\0'
-
-#define CAPSULE_IMAGE_ADDITIONAL_MAX_SIZE (0x20020 + 0xA0000) // Additional size for Capsule Header, FV block alignment + DispatchImage.
-
-typedef struct {
- UINT8 ImageIndex;
- UINTN ImageSize;
- UINTN AbortReasonSize;
- UINT32 LastAttemptVersion;
- UINT32 LastAttemptStatus;
- // UINT8 Data[AbortReasonMaxSize + ImageSize];
-} SYSTEM_FIRMWARE_UPDATE_COMMUNICATION_SET_IMAGE;
-
-/**
- Returns information about the current firmware image(s) of the device.
-
- This function allows a copy of the current firmware image to be created and saved.
- The saved copy could later been used, for example, in firmware image recovery or rollback.
-
- @param[in] This A pointer to the EFI_FIRMWARE_MANAGEMENT_PROTOCOL instance.
- @param[in, out] ImageInfoSize A pointer to the size, in bytes, of the ImageInfo buffer.
- On input, this is the size of the buffer allocated by the caller.
- On output, it is the size of the buffer returned by the firmware
- if the buffer was large enough, or the size of the buffer needed
- to contain the image(s) information if the buffer was too small.
- @param[in, out] ImageInfo A pointer to the buffer in which firmware places the current image(s)
- information. The information is an array of EFI_FIRMWARE_IMAGE_DESCRIPTORs.
- @param[out] DescriptorVersion A pointer to the location in which firmware returns the version number
- associated with the EFI_FIRMWARE_IMAGE_DESCRIPTOR.
- @param[out] DescriptorCount A pointer to the location in which firmware returns the number of
- descriptors or firmware images within this device.
- @param[out] DescriptorSize A pointer to the location in which firmware returns the size, in bytes,
- of an individual EFI_FIRMWARE_IMAGE_DESCRIPTOR.
- @param[out] PackageVersion A version number that represents all the firmware images in the device.
- The format is vendor specific and new version must have a greater value
- than the old version. If PackageVersion is not supported, the value is
- 0xFFFFFFFF. A value of 0xFFFFFFFE indicates that package version comparison
- is to be performed using PackageVersionName. A value of 0xFFFFFFFD indicates
- that package version update is in progress.
- @param[out] PackageVersionName A pointer to a pointer to a null-terminated string representing the
- package version name. The buffer is allocated by this function with
- AllocatePool(), and it is the caller's responsibility to free it with a call
- to FreePool().
-
- @retval EFI_SUCCESS The device was successfully updated with the new image.
- @retval EFI_BUFFER_TOO_SMALL The ImageInfo buffer was too small. The current buffer size
- needed to hold the image(s) information is returned in ImageInfoSize.
- @retval EFI_INVALID_PARAMETER ImageInfoSize is NULL.
- @retval EFI_DEVICE_ERROR Valid information could not be returned. Possible corrupted image.
-
-**/
-EFI_STATUS
-EFIAPI
-FmpGetImageInfo (
- IN EFI_FIRMWARE_MANAGEMENT_PROTOCOL *This,
- IN OUT UINTN *ImageInfoSize,
- IN OUT EFI_FIRMWARE_IMAGE_DESCRIPTOR *ImageInfo,
- OUT UINT32 *DescriptorVersion,
- OUT UINT8 *DescriptorCount,
- OUT UINTN *DescriptorSize,
- OUT UINT32 *PackageVersion,
- OUT CHAR16 **PackageVersionName
- );
-
-/**
- Retrieves a copy of the current firmware image of the device.
-
- This function allows a copy of the current firmware image to be created and saved.
- The saved copy could later been used, for example, in firmware image recovery or rollback.
-
- @param[in] This A pointer to the EFI_FIRMWARE_MANAGEMENT_PROTOCOL instance.
- @param[in] ImageIndex A unique number identifying the firmware image(s) within the device.
- The number is between 1 and DescriptorCount.
- @param[in,out] Image Points to the buffer where the current image is copied to.
- @param[in,out] ImageSize On entry, points to the size of the buffer pointed to by Image, in bytes.
- On return, points to the length of the image, in bytes.
-
- @retval EFI_SUCCESS The device was successfully updated with the new image.
- @retval EFI_BUFFER_TOO_SMALL The buffer specified by ImageSize is too small to hold the
- image. The current buffer size needed to hold the image is returned
- in ImageSize.
- @retval EFI_INVALID_PARAMETER The Image was NULL.
- @retval EFI_NOT_FOUND The current image is not copied to the buffer.
- @retval EFI_UNSUPPORTED The operation is not supported.
- @retval EFI_SECURITY_VIOLATION The operation could not be performed due to an authentication failure.
-
-**/
-EFI_STATUS
-EFIAPI
-FmpGetImage (
- IN EFI_FIRMWARE_MANAGEMENT_PROTOCOL *This,
- IN UINT8 ImageIndex,
- IN OUT VOID *Image,
- IN OUT UINTN *ImageSize
- );
-
-/**
- Updates the firmware image of the device.
-
- This function updates the hardware with the new firmware image.
- This function returns EFI_UNSUPPORTED if the firmware image is not updatable.
- If the firmware image is updatable, the function should perform the following minimal validations
- before proceeding to do the firmware image update.
- - Validate the image authentication if image has attribute
- IMAGE_ATTRIBUTE_AUTHENTICATION_REQUIRED. The function returns
- EFI_SECURITY_VIOLATION if the validation fails.
- - Validate the image is a supported image for this device. The function returns EFI_ABORTED if
- the image is unsupported. The function can optionally provide more detailed information on
- why the image is not a supported image.
- - Validate the data from VendorCode if not null. Image validation must be performed before
- VendorCode data validation. VendorCode data is ignored or considered invalid if image
- validation failed. The function returns EFI_ABORTED if the data is invalid.
-
- VendorCode enables vendor to implement vendor-specific firmware image update policy. Null if
- the caller did not specify the policy or use the default policy. As an example, vendor can implement
- a policy to allow an option to force a firmware image update when the abort reason is due to the new
- firmware image version is older than the current firmware image version or bad image checksum.
- Sensitive operations such as those wiping the entire firmware image and render the device to be
- non-functional should be encoded in the image itself rather than passed with the VendorCode.
- AbortReason enables vendor to have the option to provide a more detailed description of the abort
- reason to the caller.
-
- @param[in] This A pointer to the EFI_FIRMWARE_MANAGEMENT_PROTOCOL instance.
- @param[in] ImageIndex A unique number identifying the firmware image(s) within the device.
- The number is between 1 and DescriptorCount.
- @param[in] Image Points to the new image.
- @param[in] ImageSize Size of the new image in bytes.
- @param[in] VendorCode This enables vendor to implement vendor-specific firmware image update policy.
- Null indicates the caller did not specify the policy or use the default policy.
- @param[in] Progress A function used by the driver to report the progress of the firmware update.
- @param[out] AbortReason A pointer to a pointer to a null-terminated string providing more
- details for the aborted operation. The buffer is allocated by this function
- with AllocatePool(), and it is the caller's responsibility to free it with a
- call to FreePool().
-
- @retval EFI_SUCCESS The device was successfully updated with the new image.
- @retval EFI_ABORTED The operation is aborted.
- @retval EFI_INVALID_PARAMETER The Image was NULL.
- @retval EFI_UNSUPPORTED The operation is not supported.
- @retval EFI_SECURITY_VIOLATION The operation could not be performed due to an authentication failure.
-
-**/
-EFI_STATUS
-EFIAPI
-FmpSetImage (
- IN EFI_FIRMWARE_MANAGEMENT_PROTOCOL *This,
- IN UINT8 ImageIndex,
- IN CONST VOID *Image,
- IN UINTN ImageSize,
- IN CONST VOID *VendorCode,
- IN EFI_FIRMWARE_MANAGEMENT_UPDATE_IMAGE_PROGRESS Progress,
- OUT CHAR16 **AbortReason
- );
-
-/**
- Checks if the firmware image is valid for the device.
-
- This function allows firmware update application to validate the firmware image without
- invoking the SetImage() first.
-
- @param[in] This A pointer to the EFI_FIRMWARE_MANAGEMENT_PROTOCOL instance.
- @param[in] ImageIndex A unique number identifying the firmware image(s) within the device.
- The number is between 1 and DescriptorCount.
- @param[in] Image Points to the new image.
- @param[in] ImageSize Size of the new image in bytes.
- @param[out] ImageUpdatable Indicates if the new image is valid for update. It also provides,
- if available, additional information if the image is invalid.
-
- @retval EFI_SUCCESS The image was successfully checked.
- @retval EFI_INVALID_PARAMETER The Image was NULL.
- @retval EFI_UNSUPPORTED The operation is not supported.
- @retval EFI_SECURITY_VIOLATION The operation could not be performed due to an authentication failure.
-
-**/
-EFI_STATUS
-EFIAPI
-FmpCheckImage (
- IN EFI_FIRMWARE_MANAGEMENT_PROTOCOL *This,
- IN UINT8 ImageIndex,
- IN CONST VOID *Image,
- IN UINTN ImageSize,
- OUT UINT32 *ImageUpdatable
- );
-
-/**
- Returns information about the firmware package.
-
- This function returns package information.
-
- @param[in] This A pointer to the EFI_FIRMWARE_MANAGEMENT_PROTOCOL instance.
- @param[out] PackageVersion A version number that represents all the firmware images in the device.
- The format is vendor specific and new version must have a greater value
- than the old version. If PackageVersion is not supported, the value is
- 0xFFFFFFFF. A value of 0xFFFFFFFE indicates that package version
- comparison is to be performed using PackageVersionName. A value of
- 0xFFFFFFFD indicates that package version update is in progress.
- @param[out] PackageVersionName A pointer to a pointer to a null-terminated string representing
- the package version name. The buffer is allocated by this function with
- AllocatePool(), and it is the caller's responsibility to free it with a
- call to FreePool().
- @param[out] PackageVersionNameMaxLen The maximum length of package version name if device supports update of
- package version name. A value of 0 indicates the device does not support
- update of package version name. Length is the number of Unicode characters,
- including the terminating null character.
- @param[out] AttributesSupported Package attributes that are supported by this device. See 'Package Attribute
- Definitions' for possible returned values of this parameter. A value of 1
- indicates the attribute is supported and the current setting value is
- indicated in AttributesSetting. A value of 0 indicates the attribute is not
- supported and the current setting value in AttributesSetting is meaningless.
- @param[out] AttributesSetting Package attributes. See 'Package Attribute Definitions' for possible returned
- values of this parameter
-
- @retval EFI_SUCCESS The package information was successfully returned.
- @retval EFI_UNSUPPORTED The operation is not supported.
-
-**/
-EFI_STATUS
-EFIAPI
-FmpGetPackageInfo (
- IN EFI_FIRMWARE_MANAGEMENT_PROTOCOL *This,
- OUT UINT32 *PackageVersion,
- OUT CHAR16 **PackageVersionName,
- OUT UINT32 *PackageVersionNameMaxLen,
- OUT UINT64 *AttributesSupported,
- OUT UINT64 *AttributesSetting
- );
-
-/**
- Updates information about the firmware package.
-
- This function updates package information.
- This function returns EFI_UNSUPPORTED if the package information is not updatable.
- VendorCode enables vendor to implement vendor-specific package information update policy.
- Null if the caller did not specify this policy or use the default policy.
-
- @param[in] This A pointer to the EFI_FIRMWARE_MANAGEMENT_PROTOCOL instance.
- @param[in] Image Points to the authentication image.
- Null if authentication is not required.
- @param[in] ImageSize Size of the authentication image in bytes.
- 0 if authentication is not required.
- @param[in] VendorCode This enables vendor to implement vendor-specific firmware
- image update policy.
- Null indicates the caller did not specify this policy or use
- the default policy.
- @param[in] PackageVersion The new package version.
- @param[in] PackageVersionName A pointer to the new null-terminated Unicode string representing
- the package version name.
- The string length is equal to or less than the value returned in
- PackageVersionNameMaxLen.
-
- @retval EFI_SUCCESS The device was successfully updated with the new package
- information.
- @retval EFI_INVALID_PARAMETER The PackageVersionName length is longer than the value
- returned in PackageVersionNameMaxLen.
- @retval EFI_UNSUPPORTED The operation is not supported.
- @retval EFI_SECURITY_VIOLATION The operation could not be performed due to an authentication failure.
-
-**/
-EFI_STATUS
-EFIAPI
-FmpSetPackageInfo (
- IN EFI_FIRMWARE_MANAGEMENT_PROTOCOL *This,
- IN CONST VOID *Image,
- IN UINTN ImageSize,
- IN CONST VOID *VendorCode,
- IN UINT32 PackageVersion,
- IN CONST CHAR16 *PackageVersionName
- );
-
-/**
- Initialize SystemFmpDriver private data structure.
-
- @param[in] SystemFmpPrivate private data structure to be initialized.
-
- @return EFI_SUCCESS private data is initialized.
-**/
-EFI_STATUS
-InitializePrivateData (
- IN SYSTEM_FMP_PRIVATE_DATA *SystemFmpPrivate
- );
-
-extern EFI_GUID gSystemFmpLastAttemptVariableGuid;
-extern EFI_GUID mCurrentImageTypeId;
-extern EFI_GUID gSystemFmpProtocolGuid;
diff --git a/SignedCapsulePkg/Universal/SystemFirmwareUpdate/SystemFirmwareReportDxe.c b/SignedCapsulePkg/Universal/SystemFirmwareUpdate/SystemFirmwareReportDxe.c
deleted file mode 100644
index e5181a6afc..0000000000
--- a/SignedCapsulePkg/Universal/SystemFirmwareUpdate/SystemFirmwareReportDxe.c
+++ /dev/null
@@ -1,270 +0,0 @@
-/** @file
- SetImage instance to report system firmware and act as agent to system update.
-
- Caution: This module requires additional review when modified.
- This module will have external input - capsule image.
- This external input must be validated carefully to avoid security issue like
- buffer overflow, integer overflow.
-
- FmpSetImage() will receive untrusted input and do basic validation.
-
- Copyright (c) 2016 - 2018, Intel Corporation. All rights reserved.
- SPDX-License-Identifier: BSD-2-Clause-Patent
-
-**/
-
-#include "SystemFirmwareDxe.h"
-
-//
-// SystemFmp driver private data
-//
-SYSTEM_FMP_PRIVATE_DATA *mSystemFmpPrivate = NULL;
-
-/**
- Dispatch system FMP images.
-
- Caution: This function may receive untrusted input.
-
- @param[in] Image The EDKII system FMP capsule image.
- @param[in] ImageSize The size of the EDKII system FMP capsule image in bytes.
- @param[out] LastAttemptVersion The last attempt version, which will be recorded in ESRT and FMP EFI_FIRMWARE_IMAGE_DESCRIPTOR.
- @param[out] LastAttemptStatus The last attempt status, which will be recorded in ESRT and FMP EFI_FIRMWARE_IMAGE_DESCRIPTOR.
-
- @retval EFI_SUCCESS Process Capsule Image successfully.
- @retval EFI_UNSUPPORTED Capsule image is not supported by the firmware.
- @retval EFI_VOLUME_CORRUPTED FV volume in the capsule is corrupted.
- @retval EFI_OUT_OF_RESOURCES Not enough memory.
-**/
-EFI_STATUS
-DispatchSystemFmpImages (
- IN VOID *Image,
- IN UINTN ImageSize,
- OUT UINT32 *LastAttemptVersion,
- OUT UINT32 *LastAttemptStatus
- )
-{
- EFI_STATUS Status;
- VOID *AuthenticatedImage;
- UINTN AuthenticatedImageSize;
- VOID *DispatchFvImage;
- UINTN DispatchFvImageSize;
- EFI_HANDLE FvProtocolHandle;
- EFI_FIRMWARE_VOLUME_HEADER *FvImage;
- BOOLEAN Result;
-
- AuthenticatedImage = NULL;
- AuthenticatedImageSize = 0;
-
- DEBUG ((DEBUG_INFO, "DispatchSystemFmpImages\n"));
-
- //
- // Verify
- //
- Status = CapsuleAuthenticateSystemFirmware (Image, ImageSize, FALSE, LastAttemptVersion, LastAttemptStatus, &AuthenticatedImage, &AuthenticatedImageSize);
- if (EFI_ERROR (Status)) {
- DEBUG ((DEBUG_INFO, "SystemFirmwareAuthenticateImage - %r\n", Status));
- return Status;
- }
-
- //
- // Get FV
- //
- Result = ExtractDriverFvImage (AuthenticatedImage, AuthenticatedImageSize, &DispatchFvImage, &DispatchFvImageSize);
- if (Result) {
- DEBUG ((DEBUG_INFO, "ExtractDriverFvImage\n"));
- //
- // Dispatch
- //
- if (((EFI_FIRMWARE_VOLUME_HEADER *)DispatchFvImage)->FvLength == DispatchFvImageSize) {
- FvImage = AllocatePages (EFI_SIZE_TO_PAGES (DispatchFvImageSize));
- if (FvImage != NULL) {
- CopyMem (FvImage, DispatchFvImage, DispatchFvImageSize);
- Status = gDS->ProcessFirmwareVolume (
- (VOID *)FvImage,
- (UINTN)FvImage->FvLength,
- &FvProtocolHandle
- );
- DEBUG ((DEBUG_INFO, "ProcessFirmwareVolume - %r\n", Status));
- if (!EFI_ERROR (Status)) {
- gDS->Dispatch ();
- DEBUG ((DEBUG_INFO, "Dispatch Done\n"));
- }
- }
- }
- }
-
- return EFI_SUCCESS;
-}
-
-/**
- Updates the firmware image of the device.
-
- This function updates the hardware with the new firmware image.
- This function returns EFI_UNSUPPORTED if the firmware image is not updatable.
- If the firmware image is updatable, the function should perform the following minimal validations
- before proceeding to do the firmware image update.
- - Validate the image authentication if image has attribute
- IMAGE_ATTRIBUTE_AUTHENTICATION_REQUIRED. The function returns
- EFI_SECURITY_VIOLATION if the validation fails.
- - Validate the image is a supported image for this device. The function returns EFI_ABORTED if
- the image is unsupported. The function can optionally provide more detailed information on
- why the image is not a supported image.
- - Validate the data from VendorCode if not null. Image validation must be performed before
- VendorCode data validation. VendorCode data is ignored or considered invalid if image
- validation failed. The function returns EFI_ABORTED if the data is invalid.
-
- VendorCode enables vendor to implement vendor-specific firmware image update policy. Null if
- the caller did not specify the policy or use the default policy. As an example, vendor can implement
- a policy to allow an option to force a firmware image update when the abort reason is due to the new
- firmware image version is older than the current firmware image version or bad image checksum.
- Sensitive operations such as those wiping the entire firmware image and render the device to be
- non-functional should be encoded in the image itself rather than passed with the VendorCode.
- AbortReason enables vendor to have the option to provide a more detailed description of the abort
- reason to the caller.
-
- @param[in] This A pointer to the EFI_FIRMWARE_MANAGEMENT_PROTOCOL instance.
- @param[in] ImageIndex A unique number identifying the firmware image(s) within the device.
- The number is between 1 and DescriptorCount.
- @param[in] Image Points to the new image.
- @param[in] ImageSize Size of the new image in bytes.
- @param[in] VendorCode This enables vendor to implement vendor-specific firmware image update policy.
- Null indicates the caller did not specify the policy or use the default policy.
- @param[in] Progress A function used by the driver to report the progress of the firmware update.
- @param[out] AbortReason A pointer to a pointer to a null-terminated string providing more
- details for the aborted operation. The buffer is allocated by this function
- with AllocatePool(), and it is the caller's responsibility to free it with a
- call to FreePool().
-
- @retval EFI_SUCCESS The device was successfully updated with the new image.
- @retval EFI_ABORTED The operation is aborted.
- @retval EFI_INVALID_PARAMETER The Image was NULL.
- @retval EFI_UNSUPPORTED The operation is not supported.
- @retval EFI_SECURITY_VIOLATION The operation could not be performed due to an authentication failure.
-
-**/
-EFI_STATUS
-EFIAPI
-FmpSetImage (
- IN EFI_FIRMWARE_MANAGEMENT_PROTOCOL *This,
- IN UINT8 ImageIndex,
- IN CONST VOID *Image,
- IN UINTN ImageSize,
- IN CONST VOID *VendorCode,
- IN EFI_FIRMWARE_MANAGEMENT_UPDATE_IMAGE_PROGRESS Progress,
- OUT CHAR16 **AbortReason
- )
-{
- SYSTEM_FMP_PRIVATE_DATA *SystemFmpPrivate;
- EFI_FIRMWARE_MANAGEMENT_PROTOCOL *SystemFmp;
- EFI_STATUS Status;
- EFI_STATUS VarStatus;
-
- if ((Image == NULL) || (ImageSize == 0) || (AbortReason == NULL)) {
- return EFI_INVALID_PARAMETER;
- }
-
- SystemFmpPrivate = SYSTEM_FMP_PRIVATE_DATA_FROM_FMP (This);
- *AbortReason = NULL;
-
- if ((ImageIndex == 0) || (ImageIndex > SystemFmpPrivate->DescriptorCount)) {
- return EFI_INVALID_PARAMETER;
- }
-
- //
- // Process FV
- //
- Status = DispatchSystemFmpImages ((VOID *)Image, ImageSize, &SystemFmpPrivate->LastAttempt.LastAttemptVersion, &SystemFmpPrivate->LastAttempt.LastAttemptStatus);
- DEBUG ((DEBUG_INFO, "(Agent)SetImage - LastAttempt Version - 0x%x, State - 0x%x\n", SystemFmpPrivate->LastAttempt.LastAttemptVersion, SystemFmpPrivate->LastAttempt.LastAttemptStatus));
- if (EFI_ERROR (Status)) {
- VarStatus = gRT->SetVariable (
- SYSTEM_FMP_LAST_ATTEMPT_VARIABLE_NAME,
- &gSystemFmpLastAttemptVariableGuid,
- EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS,
- sizeof (SystemFmpPrivate->LastAttempt),
- &SystemFmpPrivate->LastAttempt
- );
- DEBUG ((DEBUG_INFO, "(Agent)SetLastAttempt - %r\n", VarStatus));
- return Status;
- }
-
- //
- // Pass Thru to System FMP Protocol on same handle as FMP Protocol
- //
- Status = gBS->HandleProtocol (
- SystemFmpPrivate->Handle,
- &gSystemFmpProtocolGuid,
- (VOID **)&SystemFmp
- );
- if (EFI_ERROR (Status)) {
- Status = gBS->LocateProtocol (
- &gSystemFmpProtocolGuid,
- NULL,
- (VOID **)&SystemFmp
- );
- if (EFI_ERROR (Status)) {
- DEBUG ((DEBUG_INFO, "(Agent)SetImage - SystemFmpProtocol - %r\n", Status));
- SystemFmpPrivate->LastAttempt.LastAttemptStatus = LAST_ATTEMPT_STATUS_ERROR_INVALID_FORMAT;
- VarStatus = gRT->SetVariable (
- SYSTEM_FMP_LAST_ATTEMPT_VARIABLE_NAME,
- &gSystemFmpLastAttemptVariableGuid,
- EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS,
- sizeof (SystemFmpPrivate->LastAttempt),
- &SystemFmpPrivate->LastAttempt
- );
- DEBUG ((DEBUG_INFO, "(Agent)SetLastAttempt - %r\n", VarStatus));
- return Status;
- }
- }
-
- return SystemFmp->SetImage (SystemFmp, ImageIndex, Image, ImageSize, VendorCode, Progress, AbortReason);
-}
-
-/**
- System FMP module entrypoint
-
- @param[in] ImageHandle The firmware allocated handle for the EFI image.
- @param[in] SystemTable A pointer to the EFI System Table.
-
- @return EFI_SUCCESS System FMP module is initialized.
-**/
-EFI_STATUS
-EFIAPI
-SystemFirmwareReportMainDxe (
- IN EFI_HANDLE ImageHandle,
- IN EFI_SYSTEM_TABLE *SystemTable
- )
-{
- EFI_STATUS Status;
-
- //
- // Initialize SystemFmpPrivateData
- //
- mSystemFmpPrivate = AllocateZeroPool (sizeof (SYSTEM_FMP_PRIVATE_DATA));
- if (mSystemFmpPrivate == NULL) {
- return EFI_OUT_OF_RESOURCES;
- }
-
- Status = InitializePrivateData (mSystemFmpPrivate);
- if (EFI_ERROR (Status)) {
- FreePool (mSystemFmpPrivate);
- mSystemFmpPrivate = NULL;
- return Status;
- }
-
- //
- // Install FMP protocol.
- //
- Status = gBS->InstallProtocolInterface (
- &mSystemFmpPrivate->Handle,
- &gEfiFirmwareManagementProtocolGuid,
- EFI_NATIVE_INTERFACE,
- &mSystemFmpPrivate->Fmp
- );
- if (EFI_ERROR (Status)) {
- FreePool (mSystemFmpPrivate);
- mSystemFmpPrivate = NULL;
- return Status;
- }
-
- return Status;
-}
diff --git a/SignedCapsulePkg/Universal/SystemFirmwareUpdate/SystemFirmwareReportDxe.inf b/SignedCapsulePkg/Universal/SystemFirmwareUpdate/SystemFirmwareReportDxe.inf
deleted file mode 100644
index b3f3b7f748..0000000000
--- a/SignedCapsulePkg/Universal/SystemFirmwareUpdate/SystemFirmwareReportDxe.inf
+++ /dev/null
@@ -1,62 +0,0 @@
-## @file
-# SystemFirmware FMP report driver.
-#
-# Produce FMP instance to report system firmware EFI_FIRMWARE_IMAGE_DESCRIPTOR.
-#
-# Copyright (c) 2016, Intel Corporation. All rights reserved.
-# SPDX-License-Identifier: BSD-2-Clause-Patent
-#
-##
-
-[Defines]
- INF_VERSION = 0x00010005
- BASE_NAME = SystemFirmwareReportDxe
- MODULE_UNI_FILE = SystemFirmwareReportDxe.uni
- FILE_GUID = BC1A046C-7DBD-41F2-94E5-D7595554CAF4
- MODULE_TYPE = DXE_DRIVER
- VERSION_STRING = 1.0
- ENTRY_POINT = SystemFirmwareReportMainDxe
-
-#
-# The following information is for reference only and not required by the build tools.
-#
-# VALID_ARCHITECTURES = X64
-#
-
-[Sources]
- SystemFirmwareDxe.h
- SystemFirmwareCommonDxe.c
- SystemFirmwareReportDxe.c
-
-[Packages]
- MdePkg/MdePkg.dec
- MdeModulePkg/MdeModulePkg.dec
- SignedCapsulePkg/SignedCapsulePkg.dec
-
-[LibraryClasses]
- BaseLib
- UefiLib
- BaseMemoryLib
- DebugLib
- PcdLib
- MemoryAllocationLib
- UefiBootServicesTableLib
- HobLib
- UefiRuntimeServicesTableLib
- UefiDriverEntryPoint
- DxeServicesTableLib
- EdkiiSystemCapsuleLib
-
-[Pcd]
- gEfiMdeModulePkgTokenSpaceGuid.PcdSystemFmpCapsuleImageTypeIdGuid ## CONSUMES
- gEfiSignedCapsulePkgTokenSpaceGuid.PcdEdkiiSystemFirmwareImageDescriptor ## CONSUMES
-
-[Protocols]
- gEfiFirmwareManagementProtocolGuid ## PRODUCES
-
-[Depex]
- gEfiVariableArchProtocolGuid
-
-[UserExtensions.TianoCore."ExtraFiles"]
- SystemFirmwareReportDxeExtra.uni
-
diff --git a/SignedCapsulePkg/Universal/SystemFirmwareUpdate/SystemFirmwareReportDxe.uni b/SignedCapsulePkg/Universal/SystemFirmwareUpdate/SystemFirmwareReportDxe.uni
deleted file mode 100644
index 91b7299d6f..0000000000
--- a/SignedCapsulePkg/Universal/SystemFirmwareUpdate/SystemFirmwareReportDxe.uni
+++ /dev/null
@@ -1,15 +0,0 @@
-// /** @file
-// SystemFirmware FMP report driver.
-//
-// Produce FMP instance to report system firmware EFI_FIRMWARE_IMAGE_DESCRIPTOR.
-//
-// Copyright (c) 2016, Intel Corporation. All rights reserved.
-//
-// SPDX-License-Identifier: BSD-2-Clause-Patent
-//
-// **/
-
-
-#string STR_MODULE_ABSTRACT #language en-US "SystemFirmware FMP report driver."
-
-#string STR_MODULE_DESCRIPTION #language en-US "Produce FMP instance to report system firmware EFI_FIRMWARE_IMAGE_DESCRIPTOR."
diff --git a/SignedCapsulePkg/Universal/SystemFirmwareUpdate/SystemFirmwareReportDxeExtra.uni b/SignedCapsulePkg/Universal/SystemFirmwareUpdate/SystemFirmwareReportDxeExtra.uni
deleted file mode 100644
index 0ec47f2b7f..0000000000
--- a/SignedCapsulePkg/Universal/SystemFirmwareUpdate/SystemFirmwareReportDxeExtra.uni
+++ /dev/null
@@ -1,14 +0,0 @@
-// /** @file
-// SystemFirmwareReportDxe Localized Strings and Content
-//
-// Copyright (c) 2016, Intel Corporation. All rights reserved.
-//
-// SPDX-License-Identifier: BSD-2-Clause-Patent
-//
-// **/
-
-#string STR_PROPERTIES_MODULE_NAME
-#language en-US
-"SystemFirmwareReport DXE Driver"
-
-
diff --git a/SignedCapsulePkg/Universal/SystemFirmwareUpdate/SystemFirmwareUpdateDxe.c b/SignedCapsulePkg/Universal/SystemFirmwareUpdate/SystemFirmwareUpdateDxe.c
deleted file mode 100644
index c33b515341..0000000000
--- a/SignedCapsulePkg/Universal/SystemFirmwareUpdate/SystemFirmwareUpdateDxe.c
+++ /dev/null
@@ -1,901 +0,0 @@
-/** @file
- SetImage instance to update system firmware.
-
- Caution: This module requires additional review when modified.
- This module will have external input - capsule image.
- This external input must be validated carefully to avoid security issue like
- buffer overflow, integer overflow.
-
- FmpSetImage() will receive untrusted input and do basic validation.
-
- Copyright (c) 2016 - 2018, Intel Corporation. All rights reserved.
- SPDX-License-Identifier: BSD-2-Clause-Patent
-
-**/
-
-#include "SystemFirmwareDxe.h"
-
-//
-// SystemFmp driver private data
-//
-SYSTEM_FMP_PRIVATE_DATA *mSystemFmpPrivate = NULL;
-
-EFI_GUID mCurrentImageTypeId;
-
-BOOLEAN mNvRamUpdated = FALSE;
-
-/**
- Parse Config data file to get the updated data array.
-
- @param[in] DataBuffer Config raw file buffer.
- @param[in] BufferSize Size of raw buffer.
- @param[in, out] ConfigHeader Pointer to the config header.
- @param[in, out] UpdateArray Pointer to the config of update data.
-
- @retval EFI_NOT_FOUND No config data is found.
- @retval EFI_OUT_OF_RESOURCES No enough memory is allocated.
- @retval EFI_SUCCESS Parse the config file successfully.
-
-**/
-EFI_STATUS
-ParseUpdateDataFile (
- IN UINT8 *DataBuffer,
- IN UINTN BufferSize,
- IN OUT CONFIG_HEADER *ConfigHeader,
- IN OUT UPDATE_CONFIG_DATA **UpdateArray
- );
-
-/**
- Update System Firmware image component.
-
- @param[in] SystemFirmwareImage Points to the System Firmware image.
- @param[in] SystemFirmwareImageSize The length of the System Firmware image in bytes.
- @param[in] ConfigData Points to the component configuration structure.
- @param[out] LastAttemptVersion The last attempt version, which will be recorded in ESRT and FMP EFI_FIRMWARE_IMAGE_DESCRIPTOR.
- @param[out] LastAttemptStatus The last attempt status, which will be recorded in ESRT and FMP EFI_FIRMWARE_IMAGE_DESCRIPTOR.
- @param[in] Progress A function used by the driver to report the progress of the firmware update.
- @param[in] StartPercentage The start completion percentage value that may be used to report progress during the flash write operation.
- @param[in] EndPercentage The end completion percentage value that may be used to report progress during the flash write operation.
-
- @retval EFI_SUCCESS The System Firmware image is updated.
- @retval EFI_WRITE_PROTECTED The flash device is read only.
-**/
-EFI_STATUS
-PerformUpdate (
- IN VOID *SystemFirmwareImage,
- IN UINTN SystemFirmwareImageSize,
- IN UPDATE_CONFIG_DATA *ConfigData,
- OUT UINT32 *LastAttemptVersion,
- OUT UINT32 *LastAttemptStatus,
- IN EFI_FIRMWARE_MANAGEMENT_UPDATE_IMAGE_PROGRESS Progress,
- IN UINTN StartPercentage,
- IN UINTN EndPercentage
- )
-{
- EFI_STATUS Status;
-
- DEBUG ((DEBUG_INFO, "PlatformUpdate:"));
- DEBUG ((DEBUG_INFO, " BaseAddress - 0x%lx,", ConfigData->BaseAddress));
- DEBUG ((DEBUG_INFO, " ImageOffset - 0x%x,", ConfigData->ImageOffset));
- DEBUG ((DEBUG_INFO, " Legnth - 0x%x\n", ConfigData->Length));
- if (Progress != NULL) {
- Progress (StartPercentage);
- }
-
- Status = PerformFlashWriteWithProgress (
- ConfigData->FirmwareType,
- ConfigData->BaseAddress,
- ConfigData->AddressType,
- (VOID *)((UINTN)SystemFirmwareImage + (UINTN)ConfigData->ImageOffset),
- ConfigData->Length,
- Progress,
- StartPercentage,
- EndPercentage
- );
- if (Progress != NULL) {
- Progress (EndPercentage);
- }
-
- if (!EFI_ERROR (Status)) {
- *LastAttemptStatus = LAST_ATTEMPT_STATUS_SUCCESS;
- if (ConfigData->FirmwareType == PlatformFirmwareTypeNvRam) {
- mNvRamUpdated = TRUE;
- }
- } else {
- *LastAttemptStatus = LAST_ATTEMPT_STATUS_ERROR_UNSUCCESSFUL;
- }
-
- return Status;
-}
-
-/**
- Update System Firmware image.
-
- @param[in] SystemFirmwareImage Points to the System Firmware image.
- @param[in] SystemFirmwareImageSize The length of the System Firmware image in bytes.
- @param[in] ConfigImage Points to the config file image.
- @param[in] ConfigImageSize The length of the config file image in bytes.
- @param[out] LastAttemptVersion The last attempt version, which will be recorded in ESRT and FMP EFI_FIRMWARE_IMAGE_DESCRIPTOR.
- @param[out] LastAttemptStatus The last attempt status, which will be recorded in ESRT and FMP EFI_FIRMWARE_IMAGE_DESCRIPTOR.
- @param[in] Progress A function used by the driver to report the progress of the firmware update.
-
- @retval EFI_SUCCESS The System Firmware image is updated.
- @retval EFI_WRITE_PROTECTED The flash device is read only.
-**/
-EFI_STATUS
-UpdateImage (
- IN VOID *SystemFirmwareImage,
- IN UINTN SystemFirmwareImageSize,
- IN VOID *ConfigImage,
- IN UINTN ConfigImageSize,
- OUT UINT32 *LastAttemptVersion,
- OUT UINT32 *LastAttemptStatus,
- IN EFI_FIRMWARE_MANAGEMENT_UPDATE_IMAGE_PROGRESS Progress
- )
-{
- EFI_STATUS Status;
- UPDATE_CONFIG_DATA *ConfigData;
- UPDATE_CONFIG_DATA *UpdateConfigData;
- CONFIG_HEADER ConfigHeader;
- UINTN Index;
- UINTN TotalSize;
- UINTN BytesWritten;
- UINTN StartPercentage;
- UINTN EndPercentage;
-
- if (ConfigImage == NULL) {
- DEBUG ((DEBUG_INFO, "PlatformUpdate (NoConfig):"));
- DEBUG ((DEBUG_INFO, " BaseAddress - 0x%x,", 0));
- DEBUG ((DEBUG_INFO, " Length - 0x%x\n", SystemFirmwareImageSize));
- // ASSUME the whole System Firmware include NVRAM region.
- StartPercentage = 0;
- EndPercentage = 100;
- if (Progress != NULL) {
- Progress (StartPercentage);
- }
-
- Status = PerformFlashWriteWithProgress (
- PlatformFirmwareTypeNvRam,
- 0,
- FlashAddressTypeRelativeAddress,
- SystemFirmwareImage,
- SystemFirmwareImageSize,
- Progress,
- StartPercentage,
- EndPercentage
- );
- if (Progress != NULL) {
- Progress (EndPercentage);
- }
-
- if (!EFI_ERROR (Status)) {
- *LastAttemptStatus = LAST_ATTEMPT_STATUS_SUCCESS;
- mNvRamUpdated = TRUE;
- } else {
- *LastAttemptStatus = LAST_ATTEMPT_STATUS_ERROR_UNSUCCESSFUL;
- }
-
- return Status;
- }
-
- DEBUG ((DEBUG_INFO, "PlatformUpdate (With Config):\n"));
- ConfigData = NULL;
- ZeroMem (&ConfigHeader, sizeof (ConfigHeader));
- Status = ParseUpdateDataFile (
- ConfigImage,
- ConfigImageSize,
- &ConfigHeader,
- &ConfigData
- );
- DEBUG ((DEBUG_INFO, "ParseUpdateDataFile - %r\n", Status));
- if (EFI_ERROR (Status)) {
- *LastAttemptStatus = LAST_ATTEMPT_STATUS_ERROR_UNSUCCESSFUL;
- return EFI_INVALID_PARAMETER;
- }
-
- DEBUG ((DEBUG_INFO, "ConfigHeader.NumOfUpdates - 0x%x\n", ConfigHeader.NumOfUpdates));
- DEBUG ((DEBUG_INFO, "PcdEdkiiSystemFirmwareFileGuid - %g\n", PcdGetPtr (PcdEdkiiSystemFirmwareFileGuid)));
-
- TotalSize = 0;
- for (Index = 0; Index < ConfigHeader.NumOfUpdates; Index++) {
- if (CompareGuid (&ConfigData[Index].FileGuid, PcdGetPtr (PcdEdkiiSystemFirmwareFileGuid))) {
- TotalSize = TotalSize + ConfigData[Index].Length;
- }
- }
-
- BytesWritten = 0;
- Index = 0;
- UpdateConfigData = ConfigData;
- while (Index < ConfigHeader.NumOfUpdates) {
- if (CompareGuid (&UpdateConfigData->FileGuid, PcdGetPtr (PcdEdkiiSystemFirmwareFileGuid))) {
- DEBUG ((DEBUG_INFO, "FileGuid - %g (processing)\n", &UpdateConfigData->FileGuid));
- StartPercentage = (BytesWritten * 100) / TotalSize;
- EndPercentage = ((BytesWritten + UpdateConfigData->Length) * 100) / TotalSize;
- Status = PerformUpdate (
- SystemFirmwareImage,
- SystemFirmwareImageSize,
- UpdateConfigData,
- LastAttemptVersion,
- LastAttemptStatus,
- Progress,
- StartPercentage,
- EndPercentage
- );
- //
- // Shall updates be serialized so that if an update is not successfully completed,
- // the remaining updates won't be performed.
- //
- if (EFI_ERROR (Status)) {
- break;
- }
- } else {
- DEBUG ((DEBUG_INFO, "FileGuid - %g (ignored)\n", &UpdateConfigData->FileGuid));
- }
-
- BytesWritten += UpdateConfigData->Length;
-
- Index++;
- UpdateConfigData++;
- }
-
- return Status;
-}
-
-/**
- Authenticate and update System Firmware image.
-
- Caution: This function may receive untrusted input.
-
- @param[in] Image The EDKII system FMP capsule image.
- @param[in] ImageSize The size of the EDKII system FMP capsule image in bytes.
- @param[out] LastAttemptVersion The last attempt version, which will be recorded in ESRT and FMP EFI_FIRMWARE_IMAGE_DESCRIPTOR.
- @param[out] LastAttemptStatus The last attempt status, which will be recorded in ESRT and FMP EFI_FIRMWARE_IMAGE_DESCRIPTOR.
- @param[in] Progress A function used by the driver to report the progress of the firmware update.
-
- @retval EFI_SUCCESS EDKII system FMP capsule passes authentication and the System Firmware image is updated.
- @retval EFI_SECURITY_VIOLATION EDKII system FMP capsule fails authentication and the System Firmware image is not updated.
- @retval EFI_WRITE_PROTECTED The flash device is read only.
-**/
-EFI_STATUS
-SystemFirmwareAuthenticatedUpdate (
- IN VOID *Image,
- IN UINTN ImageSize,
- OUT UINT32 *LastAttemptVersion,
- OUT UINT32 *LastAttemptStatus,
- IN EFI_FIRMWARE_MANAGEMENT_UPDATE_IMAGE_PROGRESS Progress
- )
-{
- EFI_STATUS Status;
- VOID *SystemFirmwareImage;
- UINTN SystemFirmwareImageSize;
- VOID *ConfigImage;
- UINTN ConfigImageSize;
- VOID *AuthenticatedImage;
- UINTN AuthenticatedImageSize;
-
- AuthenticatedImage = NULL;
- AuthenticatedImageSize = 0;
-
- DEBUG ((DEBUG_INFO, "SystemFirmwareAuthenticatedUpdate...\n"));
-
- Status = CapsuleAuthenticateSystemFirmware (Image, ImageSize, FALSE, LastAttemptVersion, LastAttemptStatus, &AuthenticatedImage, &AuthenticatedImageSize);
- if (EFI_ERROR (Status)) {
- DEBUG ((DEBUG_INFO, "SystemFirmwareAuthenticateImage - %r\n", Status));
- return Status;
- }
-
- DEBUG ((DEBUG_INFO, "ExtractSystemFirmwareImage ...\n"));
- ExtractSystemFirmwareImage (AuthenticatedImage, AuthenticatedImageSize, &SystemFirmwareImage, &SystemFirmwareImageSize);
- DEBUG ((DEBUG_INFO, "ExtractConfigImage ...\n"));
- ExtractConfigImage (AuthenticatedImage, AuthenticatedImageSize, &ConfigImage, &ConfigImageSize);
-
- DEBUG ((DEBUG_INFO, "UpdateImage ...\n"));
- Status = UpdateImage (SystemFirmwareImage, SystemFirmwareImageSize, ConfigImage, ConfigImageSize, LastAttemptVersion, LastAttemptStatus, Progress);
- if (EFI_ERROR (Status)) {
- DEBUG ((DEBUG_INFO, "UpdateImage - %r\n", Status));
- return Status;
- }
-
- DEBUG ((DEBUG_INFO, "SystemFirmwareAuthenticatedUpdate Done\n"));
-
- return EFI_SUCCESS;
-}
-
-/**
-
- This code finds variable in storage blocks (Volatile or Non-Volatile).
-
- @param[in] VariableName Name of Variable to be found.
- @param[in] VendorGuid Variable vendor GUID.
- @param[out] Attributes Attribute value of the variable found.
- @param[in, out] DataSize Size of Data found. If size is less than the
- data, this value contains the required size.
- @param[out] Data Data pointer.
-
- @return EFI_INVALID_PARAMETER Invalid parameter.
- @return EFI_SUCCESS Find the specified variable.
- @return EFI_NOT_FOUND Not found.
- @return EFI_BUFFER_TO_SMALL DataSize is too small for the result.
-
-**/
-EFI_STATUS
-EFIAPI
-GetVariableHook (
- IN CHAR16 *VariableName,
- IN EFI_GUID *VendorGuid,
- OUT UINT32 *Attributes OPTIONAL,
- IN OUT UINTN *DataSize,
- OUT VOID *Data
- )
-{
- DEBUG ((DEBUG_INFO, "GetVariableHook - %S, %g\n", VariableName, VendorGuid));
- return EFI_NOT_AVAILABLE_YET;
-}
-
-/**
-
- This code Finds the Next available variable.
-
- @param[in, out] VariableNameSize Size of the variable name.
- @param[in, out] VariableName Pointer to variable name.
- @param[in, out] VendorGuid Variable Vendor Guid.
-
- @return EFI_INVALID_PARAMETER Invalid parameter.
- @return EFI_SUCCESS Find the specified variable.
- @return EFI_NOT_FOUND Not found.
- @return EFI_BUFFER_TO_SMALL DataSize is too small for the result.
-
-**/
-EFI_STATUS
-EFIAPI
-GetNextVariableNameHook (
- IN OUT UINTN *VariableNameSize,
- IN OUT CHAR16 *VariableName,
- IN OUT EFI_GUID *VendorGuid
- )
-{
- DEBUG ((DEBUG_INFO, "GetNextVariableNameHook - %S, %g\n", VariableName, VendorGuid));
- return EFI_NOT_AVAILABLE_YET;
-}
-
-/**
-
- This code sets variable in storage blocks (Volatile or Non-Volatile).
-
- @param[in] VariableName Name of Variable to be found.
- @param[in] VendorGuid Variable vendor GUID.
- @param[in] Attributes Attribute value of the variable found
- @param[in] DataSize Size of Data found. If size is less than the
- data, this value contains the required size.
- @param[in] Data Data pointer.
-
- @return EFI_INVALID_PARAMETER Invalid parameter.
- @return EFI_SUCCESS Set successfully.
- @return EFI_OUT_OF_RESOURCES Resource not enough to set variable.
- @return EFI_NOT_FOUND Not found.
- @return EFI_WRITE_PROTECTED Variable is read-only.
-
-**/
-EFI_STATUS
-EFIAPI
-SetVariableHook (
- IN CHAR16 *VariableName,
- IN EFI_GUID *VendorGuid,
- IN UINT32 Attributes,
- IN UINTN DataSize,
- IN VOID *Data
- )
-{
- DEBUG ((DEBUG_INFO, "SetVariableHook - %S, %g, 0x%x (0x%x)\n", VariableName, VendorGuid, Attributes, DataSize));
- return EFI_NOT_AVAILABLE_YET;
-}
-
-/**
-
- This code returns information about the EFI variables.
-
- @param[in] Attributes Attributes bitmask to specify the type of variables
- on which to return information.
- @param[out] MaximumVariableStorageSize Pointer to the maximum size of the storage space available
- for the EFI variables associated with the attributes specified.
- @param[out] RemainingVariableStorageSize Pointer to the remaining size of the storage space available
- for EFI variables associated with the attributes specified.
- @param[out] MaximumVariableSize Pointer to the maximum size of an individual EFI variables
- associated with the attributes specified.
-
- @return EFI_SUCCESS Query successfully.
-
-**/
-EFI_STATUS
-EFIAPI
-QueryVariableInfoHook (
- IN UINT32 Attributes,
- OUT UINT64 *MaximumVariableStorageSize,
- OUT UINT64 *RemainingVariableStorageSize,
- OUT UINT64 *MaximumVariableSize
- )
-{
- DEBUG ((DEBUG_INFO, "QueryVariableInfoHook - 0x%x\n", Attributes));
- return EFI_NOT_AVAILABLE_YET;
-}
-
-/**
- Updates the firmware image of the device.
-
- This function updates the hardware with the new firmware image.
- This function returns EFI_UNSUPPORTED if the firmware image is not updatable.
- If the firmware image is updatable, the function should perform the following minimal validations
- before proceeding to do the firmware image update.
- - Validate the image authentication if image has attribute
- IMAGE_ATTRIBUTE_AUTHENTICATION_REQUIRED. The function returns
- EFI_SECURITY_VIOLATION if the validation fails.
- - Validate the image is a supported image for this device. The function returns EFI_ABORTED if
- the image is unsupported. The function can optionally provide more detailed information on
- why the image is not a supported image.
- - Validate the data from VendorCode if not null. Image validation must be performed before
- VendorCode data validation. VendorCode data is ignored or considered invalid if image
- validation failed. The function returns EFI_ABORTED if the data is invalid.
-
- VendorCode enables vendor to implement vendor-specific firmware image update policy. Null if
- the caller did not specify the policy or use the default policy. As an example, vendor can implement
- a policy to allow an option to force a firmware image update when the abort reason is due to the new
- firmware image version is older than the current firmware image version or bad image checksum.
- Sensitive operations such as those wiping the entire firmware image and render the device to be
- non-functional should be encoded in the image itself rather than passed with the VendorCode.
- AbortReason enables vendor to have the option to provide a more detailed description of the abort
- reason to the caller.
-
- @param[in] This A pointer to the EFI_FIRMWARE_MANAGEMENT_PROTOCOL instance.
- @param[in] ImageIndex A unique number identifying the firmware image(s) within the device.
- The number is between 1 and DescriptorCount.
- @param[in] Image Points to the new image.
- @param[in] ImageSize Size of the new image in bytes.
- @param[in] VendorCode This enables vendor to implement vendor-specific firmware image update policy.
- Null indicates the caller did not specify the policy or use the default policy.
- @param[in] Progress A function used by the driver to report the progress of the firmware update.
- @param[out] AbortReason A pointer to a pointer to a null-terminated string providing more
- details for the aborted operation. The buffer is allocated by this function
- with AllocatePool(), and it is the caller's responsibility to free it with a
- call to FreePool().
-
- @retval EFI_SUCCESS The device was successfully updated with the new image.
- @retval EFI_ABORTED The operation is aborted.
- @retval EFI_INVALID_PARAMETER The Image was NULL.
- @retval EFI_UNSUPPORTED The operation is not supported.
- @retval EFI_SECURITY_VIOLATION The operation could not be performed due to an authentication failure.
-
-**/
-EFI_STATUS
-EFIAPI
-FmpSetImage (
- IN EFI_FIRMWARE_MANAGEMENT_PROTOCOL *This,
- IN UINT8 ImageIndex,
- IN CONST VOID *Image,
- IN UINTN ImageSize,
- IN CONST VOID *VendorCode,
- IN EFI_FIRMWARE_MANAGEMENT_UPDATE_IMAGE_PROGRESS Progress,
- OUT CHAR16 **AbortReason
- )
-{
- EFI_STATUS Status;
- EFI_STATUS VarStatus;
- SYSTEM_FMP_PRIVATE_DATA *SystemFmpPrivate;
-
- if ((Image == NULL) || (ImageSize == 0) || (AbortReason == NULL)) {
- return EFI_INVALID_PARAMETER;
- }
-
- SystemFmpPrivate = SYSTEM_FMP_PRIVATE_DATA_FROM_FMP (This);
- *AbortReason = NULL;
-
- if ((ImageIndex == 0) || (ImageIndex > SystemFmpPrivate->DescriptorCount)) {
- return EFI_INVALID_PARAMETER;
- }
-
- Status = SystemFirmwareAuthenticatedUpdate ((VOID *)Image, ImageSize, &SystemFmpPrivate->LastAttempt.LastAttemptVersion, &SystemFmpPrivate->LastAttempt.LastAttemptStatus, Progress);
- DEBUG ((DEBUG_INFO, "SetImage - LastAttempt Version - 0x%x, State - 0x%x\n", SystemFmpPrivate->LastAttempt.LastAttemptVersion, SystemFmpPrivate->LastAttempt.LastAttemptStatus));
-
- //
- // If NVRAM is updated, we should no longer touch variable services, because
- // the current variable driver may not manage the new NVRAM region.
- //
- if (mNvRamUpdated) {
- DEBUG ((DEBUG_INFO, "NvRamUpdated, Update Variable Services\n"));
- gRT->GetVariable = GetVariableHook;
- gRT->GetNextVariableName = GetNextVariableNameHook;
- gRT->SetVariable = SetVariableHook;
- gRT->QueryVariableInfo = QueryVariableInfoHook;
-
- gRT->Hdr.CRC32 = 0;
- gBS->CalculateCrc32 (
- (UINT8 *)&gRT->Hdr,
- gRT->Hdr.HeaderSize,
- &gRT->Hdr.CRC32
- );
- }
-
- VarStatus = gRT->SetVariable (
- SYSTEM_FMP_LAST_ATTEMPT_VARIABLE_NAME,
- &gSystemFmpLastAttemptVariableGuid,
- EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS,
- sizeof (SystemFmpPrivate->LastAttempt),
- &SystemFmpPrivate->LastAttempt
- );
- DEBUG ((DEBUG_INFO, "SetLastAttempt - %r\n", VarStatus));
-
- return Status;
-}
-
-/**
- Get the set of EFI_FIRMWARE_IMAGE_DESCRIPTOR structures from an FMP Protocol.
-
- @param[in] Handle Handle with an FMP Protocol or a System FMP
- Protocol.
- @param[in] ProtocolGuid Pointer to the FMP Protocol GUID or System FMP
- Protocol GUID.
- @param[out] FmpImageInfoCount Pointer to the number of
- EFI_FIRMWARE_IMAGE_DESCRIPTOR structures.
- @param[out] DescriptorSize Pointer to the size, in bytes, of each
- EFI_FIRMWARE_IMAGE_DESCRIPTOR structure.
-
- @return NULL No EFI_FIRMWARE_IMAGE_DESCRIPTOR structures found.
- @return !NULL Pointer to a buffer of EFI_FIRMWARE_IMAGE_DESCRIPTOR structures
- allocated using AllocatePool(). Caller must free buffer with
- FreePool().
-**/
-EFI_FIRMWARE_IMAGE_DESCRIPTOR *
-GetFmpImageDescriptors (
- IN EFI_HANDLE Handle,
- IN EFI_GUID *ProtocolGuid,
- OUT UINT8 *FmpImageInfoCount,
- OUT UINTN *DescriptorSize
- )
-{
- EFI_STATUS Status;
- EFI_FIRMWARE_MANAGEMENT_PROTOCOL *Fmp;
- UINTN ImageInfoSize;
- EFI_FIRMWARE_IMAGE_DESCRIPTOR *FmpImageInfoBuf;
- UINT32 FmpImageInfoDescriptorVer;
- UINT32 PackageVersion;
- CHAR16 *PackageVersionName;
-
- *FmpImageInfoCount = 0;
- *DescriptorSize = 0;
-
- Status = gBS->HandleProtocol (
- Handle,
- ProtocolGuid,
- (VOID **)&Fmp
- );
- if (EFI_ERROR (Status)) {
- return NULL;
- }
-
- //
- // Determine the size required for the set of EFI_FIRMWARE_IMAGE_DESCRIPTORs.
- //
- ImageInfoSize = 0;
- Status = Fmp->GetImageInfo (
- Fmp, // FMP Pointer
- &ImageInfoSize, // Buffer Size (in this case 0)
- NULL, // NULL so we can get size
- &FmpImageInfoDescriptorVer, // DescriptorVersion
- FmpImageInfoCount, // DescriptorCount
- DescriptorSize, // DescriptorSize
- &PackageVersion, // PackageVersion
- &PackageVersionName // PackageVersionName
- );
- if (Status != EFI_BUFFER_TOO_SMALL) {
- DEBUG ((DEBUG_ERROR, "SystemFirmwareUpdateDxe: Unexpected Failure. Status = %r\n", Status));
- return NULL;
- }
-
- //
- // Allocate buffer for the set of EFI_FIRMWARE_IMAGE_DESCRIPTORs.
- //
- FmpImageInfoBuf = NULL;
- FmpImageInfoBuf = AllocateZeroPool (ImageInfoSize);
- if (FmpImageInfoBuf == NULL) {
- DEBUG ((DEBUG_ERROR, "SystemFirmwareUpdateDxe: Failed to allocate memory for descriptors.\n"));
- return NULL;
- }
-
- //
- // Retrieve the set of EFI_FIRMWARE_IMAGE_DESCRIPTORs.
- //
- PackageVersionName = NULL;
- Status = Fmp->GetImageInfo (
- Fmp,
- &ImageInfoSize, // ImageInfoSize
- FmpImageInfoBuf, // ImageInfo
- &FmpImageInfoDescriptorVer, // DescriptorVersion
- FmpImageInfoCount, // DescriptorCount
- DescriptorSize, // DescriptorSize
- &PackageVersion, // PackageVersion
- &PackageVersionName // PackageVersionName
- );
-
- //
- // Free unused PackageVersionName return buffer
- //
- if (PackageVersionName != NULL) {
- FreePool (PackageVersionName);
- PackageVersionName = NULL;
- }
-
- if (EFI_ERROR (Status)) {
- DEBUG ((DEBUG_ERROR, "SystemFirmwareUpdateDxe: Failure in GetImageInfo. Status = %r\n", Status));
- if (FmpImageInfoBuf != NULL) {
- FreePool (FmpImageInfoBuf);
- }
-
- return NULL;
- }
-
- return FmpImageInfoBuf;
-}
-
-/**
- Search for handles with an FMP protocol whose EFI_FIRMWARE_IMAGE_DESCRIPTOR
- ImageTypeId matches the ImageTypeId produced by this module.
-
- @param[in] ProtocolGuid Pointer to the GUID of the protocol to search.
- @param[out] HandleCount Pointer to the number of returned handles.
-
- @return NULL No matching handles found.
- @return !NULL Pointer to a buffer of handles allocated using AllocatePool().
- Caller must free buffer with FreePool().
-**/
-EFI_HANDLE *
-FindMatchingFmpHandles (
- IN EFI_GUID *ProtocolGuid,
- OUT UINTN *HandleCount
- )
-{
- EFI_STATUS Status;
- UINTN TempHandleCount;
- EFI_HANDLE *HandleBuffer;
- UINTN Index;
- UINTN Index2;
- UINTN Index3;
- EFI_FIRMWARE_IMAGE_DESCRIPTOR *OriginalFmpImageInfoBuf;
- EFI_FIRMWARE_IMAGE_DESCRIPTOR *FmpImageInfoBuf;
- UINT8 FmpImageInfoCount;
- UINTN DescriptorSize;
- BOOLEAN MatchFound;
-
- *HandleCount = 0;
- TempHandleCount = 0;
- HandleBuffer = NULL;
- Status = gBS->LocateHandleBuffer (
- ByProtocol,
- ProtocolGuid,
- NULL,
- &TempHandleCount,
- &HandleBuffer
- );
- if (EFI_ERROR (Status)) {
- return NULL;
- }
-
- for (Index = 0; Index < TempHandleCount; Index++) {
- OriginalFmpImageInfoBuf = GetFmpImageDescriptors (
- HandleBuffer[Index],
- ProtocolGuid,
- &FmpImageInfoCount,
- &DescriptorSize
- );
-
- //
- // Loop through the set of EFI_FIRMWARE_IMAGE_DESCRIPTORs.
- //
- MatchFound = FALSE;
- if (OriginalFmpImageInfoBuf != NULL) {
- FmpImageInfoBuf = OriginalFmpImageInfoBuf;
-
- for (Index2 = 0; Index2 < FmpImageInfoCount; Index2++) {
- for (Index3 = 0; Index3 < mSystemFmpPrivate->DescriptorCount; Index3++) {
- MatchFound = CompareGuid (
- &FmpImageInfoBuf->ImageTypeId,
- &mSystemFmpPrivate->ImageDescriptor[Index3].ImageTypeId
- );
- if (MatchFound) {
- break;
- }
- }
-
- if (MatchFound) {
- break;
- }
-
- //
- // Increment the buffer pointer ahead by the size of the descriptor
- //
- FmpImageInfoBuf = (EFI_FIRMWARE_IMAGE_DESCRIPTOR *)(((UINT8 *)FmpImageInfoBuf) + DescriptorSize);
- }
-
- if (MatchFound) {
- HandleBuffer[*HandleCount] = HandleBuffer[Index];
- (*HandleCount)++;
- }
-
- FreePool (OriginalFmpImageInfoBuf);
- }
- }
-
- if ((*HandleCount) == 0) {
- //
- // No any matching handle.
- //
- FreePool (HandleBuffer);
- return NULL;
- }
-
- return HandleBuffer;
-}
-
-/**
- Uninstall System FMP Protocol instances that may have been installed by
- SystemFirmwareUpdateDxe drivers dispatches by other capsules.
-
- @retval EFI_SUCCESS All System FMP Protocols found were uninstalled.
- @return Other One or more System FMP Protocols could not be uninstalled.
-
-**/
-EFI_STATUS
-UninstallMatchingSystemFmpProtocols (
- VOID
- )
-{
- EFI_STATUS Status;
- EFI_HANDLE *HandleBuffer;
- UINTN HandleCount;
- UINTN Index;
- EFI_FIRMWARE_MANAGEMENT_PROTOCOL *SystemFmp;
-
- //
- // Uninstall SystemFmpProtocol instances that may have been produced by
- // the SystemFirmwareUpdate drivers in FVs dispatched by other capsules.
- //
- HandleBuffer = FindMatchingFmpHandles (
- &gSystemFmpProtocolGuid,
- &HandleCount
- );
- DEBUG ((DEBUG_INFO, "SystemFirmwareUpdateDxe: Found %d matching System FMP instances\n", HandleCount));
-
- for (Index = 0; Index < HandleCount; Index++) {
- Status = gBS->HandleProtocol (
- HandleBuffer[Index],
- &gSystemFmpProtocolGuid,
- (VOID **)&SystemFmp
- );
- if (EFI_ERROR (Status)) {
- continue;
- }
-
- DEBUG ((DEBUG_INFO, "SystemFirmwareUpdateDxe: Uninstall SystemFmp produced by another capsule\n"));
- Status = gBS->UninstallProtocolInterface (
- HandleBuffer[Index],
- &gSystemFmpProtocolGuid,
- SystemFmp
- );
- if (EFI_ERROR (Status)) {
- DEBUG ((DEBUG_ERROR, "SystemFirmwareUpdateDxe: Failed to uninstall SystemFmp %r. Exiting.\n", Status));
- FreePool (HandleBuffer);
- return Status;
- }
- }
-
- if (HandleBuffer != NULL) {
- FreePool (HandleBuffer);
- }
-
- return EFI_SUCCESS;
-}
-
-/**
- System FMP module entrypoint
-
- @param[in] ImageHandle The firmware allocated handle for the EFI image.
- @param[in] SystemTable A pointer to the EFI System Table.
-
- @retval EFI_SUCCESS System FMP module is initialized.
- @retval EFI_OUT_OF_RESOURCES There are not enough resources avaulable to
- initialize this module.
- @retval Other System FMP Protocols could not be uninstalled.
- @retval Other System FMP Protocol could not be installed.
- @retval Other FMP Protocol could not be installed.
-**/
-EFI_STATUS
-EFIAPI
-SystemFirmwareUpdateMainDxe (
- IN EFI_HANDLE ImageHandle,
- IN EFI_SYSTEM_TABLE *SystemTable
- )
-{
- EFI_STATUS Status;
- EFI_HANDLE *HandleBuffer;
- UINTN HandleCount;
-
- //
- // Initialize SystemFmpPrivateData
- //
- mSystemFmpPrivate = AllocateZeroPool (sizeof (SYSTEM_FMP_PRIVATE_DATA));
- if (mSystemFmpPrivate == NULL) {
- return EFI_OUT_OF_RESOURCES;
- }
-
- Status = InitializePrivateData (mSystemFmpPrivate);
- if (EFI_ERROR (Status)) {
- FreePool (mSystemFmpPrivate);
- mSystemFmpPrivate = NULL;
- return Status;
- }
-
- //
- // Uninstall SystemFmpProtocol instances that may have been produced by
- // the SystemFirmwareUpdate drivers in FVs dispatched by other capsules.
- //
- Status = UninstallMatchingSystemFmpProtocols ();
- if (EFI_ERROR (Status)) {
- FreePool (mSystemFmpPrivate);
- mSystemFmpPrivate = NULL;
- return Status;
- }
-
- //
- // Look for a handle with matching Firmware Management Protocol
- //
- HandleCount = 0;
- HandleBuffer = FindMatchingFmpHandles (
- &gEfiFirmwareManagementProtocolGuid,
- &HandleCount
- );
- DEBUG ((DEBUG_INFO, "SystemFirmwareUpdateDxe: Found %d matching FMP instances\n", HandleCount));
-
- switch (HandleCount) {
- case 0:
- //
- // Install FMP protocol onto a new handle.
- //
- DEBUG ((DEBUG_INFO, "SystemFirmwareUpdateDxe: Install FMP onto a new handle\n"));
- Status = gBS->InstallMultipleProtocolInterfaces (
- &mSystemFmpPrivate->Handle,
- &gEfiFirmwareManagementProtocolGuid,
- &mSystemFmpPrivate->Fmp,
- NULL
- );
- break;
- case 1:
- //
- // Install System FMP protocol onto handle with matching FMP Protocol
- //
- DEBUG ((DEBUG_INFO, "SystemFirmwareUpdateDxe: Install System FMP onto matching FMP handle\n"));
- mSystemFmpPrivate->Handle = HandleBuffer[0];
- Status = gBS->InstallMultipleProtocolInterfaces (
- &HandleBuffer[0],
- &gSystemFmpProtocolGuid,
- &mSystemFmpPrivate->Fmp,
- NULL
- );
- break;
- default:
- //
- // More than one matching handle is not expected. Unload driver.
- //
- DEBUG ((DEBUG_ERROR, "SystemFirmwareUpdateDxe: More than one matching FMP handle. Unload driver.\n"));
- Status = EFI_DEVICE_ERROR;
- break;
- }
-
- if (HandleBuffer != NULL) {
- FreePool (HandleBuffer);
- }
-
- if (EFI_ERROR (Status)) {
- FreePool (mSystemFmpPrivate);
- mSystemFmpPrivate = NULL;
- }
-
- return Status;
-}
diff --git a/SignedCapsulePkg/Universal/SystemFirmwareUpdate/SystemFirmwareUpdateDxe.inf b/SignedCapsulePkg/Universal/SystemFirmwareUpdate/SystemFirmwareUpdateDxe.inf
deleted file mode 100644
index f787c887dd..0000000000
--- a/SignedCapsulePkg/Universal/SystemFirmwareUpdate/SystemFirmwareUpdateDxe.inf
+++ /dev/null
@@ -1,66 +0,0 @@
-## @file
-# SystemFirmware FMP update driver.
-#
-# Produce FMP instance to update system firmware.
-#
-# Copyright (c) 2016, Intel Corporation. All rights reserved.
-# SPDX-License-Identifier: BSD-2-Clause-Patent
-#
-##
-
-[Defines]
- INF_VERSION = 0x00010005
- BASE_NAME = SystemFirmwareUpdateDxe
- MODULE_UNI_FILE = SystemFirmwareUpdateDxe.uni
- FILE_GUID = 0A2FBD15-1C25-407E-8915-60C5652BC2AA
- MODULE_TYPE = DXE_DRIVER
- VERSION_STRING = 1.0
- ENTRY_POINT = SystemFirmwareUpdateMainDxe
-
-#
-# The following information is for reference only and not required by the build tools.
-#
-# VALID_ARCHITECTURES = X64
-#
-
-[Sources]
- SystemFirmwareDxe.h
- SystemFirmwareCommonDxe.c
- SystemFirmwareUpdateDxe.c
- ParseConfigProfile.c
-
-[Packages]
- MdePkg/MdePkg.dec
- MdeModulePkg/MdeModulePkg.dec
- SignedCapsulePkg/SignedCapsulePkg.dec
-
-[LibraryClasses]
- BaseLib
- UefiLib
- BaseMemoryLib
- DebugLib
- PcdLib
- MemoryAllocationLib
- UefiBootServicesTableLib
- HobLib
- UefiRuntimeServicesTableLib
- UefiDriverEntryPoint
- EdkiiSystemCapsuleLib
- PlatformFlashAccessLib
- IniParsingLib
- PrintLib
-
-[Pcd]
- gEfiMdeModulePkgTokenSpaceGuid.PcdSystemFmpCapsuleImageTypeIdGuid ## CONSUMES
- gEfiSignedCapsulePkgTokenSpaceGuid.PcdEdkiiSystemFirmwareFileGuid ## CONSUMES
- gEfiSignedCapsulePkgTokenSpaceGuid.PcdEdkiiSystemFirmwareImageDescriptor ## CONSUMES
-
-[Protocols]
- gEfiFirmwareManagementProtocolGuid ## PRODUCES
-
-[Depex]
- gEfiVariableArchProtocolGuid
-
-[UserExtensions.TianoCore."ExtraFiles"]
- SystemFirmwareUpdateDxeExtra.uni
-
diff --git a/SignedCapsulePkg/Universal/SystemFirmwareUpdate/SystemFirmwareUpdateDxe.uni b/SignedCapsulePkg/Universal/SystemFirmwareUpdate/SystemFirmwareUpdateDxe.uni
deleted file mode 100644
index f3c0ea5e97..0000000000
--- a/SignedCapsulePkg/Universal/SystemFirmwareUpdate/SystemFirmwareUpdateDxe.uni
+++ /dev/null
@@ -1,15 +0,0 @@
-// /** @file
-// SystemFirmware FMP update driver.
-//
-// Produce FMP instance to update system firmware.
-//
-// Copyright (c) 2016, Intel Corporation. All rights reserved.
-//
-// SPDX-License-Identifier: BSD-2-Clause-Patent
-//
-// **/
-
-
-#string STR_MODULE_ABSTRACT #language en-US "SystemFirmware FMP update driver."
-
-#string STR_MODULE_DESCRIPTION #language en-US "Produce FMP instance to update system firmware."
diff --git a/SignedCapsulePkg/Universal/SystemFirmwareUpdate/SystemFirmwareUpdateDxeExtra.uni b/SignedCapsulePkg/Universal/SystemFirmwareUpdate/SystemFirmwareUpdateDxeExtra.uni
deleted file mode 100644
index 2eb80881ad..0000000000
--- a/SignedCapsulePkg/Universal/SystemFirmwareUpdate/SystemFirmwareUpdateDxeExtra.uni
+++ /dev/null
@@ -1,14 +0,0 @@
-// /** @file
-// SystemFirmwareUpdateDxe Localized Strings and Content
-//
-// Copyright (c) 2016, Intel Corporation. All rights reserved.
-//
-// SPDX-License-Identifier: BSD-2-Clause-Patent
-//
-// **/
-
-#string STR_PROPERTIES_MODULE_NAME
-#language en-US
-"SystemFirmwareUpdate DXE Driver"
-
-