/** @file
  Definitions for on-disk FAT structures.

Copyright (c) 2005 - 2017, Intel Corporation. All rights reserved.<BR>
SPDX-License-Identifier: BSD-2-Clause-Patent


**/

#pragma once

#pragma pack(1)
//
// FAT info signature
//
#define FAT_INFO_SIGNATURE        0x41615252
#define FAT_INFO_BEGIN_SIGNATURE  0x61417272
#define FAT_INFO_END_SIGNATURE    0xAA550000
//
// FAT entry values
//
#define FAT_CLUSTER_SPECIAL_EXT  (MAX_UINTN & (~0xF))
#define FAT_CLUSTER_SPECIAL      ((FAT_CLUSTER_SPECIAL_EXT) | 0x07)
#define FAT_CLUSTER_FREE         0
#define FAT_CLUSTER_RESERVED     (FAT_CLUSTER_SPECIAL)
#define FAT_CLUSTER_BAD          (FAT_CLUSTER_SPECIAL)
#define FAT_CLUSTER_LAST         (-1)
#define FAT_END_OF_FAT_CHAIN(Cluster)  ((Cluster) > (FAT_CLUSTER_SPECIAL))
#define FAT_MIN_CLUSTER            2
#define FAT_MAX_FAT12_CLUSTER      0xFF5
#define FAT_MAX_FAT16_CLUSTER      0xFFF5
#define FAT_CLUSTER_SPECIAL_FAT12  0xFF7
#define FAT_CLUSTER_SPECIAL_FAT16  0xFFF7
#define FAT_CLUSTER_SPECIAL_FAT32  0x0FFFFFF7
#define FAT_CLUSTER_MASK_FAT12     0xFFF
#define FAT_CLUSTER_UNMASK_FAT12   0xF000
#define FAT_CLUSTER_MASK_FAT32     0x0FFFFFFF
#define FAT_CLUSTER_UNMASK_FAT32   0xF0000000
#define FAT_POS_FAT12(a)          ((a) * 3 / 2)
#define FAT_POS_FAT16(a)          ((a) * 2)
#define FAT_POS_FAT32(a)          ((a) * 4)
#define FAT_ODD_CLUSTER_FAT12(a)  (((a) & 1) != 0)

//
// FAT attribute define
//
#define FAT_ATTRIBUTE_READ_ONLY  0x01
#define FAT_ATTRIBUTE_HIDDEN     0x02
#define FAT_ATTRIBUTE_SYSTEM     0x04
#define FAT_ATTRIBUTE_VOLUME_ID  0x08
#define FAT_ATTRIBUTE_DIRECTORY  0x10
#define FAT_ATTRIBUTE_ARCHIVE    0x20
#define FAT_ATTRIBUTE_DEVICE     0x40
#define FAT_ATTRIBUTE_LFN        0x0F
//
// Some Long File Name definitions
//
#define FAT_LFN_LAST     0x40         // Ordinal field
#define MAX_LFN_ENTRIES  20
#define LFN_CHAR1_LEN    5
#define LFN_CHAR2_LEN    6
#define LFN_CHAR3_LEN    2
#define LFN_CHAR_TOTAL   (LFN_CHAR1_LEN + LFN_CHAR2_LEN + LFN_CHAR3_LEN)
#define LFN_ENTRY_NUMBER(a)  (((a) + LFN_CHAR_TOTAL - 1) / LFN_CHAR_TOTAL)
//
// Some 8.3 File Name definitions
//
#define FAT_MAIN_NAME_LEN    8
#define FAT_EXTEND_NAME_LEN  3
#define FAT_NAME_LEN         (FAT_MAIN_NAME_LEN + FAT_EXTEND_NAME_LEN)
//
// Some directory entry information
//
#define FAT_ENTRY_INFO_OFFSET  13
#define DELETE_ENTRY_MARK      0xE5
#define EMPTY_ENTRY_MARK       0x00

//
// Volume dirty Mask
//
#define FAT16_DIRTY_MASK  0x7fff
#define FAT32_DIRTY_MASK  0xf7ffffff
//
// internal flag
//
#define FAT_CASE_MIXED       0x01
#define FAT_CASE_NAME_LOWER  0x08
#define FAT_CASE_EXT_LOWER   0x10

