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.
25 // Event for Exit Boot Services Callback
27 STATIC EFI_EVENT mExitBootServicesEvent
= NULL
;
31 // Don't use module globals after the SetVirtualAddress map is signaled
33 extern ESAL_VARIABLE_GLOBAL
*mVariableModuleGlobal
;
37 RuntimeServiceGetVariable (
38 IN CHAR16
*VariableName
,
39 IN EFI_GUID
* VendorGuid
,
40 OUT UINT32
*Attributes OPTIONAL
,
41 IN OUT UINTN
*DataSize
,
60 &mVariableModuleGlobal
->VariableGlobal
[Physical
],
61 mVariableModuleGlobal
->FvbInstance
67 RuntimeServiceGetNextVariableName (
68 IN OUT UINTN
*VariableNameSize
,
69 IN OUT CHAR16
*VariableName
,
70 IN OUT EFI_GUID
*VendorGuid
82 return GetNextVariableName (
86 &mVariableModuleGlobal
->VariableGlobal
[Physical
],
87 mVariableModuleGlobal
->FvbInstance
93 RuntimeServiceSetVariable (
94 IN CHAR16
*VariableName
,
95 IN EFI_GUID
*VendorGuid
,
116 &mVariableModuleGlobal
->VariableGlobal
[Physical
],
117 &mVariableModuleGlobal
->VolatileLastVariableOffset
,
118 &mVariableModuleGlobal
->NonVolatileLastVariableOffset
,
119 mVariableModuleGlobal
->FvbInstance
125 RuntimeServiceQueryVariableInfo (
126 IN UINT32 Attributes
,
127 OUT UINT64
*MaximumVariableStorageSize
,
128 OUT UINT64
*RemainingVariableStorageSize
,
129 OUT UINT64
*MaximumVariableSize
141 return QueryVariableInfo (
143 MaximumVariableStorageSize
,
144 RemainingVariableStorageSize
,
146 &mVariableModuleGlobal
->VariableGlobal
[Physical
],
147 mVariableModuleGlobal
->FvbInstance
153 VariableClassAddressChangeEvent (
169 (VOID
**) &mVariableModuleGlobal
->VariableGlobal
[Physical
].NonVolatileVariableBase
173 (VOID
**) &mVariableModuleGlobal
->VariableGlobal
[Physical
].VolatileVariableBase
175 EfiConvertPointer (0x0, (VOID
**) &mVariableModuleGlobal
);
180 VariableServiceInitialize (
181 IN EFI_HANDLE ImageHandle
,
182 IN EFI_SYSTEM_TABLE
*SystemTable
194 EFI_HANDLE NewHandle
;
197 Status
= VariableCommonInitialize (ImageHandle
, SystemTable
);
198 ASSERT_EFI_ERROR (Status
);
200 SystemTable
->RuntimeServices
->GetVariable
= RuntimeServiceGetVariable
;
201 SystemTable
->RuntimeServices
->GetNextVariableName
= RuntimeServiceGetNextVariableName
;
202 SystemTable
->RuntimeServices
->SetVariable
= RuntimeServiceSetVariable
;
203 SystemTable
->RuntimeServices
->QueryVariableInfo
= RuntimeServiceQueryVariableInfo
;
206 // Now install the Variable Runtime Architectural Protocol on a new handle
209 Status
= gBS
->InstallMultipleProtocolInterfaces (
211 &gEfiVariableArchProtocolGuid
,
213 &gEfiVariableWriteArchProtocolGuid
,
217 ASSERT_EFI_ERROR (Status
);
219 Status
= gBS
->CreateEvent (
220 EVT_SIGNAL_EXIT_BOOT_SERVICES
,
222 VariableClassAddressChangeEvent
,
224 &mExitBootServicesEvent
226 ASSERT_EFI_ERROR (Status
);