]> git.proxmox.com Git - mirror_edk2.git/blame - EdkModulePkg/Universal/EmuVariable/RuntimeDxe/Ipf/InitVariable.c
Initial import.
[mirror_edk2.git] / EdkModulePkg / Universal / EmuVariable / RuntimeDxe / Ipf / InitVariable.c
CommitLineData
878ddf1f 1/*++\r
2\r
3Copyright (c) 2006, 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 IpfVariable.c\r
15\r
16Abstract:\r
17\r
18Revision History\r
19\r
20--*/\r
21\r
22#include "Variable.h"\r
23\r
24//\r
25// Don't use module globals after the SetVirtualAddress map is signaled\r
26//\r
27extern ESAL_VARIABLE_GLOBAL *mVariableModuleGlobal;\r
28\r
29SAL_RETURN_REGS\r
30EsalVariableCommonEntry (\r
31 IN UINT64 FunctionId,\r
32 IN UINT64 Arg2,\r
33 IN UINT64 Arg3,\r
34 IN UINT64 Arg4,\r
35 IN UINT64 Arg5,\r
36 IN UINT64 Arg6,\r
37 IN UINT64 Arg7,\r
38 IN UINT64 Arg8,\r
39 IN SAL_EXTENDED_SAL_PROC ExtendedSalProc,\r
40 IN BOOLEAN VirtualMode,\r
41 IN ESAL_VARIABLE_GLOBAL *Global\r
42 )\r
43/*++\r
44\r
45Routine Description:\r
46\r
47Arguments:\r
48\r
49Returns:\r
50\r
51--*/\r
52{\r
53 SAL_RETURN_REGS ReturnVal;\r
54\r
55 switch (FunctionId) {\r
56 case EsalGetVariable:\r
57 ReturnVal.Status = GetVariable (\r
58 (CHAR16 *) Arg2,\r
59 (EFI_GUID *) Arg3,\r
60 (UINT32 *) Arg4,\r
61 (UINTN *) Arg5,\r
62 (VOID *) Arg6,\r
63 &Global->VariableBase[VirtualMode],\r
64 Global->FvbInstance\r
65 );\r
66 return ReturnVal;\r
67\r
68 case EsalGetNextVariableName:\r
69 ReturnVal.Status = GetNextVariableName (\r
70 (UINTN *) Arg2,\r
71 (CHAR16 *) Arg3,\r
72 (EFI_GUID *) Arg4,\r
73 &Global->VariableBase[VirtualMode],\r
74 Global->FvbInstance\r
75 );\r
76 return ReturnVal;\r
77\r
78 case EsalSetVariable:\r
79 ReturnVal.Status = SetVariable (\r
80 (CHAR16 *) Arg2,\r
81 (EFI_GUID *) Arg3,\r
82 (UINT32) Arg4,\r
83 (UINTN) Arg5,\r
84 (VOID *) Arg6,\r
85 &Global->VariableBase[VirtualMode],\r
86 (UINTN *) &Global->VolatileLastVariableOffset,\r
87 (UINTN *) &Global->NonVolatileLastVariableOffset,\r
88 Global->FvbInstance\r
89 );\r
90 return ReturnVal;\r
91\r
92 default:\r
93 ReturnVal.Status = EFI_SAL_INVALID_ARGUMENT;\r
94 return ReturnVal;\r
95 }\r
96}\r
97\r
98\r
99VOID\r
100VariableClassAddressChangeEvent (\r
101 IN EFI_EVENT Event,\r
102 IN VOID *Context\r
103 )\r
104/*++\r
105\r
106Routine Description:\r
107\r
108Arguments:\r
109\r
110Returns:\r
111\r
112--*/\r
113{\r
114 CopyMem (\r
115 &mVariableModuleGlobal->VariableBase[Virtual],\r
116 &mVariableModuleGlobal->VariableBase[Physical],\r
117 sizeof (VARIABLE_GLOBAL)\r
118 );\r
119\r
120 EfiConvertPointer (\r
121 0x0,\r
122 (VOID **) &mVariableModuleGlobal->VariableBase[Virtual].NonVolatileVariableBase\r
123 );\r
124 EfiConvertPointer (\r
125 0x0,\r
126 (VOID **) &mVariableModuleGlobal->VariableBase[Virtual].VolatileVariableBase\r
127 );\r
128 EfiConvertPointer (0x0, (VOID **) &mVariableModuleGlobal);\r
129}\r
130\r
131EFI_STATUS\r
132VariableServiceInitialize (\r
133 IN EFI_HANDLE ImageHandle,\r
134 IN EFI_SYSTEM_TABLE *SystemTable\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 EFI_STATUS Status;\r
147\r
148 Status = VariableCommonInitialize (ImageHandle, SystemTable);\r
149 ASSERT_EFI_ERROR (Status);\r
150\r
151 //\r
152 // Register All the Functions with Extended Sal.\r
153 //\r
154 RegisterEsalClass (\r
155 &gEfiExtendedSalVariableServicesProtocolGuid,\r
156 mVariableModuleGlobal,\r
157 EsalVariableCommonEntry,\r
158 EsalGetVariable,\r
159 EsalVariableCommonEntry,\r
160 EsalGetNextVariableName,\r
161 EsalVariableCommonEntry,\r
162 EsalSetVariable,\r
163 NULL\r
164 );\r
165\r
166 return EFI_SUCCESS;\r
167}\r