VOID\r
)\r
{\r
- return EFI_UNSUPPORTED;\r
+ EFI_STATUS Status;\r
+ UINT8 Digest[SHA384_DIGEST_SIZE];\r
+ OVMF_WORK_AREA *WorkArea;\r
+\r
+ Status = HashAndExtendToRtmr (\r
+ 0,\r
+ (UINT8 *)(UINTN)PcdGet32 (PcdOvmfFlashNvStorageVariableBase),\r
+ (UINT64)PcdGet32 (PcdCfvRawDataSize),\r
+ Digest,\r
+ SHA384_DIGEST_SIZE\r
+ );\r
+\r
+ if (EFI_ERROR (Status)) {\r
+ return Status;\r
+ }\r
+\r
+ //\r
+ // This function is called in SEC phase and at that moment the Hob service\r
+ // is not available. So CfvImage measurement value is stored in workarea.\r
+ //\r
+ WorkArea = (OVMF_WORK_AREA *)FixedPcdGet32 (PcdOvmfWorkAreaBase);\r
+ if (WorkArea == NULL) {\r
+ return EFI_DEVICE_ERROR;\r
+ }\r
+\r
+ WorkArea->TdxWorkArea.SecTdxWorkArea.TdxMeasurementsData.MeasurementsBitmap |= TDX_MEASUREMENT_CFVIMG_BITMASK;\r
+ CopyMem (WorkArea->TdxWorkArea.SecTdxWorkArea.TdxMeasurementsData.CfvImgHashValue, Digest, SHA384_DIGEST_SIZE);\r
+\r
+ return EFI_SUCCESS;\r
}\r
\r
/**\r