3 Copyright (c) 2004 - 2010, 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
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__) \
243 || defined(__EDKII_GLUE_SMM_RUNTIME_DXE_REPORT_STATUS_CODE_LIB__)
248 // EdkII Glue Library Constructors:
249 // NOTE: the constructors must be called according to dependency order
251 // UefiBootServicesTableLib UefiBootServicesTableLibConstructor()
252 // DxeIoLibCpuIo IoLibConstructor()
253 // DxeSalLib DxeSalLibConstructor(), IPF only
254 // EdkDxeRuntimeDriverLib RuntimeDriverLibConstruct()
255 // DxeHobLib HobLibConstructor()
256 // UefiDriverModelLib UefiDriverModelLibConstructor()
257 // DxeSmbusLib SmbusLibConstructor()
258 // DxeServicesTableLib DxeServicesTableLibConstructor()
259 // UefiRuntimeServicesTableLib UefiRuntimeServicesTableLibConstructor()
260 // SmmRuntimeDxeReportStatusCodeLib ReportStatusCodeLibConstruct()
263 #ifdef __EDKII_GLUE_UEFI_BOOT_SERVICES_TABLE_LIB__
264 Status
= UefiBootServicesTableLibConstructor (ImageHandle
, SystemTable
);
265 ASSERT_EFI_ERROR (Status
);
268 #ifdef __EDKII_GLUE_DXE_IO_LIB_CPU_IO__
269 Status
= IoLibConstructor (ImageHandle
, SystemTable
);
270 ASSERT_EFI_ERROR (Status
);
273 #ifdef __EDKII_GLUE_EDK_DXE_SAL_LIB__
274 Status
= DxeSalLibConstructor(ImageHandle
, SystemTable
);
275 ASSERT_EFI_ERROR (Status
);
278 #ifdef __EDKII_GLUE_EDK_DXE_RUNTIME_DRIVER_LIB__
279 Status
= RuntimeDriverLibConstruct (ImageHandle
, SystemTable
);
280 ASSERT_EFI_ERROR (Status
);
283 #ifdef __EDKII_GLUE_UEFI_RUNTIME_SERVICES_TABLE_LIB__
284 Status
= UefiRuntimeServicesTableLibConstructor (ImageHandle
, SystemTable
);
285 ASSERT_EFI_ERROR (Status
);
288 #ifdef __EDKII_GLUE_UEFI_DRIVER_MODEL_LIB__
289 Status
= UefiDriverModelLibConstructor (ImageHandle
, SystemTable
);
290 ASSERT_EFI_ERROR (Status
);
293 #ifdef __EDKII_GLUE_DXE_SERVICES_TABLE_LIB__
294 Status
= DxeServicesTableLibConstructor (ImageHandle
, SystemTable
);
295 ASSERT_EFI_ERROR (Status
);
298 #ifdef __EDKII_GLUE_SMM_RUNTIME_DXE_REPORT_STATUS_CODE_LIB__
299 Status
= ReportStatusCodeLibConstruct (ImageHandle
, SystemTable
);
300 ASSERT_EFI_ERROR (Status
);
303 #ifdef __EDKII_GLUE_DXE_HOB_LIB__
304 Status
= HobLibConstructor (ImageHandle
, SystemTable
);
305 ASSERT_EFI_ERROR (Status
);
308 #ifdef __EDKII_GLUE_DXE_SMBUS_LIB__
309 Status
= SmbusLibConstructor (ImageHandle
, SystemTable
);
310 ASSERT_EFI_ERROR (Status
);
316 // Library Destructors
320 ProcessLibraryDestructorList (
321 IN EFI_HANDLE ImageHandle
,
322 IN EFI_SYSTEM_TABLE
*SystemTable
325 #if defined (__EDKII_GLUE_UEFI_DRIVER_MODEL_LIB__) \
326 || defined (__EDKII_GLUE_EDK_DXE_RUNTIME_DRIVER_LIB__) \
327 || defined (__EDKII_GLUE_SMM_RUNTIME_DXE_REPORT_STATUS_CODE_LIB__)
332 // NOTE: the destructors must be called according to dependency order
334 #ifdef __EDKII_GLUE_UEFI_DRIVER_MODEL_LIB__
335 Status
= UefiDriverModelLibDestructor (ImageHandle
, SystemTable
);
336 ASSERT_EFI_ERROR (Status
);
339 #ifdef __EDKII_GLUE_SMM_RUNTIME_DXE_REPORT_STATUS_CODE_LIB__
340 Status
= ReportStatusCodeLibDestruct (ImageHandle
, SystemTable
);
341 ASSERT_EFI_ERROR (Status
);
344 #ifdef __EDKII_GLUE_EDK_DXE_RUNTIME_DRIVER_LIB__
345 Status
= RuntimeDriverLibDeconstruct (ImageHandle
, SystemTable
);
346 ASSERT_EFI_ERROR (Status
);
352 Unload function that is registered in the LoadImage protocol. It un-installs
353 protocols produced and deallocates pool used by the driver. Called by the core
354 when unloading the driver.
363 _DriverUnloadHandler (
364 EFI_HANDLE ImageHandle
370 // If an UnloadImage() handler is specified, then call it
372 Status
= ProcessModuleUnloadList (ImageHandle
);
375 // If the driver specific unload handler does not return an error, then call all of the
376 // library destructors. If the unload handler returned an error, then the driver can not be
377 // unloaded, and the library destructors should not be called
379 if (!EFI_ERROR (Status
)) {
381 // Close our ExitBootServices () notify function
384 #if __EDKII_GLUE_HAVE_DRIVER_EXIT_BOOT_SERVICES_EVENT__
385 if (_gDriverExitBootServicesEvent
[0] != NULL
) {
386 ASSERT (gBS
!= NULL
);
387 Status
= gBS
->CloseEvent (_mDriverExitBootServicesNotifyEvent
);
388 ASSERT_EFI_ERROR (Status
);
392 ProcessLibraryDestructorList (ImageHandle
, gST
);
396 // Return the status from the driver specific unload handler
403 _DriverExitBootServices (
411 Set AtRuntime flag as TRUE after ExitBootServices
415 Event - The Event that is being processed
417 Context - Event Context
425 #if __EDKII_GLUE_HAVE_DRIVER_EXIT_BOOT_SERVICES_EVENT__
426 EFI_EVENT_NOTIFY ChildNotifyEventHandler
;
429 for (Index
= 0; _gDriverExitBootServicesEvent
[Index
] != NULL
; Index
++) {
430 ChildNotifyEventHandler
= _gDriverExitBootServicesEvent
[Index
];
431 ChildNotifyEventHandler (Event
, NULL
);
436 EFI_DRIVER_ENTRY_POINT (_ModuleEntryPoint
);
439 // Module Entry Point
441 #ifdef __EDKII_GLUE_MODULE_ENTRY_POINT__
444 __EDKII_GLUE_MODULE_ENTRY_POINT__ (
445 EFI_HANDLE ImageHandle
,
446 EFI_SYSTEM_TABLE
*SystemTable
451 Enrty point to DXE Driver.
453 @param ImageHandle ImageHandle of the loaded driver.
454 @param SystemTable Pointer to the EFI System Table.
456 @retval EFI_SUCCESS One or more of the drivers returned a success code.
457 @retval !EFI_SUCESS The return status from the last driver entry point in the list.
463 IN EFI_HANDLE ImageHandle
,
464 IN EFI_SYSTEM_TABLE
*SystemTable
469 // if (_gUefiDriverRevision != 0) {
471 // // Make sure that the EFI/UEFI spec revision of the platform is >= EFI/UEFI spec revision of the driver
473 // if (SystemTable->Hdr.Revision < _gUefiDriverRevision) {
474 // return EFI_INCOMPATIBLE_VERSION;
478 // DEBUG ((EFI_D_ERROR, "EdkII Glue Driver Entry - 0\n"));
481 // Call constructor for all libraries
483 ProcessLibraryConstructorList (ImageHandle
, SystemTable
);
486 // Register our ExitBootServices () notify function
488 #if __EDKII_GLUE_HAVE_DRIVER_EXIT_BOOT_SERVICES_EVENT__
489 if (_gDriverExitBootServicesEvent
[0] != NULL
) {
490 Status
= SystemTable
->BootServices
->CreateEvent (
491 EFI_EVENT_SIGNAL_EXIT_BOOT_SERVICES
,
493 _DriverExitBootServices
,
495 &_mDriverExitBootServicesNotifyEvent
498 ASSERT_EFI_ERROR (Status
);
503 // Install unload handler...
506 // Add conditional macro to save size. The 4 macros check against
507 // potential functions which may be invoked, if there is no function
508 // to be called, we don't register Unload callback.
510 #if ( defined(__EDKII_GLUE_MODULE_UNLOAD_HANDLER__) \
511 || defined(__EDKII_GLUE_UEFI_DRIVER_MODEL_LIB__) \
512 || defined(__EDKII_GLUE_EDK_DXE_RUNTIME_DRIVER_LIB__) ) \
513 || __EDKII_GLUE_HAVE_DRIVER_EXIT_BOOT_SERVICES_EVENT__
516 EFI_LOADED_IMAGE_PROTOCOL
*LoadedImage
;
518 Status
= SystemTable
->BootServices
->HandleProtocol (
520 &gEfiLoadedImageProtocolGuid
,
521 (VOID
**)&LoadedImage
523 ASSERT_EFI_ERROR (Status
);
524 LoadedImage
->Unload
= _DriverUnloadHandler
;
530 // Call the driver entry point
532 #ifdef __EDKII_GLUE_MODULE_ENTRY_POINT__
533 Status
= (__EDKII_GLUE_MODULE_ENTRY_POINT__ (ImageHandle
, SystemTable
));
535 Status
= EFI_SUCCESS
;
539 // If all of the drivers returned errors, then invoke all of the library destructors
541 if (EFI_ERROR (Status
)) {
543 // Close our ExitBootServices () notify function
545 #if __EDKII_GLUE_HAVE_DRIVER_EXIT_BOOT_SERVICES_EVENT__
546 if (_gDriverExitBootServicesEvent
[0] != NULL
) {
547 EFI_STATUS CloseEventStatus
;
548 CloseEventStatus
= SystemTable
->BootServices
->CloseEvent (_mDriverExitBootServicesNotifyEvent
);
549 ASSERT_EFI_ERROR (CloseEventStatus
);
553 ProcessLibraryDestructorList (ImageHandle
, SystemTable
);
557 // Return the cummalative return status code from all of the driver entry points
564 Enrty point wrapper of DXE Driver.
566 @param ImageHandle ImageHandle of the loaded driver.
567 @param SystemTable Pointer to the EFI System Table.
569 @retval EFI_SUCCESS One or more of the drivers returned a success code.
570 @retval !EFI_SUCESS The return status from the last driver entry point in the list.
572 EBC build envrionment has /D $(IMAGE_ENTRY_POINT)=EfiMain which overrides what GlueLib
573 defines: /D IMAGE_ENTRY_POINT=_ModuleEntryPoint, so _ModuleEntryPoint will be replaced with
574 EfiMain thus the function below isn't needed in EBC envrionment.
581 IN EFI_HANDLE ImageHandle
,
582 IN EFI_SYSTEM_TABLE
*SystemTable
585 return _ModuleEntryPoint (ImageHandle
, SystemTable
);
590 // Guids not present in R8.6 code base
594 // Protocol/Arch Protocol GUID globals
596 GLOBAL_REMOVE_IF_UNREFERENCED EFI_GUID gUefiDriverConfigurationProtocolGuid
= { 0xbfd7dc1d, 0x24f1, 0x40d9, { 0x82, 0xe7, 0x2e, 0x09, 0xbb, 0x6b, 0x4e, 0xbe } };
597 GLOBAL_REMOVE_IF_UNREFERENCED EFI_GUID gUefiDriverDiagnosticsProtocolGuid
= { 0x4d330321, 0x025f, 0x4aac, { 0x90, 0xd8, 0x5e, 0xd9, 0x00, 0x17, 0x3b, 0x63 } };
598 GLOBAL_REMOVE_IF_UNREFERENCED EFI_GUID gEfiArpProtocolGuid
= { 0xf4b427bb, 0xba21, 0x4f16, { 0xbc, 0x4e, 0x43, 0xe4, 0x16, 0xab, 0x61, 0x9c } };
599 GLOBAL_REMOVE_IF_UNREFERENCED EFI_GUID gEfiArpServiceBindingProtocolGuid
= { 0xf44c00ee, 0x1f2c, 0x4a00, { 0xaa, 0x09, 0x1c, 0x9f, 0x3e, 0x08, 0x00, 0xa3 } };
600 GLOBAL_REMOVE_IF_UNREFERENCED EFI_GUID gEfiDhcp4ProtocolGuid
= { 0x8a219718, 0x4ef5, 0x4761, { 0x91, 0xc8, 0xc0, 0xf0, 0x4b, 0xda, 0x9e, 0x56 } };
601 GLOBAL_REMOVE_IF_UNREFERENCED EFI_GUID gEfiDhcp4ServiceBindingProtocolGuid
= { 0x9d9a39d8, 0xbd42, 0x4a73, { 0xa4, 0xd5, 0x8e, 0xe9, 0x4b, 0xe1, 0x13, 0x80 } };
602 GLOBAL_REMOVE_IF_UNREFERENCED EFI_GUID gEfiIp4ProtocolGuid
= { 0x41d94cd2, 0x35b6, 0x455a, { 0x82, 0x58, 0xd4, 0xe5, 0x13, 0x34, 0xaa, 0xdd } };
603 GLOBAL_REMOVE_IF_UNREFERENCED EFI_GUID gEfiIp4ServiceBindingProtocolGuid
= { 0xc51711e7, 0xb4bf, 0x404a, { 0xbf, 0xb8, 0x0a, 0x04, 0x8e, 0xf1, 0xff, 0xe4 } };
604 GLOBAL_REMOVE_IF_UNREFERENCED EFI_GUID gEfiIp4ConfigProtocolGuid
= { 0x3b95aa31, 0x3793, 0x434b, { 0x86, 0x67, 0xc8, 0x07, 0x08, 0x92, 0xe0, 0x5e } };
605 GLOBAL_REMOVE_IF_UNREFERENCED EFI_GUID gEfiManagedNetworkProtocolGuid
= { 0x3b95aa31, 0x3793, 0x434b, { 0x86, 0x67, 0xc8, 0x07, 0x08, 0x92, 0xe0, 0x5e } };
606 GLOBAL_REMOVE_IF_UNREFERENCED EFI_GUID gEfiManagedNetworkServiceBindingProtocolGuid
= { 0xf36ff770, 0xa7e1, 0x42cf, { 0x9e, 0xd2, 0x56, 0xf0, 0xf2, 0x71, 0xf4, 0x4c } };
607 GLOBAL_REMOVE_IF_UNREFERENCED EFI_GUID gEfiMtftp4ProtocolGuid
= { 0x3ad9df29, 0x4501, 0x478d, { 0xb1, 0xf8, 0x7f, 0x7f, 0xe7, 0x0e, 0x50, 0xf3 } };
608 GLOBAL_REMOVE_IF_UNREFERENCED EFI_GUID gEfiMtftp4ServiceBindingProtocolGuid
= { 0x2FE800BE, 0x8F01, 0x4aa6, { 0x94, 0x6B, 0xD7, 0x13, 0x88, 0xE1, 0x83, 0x3F } };
609 GLOBAL_REMOVE_IF_UNREFERENCED EFI_GUID gEfiTcp4ProtocolGuid
= { 0x65530BC7, 0xA359, 0x410f, { 0xB0, 0x10, 0x5A, 0xAD, 0xC7, 0xEC, 0x2B, 0x62 } };
610 GLOBAL_REMOVE_IF_UNREFERENCED EFI_GUID gEfiTcp4ServiceBindingProtocolGuid
= { 0x00720665, 0x67EB, 0x4a99, { 0xBA, 0xF7, 0xD3, 0xC3, 0x3A, 0x1C, 0x7C, 0xC9 } };
611 GLOBAL_REMOVE_IF_UNREFERENCED EFI_GUID gEfiUdp4ProtocolGuid
= { 0x3ad9df29, 0x4501, 0x478d, { 0xb1, 0xf8, 0x7f, 0x7f, 0xe7, 0x0e, 0x50, 0xf3 } };
612 GLOBAL_REMOVE_IF_UNREFERENCED EFI_GUID gEfiUdp4ServiceBindingProtocolGuid
= { 0x83f01464, 0x99bd, 0x45e5, { 0xb3, 0x83, 0xaf, 0x63, 0x05, 0xd8, 0xe9, 0xe6 } };
613 GLOBAL_REMOVE_IF_UNREFERENCED EFI_GUID gEfiAuthenticationInfoProtocolGuid
= { 0x7671d9d0, 0x53db, 0x4173, { 0xaa, 0x69, 0x23, 0x27, 0xf2, 0x1f, 0x0b, 0xc7 } };
614 GLOBAL_REMOVE_IF_UNREFERENCED EFI_GUID gEfiDevicePathFromTextProtocolGuid
= { 0x5c99a21, 0xc70f, 0x4ad2, { 0x8a, 0x5f, 0x35, 0xdf, 0x33, 0x43, 0xf5, 0x1e } };
615 GLOBAL_REMOVE_IF_UNREFERENCED EFI_GUID gEfiDevicePathToTextProtocolGuid
= { 0x8b843e20, 0x8132, 0x4852, { 0x90, 0xcc, 0x55, 0x1a, 0x4e, 0x4a, 0x7f, 0x1c } };
616 GLOBAL_REMOVE_IF_UNREFERENCED EFI_GUID gEfiDevicePathUtilitiesProtocolGuid
= { 0x379be4e, 0xd706, 0x437d, { 0xb0, 0x37, 0xed, 0xb8, 0x2f, 0xb7, 0x72, 0xa4 } };
617 GLOBAL_REMOVE_IF_UNREFERENCED EFI_GUID gEfiHashProtocolGuid
= { 0xc5184932, 0xdba5, 0x46db, { 0xa5, 0xba, 0xcc, 0x0b, 0xda, 0x9c, 0x14, 0x35 } };
618 GLOBAL_REMOVE_IF_UNREFERENCED EFI_GUID gEfiHashServiceBindingProtocolGuid
= { 0x42881c98, 0xa4f3, 0x44b0, { 0xa3, 0x9d, 0xdf, 0xa1, 0x86, 0x67, 0xd8, 0xcd } };
619 GLOBAL_REMOVE_IF_UNREFERENCED EFI_GUID gEfiIScsiInitiatorNameProtocolGuid
= { 0xa6a72875, 0x2962, 0x4c18, { 0x9f, 0x46, 0x8d, 0xa6, 0x44, 0xcc, 0xfe, 0x00 } };
620 GLOBAL_REMOVE_IF_UNREFERENCED EFI_GUID gEfiExtScsiPassThruProtocolGuid
= { 0x1d3de7f0, 0x0807, 0x424f, { 0xaa, 0x69, 0x11, 0xa5, 0x4e, 0x19, 0xa4, 0x6f } };
621 GLOBAL_REMOVE_IF_UNREFERENCED EFI_GUID gEfiTapeIoProtocolGuid
= { 0x1e93e633, 0xd65a, 0x459e, { 0xab, 0x84, 0x93, 0xd9, 0xec, 0x26, 0x6d, 0x18 } };
622 #if (EFI_SPECIFICATION_VERSION < 0x00020000)
623 GLOBAL_REMOVE_IF_UNREFERENCED EFI_GUID gEfiUsb2HcProtocolGuid
= { 0x3e745226, 0x9818, 0x45b6, { 0xa2, 0xac, 0xd7, 0xcd, 0x0e, 0x8b, 0xa2, 0xbc } };
633 GLOBAL_REMOVE_IF_UNREFERENCED EFI_GUID gEfiHobMemoryAllocBspStoreGuid
= { 0x564b33cd, 0xc92a, 0x4593, { 0x90, 0xbf, 0x24, 0x73, 0xe4, 0x3c, 0x63, 0x22 } };
634 GLOBAL_REMOVE_IF_UNREFERENCED EFI_GUID gEfiHobMemoryAllocStackGuid
= { 0x4ed4bf27, 0x4092, 0x42e9, { 0x80, 0x7d, 0x52, 0x7b, 0x1d, 0x00, 0xc9, 0xbd } };
635 GLOBAL_REMOVE_IF_UNREFERENCED EFI_GUID gEfiHobMemoryAllocModuleGuid
= { 0xf8e21975, 0x0899, 0x4f58, { 0xa4, 0xbe, 0x55, 0x25, 0xa9, 0xc6, 0xd7, 0x7a } };
636 GLOBAL_REMOVE_IF_UNREFERENCED EFI_GUID gEfiAuthenticationChapRadiusGuid
= { 0xd6062b50, 0x15ca, 0x11da, { 0x92, 0x19, 0x00, 0x10, 0x83, 0xff, 0xca, 0x4d } };
637 GLOBAL_REMOVE_IF_UNREFERENCED EFI_GUID gEfiAuthenticationChapLocalGuid
= { 0xc280c73e, 0x15ca, 0x11da, { 0xb0, 0xca, 0x00, 0x10, 0x83, 0xff, 0xca, 0x4d } };
638 GLOBAL_REMOVE_IF_UNREFERENCED EFI_GUID gEfiHashAlgorithmSha1Guid
= { 0x2ae9d80f, 0x3fb2, 0x4095, { 0xb7, 0xb1, 0xe9, 0x31, 0x57, 0xb9, 0x46, 0xb6 } };
639 GLOBAL_REMOVE_IF_UNREFERENCED EFI_GUID gEfiHashAlgorithmSha224Guid
= { 0x8df01a06, 0x9bd5, 0x4bf7, { 0xb0, 0x21, 0xdb, 0x4f, 0xd9, 0xcc, 0xf4, 0x5b } };
640 GLOBAL_REMOVE_IF_UNREFERENCED EFI_GUID gEfiHashAlgorithmSha256Guid
= { 0x51aa59de, 0xfdf2, 0x4ea3, { 0xbc, 0x63, 0x87, 0x5f, 0xb7, 0x84, 0x2e, 0xe9 } };
641 GLOBAL_REMOVE_IF_UNREFERENCED EFI_GUID gEfiHashAlgorithmSha384Guid
= { 0xefa96432, 0xde33, 0x4dd2, { 0xae, 0xe6, 0x32, 0x8c, 0x33, 0xdf, 0x77, 0x7a } };
642 GLOBAL_REMOVE_IF_UNREFERENCED EFI_GUID gEfiHashAlgorithmSha512Guid
= { 0xcaa4381e, 0x750c, 0x4770, { 0xb8, 0x70, 0x7a, 0x23, 0xb4, 0xe4, 0x21, 0x30 } };
643 GLOBAL_REMOVE_IF_UNREFERENCED EFI_GUID gEfiHashAlgorithmMD5Guid
= { 0xaf7c79c, 0x65b5, 0x4319, { 0xb0, 0xae, 0x44, 0xec, 0x48, 0x4e, 0x4a, 0xd7 } };
644 GLOBAL_REMOVE_IF_UNREFERENCED EFI_GUID gBootObjectAuthorizationParmsetGuid
= { 0xedd35e31, 0x7b9, 0x11d2, { 0x83, 0xa3, 0x00, 0xa0, 0xc9, 0x1f, 0xad, 0xcf } };
645 GLOBAL_REMOVE_IF_UNREFERENCED EFI_GUID gSmmCommunicateHeaderGuid
= { 0xf328e36c, 0x23b6, 0x4a95, { 0x85, 0x4b, 0x32, 0xe1, 0x95, 0x34, 0xcd, 0x75 } };
646 GLOBAL_REMOVE_IF_UNREFERENCED EFI_GUID gEfiCapsuleGuid
= { 0x3B6686BD, 0x0D76, 0x4030, { 0xB7, 0x0E, 0xB5, 0x51, 0x9E, 0x2F, 0xC5, 0xA0 } };
647 GLOBAL_REMOVE_IF_UNREFERENCED EFI_GUID gEfiConfigFileNameGuid
= { 0x98B8D59B, 0xE8BA, 0x48EE, { 0x98, 0xDD, 0xC2, 0x95, 0x39, 0x2F, 0x1E, 0xDB } };