]> git.proxmox.com Git - mirror_edk2.git/blame - EdkCompatibilityPkg/Foundation/Library/EdkIIGlueLib/EntryPoints/EdkIIGlueDxeDriverEntryPoint.c
1) Sync EdkCompatibilityPkg with EDK 1.04. The changes includes:
[mirror_edk2.git] / EdkCompatibilityPkg / Foundation / Library / EdkIIGlueLib / EntryPoints / EdkIIGlueDxeDriverEntryPoint.c
CommitLineData
3eb9473e 1/*++\r
2\r
3Copyright (c) 2004 - 2007, 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
12\r
13Module Name:\r
14\r
15 EdkIIGlueDxeDriverEntryPoint.c\r
16 \r
17Abstract: \r
18\r
19 DXE Driver entry point template file\r
20\r
21--*/\r
22\r
23#include "EdkIIGlueDxe.h"\r
24#include "Common/EdkIIGlueDependencies.h"\r
25\r
26STATIC EFI_EVENT _mDriverExitBootServicesNotifyEvent;\r
27\r
28//\r
29// Driver Model related definitions.\r
30// LIMITATION: only support one instance of Driver Model protocols per driver.\r
31// In case where multiple Driver Model protocols need to be installed in a single driver,\r
32// manually edit this file and compile/link the modified file with the driver.\r
33//\r
34\r
35#ifdef __EDKII_GLUE_DRIVER_BINDING_PROTOCOL_INSTANCE__\r
36extern EFI_DRIVER_BINDING_PROTOCOL __EDKII_GLUE_DRIVER_BINDING_PROTOCOL_INSTANCE__;\r
37#endif\r
38\r
39#ifdef __EDKII_GLUE_COMPONENT_NAME_PROTOCOL_INSTANCE__\r
40#if (EFI_SPECIFICATION_VERSION >= 0x00020000)\r
41extern EFI_COMPONENT_NAME2_PROTOCOL __EDKII_GLUE_COMPONENT_NAME_PROTOCOL_INSTANCE__;\r
42#else\r
43extern EFI_COMPONENT_NAME_PROTOCOL __EDKII_GLUE_COMPONENT_NAME_PROTOCOL_INSTANCE__;\r
44#endif\r
45#endif\r
46\r
47#ifdef __EDKII_GLUE_DRIVER_CONFIGURATION_PROTOCOL_INSTANCE__\r
48extern EFI_DRIVER_CONFIGURATION_PROTOCOL __EDKII_GLUE_DRIVER_CONFIGURATION_PROTOCOL_INSTANCE__;\r
49#endif\r
50\r
51#ifdef __EDKII_GLUE_DRIVER_DIAGNOSTICS_PROTOCOL_INSTANCE__\r
52extern EFI_DRIVER_DIAGNOSTICS_PROTOCOL __EDKII_GLUE_DRIVER_DIAGNOSTICS_PROTOCOL_INSTANCE__;\r
53#endif\r
54\r
55GLOBAL_REMOVE_IF_UNREFERENCED const EFI_DRIVER_MODEL_PROTOCOL_LIST _gDriverModelProtocolList[] = {\r
56 {\r
57#ifdef __EDKII_GLUE_DRIVER_BINDING_PROTOCOL_INSTANCE__\r
58 &__EDKII_GLUE_DRIVER_BINDING_PROTOCOL_INSTANCE__,\r
59#else\r
60 NULL,\r
61#endif\r
62\r
63#ifdef __EDKII_GLUE_COMPONENT_NAME_PROTOCOL_INSTANCE__\r
64 &__EDKII_GLUE_COMPONENT_NAME_PROTOCOL_INSTANCE__,\r
65#else\r
66 NULL,\r
67#endif\r
68\r
69#ifdef __EDKII_GLUE_DRIVER_CONFIGURATION_PROTOCOL_INSTANCE__\r
70 &__EDKII_GLUE_DRIVER_CONFIGURATION_PROTOCOL_INSTANCE__,\r
71#else\r
72 NULL,\r
73#endif\r
74\r
75#ifdef __EDKII_GLUE_DRIVER_DIAGNOSTICS_PROTOCOL_INSTANCE__\r
76 &__EDKII_GLUE_DRIVER_DIAGNOSTICS_PROTOCOL_INSTANCE__,\r
77#else\r
78 NULL,\r
79#endif\r
80 }\r
81};\r
82\r
83//\r
84// NOTE: Limitation:\r
85// Only one handler for SetVirtualAddressMap Event and ExitBootServices Event each\r
86//\r
c7f33ca4 87\r
88/*\r
89 * This is the WRONG macro and it's kept only for backward compatibility.\r
90 */\r
91#ifdef __EDKII_GLUE_SET_VIRTUAL_ADDRESS_MAP_EVENT__HANDLER__\r
92VOID\r
93EFIAPI\r
94__EDKII_GLUE_SET_VIRTUAL_ADDRESS_MAP_EVENT__HANDLER__ (\r
95 IN EFI_EVENT Event,\r
96 IN VOID *Context\r
97 );\r
98#endif\r
99\r
100/*\r
101 * This is the CORRECT macro users should use.\r
102 */ \r
3eb9473e 103#ifdef __EDKII_GLUE_SET_VIRTUAL_ADDRESS_MAP_EVENT_HANDLER__\r
104VOID\r
c7f33ca4 105EFIAPI\r
3eb9473e 106__EDKII_GLUE_SET_VIRTUAL_ADDRESS_MAP_EVENT_HANDLER__ (\r
107 IN EFI_EVENT Event,\r
108 IN VOID *Context\r
109 );\r
110#endif\r
111\r
c7f33ca4 112/*\r
113 * Both __EDKII_GLUE_SET_VIRTUAL_ADDRESS_MAP_EVENT__HANDLER__ and \r
114 * __EDKII_GLUE_SET_VIRTUAL_ADDRESS_MAP_EVENT_HANDLER__ are kept here although\r
115 * the former is a WRONG macro. It's kept only for backward compatibility.\r
116 * For a single module, it's not likely that both macros are defined.\r
117 */\r
3eb9473e 118GLOBAL_REMOVE_IF_UNREFERENCED const EFI_EVENT_NOTIFY _gDriverSetVirtualAddressMapEvent[] = {\r
c7f33ca4 119#ifdef __EDKII_GLUE_SET_VIRTUAL_ADDRESS_MAP_EVENT__HANDLER__\r
120 __EDKII_GLUE_SET_VIRTUAL_ADDRESS_MAP_EVENT__HANDLER__,\r
121#endif\r
122\r
3eb9473e 123#ifdef __EDKII_GLUE_SET_VIRTUAL_ADDRESS_MAP_EVENT_HANDLER__\r
124 __EDKII_GLUE_SET_VIRTUAL_ADDRESS_MAP_EVENT_HANDLER__,\r
125#endif\r
c7f33ca4 126\r
3eb9473e 127 NULL\r
128};\r
129\r
c7f33ca4 130/*\r
131 * This is the WRONG macro and it's kept only for backward compatibility.\r
132 */\r
133#ifdef __EDKII_GLUE_EXTI_BOOT_SERVICES_EVENT__HANDLER__\r
134VOID\r
135__EDKII_GLUE_EXTI_BOOT_SERVICES_EVENT__HANDLER__ (\r
136 IN EFI_EVENT Event,\r
137 IN VOID *Context\r
138 );\r
139#endif\r
140\r
141/*\r
142 * This is the CORRECT macro users should use.\r
143 */\r
3eb9473e 144#ifdef __EDKII_GLUE_EXIT_BOOT_SERVICES_EVENT_HANDLER__\r
145VOID\r
146__EDKII_GLUE_EXIT_BOOT_SERVICES_EVENT_HANDLER__ (\r
147 IN EFI_EVENT Event,\r
148 IN VOID *Context\r
149 );\r
150#endif\r
151\r
152/**\r
153 Set AtRuntime flag as TRUE after ExitBootServices\r
154 \r
155 @param[in] Event The Event that is being processed\r
156 @param[in] Context Event Context\r
157**/\r
158VOID\r
159EFIAPI\r
160RuntimeDriverExitBootServices (\r
161 IN EFI_EVENT Event,\r
162 IN VOID *Context\r
163 );\r
164\r
c7f33ca4 165\r
166/*\r
167 * Both __EDKII_GLUE_EXTI_BOOT_SERVICES_EVENT__HANDLER__ and \r
168 * __EDKII_GLUE_EXIT_BOOT_SERVICES_EVENT_HANDLER__ are kept here although\r
169 * the former is a WRONG macro. It's kept only for backward compatibility.\r
170 * For a single module, it's not likely that both macros are defined.\r
171 */\r
3eb9473e 172GLOBAL_REMOVE_IF_UNREFERENCED const EFI_EVENT_NOTIFY _gDriverExitBootServicesEvent[] = {\r
173#ifdef __EDKII_GLUE_EDK_DXE_RUNTIME_DRIVER_LIB__ \r
174 //\r
175 // only Runtime drivers need to link EdkDxeRuntimeDriverLib\r
176 //\r
177 RuntimeDriverExitBootServices,\r
178#endif\r
c7f33ca4 179 \r
180#ifdef __EDKII_GLUE_EXTI_BOOT_SERVICES_EVENT__HANDLER__\r
181 __EDKII_GLUE_EXTI_BOOT_SERVICES_EVENT__HANDLER__,\r
182#endif\r
183\r
3eb9473e 184#ifdef __EDKII_GLUE_EXIT_BOOT_SERVICES_EVENT_HANDLER__\r
185 __EDKII_GLUE_EXIT_BOOT_SERVICES_EVENT_HANDLER__,\r
186#endif\r
c7f33ca4 187\r
3eb9473e 188 NULL\r
189};\r
190\r
191\r
192//\r
193// Module Unload Handler\r
194//\r
195\r
196#ifdef __EDKII_GLUE_MODULE_UNLOAD_HANDLER__\r
197EFI_STATUS\r
198EFIAPI\r
199__EDKII_GLUE_MODULE_UNLOAD_HANDLER__ (\r
200 EFI_HANDLE ImageHandle\r
201 );\r
202#endif\r
203\r
204EFI_STATUS\r
205EFIAPI\r
206ProcessModuleUnloadList (\r
207 EFI_HANDLE ImageHandle\r
208 )\r
209{\r
210#ifdef __EDKII_GLUE_MODULE_UNLOAD_HANDLER__\r
211 return (__EDKII_GLUE_MODULE_UNLOAD_HANDLER__ (ImageHandle));\r
212#else\r
213 return EFI_SUCCESS;\r
214#endif\r
215}\r
216\r
217#ifdef __EDKII_GLUE_EFI_CALLER_ID_GUID__\r
218 GLOBAL_REMOVE_IF_UNREFERENCED EFI_GUID gEfiCallerIdGuid = __EDKII_GLUE_EFI_CALLER_ID_GUID__;\r
219#endif\r
220\r
221//\r
222// Library constructors\r
223//\r
224VOID\r
c7f33ca4 225EFIAPI\r
3eb9473e 226ProcessLibraryConstructorList (\r
227 IN EFI_HANDLE ImageHandle,\r
228 IN EFI_SYSTEM_TABLE *SystemTable\r
229 )\r
230{\r
231//\r
232// Declare "Status" if any of the following libraries are used\r
233//\r
234#if defined(__EDKII_GLUE_DXE_HOB_LIB__) \\r
235 || defined(__EDKII_GLUE_UEFI_BOOT_SERVICES_TABLE_LIB__) \\r
236 || defined(__EDKII_GLUE_UEFI_DRIVER_MODEL_LIB__) \\r
237 || defined(__EDKII_GLUE_EDK_DXE_RUNTIME_DRIVER_LIB__) \\r
238 || defined(__EDKII_GLUE_DXE_SERVICES_TABLE_LIB__) \\r
239 || defined(__EDKII_GLUE_DXE_SMBUS_LIB__) \\r
240 || defined(__EDKII_GLUE_UEFI_RUNTIME_SERVICES_TABLE_LIB__) \\r
241 || defined(__EDKII_GLUE_EDK_DXE_SAL_LIB__) \\r
242 || defined(__EDKII_GLUE_DXE_IO_LIB_CPU_IO__)\r
243 EFI_STATUS Status;\r
244#endif\r
245\r
246//\r
247// EdkII Glue Library Constructors: \r
248// NOTE: the constructors must be called according to dependency order\r
249//\r
250// UefiBootServicesTableLib UefiBootServicesTableLibConstructor()\r
251// DxeIoLibCpuIo IoLibConstructor()\r
252// DxeSalLib DxeSalLibConstructor(), IPF only\r
253// EdkDxeRuntimeDriverLib RuntimeDriverLibConstruct()\r
254// DxeHobLib HobLibConstructor()\r
255// UefiDriverModelLib UefiDriverModelLibConstructor()\r
256// DxeSmbusLib SmbusLibConstructor() \r
257// DxeServicesTableLib DxeServicesTableLibConstructor()\r
258// UefiRuntimeServicesTableLib UefiRuntimeServicesTableLibConstructor() \r
259// \r
260\r
261#ifdef __EDKII_GLUE_UEFI_BOOT_SERVICES_TABLE_LIB__\r
262 Status = UefiBootServicesTableLibConstructor (ImageHandle, SystemTable);\r
263 ASSERT_EFI_ERROR (Status);\r
264#endif\r
265\r
266#ifdef __EDKII_GLUE_DXE_IO_LIB_CPU_IO__\r
267 Status = IoLibConstructor (ImageHandle, SystemTable);\r
268 ASSERT_EFI_ERROR (Status);\r
269#endif\r
270\r
271#ifdef __EDKII_GLUE_EDK_DXE_SAL_LIB__\r
272 Status = DxeSalLibConstructor(ImageHandle, SystemTable);\r
273 ASSERT_EFI_ERROR (Status);\r
274#endif\r
275\r
276#ifdef __EDKII_GLUE_EDK_DXE_RUNTIME_DRIVER_LIB__\r
277 Status = RuntimeDriverLibConstruct (ImageHandle, SystemTable);\r
278 ASSERT_EFI_ERROR (Status);\r
279#endif\r
280\r
281#ifdef __EDKII_GLUE_UEFI_RUNTIME_SERVICES_TABLE_LIB__\r
282 Status = UefiRuntimeServicesTableLibConstructor (ImageHandle, SystemTable);\r
283 ASSERT_EFI_ERROR (Status);\r
284#endif\r
285\r
286#ifdef __EDKII_GLUE_UEFI_DRIVER_MODEL_LIB__\r
287 Status = UefiDriverModelLibConstructor (ImageHandle, SystemTable);\r
288 ASSERT_EFI_ERROR (Status);\r
289#endif\r
290\r
291#ifdef __EDKII_GLUE_DXE_SERVICES_TABLE_LIB__\r
292 Status = DxeServicesTableLibConstructor (ImageHandle, SystemTable);\r
293 ASSERT_EFI_ERROR (Status); \r
294#endif\r
295\r
296#ifdef __EDKII_GLUE_DXE_HOB_LIB__\r
297 Status = HobLibConstructor (ImageHandle, SystemTable);\r
298 ASSERT_EFI_ERROR (Status);\r
299#endif\r
300\r
301#ifdef __EDKII_GLUE_DXE_SMBUS_LIB__\r
302 Status = SmbusLibConstructor (ImageHandle, SystemTable);\r
303 ASSERT_EFI_ERROR (Status);\r
304#endif\r
305\r
306}\r
307\r
308//\r
309// Library Destructors\r
310//\r
311VOID\r
c7f33ca4 312EFIAPI\r
3eb9473e 313ProcessLibraryDestructorList (\r
314 IN EFI_HANDLE ImageHandle,\r
315 IN EFI_SYSTEM_TABLE *SystemTable\r
316 )\r
317{\r
318#if defined (__EDKII_GLUE_UEFI_DRIVER_MODEL_LIB__) || defined (__EDKII_GLUE_EDK_DXE_RUNTIME_DRIVER_LIB__)\r
319 EFI_STATUS Status; \r
320#endif\r
321\r
322//\r
323// NOTE: the destructors must be called according to dependency order\r
324//\r
325#ifdef __EDKII_GLUE_UEFI_DRIVER_MODEL_LIB__\r
326 Status = UefiDriverModelLibDestructor (ImageHandle, SystemTable);\r
327 ASSERT_EFI_ERROR (Status);\r
328#endif\r
329\r
330#ifdef __EDKII_GLUE_EDK_DXE_RUNTIME_DRIVER_LIB__\r
331 Status = RuntimeDriverLibDeconstruct (ImageHandle, SystemTable);\r
332 ASSERT_EFI_ERROR (Status);\r
333#endif\r
334}\r
335\r
336\r
337/**\r
338 Unload function that is registered in the LoadImage protocol. It un-installs\r
339 protocols produced and deallocates pool used by the driver. Called by the core\r
340 when unloading the driver.\r
341\r
342 @param ImageHandle\r
343\r
344 @retval EFI_SUCCESS\r
345\r
346**/\r
347EFI_STATUS\r
348EFIAPI\r
349_DriverUnloadHandler (\r
350 EFI_HANDLE ImageHandle\r
351 )\r
352{\r
353 EFI_STATUS Status;\r
354\r
355 //\r
356 // If an UnloadImage() handler is specified, then call it\r
357 //\r
358 Status = ProcessModuleUnloadList (ImageHandle);\r
359\r
360 //\r
361 // If the driver specific unload handler does not return an error, then call all of the\r
362 // library destructors. If the unload handler returned an error, then the driver can not be\r
363 // unloaded, and the library destructors should not be called\r
364 //\r
365 if (!EFI_ERROR (Status)) {\r
366 //\r
367 // Close our ExitBootServices () notify function\r
368 //\r
c7f33ca4 369\r
370#if __EDKII_GLUE_HAVE_DRIVER_EXIT_BOOT_SERVICES_EVENT__\r
3eb9473e 371 if (_gDriverExitBootServicesEvent[0] != NULL) {\r
372 ASSERT (gBS != NULL);\r
373 Status = gBS->CloseEvent (_mDriverExitBootServicesNotifyEvent);\r
374 ASSERT_EFI_ERROR (Status);\r
375 }\r
c7f33ca4 376#endif\r
3eb9473e 377\r
3eb9473e 378 ProcessLibraryDestructorList (ImageHandle, gST);\r
379 }\r
380\r
381 //\r
382 // Return the status from the driver specific unload handler\r
383 //\r
384 return Status;\r
385}\r
386\r
387VOID\r
388EFIAPI\r
389_DriverExitBootServices (\r
390 IN EFI_EVENT Event,\r
391 IN VOID *Context\r
392 )\r
393/*++\r
394\r
395Routine Description:\r
396\r
397 Set AtRuntime flag as TRUE after ExitBootServices\r
398\r
399Arguments:\r
400\r
401 Event - The Event that is being processed\r
402 \r
403 Context - Event Context\r
404\r
405Returns: \r
406\r
407 None\r
408\r
409--*/\r
410{\r
c7f33ca4 411#if __EDKII_GLUE_HAVE_DRIVER_EXIT_BOOT_SERVICES_EVENT__\r
3eb9473e 412 EFI_EVENT_NOTIFY ChildNotifyEventHandler;\r
413 UINTN Index;\r
414\r
415 for (Index = 0; _gDriverExitBootServicesEvent[Index] != NULL; Index++) {\r
416 ChildNotifyEventHandler = _gDriverExitBootServicesEvent[Index];\r
417 ChildNotifyEventHandler (Event, NULL);\r
418 }\r
c7f33ca4 419#endif \r
3eb9473e 420}\r
421\r
422EFI_DRIVER_ENTRY_POINT (_ModuleEntryPoint);\r
423\r
424//\r
425// Module Entry Point\r
426//\r
427#ifdef __EDKII_GLUE_MODULE_ENTRY_POINT__\r
428EFI_STATUS\r
429EFIAPI\r
430__EDKII_GLUE_MODULE_ENTRY_POINT__ (\r
431 EFI_HANDLE ImageHandle,\r
432 EFI_SYSTEM_TABLE *SystemTable\r
433 );\r
434#endif\r
435\r
436/**\r
437 Enrty point to DXE Driver.\r
438\r
439 @param ImageHandle ImageHandle of the loaded driver.\r
440 @param SystemTable Pointer to the EFI System Table.\r
441\r
442 @retval EFI_SUCCESS One or more of the drivers returned a success code.\r
443 @retval !EFI_SUCESS The return status from the last driver entry point in the list.\r
444\r
445**/\r
446EFI_STATUS\r
447EFIAPI\r
448_ModuleEntryPoint (\r
449 IN EFI_HANDLE ImageHandle,\r
450 IN EFI_SYSTEM_TABLE *SystemTable\r
451 )\r
452{\r
453 EFI_STATUS Status;\r
3eb9473e 454\r
455// if (_gUefiDriverRevision != 0) {\r
456// //\r
457// // Make sure that the EFI/UEFI spec revision of the platform is >= EFI/UEFI spec revision of the driver\r
458// //\r
459// if (SystemTable->Hdr.Revision < _gUefiDriverRevision) {\r
460// return EFI_INCOMPATIBLE_VERSION;\r
461// }\r
462// }\r
463\r
464// DEBUG ((EFI_D_ERROR, "EdkII Glue Driver Entry - 0\n"));\r
465\r
466 //\r
467 // Call constructor for all libraries\r
468 //\r
469 ProcessLibraryConstructorList (ImageHandle, SystemTable);\r
470\r
471 //\r
472 // Register our ExitBootServices () notify function\r
473 //\r
c7f33ca4 474#if __EDKII_GLUE_HAVE_DRIVER_EXIT_BOOT_SERVICES_EVENT__\r
3eb9473e 475 if (_gDriverExitBootServicesEvent[0] != NULL) {\r
476 Status = SystemTable->BootServices->CreateEvent (\r
477 EFI_EVENT_SIGNAL_EXIT_BOOT_SERVICES,\r
478 EFI_TPL_NOTIFY,\r
479 _DriverExitBootServices,\r
480 NULL,\r
481 &_mDriverExitBootServicesNotifyEvent\r
482 );\r
483\r
484 ASSERT_EFI_ERROR (Status);\r
485 }\r
c7f33ca4 486#endif\r
3eb9473e 487\r
488 //\r
489 // Install unload handler...\r
490 //\r
c7f33ca4 491 //\r
492 // Add conditional macro to save size. The 4 macros check against\r
493 // potential functions which may be invoked, if there is no function\r
494 // to be called, we don't register Unload callback.\r
495 //\r
496#if ( defined(__EDKII_GLUE_MODULE_UNLOAD_HANDLER__) \\r
497 || defined(__EDKII_GLUE_UEFI_DRIVER_MODEL_LIB__) \\r
498 || defined(__EDKII_GLUE_EDK_DXE_RUNTIME_DRIVER_LIB__) ) \\r
499 || __EDKII_GLUE_HAVE_DRIVER_EXIT_BOOT_SERVICES_EVENT__ \r
500\r
501 do { \r
502 EFI_LOADED_IMAGE_PROTOCOL *LoadedImage;\r
503\r
504 Status = SystemTable->BootServices->HandleProtocol (\r
505 ImageHandle,\r
506 &gEfiLoadedImageProtocolGuid,\r
507 (VOID **)&LoadedImage\r
508 );\r
509 ASSERT_EFI_ERROR (Status);\r
510 LoadedImage->Unload = _DriverUnloadHandler;\r
511 } while(0);\r
512\r
513#endif \r
3eb9473e 514\r
515 //\r
516 // Call the driver entry point\r
517 //\r
518 #ifdef __EDKII_GLUE_MODULE_ENTRY_POINT__\r
519 Status = (__EDKII_GLUE_MODULE_ENTRY_POINT__ (ImageHandle, SystemTable));\r
520 #else\r
521 Status = EFI_SUCCESS;\r
522 #endif\r
523\r
524 //\r
525 // If all of the drivers returned errors, then invoke all of the library destructors\r
526 //\r
527 if (EFI_ERROR (Status)) {\r
528 //\r
529 // Close our ExitBootServices () notify function\r
530 //\r
c7f33ca4 531#if __EDKII_GLUE_HAVE_DRIVER_EXIT_BOOT_SERVICES_EVENT__ \r
3eb9473e 532 if (_gDriverExitBootServicesEvent[0] != NULL) {\r
533 EFI_STATUS CloseEventStatus;\r
534 CloseEventStatus = SystemTable->BootServices->CloseEvent (_mDriverExitBootServicesNotifyEvent);\r
535 ASSERT_EFI_ERROR (CloseEventStatus);\r
536 }\r
c7f33ca4 537#endif\r
3eb9473e 538\r
539 ProcessLibraryDestructorList (ImageHandle, SystemTable);\r
540 }\r
541\r
542 //\r
543 // Return the cummalative return status code from all of the driver entry points\r
544 //\r
545 return Status;\r
546}\r
547\r
548\r
549/**\r
550 Enrty point wrapper of DXE Driver.\r
551\r
552 @param ImageHandle ImageHandle of the loaded driver.\r
553 @param SystemTable Pointer to the EFI System Table.\r
554\r
555 @retval EFI_SUCCESS One or more of the drivers returned a success code.\r
556 @retval !EFI_SUCESS The return status from the last driver entry point in the list.\r
557\r
558 EBC build envrionment has /D $(IMAGE_ENTRY_POINT)=EfiMain which overrides what GlueLib \r
559 defines: /D IMAGE_ENTRY_POINT=_ModuleEntryPoint, so _ModuleEntryPoint will be replaced with\r
560 EfiMain thus the function below isn't needed in EBC envrionment.\r
561\r
562**/\r
563#ifndef MDE_CPU_EBC\r
564EFI_STATUS\r
565EFIAPI\r
566EfiMain (\r
567 IN EFI_HANDLE ImageHandle,\r
568 IN EFI_SYSTEM_TABLE *SystemTable\r
569 )\r
570{\r
571 return _ModuleEntryPoint (ImageHandle, SystemTable);\r
572}\r
573#endif\r
574\r
575//\r
576// Guids not present in R8.6 code base\r
577//\r
578\r
579//\r
580// Protocol/Arch Protocol GUID globals\r
581//\r
582GLOBAL_REMOVE_IF_UNREFERENCED EFI_GUID gUefiDriverConfigurationProtocolGuid = { 0xbfd7dc1d, 0x24f1, 0x40d9, { 0x82, 0xe7, 0x2e, 0x09, 0xbb, 0x6b, 0x4e, 0xbe } };\r
583GLOBAL_REMOVE_IF_UNREFERENCED EFI_GUID gUefiDriverDiagnosticsProtocolGuid = { 0x4d330321, 0x025f, 0x4aac, { 0x90, 0xd8, 0x5e, 0xd9, 0x00, 0x17, 0x3b, 0x63 } };\r
584GLOBAL_REMOVE_IF_UNREFERENCED EFI_GUID gEfiArpProtocolGuid = { 0xf4b427bb, 0xba21, 0x4f16, { 0xbc, 0x4e, 0x43, 0xe4, 0x16, 0xab, 0x61, 0x9c } };\r
585GLOBAL_REMOVE_IF_UNREFERENCED EFI_GUID gEfiArpServiceBindingProtocolGuid = { 0xf44c00ee, 0x1f2c, 0x4a00, { 0xaa, 0x09, 0x1c, 0x9f, 0x3e, 0x08, 0x00, 0xa3 } };\r
586GLOBAL_REMOVE_IF_UNREFERENCED EFI_GUID gEfiDhcp4ProtocolGuid = { 0x8a219718, 0x4ef5, 0x4761, { 0x91, 0xc8, 0xc0, 0xf0, 0x4b, 0xda, 0x9e, 0x56 } };\r
587GLOBAL_REMOVE_IF_UNREFERENCED EFI_GUID gEfiDhcp4ServiceBindingProtocolGuid = { 0x9d9a39d8, 0xbd42, 0x4a73, { 0xa4, 0xd5, 0x8e, 0xe9, 0x4b, 0xe1, 0x13, 0x80 } };\r
588GLOBAL_REMOVE_IF_UNREFERENCED EFI_GUID gEfiIp4ProtocolGuid = { 0x41d94cd2, 0x35b6, 0x455a, { 0x82, 0x58, 0xd4, 0xe5, 0x13, 0x34, 0xaa, 0xdd } };\r
589GLOBAL_REMOVE_IF_UNREFERENCED EFI_GUID gEfiIp4ServiceBindingProtocolGuid = { 0xc51711e7, 0xb4bf, 0x404a, { 0xbf, 0xb8, 0x0a, 0x04, 0x8e, 0xf1, 0xff, 0xe4 } };\r
590GLOBAL_REMOVE_IF_UNREFERENCED EFI_GUID gEfiIp4ConfigProtocolGuid = { 0x3b95aa31, 0x3793, 0x434b, { 0x86, 0x67, 0xc8, 0x07, 0x08, 0x92, 0xe0, 0x5e } };\r
591GLOBAL_REMOVE_IF_UNREFERENCED EFI_GUID gEfiManagedNetworkProtocolGuid = { 0x3b95aa31, 0x3793, 0x434b, { 0x86, 0x67, 0xc8, 0x07, 0x08, 0x92, 0xe0, 0x5e } };\r
592GLOBAL_REMOVE_IF_UNREFERENCED EFI_GUID gEfiManagedNetworkServiceBindingProtocolGuid = { 0xf36ff770, 0xa7e1, 0x42cf, { 0x9e, 0xd2, 0x56, 0xf0, 0xf2, 0x71, 0xf4, 0x4c } };\r
593GLOBAL_REMOVE_IF_UNREFERENCED EFI_GUID gEfiMtftp4ProtocolGuid = { 0x3ad9df29, 0x4501, 0x478d, { 0xb1, 0xf8, 0x7f, 0x7f, 0xe7, 0x0e, 0x50, 0xf3 } };\r
594GLOBAL_REMOVE_IF_UNREFERENCED EFI_GUID gEfiMtftp4ServiceBindingProtocolGuid = { 0x2FE800BE, 0x8F01, 0x4aa6, { 0x94, 0x6B, 0xD7, 0x13, 0x88, 0xE1, 0x83, 0x3F } };\r
595GLOBAL_REMOVE_IF_UNREFERENCED EFI_GUID gEfiTcp4ProtocolGuid = { 0x65530BC7, 0xA359, 0x410f, { 0xB0, 0x10, 0x5A, 0xAD, 0xC7, 0xEC, 0x2B, 0x62 } }; \r
596GLOBAL_REMOVE_IF_UNREFERENCED EFI_GUID gEfiTcp4ServiceBindingProtocolGuid = { 0x00720665, 0x67EB, 0x4a99, { 0xBA, 0xF7, 0xD3, 0xC3, 0x3A, 0x1C, 0x7C, 0xC9 } };\r
597GLOBAL_REMOVE_IF_UNREFERENCED EFI_GUID gEfiUdp4ProtocolGuid = { 0x3ad9df29, 0x4501, 0x478d, { 0xb1, 0xf8, 0x7f, 0x7f, 0xe7, 0x0e, 0x50, 0xf3 } };\r
598GLOBAL_REMOVE_IF_UNREFERENCED EFI_GUID gEfiUdp4ServiceBindingProtocolGuid = { 0x83f01464, 0x99bd, 0x45e5, { 0xb3, 0x83, 0xaf, 0x63, 0x05, 0xd8, 0xe9, 0xe6 } };\r
599GLOBAL_REMOVE_IF_UNREFERENCED EFI_GUID gEfiAuthenticationInfoProtocolGuid = { 0x7671d9d0, 0x53db, 0x4173, { 0xaa, 0x69, 0x23, 0x27, 0xf2, 0x1f, 0x0b, 0xc7 } };\r
600GLOBAL_REMOVE_IF_UNREFERENCED EFI_GUID gEfiDevicePathFromTextProtocolGuid = { 0x5c99a21, 0xc70f, 0x4ad2, { 0x8a, 0x5f, 0x35, 0xdf, 0x33, 0x43, 0xf5, 0x1e } };\r
601GLOBAL_REMOVE_IF_UNREFERENCED EFI_GUID gEfiDevicePathToTextProtocolGuid = { 0x8b843e20, 0x8132, 0x4852, { 0x90, 0xcc, 0x55, 0x1a, 0x4e, 0x4a, 0x7f, 0x1c } };\r
602GLOBAL_REMOVE_IF_UNREFERENCED EFI_GUID gEfiDevicePathUtilitiesProtocolGuid = { 0x379be4e, 0xd706, 0x437d, { 0xb0, 0x37, 0xed, 0xb8, 0x2f, 0xb7, 0x72, 0xa4 } };\r
603GLOBAL_REMOVE_IF_UNREFERENCED EFI_GUID gEfiHashProtocolGuid = { 0xc5184932, 0xdba5, 0x46db, { 0xa5, 0xba, 0xcc, 0x0b, 0xda, 0x9c, 0x14, 0x35 } };\r
604GLOBAL_REMOVE_IF_UNREFERENCED EFI_GUID gEfiHashServiceBindingProtocolGuid = { 0x42881c98, 0xa4f3, 0x44b0, { 0xa3, 0x9d, 0xdf, 0xa1, 0x86, 0x67, 0xd8, 0xcd } };\r
605GLOBAL_REMOVE_IF_UNREFERENCED EFI_GUID gEfiIScsiInitiatorNameProtocolGuid = { 0xa6a72875, 0x2962, 0x4c18, { 0x9f, 0x46, 0x8d, 0xa6, 0x44, 0xcc, 0xfe, 0x00 } };\r
606GLOBAL_REMOVE_IF_UNREFERENCED EFI_GUID gEfiExtScsiPassThruProtocolGuid = { 0x1d3de7f0, 0x0807, 0x424f, { 0xaa, 0x69, 0x11, 0xa5, 0x4e, 0x19, 0xa4, 0x6f } };\r
607GLOBAL_REMOVE_IF_UNREFERENCED EFI_GUID gEfiTapeIoProtocolGuid = { 0x1e93e633, 0xd65a, 0x459e, { 0xab, 0x84, 0x93, 0xd9, 0xec, 0x26, 0x6d, 0x18 } };\r
608#if (EFI_SPECIFICATION_VERSION < 0x00020000)\r
609GLOBAL_REMOVE_IF_UNREFERENCED EFI_GUID gEfiUsb2HcProtocolGuid = { 0x3e745226, 0x9818, 0x45b6, { 0xa2, 0xac, 0xd7, 0xcd, 0x0e, 0x8b, 0xa2, 0xbc } };\r
610#endif\r
611\r
612//\r
613// PPI GUID globals\r
614//\r
615\r
616//\r
617// GUID globals\r
618//\r
619GLOBAL_REMOVE_IF_UNREFERENCED EFI_GUID gEfiHobMemoryAllocBspStoreGuid = { 0x564b33cd, 0xc92a, 0x4593, { 0x90, 0xbf, 0x24, 0x73, 0xe4, 0x3c, 0x63, 0x22 } };\r
620GLOBAL_REMOVE_IF_UNREFERENCED EFI_GUID gEfiHobMemoryAllocStackGuid = { 0x4ed4bf27, 0x4092, 0x42e9, { 0x80, 0x7d, 0x52, 0x7b, 0x1d, 0x00, 0xc9, 0xbd } }; \r
621GLOBAL_REMOVE_IF_UNREFERENCED EFI_GUID gEfiHobMemoryAllocModuleGuid = { 0xf8e21975, 0x0899, 0x4f58, { 0xa4, 0xbe, 0x55, 0x25, 0xa9, 0xc6, 0xd7, 0x7a } }; \r
622GLOBAL_REMOVE_IF_UNREFERENCED EFI_GUID gEfiAuthenticationChapRadiusGuid = { 0xd6062b50, 0x15ca, 0x11da, { 0x92, 0x19, 0x00, 0x10, 0x83, 0xff, 0xca, 0x4d } };\r
623GLOBAL_REMOVE_IF_UNREFERENCED EFI_GUID gEfiAuthenticationChapLocalGuid = { 0xc280c73e, 0x15ca, 0x11da, { 0xb0, 0xca, 0x00, 0x10, 0x83, 0xff, 0xca, 0x4d } };\r
624GLOBAL_REMOVE_IF_UNREFERENCED EFI_GUID gEfiHashAlgorithmSha1Guid = { 0x2ae9d80f, 0x3fb2, 0x4095, { 0xb7, 0xb1, 0xe9, 0x31, 0x57, 0xb9, 0x46, 0xb6 } };\r
625GLOBAL_REMOVE_IF_UNREFERENCED EFI_GUID gEfiHashAlgorithmSha224Guid = { 0x8df01a06, 0x9bd5, 0x4bf7, { 0xb0, 0x21, 0xdb, 0x4f, 0xd9, 0xcc, 0xf4, 0x5b } }; \r
626GLOBAL_REMOVE_IF_UNREFERENCED EFI_GUID gEfiHashAlgorithmSha256Guid = { 0x51aa59de, 0xfdf2, 0x4ea3, { 0xbc, 0x63, 0x87, 0x5f, 0xb7, 0x84, 0x2e, 0xe9 } };\r
627GLOBAL_REMOVE_IF_UNREFERENCED EFI_GUID gEfiHashAlgorithmSha384Guid = { 0xefa96432, 0xde33, 0x4dd2, { 0xae, 0xe6, 0x32, 0x8c, 0x33, 0xdf, 0x77, 0x7a } }; \r
628GLOBAL_REMOVE_IF_UNREFERENCED EFI_GUID gEfiHashAlgorithmSha512Guid = { 0xcaa4381e, 0x750c, 0x4770, { 0xb8, 0x70, 0x7a, 0x23, 0xb4, 0xe4, 0x21, 0x30 } }; \r
629GLOBAL_REMOVE_IF_UNREFERENCED EFI_GUID gEfiHashAlgorithmMD5Guid = { 0xaf7c79c, 0x65b5, 0x4319, { 0xb0, 0xae, 0x44, 0xec, 0x48, 0x4e, 0x4a, 0xd7 } };\r
630GLOBAL_REMOVE_IF_UNREFERENCED EFI_GUID gBootObjectAuthorizationParmsetGuid = { 0xedd35e31, 0x7b9, 0x11d2, { 0x83, 0xa3, 0x00, 0xa0, 0xc9, 0x1f, 0xad, 0xcf } };\r
631GLOBAL_REMOVE_IF_UNREFERENCED EFI_GUID gSmmCommunicateHeaderGuid = { 0xf328e36c, 0x23b6, 0x4a95, { 0x85, 0x4b, 0x32, 0xe1, 0x95, 0x34, 0xcd, 0x75 } };\r
632GLOBAL_REMOVE_IF_UNREFERENCED EFI_GUID gEfiCapsuleGuid = { 0x3B6686BD, 0x0D76, 0x4030, { 0xB7, 0x0E, 0xB5, 0x51, 0x9E, 0x2F, 0xC5, 0xA0 } };\r
633GLOBAL_REMOVE_IF_UNREFERENCED EFI_GUID gEfiConfigFileNameGuid = { 0x98B8D59B, 0xE8BA, 0x48EE, { 0x98, 0xDD, 0xC2, 0x95, 0x39, 0x2F, 0x1E, 0xDB } };\r