/** @file\r
Capsule library runtime support.\r
\r
- Copyright (c) 2016 - 2017, Intel Corporation. All rights reserved.<BR>\r
+ Copyright (c) 2016 - 2024, Intel Corporation. All rights reserved.<BR>\r
Copyright (c) 2024, Ampere Computing LLC. All rights reserved.<BR>\r
SPDX-License-Identifier: BSD-2-Clause-Patent\r
\r
\r
extern EFI_SYSTEM_RESOURCE_TABLE *mEsrtTable;\r
EFI_EVENT mDxeRuntimeCapsuleLibVirtualAddressChangeEvent = NULL;\r
+EFI_EVENT mDxeRuntimeCapsuleLibSystemResourceTableEvent = NULL;\r
EFI_EVENT mDxeRuntimeCapsuleLibReadyToBootEvent = NULL;\r
extern BOOLEAN mDxeCapsuleLibReadyToBootEvent;\r
\r
}\r
\r
/**\r
- Notify function for event group EFI_EVENT_GROUP_READY_TO_BOOT.\r
+ Notify function for event of system resource table installation.\r
\r
- @param[in] Event The Event that is being processed.\r
- @param[in] Context The Event Context.\r
+ @param[in] Event The Event that is being processed.\r
+ @param[in] Context The Event Context.\r
\r
**/\r
STATIC\r
VOID\r
EFIAPI\r
-DxeCapsuleLibReadyToBootEventNotify (\r
+DxeCapsuleLibSystemResourceTableInstallEventNotify (\r
IN EFI_EVENT Event,\r
IN VOID *Context\r
)\r
// If no Esrt table installed in Configure Table\r
//\r
if (Index < gST->NumberOfTableEntries) {\r
+ //\r
+ // Free the pool to remove the cached ESRT table.\r
+ //\r
+ if (mEsrtTable != NULL) {\r
+ FreePool ((VOID *)mEsrtTable);\r
+ mEsrtTable = NULL;\r
+ }\r
+\r
//\r
// Search Esrt to check given capsule is qualified\r
//\r
//\r
mEsrtTable->FwResourceCountMax = mEsrtTable->FwResourceCount;\r
}\r
+}\r
\r
+/**\r
+ Notify function for event group EFI_EVENT_GROUP_READY_TO_BOOT.\r
+\r
+ @param[in] Event The Event that is being processed.\r
+ @param[in] Context The Event Context.\r
+\r
+**/\r
+STATIC\r
+VOID\r
+EFIAPI\r
+DxeCapsuleLibReadyToBootEventNotify (\r
+ IN EFI_EVENT Event,\r
+ IN VOID *Context\r
+ )\r
+{\r
mDxeCapsuleLibReadyToBootEvent = TRUE;\r
}\r
\r
/**\r
- The constructor function hook VirtualAddressChange event to use ESRT table as capsule routing table.\r
+ The constructor function for the file of DxeCapsuleRuntime.\r
\r
@param ImageHandle The firmware allocated handle for the EFI image.\r
@param SystemTable A pointer to the EFI System Table.\r
ASSERT_EFI_ERROR (Status);\r
\r
//\r
- // Register notify function to cache the FMP capsule GUIDs at ReadyToBoot.\r
+ // Register notify function to cache the FMP capsule GUIDs when system resource table installed.\r
+ //\r
+ Status = gBS->CreateEventEx (\r
+ EVT_NOTIFY_SIGNAL,\r
+ TPL_CALLBACK,\r
+ DxeCapsuleLibSystemResourceTableInstallEventNotify,\r
+ NULL,\r
+ &gEfiSystemResourceTableGuid,\r
+ &mDxeRuntimeCapsuleLibSystemResourceTableEvent\r
+ );\r
+ ASSERT_EFI_ERROR (Status);\r
+\r
+ //\r
+ // Register notify function to indicate the event is signaled at ReadyToBoot.\r
//\r
Status = gBS->CreateEventEx (\r
EVT_NOTIFY_SIGNAL,\r
}\r
\r
/**\r
- The destructor function closes the VirtualAddressChange event.\r
+ The destructor function for the file of DxeCapsuleRuntime.\r
\r
@param ImageHandle The firmware allocated handle for the EFI image.\r
@param SystemTable A pointer to the EFI System Table.\r
Status = gBS->CloseEvent (mDxeRuntimeCapsuleLibVirtualAddressChangeEvent);\r
ASSERT_EFI_ERROR (Status);\r
\r
+ //\r
+ // Close the system resource table installed event.\r
+ //\r
+ Status = gBS->CloseEvent (mDxeRuntimeCapsuleLibSystemResourceTableEvent);\r
+ ASSERT_EFI_ERROR (Status);\r
+\r
//\r
// Close the ReadyToBoot event.\r
//\r