//\r
// Fault Tolerant Write Protocol API\r
//\r
+\r
/**\r
Query the largest block that may be updated in a fault tolerant manner.\r
\r
EFI_STATUS\r
EFIAPI\r
FtwGetMaxBlockSize (\r
- IN EFI_FAULT_TOLERANT_WRITE_PROTOCOL *This,\r
- OUT UINTN *BlockSize\r
+ IN EFI_FAULT_TOLERANT_WRITE_PROTOCOL *This,\r
+ OUT UINTN *BlockSize\r
)\r
{\r
EFI_FTW_DEVICE *FtwDevice;\r
\r
- if (!FeaturePcdGet(PcdFullFtwServiceEnable)) {\r
+ if (!FeaturePcdGet (PcdFullFtwServiceEnable)) {\r
return EFI_UNSUPPORTED;\r
}\r
\r
- FtwDevice = FTW_CONTEXT_FROM_THIS (This);\r
+ FtwDevice = FTW_CONTEXT_FROM_THIS (This);\r
\r
- *BlockSize = FtwDevice->SpareAreaLength;\r
+ *BlockSize = FtwDevice->SpareAreaLength;\r
\r
return EFI_SUCCESS;\r
}\r
EFI_STATUS\r
EFIAPI\r
FtwAllocate (\r
- IN EFI_FAULT_TOLERANT_WRITE_PROTOCOL *This,\r
- IN EFI_GUID *CallerId,\r
- IN UINTN PrivateDataSize,\r
- IN UINTN NumberOfWrites\r
+ IN EFI_FAULT_TOLERANT_WRITE_PROTOCOL *This,\r
+ IN EFI_GUID *CallerId,\r
+ IN UINTN PrivateDataSize,\r
+ IN UINTN NumberOfWrites\r
)\r
{\r
- EFI_STATUS Status;\r
- UINTN Offset;\r
- EFI_FTW_DEVICE *FtwDevice;\r
- EFI_FAULT_TOLERANT_WRITE_HEADER *FtwHeader;\r
+ EFI_STATUS Status;\r
+ UINTN Offset;\r
+ EFI_FTW_DEVICE *FtwDevice;\r
+ EFI_FAULT_TOLERANT_WRITE_HEADER *FtwHeader;\r
\r
FtwDevice = FTW_CONTEXT_FROM_THIS (This);\r
\r
- Status = WorkSpaceRefresh (FtwDevice);\r
+ Status = WorkSpaceRefresh (FtwDevice);\r
if (EFI_ERROR (Status)) {\r
return EFI_ABORTED;\r
}\r
+\r
//\r
// Check if there is enough space for the coming allocation\r
//\r
DEBUG ((DEBUG_ERROR, "Ftw: Allocate() request exceed Workspace, Caller: %g\n", CallerId));\r
return EFI_BUFFER_TOO_SMALL;\r
}\r
+\r
//\r
// Find the last write header and record.\r
// If the FtwHeader is complete, skip the completed last write header/records\r
if ((FtwHeader->HeaderAllocated == FTW_VALID_STATE) || (FtwHeader->WritesAllocated == FTW_VALID_STATE)) {\r
return EFI_ACCESS_DENIED;\r
}\r
+\r
//\r
// If workspace is not enough, then reclaim workspace\r
//\r
- Offset = (UINT8 *) FtwHeader - (UINT8 *) FtwDevice->FtwWorkSpace;\r
+ Offset = (UINT8 *)FtwHeader - (UINT8 *)FtwDevice->FtwWorkSpace;\r
if (Offset + FTW_WRITE_TOTAL_SIZE (NumberOfWrites, PrivateDataSize) > FtwDevice->FtwWorkSpaceSize) {\r
Status = FtwReclaimWorkSpace (FtwDevice, TRUE);\r
if (EFI_ERROR (Status)) {\r
\r
FtwHeader = FtwDevice->FtwLastWriteHeader;\r
}\r
+\r
//\r
// Prepare FTW write header,\r
// overwrite the buffer and write to workspace.\r
//\r
- FtwHeader->WritesAllocated = FTW_INVALID_STATE;\r
- FtwHeader->Complete = FTW_INVALID_STATE;\r
+ FtwHeader->WritesAllocated = FTW_INVALID_STATE;\r
+ FtwHeader->Complete = FTW_INVALID_STATE;\r
CopyMem (&FtwHeader->CallerId, CallerId, sizeof (EFI_GUID));\r
- FtwHeader->NumberOfWrites = NumberOfWrites;\r
- FtwHeader->PrivateDataSize = PrivateDataSize;\r
- FtwHeader->HeaderAllocated = FTW_VALID_STATE;\r
+ FtwHeader->NumberOfWrites = NumberOfWrites;\r
+ FtwHeader->PrivateDataSize = PrivateDataSize;\r
+ FtwHeader->HeaderAllocated = FTW_VALID_STATE;\r
\r
Status = WriteWorkSpaceData (\r
FtwDevice->FtwFvBlock,\r
FtwDevice->FtwWorkSpaceLba,\r
FtwDevice->FtwWorkSpaceBase + Offset,\r
sizeof (EFI_FAULT_TOLERANT_WRITE_HEADER),\r
- (UINT8 *) FtwHeader\r
+ (UINT8 *)FtwHeader\r
);\r
if (EFI_ERROR (Status)) {\r
return EFI_ABORTED;\r
}\r
+\r
//\r
// Update Header->WriteAllocated as VALID\r
//\r
Status = FtwUpdateFvState (\r
- FtwDevice->FtwFvBlock,\r
- FtwDevice->WorkBlockSize,\r
- FtwDevice->FtwWorkSpaceLba,\r
- FtwDevice->FtwWorkSpaceBase + Offset,\r
- WRITES_ALLOCATED\r
- );\r
+ FtwDevice->FtwFvBlock,\r
+ FtwDevice->WorkBlockSize,\r
+ FtwDevice->FtwWorkSpaceLba,\r
+ FtwDevice->FtwWorkSpaceBase + Offset,\r
+ WRITES_ALLOCATED\r
+ );\r
if (EFI_ERROR (Status)) {\r
return EFI_ABORTED;\r
}\r
\r
DEBUG (\r
(DEBUG_INFO,\r
- "Ftw: Allocate() success, Caller:%g, # %d\n",\r
- CallerId,\r
- NumberOfWrites)\r
+ "Ftw: Allocate() success, Caller:%g, # %d\n",\r
+ CallerId,\r
+ NumberOfWrites)\r
);\r
\r
return EFI_SUCCESS;\r
}\r
\r
-\r
/**\r
Write a record with fault tolerant manner.\r
Since the content has already backuped in spare block, the write is\r
**/\r
EFI_STATUS\r
FtwWriteRecord (\r
- IN EFI_FAULT_TOLERANT_WRITE_PROTOCOL *This,\r
- IN EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *Fvb,\r
- IN UINTN BlockSize\r
+ IN EFI_FAULT_TOLERANT_WRITE_PROTOCOL *This,\r
+ IN EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *Fvb,\r
+ IN UINTN BlockSize\r
)\r
{\r
- EFI_STATUS Status;\r
- EFI_FTW_DEVICE *FtwDevice;\r
- EFI_FAULT_TOLERANT_WRITE_HEADER *Header;\r
- EFI_FAULT_TOLERANT_WRITE_RECORD *Record;\r
- UINTN Offset;\r
- UINTN NumberOfWriteBlocks;\r
+ EFI_STATUS Status;\r
+ EFI_FTW_DEVICE *FtwDevice;\r
+ EFI_FAULT_TOLERANT_WRITE_HEADER *Header;\r
+ EFI_FAULT_TOLERANT_WRITE_RECORD *Record;\r
+ UINTN Offset;\r
+ UINTN NumberOfWriteBlocks;\r
\r
FtwDevice = FTW_CONTEXT_FROM_THIS (This);\r
\r
// Spare Complete but Destination not complete,\r
// Recover the target block with the spare block.\r
//\r
- Header = FtwDevice->FtwLastWriteHeader;\r
- Record = FtwDevice->FtwLastWriteRecord;\r
+ Header = FtwDevice->FtwLastWriteHeader;\r
+ Record = FtwDevice->FtwLastWriteRecord;\r
\r
//\r
// IF target block is working block, THEN Flush Spare Block To Working Block;\r
// If target block is working block,\r
// it also need to set SPARE_COMPLETED to spare block.\r
//\r
- Offset = (UINT8 *) Record - FtwDevice->FtwWorkSpace;\r
+ Offset = (UINT8 *)Record - FtwDevice->FtwWorkSpace;\r
Status = FtwUpdateFvState (\r
- FtwDevice->FtwBackupFvb,\r
- FtwDevice->SpareBlockSize,\r
- FtwDevice->FtwSpareLba + FtwDevice->FtwWorkSpaceLbaInSpare,\r
- FtwDevice->FtwWorkSpaceBaseInSpare + Offset,\r
- SPARE_COMPLETED\r
- );\r
+ FtwDevice->FtwBackupFvb,\r
+ FtwDevice->SpareBlockSize,\r
+ FtwDevice->FtwSpareLba + FtwDevice->FtwWorkSpaceLbaInSpare,\r
+ FtwDevice->FtwWorkSpaceBaseInSpare + Offset,\r
+ SPARE_COMPLETED\r
+ );\r
if (EFI_ERROR (Status)) {\r
return EFI_ABORTED;\r
}\r
//\r
// Update blocks other than working block or boot block\r
//\r
- NumberOfWriteBlocks = FTW_BLOCKS ((UINTN) (Record->Offset + Record->Length), BlockSize);\r
- Status = FlushSpareBlockToTargetBlock (FtwDevice, Fvb, Record->Lba, BlockSize, NumberOfWriteBlocks);\r
+ NumberOfWriteBlocks = FTW_BLOCKS ((UINTN)(Record->Offset + Record->Length), BlockSize);\r
+ Status = FlushSpareBlockToTargetBlock (FtwDevice, Fvb, Record->Lba, BlockSize, NumberOfWriteBlocks);\r
}\r
\r
if (EFI_ERROR (Status)) {\r
return EFI_ABORTED;\r
}\r
+\r
//\r
// Record the DestionationComplete in record\r
//\r
- Offset = (UINT8 *) Record - FtwDevice->FtwWorkSpace;\r
+ Offset = (UINT8 *)Record - FtwDevice->FtwWorkSpace;\r
Status = FtwUpdateFvState (\r
- FtwDevice->FtwFvBlock,\r
- FtwDevice->WorkBlockSize,\r
- FtwDevice->FtwWorkSpaceLba,\r
- FtwDevice->FtwWorkSpaceBase + Offset,\r
- DEST_COMPLETED\r
- );\r
+ FtwDevice->FtwFvBlock,\r
+ FtwDevice->WorkBlockSize,\r
+ FtwDevice->FtwWorkSpaceLba,\r
+ FtwDevice->FtwWorkSpaceBase + Offset,\r
+ DEST_COMPLETED\r
+ );\r
if (EFI_ERROR (Status)) {\r
return EFI_ABORTED;\r
}\r
// set the complete flag of write header.\r
//\r
if (IsLastRecordOfWrites (Header, Record)) {\r
- Offset = (UINT8 *) Header - FtwDevice->FtwWorkSpace;\r
+ Offset = (UINT8 *)Header - FtwDevice->FtwWorkSpace;\r
Status = FtwUpdateFvState (\r
- FtwDevice->FtwFvBlock,\r
- FtwDevice->WorkBlockSize,\r
- FtwDevice->FtwWorkSpaceLba,\r
- FtwDevice->FtwWorkSpaceBase + Offset,\r
- WRITES_COMPLETED\r
- );\r
+ FtwDevice->FtwFvBlock,\r
+ FtwDevice->WorkBlockSize,\r
+ FtwDevice->FtwWorkSpaceLba,\r
+ FtwDevice->FtwWorkSpaceBase + Offset,\r
+ WRITES_COMPLETED\r
+ );\r
Header->Complete = FTW_VALID_STATE;\r
if (EFI_ERROR (Status)) {\r
return EFI_ABORTED;\r
EFI_STATUS\r
EFIAPI\r
FtwWrite (\r
- IN EFI_FAULT_TOLERANT_WRITE_PROTOCOL *This,\r
- IN EFI_LBA Lba,\r
- IN UINTN Offset,\r
- IN UINTN Length,\r
- IN VOID *PrivateData,\r
- IN EFI_HANDLE FvBlockHandle,\r
- IN VOID *Buffer\r
+ IN EFI_FAULT_TOLERANT_WRITE_PROTOCOL *This,\r
+ IN EFI_LBA Lba,\r
+ IN UINTN Offset,\r
+ IN UINTN Length,\r
+ IN VOID *PrivateData,\r
+ IN EFI_HANDLE FvBlockHandle,\r
+ IN VOID *Buffer\r
)\r
{\r
EFI_STATUS Status;\r
\r
FtwDevice = FTW_CONTEXT_FROM_THIS (This);\r
\r
- Status = WorkSpaceRefresh (FtwDevice);\r
+ Status = WorkSpaceRefresh (FtwDevice);\r
if (EFI_ERROR (Status)) {\r
return EFI_ABORTED;\r
}\r
\r
- Header = FtwDevice->FtwLastWriteHeader;\r
- Record = FtwDevice->FtwLastWriteRecord;\r
+ Header = FtwDevice->FtwLastWriteHeader;\r
+ Record = FtwDevice->FtwLastWriteRecord;\r
\r
- if (IsErasedFlashBuffer ((UINT8 *) Header, sizeof (EFI_FAULT_TOLERANT_WRITE_HEADER))) {\r
+ if (IsErasedFlashBuffer ((UINT8 *)Header, sizeof (EFI_FAULT_TOLERANT_WRITE_HEADER))) {\r
if (PrivateData == NULL) {\r
//\r
// Ftw Write Header is not allocated.\r
//\r
// If Record is out of the range of Header, return access denied.\r
//\r
- if (((UINTN) Record - (UINTN) Header) > FTW_WRITE_TOTAL_SIZE (Header->NumberOfWrites - 1, Header->PrivateDataSize)) {\r
+ if (((UINTN)Record - (UINTN)Header) > FTW_WRITE_TOTAL_SIZE (Header->NumberOfWrites - 1, Header->PrivateDataSize)) {\r
return EFI_ACCESS_DENIED;\r
}\r
\r
//\r
ASSERT ((BlockSize == FtwDevice->SpareBlockSize) && (NumberOfWriteBlocks == FtwDevice->NumberOfSpareBlock));\r
}\r
+\r
//\r
// Write the record to the work space.\r
//\r
- Record->Lba = Lba;\r
- Record->Offset = Offset;\r
- Record->Length = Length;\r
- Record->RelativeOffset = (INT64) (FvbPhysicalAddress + (UINTN) Lba * BlockSize) - (INT64) FtwDevice->SpareAreaAddress;\r
+ Record->Lba = Lba;\r
+ Record->Offset = Offset;\r
+ Record->Length = Length;\r
+ Record->RelativeOffset = (INT64)(FvbPhysicalAddress + (UINTN)Lba * BlockSize) - (INT64)FtwDevice->SpareAreaAddress;\r
if (PrivateData != NULL) {\r
- CopyMem ((Record + 1), PrivateData, (UINTN) Header->PrivateDataSize);\r
+ CopyMem ((Record + 1), PrivateData, (UINTN)Header->PrivateDataSize);\r
}\r
\r
- MyOffset = (UINT8 *) Record - FtwDevice->FtwWorkSpace;\r
- MyLength = FTW_RECORD_SIZE (Header->PrivateDataSize);\r
+ MyOffset = (UINT8 *)Record - FtwDevice->FtwWorkSpace;\r
+ MyLength = FTW_RECORD_SIZE (Header->PrivateDataSize);\r
\r
Status = WriteWorkSpaceData (\r
FtwDevice->FtwFvBlock,\r
FtwDevice->FtwWorkSpaceLba,\r
FtwDevice->FtwWorkSpaceBase + MyOffset,\r
MyLength,\r
- (UINT8 *) Record\r
+ (UINT8 *)Record\r
);\r
if (EFI_ERROR (Status)) {\r
return EFI_ABORTED;\r
}\r
+\r
//\r
// Record has written to working block, then do the data.\r
//\r
//\r
// Allocate a memory buffer\r
//\r
- MyBufferSize = WriteLength;\r
- MyBuffer = AllocatePool (MyBufferSize);\r
+ MyBufferSize = WriteLength;\r
+ MyBuffer = AllocatePool (MyBufferSize);\r
if (MyBuffer == NULL) {\r
return EFI_OUT_OF_RESOURCES;\r
}\r
+\r
//\r
// Read all original data from target block to memory buffer\r
//\r
Ptr = MyBuffer;\r
for (Index = 0; Index < NumberOfWriteBlocks; Index += 1) {\r
- MyLength = BlockSize;\r
- Status = Fvb->Read (Fvb, Lba + Index, 0, &MyLength, Ptr);\r
+ MyLength = BlockSize;\r
+ Status = Fvb->Read (Fvb, Lba + Index, 0, &MyLength, Ptr);\r
if (EFI_ERROR (Status)) {\r
FreePool (MyBuffer);\r
return EFI_ABORTED;\r
\r
Ptr += MyLength;\r
}\r
+\r
//\r
// Overwrite the updating range data with\r
// the input buffer content\r
Ptr = SpareBuffer;\r
for (Index = 0; Index < FtwDevice->NumberOfSpareBlock; Index += 1) {\r
MyLength = FtwDevice->SpareBlockSize;\r
- Status = FtwDevice->FtwBackupFvb->Read (\r
- FtwDevice->FtwBackupFvb,\r
- FtwDevice->FtwSpareLba + Index,\r
- 0,\r
- &MyLength,\r
- Ptr\r
- );\r
+ Status = FtwDevice->FtwBackupFvb->Read (\r
+ FtwDevice->FtwBackupFvb,\r
+ FtwDevice->FtwSpareLba + Index,\r
+ 0,\r
+ &MyLength,\r
+ Ptr\r
+ );\r
if (EFI_ERROR (Status)) {\r
FreePool (MyBuffer);\r
FreePool (SpareBuffer);\r
\r
Ptr += MyLength;\r
}\r
+\r
//\r
// Write the memory buffer to spare block\r
// Do not assume Spare Block and Target Block have same block size\r
//\r
- Status = FtwEraseSpareBlock (FtwDevice);\r
+ Status = FtwEraseSpareBlock (FtwDevice);\r
if (EFI_ERROR (Status)) {\r
FreePool (MyBuffer);\r
FreePool (SpareBuffer);\r
return EFI_ABORTED;\r
}\r
- Ptr = MyBuffer;\r
+\r
+ Ptr = MyBuffer;\r
for (Index = 0; MyBufferSize > 0; Index += 1) {\r
if (MyBufferSize > FtwDevice->SpareBlockSize) {\r
MyLength = FtwDevice->SpareBlockSize;\r
} else {\r
MyLength = MyBufferSize;\r
}\r
+\r
Status = FtwDevice->FtwBackupFvb->Write (\r
FtwDevice->FtwBackupFvb,\r
FtwDevice->FtwSpareLba + Index,\r
return EFI_ABORTED;\r
}\r
\r
- Ptr += MyLength;\r
+ Ptr += MyLength;\r
MyBufferSize -= MyLength;\r
}\r
+\r
//\r
// Free MyBuffer\r
//\r
//\r
// Set the SpareComplete in the FTW record,\r
//\r
- MyOffset = (UINT8 *) Record - FtwDevice->FtwWorkSpace;\r
- Status = FtwUpdateFvState (\r
- FtwDevice->FtwFvBlock,\r
- FtwDevice->WorkBlockSize,\r
- FtwDevice->FtwWorkSpaceLba,\r
- FtwDevice->FtwWorkSpaceBase + MyOffset,\r
- SPARE_COMPLETED\r
- );\r
+ MyOffset = (UINT8 *)Record - FtwDevice->FtwWorkSpace;\r
+ Status = FtwUpdateFvState (\r
+ FtwDevice->FtwFvBlock,\r
+ FtwDevice->WorkBlockSize,\r
+ FtwDevice->FtwWorkSpaceLba,\r
+ FtwDevice->FtwWorkSpaceBase + MyOffset,\r
+ SPARE_COMPLETED\r
+ );\r
if (EFI_ERROR (Status)) {\r
FreePool (SpareBuffer);\r
return EFI_ABORTED;\r
FreePool (SpareBuffer);\r
return EFI_ABORTED;\r
}\r
+\r
//\r
// Restore spare backup buffer into spare block , if no failure happened during FtwWrite.\r
//\r
- Status = FtwEraseSpareBlock (FtwDevice);\r
+ Status = FtwEraseSpareBlock (FtwDevice);\r
if (EFI_ERROR (Status)) {\r
FreePool (SpareBuffer);\r
return EFI_ABORTED;\r
}\r
- Ptr = SpareBuffer;\r
+\r
+ Ptr = SpareBuffer;\r
for (Index = 0; Index < FtwDevice->NumberOfSpareBlock; Index += 1) {\r
MyLength = FtwDevice->SpareBlockSize;\r
- Status = FtwDevice->FtwBackupFvb->Write (\r
- FtwDevice->FtwBackupFvb,\r
- FtwDevice->FtwSpareLba + Index,\r
- 0,\r
- &MyLength,\r
- Ptr\r
- );\r
+ Status = FtwDevice->FtwBackupFvb->Write (\r
+ FtwDevice->FtwBackupFvb,\r
+ FtwDevice->FtwSpareLba + Index,\r
+ 0,\r
+ &MyLength,\r
+ Ptr\r
+ );\r
if (EFI_ERROR (Status)) {\r
FreePool (SpareBuffer);\r
return EFI_ABORTED;\r
\r
Ptr += MyLength;\r
}\r
+\r
//\r
// All success.\r
//\r
\r
DEBUG (\r
(DEBUG_INFO,\r
- "Ftw: Write() success, (Lba:Offset)=(%lx:0x%x), Length: 0x%x\n",\r
- Lba,\r
- Offset,\r
- Length)\r
+ "Ftw: Write() success, (Lba:Offset)=(%lx:0x%x), Length: 0x%x\n",\r
+ Lba,\r
+ Offset,\r
+ Length)\r
);\r
\r
return EFI_SUCCESS;\r
EFI_STATUS\r
EFIAPI\r
FtwRestart (\r
- IN EFI_FAULT_TOLERANT_WRITE_PROTOCOL *This,\r
- IN EFI_HANDLE FvBlockHandle\r
+ IN EFI_FAULT_TOLERANT_WRITE_PROTOCOL *This,\r
+ IN EFI_HANDLE FvBlockHandle\r
)\r
{\r
EFI_STATUS Status;\r
\r
FtwDevice = FTW_CONTEXT_FROM_THIS (This);\r
\r
- Status = WorkSpaceRefresh (FtwDevice);\r
+ Status = WorkSpaceRefresh (FtwDevice);\r
if (EFI_ERROR (Status)) {\r
return EFI_ABORTED;\r
}\r
\r
- Header = FtwDevice->FtwLastWriteHeader;\r
- Record = FtwDevice->FtwLastWriteRecord;\r
+ Header = FtwDevice->FtwLastWriteHeader;\r
+ Record = FtwDevice->FtwLastWriteRecord;\r
\r
//\r
// Spare Complete but Destination not complete,\r
EFI_STATUS\r
EFIAPI\r
FtwAbort (\r
- IN EFI_FAULT_TOLERANT_WRITE_PROTOCOL *This\r
+ IN EFI_FAULT_TOLERANT_WRITE_PROTOCOL *This\r
)\r
{\r
EFI_STATUS Status;\r
\r
FtwDevice = FTW_CONTEXT_FROM_THIS (This);\r
\r
- Status = WorkSpaceRefresh (FtwDevice);\r
+ Status = WorkSpaceRefresh (FtwDevice);\r
if (EFI_ERROR (Status)) {\r
return EFI_ABORTED;\r
}\r
if (FtwDevice->FtwLastWriteHeader->Complete == FTW_VALID_STATE) {\r
return EFI_NOT_FOUND;\r
}\r
+\r
//\r
// Update the complete state of the header as VALID and abort.\r
//\r
- Offset = (UINT8 *) FtwDevice->FtwLastWriteHeader - FtwDevice->FtwWorkSpace;\r
+ Offset = (UINT8 *)FtwDevice->FtwLastWriteHeader - FtwDevice->FtwWorkSpace;\r
Status = FtwUpdateFvState (\r
- FtwDevice->FtwFvBlock,\r
- FtwDevice->WorkBlockSize,\r
- FtwDevice->FtwWorkSpaceLba,\r
- FtwDevice->FtwWorkSpaceBase + Offset,\r
- WRITES_COMPLETED\r
- );\r
+ FtwDevice->FtwFvBlock,\r
+ FtwDevice->WorkBlockSize,\r
+ FtwDevice->FtwWorkSpaceLba,\r
+ FtwDevice->FtwWorkSpaceBase + Offset,\r
+ WRITES_COMPLETED\r
+ );\r
if (EFI_ERROR (Status)) {\r
return EFI_ABORTED;\r
}\r
EFI_STATUS\r
EFIAPI\r
FtwGetLastWrite (\r
- IN EFI_FAULT_TOLERANT_WRITE_PROTOCOL *This,\r
- OUT EFI_GUID *CallerId,\r
- OUT EFI_LBA *Lba,\r
- OUT UINTN *Offset,\r
- OUT UINTN *Length,\r
- IN OUT UINTN *PrivateDataSize,\r
- OUT VOID *PrivateData,\r
- OUT BOOLEAN *Complete\r
+ IN EFI_FAULT_TOLERANT_WRITE_PROTOCOL *This,\r
+ OUT EFI_GUID *CallerId,\r
+ OUT EFI_LBA *Lba,\r
+ OUT UINTN *Offset,\r
+ OUT UINTN *Length,\r
+ IN OUT UINTN *PrivateDataSize,\r
+ OUT VOID *PrivateData,\r
+ OUT BOOLEAN *Complete\r
)\r
{\r
- EFI_STATUS Status;\r
- EFI_FTW_DEVICE *FtwDevice;\r
- EFI_FAULT_TOLERANT_WRITE_HEADER *Header;\r
- EFI_FAULT_TOLERANT_WRITE_RECORD *Record;\r
+ EFI_STATUS Status;\r
+ EFI_FTW_DEVICE *FtwDevice;\r
+ EFI_FAULT_TOLERANT_WRITE_HEADER *Header;\r
+ EFI_FAULT_TOLERANT_WRITE_RECORD *Record;\r
\r
- if (!FeaturePcdGet(PcdFullFtwServiceEnable)) {\r
+ if (!FeaturePcdGet (PcdFullFtwServiceEnable)) {\r
return EFI_UNSUPPORTED;\r
}\r
\r
FtwDevice = FTW_CONTEXT_FROM_THIS (This);\r
\r
- Status = WorkSpaceRefresh (FtwDevice);\r
+ Status = WorkSpaceRefresh (FtwDevice);\r
if (EFI_ERROR (Status)) {\r
return EFI_ABORTED;\r
}\r
\r
- Header = FtwDevice->FtwLastWriteHeader;\r
- Record = FtwDevice->FtwLastWriteRecord;\r
+ Header = FtwDevice->FtwLastWriteHeader;\r
+ Record = FtwDevice->FtwLastWriteRecord;\r
\r
//\r
// If Header is incompleted and the last record has completed, then\r
if ((Header->Complete != FTW_VALID_STATE) &&\r
(Record->DestinationComplete == FTW_VALID_STATE) &&\r
IsLastRecordOfWrites (Header, Record)\r
- ) {\r
-\r
+ )\r
+ {\r
Status = FtwAbort (This);\r
*Complete = TRUE;\r
return EFI_NOT_FOUND;\r
}\r
+\r
//\r
// If there is no write header/record, return not found.\r
//\r
*Complete = TRUE;\r
return EFI_NOT_FOUND;\r
}\r
+\r
//\r
// If this record SpareComplete has not set, then it can not restart.\r
//\r
*Complete = TRUE;\r
return EFI_NOT_FOUND;\r
}\r
+\r
ASSERT (Record != NULL);\r
}\r
\r
//\r
CopyMem (CallerId, &Header->CallerId, sizeof (EFI_GUID));\r
*Lba = Record->Lba;\r
- *Offset = (UINTN) Record->Offset;\r
- *Length = (UINTN) Record->Length;\r
- *Complete = (BOOLEAN) (Record->DestinationComplete == FTW_VALID_STATE);\r
+ *Offset = (UINTN)Record->Offset;\r
+ *Length = (UINTN)Record->Length;\r
+ *Complete = (BOOLEAN)(Record->DestinationComplete == FTW_VALID_STATE);\r
\r
if (*PrivateDataSize < Header->PrivateDataSize) {\r
- *PrivateDataSize = (UINTN) Header->PrivateDataSize;\r
- PrivateData = NULL;\r
- Status = EFI_BUFFER_TOO_SMALL;\r
+ *PrivateDataSize = (UINTN)Header->PrivateDataSize;\r
+ PrivateData = NULL;\r
+ Status = EFI_BUFFER_TOO_SMALL;\r
} else {\r
- *PrivateDataSize = (UINTN) Header->PrivateDataSize;\r
+ *PrivateDataSize = (UINTN)Header->PrivateDataSize;\r
CopyMem (PrivateData, Record + 1, *PrivateDataSize);\r
Status = EFI_SUCCESS;\r
}\r