]>
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 JJ |
5 | \r |
6 | This program and the accompanying materials are licensed and made available\r | |
7 | under the terms and conditions of the BSD License which accompanies this\r | |
8 | distribution. The full text of the license may be found at\r | |
9 | http://opensource.org/licenses/bsd-license.php\r | |
10 | \r | |
11 | THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r | |
12 | WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r | |
13 | \r | |
14 | **/\r | |
15 | \r | |
16 | #ifndef _FAT_FMT_H_\r | |
17 | #define _FAT_FMT_H_\r | |
18 | \r | |
19 | //\r | |
20 | // Definitions\r | |
21 | //\r | |
22 | #define FAT_ATTR_READ_ONLY 0x01\r | |
23 | #define FAT_ATTR_HIDDEN 0x02\r | |
24 | #define FAT_ATTR_SYSTEM 0x04\r | |
25 | #define FAT_ATTR_VOLUME_ID 0x08\r | |
26 | #define FAT_ATTR_DIRECTORY 0x10\r | |
27 | #define FAT_ATTR_ARCHIVE 0x20\r | |
28 | #define FAT_ATTR_LFN (FAT_ATTR_READ_ONLY | FAT_ATTR_HIDDEN | FAT_ATTR_SYSTEM | FAT_ATTR_VOLUME_ID)\r | |
29 | \r | |
4c5ee6a6 | 30 | #define FAT_CLUSTER_SPECIAL ((MAX_UINT32 &~0xF) | 0x7)\r |
2f4dfa84 JJ |
31 | #define FAT_CLUSTER_FREE 0\r |
32 | #define FAT_CLUSTER_RESERVED (FAT_CLUSTER_SPECIAL)\r | |
33 | #define FAT_CLUSTER_BAD (FAT_CLUSTER_SPECIAL)\r | |
34 | #define FAT_CLUSTER_LAST (-1)\r | |
35 | \r | |
36 | #define DELETE_ENTRY_MARK 0xE5\r | |
37 | #define EMPTY_ENTRY_MARK 0x00\r | |
38 | \r | |
39 | #define FAT_CLUSTER_FUNCTIONAL(Cluster) (((Cluster) == 0) || ((Cluster) >= FAT_CLUSTER_SPECIAL))\r | |
40 | #define FAT_CLUSTER_END_OF_CHAIN(Cluster) ((Cluster) > (FAT_CLUSTER_SPECIAL))\r | |
41 | \r | |
42 | //\r | |
43 | // Directory Entry\r | |
44 | //\r | |
45 | #pragma pack(1)\r | |
46 | \r | |
47 | typedef struct {\r | |
48 | UINT16 Day : 5;\r | |
49 | UINT16 Month : 4;\r | |
50 | UINT16 Year : 7; // From 1980\r | |
51 | } FAT_DATE;\r | |
52 | \r | |
53 | typedef struct {\r | |
54 | UINT16 DoubleSecond : 5;\r | |
55 | UINT16 Minute : 6;\r | |
56 | UINT16 Hour : 5;\r | |
57 | } FAT_TIME;\r | |
58 | \r | |
59 | typedef struct {\r | |
60 | FAT_TIME Time;\r | |
61 | FAT_DATE Date;\r | |
62 | } FAT_DATE_TIME;\r | |
63 | \r | |
64 | typedef struct {\r | |
65 | CHAR8 FileName[11]; // 8.3 filename\r | |
66 | UINT8 Attributes;\r | |
67 | UINT8 CaseFlag;\r | |
68 | UINT8 CreateMillisecond; // (creation milliseconds - ignored)\r | |
69 | FAT_DATE_TIME FileCreateTime;\r | |
70 | FAT_DATE FileLastAccess;\r | |
71 | UINT16 FileClusterHigh; // >= FAT32\r | |
72 | FAT_DATE_TIME FileModificationTime;\r | |
73 | UINT16 FileCluster;\r | |
74 | UINT32 FileSize;\r | |
75 | } FAT_DIRECTORY_ENTRY;\r | |
76 | \r | |
77 | #pragma pack()\r | |
78 | //\r | |
79 | // Boot Sector\r | |
80 | //\r | |
81 | #pragma pack(1)\r | |
82 | \r | |
83 | typedef struct {\r | |
84 | \r | |
85 | UINT8 Ia32Jump[3];\r | |
86 | CHAR8 OemId[8];\r | |
87 | \r | |
88 | UINT16 SectorSize;\r | |
89 | UINT8 SectorsPerCluster;\r | |
90 | UINT16 ReservedSectors;\r | |
91 | UINT8 NoFats;\r | |
92 | UINT16 RootEntries; // < FAT32, root dir is fixed size\r | |
93 | UINT16 Sectors;\r | |
94 | UINT8 Media; // (ignored)\r | |
95 | UINT16 SectorsPerFat; // < FAT32\r | |
96 | UINT16 SectorsPerTrack; // (ignored)\r | |
97 | UINT16 Heads; // (ignored)\r | |
98 | UINT32 HiddenSectors; // (ignored)\r | |
99 | UINT32 LargeSectors; // => FAT32\r | |
100 | UINT8 PhysicalDriveNumber; // (ignored)\r | |
101 | UINT8 CurrentHead; // holds boot_sector_dirty bit\r | |
102 | UINT8 Signature; // (ignored)\r | |
103 | CHAR8 Id[4];\r | |
104 | CHAR8 FatLabel[11];\r | |
105 | CHAR8 SystemId[8];\r | |
106 | \r | |
107 | } PEI_FAT_BOOT_SECTOR;\r | |
108 | \r | |
109 | typedef struct {\r | |
110 | \r | |
111 | UINT8 Ia32Jump[3];\r | |
112 | CHAR8 OemId[8];\r | |
113 | \r | |
114 | UINT16 SectorSize;\r | |
115 | UINT8 SectorsPerCluster;\r | |
116 | UINT16 ReservedSectors;\r | |
117 | UINT8 NoFats;\r | |
118 | UINT16 RootEntries; // < FAT32, root dir is fixed size\r | |
119 | UINT16 Sectors;\r | |
120 | UINT8 Media; // (ignored)\r | |
121 | UINT16 SectorsPerFat; // < FAT32\r | |
122 | UINT16 SectorsPerTrack; // (ignored)\r | |
123 | UINT16 Heads; // (ignored)\r | |
124 | UINT32 HiddenSectors; // (ignored)\r | |
125 | UINT32 LargeSectors; // Used if Sectors==0\r | |
126 | UINT32 LargeSectorsPerFat; // FAT32\r | |
127 | UINT16 ExtendedFlags; // FAT32 (ignored)\r | |
128 | UINT16 FsVersion; // FAT32 (ignored)\r | |
129 | UINT32 RootDirFirstCluster; // FAT32\r | |
130 | UINT16 FsInfoSector; // FAT32\r | |
131 | UINT16 BackupBootSector; // FAT32\r | |
132 | UINT8 Reserved[12]; // FAT32 (ignored)\r | |
133 | UINT8 PhysicalDriveNumber; // (ignored)\r | |
134 | UINT8 CurrentHead; // holds boot_sector_dirty bit\r | |
135 | UINT8 Signature; // (ignored)\r | |
136 | CHAR8 Id[4];\r | |
137 | CHAR8 FatLabel[11];\r | |
138 | CHAR8 SystemId[8];\r | |
139 | \r | |
140 | } PEI_FAT_BOOT_SECTOR_EX;\r | |
141 | \r | |
142 | #pragma pack()\r | |
143 | \r | |
144 | #endif\r |