1 /** @file -- VariablePolicyExtraInitRuntimeDxe.c
2 This file contains extra init and deinit routines that register and unregister
3 VariableAddressChange callbacks.
5 Copyright (c) Microsoft Corporation.
6 SPDX-License-Identifier: BSD-2-Clause-Patent
10 #include <Library/UefiBootServicesTableLib.h>
11 #include <Library/UefiRuntimeServicesTableLib.h>
13 extern EFI_GET_VARIABLE mGetVariableHelper
;
14 extern UINT8
*mPolicyTable
;
15 STATIC BOOLEAN mIsVirtualAddrConverted
;
16 STATIC EFI_EVENT mVariablePolicyLibVirtualAddressChangeEvent
= NULL
;
19 For the RuntimeDxe version of this lib, convert internal pointer addresses to virtual addresses.
21 @param[in] Event Event whose notification function is being invoked.
22 @param[in] Context The pointer to the notification function's context, which
23 is implementation-dependent.
28 VariablePolicyLibVirtualAddressCallback (
33 gRT
->ConvertPointer (0, (VOID
**)&mPolicyTable
);
34 gRT
->ConvertPointer (0, (VOID
**)&mGetVariableHelper
);
35 mIsVirtualAddrConverted
= TRUE
;
40 An extra init hook that enables the RuntimeDxe library instance to
41 register VirtualAddress change callbacks. Among other things.
43 @retval EFI_SUCCESS Everything is good. Continue with init.
44 @retval Others Uh... don't continue.
48 VariablePolicyExtraInit (
52 return gBS
->CreateEventEx (EVT_NOTIFY_SIGNAL
,
54 VariablePolicyLibVirtualAddressCallback
,
56 &gEfiEventVirtualAddressChangeGuid
,
57 &mVariablePolicyLibVirtualAddressChangeEvent
);
62 An extra deinit hook that enables the RuntimeDxe library instance to
63 register VirtualAddress change callbacks. Among other things.
65 @retval EFI_SUCCESS Everything is good. Continue with deinit.
66 @retval Others Uh... don't continue.
70 VariablePolicyExtraDeinit (
77 if (mIsVirtualAddrConverted
) {
78 Status
= gBS
->CloseEvent (mVariablePolicyLibVirtualAddressChangeEvent
);