]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Library/SmmLockBoxLib/SmmLockBoxSmmLib.c
MdeModulePkg SmmLockBoxSmmLib: Add DESTRUCTOR SmmLockBoxSmmDestructor
[mirror_edk2.git] / MdeModulePkg / Library / SmmLockBoxLib / SmmLockBoxSmmLib.c
index 38be18560fe9a2050495302ade0f2fffcabf7f0e..4960df755534da4fdbb9fc72bfc561e6ffa101b3 100644 (file)
@@ -30,6 +30,8 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
 SMM_LOCK_BOX_CONTEXT mSmmLockBoxContext;\r
 LIST_ENTRY           mLockBoxQueue = INITIALIZE_LIST_HEAD_VARIABLE (mLockBoxQueue);\r
 \r
+BOOLEAN              mSmmConfigurationTableInstalled = FALSE;\r
+\r
 /**\r
   This function return SmmLockBox context from SMST.\r
 \r
@@ -114,6 +116,7 @@ SmmLockBoxSmmConstructor (
                     sizeof(mSmmLockBoxContext)\r
                     );\r
   ASSERT_EFI_ERROR (Status);\r
+  mSmmConfigurationTableInstalled = TRUE;\r
 \r
   DEBUG ((EFI_D_INFO, "SmmLockBoxSmmLib SmmLockBoxContext - %x\n", (UINTN)&mSmmLockBoxContext));\r
   DEBUG ((EFI_D_INFO, "SmmLockBoxSmmLib LockBoxDataAddress - %x\n", (UINTN)&mLockBoxQueue));\r
@@ -122,6 +125,42 @@ SmmLockBoxSmmConstructor (
   return Status;\r
 }\r
 \r
+/**\r
+  Destructor for SmmLockBox library.\r
+  This is used to uninstall SmmLockBoxCommunication configuration table\r
+  if it has been installed in Constructor.\r
+\r
+  @param[in] ImageHandle    Image handle of this driver.\r
+  @param[in] SystemTable    A Pointer to the EFI System Table.\r
+\r
+  @retval EFI_SUCEESS       The destructor always returns EFI_SUCCESS.\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+SmmLockBoxSmmDestructor (\r
+  IN EFI_HANDLE         ImageHandle,\r
+  IN EFI_SYSTEM_TABLE   *SystemTable\r
+  )\r
+{\r
+  EFI_STATUS            Status;\r
+\r
+  DEBUG ((EFI_D_INFO, "SmmLockBoxSmmLib SmmLockBoxSmmDestructor in %a module\n", gEfiCallerBaseName));\r
+\r
+  if (mSmmConfigurationTableInstalled) {\r
+    Status = gSmst->SmmInstallConfigurationTable (\r
+                      gSmst,\r
+                      &gEfiSmmLockBoxCommunicationGuid,\r
+                      NULL,\r
+                      0\r
+                      );\r
+    ASSERT_EFI_ERROR (Status);\r
+    DEBUG ((EFI_D_INFO, "SmmLockBoxSmmLib uninstall SmmLockBoxCommunication configuration table\n"));\r
+  }\r
+\r
+  return EFI_SUCCESS;\r
+}\r
+\r
 /**\r
   This function return SmmLockBox queue address.\r
 \r