]> git.proxmox.com Git - mirror_edk2.git/commitdiff
SecurityPkg/Tcg2: Add Support Laml, Lasa for TPM2 ACPI.
authorJiewen Yao <jiewen.yao@intel.com>
Sat, 28 Sep 2019 11:56:08 +0000 (19:56 +0800)
committerJiewen Yao <jiewen.yao@intel.com>
Fri, 11 Oct 2019 02:06:51 +0000 (10:06 +0800)
REF: https://bugzilla.tianocore.org/show_bug.cgi?id=978

Tcg2Dxe produces PcdTpm2AcpiTableLaml/Lasa for event log address.
Tcg2Smm consumes PcdTpm2AcpiTableLaml/Lasa to fill TPM2 ACPI table.

Cc: Jian J Wang <jian.j.wang@intel.com>
Cc: Chao Zhang <chao.b.zhang@intel.com>
Signed-off-by: Jiewen Yao <jiewen.yao@intel.com>
Reviewed-by: Jian J Wang <jian.j.wang@intel.com>
SecurityPkg/Tcg/Tcg2Dxe/Tcg2Dxe.c
SecurityPkg/Tcg/Tcg2Dxe/Tcg2Dxe.inf
SecurityPkg/Tcg/Tcg2Smm/Tcg2Smm.c
SecurityPkg/Tcg/Tcg2Smm/Tcg2Smm.inf

