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