]> git.proxmox.com Git - mirror_edk2.git/blobdiff - Nt32Pkg/FvbServicesRuntimeDxe/FWBlockService.c
Fix bug in CustomErashFlashRange function.
[mirror_edk2.git] / Nt32Pkg / FvbServicesRuntimeDxe / FWBlockService.c
index a95d3b400d519c1354a5bad322a648f11b0d33fb..72c20064437abe2192dfa3302d37153f234fb31b 100644 (file)
@@ -646,11 +646,15 @@ Returns:
   EFI_LBA Index;\r
   UINTN   LbaSize;\r
   UINTN   ScratchLbaSizeData;\r
+  EFI_STATUS Status;\r
 \r
   //\r
   // First LBA\r
   //\r
-  FvbGetLbaAddress (Instance, StartLba, NULL, &LbaSize, NULL, Global, Virtual);\r
+  Status = FvbGetLbaAddress (Instance, StartLba, NULL, &LbaSize, NULL, Global, Virtual);\r
+  if (EFI_ERROR (Status)) {\r
+    return Status;\r
+  }\r
 \r
   //\r
   // Use the scratch space as the intermediate buffer to transfer data\r
@@ -668,7 +672,10 @@ Returns:
   // write the data back to the first block\r
   //\r
   if (ScratchLbaSizeData > 0) {\r
-    FvbWriteBlock (Instance, StartLba, 0, &ScratchLbaSizeData, Global->FvbScratchSpace[Virtual], Global, Virtual);\r
+    Status = FvbWriteBlock (Instance, StartLba, 0, &ScratchLbaSizeData, Global->FvbScratchSpace[Virtual], Global, Virtual);\r
+    if (EFI_ERROR (Status)) {\r
+      return Status;\r
+    }\r
   }\r
   //\r
   // Middle LBAs\r
@@ -682,22 +689,29 @@ Returns:
   // Last LBAs, the same as first LBAs\r
   //\r
   if (LastLba > StartLba) {\r
-    FvbGetLbaAddress (Instance, LastLba, NULL, &LbaSize, NULL, Global, Virtual);\r
+    Status = FvbGetLbaAddress (Instance, LastLba, NULL, &LbaSize, NULL, Global, Virtual);\r
+    if (EFI_ERROR (Status)) {\r
+      return Status;\r
+    }\r
     FvbReadBlock (Instance, LastLba, 0, &LbaSize, Global->FvbScratchSpace[Virtual], Global, Virtual);\r
     FvbEraseBlock (Instance, LastLba, Global, Virtual);\r
   }\r
 \r
-  ScratchLbaSizeData = LbaSize - (OffsetStartLba + 1);\r
+  ScratchLbaSizeData = LbaSize - (OffsetLastLba + 1);\r
+  \r
+  if (ScratchLbaSizeData > 0) {\r
+    Status = FvbWriteBlock (\r
+              Instance,\r
+              LastLba,\r
+              (OffsetLastLba + 1),\r
+              &ScratchLbaSizeData,\r
+              Global->FvbScratchSpace[Virtual] + OffsetLastLba + 1,\r
+              Global,\r
+              Virtual\r
+              );\r
+  }\r
 \r
-  return FvbWriteBlock (\r
-          Instance,\r
-          LastLba,\r
-          (OffsetLastLba + 1),\r
-          &ScratchLbaSizeData,\r
-          Global->FvbScratchSpace[Virtual],\r
-          Global,\r
-          Virtual\r
-          );\r
+  return Status;\r
 }\r
 \r
 EFI_STATUS\r