summaryrefslogtreecommitdiff
path: root/MdeModulePkg/Library/DxeCapsuleLibFmp/DxeCapsuleLib.c
diff options
context:
space:
mode:
authorArd Biesheuvel <ard.biesheuvel@linaro.org>2018-06-07 08:41:33 +0200
committerArd Biesheuvel <ard.biesheuvel@linaro.org>2018-06-15 18:18:17 +0200
commit1342bd4486cd9b2b7e2b94059c3905dc51f3725b (patch)
tree99e86af04b607667ba52b8768aad2279434971a6 /MdeModulePkg/Library/DxeCapsuleLibFmp/DxeCapsuleLib.c
parente077a93dc6441dcac3b48b7d793e367c6fa177ed (diff)
downloadedk2-1342bd4486cd9b2b7e2b94059c3905dc51f3725b.zip
edk2-1342bd4486cd9b2b7e2b94059c3905dc51f3725b.tar.gz
edk2-1342bd4486cd9b2b7e2b94059c3905dc51f3725b.tar.bz2
MdeModulePkg/DxeCapsuleLibFmp: pass progress callback only if it works
If the first call to UpdateImageProgress() fails, there is no point in passing a pointer to it to Fmp->SetImage(), since it is highly unlikely to succeed on any subsequent calls. This permits the FMP implementation to fall back to an alternate means of providing feedback to the user, e.g., via the console. Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org> Reviewed-by: Star Zeng <star.zeng@intel.com>
Diffstat (limited to 'MdeModulePkg/Library/DxeCapsuleLibFmp/DxeCapsuleLib.c')
-rw-r--r--MdeModulePkg/Library/DxeCapsuleLibFmp/DxeCapsuleLib.c13
1 files changed, 10 insertions, 3 deletions
diff --git a/MdeModulePkg/Library/DxeCapsuleLibFmp/DxeCapsuleLib.c b/MdeModulePkg/Library/DxeCapsuleLibFmp/DxeCapsuleLib.c
index f0226ea..ab41df0 100644
--- a/MdeModulePkg/Library/DxeCapsuleLibFmp/DxeCapsuleLib.c
+++ b/MdeModulePkg/Library/DxeCapsuleLibFmp/DxeCapsuleLib.c
@@ -841,6 +841,7 @@ SetFmpImageData (
UINT8 *Image;
VOID *VendorCode;
CHAR16 *AbortReason;
+ EFI_FIRMWARE_MANAGEMENT_UPDATE_IMAGE_PROGRESS ProgressCallback;
Status = gBS->HandleProtocol(
Handle,
@@ -892,7 +893,11 @@ SetFmpImageData (
//
// Before calling SetImage(), reset the progress bar to 0%
//
- UpdateImageProgress (0);
+ ProgressCallback = UpdateImageProgress;
+ Status = UpdateImageProgress (0);
+ if (EFI_ERROR (Status)) {
+ ProgressCallback = NULL;
+ }
Status = Fmp->SetImage(
Fmp,
@@ -900,13 +905,15 @@ SetFmpImageData (
Image, // Image
ImageHeader->UpdateImageSize, // ImageSize
VendorCode, // VendorCode
- UpdateImageProgress, // Progress
+ ProgressCallback, // Progress
&AbortReason // AbortReason
);
//
// Set the progress bar to 100% after returning from SetImage()
//
- UpdateImageProgress (100);
+ if (ProgressCallback != NULL) {
+ UpdateImageProgress (100);
+ }
DEBUG((DEBUG_INFO, "Fmp->SetImage - %r\n", Status));
if (AbortReason != NULL) {