diff options
Diffstat (limited to 'MdeModulePkg/Universal/FaultTolerantWritePei/FaultTolerantWritePei.c')
-rw-r--r-- | MdeModulePkg/Universal/FaultTolerantWritePei/FaultTolerantWritePei.c | 111 |
1 files changed, 59 insertions, 52 deletions
diff --git a/MdeModulePkg/Universal/FaultTolerantWritePei/FaultTolerantWritePei.c b/MdeModulePkg/Universal/FaultTolerantWritePei/FaultTolerantWritePei.c index ca5d5b4a22..15543f12ed 100644 --- a/MdeModulePkg/Universal/FaultTolerantWritePei/FaultTolerantWritePei.c +++ b/MdeModulePkg/Universal/FaultTolerantWritePei/FaultTolerantWritePei.c @@ -17,7 +17,7 @@ SPDX-License-Identifier: BSD-2-Clause-Patent #include <Library/BaseMemoryLib.h>
#include <Library/HobLib.h>
-EFI_PEI_PPI_DESCRIPTOR mPpiListVariable = {
+EFI_PEI_PPI_DESCRIPTOR mPpiListVariable = {
(EFI_PEI_PPI_DESCRIPTOR_PPI | EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST),
&gEdkiiFaultTolerantWriteGuid,
NULL
@@ -44,11 +44,11 @@ FtwGetLastWriteHeader ( OUT EFI_FAULT_TOLERANT_WRITE_HEADER **FtwWriteHeader
)
{
- UINTN Offset;
- EFI_FAULT_TOLERANT_WRITE_HEADER *FtwHeader;
+ UINTN Offset;
+ EFI_FAULT_TOLERANT_WRITE_HEADER *FtwHeader;
*FtwWriteHeader = NULL;
- FtwHeader = (EFI_FAULT_TOLERANT_WRITE_HEADER *) (FtwWorkSpaceHeader + 1);
+ FtwHeader = (EFI_FAULT_TOLERANT_WRITE_HEADER *)(FtwWorkSpaceHeader + 1);
Offset = sizeof (EFI_FAULT_TOLERANT_WORKING_BLOCK_HEADER);
while (FtwHeader->Complete == FTW_VALID_STATE) {
@@ -61,8 +61,9 @@ FtwGetLastWriteHeader ( return EFI_ABORTED;
}
- FtwHeader = (EFI_FAULT_TOLERANT_WRITE_HEADER *) ((UINT8 *) FtwWorkSpaceHeader + Offset);
+ FtwHeader = (EFI_FAULT_TOLERANT_WRITE_HEADER *)((UINT8 *)FtwWorkSpaceHeader + Offset);
}
+
//
// Last write header is found
//
@@ -86,15 +87,15 @@ FtwGetLastWriteHeader ( **/
EFI_STATUS
FtwGetLastWriteRecord (
- IN EFI_FAULT_TOLERANT_WRITE_HEADER *FtwWriteHeader,
- OUT EFI_FAULT_TOLERANT_WRITE_RECORD **FtwWriteRecord
+ IN EFI_FAULT_TOLERANT_WRITE_HEADER *FtwWriteHeader,
+ OUT EFI_FAULT_TOLERANT_WRITE_RECORD **FtwWriteRecord
)
{
- UINTN Index;
- EFI_FAULT_TOLERANT_WRITE_RECORD *FtwRecord;
+ UINTN Index;
+ EFI_FAULT_TOLERANT_WRITE_RECORD *FtwRecord;
*FtwWriteRecord = NULL;
- FtwRecord = (EFI_FAULT_TOLERANT_WRITE_RECORD *) (FtwWriteHeader + 1);
+ FtwRecord = (EFI_FAULT_TOLERANT_WRITE_RECORD *)(FtwWriteHeader + 1);
//
// Try to find the last write record "that has not completed"
@@ -111,9 +112,10 @@ FtwGetLastWriteRecord ( FtwRecord++;
if (FtwWriteHeader->PrivateDataSize != 0) {
- FtwRecord = (EFI_FAULT_TOLERANT_WRITE_RECORD *) ((UINTN) FtwRecord + (UINTN) FtwWriteHeader->PrivateDataSize);
+ FtwRecord = (EFI_FAULT_TOLERANT_WRITE_RECORD *)((UINTN)FtwRecord + (UINTN)FtwWriteHeader->PrivateDataSize);
}
}
+
//
// if Index == NumberOfWrites, then
// the last record has been written successfully,
@@ -121,7 +123,7 @@ FtwGetLastWriteRecord ( // also return the last record.
//
if (Index == FtwWriteHeader->NumberOfWrites) {
- *FtwWriteRecord = (EFI_FAULT_TOLERANT_WRITE_RECORD *) ((UINTN) FtwRecord - FTW_RECORD_SIZE (FtwWriteHeader->PrivateDataSize));
+ *FtwWriteRecord = (EFI_FAULT_TOLERANT_WRITE_RECORD *)((UINTN)FtwRecord - FTW_RECORD_SIZE (FtwWriteHeader->PrivateDataSize));
return EFI_SUCCESS;
}
@@ -141,11 +143,11 @@ FtwGetLastWriteRecord ( **/
BOOLEAN
IsValidWorkSpace (
- IN EFI_FAULT_TOLERANT_WORKING_BLOCK_HEADER *WorkingHeader,
- IN UINTN WorkingLength
+ IN EFI_FAULT_TOLERANT_WORKING_BLOCK_HEADER *WorkingHeader,
+ IN UINTN WorkingLength
)
{
- UINT8 Data;
+ UINT8 Data;
if (WorkingHeader == NULL) {
return FALSE;
@@ -172,7 +174,7 @@ IsValidWorkSpace ( if (!CompareGuid (&gEfiSystemNvDataFvGuid, &WorkingHeader->Signature)) {
return FALSE;
} else {
- Data = *(UINT8 *) (WorkingHeader + 1);
+ Data = *(UINT8 *)(WorkingHeader + 1);
if (Data != 0xff) {
DEBUG ((DEBUG_ERROR, "FtwPei: Old format FTW structure can't be handled\n"));
ASSERT (FALSE);
@@ -182,7 +184,6 @@ IsValidWorkSpace ( }
return TRUE;
-
}
/**
@@ -202,39 +203,41 @@ PeimFaultTolerantWriteInitialize ( IN CONST EFI_PEI_SERVICES **PeiServices
)
{
- EFI_STATUS Status;
- EFI_FAULT_TOLERANT_WORKING_BLOCK_HEADER *FtwWorkingBlockHeader;
- EFI_FAULT_TOLERANT_WRITE_HEADER *FtwLastWriteHeader;
- EFI_FAULT_TOLERANT_WRITE_RECORD *FtwLastWriteRecord;
- EFI_PHYSICAL_ADDRESS WorkSpaceAddress;
- UINTN WorkSpaceLength;
- EFI_PHYSICAL_ADDRESS SpareAreaAddress;
- UINTN SpareAreaLength;
- EFI_PHYSICAL_ADDRESS WorkSpaceInSpareArea;
- FAULT_TOLERANT_WRITE_LAST_WRITE_DATA FtwLastWrite;
+ EFI_STATUS Status;
+ EFI_FAULT_TOLERANT_WORKING_BLOCK_HEADER *FtwWorkingBlockHeader;
+ EFI_FAULT_TOLERANT_WRITE_HEADER *FtwLastWriteHeader;
+ EFI_FAULT_TOLERANT_WRITE_RECORD *FtwLastWriteRecord;
+ EFI_PHYSICAL_ADDRESS WorkSpaceAddress;
+ UINTN WorkSpaceLength;
+ EFI_PHYSICAL_ADDRESS SpareAreaAddress;
+ UINTN SpareAreaLength;
+ EFI_PHYSICAL_ADDRESS WorkSpaceInSpareArea;
+ FAULT_TOLERANT_WRITE_LAST_WRITE_DATA FtwLastWrite;
FtwWorkingBlockHeader = NULL;
- FtwLastWriteHeader = NULL;
- FtwLastWriteRecord = NULL;
+ FtwLastWriteHeader = NULL;
+ FtwLastWriteRecord = NULL;
- WorkSpaceAddress = (EFI_PHYSICAL_ADDRESS) PcdGet64 (PcdFlashNvStorageFtwWorkingBase64);
+ WorkSpaceAddress = (EFI_PHYSICAL_ADDRESS)PcdGet64 (PcdFlashNvStorageFtwWorkingBase64);
if (WorkSpaceAddress == 0) {
- WorkSpaceAddress = (EFI_PHYSICAL_ADDRESS) PcdGet32 (PcdFlashNvStorageFtwWorkingBase);
+ WorkSpaceAddress = (EFI_PHYSICAL_ADDRESS)PcdGet32 (PcdFlashNvStorageFtwWorkingBase);
}
- WorkSpaceLength = (UINTN) PcdGet32 (PcdFlashNvStorageFtwWorkingSize);
- SpareAreaAddress = (EFI_PHYSICAL_ADDRESS) PcdGet64 (PcdFlashNvStorageFtwSpareBase64);
+ WorkSpaceLength = (UINTN)PcdGet32 (PcdFlashNvStorageFtwWorkingSize);
+
+ SpareAreaAddress = (EFI_PHYSICAL_ADDRESS)PcdGet64 (PcdFlashNvStorageFtwSpareBase64);
if (SpareAreaAddress == 0) {
- SpareAreaAddress = (EFI_PHYSICAL_ADDRESS) PcdGet32 (PcdFlashNvStorageFtwSpareBase);
+ SpareAreaAddress = (EFI_PHYSICAL_ADDRESS)PcdGet32 (PcdFlashNvStorageFtwSpareBase);
}
- SpareAreaLength = (UINTN) PcdGet32 (PcdFlashNvStorageFtwSpareSize);
+
+ SpareAreaLength = (UINTN)PcdGet32 (PcdFlashNvStorageFtwSpareSize);
//
// The address of FTW working base and spare base must not be 0.
//
ASSERT ((WorkSpaceAddress != 0) && (SpareAreaAddress != 0));
- FtwWorkingBlockHeader = (EFI_FAULT_TOLERANT_WORKING_BLOCK_HEADER *) (UINTN) WorkSpaceAddress;
+ FtwWorkingBlockHeader = (EFI_FAULT_TOLERANT_WORKING_BLOCK_HEADER *)(UINTN)WorkSpaceAddress;
if (IsValidWorkSpace (FtwWorkingBlockHeader, WorkSpaceLength)) {
Status = FtwGetLastWriteHeader (
FtwWorkingBlockHeader,
@@ -257,16 +260,17 @@ PeimFaultTolerantWriteInitialize ( // but the target buffer has not been writen in target block from spare block, we need to build
// FAULT_TOLERANT_WRITE_LAST_WRITE_DATA GUID hob to hold the FTW last write data.
//
- FtwLastWrite.TargetAddress = (EFI_PHYSICAL_ADDRESS) (UINTN) ((INT64) SpareAreaAddress + FtwLastWriteRecord->RelativeOffset);
- FtwLastWrite.SpareAddress = SpareAreaAddress;
- FtwLastWrite.Length = SpareAreaLength;
+ FtwLastWrite.TargetAddress = (EFI_PHYSICAL_ADDRESS)(UINTN)((INT64)SpareAreaAddress + FtwLastWriteRecord->RelativeOffset);
+ FtwLastWrite.SpareAddress = SpareAreaAddress;
+ FtwLastWrite.Length = SpareAreaLength;
DEBUG ((
DEBUG_INFO,
"FtwPei last write data: TargetAddress - 0x%x SpareAddress - 0x%x Length - 0x%x\n",
- (UINTN) FtwLastWrite.TargetAddress,
- (UINTN) FtwLastWrite.SpareAddress,
- (UINTN) FtwLastWrite.Length));
- BuildGuidDataHob (&gEdkiiFaultTolerantWriteGuid, (VOID *) &FtwLastWrite, sizeof (FAULT_TOLERANT_WRITE_LAST_WRITE_DATA));
+ (UINTN)FtwLastWrite.TargetAddress,
+ (UINTN)FtwLastWrite.SpareAddress,
+ (UINTN)FtwLastWrite.Length
+ ));
+ BuildGuidDataHob (&gEdkiiFaultTolerantWriteGuid, (VOID *)&FtwLastWrite, sizeof (FAULT_TOLERANT_WRITE_LAST_WRITE_DATA));
}
}
} else {
@@ -276,30 +280,33 @@ PeimFaultTolerantWriteInitialize ( //
WorkSpaceInSpareArea = SpareAreaAddress + SpareAreaLength - WorkSpaceLength;
while (WorkSpaceInSpareArea >= SpareAreaAddress) {
- if (CompareGuid (&gEdkiiWorkingBlockSignatureGuid, (EFI_GUID *) (UINTN) WorkSpaceInSpareArea)) {
+ if (CompareGuid (&gEdkiiWorkingBlockSignatureGuid, (EFI_GUID *)(UINTN)WorkSpaceInSpareArea)) {
//
// Found the workspace.
//
- DEBUG ((DEBUG_INFO, "FtwPei: workspace in spare block is at 0x%x.\n", (UINTN) WorkSpaceInSpareArea));
- FtwWorkingBlockHeader = (EFI_FAULT_TOLERANT_WORKING_BLOCK_HEADER *) (UINTN) WorkSpaceInSpareArea;
+ DEBUG ((DEBUG_INFO, "FtwPei: workspace in spare block is at 0x%x.\n", (UINTN)WorkSpaceInSpareArea));
+ FtwWorkingBlockHeader = (EFI_FAULT_TOLERANT_WORKING_BLOCK_HEADER *)(UINTN)WorkSpaceInSpareArea;
break;
}
+
WorkSpaceInSpareArea = WorkSpaceInSpareArea - sizeof (EFI_GUID);
}
+
if ((FtwWorkingBlockHeader != NULL) && IsValidWorkSpace (FtwWorkingBlockHeader, WorkSpaceLength)) {
//
// It was workspace self reclaim, build FAULT_TOLERANT_WRITE_LAST_WRITE_DATA GUID hob for it.
//
FtwLastWrite.TargetAddress = WorkSpaceAddress - (WorkSpaceInSpareArea - SpareAreaAddress);
- FtwLastWrite.SpareAddress = SpareAreaAddress;
- FtwLastWrite.Length = SpareAreaLength;
+ FtwLastWrite.SpareAddress = SpareAreaAddress;
+ FtwLastWrite.Length = SpareAreaLength;
DEBUG ((
DEBUG_INFO,
"FtwPei last write data: TargetAddress - 0x%x SpareAddress - 0x%x Length - 0x%x\n",
- (UINTN) FtwLastWrite.TargetAddress,
- (UINTN) FtwLastWrite.SpareAddress,
- (UINTN) FtwLastWrite.Length));
- BuildGuidDataHob (&gEdkiiFaultTolerantWriteGuid, (VOID *) &FtwLastWrite, sizeof (FAULT_TOLERANT_WRITE_LAST_WRITE_DATA));
+ (UINTN)FtwLastWrite.TargetAddress,
+ (UINTN)FtwLastWrite.SpareAddress,
+ (UINTN)FtwLastWrite.Length
+ ));
+ BuildGuidDataHob (&gEdkiiFaultTolerantWriteGuid, (VOID *)&FtwLastWrite, sizeof (FAULT_TOLERANT_WRITE_LAST_WRITE_DATA));
} else {
//
// Both are invalid.
|