]> git.proxmox.com Git - mirror_edk2.git/blame - EdkCompatibilityPkg/Foundation/Library/EdkIIGlueLib/EntryPoints/EdkIIGlueSmmDriverEntryPoint.c
Sync all bug fixes between EDK1.04 and EDK1.06 into EdkCompatibilityPkg.
[mirror_edk2.git] / EdkCompatibilityPkg / Foundation / Library / EdkIIGlueLib / EntryPoints / EdkIIGlueSmmDriverEntryPoint.c
CommitLineData
3eb9473e 1/*++\r
2\r
2c7e5c2f
HT
3Copyright (c) 2004 - 2010, Intel Corporation. All rights reserved.<BR>\r
4This program and the accompanying materials \r
3eb9473e 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 EdkIIGlueSmmDriverEntryPoint.c\r
16 \r
17Abstract: \r
18\r
19 Smm 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
26\r
27//\r
28// Module Unload Handler\r
29//\r
30#ifdef __EDKII_GLUE_MODULE_UNLOAD_HANDLER__\r
31EFI_STATUS\r
32EFIAPI\r
33__EDKII_GLUE_MODULE_UNLOAD_HANDLER__ (\r
34 EFI_HANDLE ImageHandle\r
35 );\r
36#endif\r
37\r
38EFI_STATUS\r
39EFIAPI\r
40ProcessModuleUnloadList (\r
41 EFI_HANDLE ImageHandle\r
42 )\r
43{\r
44#ifdef __EDKII_GLUE_MODULE_UNLOAD_HANDLER__\r
45 return (__EDKII_GLUE_MODULE_UNLOAD_HANDLER__ (ImageHandle));\r
46#else\r
47 return EFI_SUCCESS;\r
48#endif\r
49}\r
50\r
51#ifdef __EDKII_GLUE_EFI_CALLER_ID_GUID__\r
52 GLOBAL_REMOVE_IF_UNREFERENCED EFI_GUID gEfiCallerIdGuid = __EDKII_GLUE_EFI_CALLER_ID_GUID__;\r
53#endif\r
54\r
55//\r
56// Library constructors\r
57//\r
58VOID\r
c7f33ca4 59EFIAPI\r
3eb9473e 60ProcessLibraryConstructorList (\r
61 IN EFI_HANDLE ImageHandle,\r
62 IN EFI_SYSTEM_TABLE *SystemTable\r
63 )\r
64{\r
65//\r
66// Declare "Status" if any of the following libraries are used\r
67//\r
68#if defined(__EDKII_GLUE_DXE_HOB_LIB__) \\r
69 || defined(__EDKII_GLUE_UEFI_BOOT_SERVICES_TABLE_LIB__) \\r
3eb9473e 70 || defined(__EDKII_GLUE_DXE_SERVICES_TABLE_LIB__) \\r
71 || defined(__EDKII_GLUE_DXE_SMBUS_LIB__) \\r
72 || defined(__EDKII_GLUE_UEFI_RUNTIME_SERVICES_TABLE_LIB__) \\r
b56111f4
LG
73 || defined(__EDKII_GLUE_DXE_IO_LIB_CPU_IO__) \\r
74 || defined(__EDKII_GLUE_SMM_RUNTIME_DXE_REPORT_STATUS_CODE_LIB__)\r
3eb9473e 75 EFI_STATUS Status;\r
76#endif\r
77\r
78//\r
79// EdkII Glue Library Constructors: \r
80// NOTE: the constructors must be called according to dependency order\r
b56111f4
LG
81// NOTE: compared with EdkIIGlueDxeDriverEntryPoint.c, the EdkDxeRuntimeDriverLib\r
82// and the UefiDriverModelLib are not applicable for SMM Drivers so not listed\r
83// here\r
3eb9473e 84//\r
85// UefiBootServicesTableLib UefiBootServicesTableLibConstructor()\r
3e99020d
LG
86// UefiRuntimeServicesTableLib UefiRuntimeServicesTableLibConstructor() \r
87// DxeServicesTableLib DxeServicesTableLibConstructor()\r
3eb9473e 88// DxeIoLibCpuIo IoLibConstructor \r
3e99020d 89// SmmRuntimeDxeReportStatusCodeLib ReportStatusCodeLibConstruct()\r
3eb9473e 90// DxeHobLib HobLibConstructor()\r
3eb9473e 91// DxeSmbusLib SmbusLibConstructor() \r
3e99020d 92\r
3eb9473e 93#ifdef __EDKII_GLUE_UEFI_BOOT_SERVICES_TABLE_LIB__\r
94 Status = UefiBootServicesTableLibConstructor (ImageHandle, SystemTable);\r
95 ASSERT_EFI_ERROR (Status);\r
96#endif\r
97\r
3eb9473e 98#ifdef __EDKII_GLUE_UEFI_RUNTIME_SERVICES_TABLE_LIB__\r
99 Status = UefiRuntimeServicesTableLibConstructor (ImageHandle, SystemTable);\r
100 ASSERT_EFI_ERROR (Status);\r
101#endif\r
102\r
3eb9473e 103#ifdef __EDKII_GLUE_DXE_SERVICES_TABLE_LIB__\r
104 Status = DxeServicesTableLibConstructor (ImageHandle, SystemTable);\r
105 ASSERT_EFI_ERROR (Status); \r
106#endif\r
107\r
3e99020d
LG
108#ifdef __EDKII_GLUE_DXE_IO_LIB_CPU_IO__\r
109 Status = IoLibConstructor (ImageHandle, SystemTable);\r
110 ASSERT_EFI_ERROR (Status);\r
111#endif\r
112\r
b56111f4
LG
113#ifdef __EDKII_GLUE_SMM_RUNTIME_DXE_REPORT_STATUS_CODE_LIB__\r
114 Status = ReportStatusCodeLibConstruct (ImageHandle, SystemTable);\r
115 ASSERT_EFI_ERROR (Status);\r
116#endif\r
117\r
3eb9473e 118#ifdef __EDKII_GLUE_DXE_HOB_LIB__\r
119 Status = HobLibConstructor (ImageHandle, SystemTable);\r
120 ASSERT_EFI_ERROR (Status);\r
121#endif\r
122\r
123#ifdef __EDKII_GLUE_DXE_SMBUS_LIB__\r
124 Status = SmbusLibConstructor (ImageHandle, SystemTable);\r
125 ASSERT_EFI_ERROR (Status);\r
126#endif\r
127}\r
128\r
129//\r
130// Library destructors\r
131//\r
132VOID\r
c7f33ca4 133EFIAPI\r
3eb9473e 134ProcessLibraryDestructorList (\r
135 IN EFI_HANDLE ImageHandle,\r
136 IN EFI_SYSTEM_TABLE *SystemTable\r
137 )\r
138{\r
b56111f4
LG
139#if defined (__EDKII_GLUE_SMM_RUNTIME_DXE_REPORT_STATUS_CODE_LIB__)\r
140 EFI_STATUS Status; \r
141#endif\r
142\r
143//\r
144// NOTE: the destructors must be called according to dependency order\r
145//\r
146#ifdef __EDKII_GLUE_SMM_RUNTIME_DXE_REPORT_STATUS_CODE_LIB__\r
147 Status = ReportStatusCodeLibDestruct (ImageHandle, SystemTable);\r
148 ASSERT_EFI_ERROR (Status);\r
149#endif\r
3eb9473e 150}\r
151\r
152EFI_BOOT_SERVICES *mBS;\r
153\r
154/**\r
155 This function returns the size, in bytes, \r
156 of the device path data structure specified by DevicePath.\r
157 If DevicePath is NULL, then 0 is returned.\r
158\r
159 @param DevicePath A pointer to a device path data structure.\r
160\r
161 @return The size of a device path in bytes.\r
162\r
163**/\r
164STATIC\r
165UINTN\r
166EFIAPI\r
167SmmGetDevicePathSize (\r
168 IN CONST EFI_DEVICE_PATH_PROTOCOL *DevicePath\r
169 )\r
170{\r
171 CONST EFI_DEVICE_PATH_PROTOCOL *Start;\r
172\r
173 if (DevicePath == NULL) {\r
174 return 0;\r
175 }\r
176\r
177 //\r
178 // Search for the end of the device path structure\r
179 //\r
180 Start = DevicePath;\r
181 while (!EfiIsDevicePathEnd (DevicePath)) {\r
182 DevicePath = EfiNextDevicePathNode (DevicePath);\r
183 }\r
184\r
185 //\r
186 // Compute the size and add back in the size of the end device path structure\r
187 //\r
188 return ((UINTN) DevicePath - (UINTN) Start) + sizeof (EFI_DEVICE_PATH_PROTOCOL);\r
189}\r
190\r
191/**\r
192 This function appends the device path SecondDevicePath\r
193 to every device path instance in FirstDevicePath. \r
194\r
195 @param FirstDevicePath A pointer to a device path data structure.\r
196 \r
197 @param SecondDevicePath A pointer to a device path data structure.\r
198\r
199 @return A pointer to the new device path is returned.\r
200 NULL is returned if space for the new device path could not be allocated from pool.\r
201 It is up to the caller to free the memory used by FirstDevicePath and SecondDevicePath\r
202 if they are no longer needed.\r
203\r
204**/\r
205EFI_DEVICE_PATH_PROTOCOL *\r
206EFIAPI\r
207SmmAppendDevicePath (\r
208 IN CONST EFI_DEVICE_PATH_PROTOCOL *FirstDevicePath,\r
209 IN CONST EFI_DEVICE_PATH_PROTOCOL *SecondDevicePath\r
210 )\r
211{\r
212 EFI_STATUS Status;\r
213 UINTN Size;\r
214 UINTN Size1;\r
215 UINTN Size2;\r
216 EFI_DEVICE_PATH_PROTOCOL *NewDevicePath;\r
217 EFI_DEVICE_PATH_PROTOCOL *DevicePath2;\r
218\r
219 ASSERT (FirstDevicePath != NULL && SecondDevicePath != NULL);\r
220\r
221 //\r
222 // Allocate space for the combined device path. It only has one end node of\r
223 // length EFI_DEVICE_PATH_PROTOCOL\r
224 //\r
225 Size1 = SmmGetDevicePathSize (FirstDevicePath);\r
226 Size2 = SmmGetDevicePathSize (SecondDevicePath);\r
227 Size = Size1 + Size2 - sizeof (EFI_DEVICE_PATH_PROTOCOL);\r
228\r
229 Status = (mBS->AllocatePool) (EfiBootServicesData, Size, (VOID **) &NewDevicePath);\r
230\r
231 if (EFI_SUCCESS == Status) {\r
232 (mBS->CopyMem) ((VOID *) NewDevicePath, (VOID *) FirstDevicePath, Size1);\r
233 //\r
234 // Over write Src1 EndNode and do the copy\r
235 //\r
236 DevicePath2 = (EFI_DEVICE_PATH_PROTOCOL *) ((CHAR8 *) NewDevicePath + (Size1 - sizeof (EFI_DEVICE_PATH_PROTOCOL)));\r
237 (mBS->CopyMem) ((VOID *) DevicePath2, (VOID *) SecondDevicePath, Size2);\r
238 }\r
239\r
240 return NewDevicePath;\r
241}\r
242\r
243/**\r
244 Unload function that is registered in the LoadImage protocol. It un-installs\r
245 protocols produced and deallocates pool used by the driver. Called by the core\r
246 when unloading the driver.\r
247\r
248 @param ImageHandle ImageHandle of the unloaded driver\r
249\r
250 @return Status of the ProcessModuleUnloadList.\r
251\r
252**/\r
253EFI_STATUS\r
254EFIAPI\r
255_DriverUnloadHandler (\r
256 EFI_HANDLE ImageHandle\r
257 )\r
258{\r
259 EFI_STATUS Status;\r
260\r
261 //\r
262 // Call the unload handlers for all the modules\r
263 //\r
264 Status = ProcessModuleUnloadList (ImageHandle);\r
265\r
266 //\r
267 // If the driver specific unload handler does not return an error, then call all of the\r
268 // library destructors. If the unload handler returned an error, then the driver can not be\r
269 // unloaded, and the library destructors should not be called\r
270 //\r
271 if (!EFI_ERROR (Status)) {\r
272 //\r
273 // NOTE: To allow passing in gST here, any library instance having a destructor\r
274 // must depend on EfiDriverLib\r
275 //\r
276 }\r
277\r
278 //\r
279 // Return the status from the driver specific unload handler\r
280 //\r
281 return Status;\r
282}\r
283\r
284EFI_DRIVER_ENTRY_POINT (_ModuleEntryPoint);\r
285\r
286//\r
287// Module Entry Point\r
288//\r
289#ifdef __EDKII_GLUE_MODULE_ENTRY_POINT__\r
290EFI_STATUS\r
291EFIAPI\r
292__EDKII_GLUE_MODULE_ENTRY_POINT__ (\r
293 EFI_HANDLE ImageHandle,\r
294 EFI_SYSTEM_TABLE *SystemTable\r
295 );\r
296#endif\r
297\r
298/**\r
299 Enrty point to DXE SMM Driver.\r
300\r
301 @param ImageHandle ImageHandle of the loaded driver.\r
302 @param SystemTable Pointer to the EFI System Table.\r
303\r
304 @retval EFI_SUCCESS One or more of the drivers returned a success code.\r
305 @retval !EFI_SUCESS The return status from the last driver entry point in the list.\r
306\r
307**/\r
308EFI_STATUS\r
309EFIAPI\r
310_ModuleEntryPoint (\r
311 IN EFI_HANDLE ImageHandle,\r
312 IN EFI_SYSTEM_TABLE *SystemTable\r
313 )\r
314{\r
315 EFI_STATUS Status;\r
316 EFI_LOADED_IMAGE_PROTOCOL *LoadedImage;\r
317 EFI_SMM_BASE_PROTOCOL *SmmBase;\r
318 BOOLEAN InSmm;\r
319 EFI_DEVICE_PATH_PROTOCOL *CompleteFilePath;\r
320 EFI_DEVICE_PATH_PROTOCOL *ImageDevicePath;\r
321 EFI_HANDLE Handle;\r
322\r
323 //\r
3e99020d 324 // Cache a pointer to the Boot Services Table \r
3eb9473e 325 //\r
3e99020d 326 mBS = SystemTable->BootServices;\r
3eb9473e 327\r
328 //\r
3e99020d
LG
329 // Initialize gBS as ASSERT needs it\r
330 // Both DxeReportStatusCodeLib and SmmRuntimeDxeReportStatusCodeLib implementations\r
331 // Can handle this cleanly before lib constructors are called.\r
3eb9473e 332 //\r
3e99020d
LG
333 gBS = mBS;\r
334\r
335 //\r
336 // Retrieve the Loaded Image Protocol\r
337 //\r
338 Status = mBS->HandleProtocol (\r
339 ImageHandle, \r
340 &gEfiLoadedImageProtocolGuid,\r
341 (VOID*)&LoadedImage\r
342 );\r
343 ASSERT_EFI_ERROR (Status);\r
3eb9473e 344\r
345 //\r
346 // Retrieve SMM Base Protocol\r
347 //\r
348 Status = mBS->LocateProtocol (\r
349 &gEfiSmmBaseProtocolGuid, \r
350 NULL, \r
351 (VOID **) &SmmBase\r
352 );\r
353 ASSERT_EFI_ERROR (Status);\r
354\r
355 //\r
356 // Check to see if we are already in SMM\r
357 //\r
358 SmmBase->InSmm (SmmBase, &InSmm);\r
359\r
360 //\r
361 //\r
362 //\r
363 if (!InSmm) {\r
364 //\r
365 // Retrieve the Device Path Protocol from the DeviceHandle tha this driver was loaded from\r
366 //\r
367 Status = mBS->HandleProtocol (\r
368 LoadedImage->DeviceHandle, \r
369 &gEfiDevicePathProtocolGuid,\r
370 (VOID*)&ImageDevicePath\r
371 );\r
372 ASSERT_EFI_ERROR (Status);\r
373\r
374 //\r
375 // Build the full device path to the currently execuing image\r
376 //\r
377 CompleteFilePath = SmmAppendDevicePath (ImageDevicePath, LoadedImage->FilePath);\r
378\r
379 //\r
380 // Load the image in memory to SMRAM; it will automatically generate the\r
381 // SMI.\r
382 //\r
383 Status = SmmBase->Register (SmmBase, CompleteFilePath, NULL, 0, &Handle, FALSE);\r
384 ASSERT_EFI_ERROR (Status);\r
3e99020d 385 return Status;\r
9e620719 386 }\r
3eb9473e 387\r
3e99020d
LG
388 //\r
389 // Call constructor for all libraries\r
390 //\r
391 ProcessLibraryConstructorList (ImageHandle, SystemTable);\r
392\r
393 //\r
394 // Install the unload handler\r
395 //\r
396 Status = mBS->HandleProtocol (\r
397 ImageHandle,\r
398 &gEfiLoadedImageProtocolGuid,\r
399 (VOID **)&LoadedImage\r
400 );\r
401 ASSERT_EFI_ERROR (Status);\r
402 LoadedImage->Unload = _DriverUnloadHandler;\r
403\r
404 //\r
405 // Call the list of driver entry points\r
406 //\r
407 #ifdef __EDKII_GLUE_MODULE_ENTRY_POINT__\r
408 Status = (__EDKII_GLUE_MODULE_ENTRY_POINT__ (ImageHandle, SystemTable));\r
409 #else\r
410 Status = EFI_SUCCESS;\r
411 #endif\r
412\r
3eb9473e 413 if (EFI_ERROR (Status)) {\r
414 ProcessLibraryDestructorList (ImageHandle, SystemTable);\r
415 }\r
416\r
417 return Status;\r
418}\r
419\r
420/**\r
421 Enrty point wrapper of DXE SMM Driver.\r
422\r
423 @param ImageHandle ImageHandle of the loaded driver.\r
424 @param SystemTable Pointer to the EFI System Table.\r
425\r
426 @retval EFI_SUCCESS One or more of the drivers returned a success code.\r
427 @retval !EFI_SUCESS The return status from the last driver entry point in the list.\r
428\r
429**/\r
430EFI_STATUS\r
431EFIAPI\r
432EfiMain (\r
433 IN EFI_HANDLE ImageHandle,\r
434 IN EFI_SYSTEM_TABLE *SystemTable\r
435 )\r
436{\r
437 return _ModuleEntryPoint (ImageHandle, SystemTable);\r
438}\r
439\r
440//\r
441// Guids not present in R8.6 code base\r
442//\r
443\r
444//\r
445// Protocol/Arch Protocol GUID globals\r
446//\r
447GLOBAL_REMOVE_IF_UNREFERENCED EFI_GUID gUefiDriverConfigurationProtocolGuid = { 0xbfd7dc1d, 0x24f1, 0x40d9, { 0x82, 0xe7, 0x2e, 0x09, 0xbb, 0x6b, 0x4e, 0xbe } };\r
448GLOBAL_REMOVE_IF_UNREFERENCED EFI_GUID gUefiDriverDiagnosticsProtocolGuid = { 0x4d330321, 0x025f, 0x4aac, { 0x90, 0xd8, 0x5e, 0xd9, 0x00, 0x17, 0x3b, 0x63 } };\r
449GLOBAL_REMOVE_IF_UNREFERENCED EFI_GUID gEfiArpProtocolGuid = { 0xf4b427bb, 0xba21, 0x4f16, { 0xbc, 0x4e, 0x43, 0xe4, 0x16, 0xab, 0x61, 0x9c } };\r
450GLOBAL_REMOVE_IF_UNREFERENCED EFI_GUID gEfiArpServiceBindingProtocolGuid = { 0xf44c00ee, 0x1f2c, 0x4a00, { 0xaa, 0x09, 0x1c, 0x9f, 0x3e, 0x08, 0x00, 0xa3 } };\r
451GLOBAL_REMOVE_IF_UNREFERENCED EFI_GUID gEfiDhcp4ProtocolGuid = { 0x8a219718, 0x4ef5, 0x4761, { 0x91, 0xc8, 0xc0, 0xf0, 0x4b, 0xda, 0x9e, 0x56 } };\r
452GLOBAL_REMOVE_IF_UNREFERENCED EFI_GUID gEfiDhcp4ServiceBindingProtocolGuid = { 0x9d9a39d8, 0xbd42, 0x4a73, { 0xa4, 0xd5, 0x8e, 0xe9, 0x4b, 0xe1, 0x13, 0x80 } };\r
453GLOBAL_REMOVE_IF_UNREFERENCED EFI_GUID gEfiIp4ProtocolGuid = { 0x41d94cd2, 0x35b6, 0x455a, { 0x82, 0x58, 0xd4, 0xe5, 0x13, 0x34, 0xaa, 0xdd } };\r
454GLOBAL_REMOVE_IF_UNREFERENCED EFI_GUID gEfiIp4ServiceBindingProtocolGuid = { 0xc51711e7, 0xb4bf, 0x404a, { 0xbf, 0xb8, 0x0a, 0x04, 0x8e, 0xf1, 0xff, 0xe4 } };\r
455GLOBAL_REMOVE_IF_UNREFERENCED EFI_GUID gEfiIp4ConfigProtocolGuid = { 0x3b95aa31, 0x3793, 0x434b, { 0x86, 0x67, 0xc8, 0x07, 0x08, 0x92, 0xe0, 0x5e } };\r
456GLOBAL_REMOVE_IF_UNREFERENCED EFI_GUID gEfiManagedNetworkProtocolGuid = { 0x3b95aa31, 0x3793, 0x434b, { 0x86, 0x67, 0xc8, 0x07, 0x08, 0x92, 0xe0, 0x5e } };\r
457GLOBAL_REMOVE_IF_UNREFERENCED EFI_GUID gEfiManagedNetworkServiceBindingProtocolGuid = { 0xf36ff770, 0xa7e1, 0x42cf, { 0x9e, 0xd2, 0x56, 0xf0, 0xf2, 0x71, 0xf4, 0x4c } };\r
458GLOBAL_REMOVE_IF_UNREFERENCED EFI_GUID gEfiMtftp4ProtocolGuid = { 0x3ad9df29, 0x4501, 0x478d, { 0xb1, 0xf8, 0x7f, 0x7f, 0xe7, 0x0e, 0x50, 0xf3 } };\r
459GLOBAL_REMOVE_IF_UNREFERENCED EFI_GUID gEfiMtftp4ServiceBindingProtocolGuid = { 0x2FE800BE, 0x8F01, 0x4aa6, { 0x94, 0x6B, 0xD7, 0x13, 0x88, 0xE1, 0x83, 0x3F } };\r
460GLOBAL_REMOVE_IF_UNREFERENCED EFI_GUID gEfiTcp4ProtocolGuid = { 0x65530BC7, 0xA359, 0x410f, { 0xB0, 0x10, 0x5A, 0xAD, 0xC7, 0xEC, 0x2B, 0x62 } }; \r
461GLOBAL_REMOVE_IF_UNREFERENCED EFI_GUID gEfiTcp4ServiceBindingProtocolGuid = { 0x00720665, 0x67EB, 0x4a99, { 0xBA, 0xF7, 0xD3, 0xC3, 0x3A, 0x1C, 0x7C, 0xC9 } };\r
462GLOBAL_REMOVE_IF_UNREFERENCED EFI_GUID gEfiUdp4ProtocolGuid = { 0x3ad9df29, 0x4501, 0x478d, { 0xb1, 0xf8, 0x7f, 0x7f, 0xe7, 0x0e, 0x50, 0xf3 } };\r
463GLOBAL_REMOVE_IF_UNREFERENCED EFI_GUID gEfiUdp4ServiceBindingProtocolGuid = { 0x83f01464, 0x99bd, 0x45e5, { 0xb3, 0x83, 0xaf, 0x63, 0x05, 0xd8, 0xe9, 0xe6 } };\r
464GLOBAL_REMOVE_IF_UNREFERENCED EFI_GUID gEfiAuthenticationInfoProtocolGuid = { 0x7671d9d0, 0x53db, 0x4173, { 0xaa, 0x69, 0x23, 0x27, 0xf2, 0x1f, 0x0b, 0xc7 } };\r
465GLOBAL_REMOVE_IF_UNREFERENCED EFI_GUID gEfiDevicePathFromTextProtocolGuid = { 0x5c99a21, 0xc70f, 0x4ad2, { 0x8a, 0x5f, 0x35, 0xdf, 0x33, 0x43, 0xf5, 0x1e } };\r
466GLOBAL_REMOVE_IF_UNREFERENCED EFI_GUID gEfiDevicePathToTextProtocolGuid = { 0x8b843e20, 0x8132, 0x4852, { 0x90, 0xcc, 0x55, 0x1a, 0x4e, 0x4a, 0x7f, 0x1c } };\r
467GLOBAL_REMOVE_IF_UNREFERENCED EFI_GUID gEfiDevicePathUtilitiesProtocolGuid = { 0x379be4e, 0xd706, 0x437d, { 0xb0, 0x37, 0xed, 0xb8, 0x2f, 0xb7, 0x72, 0xa4 } };\r
468GLOBAL_REMOVE_IF_UNREFERENCED EFI_GUID gEfiHashProtocolGuid = { 0xc5184932, 0xdba5, 0x46db, { 0xa5, 0xba, 0xcc, 0x0b, 0xda, 0x9c, 0x14, 0x35 } };\r
469GLOBAL_REMOVE_IF_UNREFERENCED EFI_GUID gEfiHashServiceBindingProtocolGuid = { 0x42881c98, 0xa4f3, 0x44b0, { 0xa3, 0x9d, 0xdf, 0xa1, 0x86, 0x67, 0xd8, 0xcd } };\r
470GLOBAL_REMOVE_IF_UNREFERENCED EFI_GUID gEfiIScsiInitiatorNameProtocolGuid = { 0xa6a72875, 0x2962, 0x4c18, { 0x9f, 0x46, 0x8d, 0xa6, 0x44, 0xcc, 0xfe, 0x00 } };\r
471GLOBAL_REMOVE_IF_UNREFERENCED EFI_GUID gEfiExtScsiPassThruProtocolGuid = { 0x1d3de7f0, 0x0807, 0x424f, { 0xaa, 0x69, 0x11, 0xa5, 0x4e, 0x19, 0xa4, 0x6f } };\r
472GLOBAL_REMOVE_IF_UNREFERENCED EFI_GUID gEfiTapeIoProtocolGuid = { 0x1e93e633, 0xd65a, 0x459e, { 0xab, 0x84, 0x93, 0xd9, 0xec, 0x26, 0x6d, 0x18 } };\r
473GLOBAL_REMOVE_IF_UNREFERENCED EFI_GUID gEfiUsb2HcProtocolGuid = { 0x3e745226, 0x9818, 0x45b6, { 0xa2, 0xac, 0xd7, 0xcd, 0x0e, 0x8b, 0xa2, 0xbc } };\r
474\r
475//\r
476// PPI GUID globals\r
477//\r
478\r
479//\r
480// GUID globals\r
481//\r
482GLOBAL_REMOVE_IF_UNREFERENCED EFI_GUID gEfiHobMemoryAllocBspStoreGuid = { 0x564b33cd, 0xc92a, 0x4593, { 0x90, 0xbf, 0x24, 0x73, 0xe4, 0x3c, 0x63, 0x22 } };\r
483GLOBAL_REMOVE_IF_UNREFERENCED EFI_GUID gEfiHobMemoryAllocStackGuid = { 0x4ed4bf27, 0x4092, 0x42e9, { 0x80, 0x7d, 0x52, 0x7b, 0x1d, 0x00, 0xc9, 0xbd } }; \r
484GLOBAL_REMOVE_IF_UNREFERENCED EFI_GUID gEfiHobMemoryAllocModuleGuid = { 0xf8e21975, 0x0899, 0x4f58, { 0xa4, 0xbe, 0x55, 0x25, 0xa9, 0xc6, 0xd7, 0x7a } }; \r
485GLOBAL_REMOVE_IF_UNREFERENCED EFI_GUID gEfiAuthenticationChapRadiusGuid = { 0xd6062b50, 0x15ca, 0x11da, { 0x92, 0x19, 0x00, 0x10, 0x83, 0xff, 0xca, 0x4d } };\r
486GLOBAL_REMOVE_IF_UNREFERENCED EFI_GUID gEfiAuthenticationChapLocalGuid = { 0xc280c73e, 0x15ca, 0x11da, { 0xb0, 0xca, 0x00, 0x10, 0x83, 0xff, 0xca, 0x4d } };\r
487GLOBAL_REMOVE_IF_UNREFERENCED EFI_GUID gEfiHashAlgorithmSha1Guid = { 0x2ae9d80f, 0x3fb2, 0x4095, { 0xb7, 0xb1, 0xe9, 0x31, 0x57, 0xb9, 0x46, 0xb6 } };\r
488GLOBAL_REMOVE_IF_UNREFERENCED EFI_GUID gEfiHashAlgorithmSha224Guid = { 0x8df01a06, 0x9bd5, 0x4bf7, { 0xb0, 0x21, 0xdb, 0x4f, 0xd9, 0xcc, 0xf4, 0x5b } }; \r
489GLOBAL_REMOVE_IF_UNREFERENCED EFI_GUID gEfiHashAlgorithmSha256Guid = { 0x51aa59de, 0xfdf2, 0x4ea3, { 0xbc, 0x63, 0x87, 0x5f, 0xb7, 0x84, 0x2e, 0xe9 } };\r
490GLOBAL_REMOVE_IF_UNREFERENCED EFI_GUID gEfiHashAlgorithmSha384Guid = { 0xefa96432, 0xde33, 0x4dd2, { 0xae, 0xe6, 0x32, 0x8c, 0x33, 0xdf, 0x77, 0x7a } }; \r
491GLOBAL_REMOVE_IF_UNREFERENCED EFI_GUID gEfiHashAlgorithmSha512Guid = { 0xcaa4381e, 0x750c, 0x4770, { 0xb8, 0x70, 0x7a, 0x23, 0xb4, 0xe4, 0x21, 0x30 } }; \r
492GLOBAL_REMOVE_IF_UNREFERENCED EFI_GUID gEfiHashAlgorithmMD5Guid = { 0xaf7c79c, 0x65b5, 0x4319, { 0xb0, 0xae, 0x44, 0xec, 0x48, 0x4e, 0x4a, 0xd7 } };\r
493GLOBAL_REMOVE_IF_UNREFERENCED EFI_GUID gBootObjectAuthorizationParmsetGuid = { 0xedd35e31, 0x7b9, 0x11d2, { 0x83, 0xa3, 0x00, 0xa0, 0xc9, 0x1f, 0xad, 0xcf } };\r
494GLOBAL_REMOVE_IF_UNREFERENCED EFI_GUID gSmmCommunicateHeaderGuid = { 0xf328e36c, 0x23b6, 0x4a95, { 0x85, 0x4b, 0x32, 0xe1, 0x95, 0x34, 0xcd, 0x75 } };\r
495GLOBAL_REMOVE_IF_UNREFERENCED EFI_GUID gEfiCapsuleGuid = { 0x3B6686BD, 0x0D76, 0x4030, { 0xB7, 0x0E, 0xB5, 0x51, 0x9E, 0x2F, 0xC5, 0xA0 } };\r
496GLOBAL_REMOVE_IF_UNREFERENCED EFI_GUID gEfiConfigFileNameGuid = { 0x98B8D59B, 0xE8BA, 0x48EE, { 0x98, 0xDD, 0xC2, 0x95, 0x39, 0x2F, 0x1E, 0xDB } };\r