]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Universal/FirmwareVolume/FaultTolerantWriteLite/Dxe/FtwLite.c
1) PcdFlashNvStorageFtwWorkingSize, PcdFlashNvStorageFtwWorkingBase, PcdFlashNvStorag...
[mirror_edk2.git] / MdeModulePkg / Universal / FirmwareVolume / FaultTolerantWriteLite / Dxe / FtwLite.c
index 38fe11d80bee47964f85c898eed581e76a5d4493..a2ba2b4306acc62216d84ed0c4b1e97787d771ec 100644 (file)
@@ -634,7 +634,8 @@ InitializeFtwLite (
   UINTN                               Offset;\r
   EFI_FV_BLOCK_MAP_ENTRY              *FvbMapEntry;\r
   UINT32                              LbaIndex;\r
-\r
+  EFI_PEI_HOB_POINTERS                FvHob;\r
+  EFI_FLASH_MAP_ENTRY_DATA            *FlashMapEntry;\r
   //\r
   // Allocate Private data of this driver,\r
   // INCLUDING THE FtwWorkSpace[FTW_WORK_SPACE_SIZE].\r
@@ -665,12 +666,34 @@ InitializeFtwLite (
   FtwLiteDevice->FtwWorkSpaceHeader = (EFI_FAULT_TOLERANT_WORKING_BLOCK_HEADER *) FtwLiteDevice->FtwWorkSpace;\r
 \r
   FtwLiteDevice->FtwLastRecord      = NULL;\r
+        \r
+  //\r
+  // BUGBUG: Here should use Pcd after build tool support dynamic PCD\r
+  //        \r
+  FtwLiteDevice->SpareAreaLength  = 0;\r
+  FtwLiteDevice->WorkSpaceLength  = 0;\r
+  FvHob.Raw = GetHobList ();\r
+  while ((FvHob.Raw = GetNextGuidHob (&gEfiFlashMapHobGuid, FvHob.Raw)) != NULL) {\r
 \r
-  FtwLiteDevice->WorkSpaceAddress = (EFI_PHYSICAL_ADDRESS) PcdGet32 (PcdFlashNvStorageFtwWorkingBase);\r
-  FtwLiteDevice->WorkSpaceLength  = (UINTN) PcdGet32 (PcdFlashNvStorageFtwWorkingSize);\r
-\r
-  FtwLiteDevice->SpareAreaAddress = (EFI_PHYSICAL_ADDRESS) PcdGet32 (PcdFlashNvStorageFtwSpareBase);\r
-  FtwLiteDevice->SpareAreaLength  = (UINTN) PcdGet32 (PcdFlashNvStorageFtwSpareSize);\r
+    FlashMapEntry = (EFI_FLASH_MAP_ENTRY_DATA *) GET_GUID_HOB_DATA (FvHob.Guid);\r
+      \r
+    //\r
+    // Get the FTW work space Flash Map SUB area\r
+    //\r
+    if ((FlashMapEntry->AreaType == EFI_FLASH_AREA_FTW_STATE) && (FlashMapEntry->NumEntries == 1)) {\r
+      FtwLiteDevice->WorkSpaceAddress = FlashMapEntry->Entries[0].Base;\r
+      FtwLiteDevice->WorkSpaceLength  = (UINTN) FlashMapEntry->Entries[0].Length;\r
+    }\r
+    //\r
+    // Get the FTW backup SUB area\r
+    //\r
+    if ((FlashMapEntry->AreaType == EFI_FLASH_AREA_FTW_BACKUP) && (FlashMapEntry->NumEntries == 1)) {\r
+      FtwLiteDevice->SpareAreaAddress = FlashMapEntry->Entries[0].Base;\r
+      FtwLiteDevice->SpareAreaLength  = (UINTN) FlashMapEntry->Entries[0].Length;\r
+    }\r
+    \r
+    FvHob.Raw = GET_NEXT_HOB (FvHob);\r
+  }\r
 \r
   ASSERT ((FtwLiteDevice->WorkSpaceLength != 0) && (FtwLiteDevice->SpareAreaLength != 0));\r
 \r