diff options
author | Ard Biesheuvel <ard.biesheuvel@linaro.org> | 2017-09-11 17:50:29 +0100 |
---|---|---|
committer | Ard Biesheuvel <ard.biesheuvel@linaro.org> | 2017-09-19 09:39:01 -0700 |
commit | 4bbcc285d5f74d34ec40733dde807f5a4f0cdf8c (patch) | |
tree | ee726e319c2f1198f95443c5ec56d7340a1f3c6d /ArmPkg/Library/PlatformBootManagerLib | |
parent | a3a4737051010a94832f7bceaa1fa414d7259da0 (diff) | |
download | edk2-4bbcc285d5f74d34ec40733dde807f5a4f0cdf8c.zip edk2-4bbcc285d5f74d34ec40733dde807f5a4f0cdf8c.tar.gz edk2-4bbcc285d5f74d34ec40733dde807f5a4f0cdf8c.tar.bz2 |
ArmPkg/PlatformBootManagerLib: process pending capsules
Process any capsule HOBs that were left for us by CapsulePei. This
involves calling ProcessCapsules() twice, as explained in the comment
in DxeCapsuleLibFmp [sic].
1) The first call must be before EndOfDxe. The system capsules is processed.
If device capsule FMP protocols are exposted at this time and device FMP
capsule has zero EmbeddedDriverCount, the device capsules are processed.
Each individual capsule result is recorded in capsule record variable.
System may reset in this function, if reset is required by capsule and
all capsules are processed.
If not all capsules are processed, reset will be defered to second call.
2) The second call must be after EndOfDxe and after ConnectAll, so that all
device capsule FMP protocols are exposed.
The system capsules are skipped. If the device capsules are NOT processed
in first call, they are processed here.
Each individual capsule result is recorded in capsule record variable.
System may reset in this function, if reset is required by capsule
processed in first call and second call.
Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Reviewed-by: Leif Lindholm <leif.lindholm@linaro.org>
Diffstat (limited to 'ArmPkg/Library/PlatformBootManagerLib')
-rw-r--r-- | ArmPkg/Library/PlatformBootManagerLib/PlatformBm.c | 16 | ||||
-rw-r--r-- | ArmPkg/Library/PlatformBootManagerLib/PlatformBootManagerLib.inf | 2 |
2 files changed, 18 insertions, 0 deletions
diff --git a/ArmPkg/Library/PlatformBootManagerLib/PlatformBm.c b/ArmPkg/Library/PlatformBootManagerLib/PlatformBm.c index 6c0b352..a3b2d79 100644 --- a/ArmPkg/Library/PlatformBootManagerLib/PlatformBm.c +++ b/ArmPkg/Library/PlatformBootManagerLib/PlatformBm.c @@ -18,7 +18,9 @@ #include <IndustryStandard/Pci22.h>
#include <Library/BootLogoLib.h>
+#include <Library/CapsuleLib.h>
#include <Library/DevicePathLib.h>
+#include <Library/HobLib.h>
#include <Library/PcdLib.h>
#include <Library/UefiBootManagerLib.h>
#include <Library/UefiLib.h>
@@ -447,6 +449,14 @@ PlatformBootManagerBeforeConsole ( VOID
)
{
+ EFI_STATUS Status;
+
+ if (GetBootModeHob() == BOOT_ON_FLASH_UPDATE) {
+ DEBUG ((DEBUG_INFO, "ProcessCapsules Before EndOfDxe ......\n"));
+ Status = ProcessCapsules ();
+ DEBUG ((DEBUG_INFO, "ProcessCapsules returned %r\n", Status));
+ }
+
//
// Signal EndOfDxe PI Event
//
@@ -528,6 +538,12 @@ PlatformBootManagerAfterConsole ( //
EfiBootManagerConnectAll ();
+ if (GetBootModeHob() == BOOT_ON_FLASH_UPDATE) {
+ DEBUG((DEBUG_INFO, "ProcessCapsules After EndOfDxe ......\n"));
+ Status = ProcessCapsules ();
+ DEBUG((DEBUG_INFO, "ProcessCapsules returned %r\n", Status));
+ }
+
//
// Enumerate all possible boot options.
//
diff --git a/ArmPkg/Library/PlatformBootManagerLib/PlatformBootManagerLib.inf b/ArmPkg/Library/PlatformBootManagerLib/PlatformBootManagerLib.inf index e5ffd5d..58c4d6d 100644 --- a/ArmPkg/Library/PlatformBootManagerLib/PlatformBootManagerLib.inf +++ b/ArmPkg/Library/PlatformBootManagerLib/PlatformBootManagerLib.inf @@ -43,9 +43,11 @@ BaseLib
BaseMemoryLib
BootLogoLib
+ CapsuleLib
DebugLib
DevicePathLib
DxeServicesLib
+ HobLib
MemoryAllocationLib
PcdLib
PrintLib
|