audk/FmpDevicePkg/FmpDxe
Xu, Wei6 2ed845b3c3 FmdDevicePkg/FmpDxe: Support Fmp Capsule Dependency.
REF: https://bugzilla.tianocore.org/show_bug.cgi?id=2421

Capsule Dependency is an incremental change of Fmp Capsule Update. The
capsule format is extended to include a set of binary encoded dependency
expression. The dependency expression is signed together with the Fmp
payload and evaluated before update is applied.
This feature is defined in UEFI Spec 2.8.

The dependency evaluation has two steps:
1. Validate platform existing Fmp images' version satisfy the dependency
expression in capsule image.
2. Validate the capsule image version satisfy all the platform existing
Fmp image's dependency expression.
If the dependency expression evaluates to FALSE, then the capsule update
fails and last attempt status is set to
LAST_ATTEMPT_STATUS_ERROR_UNSATISFIED_DEPENDENCIES.

The dependency saving and getting is FmpDeviceLib implementation scope.
The parameter "Image" of FmpDeviceSetImage and FmpDeviceGetImage function
is extended to contain the dependency. The layout:
  +--------------------------+
  |   Dependency Op-codes    |
  +--------------------------+
  |    Fmp Payload Image     |
  +--------------------------+
1. FmpDeviceSetImage is responsible for retrieving the dependency from the
parameter "Image" and saving it to a protected storage.
2. FmpDeviceGetImage is responsible for retrieving the dependency from the
storage where FmpDeviceSetImage saves dependency and combining it with the
Fmp Payload Image into one buffer which is returned to the caller. This
dependency will be populated into EFI_FIRMWARE_IMAGE_DESCRIPTOR and used
for dependency evaluation.
3. FmpDeviceGetAttributes must set the bit IMAGE_ATTRIBUTE_DEPENDENCY to
indicate the Fmp device supports Fmp Capsule Dependency feature.

Cc: Michael D Kinney <michael.d.kinney@intel.com>
Cc: Liming Gao <liming.gao@intel.com>
Signed-off-by: Wei6 Xu <wei6.xu@intel.com>
Reviewed-by: Liming Gao <liming.gao@intel.com>
2020-01-19 02:47:47 +00:00
..
Dependency.c FmdDevicePkg/FmpDxe: Support Fmp Capsule Dependency. 2020-01-19 02:47:47 +00:00
Dependency.h FmdDevicePkg/FmpDxe: Support Fmp Capsule Dependency. 2020-01-19 02:47:47 +00:00
DetectTestKey.c FmpDevicePkg/FmpDxe: Improve all DEBUG() messages 2019-08-15 17:22:24 +08:00
FmpDxe.c FmdDevicePkg/FmpDxe: Support Fmp Capsule Dependency. 2020-01-19 02:47:47 +00:00
FmpDxe.h FmpDevicePkg/FmpDxe: Remove use of CatSprint() 2019-08-15 17:22:24 +08:00
FmpDxe.inf FmdDevicePkg/FmpDxe: Support Fmp Capsule Dependency. 2020-01-19 02:47:47 +00:00
FmpDxe.uni FmpDevicePkg: Replace BSD License with BSD+Patent License 2019-04-09 10:58:00 -07:00
FmpDxeExtra.uni FmpDevicePkg: Replace BSD License with BSD+Patent License 2019-04-09 10:58:00 -07:00
FmpDxeLib.inf FmdDevicePkg/FmpDxe: Support Fmp Capsule Dependency. 2020-01-19 02:47:47 +00:00
VariableSupport.c FmpDevicePkg/FmpDxe: Remove use of CatSprint() 2019-08-15 17:22:24 +08:00
VariableSupport.h FmpDevicePkg/FmpDxe: Different variable for each FMP Descriptor 2019-08-15 17:22:23 +08:00