123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138 |
- /** @file
- FAT format data structures
- Copyright (c) 2006 - 2017, Intel Corporation. All rights reserved.<BR>
- SPDX-License-Identifier: BSD-2-Clause-Patent
- **/
- #ifndef _FAT_FMT_H_
- #define _FAT_FMT_H_
- //
- // Definitions
- //
- #define FAT_ATTR_READ_ONLY 0x01
- #define FAT_ATTR_HIDDEN 0x02
- #define FAT_ATTR_SYSTEM 0x04
- #define FAT_ATTR_VOLUME_ID 0x08
- #define FAT_ATTR_DIRECTORY 0x10
- #define FAT_ATTR_ARCHIVE 0x20
- #define FAT_ATTR_LFN (FAT_ATTR_READ_ONLY | FAT_ATTR_HIDDEN | FAT_ATTR_SYSTEM | FAT_ATTR_VOLUME_ID)
- #define FAT_CLUSTER_SPECIAL ((MAX_UINT32 &~0xF) | 0x7)
- #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 DELETE_ENTRY_MARK 0xE5
- #define EMPTY_ENTRY_MARK 0x00
- #define FAT_CLUSTER_FUNCTIONAL(Cluster) (((Cluster) == 0) || ((Cluster) >= FAT_CLUSTER_SPECIAL))
- #define FAT_CLUSTER_END_OF_CHAIN(Cluster) ((Cluster) > (FAT_CLUSTER_SPECIAL))
- //
- // Directory Entry
- //
- #pragma pack(1)
- 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;
- #pragma pack()
- //
- // Boot Sector
- //
- #pragma pack(1)
- typedef struct {
- UINT8 Ia32Jump[3];
- CHAR8 OemId[8];
- UINT16 SectorSize;
- UINT8 SectorsPerCluster;
- UINT16 ReservedSectors;
- UINT8 NoFats;
- UINT16 RootEntries; // < FAT32, root dir is fixed size
- UINT16 Sectors;
- UINT8 Media; // (ignored)
- UINT16 SectorsPerFat; // < FAT32
- UINT16 SectorsPerTrack; // (ignored)
- UINT16 Heads; // (ignored)
- UINT32 HiddenSectors; // (ignored)
- UINT32 LargeSectors; // => FAT32
- UINT8 PhysicalDriveNumber; // (ignored)
- UINT8 CurrentHead; // holds boot_sector_dirty bit
- UINT8 Signature; // (ignored)
- CHAR8 Id[4];
- CHAR8 FatLabel[11];
- CHAR8 SystemId[8];
- } PEI_FAT_BOOT_SECTOR;
- typedef struct {
- UINT8 Ia32Jump[3];
- CHAR8 OemId[8];
- UINT16 SectorSize;
- UINT8 SectorsPerCluster;
- UINT16 ReservedSectors;
- UINT8 NoFats;
- UINT16 RootEntries; // < FAT32, root dir is fixed size
- UINT16 Sectors;
- UINT8 Media; // (ignored)
- UINT16 SectorsPerFat; // < FAT32
- UINT16 SectorsPerTrack; // (ignored)
- UINT16 Heads; // (ignored)
- UINT32 HiddenSectors; // (ignored)
- UINT32 LargeSectors; // Used if Sectors==0
- 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];
- } PEI_FAT_BOOT_SECTOR_EX;
- #pragma pack()
- #endif
|