// Table of SMI Handlers that are registered by the SMM Core when it is initialized\r
//\r
SMM_CORE_SMI_HANDLERS mSmmCoreSmiHandlers[] = {\r
- { SmmDriverDispatchHandler, &gEfiEventDxeDispatchGuid, NULL, TRUE },\r
- { SmmReadyToLockHandler, &gEfiDxeSmmReadyToLockProtocolGuid, NULL, TRUE }, \r
- { SmmLegacyBootHandler, &gEfiEventLegacyBootGuid, NULL, FALSE },\r
- { SmmExitBootServicesHandler, &gEfiEventExitBootServicesGuid, NULL, FALSE },\r
- { SmmReadyToBootHandler, &gEfiEventReadyToBootGuid, NULL, FALSE },\r
- { SmmEndOfDxeHandler, &gEfiEndOfDxeEventGroupGuid, NULL, TRUE },\r
- { NULL, NULL, NULL, FALSE }\r
+ { SmmDriverDispatchHandler, &gEfiEventDxeDispatchGuid, NULL, TRUE },\r
+ { SmmReadyToLockHandler, &gEfiDxeSmmReadyToLockProtocolGuid, NULL, TRUE }, \r
+ { SmmLegacyBootHandler, &gEfiEventLegacyBootGuid, NULL, FALSE },\r
+ { SmmExitBootServicesHandler, &gEfiEventExitBootServicesGuid, NULL, FALSE },\r
+ { SmmReadyToBootHandler, &gEfiEventReadyToBootGuid, NULL, FALSE },\r
+ { SmmEndOfDxeHandler, &gEfiEndOfDxeEventGroupGuid, NULL, TRUE },\r
+ { SmmEndOfS3ResumeHandler, &gEdkiiSmmEndOfS3ResumeProtocolGuid, NULL, FALSE },\r
+ { NULL, NULL, NULL, FALSE }\r
};\r
\r
UINTN mFullSmramRangeCount;\r
return Status;\r
}\r
\r
+/**\r
+ Software SMI handler that is called when the EndOfS3Resume event is trigged.\r
+ This function installs the SMM EndOfS3Resume Protocol so SMM Drivers are informed that\r
+ S3 resume has finished.\r
+\r
+ @param DispatchHandle The unique handle assigned to this handler by SmiHandlerRegister().\r
+ @param Context Points to an optional handler context which was specified when the handler was registered.\r
+ @param CommBuffer A pointer to a collection of data in memory that will\r
+ be conveyed from a non-SMM environment into an SMM environment.\r
+ @param CommBufferSize The size of the CommBuffer.\r
+\r
+ @return Status Code\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+SmmEndOfS3ResumeHandler (\r
+ IN EFI_HANDLE DispatchHandle,\r
+ IN CONST VOID *Context, OPTIONAL\r
+ IN OUT VOID *CommBuffer, OPTIONAL\r
+ IN OUT UINTN *CommBufferSize OPTIONAL\r
+ )\r
+{\r
+ EFI_STATUS Status;\r
+ EFI_HANDLE SmmHandle;\r
+\r
+ DEBUG ((EFI_D_INFO, "SmmEndOfS3ResumeHandler\n"));\r
+\r
+ //\r
+ // Install SMM EndOfS3Resume protocol\r
+ //\r
+ SmmHandle = NULL;\r
+ Status = SmmInstallProtocolInterface (\r
+ &SmmHandle,\r
+ &gEdkiiSmmEndOfS3ResumeProtocolGuid,\r
+ EFI_NATIVE_INTERFACE,\r
+ NULL\r
+ );\r
+ ASSERT_EFI_ERROR (Status);\r
+\r
+ //\r
+ // Uninstall the protocol here because the comsume just hook the\r
+ // installation event.\r
+ //\r
+ Status = SmmUninstallProtocolInterface (\r
+ SmmHandle,\r
+ &gEdkiiSmmEndOfS3ResumeProtocolGuid,\r
+ NULL\r
+ );\r
+ ASSERT_EFI_ERROR (Status);\r
+\r
+ return Status;\r
+}\r
+\r
/**\r
Determine if two buffers overlap in memory.\r
\r
#include <Protocol/SmmExitBootServices.h>\r
#include <Protocol/SmmLegacyBoot.h>\r
#include <Protocol/SmmReadyToBoot.h>\r
+#include <Protocol/SmmEndOfS3Resume.h>\r
\r
#include <Guid/Apriori.h>\r
#include <Guid/EventGroup.h>\r
IN OUT UINTN *CommBufferSize OPTIONAL\r
);\r
\r
+/**\r
+ Software SMI handler that is called when the EndOfS3Resume event is trigged.\r
+ This function installs the SMM EndOfS3Resume Protocol so SMM Drivers are informed that\r
+ S3 resume has finished.\r
+\r
+ @param DispatchHandle The unique handle assigned to this handler by SmiHandlerRegister().\r
+ @param Context Points to an optional handler context which was specified when the handler was registered.\r
+ @param CommBuffer A pointer to a collection of data in memory that will\r
+ be conveyed from a non-SMM environment into an SMM environment.\r
+ @param CommBufferSize The size of the CommBuffer.\r
+\r
+ @return Status Code\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+SmmEndOfS3ResumeHandler (\r
+ IN EFI_HANDLE DispatchHandle,\r
+ IN CONST VOID *Context, OPTIONAL\r
+ IN OUT VOID *CommBuffer, OPTIONAL\r
+ IN OUT UINTN *CommBufferSize OPTIONAL\r
+ );\r
+\r
/**\r
Place holder function until all the SMM System Table Service are available.\r
\r