\r
Internal functions to operate Working Block Space.\r
\r
-Copyright (c) 2006 - 2014, Intel Corporation. All rights reserved.<BR>\r
-This program and the accompanying materials \r
-are licensed and made available under the terms and conditions of the BSD License \r
-which accompanies this distribution. The full text of the license may be found at \r
-http://opensource.org/licenses/bsd-license.php \r
- \r
-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, \r
-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. \r
+Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR>\r
+This program and the accompanying materials\r
+are licensed and made available under the terms and conditions of the BSD License\r
+which accompanies this distribution. The full text of the license may be found at\r
+http://opensource.org/licenses/bsd-license.php\r
+\r
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
\r
**/\r
\r
VOID\r
)\r
{\r
- EFI_STATUS Status;\r
-\r
//\r
// Check signature with gEdkiiWorkingBlockSignatureGuid.\r
//\r
&gEdkiiWorkingBlockSignatureGuid,\r
sizeof (EFI_GUID)\r
);\r
- mWorkingBlockHeader.WriteQueueSize = (UINT64) (PcdGet32 (PcdFlashNvStorageFtwWorkingSize) - sizeof (EFI_FAULT_TOLERANT_WORKING_BLOCK_HEADER));\r
+ mWorkingBlockHeader.WriteQueueSize = PcdGet32 (PcdFlashNvStorageFtwWorkingSize) - sizeof (EFI_FAULT_TOLERANT_WORKING_BLOCK_HEADER);\r
\r
//\r
// Crc is calculated with all the fields except Crc and STATE, so leave them as FTW_ERASED_BYTE.\r
//\r
// Calculate the Crc of woking block header\r
//\r
- Status = gBS->CalculateCrc32 (\r
- &mWorkingBlockHeader,\r
- sizeof (EFI_FAULT_TOLERANT_WORKING_BLOCK_HEADER),\r
- &mWorkingBlockHeader.Crc\r
- );\r
- ASSERT_EFI_ERROR (Status);\r
+ mWorkingBlockHeader.Crc = FtwCalculateCrc32 (&mWorkingBlockHeader,\r
+ sizeof (EFI_FAULT_TOLERANT_WORKING_BLOCK_HEADER));\r
\r
mWorkingBlockHeader.WorkingBlockValid = FTW_VALID_STATE;\r
mWorkingBlockHeader.WorkingBlockInvalid = FTW_INVALID_STATE;\r
return TRUE;\r
}\r
\r
- DEBUG ((EFI_D_ERROR, "Ftw: Work block header check error\n"));\r
+ DEBUG ((EFI_D_INFO, "Ftw: Work block header check mismatch\n"));\r
return FALSE;\r
}\r
\r
// Write the memory buffer to spare block\r
//\r
Status = FtwEraseSpareBlock (FtwDevice);\r
+ if (EFI_ERROR (Status)) {\r
+ FreePool (TempBuffer);\r
+ FreePool (SpareBuffer);\r
+ return EFI_ABORTED;\r
+ }\r
Ptr = TempBuffer;\r
for (Index = 0; TempBufferSize > 0; Index += 1) {\r
if (TempBufferSize > FtwDevice->SpareBlockSize) {\r
// Restore spare backup buffer into spare block , if no failure happened during FtwWrite.\r
//\r
Status = FtwEraseSpareBlock (FtwDevice);\r
+ if (EFI_ERROR (Status)) {\r
+ FreePool (SpareBuffer);\r
+ return EFI_ABORTED;\r
+ }\r
Ptr = SpareBuffer;\r
for (Index = 0; Index < FtwDevice->NumberOfSpareBlock; Index += 1) {\r
Length = FtwDevice->SpareBlockSize;\r