From 404d4e5c6070f75863d465419570b973fba5ac8a Mon Sep 17 00:00:00 2001 From: yshang1 Date: Mon, 18 Feb 2008 07:28:27 +0000 Subject: [PATCH] Update the library to compliant with SMMCis 0.91 and 0.9 both. 0.91 requires the InSmm() could not be invoked in runtime. git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@4699 6f19259b-4bc3-4df7-8a09-765794883524 --- .../SmmRuntimeDxeSupport.c | 33 ++++++++----------- 1 file changed, 13 insertions(+), 20 deletions(-) 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); -- 2.39.2