1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
|
/** @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
|