From af1a266670d040d2f4083ff309d732d648afba2a Mon Sep 17 00:00:00 2001 From: Angelos Mouzakitis Date: Tue, 10 Oct 2023 14:33:42 +0000 Subject: Add submodule dependency files Change-Id: Iaf8d18082d3991dec7c0ebbea540f092188eb4ec --- .../Include/Library/EdkiiSystemCapsuleLib.h | 148 +++++++++++++++++++ .../Include/Library/IniParsingLib.h | 160 +++++++++++++++++++++ .../Include/Library/PlatformFlashAccessLib.h | 96 +++++++++++++ 3 files changed, 404 insertions(+) create mode 100644 roms/edk2/SignedCapsulePkg/Include/Library/EdkiiSystemCapsuleLib.h create mode 100644 roms/edk2/SignedCapsulePkg/Include/Library/IniParsingLib.h create mode 100644 roms/edk2/SignedCapsulePkg/Include/Library/PlatformFlashAccessLib.h (limited to 'roms/edk2/SignedCapsulePkg/Include/Library') diff --git a/roms/edk2/SignedCapsulePkg/Include/Library/EdkiiSystemCapsuleLib.h b/roms/edk2/SignedCapsulePkg/Include/Library/EdkiiSystemCapsuleLib.h new file mode 100644 index 000000000..7c4359b0f --- /dev/null +++ b/roms/edk2/SignedCapsulePkg/Include/Library/EdkiiSystemCapsuleLib.h @@ -0,0 +1,148 @@ +/** @file + EDKII System Capsule library. + +Copyright (c) 2016, Intel Corporation. All rights reserved.
+SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + + +#ifndef __EDKII_SYSTEM_CAPSULE_LIB_H__ +#define __EDKII_SYSTEM_CAPSULE_LIB_H__ + +#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 + ); + +#endif + diff --git a/roms/edk2/SignedCapsulePkg/Include/Library/IniParsingLib.h b/roms/edk2/SignedCapsulePkg/Include/Library/IniParsingLib.h new file mode 100644 index 000000000..edfdde7e8 --- /dev/null +++ b/roms/edk2/SignedCapsulePkg/Include/Library/IniParsingLib.h @@ -0,0 +1,160 @@ +/** @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 + +**/ + + +#ifndef __INI_PARSING_LIB_H__ +#define __INI_PARSING_LIB_H__ + +/** + 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 + ); + +#endif + diff --git a/roms/edk2/SignedCapsulePkg/Include/Library/PlatformFlashAccessLib.h b/roms/edk2/SignedCapsulePkg/Include/Library/PlatformFlashAccessLib.h new file mode 100644 index 000000000..2eca4da78 --- /dev/null +++ b/roms/edk2/SignedCapsulePkg/Include/Library/PlatformFlashAccessLib.h @@ -0,0 +1,96 @@ +/** @file + Platform flash device access library. + + Copyright (c) 2016 - 2018, Intel Corporation. All rights reserved.
+ SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + + +#ifndef __PLATFORM_FLASH_ACCESS_LIB_H__ +#define __PLATFORM_FLASH_ACCESS_LIB_H__ + +#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 + ); + +#endif -- cgit 1.2.3-korg