index a2729457b72c0f68c2f6a468f3df7b3ecabb6476..85f2e0ae3809efd6ba412061b18db619aca7f997 100644 (file)
@@ -1467,17 +1467,37 @@ SetupEventLog (
   for (Index = 0; Index < sizeof(mTcg2EventInfo)/sizeof(mTcg2EventInfo[0]); Index++) {\r
     if ((mTcgDxeData.BsCap.SupportedEventLogs & mTcg2EventInfo[Index].LogFormat) != 0) {\r
       mTcgDxeData.EventLogAreaStruct[Index].EventLogFormat = mTcg2EventInfo[Index].LogFormat;\r
-      Status = gBS->AllocatePages (\r
-                      AllocateAnyPages,\r
-                      EfiBootServicesData,\r
-                      EFI_SIZE_TO_PAGES (PcdGet32 (PcdTcgLogAreaMinLen)),\r
-                      &Lasa\r
-                      );\r
+      if (PcdGet8(PcdTpm2AcpiTableRev) >= 4) {\r
+        Status = gBS->AllocatePages (\r
+                        AllocateAnyPages,\r
+                        EfiACPIMemoryNVS,\r
+                        EFI_SIZE_TO_PAGES (PcdGet32 (PcdTcgLogAreaMinLen)),\r
+                        &Lasa\r
+                        );\r
+      } else {\r
+        Status = gBS->AllocatePages (\r
+                        AllocateAnyPages,\r
+                        EfiBootServicesData,\r
+                        EFI_SIZE_TO_PAGES (PcdGet32 (PcdTcgLogAreaMinLen)),\r
+                        &Lasa\r
+                        );\r
+      }\r
       if (EFI_ERROR (Status)) {\r
         return Status;\r
       }\r
       mTcgDxeData.EventLogAreaStruct[Index].Lasa = Lasa;\r
       mTcgDxeData.EventLogAreaStruct[Index].Laml = PcdGet32 (PcdTcgLogAreaMinLen);\r
+\r
+      if ((PcdGet8(PcdTpm2AcpiTableRev) >= 4) ||\r
+          (mTcg2EventInfo[Index].LogFormat == EFI_TCG2_EVENT_LOG_FORMAT_TCG_2)) {\r
+        //\r
+        // Report TCG2 event log address and length, so that they can be reported in TPM2 ACPI table.\r
+        // Ignore the return status, because those fields are optional.\r
+        //\r
+        PcdSet32S(PcdTpm2AcpiTableLaml, (UINT32)mTcgDxeData.EventLogAreaStruct[Index].Laml);\r
+        PcdSet64S(PcdTpm2AcpiTableLasa, mTcgDxeData.EventLogAreaStruct[Index].Lasa);\r
+      }\r
+\r
       //\r
       // To initialize them as 0xFF is recommended\r
       // because the OS can know the last entry for that.\r
index 9a44aadea606b3c7a76dca869b6a4118e5de5c3e..c41c50a7a26cc4678a82535a26cfbbfcd25e03f7 100644 (file)
   gEfiSecurityPkgTokenSpaceGuid.PcdTcg2NumberOfPCRBanks                     ## CONSUMES\r
   gEfiSecurityPkgTokenSpaceGuid.PcdTcgLogAreaMinLen                         ## CONSUMES\r
   gEfiSecurityPkgTokenSpaceGuid.PcdTcg2FinalLogAreaLen                      ## CONSUMES\r
+  gEfiSecurityPkgTokenSpaceGuid.PcdTpm2AcpiTableRev                         ## CONSUMES\r
+  gEfiSecurityPkgTokenSpaceGuid.PcdTpm2AcpiTableLaml                        ## PRODUCES\r
+  gEfiSecurityPkgTokenSpaceGuid.PcdTpm2AcpiTableLasa                        ## PRODUCES\r
 \r
 [Depex]\r
   TRUE\r
index a2d71741f2e52efc08330635e4216d8e0513a0f3..14e4ed0ee1e0e3d4f2b277e519174e906b4cb0c0 100644 (file)
@@ -16,8 +16,24 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
 \r
 #include "Tcg2Smm.h"\r
 \r
+#pragma pack(1)\r
 \r
-EFI_TPM2_ACPI_TABLE  mTpm2AcpiTemplate = {\r
+typedef struct {\r
+  EFI_ACPI_DESCRIPTION_HEADER Header;\r
+  // Flags field is replaced in version 4 and above\r
+  //    BIT0~15:  PlatformClass      This field is only valid for version 4 and above\r
+  //    BIT16~31: Reserved\r
+  UINT32                      Flags;\r
+  UINT64                      AddressOfControlArea;\r
+  UINT32                      StartMethod;\r
+  UINT8                       PlatformSpecificParameters[12];  // size up to 12\r
+  UINT32                      Laml;                          // Optional\r
+  UINT64                      Lasa;                          // Optional\r
+} EFI_TPM2_ACPI_TABLE_V4;\r
+\r
+#pragma pack()\r
+\r
+EFI_TPM2_ACPI_TABLE_V4  mTpm2AcpiTemplate = {\r
   {\r
     EFI_ACPI_5_0_TRUSTED_COMPUTING_PLATFORM_2_TABLE_SIGNATURE,\r
     sizeof (mTpm2AcpiTemplate),\r
@@ -748,6 +764,16 @@ PublishTpm2 (
     DEBUG((DEBUG_INFO, "Tpm2 ACPI table PlatformClass is %d\n", (mTpm2AcpiTemplate.Flags & 0x0000FFFF)));\r
   }\r
 \r
+  mTpm2AcpiTemplate.Laml = PcdGet32(PcdTpm2AcpiTableLaml);\r
+  mTpm2AcpiTemplate.Lasa = PcdGet64(PcdTpm2AcpiTableLasa);\r
+  if ((mTpm2AcpiTemplate.Header.Revision < EFI_TPM2_ACPI_TABLE_REVISION_4) ||\r
+      (mTpm2AcpiTemplate.Laml == 0) || (mTpm2AcpiTemplate.Lasa == 0)) {\r
+    //\r
+    // If version is smaller than 4 or Laml/Lasa is not valid, rollback to original Length.\r
+    //\r
+    mTpm2AcpiTemplate.Header.Length = sizeof(EFI_TPM2_ACPI_TABLE);\r
+  }\r
+\r
   //\r
   // Measure to PCR[0] with event EV_POST_CODE ACPI DATA\r
   //\r
@@ -757,7 +783,7 @@ PublishTpm2 (
     EV_POSTCODE_INFO_ACPI_DATA,\r
     ACPI_DATA_LEN,\r
     &mTpm2AcpiTemplate,\r
-    sizeof(mTpm2AcpiTemplate)\r
+    mTpm2AcpiTemplate.Header.Length\r
     );\r
 \r
   InterfaceType = PcdGet8(PcdActiveTpmInterfaceType);\r
@@ -795,7 +821,7 @@ PublishTpm2 (
   Status = AcpiTable->InstallAcpiTable (\r
                         AcpiTable,\r
                         &mTpm2AcpiTemplate,\r
-                        sizeof(mTpm2AcpiTemplate),\r
+                        mTpm2AcpiTemplate.Header.Length,\r
                         &TableKey\r
                         );\r
   ASSERT_EFI_ERROR (Status);\r
index 471342703fb1f2f11581a8fcacea03c31a9f14be..e33cbcc49152385670dcec16eda758c780423b95 100644 (file)
@@ -84,6 +84,8 @@
   gEfiSecurityPkgTokenSpaceGuid.PcdTpm2CurrentIrqNum            ## CONSUMES\r
   gEfiSecurityPkgTokenSpaceGuid.PcdTpm2PossibleIrqNumBuf        ## CONSUMES\r
   gEfiSecurityPkgTokenSpaceGuid.PcdActiveTpmInterfaceType       ## CONSUMES\r
+  gEfiSecurityPkgTokenSpaceGuid.PcdTpm2AcpiTableLaml            ## CONSUMES\r
+  gEfiSecurityPkgTokenSpaceGuid.PcdTpm2AcpiTableLasa            ## CONSUMES\r
 \r
 [Depex]\r
   gEfiAcpiTableProtocolGuid AND\r