]> git.proxmox.com Git - mirror_edk2.git/blame - FatPkg/FatPei/FatLiteFmt.h
FatPkg: Refine casting expression result to bigger size
[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
JJ
5\r
6This program and the accompanying materials are licensed and made available\r
7under the terms and conditions of the BSD License which accompanies this\r
8distribution. The full text of the license may be found at\r
9http://opensource.org/licenses/bsd-license.php\r
10\r
11THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
12WITHOUT 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
47typedef 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
53typedef struct {\r
54 UINT16 DoubleSecond : 5;\r
55 UINT16 Minute : 6;\r
56 UINT16 Hour : 5;\r
57} FAT_TIME;\r
58\r
59typedef struct {\r
60 FAT_TIME Time;\r
61 FAT_DATE Date;\r
62} FAT_DATE_TIME;\r
63\r
64typedef 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
83typedef 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
109typedef 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