/** @file
  Block Translation Table (BTT) metadata layout definition.

  BTT is a layout and set of rules for doing block I/O that provide powerfail
  write atomicity of a single block.

Copyright (c) 2017, Intel Corporation. All rights reserved.<BR>
SPDX-License-Identifier: BSD-2-Clause-Patent

  @par Revision Reference:
  This metadata layout definition was introduced in UEFI Specification 2.7.

**/

#ifndef _BTT_H_
#define _BTT_H_

///
/// The BTT layout and behavior is described by the GUID as below.
///
#define EFI_BTT_ABSTRACTION_GUID \
  { \
    0x18633bfc, 0x1735, 0x4217, { 0x8a, 0xc9, 0x17, 0x23, 0x92, 0x82, 0xd3, 0xf8 } \
  }

//
// Alignment of all BTT structures
//
#define EFI_BTT_ALIGNMENT                4096

#define EFI_BTT_INFO_UNUSED_LEN          3968

#define EFI_BTT_INFO_BLOCK_SIG_LEN       16

///
/// Indicate inconsistent metadata or lost metadata due to unrecoverable media errors.
///
#define EFI_BTT_INFO_BLOCK_FLAGS_ERROR   0x00000001

#define EFI_BTT_INFO_BLOCK_MAJOR_VERSION 2
#define EFI_BTT_INFO_BLOCK_MINOR_VERSION 0

///
/// Block Translation Table (BTT) Info Block
///
typedef struct _EFI_BTT_INFO_BLOCK {
  ///
  /// Signature of the BTT Index Block data structure.
  /// Shall be "BTT_ARENA_INFO\0\0".
  ///
  CHAR8    Sig[EFI_BTT_INFO_BLOCK_SIG_LEN];

  ///
  /// UUID identifying this BTT instance.
  ///
  GUID Uuid;

  ///
  /// UUID of containing namespace.
  ///
  GUID ParentUuid;

  ///
  /// Attributes of this BTT Info Block.
  ///
  UINT32   Flags;

  ///
  /// Major version number. Currently at version 2.
  ///
  UINT16   Major;

  ///
  /// Minor version number. Currently at version 0.
  ///
  UINT16   Minor;

  ///
  /// Advertised LBA size in bytes. I/O requests shall be in this size chunk.
  ///
  UINT32   ExternalLbaSize;

  ///
  /// Advertised number of LBAs in this arena.
  ///
  UINT32   ExternalNLba;

  ///
  /// Internal LBA size shall be greater than or equal to ExternalLbaSize and shall not be smaller than 512 bytes.
  ///
  UINT32   InternalLbaSize;

  ///
  /// Number of internal blocks in the arena data area.
  ///
  UINT32   InternalNLba;

  ///
  /// Number of free blocks maintained for writes to this arena.
  ///
  UINT32   NFree;

  ///
  /// The size of this info block in bytes.
  ///
  UINT32   InfoSize;

  ///
  /// Offset of next arena, relative to the beginning of this arena.
  ///
  UINT64   NextOff;

  ///
  /// Offset of the data area for this arena, relative to the beginning of this arena.
  ///
  UINT64   DataOff;

  ///
  /// Offset of the map for this arena, relative to the beginning of this arena.
  ///
  UINT64   MapOff;

  ///
  /// Offset of the flog for this arena, relative to the beginning of this arena.
  ///
  UINT64   FlogOff;

  ///
  /// Offset of the backup copy of this arena's info block, relative to the beginning of this arena.
  ///
  UINT64   InfoOff;

  ///
  /// Shall be zero.
  ///
  CHAR8    Unused[EFI_BTT_INFO_UNUSED_LEN];

  ///
  /// 64-bit Fletcher64 checksum of all fields.
  ///
  UINT64   Checksum;
} EFI_BTT_INFO_BLOCK;

///
/// BTT Map entry maps an LBA that indexes into the arena, to its actual location.
///
typedef struct _EFI_BTT_MAP_ENTRY {
  ///
  /// Post-map LBA number (block number in this arena's data area)
  ///
  UINT32 PostMapLba : 30;

  ///
  /// When set and Zero is not set, reads on this block return an error.
  /// When set and Zero is set, indicate a map entry in its normal, non-error state.
  ///
  UINT32 Error : 1;

  ///
  /// When set and Error is not set, reads on this block return a full block of zeros.
  /// When set and Error is set, indicate a map entry in its normal, non-error state.
  ///
  UINT32 Zero : 1;
} EFI_BTT_MAP_ENTRY;

///
/// Alignment of each flog structure
///
#define EFI_BTT_FLOG_ENTRY_ALIGNMENT 64

///
/// The BTT Flog is both a free list and a log.
/// The Flog size is determined by the EFI_BTT_INFO_BLOCK.NFree which determines how many of these flog
/// entries there are.
/// The Flog location is the highest aligned address in the arena after space for the backup info block.
///
typedef struct _EFI_BTT_FLOG {
  ///
  /// Last pre-map LBA written using this flog entry.
  ///
  UINT32 Lba0;

  ///
  /// Old post-map LBA.
  ///
  UINT32 OldMap0;

  ///
  /// New post-map LBA.
  ///
  UINT32 NewMap0;

  ///
  /// The Seq0 field in each flog entry is used to determine which set of fields is newer between the two sets
  /// (Lba0, OldMap0, NewMpa0, Seq0 vs Lba1, Oldmap1, NewMap1, Seq1).
  ///
  UINT32 Seq0;

  ///
  /// Alternate lba entry.
  ///
  UINT32 Lba1;

  ///
  /// Alternate old entry.
  ///
  UINT32 OldMap1;

  ///
  /// Alternate new entry.
  ///
  UINT32 NewMap1;

  ///
  /// Alternate Seq entry.
  ///
  UINT32 Seq1;
} EFI_BTT_FLOG;

extern GUID gEfiBttAbstractionGuid;

#endif //_BTT_H_
