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