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