summaryrefslogtreecommitdiff
path: root/Core/EM/TCG2/Common/xTcgPei.c
diff options
context:
space:
mode:
Diffstat (limited to 'Core/EM/TCG2/Common/xTcgPei.c')
-rw-r--r--Core/EM/TCG2/Common/xTcgPei.c317
1 files changed, 317 insertions, 0 deletions
diff --git a/Core/EM/TCG2/Common/xTcgPei.c b/Core/EM/TCG2/Common/xTcgPei.c
new file mode 100644
index 0000000..506f9be
--- /dev/null
+++ b/Core/EM/TCG2/Common/xTcgPei.c
@@ -0,0 +1,317 @@
+//**********************************************************************
+//**********************************************************************
+//** **
+//** (C)Copyright 1985-2010, American Megatrends, Inc. **
+//** **
+//** All Rights Reserved. **
+//** **
+//** 5555 Oakbrook Pkwy, Suite 200, Norcross, GA 30093 **
+//** **
+//** Phone: (770)-246-8600 **
+//** **
+//**********************************************************************
+//**********************************************************************
+//*************************************************************************
+// $Header: /Alaska/SOURCE/Modules/TCG2/Common/TcgPei/xTcgPei.c 1 4/21/14 2:16p Fredericko $
+//
+// $Revision: 1 $
+//
+// $Date: 4/21/14 2:16p $
+//*************************************************************************
+// Revision History
+// ----------------
+// $Log: /Alaska/SOURCE/Modules/TCG2/Common/TcgPei/xTcgPei.c $
+//
+// 1 4/21/14 2:16p Fredericko
+//
+// 1 10/08/13 12:02p Fredericko
+// Initial Check-In for Tpm-Next module
+//
+// 2 10/03/13 1:54p Fredericko
+//
+// 1 7/10/13 5:51p Fredericko
+// [TAG] EIP120969
+// [Category] New Feature
+// [Description] TCG (TPM20)
+//
+// 36 9/19/12 10:34a Fredericko
+// [TAG] EIP90807
+// [Category] Improvement
+// [Description] MonotonicCounter variable guid changed.
+// [Files] xTcgPei.c, AmiTcgPlatformPeiAfterMem.c
+//
+// 35 3/19/12 6:27p Fredericko
+// [TAG] EIP82769
+// [Description] Firmware updates disable the TPM when Firmware update
+// is done
+// [Files] TcgDxe.c, xTcgDxe.c, xTcgPei.c
+//
+// 34 12/12/11 3:17p Fredericko
+// [TAG] EIP76865
+// [Category] Improvement
+// [Description] Dual Support for TCM and TPM. System could hang in TXT
+// if txt is enabled in setup
+// [Files]
+// AmiTcgPlatfompeilib.c, AmiTcgPlatformPpi.cif, AmiTcgPlatformPpi.h,
+// AmiTcgPlatformProtocol.cif, AmiTcgPlatformProtocol.h,
+// EMpTcmPei.c, TcgDxe.cif, TcgPei.cif, TcgPeiAfterMem.cif,
+// TcgPeiAfterMem.mak, TcgTcmPeiAfterMem.c, xTcgDxe.c, xTcgPei.c,
+// xTcgPeiAfterMem.c
+//
+// 33 9/27/11 10:21p Fredericko
+// [TAG] EIP67286
+// [Category] Improvement
+// [Description] changes for Tcg Setup policy
+// [Files] Tcg.sdl
+// TcgPei.cif
+// TcgPei.mak
+// xtcgPei.c
+// xTcgPeiAfterMem.c
+// TcgPeiAfterMem.mak
+// TcgDxe.cif
+// TcgDxe.mak
+// xTcgDxe.c
+// AmiTcgPlatformPeilib.c
+// AmiTcgPlatformDxelib.c
+//
+// 32 4/27/11 3:01p Fredericko
+// removed VFR compile directive
+//
+// 31 3/29/11 12:57p Fredericko
+//
+// 30 3/28/11 2:14p Fredericko
+// [TAG] EIP 54642
+// [Category] Improvement
+// [Description] 1. Checkin Files related to TCG function override
+// 2. Include TCM and TPM auto detection
+// [Files] Affects all TCG files
+//
+// 29 5/19/10 5:53p Fredericko
+// Included File Header
+// Included File Revision History
+// Updated AMI Function Headers
+// Code Beautification
+// EIP 37653
+//
+//*************************************************************************
+//<AMI_FHDR_START>
+//
+// Name: xTcgPei.c
+//
+// Description:
+// Contians entry point function for TcgPei Subcomponent
+//
+//<AMI_FHDR_END>
+//*************************************************************************
+#include <Efi.h>
+#include <Pei.h>
+#include <TcgCommon.h>
+#include <AmiPeiLib.h>
+#include <TcgMisc.h>
+#include <ppi\AmiTcgPlatformPpi.h>
+#include "PPI\TcgService\TcgService.h"
+#include "PPI\TpmDevice\TpmDevice.h"
+#include "PPI\CpuIo.h"
+#include "PPI\LoadFile.h"
+#include "TcgPlatformSetupPeiPolicy.h"
+#include "Tpm20Includes\Tpm20.h"
+#include "Tpm20CRBLib.h"
+
+
+
+EFI_GUID gTcgPpiGuid = PEI_TCG_PPI_GUID;
+EFI_GUID gPlatformGuid = AMI_TCG_PLATFORM_PPI_GUID;
+
+EFI_STATUS
+EFIAPI TpmPeiEntry (
+ IN EFI_FFS_FILE_HEADER *FfsHeader,
+ IN EFI_PEI_SERVICES **PeiServices );
+
+EFI_STATUS
+EFIAPI TcmPeiEntry (
+ IN EFI_FFS_FILE_HEADER *FfsHeader,
+ IN EFI_PEI_SERVICES **PeiServices );
+
+
+EFI_STATUS
+EFIAPI TcgPeiEntry (
+ IN EFI_FFS_FILE_HEADER *FfsHeader,
+ IN EFI_PEI_SERVICES **PeiServices );
+
+EFI_STATUS
+EFIAPI TcgTcmPeiEntry (
+ IN EFI_FFS_FILE_HEADER *FfsHeader,
+ IN EFI_PEI_SERVICES **PeiServices );
+
+EFI_STATUS TcgPeiBuildHobGuid(
+ IN EFI_PEI_SERVICES **PeiServices,
+ IN EFI_GUID *Guid,
+ IN UINTN DataLength,
+ OUT VOID **Hob );
+
+EFI_STATUS
+EFIAPI Tpm20CrbEntry(
+ IN EFI_FFS_FILE_HEADER *FfsHeader,
+ IN EFI_PEI_SERVICES **PeiServices );
+
+UINT8 GetPlatformSupportType()
+{
+ return (AutoSupportType());
+}
+
+static AMI_TCG_PLATFORM_PPI PlatformTypePpi = {
+ GetPlatformSupportType
+};
+
+
+static EFI_PEI_PPI_DESCRIPTOR mPlatformPpiList[] = {
+ {
+ EFI_PEI_PPI_DESCRIPTOR_PPI
+ | EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST,
+ &gPlatformGuid,
+ &PlatformTypePpi
+ }
+};
+
+
+//**********************************************************************
+//<AMI_PHDR_START>
+//
+// Procedure: CommonTcgPeiEntryPoint
+//
+// Description: Entry point for Tcg PEI component
+//
+//
+// Input: IN EFI_FFS_FILE_HEADER *FfsHeader
+// IN EFI_PEI_SERVICES **PeiServices,
+//
+// Output: EFI_STATUS
+//
+// Modified:
+//
+// Referrals:
+//
+// Notes:
+//<AMI_PHDR_END>
+//**********************************************************************
+EFI_STATUS
+EFIAPI CommonTcgPeiEntryPoint(
+ IN EFI_FFS_FILE_HEADER *FfsHeader,
+ IN EFI_PEI_SERVICES **PeiServices )
+{
+ EFI_STATUS Status;
+ VOID *Context = NULL;
+ BOOLEAN DeviceType = FALSE;
+ TCG_PLATFORM_SETUP_INTERFACE *TcgPeiPolicy = NULL;
+ EFI_GUID gTcgPeiPolicyGuid =\
+ TCG_PLATFORM_SETUP_PEI_POLICY_GUID;
+ TCG_CONFIGURATION ConfigFlags;
+ CHAR16 Monotonic[] = L"MonotonicCounter";
+#if defined(CORE_COMBINED_VERSION) && (CORE_COMBINED_VERSION > 262797)
+ EFI_GUID Guid = AMI_GLOBAL_VARIABLE_GUID;
+#else
+ EFI_GUID Guid = EFI_GLOBAL_VARIABLE;
+#endif
+ EFI_GUID TcgGuid = AMI_TCG_RESETVAR_HOB_GUID;
+ UINTN Size = sizeof(UINT32);
+ UINT32 Counter;
+ EFI_PEI_READ_ONLY_VARIABLE_PPI *ReadOnlyVariable;
+ EFI_HOB_GUID_TYPE *Hob;
+ BOOLEAN ResetAllTcgVar = FALSE;
+ EFI_GUID gTcgReadOnlyVariablePpiGuid
+ = EFI_TCG_PEI_READ_ONLY_VARIABLE_PPI_GUID;
+
+
+ Status = (*PeiServices)->InstallPpi( PeiServices, &mPlatformPpiList[0] );
+ if ( EFI_ERROR( Status ))
+ {
+ return EFI_UNLOAD_IMAGE;
+ }
+
+ Status = (*PeiServices)->LocatePpi(
+ PeiServices,
+ &gTcgPeiPolicyGuid,
+ 0, NULL,
+ &TcgPeiPolicy);
+
+ if(EFI_ERROR(Status) || TcgPeiPolicy == NULL )return Status;
+
+ Status = (*PeiServices)->LocatePpi(
+ PeiServices,
+ &gTcgReadOnlyVariablePpiGuid,
+ 0, NULL,
+ &ReadOnlyVariable
+ );
+
+ if(EFI_ERROR(Status) || ReadOnlyVariable == NULL )return Status;
+
+ Status = ReadOnlyVariable->GetVariable( PeiServices, Monotonic, &Guid,
+ NULL, &Size, &Counter );
+
+ if ( EFI_ERROR( Status ))
+ {
+
+ ResetAllTcgVar = TRUE;
+ Status = TcgPeiBuildHobGuid(
+ PeiServices,
+ &TcgGuid,
+ sizeof (BOOLEAN),
+ &Hob );
+
+ Hob++;
+ (*PeiServices)->CopyMem( Hob, &ResetAllTcgVar, sizeof (ResetAllTcgVar));
+ }
+
+ if(!AutoSupportType()){
+ Status = TpmPeiEntry( FfsHeader, PeiServices );
+ PEI_TRACE((-1, PeiServices, "TpmPeiEntry results = %r \n", Status));
+ if ( EFI_ERROR( Status )){
+ return Status;
+ }
+ }else{
+ Status = TcmPeiEntry( FfsHeader, PeiServices );
+ if ( EFI_ERROR( Status )){
+ return Status;}
+ }
+
+ PEI_TRACE((-1, PeiServices, "before getTcgPeiPolicy\n"));
+ Status = TcgPeiPolicy->getTcgPeiPolicy(PeiServices, &ConfigFlags);
+
+ PEI_TRACE((-1, PeiServices, "getTcgPeiPolicy results = %r \n", Status));
+
+ if ( ConfigFlags.TpmSupport == 0x00 || EFI_ERROR( Status ))
+ {
+ PEI_TRACE((-1, PeiServices, "ConfigFlags.TpmSupport == 0x00 || EFI_ERROR( Status )\n"));
+ return EFI_SUCCESS;
+ }
+
+
+ PEI_TRACE((-1, PeiServices, "TcgPeiEntry processing\n"));
+ if(!AutoSupportType()){
+ Status = TcgPeiEntry( FfsHeader, PeiServices );
+ PEI_TRACE((-1, PeiServices, "TcgPeiEntry result = %r\n", Status));
+ if(EFI_ERROR(Status)){
+ PEI_TRACE((-1, PeiServices, "Tpm20CrbEntry Execution\n", Status));
+ Tpm20CrbEntry(FfsHeader, PeiServices );
+ }
+ }else{
+ Status = TcgTcmPeiEntry( FfsHeader, PeiServices );
+ }
+
+ return Status;
+}
+
+//**********************************************************************
+//**********************************************************************
+//** **
+//** (C)Copyright 1985-2010, American Megatrends, Inc. **
+//** **
+//** All Rights Reserved. **
+//** **
+//** 5555 Oakbrook Pkwy, Suite 200, Norcross, GA 30093 **
+//** **
+//** Phone: (770)-246-8600 **
+//** **
+//**********************************************************************
+//**********************************************************************
+//**********************************************************************