]> git.proxmox.com Git - mirror_edk2.git/blob - EdkCompatibilityPkg/Foundation/Library/RuntimeDxe/EfiRuntimeLib/Ebc/RuntimeLib.c
Maintainers.txt: Remove EdkCompatibilityPkg information
[mirror_edk2.git] / EdkCompatibilityPkg / Foundation / Library / RuntimeDxe / EfiRuntimeLib / Ebc / RuntimeLib.c
1 /*++
2
3 Copyright (c) 2007, Intel Corporation. All rights reserved.<BR>
4 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 RuntimeLib.c
15
16 Abstract:
17
18 Light weight lib to support Tiano drivers.
19
20 --*/
21
22 #include "Tiano.h"
23 #include "EfiRuntimeLib.h"
24 #include EFI_GUID_DEFINITION (StatusCodeCallerId)
25 #include EFI_ARCH_PROTOCOL_DEFINITION (StatusCode)
26
27 //
28 // Driver Lib Module Globals
29 //
30 static EFI_RUNTIME_SERVICES *mRT;
31 static EFI_EVENT mRuntimeNotifyEvent = NULL;
32 static BOOLEAN mRuntimeLibInitialized = FALSE;
33 static BOOLEAN mEfiGoneVirtual = FALSE;
34
35 //
36 // Runtime Global, but you should use the Lib functions
37 //
38 BOOLEAN mEfiAtRuntime = FALSE;
39
40 #if (EFI_SPECIFICATION_VERSION >= 0x00020000)
41 static EFI_STATUS_CODE_PROTOCOL *gStatusCode = NULL;
42 #endif
43
44 EFI_STATUS
45 EfiConvertPointer (
46 IN UINTN DebugDisposition,
47 IN OUT VOID *Address
48 )
49 /*++
50
51 Routine Description:
52
53 Determines the new virtual address that is to be used on subsequent memory accesses.
54
55 Arguments:
56
57 DebugDisposition - Supplies type information for the pointer being converted.
58 Address - A pointer to a pointer that is to be fixed to be the value needed
59 for the new virtual address mappings being applied.
60
61 Returns:
62
63 Status code
64
65 --*/
66 {
67 return mRT->ConvertPointer (DebugDisposition, Address);
68 }
69
70 VOID
71 EFIAPI
72 RuntimeDriverExitBootServices (
73 IN EFI_EVENT Event,
74 IN VOID *Context
75 )
76 /*++
77
78 Routine Description:
79
80 Set AtRuntime flag as TRUE after ExitBootServices
81
82 Arguments:
83
84 Event - The Event that is being processed
85
86 Context - Event Context
87
88 Returns:
89
90 None
91
92 --*/
93 {
94 mEfiAtRuntime = TRUE;
95 }
96
97 EFI_STATUS
98 EfiInitializeRuntimeDriverLib (
99 IN EFI_HANDLE ImageHandle,
100 IN EFI_SYSTEM_TABLE *SystemTable,
101 IN EFI_EVENT_NOTIFY GoVirtualChildEvent
102 )
103 /*++
104
105 Routine Description:
106
107 Intialize runtime Driver Lib if it has not yet been initialized.
108
109 Arguments:
110
111 ImageHandle - The firmware allocated handle for the EFI image.
112
113 SystemTable - A pointer to the EFI System Table.
114
115 GoVirtualChildEvent - Caller can register a virtual notification event.
116
117 Returns:
118
119 EFI_STATUS always returns EFI_SUCCESS except EFI_ALREADY_STARTED if already started.
120
121 --*/
122 {
123 EFI_STATUS Status;
124
125 if (mRuntimeLibInitialized) {
126 return EFI_ALREADY_STARTED;
127 }
128
129 mRuntimeLibInitialized = TRUE;
130
131 gST = SystemTable;
132 ASSERT (gST != NULL);
133
134 gBS = SystemTable->BootServices;
135 ASSERT (gBS != NULL);
136 mRT = SystemTable->RuntimeServices;
137 ASSERT (mRT != NULL);
138
139 Status = EfiLibGetSystemConfigurationTable (&gEfiDxeServicesTableGuid, (VOID **) &gDS);
140 ASSERT_EFI_ERROR (Status);
141
142 #if (EFI_SPECIFICATION_VERSION >= 0x00020000)
143 Status = gBS->LocateProtocol (&gEfiStatusCodeRuntimeProtocolGuid, NULL, (VOID **)&gStatusCode);
144 if (EFI_ERROR (Status)) {
145 gStatusCode = NULL;
146 }
147 #endif
148
149 //
150 // Register our ExitBootServices () notify function
151 //
152 Status = gBS->CreateEvent (
153 EFI_EVENT_SIGNAL_EXIT_BOOT_SERVICES,
154 EFI_TPL_NOTIFY,
155 RuntimeDriverExitBootServices,
156 NULL,
157 &mRuntimeNotifyEvent
158 );
159 ASSERT_EFI_ERROR (Status);
160
161 //
162 // To NOT register SetVirtualAddressMap () notify function,
163 // because we do not know how to trigger it without our EBC driver.
164 //
165
166 return EFI_SUCCESS;
167 }
168
169 EFI_STATUS
170 EfiShutdownRuntimeDriverLib (
171 VOID
172 )
173 /*++
174
175 Routine Description:
176
177 This routine will free some resources which have been allocated in
178 EfiInitializeRuntimeDriverLib(). If a runtime driver exits with an error,
179 it must call this routine to free the allocated resource before the exiting.
180
181 Arguments:
182
183 None
184
185 Returns:
186
187 EFI_SUCCESS - Shotdown the Runtime Driver Lib successfully
188 EFI_UNSUPPORTED - Runtime Driver lib was not initialized at all
189
190 --*/
191 {
192 EFI_STATUS Status;
193
194 if (!mRuntimeLibInitialized) {
195 //
196 // You must call EfiInitializeRuntimeDriverLib() first
197 //
198 return EFI_UNSUPPORTED;
199 }
200
201 mRuntimeLibInitialized = FALSE;
202
203 //
204 // Close our ExitBootServices () notify function
205 //
206 if (mRuntimeNotifyEvent != NULL) {
207 Status = gBS->CloseEvent (mRuntimeNotifyEvent);
208 ASSERT_EFI_ERROR (Status);
209 }
210
211 return EFI_SUCCESS;
212 }
213
214 BOOLEAN
215 EfiAtRuntime (
216 VOID
217 )
218 /*++
219
220 Routine Description:
221 Return TRUE if ExitBootServices () has been called
222
223 Arguments:
224 NONE
225
226 Returns:
227 TRUE - If ExitBootServices () has been called
228
229 --*/
230 {
231 return mEfiAtRuntime;
232 }
233
234 BOOLEAN
235 EfiGoneVirtual (
236 VOID
237 )
238 /*++
239
240 Routine Description:
241 Return TRUE if SetVirtualAddressMap () has been called
242
243 Arguments:
244 NONE
245
246 Returns:
247 TRUE - If SetVirtualAddressMap () has been called
248
249 --*/
250 {
251 return mEfiGoneVirtual;
252 }
253
254 EFI_STATUS
255 EfiReportStatusCode (
256 IN EFI_STATUS_CODE_TYPE CodeType,
257 IN EFI_STATUS_CODE_VALUE Value,
258 IN UINT32 Instance,
259 IN EFI_GUID * CallerId,
260 IN EFI_STATUS_CODE_DATA * Data OPTIONAL
261 )
262 /*++
263
264 Routine Description:
265
266 Status Code reporter
267
268 Arguments:
269
270 CodeType - Type of Status Code.
271
272 Value - Value to output for Status Code.
273
274 Instance - Instance Number of this status code.
275
276 CallerId - ID of the caller of this status code.
277
278 Data - Optional data associated with this status code.
279
280 Returns:
281
282 Status code
283
284 --*/
285 {
286 return EFI_UNSUPPORTED;
287 }
288 //
289 // Cache Flush Routine.
290 //
291 EFI_STATUS
292 EfiCpuFlushCache (
293 IN EFI_PHYSICAL_ADDRESS Start,
294 IN UINT64 Length
295 )
296 /*++
297
298 Routine Description:
299
300 Flush cache with specified range.
301
302 Arguments:
303
304 Start - Start address
305 Length - Length in bytes
306
307 Returns:
308
309 Status code
310
311 EFI_SUCCESS - success
312
313 --*/
314 {
315 return EFI_SUCCESS;
316 }