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