On 10/10/23 02:18, Kun Qin wrote: > REF: https://bugzilla.tianocore.org/show_bug.cgi?id=4496 > > This change adds a new interface for the delayed dispatch PPI. This > new addition allows functional components relying on delayed dispatch > callbacks to be managed/dispatched with definitive order. > > The full defintion has been added into PI spec. > > Cc: Michael D Kinney <michael.d.kin...@intel.com> > Cc: Liming Gao <gaolim...@byosoft.com.cn> > Cc: Zhiguang Liu <zhiguang....@intel.com> > > Co-authored-by: Mike Turner <mik...@pobox.com> > Signed-off-by: Kun Qin <kuqi...@gmail.com> > --- > > Notes: > v2: > - Fixed PI spec version number to v1.8 [Liming] > > MdePkg/Include/Ppi/DelayedDispatch.h | 26 ++++++++++++++++++-- > 1 file changed, 24 insertions(+), 2 deletions(-)
I have a question that admittedly targets the spec more than it targets the implementation. What is the envisaged programming model / use case for WaitOnEvent? How are multiple PEIMs to interoperate via the UniqueId GUIDs? Some concrete use case would be good to know. Second: the WaitOnEvent function can wait for completion in one of two ways: (a) by calling back into the PEI dispatcher, (b) by longjumping to the PEI dispatcher, and then the PEI dispatcher longjumping back to WaitOnEvent. Option (b) seems complicated (although not unseen in edk2; we frequently use StackSwitch for various purposes, and see for example the Exit() boot service -- that can *only* work with longjump). Option (a) seems problematic, because if multiple PEIMs use ("nest") WaitOnEvent, then we get repeated stack frames that all stand for the PEI dispatcher. Stack space is considered "premium" during PEI; because -- for example -- otherwise we wouldn't have EFI_PEI_PPI_DESCRIPTOR_NOTIFY_DISPATCH, opposing EFI_PEI_PPI_DESCRIPTOR_NOTIFY_CALLBACK. Thanks, Laszlo > > diff --git a/MdePkg/Include/Ppi/DelayedDispatch.h > b/MdePkg/Include/Ppi/DelayedDispatch.h > index 098d57758551..0efcfdbfced6 100644 > --- a/MdePkg/Include/Ppi/DelayedDispatch.h > +++ b/MdePkg/Include/Ppi/DelayedDispatch.h > @@ -1,5 +1,5 @@ > /** @file > - EFI Delayed Dispatch PPI as defined in the PI 1.7 Specification > + EFI Delayed Dispatch PPI as defined in the PI 1.8 Specification > > Provide timed event service in PEI > > @@ -50,6 +50,7 @@ This service is the single member function of the > EFI_DELAYED_DISPATCH_PPI > @param[in] This Pointer to the EFI_DELAYED_DISPATCH_PPI instance > @param[in] Function Function to call back > @param[in] Context Context data > + @param[in] UniqueId GUID for this Delayed Dispatch request. > @param[in] Delay Delay interval > > @retval EFI_SUCCESS Function successfully loaded > @@ -63,9 +64,29 @@ EFI_STATUS > IN EFI_DELAYED_DISPATCH_PPI *This, > IN EFI_DELAYED_DISPATCH_FUNCTION Function, > IN UINT64 Context, > + IN EFI_GUID *UniqueId OPTIONAL, > IN UINT32 Delay > ); > > +/** > + Wait on a registered Delayed Dispatch unit that has a UniqueId. Continue > + to dispatch all registered delayed dispatch entries until *ALL* entries > with > + UniqueId have completed. > + > + @param[in] This The Delayed Dispatch PPI pointer. > + @param[in] UniqueId UniqueId of delayed dispatch entry. > + > + @retval EFI_SUCCESS The operation succeeds. > + @retval EFI_INVALID_PARAMETER The parameters are invalid. > + > +**/ > +typedef > +EFI_STATUS > +(EFIAPI *EFI_DELAYED_DISPATCH_WAIT_ON_EVENT)( > + IN EFI_DELAYED_DISPATCH_PPI *This, > + IN EFI_GUID *UniqueId > + ); > + > /// > /// This PPI is a pointer to the Delayed Dispatch Service. > /// This service will be published by the Pei Foundation. The PEI Foundation > @@ -73,7 +94,8 @@ EFI_STATUS > /// execution. > /// > struct _EFI_DELAYED_DISPATCH_PPI { > - EFI_DELAYED_DISPATCH_REGISTER Register; > + EFI_DELAYED_DISPATCH_REGISTER Register; > + EFI_DELAYED_DISPATCH_WAIT_ON_EVENT WaitOnEvent; > }; > > extern EFI_GUID gEfiPeiDelayedDispatchPpiGuid; -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#109481): https://edk2.groups.io/g/devel/message/109481 Mute This Topic: https://groups.io/mt/101865809/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/leave/9847357/21656/1706620634/xyzzy [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-