diff options
Diffstat (limited to 'Core/EM/TCG2/TpmClearOnRollback')
9 files changed, 1383 insertions, 0 deletions
diff --git a/Core/EM/TCG2/TpmClearOnRollback/TpmClearOnRollback.c b/Core/EM/TCG2/TpmClearOnRollback/TpmClearOnRollback.c new file mode 100644 index 0000000..2203432 --- /dev/null +++ b/Core/EM/TCG2/TpmClearOnRollback/TpmClearOnRollback.c @@ -0,0 +1,132 @@ +//************************************************************************* +//************************************************************************* +//** ** +//** (C)Copyright 1985-2011, American Megatrends, Inc. ** +//** ** +//** All Rights Reserved. ** +//** ** +//** 5555 Oakbrook Parkway, Suite 200, Norcross, GA 30093 ** +//** ** +//** Phone: (770)-246-8600 ** +//** ** +//************************************************************************* +//************************************************************************* +//********************************************************************** +// $Header: /Alaska/SOURCE/Modules/TCG2/Common/TpmClearOnRollback/TpmClearOnRollback.c 1 4/21/14 2:18p Fredericko $ +// +// $Revision: 1 $ +// +// $Date: 4/21/14 2:18p $ +//********************************************************************** +// Revision History +// ---------------- +// $Log: /Alaska/SOURCE/Modules/TCG2/Common/TpmClearOnRollback/TpmClearOnRollback.c $ +// +// 1 4/21/14 2:18p Fredericko +// +// 1 10/08/13 12:06p Fredericko +// Initial Check-In for Tpm-Next module +// +// 1 7/10/13 5:57p Fredericko +// [TAG] EIP120969 +// [Category] New Feature +// [Description] TCG (TPM20) +//********************************************************************** +//<AMI_FHDR_START> +//--------------------------------------------------------------------------- +// Name: TpmClearOnRollback +// +// +// +//--------------------------------------------------------------------------- +//<AMI_FHDR_END> +#include "TpmClearOnRollback.h" +#include <Protocol/AmiPostMgr.h> +#include <PPI/FwVersion.h> +#include <Hob.h> +#include <Token.h> +#include <AmiHobs.h> + +VOID DrawMessageBox( + IN CHAR16 *Caption, + IN CHAR16 *Message +); + + + +//<AMI_PHDR_START> +//---------------------------------------------------------------------------- +// Procedure: RecoveryClearTpmBeforeFlash +// +// Description: +// Process TPM clear on Rollback policy +// +// Input: +// VOID +// +// Output: +// VOID +// +//---------------------------------------------------------------------------- +//<AMI_PHDR_END> +VOID RecoveryClearTpmBeforeFlash (VOID){ + UINT8 ClearResults; + AMI_POST_MANAGER_PROTOCOL *TpmClearAmiPostMgr = NULL; + FW_VERSION Fid; + EFI_EVENT MyEvent; + FW_VERSION RecoveryFid; + EFI_HOB_HANDOFF_INFO_TABLE *TpmpHit; + EFI_GUID myGuidHob = HOB_LIST_GUID; + EFI_GUID TpmRecoveryHobGuid = AMI_RECOVERY_IMAGE_HOB_GUID; + UINT32 ProjectVersion, NewProjectVersion; + EFI_GUID gAmiPostManagerProtocolGuid = \ + AMI_POST_MANAGER_PROTOCOL_GUID; + EFI_STATUS Status; + + TpmpHit = GetEfiConfigurationTable(pST, &myGuidHob); + if(TpmpHit != NULL && !EFI_ERROR(FindNextHobByGuid(&TpmRecoveryHobGuid, &TpmpHit))) { + + TpmGetFidFromBuffer(&RecoveryFid, (VOID *)(UINTN)((RECOVERY_IMAGE_HOB*)TpmpHit)->Address); + } + + TpmRecoveryGetFidFromFv(&Fid); + + ProjectVersion = Fid.ProjectMajorVersion[0] + Fid.ProjectMajorVersion[1] + Fid.ProjectMajorVersion[2]; + ProjectVersion <<= 16; + ProjectVersion += Fid.ProjectMinorVersion[0] + Fid.ProjectMinorVersion[1] + Fid.ProjectMinorVersion[2]; + + NewProjectVersion = RecoveryFid.ProjectMajorVersion[0] + RecoveryFid.ProjectMajorVersion[1] + RecoveryFid.ProjectMajorVersion[2]; + NewProjectVersion <<= 16; + NewProjectVersion += RecoveryFid.ProjectMinorVersion[0] + RecoveryFid.ProjectMinorVersion[1] + RecoveryFid.ProjectMinorVersion[2]; + + if(NewProjectVersion < ProjectVersion){ + ClearResults = ClearTpmBeforeFlash(); + if(ClearResults == TPM_CLEAR_RESET_REQUIRED) + { + Status = pBS->LocateProtocol(&gAmiPostManagerProtocolGuid, NULL, &TpmClearAmiPostMgr); + if(EFI_ERROR(Status))return; + + if(TpmClearAmiPostMgr != NULL) { + Status = TpmClearAmiPostMgr->DisplayInfoBox(L"TPM CLEAR",\ + L"Caution: A Reset is required to Clear the TPM for Flash Update. Enable Recovery after reset",20, &MyEvent); + + FixedDelay(1000000); //10seconds delay + } + + pRS->ResetSystem( EfiResetCold, 0, 0, NULL ); + } + } +} +//************************************************************************* +//************************************************************************* +//** ** +//** (C)Copyright 1985-2010, American Megatrends, Inc. ** +//** ** +//** All Rights Reserved. ** +//** ** +//** 5555 Oakbrook Parkway, Suite 200, Norcross, GA 30093 ** +//** ** +//** Phone: (770)-246-8600 ** +//** ** +//************************************************************************* +//************************************************************************* diff --git a/Core/EM/TCG2/TpmClearOnRollback/TpmClearOnRollback.cif b/Core/EM/TCG2/TpmClearOnRollback/TpmClearOnRollback.cif new file mode 100644 index 0000000..62c2814 --- /dev/null +++ b/Core/EM/TCG2/TpmClearOnRollback/TpmClearOnRollback.cif @@ -0,0 +1,17 @@ +<component> + name = "TpmClearOnRollback" + category = ModulePart + LocalRoot = "Core\EM\TCG2\TpmClearOnRollback\" + RefName = "TpmClearOnRollback" +[files] +"TpmClearOnRollback.c" +"TpmClearOnRollback.h" +"TpmClearOnRollback.sdl" +"TpmClearOnRollback.mak" +"TpmClearOnRollback.dxs" +"TpmClearOnRollbackSmiFlash.c" +"TpmClearOnRollbackWrapperLib.c" +"TpmClearOnRollbackWrapperLib.h" +[parts] +"AmiTpmClearOnRollbackProtocol" +<endComponent> diff --git a/Core/EM/TCG2/TpmClearOnRollback/TpmClearOnRollback.dxs b/Core/EM/TCG2/TpmClearOnRollback/TpmClearOnRollback.dxs new file mode 100644 index 0000000..c5f6e32 --- /dev/null +++ b/Core/EM/TCG2/TpmClearOnRollback/TpmClearOnRollback.dxs @@ -0,0 +1,75 @@ +//************************************************************************* +//************************************************************************* +//** ** +//** (C)Copyright 1985-2010, American Megatrends, Inc. ** +//** ** +//** All Rights Reserved. ** +//** ** +//** 5555 Oakbrook Parkway, Suite 200, Norcross, GA 30093 ** +//** ** +//** Phone: (770)-246-8600 ** +//** ** +//************************************************************************* +//************************************************************************* +//************************************************************************* +//************************************************************************* +// $Header: /Alaska/SOURCE/Modules/TCG2/Common/TpmClearOnRollback/TpmClearOnRollback.dxs 1 4/21/14 2:18p Fredericko $ +// +// $Revision: 1 $ +// +// $Date: 4/21/14 2:18p $ +//************************************************************************* +// Revision History +// ---------------- +// $Log: /Alaska/SOURCE/Modules/TCG2/Common/TpmClearOnRollback/TpmClearOnRollback.dxs $ +// +// 1 4/21/14 2:18p Fredericko +// +// 1 10/08/13 12:06p Fredericko +// Initial Check-In for Tpm-Next module +// +// 1 7/10/13 5:57p Fredericko +// [TAG] EIP120969 +// [Category] New Feature +// [Description] TCG (TPM20) +// +// 3 7/25/11 3:21a Fredericko +// [TAG] EIP65177 +// [Category] Spec Update +// [Severity] Minor +// [Description] TCG Ppi Sec ver 1.2 update +// +// 2 5/20/10 8:54a Fredericko +// +// Included File Header +// Included File Revision History +// EIP 37653 +// +//************************************************************************* +//<AMI_FHDR_START> +// +// Name: TCGSmm.dxs +// +// Description: +// Dependency for TcgSmm +// +//<AMI_FHDR_END> +//************************************************************************* +#include <Protocol\SmmBase2.h> + +DEPENDENCY_START + EFI_SMM_BASE2_PROTOCOL_GUID +DEPENDENCY_END +//************************************************************************* +//************************************************************************* +//************************************************************************* +//** ** +//** (C)Copyright 1985-2010, American Megatrends, Inc. ** +//** ** +//** All Rights Reserved. ** +//** ** +//** 5555 Oakbrook Parkway, Suite 200, Norcross, GA 30093 ** +//** ** +//** Phone: (770)-246-8600 ** +//** ** +//************************************************************************* diff --git a/Core/EM/TCG2/TpmClearOnRollback/TpmClearOnRollback.h b/Core/EM/TCG2/TpmClearOnRollback/TpmClearOnRollback.h new file mode 100644 index 0000000..23be079 --- /dev/null +++ b/Core/EM/TCG2/TpmClearOnRollback/TpmClearOnRollback.h @@ -0,0 +1,69 @@ +//************************************************************************* +//************************************************************************* +//** ** +//** (C)Copyright 1985-2011, American Megatrends, Inc. ** +//** ** +//** All Rights Reserved. ** +//** ** +//** 5555 Oakbrook Parkway, Suite 200, Norcross, GA 30093 ** +//** ** +//** Phone: (770)-246-8600 ** +//** ** +//************************************************************************* +//************************************************************************* +//********************************************************************** +// $Header: /Alaska/SOURCE/Modules/TCG2/Common/TpmClearOnRollback/TpmClearOnRollback.h 1 4/21/14 2:18p Fredericko $ +// +// $Revision: 1 $ +// +// $Date: 4/21/14 2:18p $ +//********************************************************************** +// Revision History +// ---------------- +// $Log: /Alaska/SOURCE/Modules/TCG2/Common/TpmClearOnRollback/TpmClearOnRollback.h $ +// +// 1 4/21/14 2:18p Fredericko +// +// 1 10/08/13 12:06p Fredericko +// Initial Check-In for Tpm-Next module +// +// 1 7/10/13 5:57p Fredericko +// [TAG] EIP120969 +// [Category] New Feature +// [Description] TCG (TPM20) +// +// +//********************************************************************** +//<AMI_FHDR_START> +//---------------------------------------------------------------------------- +// +// Name: +// +// Description: +// +//---------------------------------------------------------------------------- +//<AMI_FHDR_END> +#ifndef _TPM_CLEAR_ON_ROLLBACK_H +#define _TPM_CLEAR_ON_ROLLBACK_H + +#include <AmiDxeLib.h> +#include <Protocol\TcgService.h> +#include <TCGMisc.h> +#include <Protocol\SmmBase2.h> +#include <Protocol\AmiTpmClearOnRollbackProtocol.h> +#include "TpmClearOnRollbackWrapperLib.h" + +#endif +//************************************************************************* +//************************************************************************* +//** ** +//** (C)Copyright 1985-2011, American Megatrends, Inc. ** +//** ** +//** All Rights Reserved. ** +//** ** +//** 5555 Oakbrook Parkway, Suite 200, Norcross, GA 30093 ** +//** ** +//** Phone: (770)-246-8600 ** +//** ** +//************************************************************************* +//*************************************************************************
\ No newline at end of file diff --git a/Core/EM/TCG2/TpmClearOnRollback/TpmClearOnRollback.mak b/Core/EM/TCG2/TpmClearOnRollback/TpmClearOnRollback.mak new file mode 100644 index 0000000..f0423be --- /dev/null +++ b/Core/EM/TCG2/TpmClearOnRollback/TpmClearOnRollback.mak @@ -0,0 +1,107 @@ +#************************************************************************* +#************************************************************************* +#** ** +#** (C)Copyright 1985-2011, American Megatrends, Inc. ** +#** ** +#** All Rights Reserved. ** +#** ** +#** 5555 Oakbrook Parkway, Suite 200, Norcross, GA 30093 ** +#** ** +#** Phone: (770)-246-8600 ** +#** ** +#************************************************************************* +#************************************************************************* + +#********************************************************************** +# $Header: /Alaska/SOURCE/Modules/TCG2/Common/TpmClearOnRollback/TpmClearOnRollback.mak 1 4/21/14 2:18p Fredericko $ +# +# $Revision: 1 $ +# +# $Date: 4/21/14 2:18p $ +#********************************************************************** +# Revision History +# ---------------- +# $Log: /Alaska/SOURCE/Modules/TCG2/Common/TpmClearOnRollback/TpmClearOnRollback.mak $ +# +# 1 4/21/14 2:18p Fredericko +# +# 1 10/08/13 12:06p Fredericko +# Initial Check-In for Tpm-Next module +# +# 2 10/03/13 2:48p Fredericko +# +# 1 7/10/13 5:57p Fredericko +# [TAG] EIP120969 +# [Category] New Feature +# [Description] TCG (TPM20) +# +# +#********************************************************************** +#<AMI_FHDR_START> +# +# Name: +# +# Description: +# +#<AMI_FHDR_END> +#********************************************************************** +all : BuildTpmClearOnRollbackWrapperLib TPMCLEARONROLLBACK + +TPMCLEARONROLLBACK : $(BUILD_DIR)\TpmClearOnRollback.mak TpmClearRollBackSmmBin + +BuildTpmClearOnRollbackWrapperLib: $(BUILD_DIR)\TpmClearOnRollback.mak TpmClearOnRollbackWrapperLibBin +$(TpmClearOnRollbackWrapperLib): BuildTpmClearOnRollbackWrapperLib + +$(BUILD_DIR)\TpmClearOnRollback.mak : $(TPMCLEARONROLLBACK_DIR)\$(@B).cif $(TPMCLEARONROLLBACK_DIR)\$(@B).mak $(BUILD_RULES) + $(CIF2MAK) $(TPMCLEARONROLLBACK_DIR)\$(@B).cif $(CIF2MAK_DEFAULTS) + +TCGCLEAR_CFLAGS=$(CFLAGS) \ + /I$(TCG_DIR)\ + /I$(TCG_DIR)\Common\ + /I$(PROJECT_DIR)\Include\Protocol\ + /I$(TCG_DIR)\Protocol + + +TPM_CLEAR_ON_ROLLBACK_WRAPPEER_OBJS = \ +$(BUILD_DIR)\$(TPMCLEARONROLLBACK_DIR)\TpmClearOnRollbackWrapperLib.obj + +TpmClearOnRollbackWrapperLibBin: $(tcgLibLite) + $(MAKE) /$(MAKEFLAGS) $(BUILD_DEFAULTS)\ + /f $(BUILD_DIR)\TpmClearOnRollback.mak all\ + "CFLAGS=$(TCGCLEAR_CFLAGS)" \ + "OBJECTS=$(TPM_CLEAR_ON_ROLLBACK_WRAPPEER_OBJS)"\ + TYPE=LIBRARY \ + LIBRARY_NAME=$(TpmClearOnRollbackWrapperLib) + +TCGCLEAR_OBJECTS = \ +$(BUILD_DIR)\$(TPMCLEARONROLLBACK_DIR)\TpmClearOnRollbackSmiFlash.obj + +ReFlashBin: $(BUILD_DIR)\$(TCG)\TpmClearOnRollback.obj $(TpmClearOnRollbackWrapperLib) + +$(BUILD_DIR)\$(TCG)\TpmClearOnRollback.obj : $(TPMCLEARONROLLBACK_DIR)\TpmClearOnRollback.obj + $(CC) $(TCGCLEAR_CFLAGS) /Fo$(BUILD_DIR)\$(TCG)\TpmClearOnRollback.obj $(TPMCLEARONROLLBACK_DIR)\TpmClearOnRollback.c + +TpmClearRollBackSmmBin : $(TpmClearOnRollbackWrapperLib) $(AMIDXELIB) + $(MAKE) /$(MAKEFLAGS) $(BUILD_DEFAULTS) \ + /f $(BUILD_DIR)\TpmClearOnRollback.mak all \ + GUID=FD2CB3F1-9520-4c24-BCB3-2C73F0C2B7EC \ + "CFLAGS=$(TCGCLEAR_CFLAGS)" \ + ENTRY_POINT=TpmClearRollBackSmmInit \ + TYPE=BS_DRIVER \ + "OBJECTS=$(TCGCLEAR_OBJECTS)"\ + DEPEX1=$(TPMCLEARONROLLBACK_DIR)\TpmClearOnRollback.DXS \ + COMPRESS=1 \ + +#************************************************************************* +#************************************************************************* +#** ** +#** (C)Copyright 1985-2010, American Megatrends, Inc. ** +#** ** +#** All Rights Reserved. ** +#** ** +#** 5555 Oakbrook Parkway, Suite 200, Norcross, GA 30093 ** +#** ** +#** Phone: (770)-246-8600 ** +#** ** +#************************************************************************* +#************************************************************************* diff --git a/Core/EM/TCG2/TpmClearOnRollback/TpmClearOnRollback.sdl b/Core/EM/TCG2/TpmClearOnRollback/TpmClearOnRollback.sdl new file mode 100644 index 0000000..b616dae --- /dev/null +++ b/Core/EM/TCG2/TpmClearOnRollback/TpmClearOnRollback.sdl @@ -0,0 +1,41 @@ +TOKEN + Name = "TPMCLEARONROLLBACK_SUPPORT" + Value = "1" + Help = "Main switch to enable TcgPlatformSetupPolicy support in Project" + TokenType = Boolean + TargetH = Yes + TargetEQU = Yes + TargetMAK = Yes + Master = Yes + Token = "TPM12Enabled" "!=" "0" +End + + +PATH + Name = "TPMCLEARONROLLBACK_DIR" +End + +MODULE + Help = "Includes AmtPlatformPolicy.mak to Project" + File = "TpmClearOnRollback.mak" +End + +TOKEN + Name = "TpmClearOnRollbackWrapperLib" + Value = "$(BUILD_DIR)\TpmClearOnRollbackWrapperLib.lib" + TokenType = Expression + TargetMAK = Yes +End + + +ELINK + Name = "RecoveryClearTpmBeforeFlash," + Parent = "OemBeforeFlashUpdateList" + InvokeOrder = AfterParent +End + +ELINK + Name = "$(BUILD_DIR)\TpmClearOnRollback.ffs" + Parent = "FV_MAIN" + InvokeOrder = AfterParent +End
\ No newline at end of file diff --git a/Core/EM/TCG2/TpmClearOnRollback/TpmClearOnRollbackSmiFlash.c b/Core/EM/TCG2/TpmClearOnRollback/TpmClearOnRollbackSmiFlash.c new file mode 100644 index 0000000..720940b --- /dev/null +++ b/Core/EM/TCG2/TpmClearOnRollback/TpmClearOnRollbackSmiFlash.c @@ -0,0 +1,160 @@ +//************************************************************************* +//************************************************************************* +//** ** +//** (C)Copyright 1985-2011, American Megatrends, Inc. ** +//** ** +//** All Rights Reserved. ** +//** ** +//** 5555 Oakbrook Parkway, Suite 200, Norcross, GA 30093 ** +//** ** +//** Phone: (770)-246-8600 ** +//** ** +//************************************************************************* +//************************************************************************* +//********************************************************************** +// $Header: /Alaska/SOURCE/Modules/TCG2/Common/TpmClearOnRollback/TpmClearOnRollbackSmiFlash.c 1 4/21/14 2:18p Fredericko $ +// +// $Revision: 1 $ +// +// $Date: 4/21/14 2:18p $ +//********************************************************************** +// Revision History +// ---------------- +// $Log: /Alaska/SOURCE/Modules/TCG2/Common/TpmClearOnRollback/TpmClearOnRollbackSmiFlash.c $ +// +// 1 4/21/14 2:18p Fredericko +// +// 1 10/08/13 12:06p Fredericko +// Initial Check-In for Tpm-Next module +// +// 1 7/10/13 5:57p Fredericko +// [TAG] EIP120969 +// [Category] New Feature +// [Description] TCG (TPM20) +//********************************************************************** +//<AMI_FHDR_START> +//--------------------------------------------------------------------------- +// Name: +// +// +// +//--------------------------------------------------------------------------- +//<AMI_FHDR_END> +#include "TpmClearOnRollback.h" +#include <Protocol/AmiPostMgr.h> + +CLEAR_TPM_ROLLBACK_PROTOCOL *PrivateProtocol; +EFI_SMM_SYSTEM_TABLE2 *mSmst; +static FW_VERSION Fid; + + +UINT8 SmiFlashClearTpmBeforeFlash (){ + return(ClearTpmBeforeFlash()); +} + +//********************************************************************** +//<AMI_PHDR_START> +// +// Procedure: InstallTpmClearProtocolInSmm +// +// Description: InstallTcgSmmFlash Protocol +// +// +// Input: IN EFI_HANDLE ImageHandle, +// IN EFI_SYSTEM_TABLE *SystemTable +// +// Output: EFI_STATUS +// +// Modified: +// +// Referrals: +// +// Notes: +//<AMI_PHDR_END> +//********************************************************************** +EFI_STATUS InstallTpmClearProtocolInSmm( + IN EFI_HANDLE ImageHandle, + IN EFI_SYSTEM_TABLE *SystemTable ) +{ + EFI_SMM_BASE2_PROTOCOL *SmmBase; + EFI_HANDLE Handle=NULL; + EFI_STATUS Status; + EFI_GUID TpmRollbackSmmGuid = \ + AMI_TPM_ROLLBACK_SMM_PROTOCOL_GUID; + + Status = pBS->LocateProtocol (&gEfiSmmBase2ProtocolGuid, NULL, &SmmBase); + if((EFI_ERROR(Status)) || (SmmBase == NULL)){ + return Status; + } + + Status = SmmBase->GetSmstLocation(SmmBase, &mSmst); + if(EFI_ERROR(Status)){ + return Status; + } + + Status = mSmst->SmmAllocatePool ( + EfiRuntimeServicesData, + sizeof (CLEAR_TPM_ON_ROLLBACK), + &PrivateProtocol + ); + + if((EFI_ERROR(Status)) || (PrivateProtocol == NULL)){ + return Status; + } + + TpmRecoveryGetFidFromFv(&Fid); + + PrivateProtocol->ClearTpmOnRollBack = (VOID *)&SmiFlashClearTpmBeforeFlash; + + Status = mSmst->SmmInstallProtocolInterface( &Handle, \ + &TpmRollbackSmmGuid, \ + EFI_NATIVE_INTERFACE, \ + PrivateProtocol ); + + return Status; +} + + + +//****************************************************** **************** +//<AMI_PHDR_START> +// +// Procedure: TpmClearRollBackSmmInit +// +// Description: Entry point for subcomponent +// +// Input: IN EFI_HANDLE ImageHandle, +// IN EFI_SYSTEM_TABLE *SystemTable +// +// Output: EFI_STATUS +// +// Modified: +// +// Referrals: +// +// Notes: +// +//<AMI_PHDR_END> +//********************************************************************** +EFI_STATUS TpmClearRollBackSmmInit( + IN EFI_HANDLE ImageHandle, + IN EFI_SYSTEM_TABLE *SystemTable ) +{ + InitAmiLib( ImageHandle, SystemTable ); + + return InitSmmHandler( ImageHandle, SystemTable, InstallTpmClearProtocolInSmm, NULL ); +} + +//************************************************************************* +//************************************************************************* +//** ** +//** (C)Copyright 1985-2010, American Megatrends, Inc. ** +//** ** +//** All Rights Reserved. ** +//** ** +//** 5555 Oakbrook Parkway, Suite 200, Norcross, GA 30093 ** +//** ** +//** Phone: (770)-246-8600 ** +//** ** +//************************************************************************* +//************************************************************************* diff --git a/Core/EM/TCG2/TpmClearOnRollback/TpmClearOnRollbackWrapperLib.c b/Core/EM/TCG2/TpmClearOnRollback/TpmClearOnRollbackWrapperLib.c new file mode 100644 index 0000000..dd71a11 --- /dev/null +++ b/Core/EM/TCG2/TpmClearOnRollback/TpmClearOnRollbackWrapperLib.c @@ -0,0 +1,584 @@ +//************************************************************************* +//************************************************************************* +//** ** +//** (C)Copyright 1985-2011, American Megatrends, Inc. ** +//** ** +//** All Rights Reserved. ** +//** ** +//** 5555 Oakbrook Parkway, Suite 200, Norcross, GA 30093 ** +//** ** +//** Phone: (770)-246-8600 ** +//** ** +//************************************************************************* +//************************************************************************* +//********************************************************************** +// $Header: /Alaska/SOURCE/Modules/TCG2/Common/TpmClearOnRollback/TpmClearOnRollbackWrapperLib.c 2 4/21/14 3:17p Fredericko $ +// +// $Revision: 2 $ +// +// $Date: 4/21/14 3:17p $ +//********************************************************************** +// Revision History +// ---------------- +// $Log: /Alaska/SOURCE/Modules/TCG2/Common/TpmClearOnRollback/TpmClearOnRollbackWrapperLib.c $ +// +// 2 4/21/14 3:17p Fredericko +// +// 1 4/21/14 2:18p Fredericko +// +// 1 10/08/13 12:06p Fredericko +// Initial Check-In for Tpm-Next module +// +// 1 7/10/13 5:57p Fredericko +// [TAG] EIP120969 +// [Category] New Feature +// [Description] TCG (TPM20) +//********************************************************************** +//<AMI_FHDR_START> +//--------------------------------------------------------------------------- +// Name: +// +// +// +//--------------------------------------------------------------------------- +//<AMI_FHDR_END> +#include "TpmClearOnRollback.h" +#include "TpmClearOnRollbackWrapperLib.h" + + +//<AMI_PHDR_START> +//---------------------------------------------------------------------------- +// Procedure: TpmRecoveryGetFidFromFv +// +// Description: +// Finds FID information in the Flash +// +// Input: +// +// +// Output: +// +// +//---------------------------------------------------------------------------- +//<AMI_PHDR_END> +EFI_STATUS TpmRecoveryGetFidFromFv( + OUT VOID *Fid +) +{ + static EFI_GUID FidFileName = FID_FFS_FILE_NAME_GUID; + EFI_STATUS Status; + EFI_HANDLE *FvHandle; + UINTN FvCount; + UINTN i; + UINTN BufferSize; + VOID *Buffer; + + Status = pBS->LocateHandleBuffer(ByProtocol, &gEfiFirmwareVolume2ProtocolGuid, NULL, &FvCount, &FvHandle); + if (EFI_ERROR(Status)) + return Status; + + for(i = 0; i < FvCount; i++) + { + EFI_FIRMWARE_VOLUME_PROTOCOL *Fv; + UINT32 AuthStatus; + Status = pBS->HandleProtocol(FvHandle[i], &gEfiFirmwareVolume2ProtocolGuid, &Fv); + if (EFI_ERROR(Status)) + continue; + Buffer = 0; + BufferSize = 0; + Status = Fv->ReadSection(Fv, &FidFileName, EFI_SECTION_FREEFORM_SUBTYPE_GUID, 0, &Buffer, &BufferSize, &AuthStatus); + TRACE((-1, "extracted section with guid %g\n", (EFI_GUID *)Buffer)); + if (!EFI_ERROR(Status)) { + (UINT8 *)Buffer += sizeof(EFI_GUID); + MemCpy(Fid, Buffer, sizeof(FW_VERSION)); + (UINT8 *)Buffer -= sizeof(EFI_GUID); + pBS->FreePool(Buffer); + return EFI_SUCCESS; + } + } + pBS->FreePool(FvHandle); + return EFI_NOT_FOUND; +} + + + +//<AMI_PHDR_START> +//---------------------------------------------------------------------------- +// Procedure: TpmGetFidFromBuffer +// +// Description: +// Finds FID information in provided buffer +// +// Input: +// +// +// Output: +// +// +//---------------------------------------------------------------------------- +//<AMI_PHDR_END> +EFI_STATUS TpmGetFidFromBuffer( + OUT VOID *Fid, + IN VOID *Buffer +) +{ + static EFI_GUID FidSectionGuid = FID_FFS_FILE_SECTION_GUID; + UINT32 Signature; + UINT32 *SearchPointer; + + SearchPointer = (UINT32 *)((UINT8 *)Buffer - sizeof(EFI_GUID) + FLASH_SIZE); + Signature = FidSectionGuid.Data1; + + do { + if(*SearchPointer == Signature) { + if(!guidcmp(&FidSectionGuid, (EFI_GUID *)SearchPointer)) { + (UINT8 *)SearchPointer += sizeof(EFI_GUID); + MemCpy(Fid, SearchPointer, sizeof(FW_VERSION)); + return EFI_SUCCESS; + } + } + } while(SearchPointer-- >= (UINT32 *)Buffer); + + return EFI_NOT_FOUND; +} + + + + +//<AMI_PHDR_START> +//---------------------------------------------------------------------------- +// Procedure: SendTpmCommandRecovery +// +// Description: +// Generic send TPM Transaction +// +// Input: +// +// +// Output: +// +// +//---------------------------------------------------------------------------- +//<AMI_PHDR_END> +EFI_STATUS SendTpmCommandRecovery(UINT8 *Cmd, UINTN CmdSize, + UINT8 *RetBuff, UINTN RetBuffSize) +{ + EFI_STATUS Status; + TPM_TRANSMIT_BUFFER InBuffer[1], OutBuffer[1]; + + InBuffer[0].Buffer = Cmd; + InBuffer[0].Size = CmdSize; + OutBuffer[0].Buffer = RetBuff; + OutBuffer[0].Size = RetBuffSize; + + Status = TpmLibPassThrough(((TPM_1_2_REGISTERS_PTR)(UINTN)TPM_BASE_ADDRESS), + sizeof (InBuffer)/sizeof (*InBuffer), + InBuffer, + sizeof (OutBuffer) / sizeof (*OutBuffer), + OutBuffer); + + return Status; + +} + + + +//********************************************************************** +//<AMI_PHDR_START> +// +// Procedure: RecoverySetPhysicalPresence +// +// Description: +// +// Input: +// +// Output: +// +// Modified: +// +// Referrals: +// +// Notes: +//<AMI_PHDR_END> +//********************************************************************** +EFI_STATUS RecoverySetPhysicalPresence() +{ + EFI_STATUS Status; + PHYSICAL_PRESENCE_CMD PpCmd; + TPM_1_2_RET_HEADER retHeader; + + + PpCmd.Hdr.Tag = TPM_H2NS( TPM_TAG_RQU_COMMAND ); + PpCmd.Hdr.ParamSize = TPM_H2NL( sizeof (PHYSICAL_PRESENCE_CMD)); + PpCmd.Hdr.Ordinal = TPM_H2NL( TSC_ORD_PhysicalPresence ); + PpCmd.Data = TPM_H2NS(TPM_PHYSICAL_PRESENCE_CMD_ENABLE ); + + MemSet(&retHeader, sizeof(TPM_1_2_RET_HEADER), 0); + + Status = SendTpmCommandRecovery((UINT8 *)&PpCmd, sizeof(PHYSICAL_PRESENCE_CMD), + (UINT8 *)&retHeader, sizeof(TPM_1_2_RET_HEADER)); + + //don't care about error case on setting physical presence CMD type + //care about actual physical presence failure + MemSet(&retHeader, sizeof(TPM_1_2_RET_HEADER), 0); + + PpCmd.Data = TPM_H2NS(TPM_PHYSICAL_PRESENCE_PRESENT); + + Status = SendTpmCommandRecovery((UINT8 *)&PpCmd, sizeof(PHYSICAL_PRESENCE_CMD), + (UINT8 *)&retHeader, sizeof(TPM_1_2_RET_HEADER)); + + if(retHeader.RetCode == 0) + { + return EFI_SUCCESS; + } + + return EFI_SECURITY_VIOLATION; + +} + + + +//********************************************************************** +//<AMI_PHDR_START> +// +// Procedure: RecoveryEnableActivate +// +// Description: +// +// Input: +// +// Output: +// +// Modified: +// +// Referrals: +// +// Notes: +//<AMI_PHDR_END> +//********************************************************************** +EFI_STATUS RecoveryEnableActivate() +{ + EFI_STATUS Status; + DATA_CMD Command; + TPM_1_2_CMD_HEADER cmdEnable; + TPM_1_2_RET_HEADER retHeader; + + cmdEnable.Tag = TPM_H2NS( TPM_TAG_RQU_COMMAND ); + cmdEnable.ParamSize = TPM_H2NL( sizeof (TPM_1_2_CMD_HEADER)); + cmdEnable.Ordinal = TPM_H2NL( TPM_ORD_PhysicalEnable ); + + MemSet(&retHeader, sizeof(TPM_1_2_RET_HEADER), 0); + + Status = SendTpmCommandRecovery((UINT8 *)&cmdEnable, sizeof(TPM_1_2_CMD_HEADER), + (UINT8 *)&retHeader, sizeof(TPM_1_2_RET_HEADER)); + + if(!EFI_ERROR(Status) && retHeader.RetCode == 0){ + Command.Hdr.Tag = TPM_H2NS( TPM_TAG_RQU_COMMAND ); + Command.Hdr.ParamSize = TPM_H2NL( sizeof (DATA_CMD)); + Command.Hdr.Ordinal = TPM_H2NL( TPM_ORD_PhysicalSetDeactivated ); + Command.Data = 0x0; + + MemSet(&retHeader, sizeof(TPM_1_2_RET_HEADER), 0); + + Status = SendTpmCommandRecovery((UINT8 *)&Command, sizeof(DATA_CMD), + (UINT8 *)&retHeader, sizeof(TPM_1_2_RET_HEADER)); + + if(retHeader.RetCode == 0) + { + return EFI_SUCCESS; + } + } + + return EFI_SECURITY_VIOLATION; + +} + + + +//********************************************************************** +//<AMI_PHDR_START> +// +// Procedure: RecoverySendClearCmd +// +// Description: +// +// Input: +// +// Output: +// +// Modified: +// +// Referrals: +// +// Notes: +//<AMI_PHDR_END> +//********************************************************************** +UINT8 RecoverySendClearCmd() +{ + EFI_STATUS Status; + TPM_1_2_CMD_HEADER cmdClear; + TPM_1_2_RET_HEADER retHeader; + + cmdClear.Tag = TPM_H2NS( TPM_TAG_RQU_COMMAND ); + cmdClear.ParamSize = TPM_H2NL( sizeof (TPM_1_2_CMD_HEADER)); + cmdClear.Ordinal = TPM_H2NL( TPM_ORD_ForceClear ); + + MemSet(&retHeader, sizeof(TPM_1_2_RET_HEADER), 0); + + Status = SendTpmCommandRecovery((UINT8 *)&cmdClear, sizeof(TPM_1_2_CMD_HEADER), + (UINT8 *)&retHeader, sizeof(TPM_1_2_RET_HEADER)); + + if(retHeader.RetCode == 0) + { + return TPM_CLEAR_SUCCESSFUL; + }else if((retHeader.RetCode == TPM_H2NL(DISABLED))|| + (retHeader.RetCode == TPM_H2NL(DEACTIVATED))){ + //we need to send enable and activate command + //reset and then clear. + Status = RecoveryEnableActivate(); + + if(!EFI_ERROR(Status)){ + return TPM_CLEAR_RESET_REQUIRED; + } + } + + return TPM_FATAL_CONTINUE_FLASH; + +} + + +//********************************************************************** +//<AMI_PHDR_START> +// +// Procedure: RecoverySendStartUpCmd +// +// Description: +// +// Input: +// +// Output: +// +// Modified: +// +// Referrals: +// +// Notes: +//<AMI_PHDR_END> +//********************************************************************** +EFI_STATUS RecoverySendStartUpCmd() +{ + EFI_STATUS Status; + TPM_1_2_CMD_STARTUP cmdStartup; + TPM_1_2_RET_HEADER retHeader; + TPM_STARTUP_TYPE TpmSt = TPM_ST_CLEAR; + + cmdStartup.Header.Tag = TPM_H2NS( TPM_TAG_RQU_COMMAND ); + cmdStartup.Header.ParamSize = TPM_H2NL( sizeof (cmdStartup)); + cmdStartup.Header.Ordinal = TPM_H2NL( TPM_ORD_Startup ); + cmdStartup.StartupType = TPM_H2NS( TpmSt ); + + MemSet(&retHeader, sizeof(TPM_1_2_RET_HEADER), 0); + + Status = SendTpmCommandRecovery((UINT8 *)&cmdStartup, sizeof(TPM_1_2_CMD_STARTUP), + (UINT8 *)&retHeader, sizeof(TPM_1_2_RET_HEADER)); + + if(retHeader.RetCode == 0) + { + return EFI_SUCCESS; + } + + return EFI_DEVICE_ERROR; +} + + + +//********************************************************************** +//<AMI_PHDR_START> +// +// Procedure: GetCapabilityCmd +// +// Description: +// +// Input: +// +// Output: +// +// Modified: +// +// Referrals: +// +// Notes: +//<AMI_PHDR_END> +//********************************************************************** +EFI_STATUS GetCapabilityCmd(TPM_Capabilities_PermanentFlag *PermFlags) +{ + EFI_STATUS Status = EFI_ABORTED; + BOOLEAN Support = FALSE; + TPM_GetCapabilities_Input cmdGetCap; + + cmdGetCap.Tag = TPM_H2NS( TPM_TAG_RQU_COMMAND ); + cmdGetCap.ParamSize = TPM_H2NL( sizeof (cmdGetCap)); + + if(AutoSupportType()){ + //not supported + return EFI_SUCCESS; + }else{ + cmdGetCap.CommandCode = TPM_H2NL( TPM_ORD_GetCapability ); + cmdGetCap.caparea = TPM_H2NL( TPM_CAP_FLAG ); + } + + cmdGetCap.subCapSize = TPM_H2NL( 4 ); // subCap is always 32bit long + cmdGetCap.subCap = TPM_H2NL( TPM_CAP_FLAG_PERMANENT ); + + Status = SendTpmCommandRecovery((UINT8 *)&cmdGetCap, sizeof(TPM_GetCapabilities_Input), + (UINT8 *)PermFlags, sizeof(TPM_Capabilities_PermanentFlag)); + + if(PermFlags->RetCode == TPM_H2NL(INVALID_POSTINIT)) + { + return EFI_NOT_READY; + } + + if(PermFlags->RetCode == 0){ + return EFI_SUCCESS; + } + + return EFI_DEVICE_ERROR; +} + + + +//********************************************************************** +//<AMI_PHDR_START> +// +// Procedure: GetVolatileFlags +// +// Description: +// +// Input: +// +// Output: +// +// Modified: +// +// Referrals: +// +// Notes: +//<AMI_PHDR_END> +//********************************************************************** +EFI_STATUS GetVolatileFlags(TPM_VOLATILE_FLAGS *VolatileFlags) +{ + EFI_STATUS Status = EFI_ABORTED; + BOOLEAN Support = FALSE; + TPM_GetCapabilities_Input cmdGetCap; + + cmdGetCap.Tag = TPM_H2NS( TPM_TAG_RQU_COMMAND ); + cmdGetCap.ParamSize = TPM_H2NL( sizeof (cmdGetCap)); + + if(AutoSupportType()){ + return EFI_SUCCESS; + }else{ + cmdGetCap.CommandCode = TPM_H2NL( TPM_ORD_GetCapability ); + cmdGetCap.caparea = TPM_H2NL( TPM_CAP_FLAG ); + } + + cmdGetCap.subCapSize = TPM_H2NL( 4 ); // subCap is always 32bit long + cmdGetCap.subCap = TPM_H2NL( TPM_CAP_FLAG_VOLATILE ); + + Status = SendTpmCommandRecovery((UINT8 *)&cmdGetCap, sizeof(TPM_GetCapabilities_Input), + (UINT8 *)VolatileFlags, sizeof(TPM_VOLATILE_FLAGS)); + + if(VolatileFlags->RetCode == TPM_H2NL(INVALID_POSTINIT)) + { + return EFI_NOT_READY; + } + + if(VolatileFlags->RetCode == 0){ + return EFI_SUCCESS; + } + + return EFI_DEVICE_ERROR; +} + + + +//********************************************************************** +//<AMI_PHDR_START> +// +// Procedure: ClearTpmBeforeFlash +// +// Description: +// +// Input: +// +// Output: +// +// Modified: +// +// Referrals: +// +// Notes: +//<AMI_PHDR_END> +//********************************************************************** +UINT8 ClearTpmBeforeFlash() +{ + TPM_Capabilities_PermanentFlag PermFlags; + UINT8 Result=0; + EFI_STATUS Status; + TPM_VOLATILE_FLAGS TpmVolatileFlags; + + if(AutoSupportType())return TPM_CLEAR_SUCCESSFUL; + + Status = IsTpmPresent((TPM_1_2_REGISTERS_PTR)( UINTN ) TPM_BASE_ADDRESS); + if(EFI_ERROR(Status)){ + return TPM_CLEAR_SUCCESSFUL; + } + + //else we have a TPM need to process to clear + TisRequestLocality((TPM_1_2_REGISTERS_PTR)( UINTN ) TPM_BASE_ADDRESS); + + Status = GetCapabilityCmd(&PermFlags); + if(Status == EFI_NOT_READY) + { + Status = RecoverySendStartUpCmd(); + if(EFI_ERROR(Status)) + { + return TPM_FATAL_CONTINUE_FLASH; + } + } + + if(EFI_ERROR(Status))return TPM_FATAL_CONTINUE_FLASH; + + Status = RecoverySetPhysicalPresence(); + if(!EFI_ERROR(Status)) + { + Status = GetVolatileFlags(&TpmVolatileFlags); + if(!EFI_ERROR(Status)){ + if(TpmVolatileFlags.physicalPresenceLock){ + //we need to go into manufacturing mode\special mode + //to skip physical presence lock; Return we failed + //to clear TPM and flashing should be discontinued. + return TPM_FATAL_DISCONTINUE_FLASH; + } + } + Result = RecoverySendClearCmd(); + }else{ + if(EFI_ERROR(Status))return TPM_FATAL_CONTINUE_FLASH; + } + + TisReleaseLocality((TPM_1_2_REGISTERS_PTR)( UINTN ) TPM_BASE_ADDRESS); + + return Result; +} +//************************************************************************* +//************************************************************************* +//** ** +//** (C)Copyright 1985-2010, American Megatrends, Inc. ** +//** ** +//** All Rights Reserved. ** +//** ** +//** 5555 Oakbrook Parkway, Suite 200, Norcross, GA 30093 ** +//** ** +//** Phone: (770)-246-8600 ** +//** ** +//************************************************************************* +//************************************************************************* diff --git a/Core/EM/TCG2/TpmClearOnRollback/TpmClearOnRollbackWrapperLib.h b/Core/EM/TCG2/TpmClearOnRollback/TpmClearOnRollbackWrapperLib.h new file mode 100644 index 0000000..5c32d15 --- /dev/null +++ b/Core/EM/TCG2/TpmClearOnRollback/TpmClearOnRollbackWrapperLib.h @@ -0,0 +1,198 @@ +//************************************************************************* +//************************************************************************* +//** ** +//** (C)Copyright 1985-2011, American Megatrends, Inc. ** +//** ** +//** All Rights Reserved. ** +//** ** +//** 5555 Oakbrook Parkway, Suite 200, Norcross, GA 30093 ** +//** ** +//** Phone: (770)-246-8600 ** +//** ** +//************************************************************************* +//************************************************************************* +//********************************************************************** +// $Header: /Alaska/SOURCE/Modules/TCG2/Common/TpmClearOnRollback/TpmClearOnRollbackWrapperLib.h 1 4/21/14 2:18p Fredericko $ +// +// $Revision: 1 $ +// +// $Date: 4/21/14 2:18p $ +//********************************************************************** +// Revision History +// ---------------- +// $Log: /Alaska/SOURCE/Modules/TCG2/Common/TpmClearOnRollback/TpmClearOnRollbackWrapperLib.h $ +// +// 1 4/21/14 2:18p Fredericko +// +// 1 10/08/13 12:06p Fredericko +// Initial Check-In for Tpm-Next module +// +// 1 7/10/13 5:57p Fredericko +// [TAG] EIP120969 +// [Category] New Feature +// [Description] TCG (TPM20) +// +// +//********************************************************************** +//<AMI_FHDR_START> +//---------------------------------------------------------------------------- +// +// Name: +// +// Description: +// +//---------------------------------------------------------------------------- +//<AMI_FHDR_END> +#ifndef _TPM_CLEAR_ON_ROLLBACK_WRAPPER_H +#define _TPM_CLEAR_ON_ROLLBACK_WRAPPER_H + +#include <AmiDxeLib.h> +#include <Protocol\TcgService.h> +#include <TCGMisc.h> +#include <Protocol\SmmBase2.h> +#include <Protocol\AmiTpmClearOnRollbackProtocol.h> +#include <PPI/FwVersion.h> +#include <Hob.h> +#include <Token.h> +#include <AmiHobs.h> + +#define FID_FFS_FILE_NAME_GUID \ + { 0x3fd1d3a2, 0x99f7, 0x420b, 0xbc, 0x69, 0x8b, 0xb1, 0xd4, 0x92, 0xa3, 0x32 } + +#define FID_FFS_FILE_SECTION_GUID \ + { 0x2EBE0275, 0x6458, 0x4AF9, 0x91, 0xED, 0xD3, 0xF4, 0xED, 0xB1, 0x00, 0xAA } + +#define TPM_BASE_ADDRESS 0xfed40000 +#define BASE 0x0 +#define INVALID_POSTINIT ((TPM_RESULT) (BASE + 38)) +#define DISABLED ((TPM_RESULT) (BASE + 7)) +#define DEACTIVATED ((TPM_RESULT) (BASE + 6)) + +#define TPM_H2NS( x ) \ + (((UINT16)(x) << 8) | ((UINT16)(x) >> 8)) +#define TPM_H2NL( x ) \ + (UINT32)((((UINT32)(x)) >> 24) \ + | (((x) >> 8) & 0xff00) \ + | ((x) << 24) \ + | (((x) & 0xff00) << 8)) + +#define TPM_N2HS( x ) TPM_H2NS( x ) +#define TPM_N2HL( x ) TPM_H2NL( x ) + +#pragma pack(1) + +typedef struct _TPM_1_2_REGISTERS { + UINT8 Access; // 0 + UINT8 Reserved1[7]; // 1 + UINT32 IntEnable; // 8 + UINT8 IntVector; // 0ch + UINT8 Reserved2[3]; // 0dh + UINT32 IntSts; // 10h + UINT32 IntfCapability; // 14h + UINT8 Sts; // 18h + UINT16 BurstCount; // 19h + UINT8 Reserved3[9]; + UINT32 DataFifo; // 24h + UINT8 Reserved4[0xed8]; // 28h + UINT16 Vid; // 0f00h + UINT16 Did; // 0f02h + UINT8 Rid; // 0f04h + UINT8 TcgDefined[0x7b]; // 0f05h + UINT32 LegacyAddress1; // 0f80h + UINT32 LegacyAddress1Ex; // 0f84h + UINT32 LegacyAddress2; // 0f88h + UINT32 LegacyAddress2Ex; // 0f8ch + UINT8 VendorDefined[0x70];// 0f90h +} TPM_1_2_REGISTERS; + +typedef volatile TPM_1_2_REGISTERS *TPM_1_2_REGISTERS_PTR; + +typedef struct _TPM_TRANSMIT_BUFFER { + VOID *Buffer; + UINTN Size; +} TPM_TRANSMIT_BUFFER; + +typedef struct _TPM_1_2_CMD_HEADER +{ + TPM_TAG Tag; + UINT32 ParamSize; + TPM_COMMAND_CODE Ordinal; +} TPM_1_2_CMD_HEADER; + +typedef struct _TPM_1_2_RET_HEADER +{ + TPM_TAG Tag; + UINT32 ParamSize; + TPM_RESULT RetCode; +} TPM_1_2_RET_HEADER; + +typedef struct _TPM_1_2_CMD_STARTUP +{ + TPM_1_2_CMD_HEADER Header; + TPM_STARTUP_TYPE StartupType; +} TPM_1_2_CMD_STARTUP; + +typedef struct _PHYSICAL_PRESENCE_CMD{ + TPM_1_2_CMD_HEADER Hdr; + UINT16 Data; +} PHYSICAL_PRESENCE_CMD; + +typedef struct _DATA_CMD{ + TPM_1_2_CMD_HEADER Hdr; + UINT8 Data; +} DATA_CMD; + +#pragma pack() + +EFI_STATUS +__stdcall IsTpmPresent ( + IN TPM_1_2_REGISTERS_PTR TpmReg ); + +EFI_STATUS +__stdcall TisReleaseLocality ( + IN TPM_1_2_REGISTERS_PTR TpmReg ); + +EFI_STATUS +__stdcall TisRequestLocality ( + IN TPM_1_2_REGISTERS_PTR TpmReg ); + +EFI_STATUS +__stdcall TpmLibPassThrough ( + IN TPM_1_2_REGISTERS_PTR TpmReg, + IN UINTN NoInputBuffers, + IN TPM_TRANSMIT_BUFFER *InputBuffers, + IN UINTN NoOutputBuffers, + IN OUT TPM_TRANSMIT_BUFFER *OutputBuffers ); + +BOOLEAN +__stdcall AutoSupportType (); + +EFI_STATUS TpmRecoveryGetFidFromFv( + OUT VOID *Fid +); + +EFI_STATUS TpmGetFidFromBuffer( + OUT VOID *Fid, + IN VOID *Buffer +); + +UINT8 ClearTpmBeforeFlash(); + +void +__stdcall +FixedDelay(UINT32 dCount); + +#endif +//************************************************************************* +//************************************************************************* +//** ** +//** (C)Copyright 1985-2011, American Megatrends, Inc. ** +//** ** +//** All Rights Reserved. ** +//** ** +//** 5555 Oakbrook Parkway, Suite 200, Norcross, GA 30093 ** +//** ** +//** Phone: (770)-246-8600 ** +//** ** +//************************************************************************* +//*************************************************************************
\ No newline at end of file |