EFI_STATUS_CODE_DATA *mStatusCodeData;\r
\r
STATIC\r
-EFI_SMM_BASE_PROTOCOL *mSmmBase;\r
+BOOLEAN mInSmm;\r
\r
STATIC\r
EFI_RUNTIME_SERVICES *mRT;\r
)\r
{\r
EFI_STATUS_CODE_PROTOCOL *StatusCodeProtocol;\r
- BOOLEAN InSmm;\r
EFI_STATUS Status;\r
\r
- if (mSmmBase) {\r
- mSmmBase->InSmm (mSmmBase, &InSmm);\r
- if (InSmm) {\r
- return (EFI_REPORT_STATUS_CODE) OemHookStatusCodeReport;\r
- }\r
- }\r
- if (mRT->Hdr.Revision < 0x20000) {\r
+ if (mInSmm) {\r
+ return (EFI_REPORT_STATUS_CODE) OemHookStatusCodeReport;\r
+ } else if (mRT->Hdr.Revision < 0x20000) {\r
return ((FRAMEWORK_EFI_RUNTIME_SERVICES*)mRT)->ReportStatusCode;\r
} else if (!mHaveExitedBootServices) {\r
Status = gBS->LocateProtocol (&gEfiStatusCodeRuntimeProtocolGuid, NULL, (VOID**)&StatusCodeProtocol);\r
if (NULL != mReportStatusCode) {\r
mRT->ConvertPointer (0, (VOID **) &mReportStatusCode);\r
}\r
- if (NULL != mSmmBase) {\r
- mRT->ConvertPointer (0, (VOID **) &mSmmBase);\r
- }\r
mRT->ConvertPointer (0, (VOID **) &mStatusCodeData);\r
mRT->ConvertPointer (0, (VOID **) &mRT);\r
}\r
IN EFI_SYSTEM_TABLE *SystemTable\r
)\r
{\r
- EFI_STATUS Status;\r
- BOOLEAN InSmm;\r
+ EFI_SMM_BASE_PROTOCOL *SmmBase;\r
+ EFI_STATUS Status;\r
\r
//\r
// SMM driver depends on the SMM BASE protocol.\r
// the SMM driver must be success to locate protocol.\r
// \r
ASSERT (gBS != NULL);\r
- Status = gBS->LocateProtocol (&gEfiSmmBaseProtocolGuid, NULL, (VOID **) &mSmmBase);\r
+ Status = gBS->LocateProtocol (&gEfiSmmBaseProtocolGuid, NULL, (VOID **) &SmmBase);\r
if (!EFI_ERROR (Status)) {\r
- mSmmBase->InSmm (mSmmBase, &InSmm);\r
- if (InSmm) {\r
- Status = mSmmBase->SmmAllocatePool (\r
- mSmmBase,\r
+ SmmBase->InSmm (SmmBase, &mInSmm);\r
+ if (mInSmm) {\r
+ Status = SmmBase->SmmAllocatePool (\r
+ SmmBase,\r
EfiRuntimeServicesData, \r
sizeof (EFI_STATUS_CODE_DATA) + EFI_STATUS_CODE_DATA_MAX_SIZE, \r
(VOID **) &mStatusCodeData\r
// Library should not use the gRT directly, since it\r
// may be converted by other library instance.\r
// \r
- mRT = gRT;\r
+ mRT = gRT;\r
+ mInSmm = FALSE;\r
\r
gBS->AllocatePool (EfiRuntimeServicesData, sizeof (EFI_STATUS_CODE_DATA) + EFI_STATUS_CODE_DATA_MAX_SIZE, (VOID **)&mStatusCodeData);\r
ASSERT (NULL != mStatusCodeData);\r