diff options
author | qwang12 <qwang12@6f19259b-4bc3-4df7-8a09-765794883524> | 2008-09-22 10:20:41 +0000 |
---|---|---|
committer | qwang12 <qwang12@6f19259b-4bc3-4df7-8a09-765794883524> | 2008-09-22 10:20:41 +0000 |
commit | 9556741cbf5409ce14a63aee2cf520d24993e92b (patch) | |
tree | 1c38b2ed0bdce63b50afb0a8830868491fc18b62 /IntelFrameworkModulePkg | |
parent | 834a2e41fb7e3b3aadd0040e1b684caf01f4f4d2 (diff) | |
download | edk2-9556741cbf5409ce14a63aee2cf520d24993e92b.zip edk2-9556741cbf5409ce14a63aee2cf520d24993e92b.tar.gz edk2-9556741cbf5409ce14a63aee2cf520d24993e92b.tar.bz2 |
1) Replace mBS with gBS from UefiBootServicesTablePointer Lib to avoid library instance to cache too many copies of Boot Service Pointer.
2) Check gBS before make call using it.
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@5944 6f19259b-4bc3-4df7-8a09-765794883524
Diffstat (limited to 'IntelFrameworkModulePkg')
3 files changed, 19 insertions, 18 deletions
diff --git a/IntelFrameworkModulePkg/Library/SmmRuntimeDxeReportStatusCodeLibFramework/ReportStatusCodeLibInternal.h b/IntelFrameworkModulePkg/Library/SmmRuntimeDxeReportStatusCodeLibFramework/ReportStatusCodeLibInternal.h index de0dab9..c64e49b 100644 --- a/IntelFrameworkModulePkg/Library/SmmRuntimeDxeReportStatusCodeLibFramework/ReportStatusCodeLibInternal.h +++ b/IntelFrameworkModulePkg/Library/SmmRuntimeDxeReportStatusCodeLibFramework/ReportStatusCodeLibInternal.h @@ -23,6 +23,7 @@ #include <Library/BaseMemoryLib.h>
#include <Library/PcdLib.h>
#include <Library/UefiRuntimeServicesTableLib.h>
+#include <Library/UefiBootServicesTableLib.h>
#include <Guid/StatusCodeDataTypeId.h>
#include <Protocol/StatusCode.h>
diff --git a/IntelFrameworkModulePkg/Library/SmmRuntimeDxeReportStatusCodeLibFramework/SmmRuntimeDxeReportStatusCodeLibFramework.inf b/IntelFrameworkModulePkg/Library/SmmRuntimeDxeReportStatusCodeLibFramework/SmmRuntimeDxeReportStatusCodeLibFramework.inf index c2b5646..87804eb 100644 --- a/IntelFrameworkModulePkg/Library/SmmRuntimeDxeReportStatusCodeLibFramework/SmmRuntimeDxeReportStatusCodeLibFramework.inf +++ b/IntelFrameworkModulePkg/Library/SmmRuntimeDxeReportStatusCodeLibFramework/SmmRuntimeDxeReportStatusCodeLibFramework.inf @@ -49,6 +49,7 @@ BaseLib
DebugLib
UefiRuntimeServicesTableLib
+ UefiBootServicesTableLib
OemHookStatusCodeLib
[Guids]
diff --git a/IntelFrameworkModulePkg/Library/SmmRuntimeDxeReportStatusCodeLibFramework/SmmRuntimeDxeSupport.c b/IntelFrameworkModulePkg/Library/SmmRuntimeDxeReportStatusCodeLibFramework/SmmRuntimeDxeSupport.c index f4dc2f0..5e64c42 100644 --- a/IntelFrameworkModulePkg/Library/SmmRuntimeDxeReportStatusCodeLibFramework/SmmRuntimeDxeSupport.c +++ b/IntelFrameworkModulePkg/Library/SmmRuntimeDxeReportStatusCodeLibFramework/SmmRuntimeDxeSupport.c @@ -38,9 +38,6 @@ STATIC EFI_RUNTIME_SERVICES *mRT;
STATIC
-EFI_BOOT_SERVICES *mBS;
-
-STATIC
BOOLEAN mHaveExitedBootServices = FALSE;
/**
@@ -59,12 +56,17 @@ InternalGetReportStatusCode ( if (mInSmm) {
return (EFI_REPORT_STATUS_CODE) OemHookStatusCodeReport;
- } else if (mRT->Hdr.Revision < 0x20000) {
+ } else if (mRT != NULL && mRT->Hdr.Revision < 0x20000) {
return ((FRAMEWORK_EFI_RUNTIME_SERVICES*)mRT)->ReportStatusCode;
} else if (!mHaveExitedBootServices) {
- Status = mBS->LocateProtocol (&gEfiStatusCodeRuntimeProtocolGuid, NULL, (VOID**)&StatusCodeProtocol);
- if (!EFI_ERROR (Status) && StatusCodeProtocol != NULL) {
- return StatusCodeProtocol->ReportStatusCode;
+ //
+ // Check gBS just in case. ReportStatusCode is called before gBS is initialized.
+ //
+ if (gBS != NULL) {
+ Status = gBS->LocateProtocol (&gEfiStatusCodeRuntimeProtocolGuid, NULL, (VOID**)&StatusCodeProtocol);
+ if (!EFI_ERROR (Status) && StatusCodeProtocol != NULL) {
+ return StatusCodeProtocol->ReportStatusCode;
+ }
}
}
@@ -127,14 +129,11 @@ ReportStatusCodeLibConstruct ( {
EFI_STATUS Status;
- mBS = SystemTable->BootServices;
-
//
// SMM driver depends on the SMM BASE protocol.
// the SMM driver must be success to locate protocol.
//
- ASSERT (mBS != NULL);
- Status = mBS->LocateProtocol (&gEfiSmmBaseProtocolGuid, NULL, (VOID **) &mSmmBase);
+ Status = gBS->LocateProtocol (&gEfiSmmBaseProtocolGuid, NULL, (VOID **) &mSmmBase);
if (!EFI_ERROR (Status)) {
mSmmBase->InSmm (mSmmBase, &mInSmm);
if (mInSmm) {
@@ -157,7 +156,7 @@ ReportStatusCodeLibConstruct ( mRT = gRT;
mInSmm = FALSE;
- mBS->AllocatePool (EfiRuntimeServicesData, sizeof (EFI_STATUS_CODE_DATA) + EFI_STATUS_CODE_DATA_MAX_SIZE, (VOID **)&mStatusCodeData);
+ gBS->AllocatePool (EfiRuntimeServicesData, sizeof (EFI_STATUS_CODE_DATA) + EFI_STATUS_CODE_DATA_MAX_SIZE, (VOID **)&mStatusCodeData);
ASSERT (NULL != mStatusCodeData);
//
// Cache the report status code service
@@ -167,7 +166,7 @@ ReportStatusCodeLibConstruct ( //
// Register the call back of virtual address change
//
- Status = mBS->CreateEvent (
+ Status = gBS->CreateEvent (
EVT_SIGNAL_VIRTUAL_ADDRESS_CHANGE,
TPL_NOTIFY,
ReportStatusCodeLibVirtualAddressChange,
@@ -180,7 +179,7 @@ ReportStatusCodeLibConstruct ( //
// Register the call back of virtual address change
//
- Status = mBS->CreateEvent (
+ Status = gBS->CreateEvent (
EVT_SIGNAL_EXIT_BOOT_SERVICES,
TPL_NOTIFY,
ReportStatusCodeLibExitBootServices,
@@ -212,13 +211,13 @@ ReportStatusCodeLibDestruct ( //
// Close SetVirtualAddressMap () notify function
//
- ASSERT (mBS != NULL);
- Status = mBS->CloseEvent (mVirtualAddressChangeEvent);
+ ASSERT (gBS != NULL);
+ Status = gBS->CloseEvent (mVirtualAddressChangeEvent);
ASSERT_EFI_ERROR (Status);
- Status = mBS->CloseEvent (mExitBootServicesEvent);
+ Status = gBS->CloseEvent (mExitBootServicesEvent);
ASSERT_EFI_ERROR (Status);
- mBS->FreePool (mStatusCodeData);
+ gBS->FreePool (mStatusCodeData);
} else {
mSmmBase->SmmFreePool (mSmmBase, mStatusCodeData);
}
|