[USETUP][SETUPLIB] Added support for formatting partition in BTRFS and installing...
[reactos.git] / drivers / filesystems / btrfs / btrfsioctl.h
1 // No copyright claimed in this file - do what you want with it.
2
3 #ifndef BTRFSIOCTL_H_DEFINED
4 #define BTRFSIOCTL_H_DEFINED
5
6 #include "btrfs.h"
7
8 #define FSCTL_BTRFS_GET_FILE_IDS CTL_CODE(FILE_DEVICE_UNKNOWN, 0x829, METHOD_OUT_DIRECT, FILE_ANY_ACCESS)
9 #define FSCTL_BTRFS_CREATE_SUBVOL CTL_CODE(FILE_DEVICE_UNKNOWN, 0x82a, METHOD_IN_DIRECT, FILE_ANY_ACCESS)
10 #define FSCTL_BTRFS_CREATE_SNAPSHOT CTL_CODE(FILE_DEVICE_UNKNOWN, 0x82b, METHOD_IN_DIRECT, FILE_ANY_ACCESS)
11 #define FSCTL_BTRFS_GET_INODE_INFO CTL_CODE(FILE_DEVICE_UNKNOWN, 0x82c, METHOD_OUT_DIRECT, FILE_ANY_ACCESS)
12 #define FSCTL_BTRFS_SET_INODE_INFO CTL_CODE(FILE_DEVICE_UNKNOWN, 0x82d, METHOD_IN_DIRECT, FILE_ANY_ACCESS)
13 #define FSCTL_BTRFS_GET_DEVICES CTL_CODE(FILE_DEVICE_UNKNOWN, 0x82e, METHOD_OUT_DIRECT, FILE_ANY_ACCESS)
14 #define FSCTL_BTRFS_GET_USAGE CTL_CODE(FILE_DEVICE_UNKNOWN, 0x82f, METHOD_OUT_DIRECT, FILE_ANY_ACCESS)
15 #define FSCTL_BTRFS_START_BALANCE CTL_CODE(FILE_DEVICE_UNKNOWN, 0x830, METHOD_IN_DIRECT, FILE_ANY_ACCESS)
16 #define FSCTL_BTRFS_QUERY_BALANCE CTL_CODE(FILE_DEVICE_UNKNOWN, 0x831, METHOD_OUT_DIRECT, FILE_ANY_ACCESS)
17 #define FSCTL_BTRFS_PAUSE_BALANCE CTL_CODE(FILE_DEVICE_UNKNOWN, 0x832, METHOD_IN_DIRECT, FILE_ANY_ACCESS)
18 #define FSCTL_BTRFS_RESUME_BALANCE CTL_CODE(FILE_DEVICE_UNKNOWN, 0x833, METHOD_IN_DIRECT, FILE_ANY_ACCESS)
19 #define FSCTL_BTRFS_STOP_BALANCE CTL_CODE(FILE_DEVICE_UNKNOWN, 0x834, METHOD_IN_DIRECT, FILE_ANY_ACCESS)
20 #define FSCTL_BTRFS_ADD_DEVICE CTL_CODE(FILE_DEVICE_UNKNOWN, 0x835, METHOD_IN_DIRECT, FILE_ANY_ACCESS)
21 #define FSCTL_BTRFS_REMOVE_DEVICE CTL_CODE(FILE_DEVICE_UNKNOWN, 0x836, METHOD_IN_DIRECT, FILE_ANY_ACCESS)
22 #define IOCTL_BTRFS_QUERY_FILESYSTEMS CTL_CODE(FILE_DEVICE_UNKNOWN, 0x837, METHOD_OUT_DIRECT, FILE_ANY_ACCESS)
23 #define FSCTL_BTRFS_GET_UUID CTL_CODE(FILE_DEVICE_UNKNOWN, 0x838, METHOD_OUT_DIRECT, FILE_ANY_ACCESS)
24 #define FSCTL_BTRFS_START_SCRUB CTL_CODE(FILE_DEVICE_UNKNOWN, 0x839, METHOD_OUT_DIRECT, FILE_ANY_ACCESS)
25 #define FSCTL_BTRFS_QUERY_SCRUB CTL_CODE(FILE_DEVICE_UNKNOWN, 0x83a, METHOD_OUT_DIRECT, FILE_ANY_ACCESS)
26 #define FSCTL_BTRFS_PAUSE_SCRUB CTL_CODE(FILE_DEVICE_UNKNOWN, 0x83b, METHOD_OUT_DIRECT, FILE_ANY_ACCESS)
27 #define FSCTL_BTRFS_RESUME_SCRUB CTL_CODE(FILE_DEVICE_UNKNOWN, 0x83c, METHOD_OUT_DIRECT, FILE_ANY_ACCESS)
28 #define FSCTL_BTRFS_STOP_SCRUB CTL_CODE(FILE_DEVICE_UNKNOWN, 0x83d, METHOD_OUT_DIRECT, FILE_ANY_ACCESS)
29 #define IOCTL_BTRFS_PROBE_VOLUME CTL_CODE(FILE_DEVICE_UNKNOWN, 0x83e, METHOD_OUT_DIRECT, FILE_ANY_ACCESS)
30 #define FSCTL_BTRFS_RESET_STATS CTL_CODE(FILE_DEVICE_UNKNOWN, 0x83f, METHOD_IN_DIRECT, FILE_ANY_ACCESS)
31 #define FSCTL_BTRFS_MKNOD CTL_CODE(FILE_DEVICE_UNKNOWN, 0x840, METHOD_IN_DIRECT, FILE_ANY_ACCESS)
32 #define FSCTL_BTRFS_RECEIVED_SUBVOL CTL_CODE(FILE_DEVICE_UNKNOWN, 0x841, METHOD_IN_DIRECT, FILE_ANY_ACCESS)
33 #define FSCTL_BTRFS_GET_XATTRS CTL_CODE(FILE_DEVICE_UNKNOWN, 0x842, METHOD_BUFFERED, FILE_ANY_ACCESS)
34 #define FSCTL_BTRFS_SET_XATTR CTL_CODE(FILE_DEVICE_UNKNOWN, 0x843, METHOD_IN_DIRECT, FILE_ANY_ACCESS)
35 #define FSCTL_BTRFS_RESERVE_SUBVOL CTL_CODE(FILE_DEVICE_UNKNOWN, 0x844, METHOD_IN_DIRECT, FILE_ANY_ACCESS)
36 #define FSCTL_BTRFS_FIND_SUBVOL CTL_CODE(FILE_DEVICE_UNKNOWN, 0x845, METHOD_BUFFERED, FILE_ANY_ACCESS)
37 #define FSCTL_BTRFS_SEND_SUBVOL CTL_CODE(FILE_DEVICE_UNKNOWN, 0x846, METHOD_BUFFERED, FILE_ANY_ACCESS)
38 #define FSCTL_BTRFS_READ_SEND_BUFFER CTL_CODE(FILE_DEVICE_UNKNOWN, 0x847, METHOD_OUT_DIRECT, FILE_ANY_ACCESS)
39 #define FSCTL_BTRFS_RESIZE CTL_CODE(FILE_DEVICE_UNKNOWN, 0x848, METHOD_IN_DIRECT, FILE_ANY_ACCESS)
40
41 typedef struct {
42 UINT64 subvol;
43 UINT64 inode;
44 BOOL top;
45 } btrfs_get_file_ids;
46
47 typedef struct {
48 HANDLE subvol;
49 BOOL readonly;
50 BOOL posix;
51 UINT16 namelen;
52 WCHAR name[1];
53 } btrfs_create_snapshot;
54
55 typedef struct {
56 void* POINTER_32 subvol;
57 BOOL readonly;
58 BOOL posix;
59 UINT16 namelen;
60 WCHAR name[1];
61 } btrfs_create_snapshot32;
62
63 #define BTRFS_COMPRESSION_ANY 0
64 #define BTRFS_COMPRESSION_ZLIB 1
65 #define BTRFS_COMPRESSION_LZO 2
66
67 typedef struct {
68 UINT64 subvol;
69 UINT64 inode;
70 BOOL top;
71 UINT8 type;
72 UINT32 st_uid;
73 UINT32 st_gid;
74 UINT32 st_mode;
75 UINT64 st_rdev;
76 UINT64 flags;
77 UINT32 inline_length;
78 UINT64 disk_size[3];
79 UINT8 compression_type;
80 } btrfs_inode_info;
81
82 typedef struct {
83 UINT64 flags;
84 BOOL flags_changed;
85 UINT32 st_uid;
86 BOOL uid_changed;
87 UINT32 st_gid;
88 BOOL gid_changed;
89 UINT32 st_mode;
90 BOOL mode_changed;
91 UINT8 compression_type;
92 BOOL compression_type_changed;
93 } btrfs_set_inode_info;
94
95 typedef struct {
96 UINT32 next_entry;
97 UINT64 dev_id;
98 UINT64 size;
99 UINT64 max_size;
100 BOOL readonly;
101 BOOL missing;
102 ULONG device_number;
103 ULONG partition_number;
104 UINT64 stats[5];
105 USHORT namelen;
106 WCHAR name[1];
107 } btrfs_device;
108
109 typedef struct {
110 UINT64 dev_id;
111 UINT64 alloc;
112 } btrfs_usage_device;
113
114 typedef struct {
115 UINT32 next_entry;
116 UINT64 type;
117 UINT64 size;
118 UINT64 used;
119 UINT64 num_devices;
120 btrfs_usage_device devices[1];
121 } btrfs_usage;
122
123 #define BTRFS_BALANCE_OPTS_ENABLED 0x001
124 #define BTRFS_BALANCE_OPTS_PROFILES 0x002
125 #define BTRFS_BALANCE_OPTS_DEVID 0x004
126 #define BTRFS_BALANCE_OPTS_DRANGE 0x008
127 #define BTRFS_BALANCE_OPTS_VRANGE 0x010
128 #define BTRFS_BALANCE_OPTS_LIMIT 0x020
129 #define BTRFS_BALANCE_OPTS_STRIPES 0x040
130 #define BTRFS_BALANCE_OPTS_USAGE 0x080
131 #define BTRFS_BALANCE_OPTS_CONVERT 0x100
132 #define BTRFS_BALANCE_OPTS_SOFT 0x200
133
134 #define BLOCK_FLAG_SINGLE 0x1000000000000 // only used in balance
135
136 typedef struct {
137 UINT64 flags;
138 UINT64 profiles;
139 UINT64 devid;
140 UINT64 drange_start;
141 UINT64 drange_end;
142 UINT64 vrange_start;
143 UINT64 vrange_end;
144 UINT64 limit_start;
145 UINT64 limit_end;
146 UINT16 stripes_start;
147 UINT16 stripes_end;
148 UINT8 usage_start;
149 UINT8 usage_end;
150 UINT64 convert;
151 } btrfs_balance_opts;
152
153 #define BTRFS_BALANCE_STOPPED 0
154 #define BTRFS_BALANCE_RUNNING 1
155 #define BTRFS_BALANCE_PAUSED 2
156 #define BTRFS_BALANCE_REMOVAL 4
157 #define BTRFS_BALANCE_ERROR 8
158 #define BTRFS_BALANCE_SHRINKING 16
159
160 typedef struct {
161 UINT32 status;
162 UINT64 chunks_left;
163 UINT64 total_chunks;
164 NTSTATUS error;
165 btrfs_balance_opts data_opts;
166 btrfs_balance_opts metadata_opts;
167 btrfs_balance_opts system_opts;
168 } btrfs_query_balance;
169
170 typedef struct {
171 btrfs_balance_opts opts[3];
172 } btrfs_start_balance;
173
174 typedef struct {
175 UINT8 uuid[16];
176 BOOL missing;
177 USHORT name_length;
178 WCHAR name[1];
179 } btrfs_filesystem_device;
180
181 typedef struct {
182 UINT32 next_entry;
183 UINT8 uuid[16];
184 UINT32 num_devices;
185 btrfs_filesystem_device device;
186 } btrfs_filesystem;
187
188 #define BTRFS_SCRUB_STOPPED 0
189 #define BTRFS_SCRUB_RUNNING 1
190 #define BTRFS_SCRUB_PAUSED 2
191
192 typedef struct {
193 UINT32 next_entry;
194 UINT64 address;
195 UINT64 device;
196 BOOL recovered;
197 BOOL is_metadata;
198 BOOL parity;
199
200 union {
201 struct {
202 UINT64 subvol;
203 UINT64 offset;
204 UINT16 filename_length;
205 WCHAR filename[1];
206 } data;
207
208 struct {
209 UINT64 root;
210 UINT8 level;
211 KEY firstitem;
212 } metadata;
213 };
214 } btrfs_scrub_error;
215
216 typedef struct {
217 UINT32 status;
218 LARGE_INTEGER start_time;
219 LARGE_INTEGER finish_time;
220 UINT64 chunks_left;
221 UINT64 total_chunks;
222 UINT64 data_scrubbed;
223 UINT64 duration;
224 NTSTATUS error;
225 UINT32 num_errors;
226 btrfs_scrub_error errors;
227 } btrfs_query_scrub;
228
229 typedef struct {
230 UINT64 inode;
231 UINT8 type;
232 UINT64 st_rdev;
233 UINT16 namelen;
234 WCHAR name[1];
235 } btrfs_mknod;
236
237 typedef struct {
238 UINT64 generation;
239 BTRFS_UUID uuid;
240 } btrfs_received_subvol;
241
242 typedef struct {
243 USHORT namelen;
244 USHORT valuelen;
245 char data[1];
246 } btrfs_set_xattr;
247
248 typedef struct {
249 BOOL readonly;
250 BOOL posix;
251 USHORT namelen;
252 WCHAR name[1];
253 } btrfs_create_subvol;
254
255 typedef struct {
256 BTRFS_UUID uuid;
257 UINT64 ctransid;
258 } btrfs_find_subvol;
259
260 typedef struct {
261 HANDLE parent;
262 ULONG num_clones;
263 HANDLE clones[1];
264 } btrfs_send_subvol;
265
266 typedef struct {
267 void* POINTER_32 parent;
268 ULONG num_clones;
269 void* POINTER_32 clones[1];
270 } btrfs_send_subvol32;
271
272 typedef struct {
273 UINT64 device;
274 UINT64 size;
275 } btrfs_resize;
276
277 #endif