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
Status = gBS->AllocatePages (\r
AllocateMaxAddress,\r
EfiACPIMemoryNVS,\r
- EFI_SIZE_TO_PAGES (EFI_TCG_LOG_AREA_SIZE),\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
Status = gBS->AllocatePages (\r
AllocateMaxAddress,\r
EfiACPIMemoryNVS,\r
- EFI_SIZE_TO_PAGES (EFI_TCG_FINAL_LOG_AREA_SIZE),\r
+ EFI_SIZE_TO_PAGES (PcdGet32 (PcdTcg2FinalLogAreaLen)),\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
+ SetMem ((VOID *)(UINTN)Lasa, PcdGet32 (PcdTcg2FinalLogAreaLen), 0xFF);\r
\r
//\r
// Initialize\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].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
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