);\r
ASSERT_EFI_ERROR (Status);\r
\r
+ PrivateData->Fv = AllocateZeroPool (sizeof (PEI_CORE_FV_HANDLE) * FV_GROWTH_STEP);\r
+ ASSERT (PrivateData->Fv != NULL);\r
+ PrivateData->MaxFvCount = FV_GROWTH_STEP;\r
+\r
//\r
// Update internal PEI_CORE_FV array.\r
//\r
VOID *DepexData;\r
BOOLEAN IsFvInfo2;\r
UINTN CurFvCount;\r
+ VOID *TempPtr;\r
\r
Status = EFI_SUCCESS;\r
PrivateData = PEI_CORE_INSTANCE_FROM_PS_THIS (PeiServices);\r
}\r
}\r
\r
- if (PrivateData->FvCount >= PcdGet32 (PcdPeiCoreMaxFvSupported)) {\r
- DEBUG ((EFI_D_ERROR, "The number of Fv Images (%d) exceed the max supported FVs (%d) in Pei", PrivateData->FvCount + 1, PcdGet32 (PcdPeiCoreMaxFvSupported)));\r
- DEBUG ((EFI_D_ERROR, "PcdPeiCoreMaxFvSupported value need be reconfigurated in DSC"));\r
- ASSERT (FALSE);\r
+ if (PrivateData->FvCount >= PrivateData->MaxFvCount) {\r
+ //\r
+ // Run out of room, grow the buffer.\r
+ //\r
+ TempPtr = AllocateZeroPool (\r
+ sizeof (PEI_CORE_FV_HANDLE) * (PrivateData->MaxFvCount + FV_GROWTH_STEP)\r
+ );\r
+ ASSERT (TempPtr != NULL);\r
+ CopyMem (\r
+ TempPtr,\r
+ PrivateData->Fv,\r
+ sizeof (PEI_CORE_FV_HANDLE) * PrivateData->MaxFvCount\r
+ );\r
+ PrivateData->Fv = TempPtr;\r
+ PrivateData->MaxFvCount = PrivateData->MaxFvCount + FV_GROWTH_STEP;\r
}\r
\r
//\r
}\r
}\r
\r
- ASSERT (Private->FvCount <= PcdGet32 (PcdPeiCoreMaxFvSupported));\r
if (Instance >= Private->FvCount) {\r
return NULL;\r
}\r
//\r
// Fixup all FvPpi pointers for the implementation in flash to permanent memory.\r
//\r
- for (Index = 0; Index < PcdGet32 (PcdPeiCoreMaxFvSupported); Index ++) {\r
+ for (Index = 0; Index < PrivateData->FvCount; Index ++) {\r
if (PrivateData->Fv[Index].FvPpi == OldFfsFvPpi) {\r
PrivateData->Fv[Index].FvPpi = &mPeiFfs2FwVol.Fv;\r
}\r
//\r
// Fixup all FvPpi pointers for the implementation in flash to permanent memory.\r
//\r
- for (Index = 0; Index < PcdGet32 (PcdPeiCoreMaxFvSupported); Index ++) {\r
+ for (Index = 0; Index < PrivateData->FvCount; Index ++) {\r
if (PrivateData->Fv[Index].FvPpi == OldFfsFvPpi) {\r
PrivateData->Fv[Index].FvPpi = &mPeiFfs3FwVol.Fv;\r
}\r
)\r
{\r
PEI_CORE_UNKNOW_FORMAT_FV_INFO *NewUnknownFv;\r
+ VOID *TempPtr;\r
\r
- if (PrivateData->UnknownFvInfoCount + 1 >= PcdGet32 (PcdPeiCoreMaxFvSupported)) {\r
- return EFI_OUT_OF_RESOURCES;\r
+ if (PrivateData->UnknownFvInfoCount >= PrivateData->MaxUnknownFvInfoCount) {\r
+ //\r
+ // Run out of room, grow the buffer.\r
+ //\r
+ TempPtr = AllocateZeroPool (\r
+ sizeof (PEI_CORE_UNKNOW_FORMAT_FV_INFO) * (PrivateData->MaxUnknownFvInfoCount + FV_GROWTH_STEP)\r
+ );\r
+ ASSERT (TempPtr != NULL);\r
+ CopyMem (\r
+ TempPtr,\r
+ PrivateData->UnknownFvInfo,\r
+ sizeof (PEI_CORE_UNKNOW_FORMAT_FV_INFO) * PrivateData->MaxUnknownFvInfoCount\r
+ );\r
+ PrivateData->UnknownFvInfo = TempPtr;\r
+ PrivateData->MaxUnknownFvInfoCount = PrivateData->MaxUnknownFvInfoCount + FV_GROWTH_STEP;\r
}\r
\r
NewUnknownFv = &PrivateData->UnknownFvInfo[PrivateData->UnknownFvInfoCount];\r
EFI_PEI_FILE_HANDLE FileHandle;\r
VOID *DepexData;\r
UINTN CurFvCount;\r
+ VOID *TempPtr;\r
\r
PrivateData = PEI_CORE_INSTANCE_FROM_PS_THIS (PeiServices);\r
FvPpi = (EFI_PEI_FIRMWARE_VOLUME_PPI*) Ppi;\r
continue;\r
}\r
\r
- if (PrivateData->FvCount >= PcdGet32 (PcdPeiCoreMaxFvSupported)) {\r
- DEBUG ((EFI_D_ERROR, "The number of Fv Images (%d) exceed the max supported FVs (%d) in Pei", PrivateData->FvCount + 1, PcdGet32 (PcdPeiCoreMaxFvSupported)));\r
- DEBUG ((EFI_D_ERROR, "PcdPeiCoreMaxFvSupported value need be reconfigurated in DSC"));\r
- ASSERT (FALSE);\r
+ if (PrivateData->FvCount >= PrivateData->MaxFvCount) {\r
+ //\r
+ // Run out of room, grow the buffer.\r
+ //\r
+ TempPtr = AllocateZeroPool (\r
+ sizeof (PEI_CORE_FV_HANDLE) * (PrivateData->MaxFvCount + FV_GROWTH_STEP)\r
+ );\r
+ ASSERT (TempPtr != NULL);\r
+ CopyMem (\r
+ TempPtr,\r
+ PrivateData->Fv,\r
+ sizeof (PEI_CORE_FV_HANDLE) * PrivateData->MaxFvCount\r
+ );\r
+ PrivateData->Fv = TempPtr;\r
+ PrivateData->MaxFvCount = PrivateData->MaxFvCount + FV_GROWTH_STEP;\r
}\r
\r
//\r