//\r
#define FTW_ERASE_POLARITY 1\r
\r
-#define FTW_ERASED_BYTE ((UINT8) (255))\r
-#define FTW_POLARITY_REVERT ((UINT8) (255))\r
+#define FTW_ERASED_BYTE ((UINT8) (255))\r
+#define FTW_POLARITY_REVERT ((UINT8) (255))\r
\r
#define HEADER_ALLOCATED 0x1\r
#define WRITES_ALLOCATED 0x2\r
#define WRITES_COMPLETED 0x4\r
\r
-#define BOOT_BLOCK_UPDATE 0x1\r
-#define SPARE_COMPLETED 0x2\r
-#define DEST_COMPLETED 0x4\r
+#define BOOT_BLOCK_UPDATE 0x1\r
+#define SPARE_COMPLETED 0x2\r
+#define DEST_COMPLETED 0x4\r
\r
-#define FTW_BLOCKS(Length, BlockSize) ((UINTN) ((Length) / (BlockSize) + (((Length) & ((BlockSize) - 1)) ? 1 : 0)))\r
+#define FTW_BLOCKS(Length, BlockSize) ((UINTN) ((Length) / (BlockSize) + (((Length) & ((BlockSize) - 1)) ? 1 : 0)))\r
\r
#define FTW_DEVICE_SIGNATURE SIGNATURE_32 ('F', 'T', 'W', 'D')\r
\r
// EFI Fault tolerant protocol private data structure\r
//\r
typedef struct {\r
- UINTN Signature;\r
- EFI_HANDLE Handle;\r
- EFI_FAULT_TOLERANT_WRITE_PROTOCOL FtwInstance;\r
- EFI_PHYSICAL_ADDRESS WorkSpaceAddress; // Base address of working space range in flash.\r
- EFI_PHYSICAL_ADDRESS SpareAreaAddress; // Base address of spare range in flash.\r
- UINTN WorkSpaceLength; // Size of working space range in flash.\r
- UINTN NumberOfWorkSpaceBlock; // Number of the blocks in work block for work space.\r
- UINTN WorkBlockSize; // Block size in bytes of the work blocks in flash\r
- UINTN SpareAreaLength; // Size of spare range in flash.\r
- UINTN NumberOfSpareBlock; // Number of the blocks in spare block.\r
- UINTN SpareBlockSize; // Block size in bytes of the spare blocks in flash\r
- EFI_FAULT_TOLERANT_WORKING_BLOCK_HEADER *FtwWorkSpaceHeader;// Pointer to Working Space Header in memory buffer\r
- EFI_FAULT_TOLERANT_WRITE_HEADER *FtwLastWriteHeader;// Pointer to last record header in memory buffer\r
- EFI_FAULT_TOLERANT_WRITE_RECORD *FtwLastWriteRecord;// Pointer to last record in memory buffer\r
- EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *FtwFvBlock; // FVB of working block\r
- EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *FtwBackupFvb; // FVB of spare block\r
- EFI_LBA FtwSpareLba; // Start LBA of spare block\r
- EFI_LBA FtwWorkBlockLba; // Start LBA of working block that contains working space in its last block.\r
- UINTN NumberOfWorkBlock; // Number of the blocks in work block.\r
- EFI_LBA FtwWorkSpaceLba; // Start LBA of working space\r
- UINTN FtwWorkSpaceBase; // Offset into the FtwWorkSpaceLba block.\r
- UINTN FtwWorkSpaceSize; // Size of working space range that stores write record.\r
- EFI_LBA FtwWorkSpaceLbaInSpare; // Start LBA of working space in spare block.\r
- UINTN FtwWorkSpaceBaseInSpare;// Offset into the FtwWorkSpaceLbaInSpare block.\r
- UINT8 *FtwWorkSpace; // Point to Work Space in memory buffer\r
+ UINTN Signature;\r
+ EFI_HANDLE Handle;\r
+ EFI_FAULT_TOLERANT_WRITE_PROTOCOL FtwInstance;\r
+ EFI_PHYSICAL_ADDRESS WorkSpaceAddress; // Base address of working space range in flash.\r
+ EFI_PHYSICAL_ADDRESS SpareAreaAddress; // Base address of spare range in flash.\r
+ UINTN WorkSpaceLength; // Size of working space range in flash.\r
+ UINTN NumberOfWorkSpaceBlock; // Number of the blocks in work block for work space.\r
+ UINTN WorkBlockSize; // Block size in bytes of the work blocks in flash\r
+ UINTN SpareAreaLength; // Size of spare range in flash.\r
+ UINTN NumberOfSpareBlock; // Number of the blocks in spare block.\r
+ UINTN SpareBlockSize; // Block size in bytes of the spare blocks in flash\r
+ EFI_FAULT_TOLERANT_WORKING_BLOCK_HEADER *FtwWorkSpaceHeader; // Pointer to Working Space Header in memory buffer\r
+ EFI_FAULT_TOLERANT_WRITE_HEADER *FtwLastWriteHeader; // Pointer to last record header in memory buffer\r
+ EFI_FAULT_TOLERANT_WRITE_RECORD *FtwLastWriteRecord; // Pointer to last record in memory buffer\r
+ EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *FtwFvBlock; // FVB of working block\r
+ EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *FtwBackupFvb; // FVB of spare block\r
+ EFI_LBA FtwSpareLba; // Start LBA of spare block\r
+ EFI_LBA FtwWorkBlockLba; // Start LBA of working block that contains working space in its last block.\r
+ UINTN NumberOfWorkBlock; // Number of the blocks in work block.\r
+ EFI_LBA FtwWorkSpaceLba; // Start LBA of working space\r
+ UINTN FtwWorkSpaceBase; // Offset into the FtwWorkSpaceLba block.\r
+ UINTN FtwWorkSpaceSize; // Size of working space range that stores write record.\r
+ EFI_LBA FtwWorkSpaceLbaInSpare; // Start LBA of working space in spare block.\r
+ UINTN FtwWorkSpaceBaseInSpare; // Offset into the FtwWorkSpaceLbaInSpare block.\r
+ UINT8 *FtwWorkSpace; // Point to Work Space in memory buffer\r
//\r
// Following a buffer of FtwWorkSpace[FTW_WORK_SPACE_SIZE],\r
// Allocated with EFI_FTW_DEVICE.\r
//\r
// Driver entry point\r
//\r
+\r
/**\r
This function is the entry point of the Fault Tolerant Write driver.\r
\r
EFI_STATUS\r
EFIAPI\r
InitializeFaultTolerantWrite (\r
- IN EFI_HANDLE ImageHandle,\r
- IN EFI_SYSTEM_TABLE *SystemTable\r
+ IN EFI_HANDLE ImageHandle,\r
+ IN EFI_SYSTEM_TABLE *SystemTable\r
);\r
\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
/**\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
/**\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
/**\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
/**\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
/**\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
/**\r
**/\r
EFI_STATUS\r
FtwEraseSpareBlock (\r
- IN EFI_FTW_DEVICE *FtwDevice\r
+ IN EFI_FTW_DEVICE *FtwDevice\r
);\r
\r
/**\r
**/\r
EFI_STATUS\r
FlushSpareBlockToWorkingBlock (\r
- EFI_FTW_DEVICE *FtwDevice\r
+ EFI_FTW_DEVICE *FtwDevice\r
);\r
\r
/**\r
**/\r
EFI_STATUS\r
FlushSpareBlockToBootBlock (\r
- EFI_FTW_DEVICE *FtwDevice\r
+ EFI_FTW_DEVICE *FtwDevice\r
);\r
\r
/**\r
**/\r
EFI_STATUS\r
FtwGetLastWriteRecord (\r
- IN EFI_FAULT_TOLERANT_WRITE_HEADER *FtwWriteHeader,\r
- OUT EFI_FAULT_TOLERANT_WRITE_RECORD **FtwWriteRecord\r
+ IN EFI_FAULT_TOLERANT_WRITE_HEADER *FtwWriteHeader,\r
+ OUT EFI_FAULT_TOLERANT_WRITE_RECORD **FtwWriteRecord\r
);\r
\r
/**\r
**/\r
BOOLEAN\r
IsFirstRecordOfWrites (\r
- IN EFI_FAULT_TOLERANT_WRITE_HEADER *FtwHeader,\r
- IN EFI_FAULT_TOLERANT_WRITE_RECORD *FtwRecord\r
+ IN EFI_FAULT_TOLERANT_WRITE_HEADER *FtwHeader,\r
+ IN EFI_FAULT_TOLERANT_WRITE_RECORD *FtwRecord\r
);\r
\r
/**\r
**/\r
BOOLEAN\r
IsLastRecordOfWrites (\r
- IN EFI_FAULT_TOLERANT_WRITE_HEADER *FtwHeader,\r
- IN EFI_FAULT_TOLERANT_WRITE_RECORD *FtwRecord\r
+ IN EFI_FAULT_TOLERANT_WRITE_HEADER *FtwHeader,\r
+ IN EFI_FAULT_TOLERANT_WRITE_RECORD *FtwRecord\r
);\r
\r
/**\r
**/\r
EFI_STATUS\r
GetPreviousRecordOfWrites (\r
- IN EFI_FAULT_TOLERANT_WRITE_HEADER *FtwHeader,\r
- IN OUT EFI_FAULT_TOLERANT_WRITE_RECORD **FtwRecord\r
+ IN EFI_FAULT_TOLERANT_WRITE_HEADER *FtwHeader,\r
+ IN OUT EFI_FAULT_TOLERANT_WRITE_RECORD **FtwRecord\r
);\r
\r
/**\r
**/\r
BOOLEAN\r
IsErasedFlashBuffer (\r
- IN UINT8 *Buffer,\r
- IN UINTN BufferSize\r
+ IN UINT8 *Buffer,\r
+ IN UINTN BufferSize\r
);\r
+\r
/**\r
Initialize a work space when there is no work space.\r
\r
**/\r
EFI_STATUS\r
InitWorkSpaceHeader (\r
- IN EFI_FAULT_TOLERANT_WORKING_BLOCK_HEADER *WorkingHeader\r
+ IN EFI_FAULT_TOLERANT_WORKING_BLOCK_HEADER *WorkingHeader\r
);\r
+\r
/**\r
Read from working block to refresh the work space in memory.\r
\r
WorkSpaceRefresh (\r
IN EFI_FTW_DEVICE *FtwDevice\r
);\r
+\r
/**\r
Check to see if it is a valid work space.\r
\r
**/\r
BOOLEAN\r
IsValidWorkSpace (\r
- IN EFI_FAULT_TOLERANT_WORKING_BLOCK_HEADER *WorkingHeader\r
+ IN EFI_FAULT_TOLERANT_WORKING_BLOCK_HEADER *WorkingHeader\r
);\r
+\r
/**\r
Reclaim the work space on the working block.\r
\r
**/\r
EFI_HANDLE\r
GetFvbByAddress (\r
- IN EFI_PHYSICAL_ADDRESS Address,\r
- OUT EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL **FvBlock\r
+ IN EFI_PHYSICAL_ADDRESS Address,\r
+ OUT EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL **FvBlock\r
);\r
\r
/**\r
**/\r
EFI_STATUS\r
FtwGetSarProtocol (\r
- OUT VOID **SarProtocol\r
+ OUT VOID **SarProtocol\r
);\r
\r
/**\r
**/\r
EFI_STATUS\r
GetFvbCountAndBuffer (\r
- OUT UINTN *NumberHandles,\r
- OUT EFI_HANDLE **Buffer\r
+ OUT UINTN *NumberHandles,\r
+ OUT EFI_HANDLE **Buffer\r
);\r
\r
-\r
/**\r
Allocate private data for FTW driver and initialize it.\r
\r
**/\r
EFI_STATUS\r
InitFtwDevice (\r
- OUT EFI_FTW_DEVICE **FtwData\r
+ OUT EFI_FTW_DEVICE **FtwData\r
);\r
\r
-\r
/**\r
Initialization for Fault Tolerant Write is done in this handler.\r
\r
**/\r
EFI_STATUS\r
InitFtwProtocol (\r
- IN OUT EFI_FTW_DEVICE *FtwDevice\r
+ IN OUT EFI_FTW_DEVICE *FtwDevice\r
);\r
\r
/**\r
**/\r
EFI_STATUS\r
ReadWorkSpaceData (\r
- IN EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *FvBlock,\r
- IN UINTN BlockSize,\r
- IN EFI_LBA Lba,\r
- IN UINTN Offset,\r
- IN UINTN Length,\r
- OUT UINT8 *Buffer\r
+ IN EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *FvBlock,\r
+ IN UINTN BlockSize,\r
+ IN EFI_LBA Lba,\r
+ IN UINTN Offset,\r
+ IN UINTN Length,\r
+ OUT UINT8 *Buffer\r
);\r
\r
/**\r
**/\r
EFI_STATUS\r
WriteWorkSpaceData (\r
- IN EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *FvBlock,\r
- IN UINTN BlockSize,\r
- IN EFI_LBA Lba,\r
- IN UINTN Offset,\r
- IN UINTN Length,\r
- IN UINT8 *Buffer\r
+ IN EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *FvBlock,\r
+ IN UINTN BlockSize,\r
+ IN EFI_LBA Lba,\r
+ IN UINTN Offset,\r
+ IN UINTN Length,\r
+ IN UINT8 *Buffer\r
);\r
\r
/**\r
**/\r
UINT32\r
FtwCalculateCrc32 (\r
- IN VOID *Buffer,\r
- IN UINTN Length\r
+ IN VOID *Buffer,\r
+ IN UINTN Length\r
);\r
\r
#endif\r