From caf93abc434435dfb02556c0c0f5163bda42e427 Mon Sep 17 00:00:00 2001 From: jljusten Date: Tue, 19 Jul 2011 20:48:04 +0000 Subject: [PATCH] EdkCompatibilityPkg: Add DxeSmmReadyToLockOnExitPmAuthThunk driver Signed-off-by: jljusten Reviewed-by: mdkinney Reviewed-by: geekboy15a Reviewed-by: jyao1 Reviewed-by: lgao4 git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@12031 6f19259b-4bc3-4df7-8a09-765794883524 --- .../DxeSmmReadyToLockOnExitPmAuthThunk.c | 94 +++++++++++++++++++ .../DxeSmmReadyToLockOnExitPmAuthThunk.h | 28 ++++++ .../DxeSmmReadyToLockOnExitPmAuthThunk.inf | 52 ++++++++++ EdkCompatibilityPkg/EdkCompatibilityPkg.dsc | 1 + 4 files changed, 175 insertions(+) create mode 100644 EdkCompatibilityPkg/Compatibility/DxeSmmReadyToLockOnExitPmAuthThunk/DxeSmmReadyToLockOnExitPmAuthThunk.c create mode 100644 EdkCompatibilityPkg/Compatibility/DxeSmmReadyToLockOnExitPmAuthThunk/DxeSmmReadyToLockOnExitPmAuthThunk.h create mode 100644 EdkCompatibilityPkg/Compatibility/DxeSmmReadyToLockOnExitPmAuthThunk/DxeSmmReadyToLockOnExitPmAuthThunk.inf diff --git a/EdkCompatibilityPkg/Compatibility/DxeSmmReadyToLockOnExitPmAuthThunk/DxeSmmReadyToLockOnExitPmAuthThunk.c b/EdkCompatibilityPkg/Compatibility/DxeSmmReadyToLockOnExitPmAuthThunk/DxeSmmReadyToLockOnExitPmAuthThunk.c new file mode 100644 index 0000000000..6625231ba1 --- /dev/null +++ b/EdkCompatibilityPkg/Compatibility/DxeSmmReadyToLockOnExitPmAuthThunk/DxeSmmReadyToLockOnExitPmAuthThunk.c @@ -0,0 +1,94 @@ +/** @file + DxeSmmReadyToLock Protocol on ExitPmAuth Protocol Thunk driver. + R8 platform uses ExitPmAuth point to lock SMRAM and SMM API. + But R9 uses DxeSmmReadyToLock. We need a thunk driver to convert this event. + +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 "DxeSmmReadyToLockOnExitPmAuthThunk.h" + +/** + ExitPmAuth Protocol notification event handler. + + @param[in] Event Event whose notification function is being invoked. + @param[in] Context Pointer to the notification function's context. +**/ +VOID +EFIAPI +ExitPmAuthProtocolNotification ( + IN EFI_EVENT Event, + IN VOID *Context + ) +{ + EFI_STATUS Status; + EFI_HANDLE ImageHandle; + VOID *ExitPmAuth; + + // + // Add more check to locate protocol after got event, because + // R8 ECP will signal this event immediately once it is register + // just in case it is already installed. + // + Status = gBS->LocateProtocol ( + &gExitPmAuthProtocolGuid, + NULL, + &ExitPmAuth + ); + if (EFI_ERROR (Status)) { + return ; + } + + // + // Install DxeSmmReadyToLock protocol to let PI SMM lock + // + ImageHandle = NULL; + Status = gBS->InstallProtocolInterface ( + &ImageHandle, + &gEfiDxeSmmReadyToLockProtocolGuid, + EFI_NATIVE_INTERFACE, + NULL + ); + ASSERT_EFI_ERROR (Status); +} + +/** + Entry Point for DxeSmmReadyToLock Protocol on ExitPmAuth Protocol Thunk driver. + + @param[in] ImageHandle Image handle of this driver. + @param[in] SystemTable A Pointer to the EFI System Table. + + @retval EFI_SUCCESS The entry point is executed successfully. +**/ +EFI_STATUS +EFIAPI +DxeSmmReadyToLockMain ( + IN EFI_HANDLE ImageHandle, + IN EFI_SYSTEM_TABLE *SystemTable + ) +{ + VOID *Registration; + + // + // Install notifications for required protocols + // + EfiCreateProtocolNotifyEvent ( + &gExitPmAuthProtocolGuid, + TPL_CALLBACK, + ExitPmAuthProtocolNotification, + NULL, + &Registration + ); + + return EFI_SUCCESS; +} diff --git a/EdkCompatibilityPkg/Compatibility/DxeSmmReadyToLockOnExitPmAuthThunk/DxeSmmReadyToLockOnExitPmAuthThunk.h b/EdkCompatibilityPkg/Compatibility/DxeSmmReadyToLockOnExitPmAuthThunk/DxeSmmReadyToLockOnExitPmAuthThunk.h new file mode 100644 index 0000000000..00f6f6dc85 --- /dev/null +++ b/EdkCompatibilityPkg/Compatibility/DxeSmmReadyToLockOnExitPmAuthThunk/DxeSmmReadyToLockOnExitPmAuthThunk.h @@ -0,0 +1,28 @@ +/** @file + Include file for DxeSmmReadyToLock Protocol on ExitPmAuth Protocol Thunk driver. + +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 _DXE_SMM_READY_TO_LOCK_ON_EXIT_PMAUTH_THUNK_H_ +#define _DXE_SMM_READY_TO_LOCK_ON_EXIT_PMAUTH_THUNK_H_ + +#include +#include +#include +#include +#include +#include +#include + +#endif diff --git a/EdkCompatibilityPkg/Compatibility/DxeSmmReadyToLockOnExitPmAuthThunk/DxeSmmReadyToLockOnExitPmAuthThunk.inf b/EdkCompatibilityPkg/Compatibility/DxeSmmReadyToLockOnExitPmAuthThunk/DxeSmmReadyToLockOnExitPmAuthThunk.inf new file mode 100644 index 0000000000..fddda408bd --- /dev/null +++ b/EdkCompatibilityPkg/Compatibility/DxeSmmReadyToLockOnExitPmAuthThunk/DxeSmmReadyToLockOnExitPmAuthThunk.inf @@ -0,0 +1,52 @@ +## @file +# Component description file for DxeSmmReadyToLock Protocol on +# ExitPmAuth Protocol Thunk driver. +# +# 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. +# +## + +[Defines] + INF_VERSION = 0x00010005 + BASE_NAME = DxeSmmReadyToLockOnExitPmAuthThunk + FILE_GUID = 82ECEE48-9571-4427-8485-85A5A45A0F39 + MODULE_TYPE = DXE_DRIVER + VERSION_STRING = 1.0 + ENTRY_POINT = DxeSmmReadyToLockMain + +# +# The following information is for reference only and not required by the build tools. +# +# VALID_ARCHITECTURES = IA32 X64 +# + +[Sources] + DxeSmmReadyToLockOnExitPmAuthThunk.c + DxeSmmReadyToLockOnExitPmAuthThunk.h + +[Packages] + MdePkg/MdePkg.dec + EdkCompatibilityPkg/EdkCompatibilityPkg.dec + IntelFrameworkModulePkg/IntelFrameworkModulePkg.dec + +[LibraryClasses] + UefiDriverEntryPoint + UefiBootServicesTableLib + DebugLib + UefiLib + +[Protocols] + gEfiDxeSmmReadyToLockProtocolGuid # PROTOCOL ALWAYS_PRODUCED + gExitPmAuthProtocolGuid # PROTOCOL ALWAYS_CONSUMED + +[Depex] + TRUE diff --git a/EdkCompatibilityPkg/EdkCompatibilityPkg.dsc b/EdkCompatibilityPkg/EdkCompatibilityPkg.dsc index cf8243d2b8..4057192993 100644 --- a/EdkCompatibilityPkg/EdkCompatibilityPkg.dsc +++ b/EdkCompatibilityPkg/EdkCompatibilityPkg.dsc @@ -289,6 +289,7 @@ define GCC_MACRO = -DEFI_SPECIFICATION_VERSION=0x00020000 -DPI_S EdkCompatibilityPkg/Compatibility/PiSmmStatusCodeOnFrameworkSmmStatusCodeThunk/PiSmmStatusCodeOnFrameworkSmmStatusCodeThunk.inf EdkCompatibilityPkg/Compatibility/FrameworkSmmStatusCodeOnPiSmmStatusCodeThunk/FrameworkSmmStatusCodeOnPiSmmStatusCodeThunk.inf EdkCompatibilityPkg/Compatibility/BootScriptSaveOnS3SaveStateThunk/BootScriptSaveOnS3SaveStateThunk.inf + EdkCompatibilityPkg/Compatibility/DxeSmmReadyToLockOnExitPmAuthThunk/DxeSmmReadyToLockOnExitPmAuthThunk.inf [Components.IPF] EdkCompatibilityPkg/Foundation/Cpu/Itanium/CpuIa64Lib/CpuIA64Lib.inf -- 2.39.2