]> git.proxmox.com Git - mirror_edk2.git/blame - MdeModulePkg/Universal/VariableRuntimeDxe/InitVariable.c
Add IdeBus, DataHub, DataHubStdErr to Nt32 build
[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
22//\r
23// Include common header file for this module.\r
24//\r
25#include "CommonHeader.h"\r
26\r
27#include "Variable.h"\r
28\r
29//\r
30// Event for Exit Boot Services Callback\r
31//\r
32STATIC EFI_EVENT mExitBootServicesEvent = NULL;\r
33\r
34\r
35//\r
36// Don't use module globals after the SetVirtualAddress map is signaled\r
37//\r
38extern ESAL_VARIABLE_GLOBAL *mVariableModuleGlobal;\r
39\r
40EFI_STATUS\r
41EFIAPI\r
42RuntimeServiceGetVariable (\r
43 IN CHAR16 *VariableName,\r
44 IN EFI_GUID * VendorGuid,\r
45 OUT UINT32 *Attributes OPTIONAL,\r
46 IN OUT UINTN *DataSize,\r
47 OUT VOID *Data\r
48 )\r
49/*++\r
50\r
51Routine Description:\r
52\r
53Arguments:\r
54\r
55Returns:\r
56\r
57--*/\r
58{\r
59 return GetVariable (\r
60 VariableName,\r
61 VendorGuid,\r
62 Attributes OPTIONAL,\r
63 DataSize,\r
64 Data,\r
65 &mVariableModuleGlobal->VariableGlobal[Physical],\r
66 mVariableModuleGlobal->FvbInstance\r
67 );\r
68}\r
69\r
70EFI_STATUS\r
71EFIAPI\r
72RuntimeServiceGetNextVariableName (\r
73 IN OUT UINTN *VariableNameSize,\r
74 IN OUT CHAR16 *VariableName,\r
75 IN OUT EFI_GUID *VendorGuid\r
76 )\r
77/*++\r
78\r
79Routine Description:\r
80\r
81Arguments:\r
82\r
83Returns:\r
84\r
85--*/\r
86{\r
87 return GetNextVariableName (\r
88 VariableNameSize,\r
89 VariableName,\r
90 VendorGuid,\r
91 &mVariableModuleGlobal->VariableGlobal[Physical],\r
92 mVariableModuleGlobal->FvbInstance\r
93 );\r
94}\r
95\r
96EFI_STATUS\r
97EFIAPI\r
98RuntimeServiceSetVariable (\r
99 IN CHAR16 *VariableName,\r
100 IN EFI_GUID *VendorGuid,\r
101 IN UINT32 Attributes,\r
102 IN UINTN DataSize,\r
103 IN VOID *Data\r
104 )\r
105/*++\r
106\r
107Routine Description:\r
108\r
109Arguments:\r
110\r
111Returns:\r
112\r
113--*/\r
114{\r
115 return SetVariable (\r
116 VariableName,\r
117 VendorGuid,\r
118 Attributes,\r
119 DataSize,\r
120 Data,\r
121 &mVariableModuleGlobal->VariableGlobal[Physical],\r
122 &mVariableModuleGlobal->VolatileLastVariableOffset,\r
123 &mVariableModuleGlobal->NonVolatileLastVariableOffset,\r
124 mVariableModuleGlobal->FvbInstance\r
125 );\r
126}\r
127\r
128EFI_STATUS\r
129EFIAPI\r
130RuntimeServiceQueryVariableInfo (\r
131 IN UINT32 Attributes,\r
132 OUT UINT64 *MaximumVariableStorageSize,\r
133 OUT UINT64 *RemainingVariableStorageSize,\r
134 OUT UINT64 *MaximumVariableSize\r
135 )\r
136/*++\r
137\r
138Routine Description:\r
139\r
140Arguments:\r
141\r
142Returns:\r
143\r
144--*/\r
145{\r
146 return QueryVariableInfo (\r
147 Attributes,\r
148 MaximumVariableStorageSize,\r
149 RemainingVariableStorageSize,\r
150 MaximumVariableSize,\r
151 &mVariableModuleGlobal->VariableGlobal[Physical],\r
152 mVariableModuleGlobal->FvbInstance\r
153 );\r
154}\r
155\r
156VOID\r
157EFIAPI\r
158VariableClassAddressChangeEvent (\r
159 IN EFI_EVENT Event,\r
160 IN VOID *Context\r
161 )\r
162/*++\r
163\r
164Routine Description:\r
165\r
166Arguments:\r
167\r
168Returns:\r
169\r
170--*/\r
171{\r
172 EfiConvertPointer (\r
173 0x0,\r
174 (VOID **) &mVariableModuleGlobal->VariableGlobal[Physical].NonVolatileVariableBase\r
175 );\r
176 EfiConvertPointer (\r
177 0x0,\r
178 (VOID **) &mVariableModuleGlobal->VariableGlobal[Physical].VolatileVariableBase\r
179 );\r
180 EfiConvertPointer (0x0, (VOID **) &mVariableModuleGlobal);\r
181}\r
182\r
183EFI_STATUS\r
184EFIAPI\r
185VariableServiceInitialize (\r
186 IN EFI_HANDLE ImageHandle,\r
187 IN EFI_SYSTEM_TABLE *SystemTable\r
188 )\r
189/*++\r
190\r
191Routine Description:\r
192\r
193Arguments:\r
194\r
195Returns:\r
196\r
197--*/\r
198{\r
199 EFI_HANDLE NewHandle;\r
200 EFI_STATUS Status;\r
201\r
202 Status = VariableCommonInitialize (ImageHandle, SystemTable);\r
203 ASSERT_EFI_ERROR (Status);\r
204\r
205 SystemTable->RuntimeServices->GetVariable = RuntimeServiceGetVariable;\r
206 SystemTable->RuntimeServices->GetNextVariableName = RuntimeServiceGetNextVariableName;\r
207 SystemTable->RuntimeServices->SetVariable = RuntimeServiceSetVariable;\r
208 SystemTable->RuntimeServices->QueryVariableInfo = RuntimeServiceQueryVariableInfo;\r
209\r
210 //\r
211 // Now install the Variable Runtime Architectural Protocol on a new handle\r
212 //\r
213 NewHandle = NULL;\r
214 Status = gBS->InstallMultipleProtocolInterfaces (\r
215 &NewHandle,\r
216 &gEfiVariableArchProtocolGuid,\r
217 NULL,\r
218 &gEfiVariableWriteArchProtocolGuid,\r
219 NULL,\r
220 NULL\r
221 );\r
222 ASSERT_EFI_ERROR (Status);\r
223\r
224 Status = gBS->CreateEvent (\r
225 EVT_SIGNAL_EXIT_BOOT_SERVICES,\r
226 TPL_NOTIFY,\r
227 VariableClassAddressChangeEvent,\r
228 NULL,\r
229 &mExitBootServicesEvent\r
230 );\r
231 ASSERT_EFI_ERROR (Status);\r
232\r
233 return EFI_SUCCESS;\r
234}\r