]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Universal/FaultTolerantWritePei/FaultTolerantWritePei.c
MdeModulePkg/FaultTolerantWrite: Consume Variable Flash Info
[mirror_edk2.git] / MdeModulePkg / Universal / FaultTolerantWritePei / FaultTolerantWritePei.c
index 15543f12ed295abd7731a22b9e597a93fd845a95..8c152dcbad98bd89971405cc94e726a3085680ab 100644 (file)
@@ -16,6 +16,8 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
 #include <Library/DebugLib.h>\r
 #include <Library/BaseMemoryLib.h>\r
 #include <Library/HobLib.h>\r
+#include <Library/SafeIntLib.h>\r
+#include <Library/VariableFlashInfoLib.h>\r
 \r
 EFI_PEI_PPI_DESCRIPTOR  mPpiListVariable = {\r
   (EFI_PEI_PPI_DESCRIPTOR_PPI | EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST),\r
@@ -212,25 +214,31 @@ PeimFaultTolerantWriteInitialize (
   EFI_PHYSICAL_ADDRESS                     SpareAreaAddress;\r
   UINTN                                    SpareAreaLength;\r
   EFI_PHYSICAL_ADDRESS                     WorkSpaceInSpareArea;\r
+  UINT64                                   Size;\r
   FAULT_TOLERANT_WRITE_LAST_WRITE_DATA     FtwLastWrite;\r
 \r
   FtwWorkingBlockHeader = NULL;\r
   FtwLastWriteHeader    = NULL;\r
   FtwLastWriteRecord    = NULL;\r
 \r
-  WorkSpaceAddress = (EFI_PHYSICAL_ADDRESS)PcdGet64 (PcdFlashNvStorageFtwWorkingBase64);\r
-  if (WorkSpaceAddress == 0) {\r
-    WorkSpaceAddress = (EFI_PHYSICAL_ADDRESS)PcdGet32 (PcdFlashNvStorageFtwWorkingBase);\r
-  }\r
+  SpareAreaAddress = 0;\r
+  SpareAreaLength  = 0;\r
+  WorkSpaceAddress = 0;\r
+  WorkSpaceLength  = 0;\r
 \r
-  WorkSpaceLength = (UINTN)PcdGet32 (PcdFlashNvStorageFtwWorkingSize);\r
+  Status = GetVariableFlashFtwWorkingInfo (&WorkSpaceAddress, &Size);\r
+  ASSERT_EFI_ERROR (Status);\r
 \r
-  SpareAreaAddress = (EFI_PHYSICAL_ADDRESS)PcdGet64 (PcdFlashNvStorageFtwSpareBase64);\r
-  if (SpareAreaAddress == 0) {\r
-    SpareAreaAddress = (EFI_PHYSICAL_ADDRESS)PcdGet32 (PcdFlashNvStorageFtwSpareBase);\r
-  }\r
+  Status = SafeUint64ToUintn (Size, &WorkSpaceLength);\r
+  // This driver currently assumes the size will be UINTN so assert the value is safe for now.\r
+  ASSERT_EFI_ERROR (Status);\r
+\r
+  Status = GetVariableFlashFtwSpareInfo (&SpareAreaAddress, &Size);\r
+  ASSERT_EFI_ERROR (Status);\r
 \r
-  SpareAreaLength = (UINTN)PcdGet32 (PcdFlashNvStorageFtwSpareSize);\r
+  Status = SafeUint64ToUintn (Size, &SpareAreaLength);\r
+  // This driver currently assumes the size will be UINTN so assert the value is safe for now.\r
+  ASSERT_EFI_ERROR (Status);\r
 \r
   //\r
   // The address of FTW working base and spare base must not be 0.\r