| /** @file | |
| Fmp Capsule Dependency support functions for Firmware Management Protocol based | |
| firmware updates. | |
| Copyright (c) Microsoft Corporation.<BR> | |
| Copyright (c) 2020, Intel Corporation. All rights reserved.<BR> | |
| SPDX-License-Identifier: BSD-2-Clause-Patent | |
| **/ | |
| #ifndef __FMP_DEPENDENCY_LIB__ | |
| #define __FMP_DEPENDENCY_LIB__ | |
| #include <PiDxe.h> | |
| #include <Protocol/FirmwareManagement.h> | |
| // | |
| // Data struct to store FMP ImageType and version for dependency check. | |
| // | |
| typedef struct { | |
| EFI_GUID ImageTypeId; | |
| UINT32 Version; | |
| } FMP_DEPEX_CHECK_VERSION_DATA; | |
| /** | |
| Validate the dependency expression and output its size. | |
| @param[in] Dependencies Pointer to the EFI_FIRMWARE_IMAGE_DEP. | |
| @param[in] MaxDepexSize Max size of the dependency. | |
| @param[out] DepexSize Size of dependency. | |
| @param[out] LastAttemptStatus An optional pointer to a UINT32 that holds the | |
| last attempt status to report back to the caller. | |
| If a last attempt status error code is not returned, | |
| this function will not modify the LastAttemptStatus value. | |
| @retval TRUE The dependency expression is valid. | |
| @retval FALSE The dependency expression is invalid. | |
| **/ | |
| BOOLEAN | |
| EFIAPI | |
| ValidateDependency ( | |
| IN EFI_FIRMWARE_IMAGE_DEP *Dependencies, | |
| IN UINTN MaxDepexSize, | |
| OUT UINT32 *DepexSize, | |
| OUT UINT32 *LastAttemptStatus OPTIONAL | |
| ); | |
| /** | |
| Get dependency from firmware image. | |
| @param[in] Image Points to the firmware image. | |
| @param[in] ImageSize Size, in bytes, of the firmware image. | |
| @param[out] DepexSize Size, in bytes, of the dependency. | |
| @param[out] LastAttemptStatus An optional pointer to a UINT32 that holds the | |
| last attempt status to report back to the caller. | |
| If a last attempt status error code is not returned, | |
| this function will not modify the LastAttemptStatus value. | |
| @retval The pointer to dependency. | |
| @retval Null | |
| **/ | |
| EFI_FIRMWARE_IMAGE_DEP * | |
| EFIAPI | |
| GetImageDependency ( | |
| IN EFI_FIRMWARE_IMAGE_AUTHENTICATION *Image, | |
| IN UINTN ImageSize, | |
| OUT UINT32 *DepexSize, | |
| OUT UINT32 *LastAttemptStatus OPTIONAL | |
| ); | |
| /** | |
| Evaluate the dependencies. The caller must search all the Fmp instances and | |
| gather their versions into FmpVersions parameter. If there is PUSH_GUID opcode | |
| in dependency expression with no FmpVersions provided, the dependency will | |
| evaluate to FALSE. | |
| @param[in] Dependencies Dependency expressions. | |
| @param[in] DependenciesSize Size of Dependency expressions. | |
| @param[in] FmpVersions Array of Fmp ImageTypeId and version. This | |
| parameter is optional and can be set to NULL. | |
| @param[in] FmpVersionsCount Element count of the array. When FmpVersions | |
| is NULL, FmpVersionsCount must be 0. | |
| @param[out] LastAttemptStatus An optional pointer to a UINT32 that holds the | |
| last attempt status to report back to the caller. | |
| This function will set the value to LAST_ATTEMPT_STATUS_SUCCESS | |
| if an error code is not set. | |
| @retval TRUE Dependency expressions evaluate to TRUE. | |
| @retval FALSE Dependency expressions evaluate to FALSE. | |
| **/ | |
| BOOLEAN | |
| EFIAPI | |
| EvaluateDependency ( | |
| IN EFI_FIRMWARE_IMAGE_DEP *Dependencies, | |
| IN UINTN DependenciesSize, | |
| IN FMP_DEPEX_CHECK_VERSION_DATA *FmpVersions OPTIONAL, | |
| IN UINTN FmpVersionsCount, | |
| OUT UINT32 *LastAttemptStatus OPTIONAL | |
| ); | |
| #endif |