3 Implment all four UEFI runtime variable services and
4 install variable architeture protocol.
6 Copyright (c) 2006 - 2008, Intel Corporation
7 All rights reserved. This program and the accompanying materials
8 are licensed and made available under the terms and conditions of the BSD License
9 which accompanies this distribution. The full text of the license may be found at
10 http://opensource.org/licenses/bsd-license.php
12 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
13 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
20 // Don't use module globals after the SetVirtualAddress map is signaled
22 extern ESAL_VARIABLE_GLOBAL
*mVariableModuleGlobal
;
24 EFI_EVENT mVirtualAddressChangeEvent
= NULL
;
28 RuntimeServiceGetVariable (
29 IN CHAR16
*VariableName
,
30 IN EFI_GUID
* VendorGuid
,
31 OUT UINT32
*Attributes OPTIONAL
,
32 IN OUT UINTN
*DataSize
,
51 &mVariableModuleGlobal
->VariableGlobal
[Physical
],
52 mVariableModuleGlobal
->FvbInstance
58 RuntimeServiceGetNextVariableName (
59 IN OUT UINTN
*VariableNameSize
,
60 IN OUT CHAR16
*VariableName
,
61 IN OUT EFI_GUID
*VendorGuid
73 return GetNextVariableName (
77 &mVariableModuleGlobal
->VariableGlobal
[Physical
],
78 mVariableModuleGlobal
->FvbInstance
84 RuntimeServiceSetVariable (
85 IN CHAR16
*VariableName
,
86 IN EFI_GUID
*VendorGuid
,
107 &mVariableModuleGlobal
->VariableGlobal
[Physical
],
108 &mVariableModuleGlobal
->VolatileLastVariableOffset
,
109 &mVariableModuleGlobal
->NonVolatileLastVariableOffset
,
110 mVariableModuleGlobal
->FvbInstance
116 RuntimeServiceQueryVariableInfo (
117 IN UINT32 Attributes
,
118 OUT UINT64
*MaximumVariableStorageSize
,
119 OUT UINT64
*RemainingVariableStorageSize
,
120 OUT UINT64
*MaximumVariableSize
132 return QueryVariableInfo (
134 MaximumVariableStorageSize
,
135 RemainingVariableStorageSize
,
137 &mVariableModuleGlobal
->VariableGlobal
[Physical
],
138 mVariableModuleGlobal
->FvbInstance
144 VariableClassAddressChangeEvent (
160 (VOID
**) &mVariableModuleGlobal
->VariableGlobal
[Physical
].NonVolatileVariableBase
164 (VOID
**) &mVariableModuleGlobal
->VariableGlobal
[Physical
].VolatileVariableBase
166 EfiConvertPointer (0x0, (VOID
**) &mVariableModuleGlobal
);
171 VariableServiceInitialize (
172 IN EFI_HANDLE ImageHandle
,
173 IN EFI_SYSTEM_TABLE
*SystemTable
185 EFI_HANDLE NewHandle
;
188 Status
= VariableCommonInitialize (ImageHandle
, SystemTable
);
189 ASSERT_EFI_ERROR (Status
);
191 SystemTable
->RuntimeServices
->GetVariable
= RuntimeServiceGetVariable
;
192 SystemTable
->RuntimeServices
->GetNextVariableName
= RuntimeServiceGetNextVariableName
;
193 SystemTable
->RuntimeServices
->SetVariable
= RuntimeServiceSetVariable
;
194 SystemTable
->RuntimeServices
->QueryVariableInfo
= RuntimeServiceQueryVariableInfo
;
197 // Now install the Variable Runtime Architectural Protocol on a new handle
200 Status
= gBS
->InstallMultipleProtocolInterfaces (
202 &gEfiVariableArchProtocolGuid
,
204 &gEfiVariableWriteArchProtocolGuid
,
208 ASSERT_EFI_ERROR (Status
);
210 Status
= gBS
->CreateEvent (
211 EVT_SIGNAL_VIRTUAL_ADDRESS_CHANGE
,
213 VariableClassAddressChangeEvent
,
215 &mVirtualAddressChangeEvent
217 ASSERT_EFI_ERROR (Status
);