Git conversion: Make reactos the root directory, move rosapps, rostests, wallpapers...
[reactos.git] / drivers / filesystems / ext2 / inc / common.h
1 #ifndef _EXT2_COMMON_INCLUDE_
2 #define _EXT2_COMMON_INCLUDE_
3
4 /* global ioctl */
5 #define IOCTL_APP_VOLUME_PROPERTY \
6 CTL_CODE(FILE_DEVICE_UNKNOWN, 2000, METHOD_BUFFERED, FILE_ANY_ACCESS)
7
8 #define IOCTL_APP_QUERY_PERFSTAT \
9 CTL_CODE(FILE_DEVICE_UNKNOWN, 2001, METHOD_BUFFERED, FILE_ANY_ACCESS)
10
11 #define IOCTL_APP_MOUNT_POINT \
12 CTL_CODE(FILE_DEVICE_UNKNOWN, 2002, METHOD_BUFFERED, FILE_ANY_ACCESS)
13
14
15 /* performance / memory allocaiton statistics */
16 #define PS_IRP_CONTEXT 0x00
17 #define PS_VCB 0x01
18 #define PS_FCB 0x02
19 #define PS_CCB 0x03
20 #define PS_MCB 0x04
21 #define PS_EXTENT 0x05
22 #define PS_RW_CONTEXT 0x06
23 #define PS_VPB 0x07
24 #define PS_FILE_NAME 0x08
25 #define PS_MCB_NAME 0x09
26 #define PS_INODE_NAME 0x0A
27 #define PS_DIR_ENTRY 0x0B
28 #define PS_DIR_PATTERN 0x0C
29 #define PS_DISK_EVENT 0x0D
30 #define PS_DISK_BUFFER 0x0E
31 #define PS_BLOCK_DATA 0x0F
32
33 #define PS_EXT2_INODE 0x10
34 #define PS_DENTRY 0x11
35 #define PS_BUFF_HEAD 0x12
36
37 #define PS_MAX_TYPE_V1 (0x10)
38 #define PS_MAX_TYPE_V2 (0x30)
39
40 typedef union {
41
42 ULONG Slot[PS_MAX_TYPE_V1];
43
44 struct {
45 ULONG IrpContext;
46 ULONG Vcb;
47 ULONG Fcb;
48 ULONG Ccb;
49 ULONG Mcb;
50 ULONG Extent;
51 ULONG RwContext; /* rw context */
52 ULONG Vpb;
53 ULONG FileName;
54 ULONG McbName;
55 ULONG InodeName;
56 ULONG DirEntry; /* pDir */
57 ULONG DirPattern; /* Ccb-> in Ext2QeuryDir */
58 ULONG ReadDiskEvent;
59 ULONG ReadDiskBuffer;
60 ULONG BlockData; /* Ext2Expand&TruncateFile*/
61 };
62
63 } EXT2_STAT_ARRAY_V1;
64
65 typedef union {
66
67 ULONG Slot[PS_MAX_TYPE_V2];
68
69 struct {
70 ULONG IrpContext;
71 ULONG Vcb;
72 ULONG Fcb;
73 ULONG Ccb;
74 ULONG Mcb;
75 ULONG Extent;
76 ULONG RwContext; /* rw context */
77 ULONG Vpb;
78 ULONG FileName;
79 ULONG McbName;
80 ULONG InodeName;
81 ULONG DirEntry; /* pDir */
82 ULONG DirPattern; /* Ccb-> in Ext2QeuryDir */
83 ULONG ReadDiskEvent;
84 ULONG ReadDiskBuffer;
85 ULONG BlockData; /* Ext2Expand&TruncateFile*/
86 ULONG Inodes; /* inodes */
87 ULONG NameEntries; /* name dentry */
88 ULONG BufferHead; /* Buffer Header allocations */
89 };
90
91 } EXT2_STAT_ARRAY_V2;
92
93 typedef struct _EXT2_PERF_STATISTICS_V1 {
94
95 /* totoal number of processed/being processed requests */
96 struct {
97 ULONG Processed;
98 ULONG Current;
99 } Irps [IRP_MJ_MAXIMUM_FUNCTION + 1];
100
101 /* structure size */
102 EXT2_STAT_ARRAY_V1 Unit;
103
104 /* current memory allocation statistics */
105 EXT2_STAT_ARRAY_V1 Current;
106
107 /* memory allocated in bytes */
108 EXT2_STAT_ARRAY_V1 Size;
109
110 /* totoal memory allocation statistics */
111 EXT2_STAT_ARRAY_V1 Total;
112
113 } EXT2_PERF_STATISTICS_V1, *PEXT2_PERF_STATISTICS_V1;
114
115 #define EXT2_PERF_STAT_MAGIC '2SPE'
116 #define EXT2_PERF_STAT_VER2 2
117
118 typedef struct _EXT2_PERF_STATISTICS_V2 {
119
120 ULONG Magic; /* EPS2 */
121 USHORT Version; /* 02 */
122 USHORT Length; /* sizeof(EXT2_PERF_STATISTICS_V2) */
123
124 /* totoal number of processed/being processed requests */
125 struct {
126 ULONG Processed;
127 ULONG Current;
128 } Irps [IRP_MJ_MAXIMUM_FUNCTION + 1];
129
130 /* structure size */
131 EXT2_STAT_ARRAY_V2 Unit;
132
133 /* current memory allocation statistics */
134 EXT2_STAT_ARRAY_V2 Current;
135
136 /* memory allocated in bytes */
137 EXT2_STAT_ARRAY_V2 Size;
138
139 /* totoal memory allocation statistics */
140 EXT2_STAT_ARRAY_V2 Total;
141
142 } EXT2_PERF_STATISTICS_V2, *PEXT2_PERF_STATISTICS_V2;
143
144 /* volume property ... */
145
146 #define EXT2_VOLUME_PROPERTY_MAGIC 'EVPM'
147
148 #define EXT2_FLAG_VP_SET_GLOBAL 0x00000001
149
150 #define APP_CMD_QUERY_VERSION 0x00000000 /* with global flag set */
151 #define APP_CMD_QUERY_CODEPAGES 0x00000001
152 #define APP_CMD_QUERY_PROPERTY 0x00000002
153 #define APP_CMD_SET_PROPERTY 0x00000003
154 #define APP_CMD_QUERY_PROPERTY2 0x00000004
155 #define APP_CMD_SET_PROPERTY2 0x00000005
156 #define APP_CMD_QUERY_PROPERTY3 0x00000006
157 #define APP_CMD_SET_PROPERTY3 0x00000007
158
159 #define CODEPAGE_MAXLEN 0x20
160 #define HIDINGPAT_LEN 0x20
161
162 typedef struct _EXT2_VOLUME_PROPERTY {
163 ULONG Magic;
164 ULONG Flags;
165 ULONG Command;
166 BOOLEAN bReadonly;
167 BOOLEAN bExt3Writable;
168 BOOLEAN bExt2;
169 BOOLEAN bExt3;
170 CHAR Codepage[CODEPAGE_MAXLEN];
171 } EXT2_VOLUME_PROPERTY, *PEXT2_VOLUME_PROPERTY;
172
173 #ifdef __cplusplus
174 typedef struct _EXT2_VOLUME_PROPERTY2:EXT2_VOLUME_PROPERTY {
175 #else // __cplusplus
176 typedef struct _EXT2_VOLUME_PROPERTY2 {
177 EXT2_VOLUME_PROPERTY ;
178 #endif // __cplusplus
179
180 /* new volume properties added after version 0.35 */
181
182 /* volume uuid */
183 __u8 UUID[16];
184
185 /* mount point: driver letter only */
186 UCHAR DrvLetter;
187
188 /* checking bitmap */
189 BOOLEAN bCheckBitmap;
190
191 /* global hiding patterns */
192 BOOLEAN bHidingPrefix;
193 BOOLEAN bHidingSuffix;
194 CHAR sHidingPrefix[HIDINGPAT_LEN];
195 CHAR sHidingSuffix[HIDINGPAT_LEN];
196
197 } EXT2_VOLUME_PROPERTY2, *PEXT2_VOLUME_PROPERTY2;
198
199 #define EXT2_VPROP3_AUTOMOUNT (1ULL << 0)
200 #define EXT2_VPROP3_USERIDS (1ULL << 1)
201
202 #ifdef __cplusplus
203 typedef struct _EXT2_VOLUME_PROPERTY3:EXT2_VOLUME_PROPERTY2 {
204 #else // __cplusplus
205 typedef struct _EXT2_VOLUME_PROPERTY3 {
206 EXT2_VOLUME_PROPERTY2 ;
207 #endif // __cplusplus
208 unsigned __int64 Flags2;
209 ULONG AutoMount:1;
210 ULONG EIDS:1;
211 ULONG Reserved1:30;
212 USHORT uid;
213 USHORT gid;
214 USHORT euid;
215 USHORT egid;
216 ULONG Reserved2[29];
217 } EXT2_VOLUME_PROPERTY3, *PEXT2_VOLUME_PROPERTY3;
218
219 /* Ext2Fsd driver version and built time */
220 typedef struct _EXT2_VOLUME_PROPERTY_VERSION {
221 ULONG Magic;
222 ULONG Flags;
223 ULONG Command;
224 CHAR Version[0x1C];
225 CHAR Time[0x20];
226 CHAR Date[0x20];
227 } EXT2_VOLUME_PROPERTY_VERSION, *PEXT2_VOLUME_PROPERTY_VERSION;
228
229 /* performance statistics */
230 #define EXT2_QUERY_PERFSTAT_MAGIC 'EVPM'
231 #define EXT2_QUERY_PERFSTAT_VER2 0x8000000
232
233 typedef struct _EXT2_QUERY_PERFSTAT {
234 ULONG Magic;
235 ULONG Flags;
236 ULONG Command;
237 union {
238 EXT2_PERF_STATISTICS_V1 PerfStatV1;
239 EXT2_PERF_STATISTICS_V2 PerfStatV2;
240 };
241 } EXT2_QUERY_PERFSTAT, *PEXT2_QUERY_PERFSTAT;
242
243 #define EXT2_QUERY_PERFSTAT_SZV1 (FIELD_OFFSET(EXT2_QUERY_PERFSTAT, PerfStatV1) + sizeof(EXT2_PERF_STATISTICS_V1))
244 #define EXT2_QUERY_PERFSTAT_SZV2 (FIELD_OFFSET(EXT2_QUERY_PERFSTAT, PerfStatV1) + sizeof(EXT2_PERF_STATISTICS_V2))
245
246 /* mountpoint management */
247 #define EXT2_APP_MOUNTPOINT_MAGIC 'EAMM'
248 typedef struct _EXT2_MOUNT_POINT {
249 ULONG Magic;
250 ULONG Flags;
251 ULONG Size;
252 ULONG Command;
253 USHORT Link[256];
254 USHORT Name[256];
255 } EXT2_MOUNT_POINT, *PEXT2_MOUNT_POINT;
256
257 #define APP_CMD_ADD_DOS_SYMLINK 0x00000001
258 #define APP_CMD_DEL_DOS_SYMLINK 0x00000002
259
260
261 #endif /* _EXT2_COMMON_INCLUDE_ */