+//\r
+// EFI Fault tolerant block update write queue entry.\r
+//\r
+typedef struct {\r
+ UINT8 HeaderAllocated : 1;\r
+ UINT8 WritesAllocated : 1;\r
+ UINT8 Complete : 1;\r
+ UINT8 Reserved : 5;\r
+ EFI_GUID CallerId;\r
+ UINT64 NumberOfWrites;\r
+ UINT64 PrivateDataSize;\r
+} EFI_FAULT_TOLERANT_WRITE_HEADER;\r
+\r
+//\r
+// EFI Fault tolerant block update write queue record.\r
+//\r
+typedef struct {\r
+ UINT8 BootBlockUpdate : 1;\r
+ UINT8 SpareComplete : 1;\r
+ UINT8 DestinationComplete : 1;\r
+ UINT8 Reserved : 5;\r
+ EFI_LBA Lba;\r
+ UINT64 Offset;\r
+ UINT64 Length;\r
+ //\r
+ // Relative offset to spare block.\r
+ //\r
+ INT64 RelativeOffset;\r
+ //\r
+ // UINT8 PrivateData[PrivateDataSize]\r
+ //\r
+} EFI_FAULT_TOLERANT_WRITE_RECORD;\r
+\r
+#define FTW_RECORD_SIZE(PrivateDataSize) (sizeof (EFI_FAULT_TOLERANT_WRITE_RECORD) + (UINTN) PrivateDataSize)\r
+\r
+#define FTW_RECORD_TOTAL_SIZE(NumberOfWrites, PrivateDataSize) \\r
+ ((UINTN) (NumberOfWrites) * (sizeof (EFI_FAULT_TOLERANT_WRITE_RECORD) + (UINTN) PrivateDataSize))\r
+\r
+#define FTW_WRITE_TOTAL_SIZE(NumberOfWrites, PrivateDataSize) \\r
+ ( \\r
+ sizeof (EFI_FAULT_TOLERANT_WRITE_HEADER) + (UINTN) (NumberOfWrites) * \\r
+ (sizeof (EFI_FAULT_TOLERANT_WRITE_RECORD) + (UINTN) PrivateDataSize) \\r
+ )\r