]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Universal/FirmwareVolume/FaultTolerantWriteDxe/FtwMisc.c
Add full version FaultTolerantWrite Dxe driver.
[mirror_edk2.git] / MdeModulePkg / Universal / FirmwareVolume / FaultTolerantWriteDxe / FtwMisc.c
index 46cdd60ee511e671bbd4a29ab2d13dfb0dadda77..1283215864d2a09208e35f8b32545f606b1e880f 100644 (file)
@@ -1,6 +1,6 @@
 /** @file\r
 \r
-  Internal generic functions to support fault tolerant write.\r
+  Internal generic functions to operate flash block.\r
 \r
 Copyright (c) 2006 - 2008, Intel Corporation                                                         \r
 All rights reserved. This program and the accompanying materials                          \r
@@ -54,7 +54,7 @@ IsErasedFlashBuffer (
 }\r
 \r
 /**\r
-  To Erase one block. The size is FTW_BLOCK_SIZE\r
+  To erase the block with the spare block size.\r
 \r
 \r
   @param FtwLiteDevice   Calling context\r
@@ -295,7 +295,7 @@ FlushSpareBlockToTargetBlock (
   //\r
   Ptr = Buffer;\r
   for (Index = 0; Index < FtwLiteDevice->NumberOfSpareBlock; Index += 1) {\r
-    Count = FtwLiteDevice->SizeOfSpareBlock;\r
+    Count = FtwLiteDevice->BlockSize;\r
     Status = FtwLiteDevice->FtwBackupFvb->Read (\r
                                             FtwLiteDevice->FtwBackupFvb,\r
                                             FtwLiteDevice->FtwSpareLba + Index,\r
@@ -323,10 +323,10 @@ FlushSpareBlockToTargetBlock (
   //\r
   Ptr = Buffer;\r
   for (Index = 0; Index < FtwLiteDevice->NumberOfSpareBlock; Index += 1) {\r
-    Count   = FtwLiteDevice->SizeOfSpareBlock;\r
+    Count   = FtwLiteDevice->BlockSize;\r
     Status  = FvBlock->Write (FvBlock, Lba + Index, 0, &Count, Ptr);\r
     if (EFI_ERROR (Status)) {\r
-      DEBUG ((EFI_D_FTW_LITE, "FtwLite: FVB Write block - %r\n", Status));\r
+      DEBUG ((EFI_D_ERROR, "FtwLite: FVB Write block - %r\n", Status));\r
       FreePool (Buffer);\r
       return Status;\r
     }\r
@@ -381,7 +381,11 @@ FlushSpareBlockToWorkingBlock (
     return EFI_OUT_OF_RESOURCES;\r
   }\r
   //\r
-  // To  guarantee that the WorkingBlockValid is set on spare block\r
+  // To guarantee that the WorkingBlockValid is set on spare block\r
+  //\r
+  //  Offset = OFFSET_OF(EFI_FAULT_TOLERANT_WORKING_BLOCK_HEADER,\r
+  //                            WorkingBlockValid);\r
+  // To skip Signature and Crc: sizeof(EFI_GUID)+sizeof(UINT32).\r
   //\r
   WorkSpaceLbaOffset = FtwLiteDevice->FtwWorkSpaceLba - FtwLiteDevice->FtwWorkBlockLba;\r
   FtwUpdateFvState (\r
@@ -395,7 +399,7 @@ FlushSpareBlockToWorkingBlock (
   //\r
   Ptr = Buffer;\r
   for (Index = 0; Index < FtwLiteDevice->NumberOfSpareBlock; Index += 1) {\r
-    Count = FtwLiteDevice->SizeOfSpareBlock;\r
+    Count = FtwLiteDevice->BlockSize;\r
     Status = FtwLiteDevice->FtwBackupFvb->Read (\r
                                             FtwLiteDevice->FtwBackupFvb,\r
                                             FtwLiteDevice->FtwSpareLba + Index,\r
@@ -413,7 +417,7 @@ FlushSpareBlockToWorkingBlock (
   //\r
   // Clear the CRC and STATE, copy data from spare to working block.\r
   //\r
-  WorkingBlockHeader = (EFI_FAULT_TOLERANT_WORKING_BLOCK_HEADER *) (Buffer + (UINTN) WorkSpaceLbaOffset * FtwLiteDevice->SizeOfSpareBlock + FtwLiteDevice->FtwWorkSpaceBase);\r
+  WorkingBlockHeader = (EFI_FAULT_TOLERANT_WORKING_BLOCK_HEADER *) (Buffer + (UINTN) WorkSpaceLbaOffset * FtwLiteDevice->BlockSize + FtwLiteDevice->FtwWorkSpaceBase);\r
   InitWorkSpaceHeader (WorkingBlockHeader);\r
   WorkingBlockHeader->WorkingBlockValid   = FTW_ERASE_POLARITY;\r
   WorkingBlockHeader->WorkingBlockInvalid = FTW_ERASE_POLARITY;\r
@@ -457,7 +461,7 @@ FlushSpareBlockToWorkingBlock (
   //\r
   Ptr = Buffer;\r
   for (Index = 0; Index < FtwLiteDevice->NumberOfSpareBlock; Index += 1) {\r
-    Count = FtwLiteDevice->SizeOfSpareBlock;\r
+    Count = FtwLiteDevice->BlockSize;\r
     Status = FtwLiteDevice->FtwFvBlock->Write (\r
                                           FtwLiteDevice->FtwFvBlock,\r
                                           FtwLiteDevice->FtwWorkBlockLba + Index,\r
@@ -466,7 +470,7 @@ FlushSpareBlockToWorkingBlock (
                                           Ptr\r
                                           );\r
     if (EFI_ERROR (Status)) {\r
-      DEBUG ((EFI_D_FTW_LITE, "FtwLite: FVB Write block - %r\n", Status));\r
+      DEBUG ((EFI_D_ERROR, "FtwLite: FVB Write block - %r\n", Status));\r
       FreePool (Buffer);\r
       return Status;\r
     }\r