TianoCore EDK2 master
Loading...
Searching...
No Matches
FmpDependencyLib.c File Reference

Go to the source code of this file.

Data Structures

union  ELEMENT_VALUE
 
struct  DEPEX_ELEMENT
 

Macros

#define DEPEX_STACK_SIZE_INCREMENT   0x1000
 

Enumerations

enum  ELEMENT_TYPE { BooleanType , VersionType }
 

Functions

EFI_STATUS GrowDepexStack (VOID)
 
EFI_STATUS Push (IN UINT32 Value, IN UINTN Type)
 
EFI_STATUS Pop (OUT DEPEX_ELEMENT *Element, IN ELEMENT_TYPE Type)
 
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)
 
BOOLEAN EFIAPI ValidateDependency (IN EFI_FIRMWARE_IMAGE_DEP *Dependencies, IN UINTN MaxDepexSize, OUT UINT32 *DepexSize, OUT UINT32 *LastAttemptStatus OPTIONAL)
 
EFI_FIRMWARE_IMAGE_DEP *EFIAPI GetImageDependency (IN EFI_FIRMWARE_IMAGE_AUTHENTICATION *Image, IN UINTN ImageSize, OUT UINT32 *DepexSize, OUT UINT32 *LastAttemptStatus OPTIONAL)
 

Variables

DEPEX_ELEMENTmDepexEvaluationStack = NULL
 
DEPEX_ELEMENTmDepexEvaluationStackEnd = NULL
 
DEPEX_ELEMENTmDepexEvaluationStackPointer = NULL
 

Detailed Description

Supports Fmp Capsule Dependency Expression.

Copyright (c) Microsoft Corporation.
Copyright (c) 2020, Intel Corporation. All rights reserved.

SPDX-License-Identifier: BSD-2-Clause-Patent

Definition in file FmpDependencyLib.c.

Macro Definition Documentation

◆ DEPEX_STACK_SIZE_INCREMENT

#define DEPEX_STACK_SIZE_INCREMENT   0x1000

Definition at line 23 of file FmpDependencyLib.c.

Enumeration Type Documentation

◆ ELEMENT_TYPE

enum ELEMENT_TYPE

Definition at line 28 of file FmpDependencyLib.c.

Function Documentation

◆ EvaluateDependency()

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 
)

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.

Parameters
[in]DependenciesDependency expressions.
[in]DependenciesSizeSize of Dependency expressions.
[in]FmpVersionsArray of Fmp ImageTypeId and version. This parameter is optional and can be set to NULL.
[in]FmpVersionsCountElement count of the array. When FmpVersions is NULL, FmpVersionsCount must be 0.
[out]LastAttemptStatusAn 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.
Return values
TRUEDependency expressions evaluate to TRUE.
FALSEDependency expressions evaluate to FALSE.

Definition at line 221 of file FmpDependencyLib.c.

◆ GetImageDependency()

EFI_FIRMWARE_IMAGE_DEP *EFIAPI GetImageDependency ( IN EFI_FIRMWARE_IMAGE_AUTHENTICATION Image,
IN UINTN  ImageSize,
OUT UINT32 *  DepexSize,
OUT UINT32 *LastAttemptStatus  OPTIONAL 
)

Get dependency from firmware image.

Parameters
[in]ImagePoints to the firmware image.
[in]ImageSizeSize, in bytes, of the firmware image.
[out]DepexSizeSize, in bytes, of the dependency.
[out]LastAttemptStatusAn 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.
Return values
Thepointer to dependency.
Null

Definition at line 640 of file FmpDependencyLib.c.

◆ GrowDepexStack()

EFI_STATUS GrowDepexStack ( VOID  )

Grow size of the Depex stack

Return values
EFI_SUCCESSStack successfully growed.
EFI_OUT_OF_RESOURCESThere is not enough system memory to grow the stack.

Definition at line 64 of file FmpDependencyLib.c.

◆ Pop()

EFI_STATUS Pop ( OUT DEPEX_ELEMENT Element,
IN ELEMENT_TYPE  Type 
)

Pop an element from the stack.

Parameters
[out]ElementElement to pop.
[in]TypeType of element.
Return values
EFI_SUCCESSThe value was popped onto the stack.
EFI_ACCESS_DENIEDThe pop operation underflowed the stack.
EFI_INVALID_PARAMETERType is mismatched.

Definition at line 172 of file FmpDependencyLib.c.

◆ Push()

EFI_STATUS Push ( IN UINT32  Value,
IN UINTN  Type 
)

Push an element onto the Stack.

Parameters
[in]ValueValue to push.
[in]TypeElement Type
Return values
EFI_SUCCESSThe value was pushed onto the stack.
EFI_OUT_OF_RESOURCESThere is not enough system memory to grow the stack.
EFI_INVALID_PARAMETERWrong stack element type.

Definition at line 120 of file FmpDependencyLib.c.

◆ ValidateDependency()

BOOLEAN EFIAPI ValidateDependency ( IN EFI_FIRMWARE_IMAGE_DEP Dependencies,
IN UINTN  MaxDepexSize,
OUT UINT32 *  DepexSize,
OUT UINT32 *LastAttemptStatus  OPTIONAL 
)

Validate the dependency expression and output its size.

Parameters
[in]DependenciesPointer to the EFI_FIRMWARE_IMAGE_DEP.
[in]MaxDepexSizeMax size of the dependency.
[out]DepexSizeSize of dependency.
[out]LastAttemptStatusAn 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.
Return values
TRUEThe dependency expression is valid.
FALSEThe dependency expression is invalid.

Definition at line 561 of file FmpDependencyLib.c.

Variable Documentation

◆ mDepexEvaluationStack

DEPEX_ELEMENT* mDepexEvaluationStack = NULL

Definition at line 52 of file FmpDependencyLib.c.

◆ mDepexEvaluationStackEnd

DEPEX_ELEMENT* mDepexEvaluationStackEnd = NULL

Definition at line 53 of file FmpDependencyLib.c.

◆ mDepexEvaluationStackPointer

DEPEX_ELEMENT* mDepexEvaluationStackPointer = NULL

Definition at line 54 of file FmpDependencyLib.c.