/** @file\r
This module implements Tcg2 Protocol.\r
\r
-Copyright (c) 2015, Intel Corporation. All rights reserved.<BR>\r
+Copyright (c) 2015 - 2016, Intel Corporation. All rights reserved.<BR>\r
This program and the accompanying materials \r
are licensed and made available under the terms and conditions of the BSD License \r
which accompanies this distribution. The full text of the license may be found at \r
#include <PiDxe.h>\r
#include <IndustryStandard/Acpi.h>\r
#include <IndustryStandard/PeImage.h>\r
-#include <IndustryStandard/SmBios.h>\r
#include <IndustryStandard/TcpaAcpi.h>\r
\r
#include <Guid/GlobalVariable.h>\r
-#include <Guid/SmBios.h>\r
#include <Guid/HobList.h>\r
#include <Guid/TcgEventHob.h>\r
#include <Guid/EventGroup.h>\r
EFI_GUID *VendorGuid;\r
} VARIABLE_TYPE;\r
\r
-#define EFI_TCG_LOG_AREA_SIZE 0x10000\r
-#define EFI_TCG_FINAL_LOG_AREA_SIZE 0x1000\r
-\r
#define TCG2_DEFAULT_MAX_COMMAND_SIZE 0x1000\r
#define TCG2_DEFAULT_MAX_RESPONSE_SIZE 0x1000\r
\r
IN TCG_EfiSpecIDEventStruct *TcgEfiSpecIdEventStruct\r
)\r
{\r
- TCG_EfiSpecIdEventAlgorithmSize *digestSize;\r
+ TCG_EfiSpecIdEventAlgorithmSize *DigestSize;\r
UINTN Index;\r
- UINT8 *vendorInfoSize;\r
- UINT8 *vendorInfo;\r
- UINT32 numberOfAlgorithms;\r
+ UINT8 *VendorInfoSize;\r
+ UINT8 *VendorInfo;\r
+ UINT32 NumberOfAlgorithms;\r
\r
DEBUG ((EFI_D_INFO, " TCG_EfiSpecIDEventStruct:\n"));\r
DEBUG ((EFI_D_INFO, " signature - '"));\r
DEBUG ((EFI_D_INFO, " specVersion - %d.%d%d\n", TcgEfiSpecIdEventStruct->specVersionMajor, TcgEfiSpecIdEventStruct->specVersionMinor, TcgEfiSpecIdEventStruct->specErrata));\r
DEBUG ((EFI_D_INFO, " uintnSize - 0x%02x\n", TcgEfiSpecIdEventStruct->uintnSize));\r
\r
- CopyMem (&numberOfAlgorithms, TcgEfiSpecIdEventStruct + 1, sizeof(numberOfAlgorithms));\r
- DEBUG ((EFI_D_INFO, " numberOfAlgorithms - 0x%08x\n", numberOfAlgorithms));\r
+ CopyMem (&NumberOfAlgorithms, TcgEfiSpecIdEventStruct + 1, sizeof(NumberOfAlgorithms));\r
+ DEBUG ((EFI_D_INFO, " NumberOfAlgorithms - 0x%08x\n", NumberOfAlgorithms));\r
\r
- digestSize = (TCG_EfiSpecIdEventAlgorithmSize *)((UINT8 *)TcgEfiSpecIdEventStruct + sizeof(*TcgEfiSpecIdEventStruct) + sizeof(numberOfAlgorithms));\r
- for (Index = 0; Index < numberOfAlgorithms; Index++) {\r
+ DigestSize = (TCG_EfiSpecIdEventAlgorithmSize *)((UINT8 *)TcgEfiSpecIdEventStruct + sizeof(*TcgEfiSpecIdEventStruct) + sizeof(NumberOfAlgorithms));\r
+ for (Index = 0; Index < NumberOfAlgorithms; Index++) {\r
DEBUG ((EFI_D_INFO, " digest(%d)\n", Index));\r
- DEBUG ((EFI_D_INFO, " algorithmId - 0x%04x\n", digestSize[Index].algorithmId));\r
- DEBUG ((EFI_D_INFO, " digestSize - 0x%04x\n", digestSize[Index].digestSize));\r
+ DEBUG ((EFI_D_INFO, " algorithmId - 0x%04x\n", DigestSize[Index].algorithmId));\r
+ DEBUG ((EFI_D_INFO, " digestSize - 0x%04x\n", DigestSize[Index].digestSize));\r
}\r
- vendorInfoSize = (UINT8 *)&digestSize[numberOfAlgorithms];\r
- DEBUG ((EFI_D_INFO, " vendorInfoSize - 0x%02x\n", *vendorInfoSize));\r
- vendorInfo = vendorInfoSize + 1;\r
- DEBUG ((EFI_D_INFO, " vendorInfo - "));\r
- for (Index = 0; Index < *vendorInfoSize; Index++) {\r
- DEBUG ((EFI_D_INFO, "%02x ", vendorInfo[Index]));\r
+ VendorInfoSize = (UINT8 *)&DigestSize[NumberOfAlgorithms];\r
+ DEBUG ((EFI_D_INFO, " VendorInfoSize - 0x%02x\n", *VendorInfoSize));\r
+ VendorInfo = VendorInfoSize + 1;\r
+ DEBUG ((EFI_D_INFO, " VendorInfo - "));\r
+ for (Index = 0; Index < *VendorInfoSize; Index++) {\r
+ DEBUG ((EFI_D_INFO, "%02x ", VendorInfo[Index]));\r
}\r
DEBUG ((EFI_D_INFO, "\n"));\r
}\r
IN TCG_EfiSpecIDEventStruct *TcgEfiSpecIdEventStruct\r
)\r
{\r
- TCG_EfiSpecIdEventAlgorithmSize *digestSize;\r
- UINT8 *vendorInfoSize;\r
- UINT32 numberOfAlgorithms;\r
+ TCG_EfiSpecIdEventAlgorithmSize *DigestSize;\r
+ UINT8 *VendorInfoSize;\r
+ UINT32 NumberOfAlgorithms;\r
\r
- CopyMem (&numberOfAlgorithms, TcgEfiSpecIdEventStruct + 1, sizeof(numberOfAlgorithms));\r
+ CopyMem (&NumberOfAlgorithms, TcgEfiSpecIdEventStruct + 1, sizeof(NumberOfAlgorithms));\r
\r
- digestSize = (TCG_EfiSpecIdEventAlgorithmSize *)((UINT8 *)TcgEfiSpecIdEventStruct + sizeof(*TcgEfiSpecIdEventStruct) + sizeof(numberOfAlgorithms));\r
- vendorInfoSize = (UINT8 *)&digestSize[numberOfAlgorithms];\r
- return sizeof(TCG_EfiSpecIDEventStruct) + sizeof(UINT32) + (numberOfAlgorithms * sizeof(TCG_EfiSpecIdEventAlgorithmSize)) + sizeof(UINT8) + (*vendorInfoSize);\r
+ DigestSize = (TCG_EfiSpecIdEventAlgorithmSize *)((UINT8 *)TcgEfiSpecIdEventStruct + sizeof(*TcgEfiSpecIdEventStruct) + sizeof(NumberOfAlgorithms));\r
+ VendorInfoSize = (UINT8 *)&DigestSize[NumberOfAlgorithms];\r
+ return sizeof(TCG_EfiSpecIDEventStruct) + sizeof(UINT32) + (NumberOfAlgorithms * sizeof(TCG_EfiSpecIdEventAlgorithmSize)) + sizeof(UINT8) + (*VendorInfoSize);\r
}\r
\r
/**\r
return EFI_INVALID_PARAMETER;\r
}\r
\r
- if (!mTcgDxeData.GetEventLogCalled[Index]) {\r
- EventLogAreaStruct = &mTcgDxeData.EventLogAreaStruct[Index];\r
- } else {\r
- EventLogAreaStruct = &mTcgDxeData.FinalEventLogAreaStruct[Index];\r
- }\r
+ //\r
+ // Record to normal event log\r
+ //\r
+ EventLogAreaStruct = &mTcgDxeData.EventLogAreaStruct[Index];\r
\r
if (EventLogAreaStruct->EventLogTruncated) {\r
return EFI_VOLUME_FULL;\r
NewEventSize\r
);\r
\r
- if (Status == EFI_DEVICE_ERROR) {\r
- return EFI_DEVICE_ERROR;\r
- } else if (Status == EFI_OUT_OF_RESOURCES) {\r
+ if (Status == EFI_OUT_OF_RESOURCES) {\r
EventLogAreaStruct->EventLogTruncated = TRUE;\r
return EFI_VOLUME_FULL;\r
} else if (Status == EFI_SUCCESS) {\r
EventLogAreaStruct->EventLogStarted = TRUE;\r
- if (mTcgDxeData.GetEventLogCalled[Index]) {\r
+ }\r
+\r
+ //\r
+ // If GetEventLog is called, record to FinalEventsTable, too.\r
+ //\r
+ if (mTcgDxeData.GetEventLogCalled[Index]) {\r
+ if (mTcgDxeData.FinalEventsTable[Index] == NULL) {\r
+ //\r
+ // no need for FinalEventsTable\r
+ //\r
+ return EFI_SUCCESS;\r
+ }\r
+ EventLogAreaStruct = &mTcgDxeData.FinalEventLogAreaStruct[Index];\r
+\r
+ if (EventLogAreaStruct->EventLogTruncated) {\r
+ return EFI_VOLUME_FULL;\r
+ }\r
+\r
+ EventLogAreaStruct->LastEvent = (UINT8*)(UINTN)EventLogAreaStruct->Lasa;\r
+ Status = TcgCommLogEvent (\r
+ &EventLogAreaStruct->LastEvent,\r
+ &EventLogAreaStruct->EventLogSize,\r
+ (UINTN)EventLogAreaStruct->Laml,\r
+ NewEventHdr,\r
+ NewEventHdrSize,\r
+ NewEventData,\r
+ NewEventSize\r
+ );\r
+ if (Status == EFI_OUT_OF_RESOURCES) {\r
+ EventLogAreaStruct->EventLogTruncated = TRUE;\r
+ return EFI_VOLUME_FULL;\r
+ } else if (Status == EFI_SUCCESS) {\r
+ EventLogAreaStruct->EventLogStarted = TRUE;\r
+ //\r
+ // Increase the NumberOfEvents in FinalEventsTable\r
+ //\r
(mTcgDxeData.FinalEventsTable[Index])->NumberOfEvents ++;\r
+ DEBUG ((EFI_D_INFO, "FinalEventsTable->NumberOfEvents - 0x%x\n", (mTcgDxeData.FinalEventsTable[Index])->NumberOfEvents));\r
+ DEBUG ((EFI_D_INFO, " Size - 0x%x\n", (UINTN)EventLogAreaStruct->LastEvent - (UINTN)mTcgDxeData.FinalEventsTable[Index]));\r
}\r
}\r
\r
UINT32 DigestListBinSize;\r
UINT32 EventSize;\r
TCG_EfiSpecIDEventStruct *TcgEfiSpecIdEventStruct;\r
- UINT8 TempBuf[sizeof(TCG_EfiSpecIDEventStruct) + (HASH_COUNT * sizeof(TCG_EfiSpecIdEventAlgorithmSize)) + sizeof(UINT8)];\r
+ UINT8 TempBuf[sizeof(TCG_EfiSpecIDEventStruct) + sizeof(UINT32) + (HASH_COUNT * sizeof(TCG_EfiSpecIdEventAlgorithmSize)) + sizeof(UINT8)];\r
TCG_PCR_EVENT_HDR FirstPcrEvent;\r
- TCG_EfiSpecIdEventAlgorithmSize *digestSize;\r
- UINT8 *vendorInfoSize;\r
- UINT32 numberOfAlgorithms;\r
+ TCG_EfiSpecIdEventAlgorithmSize *DigestSize;\r
+ TCG_EfiSpecIdEventAlgorithmSize *TempDigestSize;\r
+ UINT8 *VendorInfoSize;\r
+ UINT32 NumberOfAlgorithms;\r
\r
DEBUG ((EFI_D_INFO, "SetupEventLog\n"));\r
\r
Lasa = (EFI_PHYSICAL_ADDRESS) (SIZE_4GB - 1);\r
Status = gBS->AllocatePages (\r
AllocateMaxAddress,\r
- EfiACPIMemoryNVS,\r
- EFI_SIZE_TO_PAGES (EFI_TCG_LOG_AREA_SIZE),\r
+ EfiBootServicesData,\r
+ EFI_SIZE_TO_PAGES (PcdGet32 (PcdTcgLogAreaMinLen)),\r
&Lasa\r
);\r
if (EFI_ERROR (Status)) {\r
return Status;\r
}\r
mTcgDxeData.EventLogAreaStruct[Index].Lasa = Lasa;\r
- mTcgDxeData.EventLogAreaStruct[Index].Laml = EFI_TCG_LOG_AREA_SIZE;\r
+ mTcgDxeData.EventLogAreaStruct[Index].Laml = PcdGet32 (PcdTcgLogAreaMinLen);\r
//\r
// To initialize them as 0xFF is recommended \r
// because the OS can know the last entry for that.\r
//\r
- SetMem ((VOID *)(UINTN)Lasa, EFI_TCG_LOG_AREA_SIZE, 0xFF);\r
+ SetMem ((VOID *)(UINTN)Lasa, PcdGet32 (PcdTcgLogAreaMinLen), 0xFF);\r
//\r
// Create first entry for Log Header Entry Data\r
//\r
TcgEfiSpecIdEventStruct->specVersionMinor = TCG_EfiSpecIDEventStruct_SPEC_VERSION_MINOR_TPM2;\r
TcgEfiSpecIdEventStruct->specErrata = TCG_EfiSpecIDEventStruct_SPEC_ERRATA_TPM2;\r
TcgEfiSpecIdEventStruct->uintnSize = sizeof(UINTN)/sizeof(UINT32);\r
- numberOfAlgorithms = 0;\r
- digestSize = (TCG_EfiSpecIdEventAlgorithmSize *)((UINT8 *)TcgEfiSpecIdEventStruct + sizeof(*TcgEfiSpecIdEventStruct) + sizeof(numberOfAlgorithms));\r
+ NumberOfAlgorithms = 0;\r
+ DigestSize = (TCG_EfiSpecIdEventAlgorithmSize *)((UINT8 *)TcgEfiSpecIdEventStruct + sizeof(*TcgEfiSpecIdEventStruct) + sizeof(NumberOfAlgorithms));\r
if ((mTcgDxeData.BsCap.ActivePcrBanks & EFI_TCG2_BOOT_HASH_ALG_SHA1) != 0) {\r
- digestSize[numberOfAlgorithms].algorithmId = TPM_ALG_SHA1;\r
- digestSize[numberOfAlgorithms].digestSize = SHA1_DIGEST_SIZE;\r
- numberOfAlgorithms++;\r
+ TempDigestSize = DigestSize;\r
+ TempDigestSize += NumberOfAlgorithms;\r
+ TempDigestSize->algorithmId = TPM_ALG_SHA1;\r
+ TempDigestSize->digestSize = SHA1_DIGEST_SIZE;\r
+ NumberOfAlgorithms++;\r
}\r
if ((mTcgDxeData.BsCap.ActivePcrBanks & EFI_TCG2_BOOT_HASH_ALG_SHA256) != 0) {\r
- digestSize[numberOfAlgorithms].algorithmId = TPM_ALG_SHA256;\r
- digestSize[numberOfAlgorithms].digestSize = SHA256_DIGEST_SIZE;\r
- numberOfAlgorithms++;\r
+ TempDigestSize = DigestSize;\r
+ TempDigestSize += NumberOfAlgorithms;\r
+ TempDigestSize->algorithmId = TPM_ALG_SHA256;\r
+ TempDigestSize->digestSize = SHA256_DIGEST_SIZE;\r
+ NumberOfAlgorithms++;\r
}\r
if ((mTcgDxeData.BsCap.ActivePcrBanks & EFI_TCG2_BOOT_HASH_ALG_SHA384) != 0) {\r
- digestSize[numberOfAlgorithms].algorithmId = TPM_ALG_SHA384;\r
- digestSize[numberOfAlgorithms].digestSize = SHA384_DIGEST_SIZE;\r
- numberOfAlgorithms++;\r
+ TempDigestSize = DigestSize;\r
+ TempDigestSize += NumberOfAlgorithms;\r
+ TempDigestSize->algorithmId = TPM_ALG_SHA384;\r
+ TempDigestSize->digestSize = SHA384_DIGEST_SIZE;\r
+ NumberOfAlgorithms++;\r
}\r
if ((mTcgDxeData.BsCap.ActivePcrBanks & EFI_TCG2_BOOT_HASH_ALG_SHA512) != 0) {\r
- digestSize[numberOfAlgorithms].algorithmId = TPM_ALG_SHA512;\r
- digestSize[numberOfAlgorithms].digestSize = SHA512_DIGEST_SIZE;\r
- numberOfAlgorithms++;\r
+ TempDigestSize = DigestSize;\r
+ TempDigestSize += NumberOfAlgorithms;\r
+ TempDigestSize->algorithmId = TPM_ALG_SHA512;\r
+ TempDigestSize->digestSize = SHA512_DIGEST_SIZE;\r
+ NumberOfAlgorithms++;\r
}\r
if ((mTcgDxeData.BsCap.ActivePcrBanks & EFI_TCG2_BOOT_HASH_ALG_SM3_256) != 0) {\r
- digestSize[numberOfAlgorithms].algorithmId = TPM_ALG_SM3_256;\r
- digestSize[numberOfAlgorithms].digestSize = SM3_256_DIGEST_SIZE;\r
- numberOfAlgorithms++;\r
+ TempDigestSize = DigestSize;\r
+ TempDigestSize += NumberOfAlgorithms;\r
+ TempDigestSize->algorithmId = TPM_ALG_SM3_256;\r
+ TempDigestSize->digestSize = SM3_256_DIGEST_SIZE;\r
+ NumberOfAlgorithms++;\r
}\r
- CopyMem (TcgEfiSpecIdEventStruct + 1, &numberOfAlgorithms, sizeof(numberOfAlgorithms));\r
- vendorInfoSize = (UINT8 *)&digestSize[numberOfAlgorithms];\r
- *vendorInfoSize = 0;\r
+ CopyMem (TcgEfiSpecIdEventStruct + 1, &NumberOfAlgorithms, sizeof(NumberOfAlgorithms));\r
+ TempDigestSize = DigestSize;\r
+ TempDigestSize += NumberOfAlgorithms;\r
+ VendorInfoSize = (UINT8 *)TempDigestSize;\r
+ *VendorInfoSize = 0;\r
\r
//\r
// FirstPcrEvent\r
//\r
for (Index = 0; Index < sizeof(mTcg2EventInfo)/sizeof(mTcg2EventInfo[0]); Index++) {\r
if ((mTcgDxeData.BsCap.SupportedEventLogs & mTcg2EventInfo[Index].LogFormat) != 0) {\r
- Lasa = (EFI_PHYSICAL_ADDRESS) (SIZE_4GB - 1);\r
- Status = gBS->AllocatePages (\r
- AllocateMaxAddress,\r
- EfiACPIMemoryNVS,\r
- EFI_SIZE_TO_PAGES (EFI_TCG_FINAL_LOG_AREA_SIZE),\r
- &Lasa\r
- );\r
- if (EFI_ERROR (Status)) {\r
- return Status;\r
- }\r
- SetMem ((VOID *)(UINTN)Lasa, EFI_TCG_FINAL_LOG_AREA_SIZE, 0xFF);\r
+ if (mTcg2EventInfo[Index].LogFormat == EFI_TCG2_EVENT_LOG_FORMAT_TCG_2) {\r
+ Lasa = (EFI_PHYSICAL_ADDRESS) (SIZE_4GB - 1);\r
+ Status = gBS->AllocatePages (\r
+ AllocateMaxAddress,\r
+ EfiACPIMemoryNVS,\r
+ EFI_SIZE_TO_PAGES (PcdGet32 (PcdTcg2FinalLogAreaLen)),\r
+ &Lasa\r
+ );\r
+ if (EFI_ERROR (Status)) {\r
+ return Status;\r
+ }\r
+ SetMem ((VOID *)(UINTN)Lasa, PcdGet32 (PcdTcg2FinalLogAreaLen), 0xFF);\r
\r
- //\r
- // Initialize\r
- //\r
- mTcgDxeData.FinalEventsTable[Index] = (VOID *)(UINTN)Lasa;\r
- (mTcgDxeData.FinalEventsTable[Index])->Version = EFI_TCG2_FINAL_EVENTS_TABLE_VERSION;\r
- (mTcgDxeData.FinalEventsTable[Index])->NumberOfEvents = 0;\r
-\r
- mTcgDxeData.FinalEventLogAreaStruct[Index].EventLogFormat = mTcg2EventInfo[Index].LogFormat;\r
- mTcgDxeData.FinalEventLogAreaStruct[Index].Lasa = Lasa + sizeof(EFI_TCG2_FINAL_EVENTS_TABLE);\r
- mTcgDxeData.FinalEventLogAreaStruct[Index].Laml = EFI_TCG_FINAL_LOG_AREA_SIZE - sizeof(EFI_TCG2_FINAL_EVENTS_TABLE);\r
- mTcgDxeData.FinalEventLogAreaStruct[Index].EventLogSize = 0;\r
- mTcgDxeData.FinalEventLogAreaStruct[Index].LastEvent = (VOID *)(UINTN)mTcgDxeData.FinalEventLogAreaStruct[Index].Lasa;\r
- mTcgDxeData.FinalEventLogAreaStruct[Index].EventLogStarted = FALSE;\r
- mTcgDxeData.FinalEventLogAreaStruct[Index].EventLogTruncated = FALSE;\r
+ //\r
+ // Initialize\r
+ //\r
+ mTcgDxeData.FinalEventsTable[Index] = (VOID *)(UINTN)Lasa;\r
+ (mTcgDxeData.FinalEventsTable[Index])->Version = EFI_TCG2_FINAL_EVENTS_TABLE_VERSION;\r
+ (mTcgDxeData.FinalEventsTable[Index])->NumberOfEvents = 0;\r
+\r
+ mTcgDxeData.FinalEventLogAreaStruct[Index].EventLogFormat = mTcg2EventInfo[Index].LogFormat;\r
+ mTcgDxeData.FinalEventLogAreaStruct[Index].Lasa = Lasa + sizeof(EFI_TCG2_FINAL_EVENTS_TABLE);\r
+ mTcgDxeData.FinalEventLogAreaStruct[Index].Laml = PcdGet32 (PcdTcg2FinalLogAreaLen) - sizeof(EFI_TCG2_FINAL_EVENTS_TABLE);\r
+ mTcgDxeData.FinalEventLogAreaStruct[Index].EventLogSize = 0;\r
+ mTcgDxeData.FinalEventLogAreaStruct[Index].LastEvent = (VOID *)(UINTN)mTcgDxeData.FinalEventLogAreaStruct[Index].Lasa;\r
+ mTcgDxeData.FinalEventLogAreaStruct[Index].EventLogStarted = FALSE;\r
+ mTcgDxeData.FinalEventLogAreaStruct[Index].EventLogTruncated = FALSE;\r
\r
- if (mTcg2EventInfo[Index].LogFormat == EFI_TCG2_EVENT_LOG_FORMAT_TCG_2) {\r
//\r
- // Install to configuration table\r
+ // Install to configuration table for EFI_TCG2_EVENT_LOG_FORMAT_TCG_2 \r
//\r
- Status = gBS->InstallConfigurationTable (&gEfiTcg2FinalEventsTableGuid, (VOID *)mTcgDxeData.FinalEventsTable[1]);\r
+ Status = gBS->InstallConfigurationTable (&gEfiTcg2FinalEventsTableGuid, (VOID *)mTcgDxeData.FinalEventsTable[Index]);\r
if (EFI_ERROR (Status)) {\r
return Status;\r
}\r
+ } else {\r
+ //\r
+ // No need to handle EFI_TCG2_EVENT_LOG_FORMAT_TCG_1_2\r
+ //\r
+ mTcgDxeData.FinalEventsTable[Index] = NULL;\r
+ mTcgDxeData.FinalEventLogAreaStruct[Index].EventLogFormat = mTcg2EventInfo[Index].LogFormat;\r
+ mTcgDxeData.FinalEventLogAreaStruct[Index].Lasa = 0;\r
+ mTcgDxeData.FinalEventLogAreaStruct[Index].Laml = 0;\r
+ mTcgDxeData.FinalEventLogAreaStruct[Index].EventLogSize = 0;\r
+ mTcgDxeData.FinalEventLogAreaStruct[Index].LastEvent = 0;\r
+ mTcgDxeData.FinalEventLogAreaStruct[Index].EventLogStarted = FALSE;\r
+ mTcgDxeData.FinalEventLogAreaStruct[Index].EventLogTruncated = FALSE;\r
}\r
}\r
}\r
)\r
{\r
EFI_STATUS Status;\r
- SMBIOS_TABLE_ENTRY_POINT *SmbiosTable;\r
TCG_PCR_EVENT_HDR TcgEvent;\r
EFI_HANDOFF_TABLE_POINTERS HandoffTables;\r
UINTN ProcessorNum;\r
EFI_CPU_PHYSICAL_LOCATION *ProcessorLocBuf;\r
\r
ProcessorLocBuf = NULL;\r
-\r
- //\r
- // Measure SMBIOS with EV_EFI_HANDOFF_TABLES to PCR[1]\r
- //\r
- Status = EfiGetSystemConfigurationTable (\r
- &gEfiSmbiosTableGuid,\r
- (VOID **) &SmbiosTable\r
- );\r
-\r
- if (!EFI_ERROR (Status) && SmbiosTable != NULL) {\r
- TcgEvent.PCRIndex = 1;\r
- TcgEvent.EventType = EV_EFI_HANDOFF_TABLES;\r
- TcgEvent.EventSize = sizeof (HandoffTables);\r
-\r
- HandoffTables.NumberOfTables = 1;\r
- HandoffTables.TableEntry[0].VendorGuid = gEfiSmbiosTableGuid;\r
- HandoffTables.TableEntry[0].VendorTable = SmbiosTable;\r
-\r
- DEBUG ((DEBUG_INFO, "The Smbios Table starts at: 0x%x\n", SmbiosTable->TableAddress));\r
- DEBUG ((DEBUG_INFO, "The Smbios Table size: 0x%x\n", SmbiosTable->TableLength));\r
-\r
- Status = TcgDxeHashLogExtendEvent (\r
- 0,\r
- (UINT8*)(UINTN)SmbiosTable->TableAddress,\r
- SmbiosTable->TableLength,\r
- &TcgEvent,\r
- (UINT8*)&HandoffTables\r
- );\r
- }\r
+ Status = EFI_SUCCESS;\r
\r
if (PcdGet8 (PcdTpmPlatformClass) == TCG_PLATFORM_TYPE_SERVER) {\r
//\r
EFI_CALLING_EFI_APPLICATION\r
);\r
if (EFI_ERROR (Status)) {\r
- DEBUG ((EFI_D_ERROR, "%s not Measured. Error!\n", EFI_CALLING_EFI_APPLICATION));\r
+ DEBUG ((EFI_D_ERROR, "%a not Measured. Error!\n", EFI_CALLING_EFI_APPLICATION));\r
}\r
\r
//\r
EFI_RETURNING_FROM_EFI_APPLICATOIN\r
);\r
if (EFI_ERROR (Status)) {\r
- DEBUG ((EFI_D_ERROR, "%s not Measured. Error!\n", EFI_RETURNING_FROM_EFI_APPLICATOIN));\r
+ DEBUG ((EFI_D_ERROR, "%a not Measured. Error!\n", EFI_RETURNING_FROM_EFI_APPLICATOIN));\r
}\r
}\r
\r
EFI_EXIT_BOOT_SERVICES_INVOCATION\r
);\r
if (EFI_ERROR (Status)) {\r
- DEBUG ((EFI_D_ERROR, "%s not Measured. Error!\n", EFI_EXIT_BOOT_SERVICES_INVOCATION));\r
+ DEBUG ((EFI_D_ERROR, "%a not Measured. Error!\n", EFI_EXIT_BOOT_SERVICES_INVOCATION));\r
}\r
\r
//\r
EFI_EXIT_BOOT_SERVICES_SUCCEEDED\r
);\r
if (EFI_ERROR (Status)) {\r
- DEBUG ((EFI_D_ERROR, "%s not Measured. Error!\n", EFI_EXIT_BOOT_SERVICES_SUCCEEDED));\r
+ DEBUG ((EFI_D_ERROR, "%a not Measured. Error!\n", EFI_EXIT_BOOT_SERVICES_SUCCEEDED));\r
}\r
}\r
\r
EFI_EXIT_BOOT_SERVICES_FAILED\r
);\r
if (EFI_ERROR (Status)) {\r
- DEBUG ((EFI_D_ERROR, "%s not Measured. Error!\n", EFI_EXIT_BOOT_SERVICES_FAILED));\r
+ DEBUG ((EFI_D_ERROR, "%a not Measured. Error!\n", EFI_EXIT_BOOT_SERVICES_FAILED));\r
}\r
\r
}\r
if (EFI_ERROR (Status)) {\r
DEBUG ((EFI_D_ERROR, "Tpm2GetCapabilityPcrs fail!\n"));\r
TpmHashAlgorithmBitmap = EFI_TCG2_BOOT_HASH_ALG_SHA1;\r
- NumberOfPCRBanks = 1;\r
ActivePCRBanks = EFI_TCG2_BOOT_HASH_ALG_SHA1;\r
} else {\r
DEBUG ((EFI_D_INFO, "Tpm2GetCapabilityPcrs Count - %08x\n", Pcrs.count));\r
- NumberOfPCRBanks = 0;\r
TpmHashAlgorithmBitmap = 0;\r
ActivePCRBanks = 0;\r
for (Index = 0; Index < Pcrs.count; Index++) {\r
switch (Pcrs.pcrSelections[Index].hash) {\r
case TPM_ALG_SHA1:\r
TpmHashAlgorithmBitmap |= EFI_TCG2_BOOT_HASH_ALG_SHA1;\r
- NumberOfPCRBanks ++;\r
if (!IsZeroBuffer (Pcrs.pcrSelections[Index].pcrSelect, Pcrs.pcrSelections[Index].sizeofSelect)) {\r
ActivePCRBanks |= EFI_TCG2_BOOT_HASH_ALG_SHA1;\r
} \r
break;\r
case TPM_ALG_SHA256:\r
TpmHashAlgorithmBitmap |= EFI_TCG2_BOOT_HASH_ALG_SHA256;\r
- NumberOfPCRBanks ++;\r
if (!IsZeroBuffer (Pcrs.pcrSelections[Index].pcrSelect, Pcrs.pcrSelections[Index].sizeofSelect)) {\r
ActivePCRBanks |= EFI_TCG2_BOOT_HASH_ALG_SHA256;\r
}\r
break;\r
case TPM_ALG_SHA384:\r
TpmHashAlgorithmBitmap |= EFI_TCG2_BOOT_HASH_ALG_SHA384;\r
- NumberOfPCRBanks ++;\r
if (!IsZeroBuffer (Pcrs.pcrSelections[Index].pcrSelect, Pcrs.pcrSelections[Index].sizeofSelect)) {\r
ActivePCRBanks |= EFI_TCG2_BOOT_HASH_ALG_SHA384;\r
}\r
break;\r
case TPM_ALG_SHA512:\r
TpmHashAlgorithmBitmap |= EFI_TCG2_BOOT_HASH_ALG_SHA512;\r
- NumberOfPCRBanks ++;\r
if (!IsZeroBuffer (Pcrs.pcrSelections[Index].pcrSelect, Pcrs.pcrSelections[Index].sizeofSelect)) {\r
ActivePCRBanks |= EFI_TCG2_BOOT_HASH_ALG_SHA512;\r
}\r
break;\r
case TPM_ALG_SM3_256:\r
TpmHashAlgorithmBitmap |= EFI_TCG2_BOOT_HASH_ALG_SM3_256;\r
- NumberOfPCRBanks ++;\r
if (!IsZeroBuffer (Pcrs.pcrSelections[Index].pcrSelect, Pcrs.pcrSelections[Index].sizeofSelect)) {\r
ActivePCRBanks |= EFI_TCG2_BOOT_HASH_ALG_SM3_256;\r
}\r
mTcgDxeData.BsCap.HashAlgorithmBitmap = TpmHashAlgorithmBitmap & PcdGet32 (PcdTcg2HashAlgorithmBitmap);\r
mTcgDxeData.BsCap.ActivePcrBanks = ActivePCRBanks & PcdGet32 (PcdTcg2HashAlgorithmBitmap);\r
\r
+ //\r
+ // Need calculate NumberOfPCRBanks here, because HashAlgorithmBitmap might be removed by PCD.\r
+ //\r
+ NumberOfPCRBanks = 0;\r
+ for (Index = 0; Index < 32; Index++) {\r
+ if ((mTcgDxeData.BsCap.HashAlgorithmBitmap & (1u << Index)) != 0) {\r
+ NumberOfPCRBanks++;\r
+ }\r
+ }\r
+\r
if (PcdGet32 (PcdTcg2NumberOfPCRBanks) == 0) {\r
mTcgDxeData.BsCap.NumberOfPCRBanks = NumberOfPCRBanks;\r
} else {\r
}\r
\r
mTcgDxeData.BsCap.SupportedEventLogs = EFI_TCG2_EVENT_LOG_FORMAT_TCG_1_2 | EFI_TCG2_EVENT_LOG_FORMAT_TCG_2;\r
- if ((mTcgDxeData.BsCap.ActivePcrBanks & TREE_BOOT_HASH_ALG_SHA1) == 0) {\r
+ if ((mTcgDxeData.BsCap.ActivePcrBanks & EFI_TCG2_BOOT_HASH_ALG_SHA1) == 0) {\r
//\r
// No need to expose TCG1.2 event log if SHA1 bank does not exist.\r
//\r
- mTcgDxeData.BsCap.SupportedEventLogs &= ~TREE_EVENT_LOG_FORMAT_TCG_1_2;\r
+ mTcgDxeData.BsCap.SupportedEventLogs &= ~EFI_TCG2_EVENT_LOG_FORMAT_TCG_1_2;\r
}\r
\r
DEBUG ((EFI_D_INFO, "Tcg2.SupportedEventLogs - 0x%08x\n", mTcgDxeData.BsCap.SupportedEventLogs));\r