]>
Commit | Line | Data |
---|---|---|
2f4dfa84 JJ |
1 | /** @file\r |
2 | FAT format data structures\r | |
3 | \r | |
4c5ee6a6 | 4 | Copyright (c) 2006 - 2017, Intel Corporation. All rights reserved.<BR>\r |
2f4dfa84 | 5 | \r |
eb6cb4ce | 6 | SPDX-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 | |
41 | typedef 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 | |
47 | typedef struct {\r | |
48 | UINT16 DoubleSecond : 5;\r | |
49 | UINT16 Minute : 6;\r | |
50 | UINT16 Hour : 5;\r | |
51 | } FAT_TIME;\r | |
52 | \r | |
53 | typedef struct {\r | |
54 | FAT_TIME Time;\r | |
55 | FAT_DATE Date;\r | |
56 | } FAT_DATE_TIME;\r | |
57 | \r | |
58 | typedef 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 | |
77 | typedef 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 | |
103 | typedef 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 |