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
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.
15 EdkIIGlueDxeDriverEntryPoint.c
19 DXE Driver entry point template file
23 #include "EdkIIGlueDxe.h"
24 #include "Common/EdkIIGlueDependencies.h"
26 STATIC EFI_EVENT _mDriverExitBootServicesNotifyEvent
;
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.
35 #ifdef __EDKII_GLUE_DRIVER_BINDING_PROTOCOL_INSTANCE__
36 extern EFI_DRIVER_BINDING_PROTOCOL __EDKII_GLUE_DRIVER_BINDING_PROTOCOL_INSTANCE__
;
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__
;
43 extern EFI_COMPONENT_NAME_PROTOCOL __EDKII_GLUE_COMPONENT_NAME_PROTOCOL_INSTANCE__
;
47 #ifdef __EDKII_GLUE_DRIVER_CONFIGURATION_PROTOCOL_INSTANCE__
48 extern EFI_DRIVER_CONFIGURATION_PROTOCOL __EDKII_GLUE_DRIVER_CONFIGURATION_PROTOCOL_INSTANCE__
;
51 #ifdef __EDKII_GLUE_DRIVER_DIAGNOSTICS_PROTOCOL_INSTANCE__
52 extern EFI_DRIVER_DIAGNOSTICS_PROTOCOL __EDKII_GLUE_DRIVER_DIAGNOSTICS_PROTOCOL_INSTANCE__
;
55 GLOBAL_REMOVE_IF_UNREFERENCED
const EFI_DRIVER_MODEL_PROTOCOL_LIST _gDriverModelProtocolList
[] = {
57 #ifdef __EDKII_GLUE_DRIVER_BINDING_PROTOCOL_INSTANCE__
58 &__EDKII_GLUE_DRIVER_BINDING_PROTOCOL_INSTANCE__
,
63 #ifdef __EDKII_GLUE_COMPONENT_NAME_PROTOCOL_INSTANCE__
64 &__EDKII_GLUE_COMPONENT_NAME_PROTOCOL_INSTANCE__
,
69 #ifdef __EDKII_GLUE_DRIVER_CONFIGURATION_PROTOCOL_INSTANCE__
70 &__EDKII_GLUE_DRIVER_CONFIGURATION_PROTOCOL_INSTANCE__
,
75 #ifdef __EDKII_GLUE_DRIVER_DIAGNOSTICS_PROTOCOL_INSTANCE__
76 &__EDKII_GLUE_DRIVER_DIAGNOSTICS_PROTOCOL_INSTANCE__
,
85 // Only one handler for SetVirtualAddressMap Event and ExitBootServices Event each
89 * This is the WRONG macro and it's kept only for backward compatibility.
91 #ifdef __EDKII_GLUE_SET_VIRTUAL_ADDRESS_MAP_EVENT__HANDLER__
94 __EDKII_GLUE_SET_VIRTUAL_ADDRESS_MAP_EVENT__HANDLER__ (
101 * This is the CORRECT macro users should use.
103 #ifdef __EDKII_GLUE_SET_VIRTUAL_ADDRESS_MAP_EVENT_HANDLER__
106 __EDKII_GLUE_SET_VIRTUAL_ADDRESS_MAP_EVENT_HANDLER__ (
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.
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__
,
123 #ifdef __EDKII_GLUE_SET_VIRTUAL_ADDRESS_MAP_EVENT_HANDLER__
124 __EDKII_GLUE_SET_VIRTUAL_ADDRESS_MAP_EVENT_HANDLER__
,
131 * This is the WRONG macro and it's kept only for backward compatibility.
133 #ifdef __EDKII_GLUE_EXTI_BOOT_SERVICES_EVENT__HANDLER__
135 __EDKII_GLUE_EXTI_BOOT_SERVICES_EVENT__HANDLER__ (
142 * This is the CORRECT macro users should use.
144 #ifdef __EDKII_GLUE_EXIT_BOOT_SERVICES_EVENT_HANDLER__
146 __EDKII_GLUE_EXIT_BOOT_SERVICES_EVENT_HANDLER__ (
153 Set AtRuntime flag as TRUE after ExitBootServices
155 @param[in] Event The Event that is being processed
156 @param[in] Context Event Context
160 RuntimeDriverExitBootServices (
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.
172 GLOBAL_REMOVE_IF_UNREFERENCED
const EFI_EVENT_NOTIFY _gDriverExitBootServicesEvent
[] = {
173 #ifdef __EDKII_GLUE_EDK_DXE_RUNTIME_DRIVER_LIB__
175 // only Runtime drivers need to link EdkDxeRuntimeDriverLib
177 RuntimeDriverExitBootServices
,
180 #ifdef __EDKII_GLUE_EXTI_BOOT_SERVICES_EVENT__HANDLER__
181 __EDKII_GLUE_EXTI_BOOT_SERVICES_EVENT__HANDLER__
,
184 #ifdef __EDKII_GLUE_EXIT_BOOT_SERVICES_EVENT_HANDLER__
185 __EDKII_GLUE_EXIT_BOOT_SERVICES_EVENT_HANDLER__
,
193 // Module Unload Handler
196 #ifdef __EDKII_GLUE_MODULE_UNLOAD_HANDLER__
199 __EDKII_GLUE_MODULE_UNLOAD_HANDLER__ (
200 EFI_HANDLE ImageHandle
206 ProcessModuleUnloadList (
207 EFI_HANDLE ImageHandle
210 #ifdef __EDKII_GLUE_MODULE_UNLOAD_HANDLER__
211 return (__EDKII_GLUE_MODULE_UNLOAD_HANDLER__ (ImageHandle
));
217 #ifdef __EDKII_GLUE_EFI_CALLER_ID_GUID__
218 GLOBAL_REMOVE_IF_UNREFERENCED EFI_GUID gEfiCallerIdGuid
= __EDKII_GLUE_EFI_CALLER_ID_GUID__
;
222 // Library constructors
226 ProcessLibraryConstructorList (
227 IN EFI_HANDLE ImageHandle
,
228 IN EFI_SYSTEM_TABLE
*SystemTable
232 // Declare "Status" if any of the following libraries are used
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__)
247 // EdkII Glue Library Constructors:
248 // NOTE: the constructors must be called according to dependency order
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()
261 #ifdef __EDKII_GLUE_UEFI_BOOT_SERVICES_TABLE_LIB__
262 Status
= UefiBootServicesTableLibConstructor (ImageHandle
, SystemTable
);
263 ASSERT_EFI_ERROR (Status
);
266 #ifdef __EDKII_GLUE_DXE_IO_LIB_CPU_IO__
267 Status
= IoLibConstructor (ImageHandle
, SystemTable
);
268 ASSERT_EFI_ERROR (Status
);
271 #ifdef __EDKII_GLUE_EDK_DXE_SAL_LIB__
272 Status
= DxeSalLibConstructor(ImageHandle
, SystemTable
);
273 ASSERT_EFI_ERROR (Status
);
276 #ifdef __EDKII_GLUE_EDK_DXE_RUNTIME_DRIVER_LIB__
277 Status
= RuntimeDriverLibConstruct (ImageHandle
, SystemTable
);
278 ASSERT_EFI_ERROR (Status
);
281 #ifdef __EDKII_GLUE_UEFI_RUNTIME_SERVICES_TABLE_LIB__
282 Status
= UefiRuntimeServicesTableLibConstructor (ImageHandle
, SystemTable
);
283 ASSERT_EFI_ERROR (Status
);
286 #ifdef __EDKII_GLUE_UEFI_DRIVER_MODEL_LIB__
287 Status
= UefiDriverModelLibConstructor (ImageHandle
, SystemTable
);
288 ASSERT_EFI_ERROR (Status
);
291 #ifdef __EDKII_GLUE_DXE_SERVICES_TABLE_LIB__
292 Status
= DxeServicesTableLibConstructor (ImageHandle
, SystemTable
);
293 ASSERT_EFI_ERROR (Status
);
296 #ifdef __EDKII_GLUE_DXE_HOB_LIB__
297 Status
= HobLibConstructor (ImageHandle
, SystemTable
);
298 ASSERT_EFI_ERROR (Status
);
301 #ifdef __EDKII_GLUE_DXE_SMBUS_LIB__
302 Status
= SmbusLibConstructor (ImageHandle
, SystemTable
);
303 ASSERT_EFI_ERROR (Status
);
309 // Library Destructors
313 ProcessLibraryDestructorList (
314 IN EFI_HANDLE ImageHandle
,
315 IN EFI_SYSTEM_TABLE
*SystemTable
318 #if defined (__EDKII_GLUE_UEFI_DRIVER_MODEL_LIB__) || defined (__EDKII_GLUE_EDK_DXE_RUNTIME_DRIVER_LIB__)
323 // NOTE: the destructors must be called according to dependency order
325 #ifdef __EDKII_GLUE_UEFI_DRIVER_MODEL_LIB__
326 Status
= UefiDriverModelLibDestructor (ImageHandle
, SystemTable
);
327 ASSERT_EFI_ERROR (Status
);
330 #ifdef __EDKII_GLUE_EDK_DXE_RUNTIME_DRIVER_LIB__
331 Status
= RuntimeDriverLibDeconstruct (ImageHandle
, SystemTable
);
332 ASSERT_EFI_ERROR (Status
);
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.
349 _DriverUnloadHandler (
350 EFI_HANDLE ImageHandle
356 // If an UnloadImage() handler is specified, then call it
358 Status
= ProcessModuleUnloadList (ImageHandle
);
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
365 if (!EFI_ERROR (Status
)) {
367 // Close our ExitBootServices () notify function
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
);
378 ProcessLibraryDestructorList (ImageHandle
, gST
);
382 // Return the status from the driver specific unload handler
389 _DriverExitBootServices (
397 Set AtRuntime flag as TRUE after ExitBootServices
401 Event - The Event that is being processed
403 Context - Event Context
411 #if __EDKII_GLUE_HAVE_DRIVER_EXIT_BOOT_SERVICES_EVENT__
412 EFI_EVENT_NOTIFY ChildNotifyEventHandler
;
415 for (Index
= 0; _gDriverExitBootServicesEvent
[Index
] != NULL
; Index
++) {
416 ChildNotifyEventHandler
= _gDriverExitBootServicesEvent
[Index
];
417 ChildNotifyEventHandler (Event
, NULL
);
422 EFI_DRIVER_ENTRY_POINT (_ModuleEntryPoint
);
425 // Module Entry Point
427 #ifdef __EDKII_GLUE_MODULE_ENTRY_POINT__
430 __EDKII_GLUE_MODULE_ENTRY_POINT__ (
431 EFI_HANDLE ImageHandle
,
432 EFI_SYSTEM_TABLE
*SystemTable
437 Enrty point to DXE Driver.
439 @param ImageHandle ImageHandle of the loaded driver.
440 @param SystemTable Pointer to the EFI System Table.
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.
449 IN EFI_HANDLE ImageHandle
,
450 IN EFI_SYSTEM_TABLE
*SystemTable
455 // if (_gUefiDriverRevision != 0) {
457 // // Make sure that the EFI/UEFI spec revision of the platform is >= EFI/UEFI spec revision of the driver
459 // if (SystemTable->Hdr.Revision < _gUefiDriverRevision) {
460 // return EFI_INCOMPATIBLE_VERSION;
464 // DEBUG ((EFI_D_ERROR, "EdkII Glue Driver Entry - 0\n"));
467 // Call constructor for all libraries
469 ProcessLibraryConstructorList (ImageHandle
, SystemTable
);
472 // Register our ExitBootServices () notify function
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
,
479 _DriverExitBootServices
,
481 &_mDriverExitBootServicesNotifyEvent
484 ASSERT_EFI_ERROR (Status
);
489 // Install unload handler...
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.
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__
502 EFI_LOADED_IMAGE_PROTOCOL
*LoadedImage
;
504 Status
= SystemTable
->BootServices
->HandleProtocol (
506 &gEfiLoadedImageProtocolGuid
,
507 (VOID
**)&LoadedImage
509 ASSERT_EFI_ERROR (Status
);
510 LoadedImage
->Unload
= _DriverUnloadHandler
;
516 // Call the driver entry point
518 #ifdef __EDKII_GLUE_MODULE_ENTRY_POINT__
519 Status
= (__EDKII_GLUE_MODULE_ENTRY_POINT__ (ImageHandle
, SystemTable
));
521 Status
= EFI_SUCCESS
;
525 // If all of the drivers returned errors, then invoke all of the library destructors
527 if (EFI_ERROR (Status
)) {
529 // Close our ExitBootServices () notify function
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
);
539 ProcessLibraryDestructorList (ImageHandle
, SystemTable
);
543 // Return the cummalative return status code from all of the driver entry points
550 Enrty point wrapper of DXE Driver.
552 @param ImageHandle ImageHandle of the loaded driver.
553 @param SystemTable Pointer to the EFI System Table.
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.
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.
567 IN EFI_HANDLE ImageHandle
,
568 IN EFI_SYSTEM_TABLE
*SystemTable
571 return _ModuleEntryPoint (ImageHandle
, SystemTable
);
576 // Guids not present in R8.6 code base
580 // Protocol/Arch Protocol GUID globals
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 } };
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 } };