Files
system76-edk2/FmpDevicePkg/Include/Library/FmpDependencyLib.h
Michael Kubacki 207414cba4 FmpDevicePkg: Add Last Attempt Status support to dependency libs
The FMP dependency libraries are leveraged during firmware update
to check for dependencies required to update the image.

This change adds granular Last Attempt Status code support to these
services so failures can be more easily observed during the firmware
update process via Last Attempt Status codes.

Cc: Liming Gao <gaoliming@byosoft.com.cn>
Cc: Michael D Kinney <michael.d.kinney@intel.com>
Cc: Guomin Jiang <guomin.jiang@intel.com>
Cc: Wei6 Xu <wei6.xu@intel.com>
Signed-off-by: Michael Kubacki <michael.kubacki@microsoft.com>
Acked-by: Liming Gao <gaoliming@byosoft.com.cn>
Reviewed-by: Wei6 Xu <wei6.xu@intel.com>
Reviewed-by: Michael D Kinney <michael.d.kinney@intel.com>
2020-10-28 06:05:52 +00:00

105 lines
3.9 KiB
C

/** @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