https://bugzilla.tianocore.org/show_bug.cgi?id=1373 Replace BSD 2-Clause License with BSD+Patent License. This change is based on the following emails: https://lists.01.org/pipermail/edk2-devel/2019-February/036260.html https://lists.01.org/pipermail/edk2-devel/2018-October/030385.html RFCs with detailed process for the license change: V3: https://lists.01.org/pipermail/edk2-devel/2019-March/038116.html V2: https://lists.01.org/pipermail/edk2-devel/2019-March/037669.html V1: https://lists.01.org/pipermail/edk2-devel/2019-March/037500.html Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Michael D Kinney <michael.d.kinney@intel.com> Reviewed-by: Ray Ni <ray.ni@intel.com>
		
			
				
	
	
		
			209 lines
		
	
	
		
			5.8 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			209 lines
		
	
	
		
			5.8 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /** @file
 | |
|   Definitions for on-disk FAT structures.
 | |
| 
 | |
| Copyright (c) 2005 - 2017, Intel Corporation. All rights reserved.<BR>
 | |
| SPDX-License-Identifier: BSD-2-Clause-Patent
 | |
| 
 | |
| 
 | |
| **/
 | |
| 
 | |
| #ifndef _FATFILESYSTEM_H_
 | |
| #define _FATFILESYSTEM_H_
 | |
| 
 | |
| #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()
 | |
| 
 | |
| #endif
 |