X-Git-Url: https://git.proxmox.com/?a=blobdiff_plain;f=Nt32Pkg%2FFvbServicesRuntimeDxe%2FFWBlockService.c;h=aa833d0a8656cea3bfa1bef1cc0c79a766eb5135;hb=6ae81428485020dd371eaefa5b97b24f21efe117;hp=a95d3b400d519c1354a5bad322a648f11b0d33fb;hpb=a4c9ede55fdd3de2c9138f45c4e1ca42947ed549;p=mirror_edk2.git diff --git a/Nt32Pkg/FvbServicesRuntimeDxe/FWBlockService.c b/Nt32Pkg/FvbServicesRuntimeDxe/FWBlockService.c index a95d3b400d..aa833d0a86 100644 --- a/Nt32Pkg/FvbServicesRuntimeDxe/FWBlockService.c +++ b/Nt32Pkg/FvbServicesRuntimeDxe/FWBlockService.c @@ -1,4 +1,4 @@ -/*++ +/**@file Copyright (c) 2006 - 2007, Intel Corporation All rights reserved. This program and the accompanying materials @@ -17,7 +17,7 @@ Abstract: Revision History ---*/ +**/ // // The package level header files this module uses @@ -646,11 +646,15 @@ Returns: EFI_LBA Index; UINTN LbaSize; UINTN ScratchLbaSizeData; + EFI_STATUS Status; // // First LBA // - FvbGetLbaAddress (Instance, StartLba, NULL, &LbaSize, NULL, Global, Virtual); + Status = FvbGetLbaAddress (Instance, StartLba, NULL, &LbaSize, NULL, Global, Virtual); + if (EFI_ERROR (Status)) { + return Status; + } // // Use the scratch space as the intermediate buffer to transfer data @@ -668,7 +672,10 @@ Returns: // write the data back to the first block // if (ScratchLbaSizeData > 0) { - FvbWriteBlock (Instance, StartLba, 0, &ScratchLbaSizeData, Global->FvbScratchSpace[Virtual], Global, Virtual); + Status = FvbWriteBlock (Instance, StartLba, 0, &ScratchLbaSizeData, Global->FvbScratchSpace[Virtual], Global, Virtual); + if (EFI_ERROR (Status)) { + return Status; + } } // // Middle LBAs @@ -682,22 +689,29 @@ Returns: // Last LBAs, the same as first LBAs // if (LastLba > StartLba) { - FvbGetLbaAddress (Instance, LastLba, NULL, &LbaSize, NULL, Global, Virtual); + Status = FvbGetLbaAddress (Instance, LastLba, NULL, &LbaSize, NULL, Global, Virtual); + if (EFI_ERROR (Status)) { + return Status; + } FvbReadBlock (Instance, LastLba, 0, &LbaSize, Global->FvbScratchSpace[Virtual], Global, Virtual); FvbEraseBlock (Instance, LastLba, Global, Virtual); } - ScratchLbaSizeData = LbaSize - (OffsetStartLba + 1); + ScratchLbaSizeData = LbaSize - (OffsetLastLba + 1); + + if (ScratchLbaSizeData > 0) { + Status = FvbWriteBlock ( + Instance, + LastLba, + (OffsetLastLba + 1), + &ScratchLbaSizeData, + Global->FvbScratchSpace[Virtual] + OffsetLastLba + 1, + Global, + Virtual + ); + } - return FvbWriteBlock ( - Instance, - LastLba, - (OffsetLastLba + 1), - &ScratchLbaSizeData, - Global->FvbScratchSpace[Virtual], - Global, - Virtual - ); + return Status; } EFI_STATUS