#include <Library/BaseLib.h>\r
#include <Library/MemoryAllocationLib.h>\r
#include <Library/ReportStatusCodeLib.h>\r
-\r
-#include "TpmComm.h"\r
+#include <Library/Tpm12DeviceLib.h>\r
+#include <Library/Tpm12CommandLib.h>\r
+#include <Library/BaseCryptLib.h>\r
\r
BOOLEAN mImageInMemory = FALSE;\r
\r
return EFI_SUCCESS;\r
}\r
\r
+/**\r
+Single function calculates SHA1 digest value for all raw data. It\r
+combines Sha1Init(), Sha1Update() and Sha1Final().\r
+\r
+@param[in] Data Raw data to be digested.\r
+@param[in] DataLen Size of the raw data.\r
+@param[out] Digest Pointer to a buffer that stores the final digest.\r
+\r
+@retval EFI_SUCCESS Always successfully calculate the final digest.\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+TpmCommHashAll (\r
+ IN CONST UINT8 *Data,\r
+ IN UINTN DataLen,\r
+ OUT TPM_DIGEST *Digest\r
+ )\r
+{\r
+ VOID *Sha1Ctx;\r
+ UINTN CtxSize;\r
+\r
+ CtxSize = Sha1GetContextSize ();\r
+ Sha1Ctx = AllocatePool (CtxSize);\r
+ ASSERT (Sha1Ctx != NULL);\r
+\r
+ Sha1Init (Sha1Ctx);\r
+ Sha1Update (Sha1Ctx, Data, DataLen);\r
+ Sha1Final (Sha1Ctx, (UINT8 *)Digest);\r
+\r
+ FreePool (Sha1Ctx);\r
+\r
+ return EFI_SUCCESS;\r
+}\r
+\r
/**\r
Do a hash operation on a data buffer, extend a specific TPM PCR with the hash result,\r
and build a GUIDed HOB recording the event which will be passed to the DXE phase and\r
}\r
}\r
\r
- Status = TpmCommExtend (\r
- PeiServices,\r
+ Status = Tpm12Extend (\r
&NewEventHdr->Digest,\r
NewEventHdr->PCRIndex,\r
NULL\r
)\r
{\r
EFI_STATUS Status;\r
+ TPM_PERMANENT_FLAGS TpmPermanentFlags;\r
PEI_LOCK_PHYSICAL_PRESENCE_PPI *LockPhysicalPresencePpi;\r
- BOOLEAN LifetimeLock;\r
- BOOLEAN CmdEnable;\r
TPM_PHYSICAL_PRESENCE PhysicalPresenceValue;\r
\r
- Status = TpmCommGetCapability (PeiServices, NULL, &LifetimeLock, &CmdEnable);\r
+ Status = Tpm12GetCapabilityFlagPermanent (&TpmPermanentFlags);\r
if (EFI_ERROR (Status)) {\r
return Status;\r
}\r
//\r
// 1. Set physicalPresenceLifetimeLock, physicalPresenceHWEnable and physicalPresenceCMDEnable bit by PCDs.\r
//\r
- if (PcdGetBool (PcdPhysicalPresenceLifetimeLock) && !LifetimeLock) {\r
+ if (PcdGetBool (PcdPhysicalPresenceLifetimeLock) && !TpmPermanentFlags.physicalPresenceLifetimeLock) {\r
//\r
// Lock TPM LifetimeLock is required, and LifetimeLock is not locked yet. \r
//\r
\r
if (PcdGetBool (PcdPhysicalPresenceCmdEnable)) {\r
PhysicalPresenceValue |= TPM_PHYSICAL_PRESENCE_CMD_ENABLE;\r
- CmdEnable = TRUE;\r
+ TpmPermanentFlags.physicalPresenceCMDEnable = TRUE;\r
} else {\r
PhysicalPresenceValue |= TPM_PHYSICAL_PRESENCE_CMD_DISABLE;\r
- CmdEnable = FALSE;\r
+ TpmPermanentFlags.physicalPresenceCMDEnable = FALSE;\r
}\r
\r
if (PcdGetBool (PcdPhysicalPresenceHwEnable)) {\r
PhysicalPresenceValue |= TPM_PHYSICAL_PRESENCE_HW_DISABLE;\r
} \r
\r
- Status = TpmCommPhysicalPresence (\r
- PeiServices,\r
+ Status = Tpm12PhysicalPresence (\r
PhysicalPresenceValue\r
);\r
if (EFI_ERROR (Status)) {\r
return EFI_SUCCESS;\r
}\r
\r
- if (!CmdEnable) {\r
- if (LifetimeLock) {\r
+ if (!TpmPermanentFlags.physicalPresenceCMDEnable) {\r
+ if (TpmPermanentFlags.physicalPresenceLifetimeLock) {\r
//\r
// physicalPresenceCMDEnable is locked, can't change.\r
//\r
// Enable physical presence command\r
// It is necessary in order to lock physical presence\r
//\r
- Status = TpmCommPhysicalPresence (\r
- PeiServices,\r
+ Status = Tpm12PhysicalPresence (\r
TPM_PHYSICAL_PRESENCE_CMD_ENABLE\r
);\r
if (EFI_ERROR (Status)) {\r
//\r
// Lock physical presence\r
// \r
- Status = TpmCommPhysicalPresence (\r
- PeiServices,\r
+ Status = Tpm12PhysicalPresence (\r
TPM_PHYSICAL_PRESENCE_LOCK\r
);\r
return Status;\r
\r
**/\r
BOOLEAN\r
-EFIAPI\r
IsTpmUsable (\r
- IN EFI_PEI_SERVICES **PeiServices\r
+ VOID\r
)\r
{\r
- EFI_STATUS Status;\r
- BOOLEAN Deactivated;\r
+ EFI_STATUS Status;\r
+ TPM_PERMANENT_FLAGS TpmPermanentFlags;\r
\r
- Status = TpmCommGetCapability (PeiServices, &Deactivated, NULL, NULL);\r
+ Status = Tpm12GetCapabilityFlagPermanent (&TpmPermanentFlags);\r
if (EFI_ERROR (Status)) {\r
return FALSE;\r
}\r
- return (BOOLEAN)(!Deactivated); \r
+ return (BOOLEAN)(!TpmPermanentFlags.deactivated);\r
}\r
\r
/**\r
return Status;\r
}\r
\r
- if (IsTpmUsable (PeiServices)) {\r
+ if (IsTpmUsable ()) {\r
if (PcdGet8 (PcdTpmScrtmPolicy) == 1) {\r
Status = MeasureCRTMVersion (PeiServices);\r
}\r
}\r
\r
if (PcdGet8 (PcdTpmInitializationPolicy) == 1) {\r
- Status = TpmCommStartup ((EFI_PEI_SERVICES**)PeiServices, BootMode);\r
+ if (BootMode == BOOT_ON_S3_RESUME) {\r
+ Status = Tpm12Startup (TPM_ST_STATE);\r
+ } else {\r
+ Status = Tpm12Startup (TPM_ST_CLEAR);\r
+ }\r
if (EFI_ERROR (Status) ) {\r
goto Done;\r
}\r
// TpmSelfTest is optional on S3 path, skip it to save S3 time\r
//\r
if (BootMode != BOOT_ON_S3_RESUME) {\r
- Status = TpmCommContinueSelfTest ((EFI_PEI_SERVICES**)PeiServices);\r
+ Status = Tpm12ContinueSelfTest ();\r
if (EFI_ERROR (Status)) {\r
goto Done;\r
}\r