]> git.proxmox.com Git - mirror_edk2.git/blame - FatPkg/FatPei/FatLiteFmt.h
FatPkg: Replace BSD License with BSD+Patent License
[mirror_edk2.git] / FatPkg / FatPei / FatLiteFmt.h
CommitLineData
2f4dfa84
JJ
1/** @file\r
2 FAT format data structures\r
3\r
4c5ee6a6 4Copyright (c) 2006 - 2017, Intel Corporation. All rights reserved.<BR>\r
2f4dfa84 5\r
eb6cb4ce 6SPDX-License-Identifier: BSD-2-Clause-Patent\r
2f4dfa84
JJ
7\r
8**/\r
9\r
10#ifndef _FAT_FMT_H_\r
11#define _FAT_FMT_H_\r
12\r
13//\r
14// Definitions\r
15//\r
16#define FAT_ATTR_READ_ONLY 0x01\r
17#define FAT_ATTR_HIDDEN 0x02\r
18#define FAT_ATTR_SYSTEM 0x04\r
19#define FAT_ATTR_VOLUME_ID 0x08\r
20#define FAT_ATTR_DIRECTORY 0x10\r
21#define FAT_ATTR_ARCHIVE 0x20\r
22#define FAT_ATTR_LFN (FAT_ATTR_READ_ONLY | FAT_ATTR_HIDDEN | FAT_ATTR_SYSTEM | FAT_ATTR_VOLUME_ID)\r
23\r
4c5ee6a6 24#define FAT_CLUSTER_SPECIAL ((MAX_UINT32 &~0xF) | 0x7)\r
2f4dfa84
JJ
25#define FAT_CLUSTER_FREE 0\r
26#define FAT_CLUSTER_RESERVED (FAT_CLUSTER_SPECIAL)\r
27#define FAT_CLUSTER_BAD (FAT_CLUSTER_SPECIAL)\r
28#define FAT_CLUSTER_LAST (-1)\r
29\r
30#define DELETE_ENTRY_MARK 0xE5\r
31#define EMPTY_ENTRY_MARK 0x00\r
32\r
33#define FAT_CLUSTER_FUNCTIONAL(Cluster) (((Cluster) == 0) || ((Cluster) >= FAT_CLUSTER_SPECIAL))\r
34#define FAT_CLUSTER_END_OF_CHAIN(Cluster) ((Cluster) > (FAT_CLUSTER_SPECIAL))\r
35\r
36//\r
37// Directory Entry\r
38//\r
39#pragma pack(1)\r
40\r
41typedef struct {\r
42 UINT16 Day : 5;\r
43 UINT16 Month : 4;\r
44 UINT16 Year : 7; // From 1980\r
45} FAT_DATE;\r
46\r
47typedef struct {\r
48 UINT16 DoubleSecond : 5;\r
49 UINT16 Minute : 6;\r
50 UINT16 Hour : 5;\r
51} FAT_TIME;\r
52\r
53typedef struct {\r
54 FAT_TIME Time;\r
55 FAT_DATE Date;\r
56} FAT_DATE_TIME;\r
57\r
58typedef struct {\r
59 CHAR8 FileName[11]; // 8.3 filename\r
60 UINT8 Attributes;\r
61 UINT8 CaseFlag;\r
62 UINT8 CreateMillisecond; // (creation milliseconds - ignored)\r
63 FAT_DATE_TIME FileCreateTime;\r
64 FAT_DATE FileLastAccess;\r
65 UINT16 FileClusterHigh; // >= FAT32\r
66 FAT_DATE_TIME FileModificationTime;\r
67 UINT16 FileCluster;\r
68 UINT32 FileSize;\r
69} FAT_DIRECTORY_ENTRY;\r
70\r
71#pragma pack()\r
72//\r
73// Boot Sector\r
74//\r
75#pragma pack(1)\r
76\r
77typedef struct {\r
78\r
79 UINT8 Ia32Jump[3];\r
80 CHAR8 OemId[8];\r
81\r
82 UINT16 SectorSize;\r
83 UINT8 SectorsPerCluster;\r
84 UINT16 ReservedSectors;\r
85 UINT8 NoFats;\r
86 UINT16 RootEntries; // < FAT32, root dir is fixed size\r
87 UINT16 Sectors;\r
88 UINT8 Media; // (ignored)\r
89 UINT16 SectorsPerFat; // < FAT32\r
90 UINT16 SectorsPerTrack; // (ignored)\r
91 UINT16 Heads; // (ignored)\r
92 UINT32 HiddenSectors; // (ignored)\r
93 UINT32 LargeSectors; // => FAT32\r
94 UINT8 PhysicalDriveNumber; // (ignored)\r
95 UINT8 CurrentHead; // holds boot_sector_dirty bit\r
96 UINT8 Signature; // (ignored)\r
97 CHAR8 Id[4];\r
98 CHAR8 FatLabel[11];\r
99 CHAR8 SystemId[8];\r
100\r
101} PEI_FAT_BOOT_SECTOR;\r
102\r
103typedef struct {\r
104\r
105 UINT8 Ia32Jump[3];\r
106 CHAR8 OemId[8];\r
107\r
108 UINT16 SectorSize;\r
109 UINT8 SectorsPerCluster;\r
110 UINT16 ReservedSectors;\r
111 UINT8 NoFats;\r
112 UINT16 RootEntries; // < FAT32, root dir is fixed size\r
113 UINT16 Sectors;\r
114 UINT8 Media; // (ignored)\r
115 UINT16 SectorsPerFat; // < FAT32\r
116 UINT16 SectorsPerTrack; // (ignored)\r
117 UINT16 Heads; // (ignored)\r
118 UINT32 HiddenSectors; // (ignored)\r
119 UINT32 LargeSectors; // Used if Sectors==0\r
120 UINT32 LargeSectorsPerFat; // FAT32\r
121 UINT16 ExtendedFlags; // FAT32 (ignored)\r
122 UINT16 FsVersion; // FAT32 (ignored)\r
123 UINT32 RootDirFirstCluster; // FAT32\r
124 UINT16 FsInfoSector; // FAT32\r
125 UINT16 BackupBootSector; // FAT32\r
126 UINT8 Reserved[12]; // FAT32 (ignored)\r
127 UINT8 PhysicalDriveNumber; // (ignored)\r
128 UINT8 CurrentHead; // holds boot_sector_dirty bit\r
129 UINT8 Signature; // (ignored)\r
130 CHAR8 Id[4];\r
131 CHAR8 FatLabel[11];\r
132 CHAR8 SystemId[8];\r
133\r
134} PEI_FAT_BOOT_SECTOR_EX;\r
135\r
136#pragma pack()\r
137\r
138#endif\r