Home | History | Annotate | Download | only in EntryPoints
      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