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