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
;
26 RuntimeServiceGetVariable (
27 IN CHAR16
*VariableName
,
28 IN EFI_GUID
* VendorGuid
,
29 OUT UINT32
*Attributes OPTIONAL
,
30 IN OUT UINTN
*DataSize
,
49 &mVariableModuleGlobal
->VariableGlobal
[Physical
],
50 mVariableModuleGlobal
->FvbInstance
56 RuntimeServiceGetNextVariableName (
57 IN OUT UINTN
*VariableNameSize
,
58 IN OUT CHAR16
*VariableName
,
59 IN OUT EFI_GUID
*VendorGuid
71 return GetNextVariableName (
75 &mVariableModuleGlobal
->VariableGlobal
[Physical
],
76 mVariableModuleGlobal
->FvbInstance
82 RuntimeServiceSetVariable (
83 IN CHAR16
*VariableName
,
84 IN EFI_GUID
*VendorGuid
,
105 &mVariableModuleGlobal
->VariableGlobal
[Physical
],
106 &mVariableModuleGlobal
->VolatileLastVariableOffset
,
107 &mVariableModuleGlobal
->NonVolatileLastVariableOffset
,
108 mVariableModuleGlobal
->FvbInstance
114 RuntimeServiceQueryVariableInfo (
115 IN UINT32 Attributes
,
116 OUT UINT64
*MaximumVariableStorageSize
,
117 OUT UINT64
*RemainingVariableStorageSize
,
118 OUT UINT64
*MaximumVariableSize
130 return QueryVariableInfo (
132 MaximumVariableStorageSize
,
133 RemainingVariableStorageSize
,
135 &mVariableModuleGlobal
->VariableGlobal
[Physical
],
136 mVariableModuleGlobal
->FvbInstance
142 VariableClassAddressChangeEvent (
158 (VOID
**) &mVariableModuleGlobal
->VariableGlobal
[Physical
].NonVolatileVariableBase
162 (VOID
**) &mVariableModuleGlobal
->VariableGlobal
[Physical
].VolatileVariableBase
164 EfiConvertPointer (0x0, (VOID
**) &mVariableModuleGlobal
);
169 VariableServiceInitialize (
170 IN EFI_HANDLE ImageHandle
,
171 IN EFI_SYSTEM_TABLE
*SystemTable
183 EFI_HANDLE NewHandle
;
186 Status
= VariableCommonInitialize (ImageHandle
, SystemTable
);
187 ASSERT_EFI_ERROR (Status
);
189 SystemTable
->RuntimeServices
->GetVariable
= RuntimeServiceGetVariable
;
190 SystemTable
->RuntimeServices
->GetNextVariableName
= RuntimeServiceGetNextVariableName
;
191 SystemTable
->RuntimeServices
->SetVariable
= RuntimeServiceSetVariable
;
192 SystemTable
->RuntimeServices
->QueryVariableInfo
= RuntimeServiceQueryVariableInfo
;
195 // Now install the Variable Runtime Architectural Protocol on a new handle
198 Status
= gBS
->InstallMultipleProtocolInterfaces (
200 &gEfiVariableArchProtocolGuid
,
202 &gEfiVariableWriteArchProtocolGuid
,
206 ASSERT_EFI_ERROR (Status
);