+/**\r
+ Builds a EFI_HOB_TYPE_FV2 HOB.\r
+\r
+ This function builds a EFI_HOB_TYPE_FV2 HOB.\r
+ It can only be invoked during PEI phase;\r
+ for DXE phase, it will ASSERT() since PEI HOB is read-only for DXE phase.\r
+\r
+ If there is no additional space for HOB creation, then ASSERT().\r
+ If the FvImage buffer is not at its required alignment, then ASSERT().\r
+\r
+ @param BaseAddress The base address of the Firmware Volume.\r
+ @param Length The size of the Firmware Volume in bytes.\r
+ @param FvName The name of the Firmware Volume.\r
+ @param FileName The name of the file.\r
+\r
+**/\r
+VOID\r
+EFIAPI\r
+BuildFv2Hob (\r
+ IN EFI_PHYSICAL_ADDRESS BaseAddress,\r
+ IN UINT64 Length,\r
+ IN CONST EFI_GUID *FvName,\r
+ IN CONST EFI_GUID *FileName\r
+ )\r
+{\r
+ EFI_HOB_FIRMWARE_VOLUME2 *Hob;\r
+\r
+ if (!InternalCheckFvAlignment (BaseAddress, Length)) {\r
+ ASSERT (FALSE);\r
+ return;\r
+ }\r
+\r
+ Hob = InternalPeiCreateHob (EFI_HOB_TYPE_FV2, (UINT16) sizeof (EFI_HOB_FIRMWARE_VOLUME2));\r
+ if (Hob == NULL) {\r
+ return;\r
+ }\r
+\r
+ Hob->BaseAddress = BaseAddress;\r
+ Hob->Length = Length;\r
+ CopyGuid (&Hob->FvName, FvName);\r
+ CopyGuid (&Hob->FileName, FileName);\r
+}\r
+\r
+/**\r
+ Builds a EFI_HOB_TYPE_FV3 HOB.\r
+\r
+ This function builds a EFI_HOB_TYPE_FV3 HOB.\r
+ It can only be invoked during PEI phase;\r
+ for DXE phase, it will ASSERT() since PEI HOB is read-only for DXE phase.\r
+\r
+ If there is no additional space for HOB creation, then ASSERT().\r
+ If the FvImage buffer is not at its required alignment, then ASSERT().\r
+\r
+ @param BaseAddress The base address of the Firmware Volume.\r
+ @param Length The size of the Firmware Volume in bytes.\r
+ @param AuthenticationStatus The authentication status.\r
+ @param ExtractedFv TRUE if the FV was extracted as a file within\r
+ another firmware volume. FALSE otherwise.\r
+ @param FvName The name of the Firmware Volume.\r
+ Valid only if IsExtractedFv is TRUE.\r
+ @param FileName The name of the file.\r
+ Valid only if IsExtractedFv is TRUE.\r
+\r
+**/\r
+VOID\r
+EFIAPI\r
+BuildFv3Hob (\r
+ IN EFI_PHYSICAL_ADDRESS BaseAddress,\r
+ IN UINT64 Length,\r
+ IN UINT32 AuthenticationStatus,\r
+ IN BOOLEAN ExtractedFv,\r
+ IN CONST EFI_GUID *FvName, OPTIONAL\r
+ IN CONST EFI_GUID *FileName OPTIONAL\r
+ )\r
+{\r
+ EFI_HOB_FIRMWARE_VOLUME3 *Hob;\r
+\r
+ if (!InternalCheckFvAlignment (BaseAddress, Length)) {\r
+ ASSERT (FALSE);\r
+ return;\r
+ }\r
+\r
+ Hob = InternalPeiCreateHob (EFI_HOB_TYPE_FV3, (UINT16) sizeof (EFI_HOB_FIRMWARE_VOLUME3));\r
+ if (Hob == NULL) {\r
+ return;\r
+ }\r
+\r
+ Hob->BaseAddress = BaseAddress;\r
+ Hob->Length = Length;\r
+ Hob->AuthenticationStatus = AuthenticationStatus;\r
+ Hob->ExtractedFv = ExtractedFv;\r
+ if (ExtractedFv) {\r
+ CopyGuid (&Hob->FvName, FvName);\r
+ CopyGuid (&Hob->FileName, FileName);\r
+ }\r
+}\r
+\r