diff --git a/IntelFrameworkModulePkg/Library/SmmRuntimeDxeReportStatusCodeLibFramework/SmmRuntimeDxeSupport.c b/IntelFrameworkModulePkg/Library/SmmRuntimeDxeReportStatusCodeLibFramework/SmmRuntimeDxeSupport.c index f9537211d7..fae6df1041 100644 --- a/IntelFrameworkModulePkg/Library/SmmRuntimeDxeReportStatusCodeLibFramework/SmmRuntimeDxeSupport.c +++ b/IntelFrameworkModulePkg/Library/SmmRuntimeDxeReportStatusCodeLibFramework/SmmRuntimeDxeSupport.c @@ -30,7 +30,7 @@ STATIC EFI_STATUS_CODE_DATA *mStatusCodeData; STATIC -EFI_SMM_BASE_PROTOCOL *mSmmBase; +BOOLEAN mInSmm; STATIC EFI_RUNTIME_SERVICES *mRT; @@ -50,16 +50,11 @@ InternalGetReportStatusCode ( ) { EFI_STATUS_CODE_PROTOCOL *StatusCodeProtocol; - BOOLEAN InSmm; EFI_STATUS Status; - if (mSmmBase) { - mSmmBase->InSmm (mSmmBase, &InSmm); - if (InSmm) { - return (EFI_REPORT_STATUS_CODE) OemHookStatusCodeReport; - } - } - if (mRT->Hdr.Revision < 0x20000) { + if (mInSmm) { + return (EFI_REPORT_STATUS_CODE) OemHookStatusCodeReport; + } else if (mRT->Hdr.Revision < 0x20000) { return ((FRAMEWORK_EFI_RUNTIME_SERVICES*)mRT)->ReportStatusCode; } else if (!mHaveExitedBootServices) { Status = gBS->LocateProtocol (&gEfiStatusCodeRuntimeProtocolGuid, NULL, (VOID**)&StatusCodeProtocol); @@ -89,9 +84,6 @@ ReportStatusCodeLibVirtualAddressChange ( if (NULL != mReportStatusCode) { mRT->ConvertPointer (0, (VOID **) &mReportStatusCode); } - if (NULL != mSmmBase) { - mRT->ConvertPointer (0, (VOID **) &mSmmBase); - } mRT->ConvertPointer (0, (VOID **) &mStatusCodeData); mRT->ConvertPointer (0, (VOID **) &mRT); } @@ -128,20 +120,20 @@ ReportStatusCodeLibConstruct ( IN EFI_SYSTEM_TABLE *SystemTable ) { - EFI_STATUS Status; - BOOLEAN InSmm; + EFI_SMM_BASE_PROTOCOL *SmmBase; + EFI_STATUS Status; // // SMM driver depends on the SMM BASE protocol. // the SMM driver must be success to locate protocol. // ASSERT (gBS != NULL); - Status = gBS->LocateProtocol (&gEfiSmmBaseProtocolGuid, NULL, (VOID **) &mSmmBase); + Status = gBS->LocateProtocol (&gEfiSmmBaseProtocolGuid, NULL, (VOID **) &SmmBase); if (!EFI_ERROR (Status)) { - mSmmBase->InSmm (mSmmBase, &InSmm); - if (InSmm) { - Status = mSmmBase->SmmAllocatePool ( - mSmmBase, + SmmBase->InSmm (SmmBase, &mInSmm); + if (mInSmm) { + Status = SmmBase->SmmAllocatePool ( + SmmBase, EfiRuntimeServicesData, sizeof (EFI_STATUS_CODE_DATA) + EFI_STATUS_CODE_DATA_MAX_SIZE, (VOID **) &mStatusCodeData @@ -156,7 +148,8 @@ ReportStatusCodeLibConstruct ( // Library should not use the gRT directly, since it // may be converted by other library instance. // - mRT = gRT; + mRT = gRT; + mInSmm = FALSE; gBS->AllocatePool (EfiRuntimeServicesData, sizeof (EFI_STATUS_CODE_DATA) + EFI_STATUS_CODE_DATA_MAX_SIZE, (VOID **)&mStatusCodeData); ASSERT (NULL != mStatusCodeData);