/** @file
  This file defines NvDataFv GUID and FTW working block structures.
  The NvDataFv GUID can be used as FileSystemGuid in EFI_FIRMWARE_VOLUME_HEADER if
  this FV image contains NV data, such as NV variable data.
  This file also defines WorkingBlockSignature GUID for FTW working block signature.

Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR>
SPDX-License-Identifier: BSD-2-Clause-Patent

**/

#ifndef __SYSTEM_NV_DATA_GUID_H__
#define __SYSTEM_NV_DATA_GUID_H__

#define EFI_SYSTEM_NV_DATA_FV_GUID \
  {0xfff12b8d, 0x7696, 0x4c8b, {0xa9, 0x85, 0x27, 0x47, 0x7, 0x5b, 0x4f, 0x50} }

#define EDKII_WORKING_BLOCK_SIGNATURE_GUID \
  {0x9e58292b, 0x7c68, 0x497d, {0xa0, 0xce, 0x65,  0x0, 0xfd, 0x9f, 0x1b, 0x95} }

extern EFI_GUID  gEfiSystemNvDataFvGuid;
extern EFI_GUID  gEdkiiWorkingBlockSignatureGuid;

#define WORKING_BLOCK_VALID    0x1
#define WORKING_BLOCK_INVALID  0x2

///
/// The EDKII Fault tolerant working block header.
/// The header is immediately followed by the write queue data.
///
typedef struct {
  ///
  /// FTW working block signature.
  /// Its value has be updated from gEfiSystemNvDataFvGuid to gEdkiiWorkingBlockSignatureGuid,
  /// because its write queue data format has been updated to support the crossing archs.
  ///
  EFI_GUID    Signature;
  ///
  /// 32bit CRC calculated for this header.
  ///
  UINT32      Crc;
  ///
  /// Working block valid bit.
  ///
  UINT8       WorkingBlockValid   : 1;
  UINT8       WorkingBlockInvalid : 1;
  UINT8       Reserved            : 6;
  UINT8       Reserved3[3];
  ///
  /// Total size of the following write queue range.
  ///
  UINT64      WriteQueueSize;
  ///
  /// Write Queue data.
  ///
  /// EFI_FAULT_TOLERANT_WRITE_HEADER FtwHeader;
  /// EFI_FAULT_TOLERANT_WRITE_RECORD FtwRecord[FtwHeader.NumberOfWrites]
  /// EFI_FAULT_TOLERANT_WRITE_HEADER FtwHeader2;
  /// EFI_FAULT_TOLERANT_WRITE_RECORD FtwRecord2[FtwHeader2.NumberOfWrites]
  /// ...
  ///
} EFI_FAULT_TOLERANT_WORKING_BLOCK_HEADER;

#define FTW_VALID_STATE    0
#define FTW_INVALID_STATE  1

//
// EFI Fault tolerant block update write queue entry.
//
typedef struct {
  UINT8       HeaderAllocated : 1;
  UINT8       WritesAllocated : 1;
  UINT8       Complete        : 1;
  UINT8       Reserved        : 5;
  EFI_GUID    CallerId;
  UINT64      NumberOfWrites;
  UINT64      PrivateDataSize;
} EFI_FAULT_TOLERANT_WRITE_HEADER;

//
// EFI Fault tolerant block update write queue record.
//
typedef struct {
  UINT8      BootBlockUpdate     : 1;
  UINT8      SpareComplete       : 1;
  UINT8      DestinationComplete : 1;
  UINT8      Reserved            : 5;
  EFI_LBA    Lba;
  UINT64     Offset;
  UINT64     Length;
  //
  // Relative offset to spare block.
  //
  INT64      RelativeOffset;
  //
  // UINT8    PrivateData[PrivateDataSize]
  //
} EFI_FAULT_TOLERANT_WRITE_RECORD;

#define FTW_RECORD_SIZE(PrivateDataSize)  (sizeof (EFI_FAULT_TOLERANT_WRITE_RECORD) + (UINTN) PrivateDataSize)

#define FTW_RECORD_TOTAL_SIZE(NumberOfWrites, PrivateDataSize) \
    ((UINTN) (NumberOfWrites) * (sizeof (EFI_FAULT_TOLERANT_WRITE_RECORD) + (UINTN) PrivateDataSize))

#define FTW_WRITE_TOTAL_SIZE(NumberOfWrites, PrivateDataSize) \
    ( \
      sizeof (EFI_FAULT_TOLERANT_WRITE_HEADER) + (UINTN) (NumberOfWrites) * \
      (sizeof (EFI_FAULT_TOLERANT_WRITE_RECORD) + (UINTN) PrivateDataSize) \
    )

#endif
