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