2 This file defines NvDataFv GUID and FTW working block structures.
3 The NvDataFv GUID can be used as FileSystemGuid in EFI_FIRMWARE_VOLUME_HEADER if
4 this FV image contains NV data, such as NV variable data.
5 This file also defines WorkingBlockSignature GUID for FTW working block signature.
7 Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR>
8 This program and the accompanying materials are licensed and made available under
9 the terms and conditions of the BSD License that accompanies this distribution.
10 The full text of the license may be found at
11 http://opensource.org/licenses/bsd-license.php.
13 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
14 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
18 #ifndef __SYSTEM_NV_DATA_GUID_H__
19 #define __SYSTEM_NV_DATA_GUID_H__
21 #define EFI_SYSTEM_NV_DATA_FV_GUID \
22 {0xfff12b8d, 0x7696, 0x4c8b, {0xa9, 0x85, 0x27, 0x47, 0x7, 0x5b, 0x4f, 0x50} }
24 #define EDKII_WORKING_BLOCK_SIGNATURE_GUID \
25 {0x9e58292b, 0x7c68, 0x497d, {0xa0, 0xce, 0x65, 0x0, 0xfd, 0x9f, 0x1b, 0x95} }
27 extern EFI_GUID gEfiSystemNvDataFvGuid
;
28 extern EFI_GUID gEdkiiWorkingBlockSignatureGuid
;
30 #define WORKING_BLOCK_VALID 0x1
31 #define WORKING_BLOCK_INVALID 0x2
34 /// The EDKII Fault tolerant working block header.
35 /// The header is immediately followed by the write queue data.
39 /// FTW working block signature.
40 /// Its value has be updated from gEfiSystemNvDataFvGuid to gEdkiiWorkingBlockSignatureGuid,
41 /// because its write queue data format has been updated to support the crossing archs.
45 /// 32bit CRC calculated for this header.
49 /// Working block valid bit.
51 UINT8 WorkingBlockValid
: 1;
52 UINT8 WorkingBlockInvalid
: 1;
56 /// Total size of the following write queue range.
58 UINT64 WriteQueueSize
;
62 /// EFI_FAULT_TOLERANT_WRITE_HEADER FtwHeader;
63 /// EFI_FAULT_TOLERANT_WRITE_RECORD FtwRecord[FtwHeader.NumberOfWrites]
64 /// EFI_FAULT_TOLERANT_WRITE_HEADER FtwHeader2;
65 /// EFI_FAULT_TOLERANT_WRITE_RECORD FtwRecord2[FtwHeader2.NumberOfWrites]
68 } EFI_FAULT_TOLERANT_WORKING_BLOCK_HEADER
;
70 #define FTW_VALID_STATE 0
71 #define FTW_INVALID_STATE 1
74 // EFI Fault tolerant block update write queue entry.
77 UINT8 HeaderAllocated
: 1;
78 UINT8 WritesAllocated
: 1;
82 UINT64 NumberOfWrites
;
83 UINT64 PrivateDataSize
;
84 } EFI_FAULT_TOLERANT_WRITE_HEADER
;
87 // EFI Fault tolerant block update write queue record.
90 UINT8 BootBlockUpdate
: 1;
91 UINT8 SpareComplete
: 1;
92 UINT8 DestinationComplete
: 1;
98 // Relative offset to spare block.
100 INT64 RelativeOffset
;
102 // UINT8 PrivateData[PrivateDataSize]
104 } EFI_FAULT_TOLERANT_WRITE_RECORD
;
106 #define FTW_RECORD_SIZE(PrivateDataSize) (sizeof (EFI_FAULT_TOLERANT_WRITE_RECORD) + (UINTN) PrivateDataSize)
108 #define FTW_RECORD_TOTAL_SIZE(NumberOfWrites, PrivateDataSize) \
109 ((UINTN) (NumberOfWrites) * (sizeof (EFI_FAULT_TOLERANT_WRITE_RECORD) + (UINTN) PrivateDataSize))
111 #define FTW_WRITE_TOTAL_SIZE(NumberOfWrites, PrivateDataSize) \
113 sizeof (EFI_FAULT_TOLERANT_WRITE_HEADER) + (UINTN) (NumberOfWrites) * \
114 (sizeof (EFI_FAULT_TOLERANT_WRITE_RECORD) + (UINTN) PrivateDataSize) \