[CDFS]
[reactos.git] / reactos / 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 #define FSCTL_BTRFS_GET_FILE_IDS CTL_CODE(FILE_DEVICE_UNKNOWN, 0x829, METHOD_OUT_DIRECT, FILE_ANY_ACCESS)
7 #define FSCTL_BTRFS_CREATE_SUBVOL CTL_CODE(FILE_DEVICE_UNKNOWN, 0x82a, METHOD_IN_DIRECT, FILE_ANY_ACCESS)
8 #define FSCTL_BTRFS_CREATE_SNAPSHOT CTL_CODE(FILE_DEVICE_UNKNOWN, 0x82b, METHOD_IN_DIRECT, FILE_ANY_ACCESS)
9 #define FSCTL_BTRFS_GET_INODE_INFO CTL_CODE(FILE_DEVICE_UNKNOWN, 0x82c, METHOD_OUT_DIRECT, FILE_ANY_ACCESS)
10 #define FSCTL_BTRFS_SET_INODE_INFO CTL_CODE(FILE_DEVICE_UNKNOWN, 0x82d, METHOD_IN_DIRECT, FILE_ANY_ACCESS)
11 #define FSCTL_BTRFS_GET_DEVICES CTL_CODE(FILE_DEVICE_UNKNOWN, 0x82e, METHOD_OUT_DIRECT, FILE_ANY_ACCESS)
12 #define FSCTL_BTRFS_GET_USAGE CTL_CODE(FILE_DEVICE_UNKNOWN, 0x82f, METHOD_OUT_DIRECT, FILE_ANY_ACCESS)
13 #define FSCTL_BTRFS_START_BALANCE CTL_CODE(FILE_DEVICE_UNKNOWN, 0x830, METHOD_IN_DIRECT, FILE_ANY_ACCESS)
14 #define FSCTL_BTRFS_QUERY_BALANCE CTL_CODE(FILE_DEVICE_UNKNOWN, 0x831, METHOD_OUT_DIRECT, FILE_ANY_ACCESS)
15 #define FSCTL_BTRFS_PAUSE_BALANCE CTL_CODE(FILE_DEVICE_UNKNOWN, 0x832, METHOD_IN_DIRECT, FILE_ANY_ACCESS)
16 #define FSCTL_BTRFS_RESUME_BALANCE CTL_CODE(FILE_DEVICE_UNKNOWN, 0x833, METHOD_IN_DIRECT, FILE_ANY_ACCESS)
17 #define FSCTL_BTRFS_STOP_BALANCE CTL_CODE(FILE_DEVICE_UNKNOWN, 0x834, METHOD_IN_DIRECT, FILE_ANY_ACCESS)
18 #define FSCTL_BTRFS_ADD_DEVICE CTL_CODE(FILE_DEVICE_UNKNOWN, 0x835, METHOD_IN_DIRECT, FILE_ANY_ACCESS)
19 #define FSCTL_BTRFS_REMOVE_DEVICE CTL_CODE(FILE_DEVICE_UNKNOWN, 0x836, METHOD_IN_DIRECT, FILE_ANY_ACCESS)
20 #define IOCTL_BTRFS_QUERY_FILESYSTEMS CTL_CODE(FILE_DEVICE_UNKNOWN, 0x837, METHOD_OUT_DIRECT, FILE_ANY_ACCESS)
21 #define FSCTL_BTRFS_GET_UUID CTL_CODE(FILE_DEVICE_UNKNOWN, 0x838, METHOD_OUT_DIRECT, FILE_ANY_ACCESS)
22
23 typedef struct {
24 UINT64 subvol;
25 UINT64 inode;
26 BOOL top;
27 } btrfs_get_file_ids;
28
29 typedef struct {
30 HANDLE subvol;
31 UINT32 namelen;
32 WCHAR name[1];
33 } btrfs_create_snapshot;
34
35 typedef struct {
36 UINT64 subvol;
37 UINT64 inode;
38 BOOL top;
39 UINT8 type;
40 UINT32 st_uid;
41 UINT32 st_gid;
42 UINT32 st_mode;
43 UINT64 st_rdev;
44 UINT64 flags;
45 UINT32 inline_length;
46 UINT64 disk_size[3];
47 } btrfs_inode_info;
48
49 typedef struct {
50 UINT64 flags;
51 BOOL flags_changed;
52 UINT32 st_uid;
53 BOOL uid_changed;
54 UINT32 st_gid;
55 BOOL gid_changed;
56 UINT32 st_mode;
57 BOOL mode_changed;
58 } btrfs_set_inode_info;
59
60 typedef struct {
61 UINT32 next_entry;
62 UINT64 dev_id;
63 UINT64 size;
64 BOOL readonly;
65 ULONG device_number;
66 ULONG partition_number;
67 USHORT namelen;
68 WCHAR name[1];
69 } btrfs_device;
70
71 typedef struct {
72 UINT64 dev_id;
73 UINT64 alloc;
74 } btrfs_usage_device;
75
76 typedef struct {
77 UINT32 next_entry;
78 UINT64 type;
79 UINT64 size;
80 UINT64 used;
81 UINT64 num_devices;
82 btrfs_usage_device devices[1];
83 } btrfs_usage;
84
85 #define BTRFS_BALANCE_OPTS_ENABLED 0x001
86 #define BTRFS_BALANCE_OPTS_PROFILES 0x002
87 #define BTRFS_BALANCE_OPTS_DEVID 0x004
88 #define BTRFS_BALANCE_OPTS_DRANGE 0x008
89 #define BTRFS_BALANCE_OPTS_VRANGE 0x010
90 #define BTRFS_BALANCE_OPTS_LIMIT 0x020
91 #define BTRFS_BALANCE_OPTS_STRIPES 0x040
92 #define BTRFS_BALANCE_OPTS_USAGE 0x080
93 #define BTRFS_BALANCE_OPTS_CONVERT 0x100
94 #define BTRFS_BALANCE_OPTS_SOFT 0x200
95
96 #define BLOCK_FLAG_SINGLE 0x1000000000000 // only used in balance
97
98 typedef struct {
99 UINT64 flags;
100 UINT64 profiles;
101 UINT64 devid;
102 UINT64 drange_start;
103 UINT64 drange_end;
104 UINT64 vrange_start;
105 UINT64 vrange_end;
106 UINT64 limit_start;
107 UINT64 limit_end;
108 UINT16 stripes_start;
109 UINT16 stripes_end;
110 UINT8 usage_start;
111 UINT8 usage_end;
112 UINT64 convert;
113 } btrfs_balance_opts;
114
115 #define BTRFS_BALANCE_STOPPED 0
116 #define BTRFS_BALANCE_RUNNING 1
117 #define BTRFS_BALANCE_PAUSED 2
118 #define BTRFS_BALANCE_REMOVAL 4
119 #define BTRFS_BALANCE_ERROR 8
120
121 typedef struct {
122 UINT32 status;
123 UINT64 chunks_left;
124 UINT64 total_chunks;
125 NTSTATUS error;
126 btrfs_balance_opts data_opts;
127 btrfs_balance_opts metadata_opts;
128 btrfs_balance_opts system_opts;
129 } btrfs_query_balance;
130
131 typedef struct {
132 btrfs_balance_opts opts[3];
133 } btrfs_start_balance;
134
135 typedef struct {
136 UINT8 uuid[16];
137 USHORT name_length;
138 WCHAR name[1];
139 } btrfs_filesystem_device;
140
141 typedef struct {
142 UINT32 next_entry;
143 UINT8 uuid[16];
144 UINT32 num_devices;
145 btrfs_filesystem_device device;
146 } btrfs_filesystem;
147
148 #endif