return mSmmControl->Clear (mSmmControl, Periodic);\r
}\r
\r
+/**\r
+ Notification function of EVT_SIGNAL_VIRTUAL_ADDRESS_CHANGE.\r
+\r
+ This is a notification function registered on EVT_SIGNAL_VIRTUAL_ADDRESS_CHANGE event.\r
+ It convers pointer to new virtual address.\r
+\r
+ @param[in] Event Event whose notification function is being invoked.\r
+ @param[in] Context Pointer to the notification function's context.\r
+\r
+**/\r
+VOID\r
+EFIAPI\r
+SetVirtualAddressNotify (\r
+ IN EFI_EVENT Event,\r
+ IN VOID *Context\r
+ )\r
+{\r
+ EfiConvertPointer (0x0, (VOID **)&mSmmControl);\r
+}\r
+\r
/**\r
Entry Point for this thunk driver.\r
\r
)\r
{\r
EFI_STATUS Status;\r
+ EFI_EVENT Event;\r
EFI_SMM_CONTROL_REGISTER RegisterInfo;\r
\r
///\r
ASSERT_EFI_ERROR (Status);\r
mDataPort = RegisterInfo.SmiDataRegister;\r
\r
+ ///\r
+ /// Create event on SetVirtualAddressMap() to convert mSmmControl from a physical address to a virtual address\r
+ ///\r
+ Status = gBS->CreateEventEx (\r
+ EVT_NOTIFY_SIGNAL,\r
+ TPL_NOTIFY,\r
+ SetVirtualAddressNotify,\r
+ NULL,\r
+ &gEfiEventVirtualAddressChangeGuid,\r
+ &Event\r
+ );\r
+ \r
+ ASSERT_EFI_ERROR (Status);\r
+\r
///\r
/// Publish framework SMM Control Protocol\r
///\r
\r
#include <PiDxe.h>\r
#include <FrameworkSmm.h>\r
+\r
+#include <Protocol/SmmControl2.h>\r
+#include <Protocol/SmmControl.h>\r
+\r
+#include <Guid/EventGroup.h>\r
+\r
#include <Library/DebugLib.h>\r
#include <Library/UefiBootServicesTableLib.h>\r
#include <Library/UefiDriverEntryPoint.h>\r
+#include <Library/UefiRuntimeLib.h>\r
#include <Library/IoLib.h>\r
-#include <Protocol/SmmControl2.h>\r
-#include <Protocol/SmmControl.h>\r
\r
/**\r
Invokes SMI activation from either the preboot or runtime environment.\r
INF_VERSION = 0x00010005\r
BASE_NAME = SmmControl2OnSmmControlThunk\r
FILE_GUID = B55A4515-5895-4ea8-845B-75B7480F6502\r
- MODULE_TYPE = DXE_DRIVER\r
+ MODULE_TYPE = DXE_RUNTIME_DRIVER\r
VERSION_STRING = 1.0\r
ENTRY_POINT = SmmControl2ThunkMain\r
\r
[LibraryClasses]\r
UefiDriverEntryPoint\r
UefiBootServicesTableLib\r
+ UefiRuntimeLib\r
DebugLib\r
IoLib\r
\r
gEfiSmmControlProtocolGuid # PROTOCOL ALWAYS_CONSUMED\r
gEfiSmmControl2ProtocolGuid # PROTOCOL ALWAYS_PRODUCED\r
\r
+[Guids]\r
+ gEfiEventVirtualAddressChangeGuid # GUID ALWAYS_CONSUMED\r
+\r
[Depex]\r
gEfiSmmControlProtocolGuid\r
\r