]> git.proxmox.com Git - mirror_edk2.git/blame - MdeModulePkg/Universal/Variable/EmuRuntimeDxe/InitVariable.c
remove the unused msa files in MdeModulePkg.
[mirror_edk2.git] / MdeModulePkg / Universal / Variable / EmuRuntimeDxe / InitVariable.c
CommitLineData
504214c4 1/** @file\r
8d3a5c82 2\r
504214c4
LG
3 Implment all four UEFI runtime variable services and \r
4 install variable architeture protocol.\r
5 \r
6Copyright (c) 2006 - 2008, Intel Corporation\r
8d3a5c82 7All rights reserved. This program and the accompanying materials\r
8are licensed and made available under the terms and conditions of the BSD License\r
9which accompanies this distribution. The full text of the license may be found at\r
10http://opensource.org/licenses/bsd-license.php\r
11\r
12THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
13WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
14\r
504214c4 15**/\r
8d3a5c82 16\r
17#include "Variable.h"\r
18\r
19//\r
20// Don't use module globals after the SetVirtualAddress map is signaled\r
21//\r
22extern ESAL_VARIABLE_GLOBAL *mVariableModuleGlobal;\r
23\r
a1634424 24EFI_EVENT mVirtualAddressChangeEvent = NULL;\r
25\r
8d3a5c82 26EFI_STATUS\r
27EFIAPI\r
28RuntimeServiceGetVariable (\r
29 IN CHAR16 *VariableName,\r
30 IN EFI_GUID * VendorGuid,\r
31 OUT UINT32 *Attributes OPTIONAL,\r
32 IN OUT UINTN *DataSize,\r
33 OUT VOID *Data\r
34 )\r
35/*++\r
36\r
37Routine Description:\r
38\r
39Arguments:\r
40\r
41Returns:\r
42\r
43--*/\r
44{\r
45 return GetVariable (\r
46 VariableName,\r
47 VendorGuid,\r
48 Attributes OPTIONAL,\r
49 DataSize,\r
50 Data,\r
51 &mVariableModuleGlobal->VariableGlobal[Physical],\r
52 mVariableModuleGlobal->FvbInstance\r
53 );\r
54}\r
55\r
56EFI_STATUS\r
57EFIAPI\r
58RuntimeServiceGetNextVariableName (\r
59 IN OUT UINTN *VariableNameSize,\r
60 IN OUT CHAR16 *VariableName,\r
61 IN OUT EFI_GUID *VendorGuid\r
62 )\r
63/*++\r
64\r
65Routine Description:\r
66\r
67Arguments:\r
68\r
69Returns:\r
70\r
71--*/\r
72{\r
73 return GetNextVariableName (\r
74 VariableNameSize,\r
75 VariableName,\r
76 VendorGuid,\r
77 &mVariableModuleGlobal->VariableGlobal[Physical],\r
78 mVariableModuleGlobal->FvbInstance\r
79 );\r
80}\r
81\r
82EFI_STATUS\r
83EFIAPI\r
84RuntimeServiceSetVariable (\r
85 IN CHAR16 *VariableName,\r
86 IN EFI_GUID *VendorGuid,\r
87 IN UINT32 Attributes,\r
88 IN UINTN DataSize,\r
89 IN VOID *Data\r
90 )\r
91/*++\r
92\r
93Routine Description:\r
94\r
95Arguments:\r
96\r
97Returns:\r
98\r
99--*/\r
100{\r
101 return SetVariable (\r
102 VariableName,\r
103 VendorGuid,\r
104 Attributes,\r
105 DataSize,\r
106 Data,\r
107 &mVariableModuleGlobal->VariableGlobal[Physical],\r
108 &mVariableModuleGlobal->VolatileLastVariableOffset,\r
109 &mVariableModuleGlobal->NonVolatileLastVariableOffset,\r
110 mVariableModuleGlobal->FvbInstance\r
111 );\r
112}\r
113\r
114EFI_STATUS\r
115EFIAPI\r
116RuntimeServiceQueryVariableInfo (\r
117 IN UINT32 Attributes,\r
118 OUT UINT64 *MaximumVariableStorageSize,\r
119 OUT UINT64 *RemainingVariableStorageSize,\r
120 OUT UINT64 *MaximumVariableSize\r
121 )\r
122/*++\r
123\r
124Routine Description:\r
125\r
126Arguments:\r
127\r
128Returns:\r
129\r
130--*/\r
131{\r
132 return QueryVariableInfo (\r
133 Attributes,\r
134 MaximumVariableStorageSize,\r
135 RemainingVariableStorageSize,\r
136 MaximumVariableSize,\r
137 &mVariableModuleGlobal->VariableGlobal[Physical],\r
138 mVariableModuleGlobal->FvbInstance\r
139 );\r
140}\r
141\r
142VOID\r
143EFIAPI\r
144VariableClassAddressChangeEvent (\r
145 IN EFI_EVENT Event,\r
146 IN VOID *Context\r
147 )\r
148/*++\r
149\r
150Routine Description:\r
151\r
152Arguments:\r
153\r
154Returns:\r
155\r
156--*/\r
157{\r
158 EfiConvertPointer (\r
159 0x0,\r
160 (VOID **) &mVariableModuleGlobal->VariableGlobal[Physical].NonVolatileVariableBase\r
161 );\r
162 EfiConvertPointer (\r
163 0x0,\r
164 (VOID **) &mVariableModuleGlobal->VariableGlobal[Physical].VolatileVariableBase\r
165 );\r
166 EfiConvertPointer (0x0, (VOID **) &mVariableModuleGlobal);\r
167}\r
168\r
169EFI_STATUS\r
170EFIAPI\r
171VariableServiceInitialize (\r
172 IN EFI_HANDLE ImageHandle,\r
173 IN EFI_SYSTEM_TABLE *SystemTable\r
174 )\r
175/*++\r
176\r
177Routine Description:\r
178\r
179Arguments:\r
180\r
181Returns:\r
182\r
183--*/\r
184{\r
185 EFI_HANDLE NewHandle;\r
186 EFI_STATUS Status;\r
187\r
188 Status = VariableCommonInitialize (ImageHandle, SystemTable);\r
189 ASSERT_EFI_ERROR (Status);\r
190\r
191 SystemTable->RuntimeServices->GetVariable = RuntimeServiceGetVariable;\r
192 SystemTable->RuntimeServices->GetNextVariableName = RuntimeServiceGetNextVariableName;\r
193 SystemTable->RuntimeServices->SetVariable = RuntimeServiceSetVariable;\r
194 SystemTable->RuntimeServices->QueryVariableInfo = RuntimeServiceQueryVariableInfo;\r
195\r
196 //\r
197 // Now install the Variable Runtime Architectural Protocol on a new handle\r
198 //\r
199 NewHandle = NULL;\r
200 Status = gBS->InstallMultipleProtocolInterfaces (\r
201 &NewHandle,\r
202 &gEfiVariableArchProtocolGuid,\r
203 NULL,\r
204 &gEfiVariableWriteArchProtocolGuid,\r
205 NULL,\r
206 NULL\r
207 );\r
208 ASSERT_EFI_ERROR (Status);\r
209\r
a1634424 210 Status = gBS->CreateEvent (\r
211 EVT_SIGNAL_VIRTUAL_ADDRESS_CHANGE,\r
212 TPL_NOTIFY,\r
213 VariableClassAddressChangeEvent,\r
214 NULL,\r
215 &mVirtualAddressChangeEvent\r
216 );\r
217 ASSERT_EFI_ERROR (Status);\r
218\r
8d3a5c82 219 return EFI_SUCCESS;\r
220}\r