#include <Guid/TcgEventHob.h>\r
#include <Guid/MeasuredFvHob.h>\r
#include <Guid/TpmInstance.h>\r
+#include <Guid/MigratedFvInfo.h>\r
\r
#include <Library/DebugLib.h>\r
#include <Library/BaseMemoryLib.h>\r
EFI_STATUS Status;\r
EFI_PLATFORM_FIRMWARE_BLOB FvBlob;\r
TCG_PCR_EVENT_HDR TcgEventHdr;\r
+ EFI_PHYSICAL_ADDRESS FvOrgBase;\r
+ EFI_PHYSICAL_ADDRESS FvDataBase;\r
+ EFI_PEI_HOB_POINTERS Hob;\r
+ EDKII_MIGRATED_FV_INFO *MigratedFvInfo;\r
\r
//\r
// Check if it is in Excluded FV list\r
}\r
}\r
\r
+ //\r
+ // Search the matched migration FV info\r
+ //\r
+ FvOrgBase = FvBase;\r
+ FvDataBase = FvBase;\r
+ Hob.Raw = GetFirstGuidHob (&gEdkiiMigratedFvInfoGuid);\r
+ while (Hob.Raw != NULL) {\r
+ MigratedFvInfo = GET_GUID_HOB_DATA (Hob);\r
+ if ((MigratedFvInfo->FvNewBase == (UINT32) FvBase) && (MigratedFvInfo->FvLength == (UINT32) FvLength)) {\r
+ //\r
+ // Found the migrated FV info\r
+ //\r
+ FvOrgBase = (EFI_PHYSICAL_ADDRESS) (UINTN) MigratedFvInfo->FvOrgBase;\r
+ FvDataBase = (EFI_PHYSICAL_ADDRESS) (UINTN) MigratedFvInfo->FvDataBase;\r
+ break;\r
+ }\r
+ Hob.Raw = GET_NEXT_HOB (Hob);\r
+ Hob.Raw = GetNextGuidHob (&gEdkiiMigratedFvInfoGuid, Hob.Raw);\r
+ }\r
+\r
//\r
// Measure and record the FV to the TPM\r
//\r
- FvBlob.BlobBase = FvBase;\r
+ FvBlob.BlobBase = FvOrgBase;\r
FvBlob.BlobLength = FvLength;\r
\r
DEBUG ((DEBUG_INFO, "The FV which is measured by TcgPei starts at: 0x%x\n", FvBlob.BlobBase));\r
Status = HashLogExtendEvent (\r
&mEdkiiTcgPpi,\r
0,\r
- (UINT8*) (UINTN) FvBlob.BlobBase,\r
+ (UINT8*) (UINTN) FvDataBase,\r
(UINTN) FvBlob.BlobLength,\r
&TcgEventHdr,\r
(UINT8*) &FvBlob\r