回复: [edk2-devel] [PATCH v2 4/4] MdePkg: Signal AfterReadyToBoot after ReadyToBoot


gaoliming
 

Dionna:
I add my comments below.

-----邮件原件-----
发件人: devel@edk2.groups.io <devel@edk2.groups.io> 代表 Dionna Glaze
via groups.io
发送时间: 2022年11月9日 5:16
收件人: devel@edk2.groups.io
抄送: Dionna Glaze <dionnaglaze@...>; Michael D Kinney
<michael.d.kinney@...>; Ard Biesheuvel <ardb@...>; Gerd
Hoffman <kraxel@...>; Jiewen Yao <jiewen.yao@...>
主题: [edk2-devel] [PATCH v2 4/4] MdePkg: Signal AfterReadyToBoot after
ReadyToBoot

The Uefi v2.9 specification adds this event group in section 3.1.7,
with its GUID defined in the Related Definitions section of
EFI_BOOT_SERVICES.CreateEventEx() in chapter 7.

Cc: "Michael D Kinney" <michael.d.kinney@...>
Cc: Ard Biesheuvel <ardb@...>
Cc: Gerd Hoffman <kraxel@...>
Cc: Jiewen Yao <jiewen.yao@...>

Signed-off-by: Dionna Glaze <dionnaglaze@...>
---
MdePkg/Include/Library/UefiLib.h | 2 ++
MdePkg/Library/UefiLib/UefiLib.inf | 1 +
MdePkg/Library/UefiLib/UefiNotTiano.c | 18 ++++++++++++++++++
3 files changed, 21 insertions(+)

diff --git a/MdePkg/Include/Library/UefiLib.h
b/MdePkg/Include/Library/UefiLib.h
index be7da7fdf7..2c3342351e 100644
--- a/MdePkg/Include/Library/UefiLib.h
+++ b/MdePkg/Include/Library/UefiLib.h
@@ -890,6 +890,8 @@ UnicodeStringDisplayLength (
/**
Create, Signal, and Close the Ready to Boot event using
EfiSignalEventReadyToBoot().

+ If successful, then create, signal and close the After Ready to Boot event.
+
This function abstracts the signaling of the Ready to Boot Event. The
Framework moved
from a proprietary to UEFI 2.0 based mechanism. This library abstracts
the caller
from how this event is created to prevent to code form having to change
with the
diff --git a/MdePkg/Library/UefiLib/UefiLib.inf
b/MdePkg/Library/UefiLib/UefiLib.inf
index 01ed92092d..5c4064eafa 100644
--- a/MdePkg/Library/UefiLib/UefiLib.inf
+++ b/MdePkg/Library/UefiLib/UefiLib.inf
@@ -60,6 +60,7 @@
gEfiGlobalVariableGuid ##
SOMETIMES_CONSUMES ## Variable
gEfiAcpi20TableGuid ##
SOMETIMES_CONSUMES ## SystemTable
gEfiAcpi10TableGuid ##
SOMETIMES_CONSUMES ## SystemTable
+ gEfiEventAfterReadyToBootGuid ##
SOMETIMES_CONSUMES ## Event

[Protocols]
gEfiDriverBindingProtocolGuid ##
SOMETIMES_PRODUCES
diff --git a/MdePkg/Library/UefiLib/UefiNotTiano.c
b/MdePkg/Library/UefiLib/UefiNotTiano.c
index d84e91fd01..04fe42f9f7 100644
--- a/MdePkg/Library/UefiLib/UefiNotTiano.c
+++ b/MdePkg/Library/UefiLib/UefiNotTiano.c
@@ -208,6 +208,8 @@ EfiCreateEventReadyToBootEx (
/**
Create, Signal, and Close the Ready to Boot event using
EfiSignalEventReadyToBoot().

+ If successful, then create, signal and close the After Ready to Boot event.
+
This function abstracts the signaling of the Ready to Boot Event. The
Framework moved
from a proprietary to UEFI 2.0 based mechanism. This library abstracts
the caller
from how this event is created to prevent to code form having to change
with the
@@ -222,11 +224,27 @@ EfiSignalEventReadyToBoot (
{
EFI_STATUS Status;
EFI_EVENT ReadyToBootEvent;
+ EFI_EVENT AfterReadyToBootEvent;

Status = EfiCreateEventReadyToBoot (&ReadyToBootEvent);
if (!EFI_ERROR (Status)) {
gBS->SignalEvent (ReadyToBootEvent);
gBS->CloseEvent (ReadyToBootEvent);
+ return;
+ }
+
Return should not be here. This means ReadyToBoot event creates successfully and return.
But, the behavior should be ReadyToBoot and AfterReadyToBoot event both trig.

Thanks
Liming
+ /* Then immediately signal the after ready to boot event group */
+ Status = gBS->CreateEventEx (
+ EVT_NOTIFY_SIGNAL,
+ TPL_CALLBACK,
+ EfiEventEmptyFunction,
+ NULL,
+ &gEfiEventAfterReadyToBootGuid,
+ AfterReadyToBootEvent
+ );
+ if (!EFI_ERROR(Status)) {
+ gBS->SignalEvent (AfterReadyToBootEvent);
+ gBS->CloseEvent (AfterReadyToBootEvent);
}
}

--
2.38.1.431.g37b22c650d-goog