mirror of https://github.com/acidanthera/audk.git
105 lines
3.9 KiB
C
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
|