MdeModulePkg/PiSmmCore: Install Protocol when S3 resume finished.
Install EdkiiSmmEndOfS3ResumeProtocol when S3 resume finished. S3ResumePei will send S3 resume finished event to SmmCore through communication buffer. V2 change: None. V3 change: 1. Uninstall the protocol right after install it to avoid run out of memory. Cc: Ruiyu Ni <ruiyu.ni@intel.com> Cc: Jiewen Yao <jiewen.yao@intel.com> Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Eric Dong <eric.dong@intel.com> Reviewed-by: Ruiyu Ni <ruiyu.ni@intel.com> Reviewed-by: Jiewen Yao <jiewen.yao@intel.com>
This commit is contained in:
parent
18b13fabfa
commit
d76c2da8d5
@ -75,13 +75,14 @@ BOOLEAN mInLegacyBoot = FALSE;
|
|||||||
// Table of SMI Handlers that are registered by the SMM Core when it is initialized
|
// Table of SMI Handlers that are registered by the SMM Core when it is initialized
|
||||||
//
|
//
|
||||||
SMM_CORE_SMI_HANDLERS mSmmCoreSmiHandlers[] = {
|
SMM_CORE_SMI_HANDLERS mSmmCoreSmiHandlers[] = {
|
||||||
{ SmmDriverDispatchHandler, &gEfiEventDxeDispatchGuid, NULL, TRUE },
|
{ SmmDriverDispatchHandler, &gEfiEventDxeDispatchGuid, NULL, TRUE },
|
||||||
{ SmmReadyToLockHandler, &gEfiDxeSmmReadyToLockProtocolGuid, NULL, TRUE },
|
{ SmmReadyToLockHandler, &gEfiDxeSmmReadyToLockProtocolGuid, NULL, TRUE },
|
||||||
{ SmmLegacyBootHandler, &gEfiEventLegacyBootGuid, NULL, FALSE },
|
{ SmmLegacyBootHandler, &gEfiEventLegacyBootGuid, NULL, FALSE },
|
||||||
{ SmmExitBootServicesHandler, &gEfiEventExitBootServicesGuid, NULL, FALSE },
|
{ SmmExitBootServicesHandler, &gEfiEventExitBootServicesGuid, NULL, FALSE },
|
||||||
{ SmmReadyToBootHandler, &gEfiEventReadyToBootGuid, NULL, FALSE },
|
{ SmmReadyToBootHandler, &gEfiEventReadyToBootGuid, NULL, FALSE },
|
||||||
{ SmmEndOfDxeHandler, &gEfiEndOfDxeEventGroupGuid, NULL, TRUE },
|
{ SmmEndOfDxeHandler, &gEfiEndOfDxeEventGroupGuid, NULL, TRUE },
|
||||||
{ NULL, NULL, NULL, FALSE }
|
{ SmmEndOfS3ResumeHandler, &gEdkiiSmmEndOfS3ResumeProtocolGuid, NULL, FALSE },
|
||||||
|
{ NULL, NULL, NULL, FALSE }
|
||||||
};
|
};
|
||||||
|
|
||||||
UINTN mFullSmramRangeCount;
|
UINTN mFullSmramRangeCount;
|
||||||
@ -382,6 +383,60 @@ SmmEndOfDxeHandler (
|
|||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Software SMI handler that is called when the EndOfS3Resume event is trigged.
|
||||||
|
This function installs the SMM EndOfS3Resume Protocol so SMM Drivers are informed that
|
||||||
|
S3 resume has finished.
|
||||||
|
|
||||||
|
@param DispatchHandle The unique handle assigned to this handler by SmiHandlerRegister().
|
||||||
|
@param Context Points to an optional handler context which was specified when the handler was registered.
|
||||||
|
@param CommBuffer A pointer to a collection of data in memory that will
|
||||||
|
be conveyed from a non-SMM environment into an SMM environment.
|
||||||
|
@param CommBufferSize The size of the CommBuffer.
|
||||||
|
|
||||||
|
@return Status Code
|
||||||
|
|
||||||
|
**/
|
||||||
|
EFI_STATUS
|
||||||
|
EFIAPI
|
||||||
|
SmmEndOfS3ResumeHandler (
|
||||||
|
IN EFI_HANDLE DispatchHandle,
|
||||||
|
IN CONST VOID *Context, OPTIONAL
|
||||||
|
IN OUT VOID *CommBuffer, OPTIONAL
|
||||||
|
IN OUT UINTN *CommBufferSize OPTIONAL
|
||||||
|
)
|
||||||
|
{
|
||||||
|
EFI_STATUS Status;
|
||||||
|
EFI_HANDLE SmmHandle;
|
||||||
|
|
||||||
|
DEBUG ((EFI_D_INFO, "SmmEndOfS3ResumeHandler\n"));
|
||||||
|
|
||||||
|
//
|
||||||
|
// Install SMM EndOfS3Resume protocol
|
||||||
|
//
|
||||||
|
SmmHandle = NULL;
|
||||||
|
Status = SmmInstallProtocolInterface (
|
||||||
|
&SmmHandle,
|
||||||
|
&gEdkiiSmmEndOfS3ResumeProtocolGuid,
|
||||||
|
EFI_NATIVE_INTERFACE,
|
||||||
|
NULL
|
||||||
|
);
|
||||||
|
ASSERT_EFI_ERROR (Status);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Uninstall the protocol here because the comsume just hook the
|
||||||
|
// installation event.
|
||||||
|
//
|
||||||
|
Status = SmmUninstallProtocolInterface (
|
||||||
|
SmmHandle,
|
||||||
|
&gEdkiiSmmEndOfS3ResumeProtocolGuid,
|
||||||
|
NULL
|
||||||
|
);
|
||||||
|
ASSERT_EFI_ERROR (Status);
|
||||||
|
|
||||||
|
return Status;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Determine if two buffers overlap in memory.
|
Determine if two buffers overlap in memory.
|
||||||
|
|
||||||
|
@ -32,6 +32,7 @@
|
|||||||
#include <Protocol/SmmExitBootServices.h>
|
#include <Protocol/SmmExitBootServices.h>
|
||||||
#include <Protocol/SmmLegacyBoot.h>
|
#include <Protocol/SmmLegacyBoot.h>
|
||||||
#include <Protocol/SmmReadyToBoot.h>
|
#include <Protocol/SmmReadyToBoot.h>
|
||||||
|
#include <Protocol/SmmEndOfS3Resume.h>
|
||||||
|
|
||||||
#include <Guid/Apriori.h>
|
#include <Guid/Apriori.h>
|
||||||
#include <Guid/EventGroup.h>
|
#include <Guid/EventGroup.h>
|
||||||
@ -801,6 +802,29 @@ SmmReadyToBootHandler (
|
|||||||
IN OUT UINTN *CommBufferSize OPTIONAL
|
IN OUT UINTN *CommBufferSize OPTIONAL
|
||||||
);
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
Software SMI handler that is called when the EndOfS3Resume event is trigged.
|
||||||
|
This function installs the SMM EndOfS3Resume Protocol so SMM Drivers are informed that
|
||||||
|
S3 resume has finished.
|
||||||
|
|
||||||
|
@param DispatchHandle The unique handle assigned to this handler by SmiHandlerRegister().
|
||||||
|
@param Context Points to an optional handler context which was specified when the handler was registered.
|
||||||
|
@param CommBuffer A pointer to a collection of data in memory that will
|
||||||
|
be conveyed from a non-SMM environment into an SMM environment.
|
||||||
|
@param CommBufferSize The size of the CommBuffer.
|
||||||
|
|
||||||
|
@return Status Code
|
||||||
|
|
||||||
|
**/
|
||||||
|
EFI_STATUS
|
||||||
|
EFIAPI
|
||||||
|
SmmEndOfS3ResumeHandler (
|
||||||
|
IN EFI_HANDLE DispatchHandle,
|
||||||
|
IN CONST VOID *Context, OPTIONAL
|
||||||
|
IN OUT VOID *CommBuffer, OPTIONAL
|
||||||
|
IN OUT UINTN *CommBufferSize OPTIONAL
|
||||||
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Place holder function until all the SMM System Table Service are available.
|
Place holder function until all the SMM System Table Service are available.
|
||||||
|
|
||||||
|
@ -79,6 +79,7 @@
|
|||||||
gEdkiiSmmExitBootServicesProtocolGuid ## SOMETIMES_PRODUCES
|
gEdkiiSmmExitBootServicesProtocolGuid ## SOMETIMES_PRODUCES
|
||||||
gEdkiiSmmLegacyBootProtocolGuid ## SOMETIMES_PRODUCES
|
gEdkiiSmmLegacyBootProtocolGuid ## SOMETIMES_PRODUCES
|
||||||
gEdkiiSmmReadyToBootProtocolGuid ## PRODUCES
|
gEdkiiSmmReadyToBootProtocolGuid ## PRODUCES
|
||||||
|
gEdkiiSmmEndOfS3ResumeProtocolGuid ## SOMETIMES_PRODUCES
|
||||||
|
|
||||||
gEfiSmmSwDispatch2ProtocolGuid ## SOMETIMES_CONSUMES
|
gEfiSmmSwDispatch2ProtocolGuid ## SOMETIMES_CONSUMES
|
||||||
gEfiSmmSxDispatch2ProtocolGuid ## SOMETIMES_CONSUMES
|
gEfiSmmSxDispatch2ProtocolGuid ## SOMETIMES_CONSUMES
|
||||||
|
Loading…
x
Reference in New Issue
Block a user