-/** @file \r
- This file defines NvDataFv GUID and FTW working block structure header.\r
- This guid can be used as FileSystemGuid in EFI_FIRMWARE_VOLUME_HEADER if \r
+/** @file\r
+ This file defines NvDataFv GUID and FTW working block structures.\r
+ The NvDataFv GUID can be used as FileSystemGuid in EFI_FIRMWARE_VOLUME_HEADER if\r
this FV image contains NV data, such as NV variable data.\r
- This guid can also be used as the signature of FTW working block header.\r
+ This file also defines WorkingBlockSignature GUID for FTW working block signature.\r
\r
-Copyright (c) 2006 - 2010, Intel Corporation. All rights reserved<BR>\r
-This program and the accompanying materials are licensed and made available under \r
-the terms and conditions of the BSD License that accompanies this distribution. \r
+Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR>\r
+This program and the accompanying materials are licensed and made available under\r
+the terms and conditions of the BSD License that accompanies this distribution.\r
The full text of the license may be found at\r
-http://opensource.org/licenses/bsd-license.php. \r
+http://opensource.org/licenses/bsd-license.php.\r
\r
-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, \r
-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. \r
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
\r
**/\r
\r
#define EFI_SYSTEM_NV_DATA_FV_GUID \\r
{0xfff12b8d, 0x7696, 0x4c8b, {0xa9, 0x85, 0x27, 0x47, 0x7, 0x5b, 0x4f, 0x50} }\r
\r
-///\r
-/// An NvDataFv GUID used as the signature of FTW working block header.\r
-///\r
+#define EDKII_WORKING_BLOCK_SIGNATURE_GUID \\r
+ {0x9e58292b, 0x7c68, 0x497d, {0xa0, 0xce, 0x65, 0x0, 0xfd, 0x9f, 0x1b, 0x95} }\r
+\r
extern EFI_GUID gEfiSystemNvDataFvGuid;\r
+extern EFI_GUID gEdkiiWorkingBlockSignatureGuid;\r
\r
#define WORKING_BLOCK_VALID 0x1\r
#define WORKING_BLOCK_INVALID 0x2\r
///\r
typedef struct {\r
///\r
- /// System Non Volatile FV Guid.\r
+ /// FTW working block signature.\r
+ /// Its value has be updated from gEfiSystemNvDataFvGuid to gEdkiiWorkingBlockSignatureGuid,\r
+ /// because its write queue data format has been updated to support the crossing archs.\r
///\r
EFI_GUID Signature;\r
///\r
- /// 32bit CRC caculated for this header.\r
+ /// 32bit CRC calculated for this header.\r
///\r
UINT32 Crc;\r
///\r
UINT64 WriteQueueSize;\r
///\r
/// Write Queue data.\r
- /// \r
- UINT8 WriteQueue[WriteQueueSize];\r
+ ///\r
+ /// EFI_FAULT_TOLERANT_WRITE_HEADER FtwHeader;\r
+ /// EFI_FAULT_TOLERANT_WRITE_RECORD FtwRecord[FtwHeader.NumberOfWrites]\r
+ /// EFI_FAULT_TOLERANT_WRITE_HEADER FtwHeader2;\r
+ /// EFI_FAULT_TOLERANT_WRITE_RECORD FtwRecord2[FtwHeader2.NumberOfWrites]\r
+ /// ...\r
///\r
} EFI_FAULT_TOLERANT_WORKING_BLOCK_HEADER;\r
\r
+#define FTW_VALID_STATE 0\r
+#define FTW_INVALID_STATE 1\r
+\r
+//\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
+\r
#endif\r