Fix bug in CustomErashFlashRange function.
authorlgao4 <lgao4@de2fecce-e211-0410-80a6-f3fac2684e05>
Thu, 31 Jan 2008 06:10:38 +0000 (06:10 +0000)
committerlgao4 <lgao4@de2fecce-e211-0410-80a6-f3fac2684e05>
Thu, 31 Jan 2008 06:10:38 +0000 (06:10 +0000)
git-svn-id: https://edk2.tianocore.org/svn/edk2/trunk@4643 de2fecce-e211-0410-80a6-f3fac2684e05

edk2/Nt32Pkg/FvbServicesRuntimeDxe/FWBlockService.c

index a95d3b4..72c2006 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