]> git.proxmox.com Git - mirror_edk2.git/blob - EdkCompatibilityPkg/Foundation/Library/EdkIIGlueLib/EntryPoints/EdkIIGlueDxeDriverEntryPoint.c
Update the copyright notice format
[mirror_edk2.git] / EdkCompatibilityPkg / Foundation / Library / EdkIIGlueLib / EntryPoints / EdkIIGlueDxeDriverEntryPoint.c
1 /*++
2
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
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 || defined(__EDKII_GLUE_SMM_RUNTIME_DXE_REPORT_STATUS_CODE_LIB__)
244 EFI_STATUS Status;
245 #endif
246
247 //
248 // EdkII Glue Library Constructors:
249 // NOTE: the constructors must be called according to dependency order
250 //
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()
261 //
262
263 #ifdef __EDKII_GLUE_UEFI_BOOT_SERVICES_TABLE_LIB__
264 Status = UefiBootServicesTableLibConstructor (ImageHandle, SystemTable);
265 ASSERT_EFI_ERROR (Status);
266 #endif
267
268 #ifdef __EDKII_GLUE_DXE_IO_LIB_CPU_IO__
269 Status = IoLibConstructor (ImageHandle, SystemTable);
270 ASSERT_EFI_ERROR (Status);
271 #endif
272
273 #ifdef __EDKII_GLUE_EDK_DXE_SAL_LIB__
274 Status = DxeSalLibConstructor(ImageHandle, SystemTable);
275 ASSERT_EFI_ERROR (Status);
276 #endif
277
278 #ifdef __EDKII_GLUE_EDK_DXE_RUNTIME_DRIVER_LIB__
279 Status = RuntimeDriverLibConstruct (ImageHandle, SystemTable);
280 ASSERT_EFI_ERROR (Status);
281 #endif
282
283 #ifdef __EDKII_GLUE_UEFI_RUNTIME_SERVICES_TABLE_LIB__
284 Status = UefiRuntimeServicesTableLibConstructor (ImageHandle, SystemTable);
285 ASSERT_EFI_ERROR (Status);
286 #endif
287
288 #ifdef __EDKII_GLUE_UEFI_DRIVER_MODEL_LIB__
289 Status = UefiDriverModelLibConstructor (ImageHandle, SystemTable);
290 ASSERT_EFI_ERROR (Status);
291 #endif
292
293 #ifdef __EDKII_GLUE_DXE_SERVICES_TABLE_LIB__
294 Status = DxeServicesTableLibConstructor (ImageHandle, SystemTable);
295 ASSERT_EFI_ERROR (Status);
296 #endif
297
298 #ifdef __EDKII_GLUE_SMM_RUNTIME_DXE_REPORT_STATUS_CODE_LIB__
299 Status = ReportStatusCodeLibConstruct (ImageHandle, SystemTable);
300 ASSERT_EFI_ERROR (Status);
301 #endif
302
303 #ifdef __EDKII_GLUE_DXE_HOB_LIB__
304 Status = HobLibConstructor (ImageHandle, SystemTable);
305 ASSERT_EFI_ERROR (Status);
306 #endif
307
308 #ifdef __EDKII_GLUE_DXE_SMBUS_LIB__
309 Status = SmbusLibConstructor (ImageHandle, SystemTable);
310 ASSERT_EFI_ERROR (Status);
311 #endif
312
313 }
314
315 //
316 // Library Destructors
317 //
318 VOID
319 EFIAPI
320 ProcessLibraryDestructorList (
321 IN EFI_HANDLE ImageHandle,
322 IN EFI_SYSTEM_TABLE *SystemTable
323 )
324 {
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__)
328 EFI_STATUS Status;
329 #endif
330
331 //
332 // NOTE: the destructors must be called according to dependency order
333 //
334 #ifdef __EDKII_GLUE_UEFI_DRIVER_MODEL_LIB__
335 Status = UefiDriverModelLibDestructor (ImageHandle, SystemTable);
336 ASSERT_EFI_ERROR (Status);
337 #endif
338
339 #ifdef __EDKII_GLUE_SMM_RUNTIME_DXE_REPORT_STATUS_CODE_LIB__
340 Status = ReportStatusCodeLibDestruct (ImageHandle, SystemTable);
341 ASSERT_EFI_ERROR (Status);
342 #endif
343
344 #ifdef __EDKII_GLUE_EDK_DXE_RUNTIME_DRIVER_LIB__
345 Status = RuntimeDriverLibDeconstruct (ImageHandle, SystemTable);
346 ASSERT_EFI_ERROR (Status);
347 #endif
348 }
349
350
351 /**
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.
355
356 @param ImageHandle
357
358 @retval EFI_SUCCESS
359
360 **/
361 EFI_STATUS
362 EFIAPI
363 _DriverUnloadHandler (
364 EFI_HANDLE ImageHandle
365 )
366 {
367 EFI_STATUS Status;
368
369 //
370 // If an UnloadImage() handler is specified, then call it
371 //
372 Status = ProcessModuleUnloadList (ImageHandle);
373
374 //
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
378 //
379 if (!EFI_ERROR (Status)) {
380 //
381 // Close our ExitBootServices () notify function
382 //
383
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);
389 }
390 #endif
391
392 ProcessLibraryDestructorList (ImageHandle, gST);
393 }
394
395 //
396 // Return the status from the driver specific unload handler
397 //
398 return Status;
399 }
400
401 VOID
402 EFIAPI
403 _DriverExitBootServices (
404 IN EFI_EVENT Event,
405 IN VOID *Context
406 )
407 /*++
408
409 Routine Description:
410
411 Set AtRuntime flag as TRUE after ExitBootServices
412
413 Arguments:
414
415 Event - The Event that is being processed
416
417 Context - Event Context
418
419 Returns:
420
421 None
422
423 --*/
424 {
425 #if __EDKII_GLUE_HAVE_DRIVER_EXIT_BOOT_SERVICES_EVENT__
426 EFI_EVENT_NOTIFY ChildNotifyEventHandler;
427 UINTN Index;
428
429 for (Index = 0; _gDriverExitBootServicesEvent[Index] != NULL; Index++) {
430 ChildNotifyEventHandler = _gDriverExitBootServicesEvent[Index];
431 ChildNotifyEventHandler (Event, NULL);
432 }
433 #endif
434 }
435
436 EFI_DRIVER_ENTRY_POINT (_ModuleEntryPoint);
437
438 //
439 // Module Entry Point
440 //
441 #ifdef __EDKII_GLUE_MODULE_ENTRY_POINT__
442 EFI_STATUS
443 EFIAPI
444 __EDKII_GLUE_MODULE_ENTRY_POINT__ (
445 EFI_HANDLE ImageHandle,
446 EFI_SYSTEM_TABLE *SystemTable
447 );
448 #endif
449
450 /**
451 Enrty point to DXE Driver.
452
453 @param ImageHandle ImageHandle of the loaded driver.
454 @param SystemTable Pointer to the EFI System Table.
455
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.
458
459 **/
460 EFI_STATUS
461 EFIAPI
462 _ModuleEntryPoint (
463 IN EFI_HANDLE ImageHandle,
464 IN EFI_SYSTEM_TABLE *SystemTable
465 )
466 {
467 EFI_STATUS Status;
468
469 // if (_gUefiDriverRevision != 0) {
470 // //
471 // // Make sure that the EFI/UEFI spec revision of the platform is >= EFI/UEFI spec revision of the driver
472 // //
473 // if (SystemTable->Hdr.Revision < _gUefiDriverRevision) {
474 // return EFI_INCOMPATIBLE_VERSION;
475 // }
476 // }
477
478 // DEBUG ((EFI_D_ERROR, "EdkII Glue Driver Entry - 0\n"));
479
480 //
481 // Call constructor for all libraries
482 //
483 ProcessLibraryConstructorList (ImageHandle, SystemTable);
484
485 //
486 // Register our ExitBootServices () notify function
487 //
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,
492 EFI_TPL_NOTIFY,
493 _DriverExitBootServices,
494 NULL,
495 &_mDriverExitBootServicesNotifyEvent
496 );
497
498 ASSERT_EFI_ERROR (Status);
499 }
500 #endif
501
502 //
503 // Install unload handler...
504 //
505 //
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.
509 //
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__
514
515 do {
516 EFI_LOADED_IMAGE_PROTOCOL *LoadedImage;
517
518 Status = SystemTable->BootServices->HandleProtocol (
519 ImageHandle,
520 &gEfiLoadedImageProtocolGuid,
521 (VOID **)&LoadedImage
522 );
523 ASSERT_EFI_ERROR (Status);
524 LoadedImage->Unload = _DriverUnloadHandler;
525 } while(0);
526
527 #endif
528
529 //
530 // Call the driver entry point
531 //
532 #ifdef __EDKII_GLUE_MODULE_ENTRY_POINT__
533 Status = (__EDKII_GLUE_MODULE_ENTRY_POINT__ (ImageHandle, SystemTable));
534 #else
535 Status = EFI_SUCCESS;
536 #endif
537
538 //
539 // If all of the drivers returned errors, then invoke all of the library destructors
540 //
541 if (EFI_ERROR (Status)) {
542 //
543 // Close our ExitBootServices () notify function
544 //
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);
550 }
551 #endif
552
553 ProcessLibraryDestructorList (ImageHandle, SystemTable);
554 }
555
556 //
557 // Return the cummalative return status code from all of the driver entry points
558 //
559 return Status;
560 }
561
562
563 /**
564 Enrty point wrapper of DXE Driver.
565
566 @param ImageHandle ImageHandle of the loaded driver.
567 @param SystemTable Pointer to the EFI System Table.
568
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.
571
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.
575
576 **/
577 #ifndef MDE_CPU_EBC
578 EFI_STATUS
579 EFIAPI
580 EfiMain (
581 IN EFI_HANDLE ImageHandle,
582 IN EFI_SYSTEM_TABLE *SystemTable
583 )
584 {
585 return _ModuleEntryPoint (ImageHandle, SystemTable);
586 }
587 #endif
588
589 //
590 // Guids not present in R8.6 code base
591 //
592
593 //
594 // Protocol/Arch Protocol GUID globals
595 //
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 } };
624 #endif
625
626 //
627 // PPI GUID globals
628 //
629
630 //
631 // GUID globals
632 //
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 } };