\r
--*/\r
\r
-#include <SalApi.h>\r
#include <RuntimeLibInternal.h>\r
\r
//\r
// Driver Lib Module Globals\r
//\r
+static EFI_EVENT mEfiVirtualNotifyEvent;\r
+EFI_RUNTIME_SERVICES *mRT;\r
\r
-STATIC EFI_EVENT mRuntimeNotifyEvent;\r
-STATIC EFI_EVENT mEfiVirtualNotifyEvent;\r
-\r
-EFI_RUNTIME_SERVICES *mRT;\r
-\r
-STATIC\r
VOID\r
EFIAPI\r
RuntimeDriverExitBootServices (\r
\r
--*/\r
{\r
- EFI_EVENT_NOTIFY ChildNotifyEventHandler;\r
- UINTN Index;\r
-\r
- for (Index = 0; _gDriverExitBootServicesEvent[Index] != NULL; Index++) {\r
- ChildNotifyEventHandler = _gDriverExitBootServicesEvent[Index];\r
- ChildNotifyEventHandler (Event, NULL);\r
+ if (EfiAtRuntime()) {\r
+ return;\r
}\r
-\r
- //\r
- // Clear out BootService globals\r
- //\r
- gBS = NULL;\r
}\r
\r
STATIC\r
\r
--*/\r
{\r
- UINTN Index;\r
+ UINTN Index;\r
EFI_EVENT_NOTIFY ChildNotifyEventHandler;\r
\r
for (Index = 0; _gDriverSetVirtualAddressMapEvent[Index] != NULL; Index++) {\r
\r
mRT = SystemTable->RuntimeServices;\r
\r
- //\r
- // Register our ExitBootServices () notify function\r
- //\r
-\r
- Status = gBS->CreateEvent (\r
- EFI_EVENT_SIGNAL_EXIT_BOOT_SERVICES,\r
- EFI_TPL_NOTIFY,\r
- RuntimeDriverExitBootServices,\r
- NULL,\r
- &mRuntimeNotifyEvent\r
- );\r
- ASSERT_EFI_ERROR (Status);\r
-\r
//\r
// Register SetVirtualAddressMap () notify function\r
//\r
- \r
- Status = gBS->CreateEvent (\r
- EFI_EVENT_SIGNAL_VIRTUAL_ADDRESS_CHANGE,\r
- EFI_TPL_NOTIFY,\r
- RuntimeLibVirtualNotifyEvent,\r
- NULL,\r
- mEfiVirtualNotifyEvent\r
- );\r
- ASSERT_EFI_ERROR (Status);\r
+ if (_gDriverSetVirtualAddressMapEvent[0] != NULL) {\r
+ Status = gBS->CreateEvent (\r
+ EFI_EVENT_SIGNAL_VIRTUAL_ADDRESS_CHANGE,\r
+ EFI_TPL_NOTIFY,\r
+ RuntimeLibVirtualNotifyEvent,\r
+ NULL,\r
+ &mEfiVirtualNotifyEvent\r
+ );\r
+ ASSERT_EFI_ERROR (Status);\r
+ }\r
\r
return EFI_SUCCESS;\r
}\r
EFI_STATUS\r
EFIAPI\r
RuntimeDriverLibDeconstruct (\r
- VOID\r
+ IN EFI_HANDLE ImageHandle,\r
+ IN EFI_SYSTEM_TABLE *SystemTable\r
)\r
/*++\r
\r
{\r
EFI_STATUS Status;\r
\r
- //\r
- // Close our ExitBootServices () notify function\r
- //\r
- Status = gBS->CloseEvent (mRuntimeNotifyEvent);\r
- ASSERT_EFI_ERROR (Status);\r
-\r
//\r
// Close SetVirtualAddressMap () notify function\r
//\r
- Status = gBS->CloseEvent (mEfiVirtualNotifyEvent);\r
- ASSERT_EFI_ERROR (Status);\r
+ if (_gDriverSetVirtualAddressMapEvent[0] != NULL) {\r
+ Status = gBS->CloseEvent (mEfiVirtualNotifyEvent);\r
+ ASSERT_EFI_ERROR (Status);\r
+ }\r
\r
return EFI_SUCCESS;\r
}\r
\r
--*/\r
{\r
- EFI_GUID Guid = EFI_EXTENDED_SAL_VIRTUAL_SERVICES_PROTOCOL_GUID;\r
+ EFI_GUID Guid;\r
SAL_RETURN_REGS ReturnReg;\r
\r
+ *((UINT64 *) &Guid) = EFI_EXTENDED_SAL_VIRTUAL_SERVICES_PROTOCOL_GUID_LO;\r
+ *(((UINT64 *)&Guid) + 1) = EFI_EXTENDED_SAL_VIRTUAL_SERVICES_PROTOCOL_GUID_HI;\r
+\r
ReturnReg = EfiCallEsalService (&Guid, IsEfiRuntime, 0, 0, 0, 0, 0, 0, 0);\r
\r
return (BOOLEAN) (ReturnReg.r9 == 1);\r
\r
--*/\r
{\r
- EFI_GUID Guid = EFI_EXTENDED_SAL_VIRTUAL_SERVICES_PROTOCOL_GUID;\r
+ EFI_GUID Guid;\r
SAL_RETURN_REGS ReturnReg;\r
\r
+ *((UINT64 *) &Guid) = EFI_EXTENDED_SAL_VIRTUAL_SERVICES_PROTOCOL_GUID_LO;\r
+ *(((UINT64 *)&Guid) + 1) = EFI_EXTENDED_SAL_VIRTUAL_SERVICES_PROTOCOL_GUID_HI;\r
+\r
ReturnReg = EfiCallEsalService (&Guid, IsVirtual, 0, 0, 0, 0, 0, 0, 0);\r
\r
return (BOOLEAN) (ReturnReg.r9 == 1);\r