]> git.proxmox.com Git - mirror_edk2.git/blame - EdkModulePkg/Universal/Variable/RuntimeDxe/Ipf/InitVariable.c
Add a lock to protect the critical region in Service APIs for UEFI Runtime Variable...
[mirror_edk2.git] / EdkModulePkg / Universal / Variable / RuntimeDxe / Ipf / InitVariable.c
CommitLineData
878ddf1f 1/*++\r
2\r
6ed71dcc 3Copyright (c) 2006 - 2007, Intel Corporation \r
878ddf1f 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
878ddf1f 27\r
1cc8ee78 28STATIC\r
878ddf1f 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
6ed71dcc 63 &Global->VariableGlobal[VirtualMode],\r
878ddf1f 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
6ed71dcc 73 &Global->VariableGlobal[VirtualMode],\r
878ddf1f 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
6ed71dcc 85 &Global->VariableGlobal[VirtualMode],\r
878ddf1f 86 (UINTN *) &Global->VolatileLastVariableOffset,\r
87 (UINTN *) &Global->NonVolatileLastVariableOffset,\r
88 Global->FvbInstance\r
89 );\r
90 return ReturnVal;\r
91\r
045f4521 92#if (EFI_SPECIFICATION_VERSION >= 0x00020000)\r
93 case EsalQueryVariableInfo:\r
94 ReturnVal.Status = QueryVariableInfo (\r
95 (UINT32) Arg2,\r
96 (UINT64 *) Arg3,\r
97 (UINT64 *) Arg4,\r
98 (UINT64 *) Arg5,\r
6ed71dcc 99 &Global->VariableGlobal[VirtualMode],\r
045f4521 100 Global->FvbInstance\r
101 );\r
102 return ReturnVal;\r
103#endif\r
104\r
878ddf1f 105 default:\r
106 ReturnVal.Status = EFI_SAL_INVALID_ARGUMENT;\r
107 return ReturnVal;\r
108 }\r
109}\r
110\r
111\r
112VOID\r
113VariableClassAddressChangeEvent (\r
114 IN EFI_EVENT Event,\r
115 IN VOID *Context\r
116 )\r
117/*++\r
118\r
119Routine Description:\r
120\r
121Arguments:\r
122\r
123Returns:\r
124\r
125--*/\r
126{\r
127 CopyMem (\r
6ed71dcc 128 &mVariableModuleGlobal->VariableGlobal[Virtual],\r
129 &mVariableModuleGlobal->VariableGlobal[Physical],\r
878ddf1f 130 sizeof (VARIABLE_GLOBAL)\r
131 );\r
132\r
133 EfiConvertPointer (\r
134 0x0,\r
6ed71dcc 135 (VOID **) &mVariableModuleGlobal->VariableGlobal[Virtual].NonVolatileVariableBase\r
878ddf1f 136 );\r
137 EfiConvertPointer (\r
138 0x0,\r
6ed71dcc 139 (VOID **) &mVariableModuleGlobal->VariableGlobal[Virtual].VolatileVariableBase\r
878ddf1f 140 );\r
141 EfiConvertPointer (0x0, (VOID **) &mVariableModuleGlobal);\r
142}\r
143\r
144EFI_STATUS\r
145VariableServiceInitialize (\r
146 IN EFI_HANDLE ImageHandle,\r
147 IN EFI_SYSTEM_TABLE *SystemTable\r
148 )\r
149/*++\r
150\r
151Routine Description:\r
152\r
153Arguments:\r
154\r
155Returns:\r
156\r
157--*/\r
158{\r
159 EFI_STATUS Status;\r
160\r
161 Status = VariableCommonInitialize (ImageHandle, SystemTable);\r
162 ASSERT_EFI_ERROR (Status);\r
163\r
164 //\r
165 // Register All the Functions with Extended Sal.\r
166 //\r
167 RegisterEsalClass (\r
168 &gEfiExtendedSalVariableServicesProtocolGuid,\r
169 mVariableModuleGlobal,\r
170 EsalVariableCommonEntry,\r
171 EsalGetVariable,\r
172 EsalVariableCommonEntry,\r
173 EsalGetNextVariableName,\r
174 EsalVariableCommonEntry,\r
175 EsalSetVariable,\r
045f4521 176#if (EFI_SPECIFICATION_VERSION >= 0x00020000)\r
177 EsalVariableCommonEntry,\r
178 EsalQueryVariableInfo,\r
179#endif\r
878ddf1f 180 NULL\r
181 );\r
182\r
183 return EFI_SUCCESS;\r
184}\r