]> git.proxmox.com Git - mirror_edk2.git/blobdiff - SecurityPkg/Tcg/TcgPei/TcgPei.c
SecurityPkg/TcgPei: Use updated Tpm12CommandLib APIs
[mirror_edk2.git] / SecurityPkg / Tcg / TcgPei / TcgPei.c
index b3ca64273d6d63e603d5b2e5b6aafe780e8498cd..25724a6812e7c411dd05344661059b3718771cb1 100644 (file)
@@ -38,8 +38,9 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
 #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
@@ -197,6 +198,40 @@ EndofPeiSignalNotifyCallBack (
   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
@@ -242,8 +277,7 @@ HashLogExtendEvent (
     }\r
   }\r
 \r
-  Status = TpmCommExtend (\r
-             PeiServices,\r
+  Status = Tpm12Extend (\r
              &NewEventHdr->Digest,\r
              NewEventHdr->PCRIndex,\r
              NULL\r
@@ -540,12 +574,11 @@ PhysicalPresencePpiNotifyCallback (
   )\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
@@ -553,7 +586,7 @@ PhysicalPresencePpiNotifyCallback (
   //\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
@@ -561,10 +594,10 @@ PhysicalPresencePpiNotifyCallback (
 \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
@@ -573,8 +606,7 @@ PhysicalPresencePpiNotifyCallback (
       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
@@ -590,8 +622,8 @@ PhysicalPresencePpiNotifyCallback (
     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
@@ -602,8 +634,7 @@ PhysicalPresencePpiNotifyCallback (
     // 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
@@ -614,8 +645,7 @@ PhysicalPresencePpiNotifyCallback (
   //\r
   // Lock physical presence\r
   // \r
-  Status = TpmCommPhysicalPresence (\r
-              PeiServices,\r
+  Status = Tpm12PhysicalPresence (\r
               TPM_PHYSICAL_PRESENCE_LOCK\r
               );\r
   return Status;\r
@@ -631,19 +661,18 @@ PhysicalPresencePpiNotifyCallback (
 \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
@@ -682,7 +711,7 @@ PeimEntryMP (
     return Status;\r
   }\r
 \r
-  if (IsTpmUsable (PeiServices)) {\r
+  if (IsTpmUsable ()) {\r
     if (PcdGet8 (PcdTpmScrtmPolicy) == 1) {\r
       Status = MeasureCRTMVersion (PeiServices);\r
     }\r
@@ -759,7 +788,11 @@ PeimEntryMA (
     }\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
@@ -769,7 +802,7 @@ PeimEntryMA (
     // 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