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