]> git.proxmox.com Git - mirror_edk2.git/commitdiff
1) Replace mBS with gBS from UefiBootServicesTablePointer Lib to avoid library instan...
authorqwang12 <qwang12@6f19259b-4bc3-4df7-8a09-765794883524>
Mon, 22 Sep 2008 10:20:41 +0000 (10:20 +0000)
committerqwang12 <qwang12@6f19259b-4bc3-4df7-8a09-765794883524>
Mon, 22 Sep 2008 10:20:41 +0000 (10:20 +0000)
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

IntelFrameworkModulePkg/Library/SmmRuntimeDxeReportStatusCodeLibFramework/ReportStatusCodeLibInternal.h
IntelFrameworkModulePkg/Library/SmmRuntimeDxeReportStatusCodeLibFramework/SmmRuntimeDxeReportStatusCodeLibFramework.inf
IntelFrameworkModulePkg/Library/SmmRuntimeDxeReportStatusCodeLibFramework/SmmRuntimeDxeSupport.c

index de0dab9f4adf79c1d641fbdba948247abff2cc90..c64e49b1bafeee9b9e3f0dee9160ba02f9f88b77 100644 (file)
@@ -23,6 +23,7 @@
 #include <Library/BaseMemoryLib.h>\r
 #include <Library/PcdLib.h>\r
 #include <Library/UefiRuntimeServicesTableLib.h>\r
+#include <Library/UefiBootServicesTableLib.h>\r
 \r
 #include <Guid/StatusCodeDataTypeId.h>\r
 #include <Protocol/StatusCode.h>\r
index f4dc2f0eb94a1572fde581d11e99464f93866ca3..5e64c42c9ea43ef922073c73ddf8b795551f1022 100644 (file)
@@ -37,9 +37,6 @@ EFI_SMM_BASE_PROTOCOL *mSmmBase;
 STATIC\r
 EFI_RUNTIME_SERVICES  *mRT;\r
 \r
-STATIC\r
-EFI_BOOT_SERVICES     *mBS;\r
-\r
 STATIC\r
 BOOLEAN               mHaveExitedBootServices = FALSE;\r
 \r
@@ -59,12 +56,17 @@ InternalGetReportStatusCode (
 \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
@@ -127,14 +129,11 @@ ReportStatusCodeLibConstruct (
 {\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
@@ -157,7 +156,7 @@ ReportStatusCodeLibConstruct (
   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
@@ -167,7 +166,7 @@ ReportStatusCodeLibConstruct (
   //\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
@@ -180,7 +179,7 @@ ReportStatusCodeLibConstruct (
   //\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
@@ -212,13 +211,13 @@ ReportStatusCodeLibDestruct (
     //\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