From 6c128c65b5ec0e5b8b5a0ccb165f3afd29e485f8 Mon Sep 17 00:00:00 2001 From: Guo Mang Date: Wed, 2 Aug 2017 09:54:47 +0800 Subject: Remove core packages since we can get them from edk2 repository Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Guo Mang --- .../Library/SmmLockBoxLib/SmmLockBoxDxeLib.c | 455 ------------- .../Library/SmmLockBoxLib/SmmLockBoxDxeLib.inf | 50 -- .../Library/SmmLockBoxLib/SmmLockBoxDxeLib.uni | Bin 1608 -> 0 bytes .../Library/SmmLockBoxLib/SmmLockBoxLibPrivate.h | 54 -- .../Library/SmmLockBoxLib/SmmLockBoxPeiLib.c | 741 --------------------- .../Library/SmmLockBoxLib/SmmLockBoxPeiLib.inf | 59 -- .../Library/SmmLockBoxLib/SmmLockBoxPeiLib.uni | Bin 1608 -> 0 bytes .../Library/SmmLockBoxLib/SmmLockBoxSmmLib.c | 552 --------------- .../Library/SmmLockBoxLib/SmmLockBoxSmmLib.inf | 49 -- .../Library/SmmLockBoxLib/SmmLockBoxSmmLib.uni | Bin 1608 -> 0 bytes 10 files changed, 1960 deletions(-) delete mode 100644 MdeModulePkg/Library/SmmLockBoxLib/SmmLockBoxDxeLib.c delete mode 100644 MdeModulePkg/Library/SmmLockBoxLib/SmmLockBoxDxeLib.inf delete mode 100644 MdeModulePkg/Library/SmmLockBoxLib/SmmLockBoxDxeLib.uni delete mode 100644 MdeModulePkg/Library/SmmLockBoxLib/SmmLockBoxLibPrivate.h delete mode 100644 MdeModulePkg/Library/SmmLockBoxLib/SmmLockBoxPeiLib.c delete mode 100644 MdeModulePkg/Library/SmmLockBoxLib/SmmLockBoxPeiLib.inf delete mode 100644 MdeModulePkg/Library/SmmLockBoxLib/SmmLockBoxPeiLib.uni delete mode 100644 MdeModulePkg/Library/SmmLockBoxLib/SmmLockBoxSmmLib.c delete mode 100644 MdeModulePkg/Library/SmmLockBoxLib/SmmLockBoxSmmLib.inf delete mode 100644 MdeModulePkg/Library/SmmLockBoxLib/SmmLockBoxSmmLib.uni (limited to 'MdeModulePkg/Library/SmmLockBoxLib') diff --git a/MdeModulePkg/Library/SmmLockBoxLib/SmmLockBoxDxeLib.c b/MdeModulePkg/Library/SmmLockBoxLib/SmmLockBoxDxeLib.c deleted file mode 100644 index 9659f014e9..0000000000 --- a/MdeModulePkg/Library/SmmLockBoxLib/SmmLockBoxDxeLib.c +++ /dev/null @@ -1,455 +0,0 @@ -/** @file - -Copyright (c) 2010, Intel Corporation. All rights reserved.
- -This program and the accompanying materials -are licensed and made available under the terms and conditions -of the BSD License which accompanies this distribution. The -full text of the license may be found at -http://opensource.org/licenses/bsd-license.php - -THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, -WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. - -**/ - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "SmmLockBoxLibPrivate.h" - -/** - This function will save confidential information to lockbox. - - @param Guid the guid to identify the confidential information - @param Buffer the address of the confidential information - @param Length the length of the confidential information - - @retval RETURN_SUCCESS the information is saved successfully. - @retval RETURN_INVALID_PARAMETER the Guid is NULL, or Buffer is NULL, or Length is 0 - @retval RETURN_ALREADY_STARTED the requested GUID already exist. - @retval RETURN_OUT_OF_RESOURCES no enough resource to save the information. - @retval RETURN_ACCESS_DENIED it is too late to invoke this interface - @retval RETURN_NOT_STARTED it is too early to invoke this interface - @retval RETURN_UNSUPPORTED the service is not supported by implementaion. -**/ -RETURN_STATUS -EFIAPI -SaveLockBox ( - IN GUID *Guid, - IN VOID *Buffer, - IN UINTN Length - ) -{ - EFI_STATUS Status; - EFI_SMM_COMMUNICATION_PROTOCOL *SmmCommunication; - EFI_SMM_LOCK_BOX_PARAMETER_SAVE *LockBoxParameterSave; - EFI_SMM_COMMUNICATE_HEADER *CommHeader; - UINT8 CommBuffer[sizeof(EFI_GUID) + sizeof(UINTN) + sizeof(EFI_SMM_LOCK_BOX_PARAMETER_SAVE)]; - UINTN CommSize; - - DEBUG ((EFI_D_INFO, "SmmLockBoxDxeLib SaveLockBox - Enter\n")); - - // - // Basic check - // - if ((Guid == NULL) || (Buffer == NULL) || (Length == 0)) { - return EFI_INVALID_PARAMETER; - } - - // - // Get needed resource - // - Status = gBS->LocateProtocol ( - &gEfiSmmCommunicationProtocolGuid, - NULL, - (VOID **)&SmmCommunication - ); - if (EFI_ERROR (Status)) { - return EFI_NOT_STARTED; - } - - // - // Prepare parameter - // - CommHeader = (EFI_SMM_COMMUNICATE_HEADER *)&CommBuffer[0]; - CopyMem (&CommHeader->HeaderGuid, &gEfiSmmLockBoxCommunicationGuid, sizeof(gEfiSmmLockBoxCommunicationGuid)); - CommHeader->MessageLength = sizeof(*LockBoxParameterSave); - - LockBoxParameterSave = (EFI_SMM_LOCK_BOX_PARAMETER_SAVE *)&CommBuffer[OFFSET_OF (EFI_SMM_COMMUNICATE_HEADER, Data)]; - LockBoxParameterSave->Header.Command = EFI_SMM_LOCK_BOX_COMMAND_SAVE; - LockBoxParameterSave->Header.DataLength = sizeof(*LockBoxParameterSave); - LockBoxParameterSave->Header.ReturnStatus = (UINT64)-1; - CopyMem (&LockBoxParameterSave->Guid, Guid, sizeof(*Guid)); - LockBoxParameterSave->Buffer = (EFI_PHYSICAL_ADDRESS)(UINTN)Buffer; - LockBoxParameterSave->Length = (UINT64)Length; - - // - // Send command - // - CommSize = sizeof(CommBuffer); - Status = SmmCommunication->Communicate ( - SmmCommunication, - &CommBuffer[0], - &CommSize - ); - ASSERT_EFI_ERROR (Status); - - Status = (EFI_STATUS)LockBoxParameterSave->Header.ReturnStatus; - - DEBUG ((EFI_D_INFO, "SmmLockBoxDxeLib SaveLockBox - Exit (%r)\n", Status)); - - // - // Done - // - return Status; -} - -/** - This function will set lockbox attributes. - - @param Guid the guid to identify the confidential information - @param Attributes the attributes of the lockbox - - @retval RETURN_SUCCESS the information is saved successfully. - @retval RETURN_INVALID_PARAMETER attributes is invalid. - @retval RETURN_NOT_FOUND the requested GUID not found. - @retval RETURN_ACCESS_DENIED it is too late to invoke this interface - @retval RETURN_NOT_STARTED it is too early to invoke this interface - @retval RETURN_UNSUPPORTED the service is not supported by implementaion. -**/ -RETURN_STATUS -EFIAPI -SetLockBoxAttributes ( - IN GUID *Guid, - IN UINT64 Attributes - ) -{ - EFI_STATUS Status; - EFI_SMM_COMMUNICATION_PROTOCOL *SmmCommunication; - EFI_SMM_LOCK_BOX_PARAMETER_SET_ATTRIBUTES *LockBoxParameterSetAttributes; - EFI_SMM_COMMUNICATE_HEADER *CommHeader; - UINT8 CommBuffer[sizeof(EFI_GUID) + sizeof(UINTN) + sizeof(EFI_SMM_LOCK_BOX_PARAMETER_SET_ATTRIBUTES)]; - UINTN CommSize; - - DEBUG ((EFI_D_INFO, "SmmLockBoxDxeLib SetLockBoxAttributes - Enter\n")); - - // - // Basic check - // - if ((Guid == NULL) || - ((Attributes & ~LOCK_BOX_ATTRIBUTE_RESTORE_IN_PLACE) != 0)) { - return EFI_INVALID_PARAMETER; - } - - // - // Get needed resource - // - Status = gBS->LocateProtocol ( - &gEfiSmmCommunicationProtocolGuid, - NULL, - (VOID **)&SmmCommunication - ); - if (EFI_ERROR (Status)) { - return EFI_NOT_STARTED; - } - - // - // Prepare parameter - // - CommHeader = (EFI_SMM_COMMUNICATE_HEADER *)&CommBuffer[0]; - CopyMem (&CommHeader->HeaderGuid, &gEfiSmmLockBoxCommunicationGuid, sizeof(gEfiSmmLockBoxCommunicationGuid)); - CommHeader->MessageLength = sizeof(*LockBoxParameterSetAttributes); - - LockBoxParameterSetAttributes = (EFI_SMM_LOCK_BOX_PARAMETER_SET_ATTRIBUTES *)&CommBuffer[OFFSET_OF (EFI_SMM_COMMUNICATE_HEADER, Data)]; - LockBoxParameterSetAttributes->Header.Command = EFI_SMM_LOCK_BOX_COMMAND_SET_ATTRIBUTES; - LockBoxParameterSetAttributes->Header.DataLength = sizeof(*LockBoxParameterSetAttributes); - LockBoxParameterSetAttributes->Header.ReturnStatus = (UINT64)-1; - CopyMem (&LockBoxParameterSetAttributes->Guid, Guid, sizeof(*Guid)); - LockBoxParameterSetAttributes->Attributes = (UINT64)Attributes; - - // - // Send command - // - CommSize = sizeof(CommBuffer); - Status = SmmCommunication->Communicate ( - SmmCommunication, - &CommBuffer[0], - &CommSize - ); - ASSERT_EFI_ERROR (Status); - - Status = (EFI_STATUS)LockBoxParameterSetAttributes->Header.ReturnStatus; - - DEBUG ((EFI_D_INFO, "SmmLockBoxDxeLib SetLockBoxAttributes - Exit (%r)\n", Status)); - - // - // Done - // - return Status; -} - -/** - This function will update confidential information to lockbox. - - @param Guid the guid to identify the original confidential information - @param Offset the offset of the original confidential information - @param Buffer the address of the updated confidential information - @param Length the length of the updated confidential information - - @retval RETURN_SUCCESS the information is saved successfully. - @retval RETURN_INVALID_PARAMETER the Guid is NULL, or Buffer is NULL, or Length is 0. - @retval RETURN_NOT_FOUND the requested GUID not found. - @retval RETURN_BUFFER_TOO_SMALL the original buffer to too small to hold new information. - @retval RETURN_ACCESS_DENIED it is too late to invoke this interface - @retval RETURN_NOT_STARTED it is too early to invoke this interface - @retval RETURN_UNSUPPORTED the service is not supported by implementaion. -**/ -RETURN_STATUS -EFIAPI -UpdateLockBox ( - IN GUID *Guid, - IN UINTN Offset, - IN VOID *Buffer, - IN UINTN Length - ) -{ - EFI_STATUS Status; - EFI_SMM_COMMUNICATION_PROTOCOL *SmmCommunication; - EFI_SMM_LOCK_BOX_PARAMETER_UPDATE *LockBoxParameterUpdate; - EFI_SMM_COMMUNICATE_HEADER *CommHeader; - UINT8 CommBuffer[sizeof(EFI_GUID) + sizeof(UINTN) + sizeof(EFI_SMM_LOCK_BOX_PARAMETER_UPDATE)]; - UINTN CommSize; - - DEBUG ((EFI_D_INFO, "SmmLockBoxDxeLib UpdateLockBox - Enter\n")); - - // - // Basic check - // - if ((Guid == NULL) || (Buffer == NULL) || (Length == 0)) { - return EFI_INVALID_PARAMETER; - } - - // - // Get needed resource - // - Status = gBS->LocateProtocol ( - &gEfiSmmCommunicationProtocolGuid, - NULL, - (VOID **)&SmmCommunication - ); - if (EFI_ERROR (Status)) { - return EFI_NOT_STARTED; - } - - // - // Prepare parameter - // - CommHeader = (EFI_SMM_COMMUNICATE_HEADER *)&CommBuffer[0]; - CopyMem (&CommHeader->HeaderGuid, &gEfiSmmLockBoxCommunicationGuid, sizeof(gEfiSmmLockBoxCommunicationGuid)); - CommHeader->MessageLength = sizeof(*LockBoxParameterUpdate); - - LockBoxParameterUpdate = (EFI_SMM_LOCK_BOX_PARAMETER_UPDATE *)(UINTN)&CommBuffer[OFFSET_OF (EFI_SMM_COMMUNICATE_HEADER, Data)]; - LockBoxParameterUpdate->Header.Command = EFI_SMM_LOCK_BOX_COMMAND_UPDATE; - LockBoxParameterUpdate->Header.DataLength = sizeof(*LockBoxParameterUpdate); - LockBoxParameterUpdate->Header.ReturnStatus = (UINT64)-1; - CopyMem (&LockBoxParameterUpdate->Guid, Guid, sizeof(*Guid)); - LockBoxParameterUpdate->Offset = (UINT64)Offset; - LockBoxParameterUpdate->Buffer = (EFI_PHYSICAL_ADDRESS)(UINTN)Buffer; - LockBoxParameterUpdate->Length = (UINT64)Length; - - // - // Send command - // - CommSize = sizeof(CommBuffer); - Status = SmmCommunication->Communicate ( - SmmCommunication, - &CommBuffer[0], - &CommSize - ); - ASSERT_EFI_ERROR (Status); - - Status = (EFI_STATUS)LockBoxParameterUpdate->Header.ReturnStatus; - - DEBUG ((EFI_D_INFO, "SmmLockBoxDxeLib UpdateLockBox - Exit (%r)\n", Status)); - - // - // Done - // - return Status; -} - -/** - This function will restore confidential information from lockbox. - - @param Guid the guid to identify the confidential information - @param Buffer the address of the restored confidential information - NULL means restored to original address, Length MUST be NULL at same time. - @param Length the length of the restored confidential information - - @retval RETURN_SUCCESS the information is restored successfully. - @retval RETURN_INVALID_PARAMETER the Guid is NULL, or one of Buffer and Length is NULL. - @retval RETURN_WRITE_PROTECTED Buffer and Length are NULL, but the LockBox has no - LOCK_BOX_ATTRIBUTE_RESTORE_IN_PLACE attribute. - @retval RETURN_BUFFER_TOO_SMALL the Length is too small to hold the confidential information. - @retval RETURN_NOT_FOUND the requested GUID not found. - @retval RETURN_NOT_STARTED it is too early to invoke this interface - @retval RETURN_ACCESS_DENIED not allow to restore to the address - @retval RETURN_UNSUPPORTED the service is not supported by implementaion. -**/ -RETURN_STATUS -EFIAPI -RestoreLockBox ( - IN GUID *Guid, - IN VOID *Buffer, OPTIONAL - IN OUT UINTN *Length OPTIONAL - ) -{ - EFI_STATUS Status; - EFI_SMM_COMMUNICATION_PROTOCOL *SmmCommunication; - EFI_SMM_LOCK_BOX_PARAMETER_RESTORE *LockBoxParameterRestore; - EFI_SMM_COMMUNICATE_HEADER *CommHeader; - UINT8 CommBuffer[sizeof(EFI_GUID) + sizeof(UINTN) + sizeof(EFI_SMM_LOCK_BOX_PARAMETER_RESTORE)]; - UINTN CommSize; - - DEBUG ((EFI_D_INFO, "SmmLockBoxDxeLib RestoreLockBox - Enter\n")); - - // - // Basic check - // - if ((Guid == NULL) || - ((Buffer == NULL) && (Length != NULL)) || - ((Buffer != NULL) && (Length == NULL))) { - return EFI_INVALID_PARAMETER; - } - - // - // Get needed resource - // - Status = gBS->LocateProtocol ( - &gEfiSmmCommunicationProtocolGuid, - NULL, - (VOID **)&SmmCommunication - ); - if (EFI_ERROR (Status)) { - return EFI_NOT_STARTED; - } - - // - // Prepare parameter - // - CommHeader = (EFI_SMM_COMMUNICATE_HEADER *)&CommBuffer[0]; - CopyMem (&CommHeader->HeaderGuid, &gEfiSmmLockBoxCommunicationGuid, sizeof(gEfiSmmLockBoxCommunicationGuid)); - CommHeader->MessageLength = sizeof(*LockBoxParameterRestore); - - LockBoxParameterRestore = (EFI_SMM_LOCK_BOX_PARAMETER_RESTORE *)&CommBuffer[OFFSET_OF (EFI_SMM_COMMUNICATE_HEADER, Data)]; - LockBoxParameterRestore->Header.Command = EFI_SMM_LOCK_BOX_COMMAND_RESTORE; - LockBoxParameterRestore->Header.DataLength = sizeof(*LockBoxParameterRestore); - LockBoxParameterRestore->Header.ReturnStatus = (UINT64)-1; - CopyMem (&LockBoxParameterRestore->Guid, Guid, sizeof(*Guid)); - LockBoxParameterRestore->Buffer = (EFI_PHYSICAL_ADDRESS)(UINTN)Buffer; - if (Length != NULL) { - LockBoxParameterRestore->Length = (EFI_PHYSICAL_ADDRESS)*Length; - } else { - LockBoxParameterRestore->Length = 0; - } - - // - // Send command - // - CommSize = sizeof(CommBuffer); - Status = SmmCommunication->Communicate ( - SmmCommunication, - &CommBuffer[0], - &CommSize - ); - ASSERT_EFI_ERROR (Status); - - if (Length != NULL) { - *Length = (UINTN)LockBoxParameterRestore->Length; - } - - Status = (EFI_STATUS)LockBoxParameterRestore->Header.ReturnStatus; - - DEBUG ((EFI_D_INFO, "SmmLockBoxDxeLib RestoreLockBox - Exit (%r)\n", Status)); - - // - // Done - // - return Status; -} - -/** - This function will restore confidential information from all lockbox which have RestoreInPlace attribute. - - @retval RETURN_SUCCESS the information is restored successfully. - @retval RETURN_NOT_STARTED it is too early to invoke this interface - @retval RETURN_UNSUPPORTED the service is not supported by implementaion. -**/ -RETURN_STATUS -EFIAPI -RestoreAllLockBoxInPlace ( - VOID - ) -{ - EFI_STATUS Status; - EFI_SMM_COMMUNICATION_PROTOCOL *SmmCommunication; - EFI_SMM_LOCK_BOX_PARAMETER_RESTORE_ALL_IN_PLACE *LockBoxParameterRestoreAllInPlace; - EFI_SMM_COMMUNICATE_HEADER *CommHeader; - UINT8 CommBuffer[sizeof(EFI_GUID) + sizeof(UINTN) + sizeof(EFI_SMM_LOCK_BOX_PARAMETER_RESTORE_ALL_IN_PLACE)]; - UINTN CommSize; - - DEBUG ((EFI_D_INFO, "SmmLockBoxDxeLib RestoreAllLockBoxInPlace - Enter\n")); - - // - // Get needed resource - // - Status = gBS->LocateProtocol ( - &gEfiSmmCommunicationProtocolGuid, - NULL, - (VOID **)&SmmCommunication - ); - if (EFI_ERROR (Status)) { - return EFI_NOT_STARTED; - } - - // - // Prepare parameter - // - CommHeader = (EFI_SMM_COMMUNICATE_HEADER *)&CommBuffer[0]; - CopyMem (&CommHeader->HeaderGuid, &gEfiSmmLockBoxCommunicationGuid, sizeof(gEfiSmmLockBoxCommunicationGuid)); - CommHeader->MessageLength = sizeof(*LockBoxParameterRestoreAllInPlace); - - LockBoxParameterRestoreAllInPlace = (EFI_SMM_LOCK_BOX_PARAMETER_RESTORE_ALL_IN_PLACE *)&CommBuffer[OFFSET_OF (EFI_SMM_COMMUNICATE_HEADER, Data)]; - LockBoxParameterRestoreAllInPlace->Header.Command = EFI_SMM_LOCK_BOX_COMMAND_RESTORE_ALL_IN_PLACE; - LockBoxParameterRestoreAllInPlace->Header.DataLength = sizeof(*LockBoxParameterRestoreAllInPlace); - LockBoxParameterRestoreAllInPlace->Header.ReturnStatus = (UINT64)-1; - - // - // Send command - // - CommSize = sizeof(CommBuffer); - Status = SmmCommunication->Communicate ( - SmmCommunication, - &CommBuffer[0], - &CommSize - ); - ASSERT_EFI_ERROR (Status); - - Status = (EFI_STATUS)LockBoxParameterRestoreAllInPlace->Header.ReturnStatus; - - DEBUG ((EFI_D_INFO, "SmmLockBoxDxeLib RestoreAllLockBoxInPlace - Exit (%r)\n", Status)); - - // - // Done - // - return Status; -} - diff --git a/MdeModulePkg/Library/SmmLockBoxLib/SmmLockBoxDxeLib.inf b/MdeModulePkg/Library/SmmLockBoxLib/SmmLockBoxDxeLib.inf deleted file mode 100644 index 48cdb9c66a..0000000000 --- a/MdeModulePkg/Library/SmmLockBoxLib/SmmLockBoxDxeLib.inf +++ /dev/null @@ -1,50 +0,0 @@ -## @file -# DXE LockBox library instance. -# -# Copyright (c) 2010 - 2014, Intel Corporation. All rights reserved.
-# -# This program and the accompanying materials -# are licensed and made available under the terms and conditions -# of the BSD License which accompanies this distribution. The -# full text of the license may be found at -# http://opensource.org/licenses/bsd-license.php -# -# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, -# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. -# -## - -[Defines] - INF_VERSION = 0x00010005 - BASE_NAME = SmmLockBoxDxeLib - MODULE_UNI_FILE = SmmLockBoxDxeLib.uni - FILE_GUID = 4A0054B4-3CA8-4e1b-9339-9B58D5FBB7D2 - MODULE_TYPE = DXE_DRIVER - VERSION_STRING = 1.0 - LIBRARY_CLASS = LockBoxLib|DXE_DRIVER DXE_RUNTIME_DRIVER UEFI_DRIVER UEFI_APPLICATION - -# -# The following information is for reference only and not required by the build tools. -# -# VALID_ARCHITECTURES = IA32 X64 -# - -[Sources] - SmmLockBoxDxeLib.c - SmmLockBoxLibPrivate.h - -[Packages] - MdePkg/MdePkg.dec - MdeModulePkg/MdeModulePkg.dec - -[LibraryClasses] - UefiBootServicesTableLib - BaseLib - BaseMemoryLib - DebugLib - -[Guids] - gEfiSmmLockBoxCommunicationGuid ## SOMETIMES_CONSUMES ## GUID # Used to do smm communication - -[Protocols] - gEfiSmmCommunicationProtocolGuid ## SOMETIMES_CONSUMES diff --git a/MdeModulePkg/Library/SmmLockBoxLib/SmmLockBoxDxeLib.uni b/MdeModulePkg/Library/SmmLockBoxLib/SmmLockBoxDxeLib.uni deleted file mode 100644 index 78aa7db639..0000000000 Binary files a/MdeModulePkg/Library/SmmLockBoxLib/SmmLockBoxDxeLib.uni and /dev/null differ diff --git a/MdeModulePkg/Library/SmmLockBoxLib/SmmLockBoxLibPrivate.h b/MdeModulePkg/Library/SmmLockBoxLib/SmmLockBoxLibPrivate.h deleted file mode 100644 index 31da89af0f..0000000000 --- a/MdeModulePkg/Library/SmmLockBoxLib/SmmLockBoxLibPrivate.h +++ /dev/null @@ -1,54 +0,0 @@ -/** @file - -Copyright (c) 2010, Intel Corporation. All rights reserved.
- -This program and the accompanying materials -are licensed and made available under the terms and conditions -of the BSD License which accompanies this distribution. The -full text of the license may be found at -http://opensource.org/licenses/bsd-license.php - -THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, -WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. - -**/ - -#ifndef _SMM_LOCK_BOX_LIB_PRIVATE_H_ -#define _SMM_LOCK_BOX_LIB_PRIVATE_H_ - -#include - -#pragma pack(1) - -// -// Below data structure is used for lockbox registration in SMST -// - -#define SMM_LOCK_BOX_SIGNATURE_32 SIGNATURE_64 ('L','O','C','K','B','_','3','2') -#define SMM_LOCK_BOX_SIGNATURE_64 SIGNATURE_64 ('L','O','C','K','B','_','6','4') - -typedef struct { - UINT64 Signature; - EFI_PHYSICAL_ADDRESS LockBoxDataAddress; -} SMM_LOCK_BOX_CONTEXT; - -// -// Below data structure is used for lockbox management -// - -#define SMM_LOCK_BOX_DATA_SIGNATURE SIGNATURE_64 ('L','O','C','K','B','O','X','D') - -typedef struct { - UINT64 Signature; - EFI_GUID Guid; - EFI_PHYSICAL_ADDRESS Buffer; - UINT64 Length; - UINT64 Attributes; - EFI_PHYSICAL_ADDRESS SmramBuffer; - LIST_ENTRY Link; -} SMM_LOCK_BOX_DATA; - -#pragma pack() - -#endif - diff --git a/MdeModulePkg/Library/SmmLockBoxLib/SmmLockBoxPeiLib.c b/MdeModulePkg/Library/SmmLockBoxLib/SmmLockBoxPeiLib.c deleted file mode 100644 index bd3204b195..0000000000 --- a/MdeModulePkg/Library/SmmLockBoxLib/SmmLockBoxPeiLib.c +++ /dev/null @@ -1,741 +0,0 @@ -/** @file - -Copyright (c) 2010 - 2011, Intel Corporation. All rights reserved.
- -This program and the accompanying materials -are licensed and made available under the terms and conditions -of the BSD License which accompanies this distribution. The -full text of the license may be found at -http://opensource.org/licenses/bsd-license.php - -THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, -WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. - -**/ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "SmmLockBoxLibPrivate.h" - -#if defined (MDE_CPU_IA32) -typedef struct _LIST_ENTRY64 LIST_ENTRY64; -struct _LIST_ENTRY64 { - LIST_ENTRY64 *ForwardLink; - UINT32 Reserved1; - LIST_ENTRY64 *BackLink; - UINT32 Reserved2; -}; - -typedef struct { - EFI_TABLE_HEADER Hdr; - UINT64 SmmFirmwareVendor; - UINT64 SmmFirmwareRevision; - UINT64 SmmInstallConfigurationTable; - UINT64 SmmIoMemRead; - UINT64 SmmIoMemWrite; - UINT64 SmmIoIoRead; - UINT64 SmmIoIoWrite; - UINT64 SmmAllocatePool; - UINT64 SmmFreePool; - UINT64 SmmAllocatePages; - UINT64 SmmFreePages; - UINT64 SmmStartupThisAp; - UINT64 CurrentlyExecutingCpu; - UINT64 NumberOfCpus; - UINT64 CpuSaveStateSize; - UINT64 CpuSaveState; - UINT64 NumberOfTableEntries; - UINT64 SmmConfigurationTable; -} EFI_SMM_SYSTEM_TABLE2_64; - -typedef struct { - EFI_GUID VendorGuid; - UINT64 VendorTable; -} EFI_CONFIGURATION_TABLE64; -#endif - -#if defined (MDE_CPU_X64) -typedef LIST_ENTRY LIST_ENTRY64; -typedef EFI_SMM_SYSTEM_TABLE2 EFI_SMM_SYSTEM_TABLE2_64; -typedef EFI_CONFIGURATION_TABLE EFI_CONFIGURATION_TABLE64; -#endif - -/** - This function return first node of LinkList queue. - - @param LockBoxQueue LinkList queue - - @return first node of LinkList queue -**/ -LIST_ENTRY * -InternalInitLinkDxe ( - IN LIST_ENTRY *LinkList - ) -{ - if ((sizeof(UINTN) == sizeof(UINT32)) && (FeaturePcdGet (PcdDxeIplSwitchToLongMode)) ) { - // - // 32 PEI + 64 DXE - // - return (LIST_ENTRY *)(((LIST_ENTRY64 *)LinkList)->ForwardLink); - } else { - return LinkList->ForwardLink; - } -} - -/** - This function return next node of LinkList. - - @param Link LinkList node - - @return next node of LinkList -**/ -LIST_ENTRY * -InternalNextLinkDxe ( - IN LIST_ENTRY *Link - ) -{ - if ((sizeof(UINTN) == sizeof(UINT32)) && (FeaturePcdGet (PcdDxeIplSwitchToLongMode)) ) { - // - // 32 PEI + 64 DXE - // - return (LIST_ENTRY *)(((LIST_ENTRY64 *)Link)->ForwardLink); - } else { - return Link->ForwardLink; - } -} - -/** - This function find LockBox by GUID from SMRAM. - - @param LockBoxQueue The LockBox queue in SMRAM - @param Guid The guid to indentify the LockBox - - @return LockBoxData -**/ -SMM_LOCK_BOX_DATA * -InternalFindLockBoxByGuidFromSmram ( - IN LIST_ENTRY *LockBoxQueue, - IN EFI_GUID *Guid - ) -{ - LIST_ENTRY *Link; - SMM_LOCK_BOX_DATA *LockBox; - - for (Link = InternalInitLinkDxe (LockBoxQueue); - Link != LockBoxQueue; - Link = InternalNextLinkDxe (Link)) { - LockBox = BASE_CR ( - Link, - SMM_LOCK_BOX_DATA, - Link - ); - if (CompareGuid (&LockBox->Guid, Guid)) { - return LockBox; - } - } - return NULL; -} - -/** - Get VendorTable by VendorGuid in Smst. - - @param Signature Signature of SMM_S3_RESUME_STATE - @param Smst SMM system table - @param VendorGuid vendor guid - - @return vendor table. -**/ -VOID * -InternalSmstGetVendorTableByGuid ( - IN UINT64 Signature, - IN EFI_SMM_SYSTEM_TABLE2 *Smst, - IN EFI_GUID *VendorGuid - ) -{ - EFI_CONFIGURATION_TABLE *SmmConfigurationTable; - UINTN NumberOfTableEntries; - UINTN Index; - EFI_SMM_SYSTEM_TABLE2_64 *Smst64; - EFI_CONFIGURATION_TABLE64 *SmmConfigurationTable64; - - if ((sizeof(UINTN) == sizeof(UINT32)) && (FeaturePcdGet (PcdDxeIplSwitchToLongMode))) { - // - // 32 PEI + 64 DXE - // - Smst64 = (EFI_SMM_SYSTEM_TABLE2_64 *)Smst; - SmmConfigurationTable64 = (EFI_CONFIGURATION_TABLE64 *)(UINTN)Smst64->SmmConfigurationTable; - NumberOfTableEntries = (UINTN)Smst64->NumberOfTableEntries; - for (Index = 0; Index < NumberOfTableEntries; Index++) { - if (CompareGuid (&SmmConfigurationTable64[Index].VendorGuid, VendorGuid)) { - return (VOID *)(UINTN)SmmConfigurationTable64[Index].VendorTable; - } - } - return NULL; - } else { - SmmConfigurationTable = Smst->SmmConfigurationTable; - NumberOfTableEntries = Smst->NumberOfTableEntries; - for (Index = 0; Index < NumberOfTableEntries; Index++) { - if (CompareGuid (&SmmConfigurationTable[Index].VendorGuid, VendorGuid)) { - return (VOID *)SmmConfigurationTable[Index].VendorTable; - } - } - return NULL; - } -} - -/** - Get SMM LockBox context. - - @return SMM LockBox context. -**/ -SMM_LOCK_BOX_CONTEXT * -InternalGetSmmLockBoxContext ( - VOID - ) -{ - EFI_SMRAM_DESCRIPTOR *SmramDescriptor; - SMM_S3_RESUME_STATE *SmmS3ResumeState; - VOID *GuidHob; - SMM_LOCK_BOX_CONTEXT *SmmLockBoxContext; - - GuidHob = GetFirstGuidHob (&gEfiAcpiVariableGuid); - ASSERT (GuidHob != NULL); - SmramDescriptor = (EFI_SMRAM_DESCRIPTOR *) GET_GUID_HOB_DATA (GuidHob); - SmmS3ResumeState = (SMM_S3_RESUME_STATE *)(UINTN)SmramDescriptor->CpuStart; - - SmmLockBoxContext = (SMM_LOCK_BOX_CONTEXT *)InternalSmstGetVendorTableByGuid ( - SmmS3ResumeState->Signature, - (EFI_SMM_SYSTEM_TABLE2 *)(UINTN)SmmS3ResumeState->Smst, - &gEfiSmmLockBoxCommunicationGuid - ); - ASSERT (SmmLockBoxContext != NULL); - - return SmmLockBoxContext; -} - -/** - This function will restore confidential information from lockbox in SMRAM directly. - - @param Guid the guid to identify the confidential information - @param Buffer the address of the restored confidential information - NULL means restored to original address, Length MUST be NULL at same time. - @param Length the length of the restored confidential information - - @retval RETURN_SUCCESS the information is restored successfully. - @retval RETURN_WRITE_PROTECTED Buffer and Length are NULL, but the LockBox has no - LOCK_BOX_ATTRIBUTE_RESTORE_IN_PLACE attribute. - @retval RETURN_BUFFER_TOO_SMALL the Length is too small to hold the confidential information. - @retval RETURN_NOT_FOUND the requested GUID not found. -**/ -EFI_STATUS -InternalRestoreLockBoxFromSmram ( - IN GUID *Guid, - IN VOID *Buffer, OPTIONAL - IN OUT UINTN *Length OPTIONAL - ) -{ - PEI_SMM_ACCESS_PPI *SmmAccess; - UINTN Index; - EFI_STATUS Status; - SMM_LOCK_BOX_CONTEXT *SmmLockBoxContext; - LIST_ENTRY *LockBoxQueue; - SMM_LOCK_BOX_DATA *LockBox; - VOID *RestoreBuffer; - - // - // Get needed resource - // - Status = PeiServicesLocatePpi ( - &gPeiSmmAccessPpiGuid, - 0, - NULL, - (VOID **)&SmmAccess - ); - if (!EFI_ERROR (Status)) { - for (Index = 0; !EFI_ERROR (Status); Index++) { - Status = SmmAccess->Open ((EFI_PEI_SERVICES **)GetPeiServicesTablePointer (), SmmAccess, Index); - } - } - - // - // Get LockBox context - // - SmmLockBoxContext = InternalGetSmmLockBoxContext (); - LockBoxQueue = (LIST_ENTRY *)(UINTN)SmmLockBoxContext->LockBoxDataAddress; - - // - // We do NOT check Buffer address in SMRAM, because if SMRAM not locked, we trust the caller. - // - - // - // Restore this, Buffer and Length MUST be both NULL or both non-NULL - // - - // - // Find LockBox - // - LockBox = InternalFindLockBoxByGuidFromSmram (LockBoxQueue, Guid); - if (LockBox == NULL) { - // - // Not found - // - return EFI_NOT_FOUND; - } - - // - // Set RestoreBuffer - // - if (Buffer != NULL) { - // - // restore to new buffer - // - RestoreBuffer = Buffer; - } else { - // - // restore to original buffer - // - if ((LockBox->Attributes & LOCK_BOX_ATTRIBUTE_RESTORE_IN_PLACE) == 0) { - return EFI_WRITE_PROTECTED; - } - RestoreBuffer = (VOID *)(UINTN)LockBox->Buffer; - } - - // - // Set RestoreLength - // - if (Length != NULL) { - if (*Length < (UINTN)LockBox->Length) { - // - // Input buffer is too small to hold all data. - // - *Length = (UINTN)LockBox->Length; - return EFI_BUFFER_TOO_SMALL; - } - *Length = (UINTN)LockBox->Length; - } - - // - // Restore data - // - CopyMem (RestoreBuffer, (VOID *)(UINTN)LockBox->SmramBuffer, (UINTN)LockBox->Length); - - // - // Done - // - return EFI_SUCCESS; -} - -/** - This function will restore confidential information from all lockbox which have RestoreInPlace attribute. - - @retval RETURN_SUCCESS the information is restored successfully. -**/ -EFI_STATUS -InternalRestoreAllLockBoxInPlaceFromSmram ( - VOID - ) -{ - PEI_SMM_ACCESS_PPI *SmmAccess; - UINTN Index; - EFI_STATUS Status; - SMM_LOCK_BOX_CONTEXT *SmmLockBoxContext; - LIST_ENTRY *LockBoxQueue; - SMM_LOCK_BOX_DATA *LockBox; - LIST_ENTRY *Link; - - // - // Get needed resource - // - Status = PeiServicesLocatePpi ( - &gPeiSmmAccessPpiGuid, - 0, - NULL, - (VOID **)&SmmAccess - ); - if (!EFI_ERROR (Status)) { - for (Index = 0; !EFI_ERROR (Status); Index++) { - Status = SmmAccess->Open ((EFI_PEI_SERVICES **)GetPeiServicesTablePointer (), SmmAccess, Index); - } - } - - // - // Get LockBox context - // - SmmLockBoxContext = InternalGetSmmLockBoxContext (); - LockBoxQueue = (LIST_ENTRY *)(UINTN)SmmLockBoxContext->LockBoxDataAddress; - - // - // We do NOT check Buffer address in SMRAM, because if SMRAM not locked, we trust the caller. - // - - // - // Restore all, Buffer and Length MUST be NULL - // - for (Link = InternalInitLinkDxe (LockBoxQueue); - Link != LockBoxQueue; - Link = InternalNextLinkDxe (Link)) { - LockBox = BASE_CR ( - Link, - SMM_LOCK_BOX_DATA, - Link - ); - if ((LockBox->Attributes & LOCK_BOX_ATTRIBUTE_RESTORE_IN_PLACE) != 0) { - // - // Restore data - // - CopyMem ((VOID *)(UINTN)LockBox->Buffer, (VOID *)(UINTN)LockBox->SmramBuffer, (UINTN)LockBox->Length); - } - } - // - // Done - // - return EFI_SUCCESS; -} - -/** - This function will save confidential information to lockbox. - - @param Guid the guid to identify the confidential information - @param Buffer the address of the confidential information - @param Length the length of the confidential information - - @retval RETURN_SUCCESS the information is saved successfully. - @retval RETURN_INVALID_PARAMETER the Guid is NULL, or Buffer is NULL, or Length is 0 - @retval RETURN_ALREADY_STARTED the requested GUID already exist. - @retval RETURN_OUT_OF_RESOURCES no enough resource to save the information. - @retval RETURN_ACCESS_DENIED it is too late to invoke this interface - @retval RETURN_NOT_STARTED it is too early to invoke this interface - @retval RETURN_UNSUPPORTED the service is not supported by implementaion. -**/ -RETURN_STATUS -EFIAPI -SaveLockBox ( - IN GUID *Guid, - IN VOID *Buffer, - IN UINTN Length - ) -{ - ASSERT (FALSE); - - // - // No support to save at PEI phase - // - return RETURN_UNSUPPORTED; -} - -/** - This function will set lockbox attributes. - - @param Guid the guid to identify the confidential information - @param Attributes the attributes of the lockbox - - @retval RETURN_SUCCESS the information is saved successfully. - @retval RETURN_INVALID_PARAMETER attributes is invalid. - @retval RETURN_NOT_FOUND the requested GUID not found. - @retval RETURN_ACCESS_DENIED it is too late to invoke this interface - @retval RETURN_NOT_STARTED it is too early to invoke this interface - @retval RETURN_UNSUPPORTED the service is not supported by implementaion. -**/ -RETURN_STATUS -EFIAPI -SetLockBoxAttributes ( - IN GUID *Guid, - IN UINT64 Attributes - ) -{ - ASSERT (FALSE); - - // - // No support to save at PEI phase - // - return RETURN_UNSUPPORTED; -} - -/** - This function will update confidential information to lockbox. - - @param Guid the guid to identify the original confidential information - @param Offset the offset of the original confidential information - @param Buffer the address of the updated confidential information - @param Length the length of the updated confidential information - - @retval RETURN_SUCCESS the information is saved successfully. - @retval RETURN_INVALID_PARAMETER the Guid is NULL, or Buffer is NULL, or Length is 0. - @retval RETURN_NOT_FOUND the requested GUID not found. - @retval RETURN_BUFFER_TOO_SMALL the original buffer to too small to hold new information. - @retval RETURN_ACCESS_DENIED it is too late to invoke this interface - @retval RETURN_NOT_STARTED it is too early to invoke this interface - @retval RETURN_UNSUPPORTED the service is not supported by implementaion. -**/ -RETURN_STATUS -EFIAPI -UpdateLockBox ( - IN GUID *Guid, - IN UINTN Offset, - IN VOID *Buffer, - IN UINTN Length - ) -{ - ASSERT (FALSE); - - // - // No support to update at PEI phase - // - return RETURN_UNSUPPORTED; -} - -/** - This function will restore confidential information from lockbox. - - @param Guid the guid to identify the confidential information - @param Buffer the address of the restored confidential information - NULL means restored to original address, Length MUST be NULL at same time. - @param Length the length of the restored confidential information - - @retval RETURN_SUCCESS the information is restored successfully. - @retval RETURN_INVALID_PARAMETER the Guid is NULL, or one of Buffer and Length is NULL. - @retval RETURN_WRITE_PROTECTED Buffer and Length are NULL, but the LockBox has no - LOCK_BOX_ATTRIBUTE_RESTORE_IN_PLACE attribute. - @retval RETURN_BUFFER_TOO_SMALL the Length is too small to hold the confidential information. - @retval RETURN_NOT_FOUND the requested GUID not found. - @retval RETURN_NOT_STARTED it is too early to invoke this interface - @retval RETURN_ACCESS_DENIED not allow to restore to the address - @retval RETURN_UNSUPPORTED the service is not supported by implementaion. -**/ -RETURN_STATUS -EFIAPI -RestoreLockBox ( - IN GUID *Guid, - IN VOID *Buffer, OPTIONAL - IN OUT UINTN *Length OPTIONAL - ) -{ - EFI_STATUS Status; - EFI_PEI_SMM_COMMUNICATION_PPI *SmmCommunicationPpi; - EFI_SMM_LOCK_BOX_PARAMETER_RESTORE *LockBoxParameterRestore; - EFI_SMM_COMMUNICATE_HEADER *CommHeader; - UINT8 CommBuffer[sizeof(EFI_GUID) + sizeof(UINT64) + sizeof(EFI_SMM_LOCK_BOX_PARAMETER_RESTORE)]; - UINTN CommSize; - UINT64 MessageLength; - - // - // Please aware that there is UINTN in EFI_SMM_COMMUNICATE_HEADER. It might be UINT64 in DXE, while it is UINT32 in PEI. - // typedef struct { - // EFI_GUID HeaderGuid; - // UINTN MessageLength; - // UINT8 Data[1]; - // } EFI_SMM_COMMUNICATE_HEADER; - // - - DEBUG ((EFI_D_INFO, "SmmLockBoxPeiLib RestoreLockBox - Enter\n")); - - // - // Basic check - // - if ((Guid == NULL) || - ((Buffer == NULL) && (Length != NULL)) || - ((Buffer != NULL) && (Length == NULL))) { - return EFI_INVALID_PARAMETER; - } - - // - // Get needed resource - // - Status = PeiServicesLocatePpi ( - &gEfiPeiSmmCommunicationPpiGuid, - 0, - NULL, - (VOID **)&SmmCommunicationPpi - ); - if (EFI_ERROR (Status)) { - return EFI_NOT_STARTED; - } - - // - // Prepare parameter - // - CommHeader = (EFI_SMM_COMMUNICATE_HEADER *)&CommBuffer[0]; - CopyMem (&CommHeader->HeaderGuid, &gEfiSmmLockBoxCommunicationGuid, sizeof(gEfiSmmLockBoxCommunicationGuid)); - if ((sizeof(UINTN) == sizeof(UINT32)) && (FeaturePcdGet (PcdDxeIplSwitchToLongMode)) ) { - MessageLength = sizeof(*LockBoxParameterRestore); - CopyMem (&CommBuffer[OFFSET_OF (EFI_SMM_COMMUNICATE_HEADER, MessageLength)], &MessageLength, sizeof(MessageLength)); - } else { - CommHeader->MessageLength = sizeof(*LockBoxParameterRestore); - } - - DEBUG ((EFI_D_INFO, "SmmLockBoxPeiLib CommBuffer - %x\n", &CommBuffer[0])); - if ((sizeof(UINTN) == sizeof(UINT32)) && (FeaturePcdGet (PcdDxeIplSwitchToLongMode)) ) { - LockBoxParameterRestore = (EFI_SMM_LOCK_BOX_PARAMETER_RESTORE *)&CommBuffer[OFFSET_OF (EFI_SMM_COMMUNICATE_HEADER, MessageLength) + sizeof(UINT64)]; - } else { - LockBoxParameterRestore = (EFI_SMM_LOCK_BOX_PARAMETER_RESTORE *)&CommBuffer[OFFSET_OF (EFI_SMM_COMMUNICATE_HEADER, MessageLength) + sizeof(UINTN)]; - } - DEBUG ((EFI_D_INFO, "SmmLockBoxPeiLib LockBoxParameterRestore - %x\n", LockBoxParameterRestore)); - LockBoxParameterRestore->Header.Command = EFI_SMM_LOCK_BOX_COMMAND_RESTORE; - LockBoxParameterRestore->Header.DataLength = sizeof(*LockBoxParameterRestore); - LockBoxParameterRestore->Header.ReturnStatus = (UINT64)-1; - if (Guid != 0) { - CopyMem (&LockBoxParameterRestore->Guid, Guid, sizeof(*Guid)); - } else { - ZeroMem (&LockBoxParameterRestore->Guid, sizeof(*Guid)); - } - LockBoxParameterRestore->Buffer = (EFI_PHYSICAL_ADDRESS)(UINTN)Buffer; - if (Length != NULL) { - LockBoxParameterRestore->Length = (EFI_PHYSICAL_ADDRESS)*Length; - } else { - LockBoxParameterRestore->Length = 0; - } - - // - // Send command - // - CommSize = sizeof(CommBuffer); - Status = SmmCommunicationPpi->Communicate ( - SmmCommunicationPpi, - &CommBuffer[0], - &CommSize - ); - if (Status == EFI_NOT_STARTED) { - // - // Pei SMM communication not ready yet, so we access SMRAM directly - // - DEBUG ((EFI_D_INFO, "SmmLockBoxPeiLib Communicate - (%r)\n", Status)); - Status = InternalRestoreLockBoxFromSmram (Guid, Buffer, Length); - LockBoxParameterRestore->Header.ReturnStatus = (UINT64)Status; - if (Length != NULL) { - LockBoxParameterRestore->Length = (UINT64)*Length; - } - } - ASSERT_EFI_ERROR (Status); - - if (Length != NULL) { - *Length = (UINTN)LockBoxParameterRestore->Length; - } - - Status = (EFI_STATUS)LockBoxParameterRestore->Header.ReturnStatus; - if (Status != EFI_SUCCESS) { - // Need or MAX_BIT, because there might be case that SMM is X64 while PEI is IA32. - Status |= MAX_BIT; - } - - DEBUG ((EFI_D_INFO, "SmmLockBoxPeiLib RestoreLockBox - Exit (%r)\n", Status)); - - // - // Done - // - return Status; -} - -/** - This function will restore confidential information from all lockbox which have RestoreInPlace attribute. - - @retval RETURN_SUCCESS the information is restored successfully. - @retval RETURN_NOT_STARTED it is too early to invoke this interface - @retval RETURN_UNSUPPORTED the service is not supported by implementaion. -**/ -RETURN_STATUS -EFIAPI -RestoreAllLockBoxInPlace ( - VOID - ) -{ - EFI_STATUS Status; - EFI_PEI_SMM_COMMUNICATION_PPI *SmmCommunicationPpi; - EFI_SMM_LOCK_BOX_PARAMETER_RESTORE_ALL_IN_PLACE *LockBoxParameterRestoreAllInPlace; - EFI_SMM_COMMUNICATE_HEADER *CommHeader; - UINT8 CommBuffer[sizeof(EFI_GUID) + sizeof(UINT64) + sizeof(EFI_SMM_LOCK_BOX_PARAMETER_RESTORE_ALL_IN_PLACE)]; - UINTN CommSize; - UINT64 MessageLength; - - // - // Please aware that there is UINTN in EFI_SMM_COMMUNICATE_HEADER. It might be UINT64 in DXE, while it is UINT32 in PEI. - // typedef struct { - // EFI_GUID HeaderGuid; - // UINTN MessageLength; - // UINT8 Data[1]; - // } EFI_SMM_COMMUNICATE_HEADER; - // - - DEBUG ((EFI_D_INFO, "SmmLockBoxPeiLib RestoreAllLockBoxInPlace - Enter\n")); - - // - // Get needed resource - // - Status = PeiServicesLocatePpi ( - &gEfiPeiSmmCommunicationPpiGuid, - 0, - NULL, - (VOID **)&SmmCommunicationPpi - ); - if (EFI_ERROR (Status)) { - return EFI_NOT_STARTED; - } - - // - // Prepare parameter - // - CommHeader = (EFI_SMM_COMMUNICATE_HEADER *)&CommBuffer[0]; - CopyMem (&CommHeader->HeaderGuid, &gEfiSmmLockBoxCommunicationGuid, sizeof(gEfiSmmLockBoxCommunicationGuid)); - if ((sizeof(UINTN) == sizeof(UINT32)) && (FeaturePcdGet (PcdDxeIplSwitchToLongMode)) ) { - MessageLength = sizeof(*LockBoxParameterRestoreAllInPlace); - CopyMem (&CommBuffer[OFFSET_OF (EFI_SMM_COMMUNICATE_HEADER, MessageLength)], &MessageLength, sizeof(MessageLength)); - } else { - CommHeader->MessageLength = sizeof(*LockBoxParameterRestoreAllInPlace); - } - - if ((sizeof(UINTN) == sizeof(UINT32)) && (FeaturePcdGet (PcdDxeIplSwitchToLongMode)) ) { - LockBoxParameterRestoreAllInPlace = (EFI_SMM_LOCK_BOX_PARAMETER_RESTORE_ALL_IN_PLACE *)&CommBuffer[OFFSET_OF (EFI_SMM_COMMUNICATE_HEADER, MessageLength) + sizeof(UINT64)]; - } else { - LockBoxParameterRestoreAllInPlace = (EFI_SMM_LOCK_BOX_PARAMETER_RESTORE_ALL_IN_PLACE *)&CommBuffer[OFFSET_OF (EFI_SMM_COMMUNICATE_HEADER, MessageLength) + sizeof(UINTN)]; - } - LockBoxParameterRestoreAllInPlace->Header.Command = EFI_SMM_LOCK_BOX_COMMAND_RESTORE_ALL_IN_PLACE; - LockBoxParameterRestoreAllInPlace->Header.DataLength = sizeof(*LockBoxParameterRestoreAllInPlace); - LockBoxParameterRestoreAllInPlace->Header.ReturnStatus = (UINT64)-1; - - // - // Send command - // - CommSize = sizeof(CommBuffer); - Status = SmmCommunicationPpi->Communicate ( - SmmCommunicationPpi, - &CommBuffer[0], - &CommSize - ); - if (Status == EFI_NOT_STARTED) { - // - // Pei SMM communication not ready yet, so we access SMRAM directly - // - DEBUG ((EFI_D_INFO, "SmmLockBoxPeiLib Communicate - (%r)\n", Status)); - Status = InternalRestoreAllLockBoxInPlaceFromSmram (); - LockBoxParameterRestoreAllInPlace->Header.ReturnStatus = (UINT64)Status; - } - ASSERT_EFI_ERROR (Status); - - Status = (EFI_STATUS)LockBoxParameterRestoreAllInPlace->Header.ReturnStatus; - if (Status != EFI_SUCCESS) { - // Need or MAX_BIT, because there might be case that SMM is X64 while PEI is IA32. - Status |= MAX_BIT; - } - - DEBUG ((EFI_D_INFO, "SmmLockBoxPeiLib RestoreAllLockBoxInPlace - Exit (%r)\n", Status)); - - // - // Done - // - return Status; -} - diff --git a/MdeModulePkg/Library/SmmLockBoxLib/SmmLockBoxPeiLib.inf b/MdeModulePkg/Library/SmmLockBoxLib/SmmLockBoxPeiLib.inf deleted file mode 100644 index dceff8f0f6..0000000000 --- a/MdeModulePkg/Library/SmmLockBoxLib/SmmLockBoxPeiLib.inf +++ /dev/null @@ -1,59 +0,0 @@ -## @file -# PEI LockBox library instance. -# -# Copyright (c) 2010 - 2014, Intel Corporation. All rights reserved.
-# -# This program and the accompanying materials -# are licensed and made available under the terms and conditions -# of the BSD License which accompanies this distribution. The -# full text of the license may be found at -# http://opensource.org/licenses/bsd-license.php -# -# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, -# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. -# -## - -[Defines] - INF_VERSION = 0x00010005 - BASE_NAME = SmmLockBoxPeiLib - MODULE_UNI_FILE = SmmLockBoxPeiLib.uni - FILE_GUID = 5F5E6140-E7BA-4bd6-B85F-236B5BCD8E1E - MODULE_TYPE = PEIM - VERSION_STRING = 1.0 - LIBRARY_CLASS = LockBoxLib|PEIM - -# -# The following information is for reference only and not required by the build tools. -# -# VALID_ARCHITECTURES = IA32 X64 -# - -[Sources] - SmmLockBoxPeiLib.c - SmmLockBoxLibPrivate.h - -[Packages] - MdePkg/MdePkg.dec - MdeModulePkg/MdeModulePkg.dec - -[LibraryClasses] - PeiServicesTablePointerLib - PeiServicesLib - BaseLib - BaseMemoryLib - HobLib - DebugLib - -[FeaturePcd] - gEfiMdeModulePkgTokenSpaceGuid.PcdDxeIplSwitchToLongMode ## CONSUMES - -[Guids] - ## SOMETIMES_CONSUMES ## UNDEFINED # Used to do smm communication - ## SOMETIMES_CONSUMES ## UNDEFINED # SmmSystemTable - gEfiSmmLockBoxCommunicationGuid - gEfiAcpiVariableGuid ## SOMETIMES_CONSUMES ## HOB - -[Ppis] - gEfiPeiSmmCommunicationPpiGuid ## CONSUMES - gPeiSmmAccessPpiGuid ## SOMETIMES_CONSUMES diff --git a/MdeModulePkg/Library/SmmLockBoxLib/SmmLockBoxPeiLib.uni b/MdeModulePkg/Library/SmmLockBoxLib/SmmLockBoxPeiLib.uni deleted file mode 100644 index d4302d2543..0000000000 Binary files a/MdeModulePkg/Library/SmmLockBoxLib/SmmLockBoxPeiLib.uni and /dev/null differ diff --git a/MdeModulePkg/Library/SmmLockBoxLib/SmmLockBoxSmmLib.c b/MdeModulePkg/Library/SmmLockBoxLib/SmmLockBoxSmmLib.c deleted file mode 100644 index 23a786d56e..0000000000 --- a/MdeModulePkg/Library/SmmLockBoxLib/SmmLockBoxSmmLib.c +++ /dev/null @@ -1,552 +0,0 @@ -/** @file - -Copyright (c) 2010 - 2015, Intel Corporation. All rights reserved.
- -This program and the accompanying materials -are licensed and made available under the terms and conditions -of the BSD License which accompanies this distribution. The -full text of the license may be found at -http://opensource.org/licenses/bsd-license.php - -THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, -WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. - -**/ - -#include -#include -#include -#include -#include -#include -#include - -#include "SmmLockBoxLibPrivate.h" - -/** - We need handle this library carefully. Only one library instance will construct the environment. - Below 2 global variable can only be used in constructor. They should NOT be used in any other library functions. -**/ -SMM_LOCK_BOX_CONTEXT mSmmLockBoxContext; -LIST_ENTRY mLockBoxQueue = INITIALIZE_LIST_HEAD_VARIABLE (mLockBoxQueue); - -/** - This function return SmmLockBox context from SMST. - - @return SmmLockBox context from SMST. -**/ -SMM_LOCK_BOX_CONTEXT * -InternalGetSmmLockBoxContext ( - VOID - ) -{ - UINTN Index; - - // - // Check if gEfiSmmLockBoxCommunicationGuid is installed by someone - // - for (Index = 0; Index < gSmst->NumberOfTableEntries; Index++) { - if (CompareGuid (&gSmst->SmmConfigurationTable[Index].VendorGuid, &gEfiSmmLockBoxCommunicationGuid)) { - // - // Found. That means some other library instance is already run. - // No need to install again, just return. - // - return (SMM_LOCK_BOX_CONTEXT *)gSmst->SmmConfigurationTable[Index].VendorTable; - } - } - - // - // Not found. - // - return NULL; -} - -/** - Constructor for SmmLockBox library. - This is used to set SmmLockBox context, which will be used in PEI phase in S3 boot path later. - - @param[in] ImageHandle Image handle of this driver. - @param[in] SystemTable A Pointer to the EFI System Table. - - @retval EFI_SUCEESS - @return Others Some error occurs. -**/ -EFI_STATUS -EFIAPI -SmmLockBoxSmmConstructuor ( - IN EFI_HANDLE ImageHandle, - IN EFI_SYSTEM_TABLE *SystemTable - ) -{ - EFI_STATUS Status; - SMM_LOCK_BOX_CONTEXT *SmmLockBoxContext; - - DEBUG ((EFI_D_INFO, "SmmLockBoxSmmLib SmmLockBoxSmmConstructuor - Enter\n")); - - // - // Check if gEfiSmmLockBoxCommunicationGuid is installed by someone - // - SmmLockBoxContext = InternalGetSmmLockBoxContext (); - if (SmmLockBoxContext != NULL) { - // - // Find it. That means some other library instance is already run. - // No need to install again, just return. - // - DEBUG ((EFI_D_INFO, "SmmLockBoxSmmLib SmmLockBoxContext - already installed\n")); - DEBUG ((EFI_D_INFO, "SmmLockBoxSmmLib SmmLockBoxSmmConstructuor - Exit\n")); - return EFI_SUCCESS; - } - - // - // If no one install this, it means this is first instance. Install it. - // - if (sizeof(UINTN) == sizeof(UINT64)) { - mSmmLockBoxContext.Signature = SMM_LOCK_BOX_SIGNATURE_64; - } else { - mSmmLockBoxContext.Signature = SMM_LOCK_BOX_SIGNATURE_32; - } - mSmmLockBoxContext.LockBoxDataAddress = (EFI_PHYSICAL_ADDRESS)(UINTN)&mLockBoxQueue; - - Status = gSmst->SmmInstallConfigurationTable ( - gSmst, - &gEfiSmmLockBoxCommunicationGuid, - &mSmmLockBoxContext, - sizeof(mSmmLockBoxContext) - ); - ASSERT_EFI_ERROR (Status); - - DEBUG ((EFI_D_INFO, "SmmLockBoxSmmLib SmmLockBoxContext - %x\n", (UINTN)&mSmmLockBoxContext)); - DEBUG ((EFI_D_INFO, "SmmLockBoxSmmLib LockBoxDataAddress - %x\n", (UINTN)&mLockBoxQueue)); - DEBUG ((EFI_D_INFO, "SmmLockBoxSmmLib SmmLockBoxSmmConstructuor - Exit\n")); - - return Status; -} - -/** - This function return SmmLockBox queue address. - - @return SmmLockBox queue address. -**/ -LIST_ENTRY * -InternalGetLockBoxQueue ( - VOID - ) -{ - SMM_LOCK_BOX_CONTEXT *SmmLockBoxContext; - - SmmLockBoxContext = InternalGetSmmLockBoxContext (); - ASSERT (SmmLockBoxContext != NULL); - if (SmmLockBoxContext == NULL) { - return NULL; - } - return (LIST_ENTRY *)(UINTN)SmmLockBoxContext->LockBoxDataAddress; -} - -/** - This function find LockBox by GUID. - - @param Guid The guid to indentify the LockBox - - @return LockBoxData -**/ -SMM_LOCK_BOX_DATA * -InternalFindLockBoxByGuid ( - IN EFI_GUID *Guid - ) -{ - LIST_ENTRY *Link; - SMM_LOCK_BOX_DATA *LockBox; - LIST_ENTRY *LockBoxQueue; - - LockBoxQueue = InternalGetLockBoxQueue (); - ASSERT (LockBoxQueue != NULL); - - for (Link = LockBoxQueue->ForwardLink; - Link != LockBoxQueue; - Link = Link->ForwardLink) { - LockBox = BASE_CR ( - Link, - SMM_LOCK_BOX_DATA, - Link - ); - if (CompareGuid (&LockBox->Guid, Guid)) { - return LockBox; - } - } - return NULL; -} - -/** - This function will save confidential information to lockbox. - - @param Guid the guid to identify the confidential information - @param Buffer the address of the confidential information - @param Length the length of the confidential information - - @retval RETURN_SUCCESS the information is saved successfully. - @retval RETURN_INVALID_PARAMETER the Guid is NULL, or Buffer is NULL, or Length is 0 - @retval RETURN_ALREADY_STARTED the requested GUID already exist. - @retval RETURN_OUT_OF_RESOURCES no enough resource to save the information. - @retval RETURN_ACCESS_DENIED it is too late to invoke this interface - @retval RETURN_NOT_STARTED it is too early to invoke this interface - @retval RETURN_UNSUPPORTED the service is not supported by implementaion. -**/ -RETURN_STATUS -EFIAPI -SaveLockBox ( - IN GUID *Guid, - IN VOID *Buffer, - IN UINTN Length - ) -{ - SMM_LOCK_BOX_DATA *LockBox; - EFI_PHYSICAL_ADDRESS SmramBuffer; - EFI_STATUS Status; - LIST_ENTRY *LockBoxQueue; - - DEBUG ((EFI_D_INFO, "SmmLockBoxSmmLib SaveLockBox - Enter\n")); - - // - // Basic check - // - if ((Guid == NULL) || (Buffer == NULL) || (Length == 0)) { - DEBUG ((EFI_D_INFO, "SmmLockBoxSmmLib SaveLockBox - Exit (%r)\n", EFI_INVALID_PARAMETER)); - return EFI_INVALID_PARAMETER; - } - - // - // Find LockBox - // - LockBox = InternalFindLockBoxByGuid (Guid); - if (LockBox != NULL) { - DEBUG ((EFI_D_INFO, "SmmLockBoxSmmLib SaveLockBox - Exit (%r)\n", EFI_ALREADY_STARTED)); - return EFI_ALREADY_STARTED; - } - - // - // Allocate SMRAM buffer - // - Status = gSmst->SmmAllocatePages ( - AllocateAnyPages, - EfiRuntimeServicesData, - EFI_SIZE_TO_PAGES (Length), - &SmramBuffer - ); - ASSERT_EFI_ERROR (Status); - if (EFI_ERROR (Status)) { - DEBUG ((EFI_D_INFO, "SmmLockBoxSmmLib SaveLockBox - Exit (%r)\n", EFI_OUT_OF_RESOURCES)); - return EFI_OUT_OF_RESOURCES; - } - - // - // Allocate LockBox - // - Status = gSmst->SmmAllocatePool ( - EfiRuntimeServicesData, - sizeof(*LockBox), - (VOID **)&LockBox - ); - ASSERT_EFI_ERROR (Status); - if (EFI_ERROR (Status)) { - gSmst->SmmFreePages (SmramBuffer, EFI_SIZE_TO_PAGES (Length)); - DEBUG ((EFI_D_INFO, "SmmLockBoxSmmLib SaveLockBox - Exit (%r)\n", EFI_OUT_OF_RESOURCES)); - return EFI_OUT_OF_RESOURCES; - } - - // - // Save data - // - CopyMem ((VOID *)(UINTN)SmramBuffer, (VOID *)(UINTN)Buffer, Length); - - // - // Insert LockBox to queue - // - LockBox->Signature = SMM_LOCK_BOX_DATA_SIGNATURE; - CopyMem (&LockBox->Guid, Guid, sizeof(EFI_GUID)); - LockBox->Buffer = (EFI_PHYSICAL_ADDRESS)(UINTN)Buffer; - LockBox->Length = (UINT64)Length; - LockBox->Attributes = 0; - LockBox->SmramBuffer = SmramBuffer; - - DEBUG (( - EFI_D_INFO, - "LockBoxGuid - %g, SmramBuffer - 0x%lx, Length - 0x%lx\n", - &LockBox->Guid, - LockBox->SmramBuffer, - LockBox->Length - )); - - LockBoxQueue = InternalGetLockBoxQueue (); - ASSERT (LockBoxQueue != NULL); - InsertTailList (LockBoxQueue, &LockBox->Link); - - // - // Done - // - DEBUG ((EFI_D_INFO, "SmmLockBoxSmmLib SaveLockBox - Exit (%r)\n", EFI_SUCCESS)); - return EFI_SUCCESS; -} - -/** - This function will set lockbox attributes. - - @param Guid the guid to identify the confidential information - @param Attributes the attributes of the lockbox - - @retval RETURN_SUCCESS the information is saved successfully. - @retval RETURN_INVALID_PARAMETER attributes is invalid. - @retval RETURN_NOT_FOUND the requested GUID not found. - @retval RETURN_ACCESS_DENIED it is too late to invoke this interface - @retval RETURN_NOT_STARTED it is too early to invoke this interface - @retval RETURN_UNSUPPORTED the service is not supported by implementaion. -**/ -RETURN_STATUS -EFIAPI -SetLockBoxAttributes ( - IN GUID *Guid, - IN UINT64 Attributes - ) -{ - SMM_LOCK_BOX_DATA *LockBox; - - DEBUG ((EFI_D_INFO, "SmmLockBoxSmmLib SetLockBoxAttributes - Enter\n")); - - // - // Basic check - // - if ((Guid == NULL) || - ((Attributes & ~LOCK_BOX_ATTRIBUTE_RESTORE_IN_PLACE) != 0)) { - DEBUG ((EFI_D_INFO, "SmmLockBoxSmmLib SetLockBoxAttributes - Exit (%r)\n", EFI_INVALID_PARAMETER)); - return EFI_INVALID_PARAMETER; - } - - // - // Find LockBox - // - LockBox = InternalFindLockBoxByGuid (Guid); - if (LockBox == NULL) { - DEBUG ((EFI_D_INFO, "SmmLockBoxSmmLib SetLockBoxAttributes - Exit (%r)\n", EFI_NOT_FOUND)); - return EFI_NOT_FOUND; - } - - // - // Update data - // - LockBox->Attributes = Attributes; - - // - // Done - // - DEBUG ((EFI_D_INFO, "SmmLockBoxSmmLib SetLockBoxAttributes - Exit (%r)\n", EFI_SUCCESS)); - return EFI_SUCCESS; -} - -/** - This function will update confidential information to lockbox. - - @param Guid the guid to identify the original confidential information - @param Offset the offset of the original confidential information - @param Buffer the address of the updated confidential information - @param Length the length of the updated confidential information - - @retval RETURN_SUCCESS the information is saved successfully. - @retval RETURN_INVALID_PARAMETER the Guid is NULL, or Buffer is NULL, or Length is 0. - @retval RETURN_NOT_FOUND the requested GUID not found. - @retval RETURN_BUFFER_TOO_SMALL the original buffer to too small to hold new information. - @retval RETURN_ACCESS_DENIED it is too late to invoke this interface - @retval RETURN_NOT_STARTED it is too early to invoke this interface - @retval RETURN_UNSUPPORTED the service is not supported by implementaion. -**/ -RETURN_STATUS -EFIAPI -UpdateLockBox ( - IN GUID *Guid, - IN UINTN Offset, - IN VOID *Buffer, - IN UINTN Length - ) -{ - SMM_LOCK_BOX_DATA *LockBox; - - DEBUG ((EFI_D_INFO, "SmmLockBoxSmmLib UpdateLockBox - Enter\n")); - - // - // Basic check - // - if ((Guid == NULL) || (Buffer == NULL) || (Length == 0)) { - DEBUG ((EFI_D_INFO, "SmmLockBoxSmmLib UpdateLockBox - Exit (%r)\n", EFI_INVALID_PARAMETER)); - return EFI_INVALID_PARAMETER; - } - - // - // Find LockBox - // - LockBox = InternalFindLockBoxByGuid (Guid); - if (LockBox == NULL) { - DEBUG ((EFI_D_INFO, "SmmLockBoxSmmLib UpdateLockBox - Exit (%r)\n", EFI_NOT_FOUND)); - return EFI_NOT_FOUND; - } - - // - // Update data - // - if (LockBox->Length < Offset + Length) { - DEBUG ((EFI_D_INFO, "SmmLockBoxSmmLib UpdateLockBox - Exit (%r)\n", EFI_BUFFER_TOO_SMALL)); - return EFI_BUFFER_TOO_SMALL; - } - ASSERT ((UINTN)LockBox->SmramBuffer <= (MAX_ADDRESS - Offset)); - CopyMem ((VOID *)((UINTN)LockBox->SmramBuffer + Offset), Buffer, Length); - - // - // Done - // - DEBUG ((EFI_D_INFO, "SmmLockBoxSmmLib UpdateLockBox - Exit (%r)\n", EFI_SUCCESS)); - return EFI_SUCCESS; -} - -/** - This function will restore confidential information from lockbox. - - @param Guid the guid to identify the confidential information - @param Buffer the address of the restored confidential information - NULL means restored to original address, Length MUST be NULL at same time. - @param Length the length of the restored confidential information - - @retval RETURN_SUCCESS the information is restored successfully. - @retval RETURN_INVALID_PARAMETER the Guid is NULL, or one of Buffer and Length is NULL. - @retval RETURN_WRITE_PROTECTED Buffer and Length are NULL, but the LockBox has no - LOCK_BOX_ATTRIBUTE_RESTORE_IN_PLACE attribute. - @retval RETURN_BUFFER_TOO_SMALL the Length is too small to hold the confidential information. - @retval RETURN_NOT_FOUND the requested GUID not found. - @retval RETURN_NOT_STARTED it is too early to invoke this interface - @retval RETURN_ACCESS_DENIED not allow to restore to the address - @retval RETURN_UNSUPPORTED the service is not supported by implementaion. -**/ -RETURN_STATUS -EFIAPI -RestoreLockBox ( - IN GUID *Guid, - IN VOID *Buffer, OPTIONAL - IN OUT UINTN *Length OPTIONAL - ) -{ - SMM_LOCK_BOX_DATA *LockBox; - VOID *RestoreBuffer; - - DEBUG ((EFI_D_INFO, "SmmLockBoxSmmLib RestoreLockBox - Enter\n")); - - // - // Restore this, Buffer and Length MUST be both NULL or both non-NULL - // - if ((Guid == NULL) || - ((Buffer == NULL) && (Length != NULL)) || - ((Buffer != NULL) && (Length == NULL))) { - DEBUG ((EFI_D_INFO, "SmmLockBoxSmmLib RestoreLockBox - Exit (%r)\n", EFI_INVALID_PARAMETER)); - return EFI_INVALID_PARAMETER; - } - - // - // Find LockBox - // - LockBox = InternalFindLockBoxByGuid (Guid); - if (LockBox == NULL) { - // - // Not found - // - DEBUG ((EFI_D_INFO, "SmmLockBoxSmmLib RestoreLockBox - Exit (%r)\n", EFI_NOT_FOUND)); - return EFI_NOT_FOUND; - } - - // - // Set RestoreBuffer - // - if (Buffer != NULL) { - // - // restore to new buffer - // - RestoreBuffer = Buffer; - } else { - // - // restore to original buffer - // - if ((LockBox->Attributes & LOCK_BOX_ATTRIBUTE_RESTORE_IN_PLACE) == 0) { - DEBUG ((EFI_D_INFO, "SmmLockBoxSmmLib RestoreLockBox - Exit (%r)\n", EFI_WRITE_PROTECTED)); - return EFI_WRITE_PROTECTED; - } - RestoreBuffer = (VOID *)(UINTN)LockBox->Buffer; - } - - // - // Set RestoreLength - // - if (Length != NULL) { - if (*Length < (UINTN)LockBox->Length) { - // - // Input buffer is too small to hold all data. - // - *Length = (UINTN)LockBox->Length; - DEBUG ((EFI_D_INFO, "SmmLockBoxSmmLib RestoreLockBox - Exit (%r)\n", EFI_BUFFER_TOO_SMALL)); - return EFI_BUFFER_TOO_SMALL; - } - *Length = (UINTN)LockBox->Length; - } - - // - // Restore data - // - CopyMem (RestoreBuffer, (VOID *)(UINTN)LockBox->SmramBuffer, (UINTN)LockBox->Length); - - // - // Done - // - DEBUG ((EFI_D_INFO, "SmmLockBoxSmmLib RestoreLockBox - Exit (%r)\n", EFI_SUCCESS)); - return EFI_SUCCESS; -} - -/** - This function will restore confidential information from all lockbox which have RestoreInPlace attribute. - - @retval RETURN_SUCCESS the information is restored successfully. - @retval RETURN_NOT_STARTED it is too early to invoke this interface - @retval RETURN_UNSUPPORTED the service is not supported by implementaion. -**/ -RETURN_STATUS -EFIAPI -RestoreAllLockBoxInPlace ( - VOID - ) -{ - SMM_LOCK_BOX_DATA *LockBox; - LIST_ENTRY *Link; - LIST_ENTRY *LockBoxQueue; - - DEBUG ((EFI_D_INFO, "SmmLockBoxSmmLib RestoreAllLockBoxInPlace - Enter\n")); - - LockBoxQueue = InternalGetLockBoxQueue (); - ASSERT (LockBoxQueue != NULL); - - // - // Restore all, Buffer and Length MUST be NULL - // - for (Link = LockBoxQueue->ForwardLink; - Link != LockBoxQueue; - Link = Link->ForwardLink) { - LockBox = BASE_CR ( - Link, - SMM_LOCK_BOX_DATA, - Link - ); - if ((LockBox->Attributes & LOCK_BOX_ATTRIBUTE_RESTORE_IN_PLACE) != 0) { - // - // Restore data - // - CopyMem ((VOID *)(UINTN)LockBox->Buffer, (VOID *)(UINTN)LockBox->SmramBuffer, (UINTN)LockBox->Length); - } - } - // - // Done - // - DEBUG ((EFI_D_INFO, "SmmLockBoxSmmLib RestoreAllLockBoxInPlace - Exit (%r)\n", EFI_SUCCESS)); - return EFI_SUCCESS; -} - diff --git a/MdeModulePkg/Library/SmmLockBoxLib/SmmLockBoxSmmLib.inf b/MdeModulePkg/Library/SmmLockBoxLib/SmmLockBoxSmmLib.inf deleted file mode 100644 index 6edb47519a..0000000000 --- a/MdeModulePkg/Library/SmmLockBoxLib/SmmLockBoxSmmLib.inf +++ /dev/null @@ -1,49 +0,0 @@ -## @file -# SMM LockBox library instance. -# -# Copyright (c) 2010 - 2014, Intel Corporation. All rights reserved.
-# -# This program and the accompanying materials -# are licensed and made available under the terms and conditions -# of the BSD License which accompanies this distribution. The -# full text of the license may be found at -# http://opensource.org/licenses/bsd-license.php -# -# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, -# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. -# -## - -[Defines] - INF_VERSION = 0x00010005 - BASE_NAME = SmmLockBoxSmmLib - MODULE_UNI_FILE = SmmLockBoxSmmLib.uni - FILE_GUID = E04894D6-290D-4171-A362-0ACFD939F3C8 - MODULE_TYPE = DXE_SMM_DRIVER - VERSION_STRING = 1.0 - LIBRARY_CLASS = LockBoxLib|DXE_SMM_DRIVER - CONSTRUCTOR = SmmLockBoxSmmConstructuor - -# -# The following information is for reference only and not required by the build tools. -# -# VALID_ARCHITECTURES = IA32 X64 -# - -[Sources] - SmmLockBoxSmmLib.c - SmmLockBoxLibPrivate.h - -[Packages] - MdePkg/MdePkg.dec - MdeModulePkg/MdeModulePkg.dec - -[LibraryClasses] - SmmServicesTableLib - BaseLib - DebugLib - -[Guids] - ## SOMETIMES_CONSUMES ## UNDEFINED # SmmSystemTable - ## SOMETIMES_PRODUCES ## UNDEFINED # SmmSystemTable - gEfiSmmLockBoxCommunicationGuid diff --git a/MdeModulePkg/Library/SmmLockBoxLib/SmmLockBoxSmmLib.uni b/MdeModulePkg/Library/SmmLockBoxLib/SmmLockBoxSmmLib.uni deleted file mode 100644 index a3fef6620b..0000000000 Binary files a/MdeModulePkg/Library/SmmLockBoxLib/SmmLockBoxSmmLib.uni and /dev/null differ -- cgit v1.2.3