STATIC\r
EFI_RUNTIME_SERVICES *mRT;\r
\r
-STATIC\r
-EFI_BOOT_SERVICES *mBS;\r
-\r
STATIC\r
BOOLEAN mHaveExitedBootServices = FALSE;\r
\r
\r
if (mInSmm) {\r
return (EFI_REPORT_STATUS_CODE) OemHookStatusCodeReport;\r
- } else if (mRT->Hdr.Revision < 0x20000) {\r
+ } else if (mRT != NULL && mRT->Hdr.Revision < 0x20000) {\r
return ((FRAMEWORK_EFI_RUNTIME_SERVICES*)mRT)->ReportStatusCode;\r
} else if (!mHaveExitedBootServices) {\r
- Status = mBS->LocateProtocol (&gEfiStatusCodeRuntimeProtocolGuid, NULL, (VOID**)&StatusCodeProtocol);\r
- if (!EFI_ERROR (Status) && StatusCodeProtocol != NULL) {\r
- return StatusCodeProtocol->ReportStatusCode;\r
+ //\r
+ // Check gBS just in case. ReportStatusCode is called before gBS is initialized.\r
+ //\r
+ if (gBS != NULL) {\r
+ Status = gBS->LocateProtocol (&gEfiStatusCodeRuntimeProtocolGuid, NULL, (VOID**)&StatusCodeProtocol);\r
+ if (!EFI_ERROR (Status) && StatusCodeProtocol != NULL) {\r
+ return StatusCodeProtocol->ReportStatusCode;\r
+ }\r
}\r
}\r
\r
{\r
EFI_STATUS Status;\r
\r
- mBS = SystemTable->BootServices;\r
-\r
//\r
// SMM driver depends on the SMM BASE protocol.\r
// the SMM driver must be success to locate protocol.\r
// \r
- ASSERT (mBS != NULL);\r
- Status = mBS->LocateProtocol (&gEfiSmmBaseProtocolGuid, NULL, (VOID **) &mSmmBase);\r
+ Status = gBS->LocateProtocol (&gEfiSmmBaseProtocolGuid, NULL, (VOID **) &mSmmBase);\r
if (!EFI_ERROR (Status)) {\r
mSmmBase->InSmm (mSmmBase, &mInSmm);\r
if (mInSmm) {\r
mRT = gRT;\r
mInSmm = FALSE;\r
\r
- mBS->AllocatePool (EfiRuntimeServicesData, sizeof (EFI_STATUS_CODE_DATA) + EFI_STATUS_CODE_DATA_MAX_SIZE, (VOID **)&mStatusCodeData);\r
+ gBS->AllocatePool (EfiRuntimeServicesData, sizeof (EFI_STATUS_CODE_DATA) + EFI_STATUS_CODE_DATA_MAX_SIZE, (VOID **)&mStatusCodeData);\r
ASSERT (NULL != mStatusCodeData);\r
//\r
// Cache the report status code service\r
//\r
// Register the call back of virtual address change\r
// \r
- Status = mBS->CreateEvent (\r
+ Status = gBS->CreateEvent (\r
EVT_SIGNAL_VIRTUAL_ADDRESS_CHANGE,\r
TPL_NOTIFY,\r
ReportStatusCodeLibVirtualAddressChange,\r
//\r
// Register the call back of virtual address change\r
// \r
- Status = mBS->CreateEvent (\r
+ Status = gBS->CreateEvent (\r
EVT_SIGNAL_EXIT_BOOT_SERVICES,\r
TPL_NOTIFY,\r
ReportStatusCodeLibExitBootServices,\r
//\r
// Close SetVirtualAddressMap () notify function\r
//\r
- ASSERT (mBS != NULL);\r
- Status = mBS->CloseEvent (mVirtualAddressChangeEvent);\r
+ ASSERT (gBS != NULL);\r
+ Status = gBS->CloseEvent (mVirtualAddressChangeEvent);\r
ASSERT_EFI_ERROR (Status);\r
- Status = mBS->CloseEvent (mExitBootServicesEvent);\r
+ Status = gBS->CloseEvent (mExitBootServicesEvent);\r
ASSERT_EFI_ERROR (Status);\r
\r
- mBS->FreePool (mStatusCodeData);\r
+ gBS->FreePool (mStatusCodeData);\r
} else {\r
mSmmBase->SmmFreePool (mSmmBase, mStatusCodeData);\r
}\r