mirror of https://github.com/acidanthera/audk.git
MdeModulePkg/SmiHandlerProfile: Add Context support in Unregister
The reason is that we observe that a platform may use same Handler for different context. In order to support Unregister such handler, we have to input context information as well. Cc: Jeff Fan <jeff.fan@intel.com> Cc: Feng Tian <feng.tian@intel.com> Cc: Star Zeng <star.zeng@intel.com> Cc: Bret Barkelew <Bret.Barkelew@microsoft.com> Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Jiewen Yao <jiewen.yao@intel.com> Reviewed-by: Jeff Fan <jeff.fan@intel.com> Reviewed-by: Feng Tian <feng.tian@intel.com>
This commit is contained in:
parent
091e902bd3
commit
cb716d292b
|
@ -150,6 +150,26 @@ extern EFI_GUID gSmiHandlerProfileGuid;
|
||||||
|
|
||||||
typedef struct _SMI_HANDLER_PROFILE_PROTOCOL SMI_HANDLER_PROFILE_PROTOCOL;
|
typedef struct _SMI_HANDLER_PROFILE_PROTOCOL SMI_HANDLER_PROFILE_PROTOCOL;
|
||||||
|
|
||||||
|
/**
|
||||||
|
This function is called by SmmChildDispatcher module to report
|
||||||
|
a new SMI handler is registered, to SmmCore.
|
||||||
|
|
||||||
|
@param This The protocol instance
|
||||||
|
@param HandlerGuid The GUID to identify the type of the handler.
|
||||||
|
For the SmmChildDispatch protocol, the HandlerGuid
|
||||||
|
must be the GUID of SmmChildDispatch protocol.
|
||||||
|
@param Handler The SMI handler.
|
||||||
|
@param CallerAddress The address of the module who registers the SMI handler.
|
||||||
|
@param Context The context of the SMI handler.
|
||||||
|
For the SmmChildDispatch protocol, the Context
|
||||||
|
must match the one defined for SmmChildDispatch protocol.
|
||||||
|
@param ContextSize The size of the context in bytes.
|
||||||
|
For the SmmChildDispatch protocol, the Context
|
||||||
|
must match the one defined for SmmChildDispatch protocol.
|
||||||
|
|
||||||
|
@retval EFI_SUCCESS The information is recorded.
|
||||||
|
@retval EFI_OUT_OF_RESOURCES There is no enough resource to record the information.
|
||||||
|
**/
|
||||||
typedef
|
typedef
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
(EFIAPI *SMI_HANDLER_PROFILE_REGISTER_HANDLER) (
|
(EFIAPI *SMI_HANDLER_PROFILE_REGISTER_HANDLER) (
|
||||||
|
@ -161,12 +181,31 @@ EFI_STATUS
|
||||||
IN UINTN ContextSize OPTIONAL
|
IN UINTN ContextSize OPTIONAL
|
||||||
);
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
This function is called by SmmChildDispatcher module to report
|
||||||
|
an existing SMI handler is unregistered, to SmmCore.
|
||||||
|
|
||||||
|
@param This The protocol instance
|
||||||
|
@param HandlerGuid The GUID to identify the type of the handler.
|
||||||
|
For the SmmChildDispatch protocol, the HandlerGuid
|
||||||
|
must be the GUID of SmmChildDispatch protocol.
|
||||||
|
@param Handler The SMI handler.
|
||||||
|
@param Context The context of the SMI handler.
|
||||||
|
If it is NOT NULL, it will be used to check what is registered.
|
||||||
|
@param ContextSize The size of the context in bytes.
|
||||||
|
If Context is NOT NULL, it will be used to check what is registered.
|
||||||
|
|
||||||
|
@retval EFI_SUCCESS The original record is removed.
|
||||||
|
@retval EFI_NOT_FOUND There is no record for the HandlerGuid and handler.
|
||||||
|
**/
|
||||||
typedef
|
typedef
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
(EFIAPI *SMI_HANDLER_PROFILE_UNREGISTER_HANDLER) (
|
(EFIAPI *SMI_HANDLER_PROFILE_UNREGISTER_HANDLER) (
|
||||||
IN SMI_HANDLER_PROFILE_PROTOCOL *This,
|
IN SMI_HANDLER_PROFILE_PROTOCOL *This,
|
||||||
IN EFI_GUID *HandlerGuid,
|
IN EFI_GUID *HandlerGuid,
|
||||||
IN EFI_SMM_HANDLER_ENTRY_POINT2 Handler
|
IN EFI_SMM_HANDLER_ENTRY_POINT2 Handler,
|
||||||
|
IN VOID *Context, OPTIONAL
|
||||||
|
IN UINTN ContextSize OPTIONAL
|
||||||
);
|
);
|
||||||
|
|
||||||
struct _SMI_HANDLER_PROFILE_PROTOCOL {
|
struct _SMI_HANDLER_PROFILE_PROTOCOL {
|
||||||
|
|
|
@ -63,6 +63,10 @@ SmiHandlerProfileRegisterHandler (
|
||||||
For the SmmChildDispatch protocol, the HandlerGuid
|
For the SmmChildDispatch protocol, the HandlerGuid
|
||||||
must be the GUID of SmmChildDispatch protocol.
|
must be the GUID of SmmChildDispatch protocol.
|
||||||
@param Handler The SMI handler.
|
@param Handler The SMI handler.
|
||||||
|
@param Context The context of the SMI handler.
|
||||||
|
If it is NOT NULL, it will be used to check what is registered.
|
||||||
|
@param ContextSize The size of the context in bytes.
|
||||||
|
If Context is NOT NULL, it will be used to check what is registered.
|
||||||
|
|
||||||
@retval EFI_SUCCESS The original record is removed.
|
@retval EFI_SUCCESS The original record is removed.
|
||||||
@retval EFI_UNSUPPORTED The feature is unsupported.
|
@retval EFI_UNSUPPORTED The feature is unsupported.
|
||||||
|
@ -72,11 +76,13 @@ EFI_STATUS
|
||||||
EFIAPI
|
EFIAPI
|
||||||
SmiHandlerProfileUnregisterHandler (
|
SmiHandlerProfileUnregisterHandler (
|
||||||
IN EFI_GUID *HandlerGuid,
|
IN EFI_GUID *HandlerGuid,
|
||||||
IN EFI_SMM_HANDLER_ENTRY_POINT2 Handler
|
IN EFI_SMM_HANDLER_ENTRY_POINT2 Handler,
|
||||||
|
IN VOID *Context, OPTIONAL
|
||||||
|
IN UINTN ContextSize OPTIONAL
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
if (mSmiHandlerProfile != NULL) {
|
if (mSmiHandlerProfile != NULL) {
|
||||||
return mSmiHandlerProfile->UnregisterHandler (mSmiHandlerProfile, HandlerGuid, Handler);
|
return mSmiHandlerProfile->UnregisterHandler (mSmiHandlerProfile, HandlerGuid, Handler, Context, ContextSize);
|
||||||
}
|
}
|
||||||
return EFI_UNSUPPORTED;
|
return EFI_UNSUPPORTED;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue