3 Copyright (c) 2006 - 2007, Intel Corporation
4 All rights reserved. This program and the accompanying materials
5 are licensed and made available under the terms and conditions of the BSD License
6 which accompanies this distribution. The full text of the license may be found at
7 http://opensource.org/licenses/bsd-license.php
9 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
10 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
23 // Include common header file for this module.
25 #include "CommonHeader.h"
30 // Event for Exit Boot Services Callback
32 STATIC EFI_EVENT mExitBootServicesEvent
= NULL
;
36 // Don't use module globals after the SetVirtualAddress map is signaled
38 extern ESAL_VARIABLE_GLOBAL
*mVariableModuleGlobal
;
42 RuntimeServiceGetVariable (
43 IN CHAR16
*VariableName
,
44 IN EFI_GUID
* VendorGuid
,
45 OUT UINT32
*Attributes OPTIONAL
,
46 IN OUT UINTN
*DataSize
,
65 &mVariableModuleGlobal
->VariableGlobal
[Physical
],
66 mVariableModuleGlobal
->FvbInstance
72 RuntimeServiceGetNextVariableName (
73 IN OUT UINTN
*VariableNameSize
,
74 IN OUT CHAR16
*VariableName
,
75 IN OUT EFI_GUID
*VendorGuid
87 return GetNextVariableName (
91 &mVariableModuleGlobal
->VariableGlobal
[Physical
],
92 mVariableModuleGlobal
->FvbInstance
98 RuntimeServiceSetVariable (
99 IN CHAR16
*VariableName
,
100 IN EFI_GUID
*VendorGuid
,
101 IN UINT32 Attributes
,
121 &mVariableModuleGlobal
->VariableGlobal
[Physical
],
122 &mVariableModuleGlobal
->VolatileLastVariableOffset
,
123 &mVariableModuleGlobal
->NonVolatileLastVariableOffset
,
124 mVariableModuleGlobal
->FvbInstance
130 RuntimeServiceQueryVariableInfo (
131 IN UINT32 Attributes
,
132 OUT UINT64
*MaximumVariableStorageSize
,
133 OUT UINT64
*RemainingVariableStorageSize
,
134 OUT UINT64
*MaximumVariableSize
146 return QueryVariableInfo (
148 MaximumVariableStorageSize
,
149 RemainingVariableStorageSize
,
151 &mVariableModuleGlobal
->VariableGlobal
[Physical
],
152 mVariableModuleGlobal
->FvbInstance
158 VariableClassAddressChangeEvent (
174 (VOID
**) &mVariableModuleGlobal
->VariableGlobal
[Physical
].NonVolatileVariableBase
178 (VOID
**) &mVariableModuleGlobal
->VariableGlobal
[Physical
].VolatileVariableBase
180 EfiConvertPointer (0x0, (VOID
**) &mVariableModuleGlobal
);
185 VariableServiceInitialize (
186 IN EFI_HANDLE ImageHandle
,
187 IN EFI_SYSTEM_TABLE
*SystemTable
199 EFI_HANDLE NewHandle
;
202 Status
= VariableCommonInitialize (ImageHandle
, SystemTable
);
203 ASSERT_EFI_ERROR (Status
);
205 SystemTable
->RuntimeServices
->GetVariable
= RuntimeServiceGetVariable
;
206 SystemTable
->RuntimeServices
->GetNextVariableName
= RuntimeServiceGetNextVariableName
;
207 SystemTable
->RuntimeServices
->SetVariable
= RuntimeServiceSetVariable
;
208 SystemTable
->RuntimeServices
->QueryVariableInfo
= RuntimeServiceQueryVariableInfo
;
211 // Now install the Variable Runtime Architectural Protocol on a new handle
214 Status
= gBS
->InstallMultipleProtocolInterfaces (
216 &gEfiVariableArchProtocolGuid
,
218 &gEfiVariableWriteArchProtocolGuid
,
222 ASSERT_EFI_ERROR (Status
);
224 Status
= gBS
->CreateEvent (
225 EVT_SIGNAL_EXIT_BOOT_SERVICES
,
227 VariableClassAddressChangeEvent
,
229 &mExitBootServicesEvent
231 ASSERT_EFI_ERROR (Status
);