mirror of
https://github.com/acidanthera/audk.git
synced 2025-07-25 14:44:28 +02:00
MdeModulePkg/DxeCapsuleLibFmp: Change the Event Notify to Cache ESRT Table
REF: https://bugzilla.tianocore.org/show_bug.cgi?id=4831 In this patch introduced the below changes, [1] Add the event of system resource table installed callback. - Register the event in DxeRuntimeCapsuleLibConstructor () - Unregister the event in DxeRuntimeCapsuleLibDestructor () [2] Migrate the event to update the module variable to cache ESRT table from ReadyToBoot to system resource table installed. [3] Add the condition to free the pool of buffer when the "mEsrtTable" is not NULL. Co-authored-by: Dakota Chiang <dakota.chiang@intel.com> Signed-off-by: Jason1 Lin <jason1.lin@intel.com>
This commit is contained in:
parent
f2557032d6
commit
dadd8c7a95
@ -1,7 +1,7 @@
|
|||||||
/** @file
|
/** @file
|
||||||
Capsule library runtime support.
|
Capsule library runtime support.
|
||||||
|
|
||||||
Copyright (c) 2016 - 2017, Intel Corporation. All rights reserved.<BR>
|
Copyright (c) 2016 - 2024, Intel Corporation. All rights reserved.<BR>
|
||||||
Copyright (c) 2024, Ampere Computing LLC. All rights reserved.<BR>
|
Copyright (c) 2024, Ampere Computing LLC. All rights reserved.<BR>
|
||||||
SPDX-License-Identifier: BSD-2-Clause-Patent
|
SPDX-License-Identifier: BSD-2-Clause-Patent
|
||||||
|
|
||||||
@ -23,6 +23,7 @@
|
|||||||
|
|
||||||
extern EFI_SYSTEM_RESOURCE_TABLE *mEsrtTable;
|
extern EFI_SYSTEM_RESOURCE_TABLE *mEsrtTable;
|
||||||
EFI_EVENT mDxeRuntimeCapsuleLibVirtualAddressChangeEvent = NULL;
|
EFI_EVENT mDxeRuntimeCapsuleLibVirtualAddressChangeEvent = NULL;
|
||||||
|
EFI_EVENT mDxeRuntimeCapsuleLibSystemResourceTableEvent = NULL;
|
||||||
EFI_EVENT mDxeRuntimeCapsuleLibReadyToBootEvent = NULL;
|
EFI_EVENT mDxeRuntimeCapsuleLibReadyToBootEvent = NULL;
|
||||||
extern BOOLEAN mDxeCapsuleLibReadyToBootEvent;
|
extern BOOLEAN mDxeCapsuleLibReadyToBootEvent;
|
||||||
|
|
||||||
@ -44,16 +45,16 @@ DxeCapsuleLibVirtualAddressChangeEvent (
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Notify function for event group EFI_EVENT_GROUP_READY_TO_BOOT.
|
Notify function for event of system resource table installation.
|
||||||
|
|
||||||
@param[in] Event The Event that is being processed.
|
@param[in] Event The Event that is being processed.
|
||||||
@param[in] Context The Event Context.
|
@param[in] Context The Event Context.
|
||||||
|
|
||||||
**/
|
**/
|
||||||
STATIC
|
STATIC
|
||||||
VOID
|
VOID
|
||||||
EFIAPI
|
EFIAPI
|
||||||
DxeCapsuleLibReadyToBootEventNotify (
|
DxeCapsuleLibSystemResourceTableInstallEventNotify (
|
||||||
IN EFI_EVENT Event,
|
IN EFI_EVENT Event,
|
||||||
IN VOID *Context
|
IN VOID *Context
|
||||||
)
|
)
|
||||||
@ -78,6 +79,14 @@ DxeCapsuleLibReadyToBootEventNotify (
|
|||||||
// If no Esrt table installed in Configure Table
|
// If no Esrt table installed in Configure Table
|
||||||
//
|
//
|
||||||
if (Index < gST->NumberOfTableEntries) {
|
if (Index < gST->NumberOfTableEntries) {
|
||||||
|
//
|
||||||
|
// Free the pool to remove the cached ESRT table.
|
||||||
|
//
|
||||||
|
if (mEsrtTable != NULL) {
|
||||||
|
FreePool ((VOID *)mEsrtTable);
|
||||||
|
mEsrtTable = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// Search Esrt to check given capsule is qualified
|
// Search Esrt to check given capsule is qualified
|
||||||
//
|
//
|
||||||
@ -95,12 +104,28 @@ DxeCapsuleLibReadyToBootEventNotify (
|
|||||||
//
|
//
|
||||||
mEsrtTable->FwResourceCountMax = mEsrtTable->FwResourceCount;
|
mEsrtTable->FwResourceCountMax = mEsrtTable->FwResourceCount;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Notify function for event group EFI_EVENT_GROUP_READY_TO_BOOT.
|
||||||
|
|
||||||
|
@param[in] Event The Event that is being processed.
|
||||||
|
@param[in] Context The Event Context.
|
||||||
|
|
||||||
|
**/
|
||||||
|
STATIC
|
||||||
|
VOID
|
||||||
|
EFIAPI
|
||||||
|
DxeCapsuleLibReadyToBootEventNotify (
|
||||||
|
IN EFI_EVENT Event,
|
||||||
|
IN VOID *Context
|
||||||
|
)
|
||||||
|
{
|
||||||
mDxeCapsuleLibReadyToBootEvent = TRUE;
|
mDxeCapsuleLibReadyToBootEvent = TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
The constructor function hook VirtualAddressChange event to use ESRT table as capsule routing table.
|
The constructor function for the file of DxeCapsuleRuntime.
|
||||||
|
|
||||||
@param ImageHandle The firmware allocated handle for the EFI image.
|
@param ImageHandle The firmware allocated handle for the EFI image.
|
||||||
@param SystemTable A pointer to the EFI System Table.
|
@param SystemTable A pointer to the EFI System Table.
|
||||||
@ -130,7 +155,20 @@ DxeRuntimeCapsuleLibConstructor (
|
|||||||
ASSERT_EFI_ERROR (Status);
|
ASSERT_EFI_ERROR (Status);
|
||||||
|
|
||||||
//
|
//
|
||||||
// Register notify function to cache the FMP capsule GUIDs at ReadyToBoot.
|
// Register notify function to cache the FMP capsule GUIDs when system resource table installed.
|
||||||
|
//
|
||||||
|
Status = gBS->CreateEventEx (
|
||||||
|
EVT_NOTIFY_SIGNAL,
|
||||||
|
TPL_CALLBACK,
|
||||||
|
DxeCapsuleLibSystemResourceTableInstallEventNotify,
|
||||||
|
NULL,
|
||||||
|
&gEfiSystemResourceTableGuid,
|
||||||
|
&mDxeRuntimeCapsuleLibSystemResourceTableEvent
|
||||||
|
);
|
||||||
|
ASSERT_EFI_ERROR (Status);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Register notify function to indicate the event is signaled at ReadyToBoot.
|
||||||
//
|
//
|
||||||
Status = gBS->CreateEventEx (
|
Status = gBS->CreateEventEx (
|
||||||
EVT_NOTIFY_SIGNAL,
|
EVT_NOTIFY_SIGNAL,
|
||||||
@ -146,7 +184,7 @@ DxeRuntimeCapsuleLibConstructor (
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
The destructor function closes the VirtualAddressChange event.
|
The destructor function for the file of DxeCapsuleRuntime.
|
||||||
|
|
||||||
@param ImageHandle The firmware allocated handle for the EFI image.
|
@param ImageHandle The firmware allocated handle for the EFI image.
|
||||||
@param SystemTable A pointer to the EFI System Table.
|
@param SystemTable A pointer to the EFI System Table.
|
||||||
@ -168,6 +206,12 @@ DxeRuntimeCapsuleLibDestructor (
|
|||||||
Status = gBS->CloseEvent (mDxeRuntimeCapsuleLibVirtualAddressChangeEvent);
|
Status = gBS->CloseEvent (mDxeRuntimeCapsuleLibVirtualAddressChangeEvent);
|
||||||
ASSERT_EFI_ERROR (Status);
|
ASSERT_EFI_ERROR (Status);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Close the system resource table installed event.
|
||||||
|
//
|
||||||
|
Status = gBS->CloseEvent (mDxeRuntimeCapsuleLibSystemResourceTableEvent);
|
||||||
|
ASSERT_EFI_ERROR (Status);
|
||||||
|
|
||||||
//
|
//
|
||||||
// Close the ReadyToBoot event.
|
// Close the ReadyToBoot event.
|
||||||
//
|
//
|
||||||
|
Loading…
x
Reference in New Issue
Block a user