typedef struct {
  UINT8     Ia32Jump[3];
  CHAR8     OemId[8];
  UINT16    SectorSize;
  UINT8     SectorsPerCluster;
  UINT16    ReservedSectors;
  UINT8     NumFats;
  UINT16    RootEntries;        // < FAT32, root dir is fixed size
  UINT16    Sectors;
  UINT8     Media;
  UINT16    SectorsPerFat;      // < FAT32
  UINT16    SectorsPerTrack;    // (ignored)
  UINT16    Heads;              // (ignored)
  UINT32    HiddenSectors;      // (ignored)
  UINT32    LargeSectors;       // Used if Sectors==0
} FAT_BOOT_SECTOR_BASIC;

typedef struct {
  UINT8    PhysicalDriveNumber; // (ignored)
  UINT8    CurrentHead;         // holds boot_sector_dirty bit
  UINT8    Signature;           // (ignored)
  CHAR8    Id[4];
  CHAR8    FatLabel[11];
  CHAR8    SystemId[8];
} FAT_BOOT_SECTOR_EXT;

typedef struct {
  UINT32    LargeSectorsPerFat;  // FAT32
  UINT16    ExtendedFlags;       // FAT32 (ignored)
  UINT16    FsVersion;           // FAT32 (ignored)
  UINT32    RootDirFirstCluster; // FAT32
  UINT16    FsInfoSector;        // FAT32
  UINT16    BackupBootSector;    // FAT32
  UINT8     Reserved[12];        // FAT32 (ignored)
  UINT8     PhysicalDriveNumber; // (ignored)
  UINT8     CurrentHead;         // holds boot_sector_dirty bit
  UINT8     Signature;           // (ignored)
  CHAR8     Id[4];
  CHAR8     FatLabel[11];
  CHAR8     SystemId[8];
} FAT32_BOOT_SECTOR_EXT;

typedef union {
  FAT_BOOT_SECTOR_EXT      FatBse;
  FAT32_BOOT_SECTOR_EXT    Fat32Bse;
} FAT_BSE;

typedef struct {
  FAT_BOOT_SECTOR_BASIC    FatBsb;
  FAT_BSE                  FatBse;
} FAT_BOOT_SECTOR;

//
// FAT Info Structure
//
typedef struct {
  UINT32    ClusterCount;
  UINT32    NextCluster;
} FAT_FREE_INFO;

typedef struct {
  UINT32           Signature;
  UINT8            ExtraBootCode[480];
  UINT32           InfoBeginSignature;
  FAT_FREE_INFO    FreeInfo;
  UINT8            Reserved[12];
  UINT32           InfoEndSignature;
} FAT_INFO_SECTOR;

//
// Directory Entry
//
#define FAT_MAX_YEAR_FROM_1980  0x7f
typedef struct {
  UINT16    Day   : 5;
  UINT16    Month : 4;
  UINT16    Year  : 7;              // From 1980
} FAT_DATE;

typedef struct {
  UINT16    DoubleSecond : 5;
  UINT16    Minute       : 6;
  UINT16    Hour         : 5;
} FAT_TIME;

typedef struct {
  FAT_TIME    Time;
  FAT_DATE    Date;
} FAT_DATE_TIME;

typedef struct {
  CHAR8            FileName[11];    // 8.3 filename
  UINT8            Attributes;
  UINT8            CaseFlag;
  UINT8            CreateMillisecond; // (creation milliseconds - ignored)
  FAT_DATE_TIME    FileCreateTime;
  FAT_DATE         FileLastAccess;
  UINT16           FileClusterHigh; // >= FAT32
  FAT_DATE_TIME    FileModificationTime;
  UINT16           FileCluster;
  UINT32           FileSize;
} FAT_DIRECTORY_ENTRY;

typedef struct {
  UINT8     Ordinal;
  CHAR8     Name1[10];              // (Really 5 chars, but not WCHAR aligned)
  UINT8     Attributes;
  UINT8     Type;
  UINT8     Checksum;
  CHAR16    Name2[6];
  UINT16    MustBeZero;
  CHAR16    Name3[2];
} FAT_DIRECTORY_LFN;

#pragma pack()
