]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Core/Pei/FwVol/FwVol.c
MdeModulePkg PeiCore: Remove the using of PcdPeiCoreMaxFvSupported
[mirror_edk2.git] / MdeModulePkg / Core / Pei / FwVol / FwVol.c
index 5629c9a1ce206b1375cca694c3405baa58612145..0a67b96bf1e34cf1a30a621a08d067753ab0deb4 100644 (file)
@@ -503,6 +503,10 @@ PeiInitializeFv (
                     );\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
@@ -560,6 +564,7 @@ FirmwareVolmeInfoPpiNotifyCallback (
   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
@@ -626,10 +631,21 @@ FirmwareVolmeInfoPpiNotifyCallback (
       }\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
@@ -2157,7 +2173,6 @@ FindNextCoreFvHandle (
     }\r
   }\r
 \r
-  ASSERT (Private->FvCount <= PcdGet32 (PcdPeiCoreMaxFvSupported));\r
   if (Instance >= Private->FvCount) {\r
     return NULL;\r
   }\r
@@ -2205,7 +2220,7 @@ PeiReinitializeFv (
   //\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
@@ -2233,7 +2248,7 @@ PeiReinitializeFv (
   //\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
@@ -2263,9 +2278,23 @@ AddUnknownFormatFvInfo (
   )\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
@@ -2368,6 +2397,7 @@ ThirdPartyFvPpiNotifyCallback (
   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
@@ -2403,10 +2433,21 @@ ThirdPartyFvPpiNotifyCallback (
       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