xref: /aosp_15_r20/external/libfuse/include/fuse_kernel.h (revision 9e5649576b786774a32d7b0252c9cd8c6538fa49)
1*9e564957SAndroid Build Coastguard Worker /* SPDX-License-Identifier: ((GPL-2.0 WITH Linux-syscall-note) OR BSD-2-Clause) */
2*9e564957SAndroid Build Coastguard Worker /*
3*9e564957SAndroid Build Coastguard Worker     This file defines the kernel interface of FUSE
4*9e564957SAndroid Build Coastguard Worker     Copyright (C) 2001-2008  Miklos Szeredi <[email protected]>
5*9e564957SAndroid Build Coastguard Worker 
6*9e564957SAndroid Build Coastguard Worker     This program can be distributed under the terms of the GNU GPL.
7*9e564957SAndroid Build Coastguard Worker     See the file COPYING.
8*9e564957SAndroid Build Coastguard Worker 
9*9e564957SAndroid Build Coastguard Worker     This -- and only this -- header file may also be distributed under
10*9e564957SAndroid Build Coastguard Worker     the terms of the BSD Licence as follows:
11*9e564957SAndroid Build Coastguard Worker 
12*9e564957SAndroid Build Coastguard Worker     Copyright (C) 2001-2007 Miklos Szeredi. All rights reserved.
13*9e564957SAndroid Build Coastguard Worker 
14*9e564957SAndroid Build Coastguard Worker     Redistribution and use in source and binary forms, with or without
15*9e564957SAndroid Build Coastguard Worker     modification, are permitted provided that the following conditions
16*9e564957SAndroid Build Coastguard Worker     are met:
17*9e564957SAndroid Build Coastguard Worker     1. Redistributions of source code must retain the above copyright
18*9e564957SAndroid Build Coastguard Worker        notice, this list of conditions and the following disclaimer.
19*9e564957SAndroid Build Coastguard Worker     2. Redistributions in binary form must reproduce the above copyright
20*9e564957SAndroid Build Coastguard Worker        notice, this list of conditions and the following disclaimer in the
21*9e564957SAndroid Build Coastguard Worker        documentation and/or other materials provided with the distribution.
22*9e564957SAndroid Build Coastguard Worker 
23*9e564957SAndroid Build Coastguard Worker     THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS ``AS IS'' AND
24*9e564957SAndroid Build Coastguard Worker     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
25*9e564957SAndroid Build Coastguard Worker     IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
26*9e564957SAndroid Build Coastguard Worker     ARE DISCLAIMED.  IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE
27*9e564957SAndroid Build Coastguard Worker     FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
28*9e564957SAndroid Build Coastguard Worker     DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
29*9e564957SAndroid Build Coastguard Worker     OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
30*9e564957SAndroid Build Coastguard Worker     HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
31*9e564957SAndroid Build Coastguard Worker     LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
32*9e564957SAndroid Build Coastguard Worker     OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
33*9e564957SAndroid Build Coastguard Worker     SUCH DAMAGE.
34*9e564957SAndroid Build Coastguard Worker */
35*9e564957SAndroid Build Coastguard Worker 
36*9e564957SAndroid Build Coastguard Worker /*
37*9e564957SAndroid Build Coastguard Worker  * This file defines the kernel interface of FUSE
38*9e564957SAndroid Build Coastguard Worker  *
39*9e564957SAndroid Build Coastguard Worker  * Protocol changelog:
40*9e564957SAndroid Build Coastguard Worker  *
41*9e564957SAndroid Build Coastguard Worker  * 7.1:
42*9e564957SAndroid Build Coastguard Worker  *  - add the following messages:
43*9e564957SAndroid Build Coastguard Worker  *      FUSE_SETATTR, FUSE_SYMLINK, FUSE_MKNOD, FUSE_MKDIR, FUSE_UNLINK,
44*9e564957SAndroid Build Coastguard Worker  *      FUSE_RMDIR, FUSE_RENAME, FUSE_LINK, FUSE_OPEN, FUSE_READ, FUSE_WRITE,
45*9e564957SAndroid Build Coastguard Worker  *      FUSE_RELEASE, FUSE_FSYNC, FUSE_FLUSH, FUSE_SETXATTR, FUSE_GETXATTR,
46*9e564957SAndroid Build Coastguard Worker  *      FUSE_LISTXATTR, FUSE_REMOVEXATTR, FUSE_OPENDIR, FUSE_READDIR,
47*9e564957SAndroid Build Coastguard Worker  *      FUSE_RELEASEDIR
48*9e564957SAndroid Build Coastguard Worker  *  - add padding to messages to accommodate 32-bit servers on 64-bit kernels
49*9e564957SAndroid Build Coastguard Worker  *
50*9e564957SAndroid Build Coastguard Worker  * 7.2:
51*9e564957SAndroid Build Coastguard Worker  *  - add FOPEN_DIRECT_IO and FOPEN_KEEP_CACHE flags
52*9e564957SAndroid Build Coastguard Worker  *  - add FUSE_FSYNCDIR message
53*9e564957SAndroid Build Coastguard Worker  *
54*9e564957SAndroid Build Coastguard Worker  * 7.3:
55*9e564957SAndroid Build Coastguard Worker  *  - add FUSE_ACCESS message
56*9e564957SAndroid Build Coastguard Worker  *  - add FUSE_CREATE message
57*9e564957SAndroid Build Coastguard Worker  *  - add filehandle to fuse_setattr_in
58*9e564957SAndroid Build Coastguard Worker  *
59*9e564957SAndroid Build Coastguard Worker  * 7.4:
60*9e564957SAndroid Build Coastguard Worker  *  - add frsize to fuse_kstatfs
61*9e564957SAndroid Build Coastguard Worker  *  - clean up request size limit checking
62*9e564957SAndroid Build Coastguard Worker  *
63*9e564957SAndroid Build Coastguard Worker  * 7.5:
64*9e564957SAndroid Build Coastguard Worker  *  - add flags and max_write to fuse_init_out
65*9e564957SAndroid Build Coastguard Worker  *
66*9e564957SAndroid Build Coastguard Worker  * 7.6:
67*9e564957SAndroid Build Coastguard Worker  *  - add max_readahead to fuse_init_in and fuse_init_out
68*9e564957SAndroid Build Coastguard Worker  *
69*9e564957SAndroid Build Coastguard Worker  * 7.7:
70*9e564957SAndroid Build Coastguard Worker  *  - add FUSE_INTERRUPT message
71*9e564957SAndroid Build Coastguard Worker  *  - add POSIX file lock support
72*9e564957SAndroid Build Coastguard Worker  *
73*9e564957SAndroid Build Coastguard Worker  * 7.8:
74*9e564957SAndroid Build Coastguard Worker  *  - add lock_owner and flags fields to fuse_release_in
75*9e564957SAndroid Build Coastguard Worker  *  - add FUSE_BMAP message
76*9e564957SAndroid Build Coastguard Worker  *  - add FUSE_DESTROY message
77*9e564957SAndroid Build Coastguard Worker  *
78*9e564957SAndroid Build Coastguard Worker  * 7.9:
79*9e564957SAndroid Build Coastguard Worker  *  - new fuse_getattr_in input argument of GETATTR
80*9e564957SAndroid Build Coastguard Worker  *  - add lk_flags in fuse_lk_in
81*9e564957SAndroid Build Coastguard Worker  *  - add lock_owner field to fuse_setattr_in, fuse_read_in and fuse_write_in
82*9e564957SAndroid Build Coastguard Worker  *  - add blksize field to fuse_attr
83*9e564957SAndroid Build Coastguard Worker  *  - add file flags field to fuse_read_in and fuse_write_in
84*9e564957SAndroid Build Coastguard Worker  *  - Add ATIME_NOW and MTIME_NOW flags to fuse_setattr_in
85*9e564957SAndroid Build Coastguard Worker  *
86*9e564957SAndroid Build Coastguard Worker  * 7.10
87*9e564957SAndroid Build Coastguard Worker  *  - add nonseekable open flag
88*9e564957SAndroid Build Coastguard Worker  *
89*9e564957SAndroid Build Coastguard Worker  * 7.11
90*9e564957SAndroid Build Coastguard Worker  *  - add IOCTL message
91*9e564957SAndroid Build Coastguard Worker  *  - add unsolicited notification support
92*9e564957SAndroid Build Coastguard Worker  *  - add POLL message and NOTIFY_POLL notification
93*9e564957SAndroid Build Coastguard Worker  *
94*9e564957SAndroid Build Coastguard Worker  * 7.12
95*9e564957SAndroid Build Coastguard Worker  *  - add umask flag to input argument of create, mknod and mkdir
96*9e564957SAndroid Build Coastguard Worker  *  - add notification messages for invalidation of inodes and
97*9e564957SAndroid Build Coastguard Worker  *    directory entries
98*9e564957SAndroid Build Coastguard Worker  *
99*9e564957SAndroid Build Coastguard Worker  * 7.13
100*9e564957SAndroid Build Coastguard Worker  *  - make max number of background requests and congestion threshold
101*9e564957SAndroid Build Coastguard Worker  *    tunables
102*9e564957SAndroid Build Coastguard Worker  *
103*9e564957SAndroid Build Coastguard Worker  * 7.14
104*9e564957SAndroid Build Coastguard Worker  *  - add splice support to fuse device
105*9e564957SAndroid Build Coastguard Worker  *
106*9e564957SAndroid Build Coastguard Worker  * 7.15
107*9e564957SAndroid Build Coastguard Worker  *  - add store notify
108*9e564957SAndroid Build Coastguard Worker  *  - add retrieve notify
109*9e564957SAndroid Build Coastguard Worker  *
110*9e564957SAndroid Build Coastguard Worker  * 7.16
111*9e564957SAndroid Build Coastguard Worker  *  - add BATCH_FORGET request
112*9e564957SAndroid Build Coastguard Worker  *  - FUSE_IOCTL_UNRESTRICTED shall now return with array of 'struct
113*9e564957SAndroid Build Coastguard Worker  *    fuse_ioctl_iovec' instead of ambiguous 'struct iovec'
114*9e564957SAndroid Build Coastguard Worker  *  - add FUSE_IOCTL_32BIT flag
115*9e564957SAndroid Build Coastguard Worker  *
116*9e564957SAndroid Build Coastguard Worker  * 7.17
117*9e564957SAndroid Build Coastguard Worker  *  - add FUSE_FLOCK_LOCKS and FUSE_RELEASE_FLOCK_UNLOCK
118*9e564957SAndroid Build Coastguard Worker  *
119*9e564957SAndroid Build Coastguard Worker  * 7.18
120*9e564957SAndroid Build Coastguard Worker  *  - add FUSE_IOCTL_DIR flag
121*9e564957SAndroid Build Coastguard Worker  *  - add FUSE_NOTIFY_DELETE
122*9e564957SAndroid Build Coastguard Worker  *
123*9e564957SAndroid Build Coastguard Worker  * 7.19
124*9e564957SAndroid Build Coastguard Worker  *  - add FUSE_FALLOCATE
125*9e564957SAndroid Build Coastguard Worker  *
126*9e564957SAndroid Build Coastguard Worker  * 7.20
127*9e564957SAndroid Build Coastguard Worker  *  - add FUSE_AUTO_INVAL_DATA
128*9e564957SAndroid Build Coastguard Worker  *
129*9e564957SAndroid Build Coastguard Worker  * 7.21
130*9e564957SAndroid Build Coastguard Worker  *  - add FUSE_READDIRPLUS
131*9e564957SAndroid Build Coastguard Worker  *  - send the requested events in POLL request
132*9e564957SAndroid Build Coastguard Worker  *
133*9e564957SAndroid Build Coastguard Worker  * 7.22
134*9e564957SAndroid Build Coastguard Worker  *  - add FUSE_ASYNC_DIO
135*9e564957SAndroid Build Coastguard Worker  *
136*9e564957SAndroid Build Coastguard Worker  * 7.23
137*9e564957SAndroid Build Coastguard Worker  *  - add FUSE_WRITEBACK_CACHE
138*9e564957SAndroid Build Coastguard Worker  *  - add time_gran to fuse_init_out
139*9e564957SAndroid Build Coastguard Worker  *  - add reserved space to fuse_init_out
140*9e564957SAndroid Build Coastguard Worker  *  - add FATTR_CTIME
141*9e564957SAndroid Build Coastguard Worker  *  - add ctime and ctimensec to fuse_setattr_in
142*9e564957SAndroid Build Coastguard Worker  *  - add FUSE_RENAME2 request
143*9e564957SAndroid Build Coastguard Worker  *  - add FUSE_NO_OPEN_SUPPORT flag
144*9e564957SAndroid Build Coastguard Worker  *
145*9e564957SAndroid Build Coastguard Worker  *  7.24
146*9e564957SAndroid Build Coastguard Worker  *  - add FUSE_LSEEK for SEEK_HOLE and SEEK_DATA support
147*9e564957SAndroid Build Coastguard Worker  *
148*9e564957SAndroid Build Coastguard Worker  *  7.25
149*9e564957SAndroid Build Coastguard Worker  *  - add FUSE_PARALLEL_DIROPS
150*9e564957SAndroid Build Coastguard Worker  *
151*9e564957SAndroid Build Coastguard Worker  *  7.26
152*9e564957SAndroid Build Coastguard Worker  *  - add FUSE_HANDLE_KILLPRIV
153*9e564957SAndroid Build Coastguard Worker  *  - add FUSE_POSIX_ACL
154*9e564957SAndroid Build Coastguard Worker  *
155*9e564957SAndroid Build Coastguard Worker  *  7.27
156*9e564957SAndroid Build Coastguard Worker  *  - add FUSE_ABORT_ERROR
157*9e564957SAndroid Build Coastguard Worker  *
158*9e564957SAndroid Build Coastguard Worker  *  7.28
159*9e564957SAndroid Build Coastguard Worker  *  - add FUSE_COPY_FILE_RANGE
160*9e564957SAndroid Build Coastguard Worker  *  - add FOPEN_CACHE_DIR
161*9e564957SAndroid Build Coastguard Worker  *  - add FUSE_MAX_PAGES, add max_pages to init_out
162*9e564957SAndroid Build Coastguard Worker  *  - add FUSE_CACHE_SYMLINKS
163*9e564957SAndroid Build Coastguard Worker  *
164*9e564957SAndroid Build Coastguard Worker  *  7.29
165*9e564957SAndroid Build Coastguard Worker  *  - add FUSE_NO_OPENDIR_SUPPORT flag
166*9e564957SAndroid Build Coastguard Worker  *
167*9e564957SAndroid Build Coastguard Worker  *  7.30
168*9e564957SAndroid Build Coastguard Worker  *  - add FUSE_EXPLICIT_INVAL_DATA
169*9e564957SAndroid Build Coastguard Worker  *  - add FUSE_IOCTL_COMPAT_X32
170*9e564957SAndroid Build Coastguard Worker  *
171*9e564957SAndroid Build Coastguard Worker  *  7.31
172*9e564957SAndroid Build Coastguard Worker  *  - add FUSE_WRITE_KILL_PRIV flag
173*9e564957SAndroid Build Coastguard Worker  *  - add FUSE_SETUPMAPPING and FUSE_REMOVEMAPPING
174*9e564957SAndroid Build Coastguard Worker  *  - add map_alignment to fuse_init_out, add FUSE_MAP_ALIGNMENT flag
175*9e564957SAndroid Build Coastguard Worker  *
176*9e564957SAndroid Build Coastguard Worker  *  7.32
177*9e564957SAndroid Build Coastguard Worker  *  - add flags to fuse_attr, add FUSE_ATTR_SUBMOUNT, add FUSE_SUBMOUNTS
178*9e564957SAndroid Build Coastguard Worker  *
179*9e564957SAndroid Build Coastguard Worker  *  7.33
180*9e564957SAndroid Build Coastguard Worker  *  - add FUSE_HANDLE_KILLPRIV_V2, FUSE_WRITE_KILL_SUIDGID, FATTR_KILL_SUIDGID
181*9e564957SAndroid Build Coastguard Worker  *  - add FUSE_OPEN_KILL_SUIDGID
182*9e564957SAndroid Build Coastguard Worker  *  - extend fuse_setxattr_in, add FUSE_SETXATTR_EXT
183*9e564957SAndroid Build Coastguard Worker  *  - add FUSE_SETXATTR_ACL_KILL_SGID
184*9e564957SAndroid Build Coastguard Worker  *
185*9e564957SAndroid Build Coastguard Worker  *  7.34
186*9e564957SAndroid Build Coastguard Worker  *  - add FUSE_SYNCFS
187*9e564957SAndroid Build Coastguard Worker  *
188*9e564957SAndroid Build Coastguard Worker  *  7.35
189*9e564957SAndroid Build Coastguard Worker  *  - add FOPEN_NOFLUSH
190*9e564957SAndroid Build Coastguard Worker  *
191*9e564957SAndroid Build Coastguard Worker  *  7.36
192*9e564957SAndroid Build Coastguard Worker  *  - extend fuse_init_in with reserved fields, add FUSE_INIT_EXT init flag
193*9e564957SAndroid Build Coastguard Worker  *  - add flags2 to fuse_init_in and fuse_init_out
194*9e564957SAndroid Build Coastguard Worker  *  - add FUSE_SECURITY_CTX init flag
195*9e564957SAndroid Build Coastguard Worker  *  - add security context to create, mkdir, symlink, and mknod requests
196*9e564957SAndroid Build Coastguard Worker  *  - add FUSE_HAS_INODE_DAX, FUSE_ATTR_DAX
197*9e564957SAndroid Build Coastguard Worker  *
198*9e564957SAndroid Build Coastguard Worker  *  7.37
199*9e564957SAndroid Build Coastguard Worker  *  - add FUSE_TMPFILE
200*9e564957SAndroid Build Coastguard Worker  *
201*9e564957SAndroid Build Coastguard Worker  *  7.38
202*9e564957SAndroid Build Coastguard Worker  *  - add FUSE_EXPIRE_ONLY flag to fuse_notify_inval_entry
203*9e564957SAndroid Build Coastguard Worker  *  - add FOPEN_PARALLEL_DIRECT_WRITES
204*9e564957SAndroid Build Coastguard Worker  *  - add total_extlen to fuse_in_header
205*9e564957SAndroid Build Coastguard Worker  *  - add FUSE_MAX_NR_SECCTX
206*9e564957SAndroid Build Coastguard Worker  *  - add extension header
207*9e564957SAndroid Build Coastguard Worker  *  - add FUSE_EXT_GROUPS
208*9e564957SAndroid Build Coastguard Worker  *  - add FUSE_CREATE_SUPP_GROUP
209*9e564957SAndroid Build Coastguard Worker  *  - add FUSE_HAS_EXPIRE_ONLY
210*9e564957SAndroid Build Coastguard Worker  *
211*9e564957SAndroid Build Coastguard Worker  *  7.39
212*9e564957SAndroid Build Coastguard Worker  *  - add FUSE_DIRECT_IO_ALLOW_MMAP
213*9e564957SAndroid Build Coastguard Worker  *  - add FUSE_STATX and related structures
214*9e564957SAndroid Build Coastguard Worker  *
215*9e564957SAndroid Build Coastguard Worker  *  7.40
216*9e564957SAndroid Build Coastguard Worker  *  - add max_stack_depth to fuse_init_out, add FUSE_PASSTHROUGH init flag
217*9e564957SAndroid Build Coastguard Worker  *  - add backing_id to fuse_open_out, add FOPEN_PASSTHROUGH open flag
218*9e564957SAndroid Build Coastguard Worker  */
219*9e564957SAndroid Build Coastguard Worker 
220*9e564957SAndroid Build Coastguard Worker #ifndef _LINUX_FUSE_H
221*9e564957SAndroid Build Coastguard Worker #define _LINUX_FUSE_H
222*9e564957SAndroid Build Coastguard Worker 
223*9e564957SAndroid Build Coastguard Worker #ifdef __KERNEL__
224*9e564957SAndroid Build Coastguard Worker #include <linux/types.h>
225*9e564957SAndroid Build Coastguard Worker #else
226*9e564957SAndroid Build Coastguard Worker #include <stdint.h>
227*9e564957SAndroid Build Coastguard Worker #endif
228*9e564957SAndroid Build Coastguard Worker 
229*9e564957SAndroid Build Coastguard Worker /*
230*9e564957SAndroid Build Coastguard Worker  * Version negotiation:
231*9e564957SAndroid Build Coastguard Worker  *
232*9e564957SAndroid Build Coastguard Worker  * Both the kernel and userspace send the version they support in the
233*9e564957SAndroid Build Coastguard Worker  * INIT request and reply respectively.
234*9e564957SAndroid Build Coastguard Worker  *
235*9e564957SAndroid Build Coastguard Worker  * If the major versions match then both shall use the smallest
236*9e564957SAndroid Build Coastguard Worker  * of the two minor versions for communication.
237*9e564957SAndroid Build Coastguard Worker  *
238*9e564957SAndroid Build Coastguard Worker  * If the kernel supports a larger major version, then userspace shall
239*9e564957SAndroid Build Coastguard Worker  * reply with the major version it supports, ignore the rest of the
240*9e564957SAndroid Build Coastguard Worker  * INIT message and expect a new INIT message from the kernel with a
241*9e564957SAndroid Build Coastguard Worker  * matching major version.
242*9e564957SAndroid Build Coastguard Worker  *
243*9e564957SAndroid Build Coastguard Worker  * If the library supports a larger major version, then it shall fall
244*9e564957SAndroid Build Coastguard Worker  * back to the major protocol version sent by the kernel for
245*9e564957SAndroid Build Coastguard Worker  * communication and reply with that major version (and an arbitrary
246*9e564957SAndroid Build Coastguard Worker  * supported minor version).
247*9e564957SAndroid Build Coastguard Worker  */
248*9e564957SAndroid Build Coastguard Worker 
249*9e564957SAndroid Build Coastguard Worker /** Version number of this interface */
250*9e564957SAndroid Build Coastguard Worker #define FUSE_KERNEL_VERSION 7
251*9e564957SAndroid Build Coastguard Worker 
252*9e564957SAndroid Build Coastguard Worker /** Minor version number of this interface */
253*9e564957SAndroid Build Coastguard Worker #define FUSE_KERNEL_MINOR_VERSION 40
254*9e564957SAndroid Build Coastguard Worker 
255*9e564957SAndroid Build Coastguard Worker /** The node ID of the root inode */
256*9e564957SAndroid Build Coastguard Worker #define FUSE_ROOT_ID 1
257*9e564957SAndroid Build Coastguard Worker 
258*9e564957SAndroid Build Coastguard Worker /* Make sure all structures are padded to 64bit boundary, so 32bit
259*9e564957SAndroid Build Coastguard Worker    userspace works under 64bit kernels */
260*9e564957SAndroid Build Coastguard Worker 
261*9e564957SAndroid Build Coastguard Worker struct fuse_attr {
262*9e564957SAndroid Build Coastguard Worker 	uint64_t	ino;
263*9e564957SAndroid Build Coastguard Worker 	uint64_t	size;
264*9e564957SAndroid Build Coastguard Worker 	uint64_t	blocks;
265*9e564957SAndroid Build Coastguard Worker 	uint64_t	atime;
266*9e564957SAndroid Build Coastguard Worker 	uint64_t	mtime;
267*9e564957SAndroid Build Coastguard Worker 	uint64_t	ctime;
268*9e564957SAndroid Build Coastguard Worker 	uint32_t	atimensec;
269*9e564957SAndroid Build Coastguard Worker 	uint32_t	mtimensec;
270*9e564957SAndroid Build Coastguard Worker 	uint32_t	ctimensec;
271*9e564957SAndroid Build Coastguard Worker 	uint32_t	mode;
272*9e564957SAndroid Build Coastguard Worker 	uint32_t	nlink;
273*9e564957SAndroid Build Coastguard Worker 	uint32_t	uid;
274*9e564957SAndroid Build Coastguard Worker 	uint32_t	gid;
275*9e564957SAndroid Build Coastguard Worker 	uint32_t	rdev;
276*9e564957SAndroid Build Coastguard Worker 	uint32_t	blksize;
277*9e564957SAndroid Build Coastguard Worker 	uint32_t	flags;
278*9e564957SAndroid Build Coastguard Worker };
279*9e564957SAndroid Build Coastguard Worker 
280*9e564957SAndroid Build Coastguard Worker /*
281*9e564957SAndroid Build Coastguard Worker  * The following structures are bit-for-bit compatible with the statx(2) ABI in
282*9e564957SAndroid Build Coastguard Worker  * Linux.
283*9e564957SAndroid Build Coastguard Worker  */
284*9e564957SAndroid Build Coastguard Worker struct fuse_sx_time {
285*9e564957SAndroid Build Coastguard Worker 	int64_t		tv_sec;
286*9e564957SAndroid Build Coastguard Worker 	uint32_t	tv_nsec;
287*9e564957SAndroid Build Coastguard Worker 	int32_t		__reserved;
288*9e564957SAndroid Build Coastguard Worker };
289*9e564957SAndroid Build Coastguard Worker 
290*9e564957SAndroid Build Coastguard Worker struct fuse_statx {
291*9e564957SAndroid Build Coastguard Worker 	uint32_t	mask;
292*9e564957SAndroid Build Coastguard Worker 	uint32_t	blksize;
293*9e564957SAndroid Build Coastguard Worker 	uint64_t	attributes;
294*9e564957SAndroid Build Coastguard Worker 	uint32_t	nlink;
295*9e564957SAndroid Build Coastguard Worker 	uint32_t	uid;
296*9e564957SAndroid Build Coastguard Worker 	uint32_t	gid;
297*9e564957SAndroid Build Coastguard Worker 	uint16_t	mode;
298*9e564957SAndroid Build Coastguard Worker 	uint16_t	__spare0[1];
299*9e564957SAndroid Build Coastguard Worker 	uint64_t	ino;
300*9e564957SAndroid Build Coastguard Worker 	uint64_t	size;
301*9e564957SAndroid Build Coastguard Worker 	uint64_t	blocks;
302*9e564957SAndroid Build Coastguard Worker 	uint64_t	attributes_mask;
303*9e564957SAndroid Build Coastguard Worker 	struct fuse_sx_time	atime;
304*9e564957SAndroid Build Coastguard Worker 	struct fuse_sx_time	btime;
305*9e564957SAndroid Build Coastguard Worker 	struct fuse_sx_time	ctime;
306*9e564957SAndroid Build Coastguard Worker 	struct fuse_sx_time	mtime;
307*9e564957SAndroid Build Coastguard Worker 	uint32_t	rdev_major;
308*9e564957SAndroid Build Coastguard Worker 	uint32_t	rdev_minor;
309*9e564957SAndroid Build Coastguard Worker 	uint32_t	dev_major;
310*9e564957SAndroid Build Coastguard Worker 	uint32_t	dev_minor;
311*9e564957SAndroid Build Coastguard Worker 	uint64_t	__spare2[14];
312*9e564957SAndroid Build Coastguard Worker };
313*9e564957SAndroid Build Coastguard Worker 
314*9e564957SAndroid Build Coastguard Worker struct fuse_kstatfs {
315*9e564957SAndroid Build Coastguard Worker 	uint64_t	blocks;
316*9e564957SAndroid Build Coastguard Worker 	uint64_t	bfree;
317*9e564957SAndroid Build Coastguard Worker 	uint64_t	bavail;
318*9e564957SAndroid Build Coastguard Worker 	uint64_t	files;
319*9e564957SAndroid Build Coastguard Worker 	uint64_t	ffree;
320*9e564957SAndroid Build Coastguard Worker 	uint32_t	bsize;
321*9e564957SAndroid Build Coastguard Worker 	uint32_t	namelen;
322*9e564957SAndroid Build Coastguard Worker 	uint32_t	frsize;
323*9e564957SAndroid Build Coastguard Worker 	uint32_t	padding;
324*9e564957SAndroid Build Coastguard Worker 	uint32_t	spare[6];
325*9e564957SAndroid Build Coastguard Worker };
326*9e564957SAndroid Build Coastguard Worker 
327*9e564957SAndroid Build Coastguard Worker struct fuse_file_lock {
328*9e564957SAndroid Build Coastguard Worker 	uint64_t	start;
329*9e564957SAndroid Build Coastguard Worker 	uint64_t	end;
330*9e564957SAndroid Build Coastguard Worker 	uint32_t	type;
331*9e564957SAndroid Build Coastguard Worker 	uint32_t	pid; /* tgid */
332*9e564957SAndroid Build Coastguard Worker };
333*9e564957SAndroid Build Coastguard Worker 
334*9e564957SAndroid Build Coastguard Worker /**
335*9e564957SAndroid Build Coastguard Worker  * Bitmasks for fuse_setattr_in.valid
336*9e564957SAndroid Build Coastguard Worker  */
337*9e564957SAndroid Build Coastguard Worker #define FATTR_MODE	(1 << 0)
338*9e564957SAndroid Build Coastguard Worker #define FATTR_UID	(1 << 1)
339*9e564957SAndroid Build Coastguard Worker #define FATTR_GID	(1 << 2)
340*9e564957SAndroid Build Coastguard Worker #define FATTR_SIZE	(1 << 3)
341*9e564957SAndroid Build Coastguard Worker #define FATTR_ATIME	(1 << 4)
342*9e564957SAndroid Build Coastguard Worker #define FATTR_MTIME	(1 << 5)
343*9e564957SAndroid Build Coastguard Worker #define FATTR_FH	(1 << 6)
344*9e564957SAndroid Build Coastguard Worker #define FATTR_ATIME_NOW	(1 << 7)
345*9e564957SAndroid Build Coastguard Worker #define FATTR_MTIME_NOW	(1 << 8)
346*9e564957SAndroid Build Coastguard Worker #define FATTR_LOCKOWNER	(1 << 9)
347*9e564957SAndroid Build Coastguard Worker #define FATTR_CTIME	(1 << 10)
348*9e564957SAndroid Build Coastguard Worker #define FATTR_KILL_SUIDGID	(1 << 11)
349*9e564957SAndroid Build Coastguard Worker 
350*9e564957SAndroid Build Coastguard Worker /**
351*9e564957SAndroid Build Coastguard Worker  * Flags returned by the OPEN request
352*9e564957SAndroid Build Coastguard Worker  *
353*9e564957SAndroid Build Coastguard Worker  * FOPEN_DIRECT_IO: bypass page cache for this open file
354*9e564957SAndroid Build Coastguard Worker  * FOPEN_KEEP_CACHE: don't invalidate the data cache on open
355*9e564957SAndroid Build Coastguard Worker  * FOPEN_NONSEEKABLE: the file is not seekable
356*9e564957SAndroid Build Coastguard Worker  * FOPEN_CACHE_DIR: allow caching this directory
357*9e564957SAndroid Build Coastguard Worker  * FOPEN_STREAM: the file is stream-like (no file position at all)
358*9e564957SAndroid Build Coastguard Worker  * FOPEN_NOFLUSH: don't flush data cache on close (unless FUSE_WRITEBACK_CACHE)
359*9e564957SAndroid Build Coastguard Worker  * FOPEN_PARALLEL_DIRECT_WRITES: Allow concurrent direct writes on the same inode
360*9e564957SAndroid Build Coastguard Worker  * FOPEN_PASSTHROUGH: passthrough read/write operations for this open file
361*9e564957SAndroid Build Coastguard Worker  */
362*9e564957SAndroid Build Coastguard Worker #define FOPEN_DIRECT_IO		(1 << 0)
363*9e564957SAndroid Build Coastguard Worker #define FOPEN_KEEP_CACHE	(1 << 1)
364*9e564957SAndroid Build Coastguard Worker #define FOPEN_NONSEEKABLE	(1 << 2)
365*9e564957SAndroid Build Coastguard Worker #define FOPEN_CACHE_DIR		(1 << 3)
366*9e564957SAndroid Build Coastguard Worker #define FOPEN_STREAM		(1 << 4)
367*9e564957SAndroid Build Coastguard Worker #define FOPEN_NOFLUSH		(1 << 5)
368*9e564957SAndroid Build Coastguard Worker #define FOPEN_PARALLEL_DIRECT_WRITES	(1 << 6)
369*9e564957SAndroid Build Coastguard Worker #define FOPEN_PASSTHROUGH	(1 << 7)
370*9e564957SAndroid Build Coastguard Worker 
371*9e564957SAndroid Build Coastguard Worker /**
372*9e564957SAndroid Build Coastguard Worker  * INIT request/reply flags
373*9e564957SAndroid Build Coastguard Worker  *
374*9e564957SAndroid Build Coastguard Worker  * FUSE_ASYNC_READ: asynchronous read requests
375*9e564957SAndroid Build Coastguard Worker  * FUSE_POSIX_LOCKS: remote locking for POSIX file locks
376*9e564957SAndroid Build Coastguard Worker  * FUSE_FILE_OPS: kernel sends file handle for fstat, etc... (not yet supported)
377*9e564957SAndroid Build Coastguard Worker  * FUSE_ATOMIC_O_TRUNC: handles the O_TRUNC open flag in the filesystem
378*9e564957SAndroid Build Coastguard Worker  * FUSE_EXPORT_SUPPORT: filesystem handles lookups of "." and ".."
379*9e564957SAndroid Build Coastguard Worker  * FUSE_BIG_WRITES: filesystem can handle write size larger than 4kB
380*9e564957SAndroid Build Coastguard Worker  * FUSE_DONT_MASK: don't apply umask to file mode on create operations
381*9e564957SAndroid Build Coastguard Worker  * FUSE_SPLICE_WRITE: kernel supports splice write on the device
382*9e564957SAndroid Build Coastguard Worker  * FUSE_SPLICE_MOVE: kernel supports splice move on the device
383*9e564957SAndroid Build Coastguard Worker  * FUSE_SPLICE_READ: kernel supports splice read on the device
384*9e564957SAndroid Build Coastguard Worker  * FUSE_FLOCK_LOCKS: remote locking for BSD style file locks
385*9e564957SAndroid Build Coastguard Worker  * FUSE_HAS_IOCTL_DIR: kernel supports ioctl on directories
386*9e564957SAndroid Build Coastguard Worker  * FUSE_AUTO_INVAL_DATA: automatically invalidate cached pages
387*9e564957SAndroid Build Coastguard Worker  * FUSE_DO_READDIRPLUS: do READDIRPLUS (READDIR+LOOKUP in one)
388*9e564957SAndroid Build Coastguard Worker  * FUSE_READDIRPLUS_AUTO: adaptive readdirplus
389*9e564957SAndroid Build Coastguard Worker  * FUSE_ASYNC_DIO: asynchronous direct I/O submission
390*9e564957SAndroid Build Coastguard Worker  * FUSE_WRITEBACK_CACHE: use writeback cache for buffered writes
391*9e564957SAndroid Build Coastguard Worker  * FUSE_NO_OPEN_SUPPORT: kernel supports zero-message opens
392*9e564957SAndroid Build Coastguard Worker  * FUSE_PARALLEL_DIROPS: allow parallel lookups and readdir
393*9e564957SAndroid Build Coastguard Worker  * FUSE_HANDLE_KILLPRIV: fs handles killing suid/sgid/cap on write/chown/trunc
394*9e564957SAndroid Build Coastguard Worker  * FUSE_POSIX_ACL: filesystem supports posix acls
395*9e564957SAndroid Build Coastguard Worker  * FUSE_ABORT_ERROR: reading the device after abort returns ECONNABORTED
396*9e564957SAndroid Build Coastguard Worker  * FUSE_MAX_PAGES: init_out.max_pages contains the max number of req pages
397*9e564957SAndroid Build Coastguard Worker  * FUSE_CACHE_SYMLINKS: cache READLINK responses
398*9e564957SAndroid Build Coastguard Worker  * FUSE_NO_OPENDIR_SUPPORT: kernel supports zero-message opendir
399*9e564957SAndroid Build Coastguard Worker  * FUSE_EXPLICIT_INVAL_DATA: only invalidate cached pages on explicit request
400*9e564957SAndroid Build Coastguard Worker  * FUSE_MAP_ALIGNMENT: init_out.map_alignment contains log2(byte alignment) for
401*9e564957SAndroid Build Coastguard Worker  *		       foffset and moffset fields in struct
402*9e564957SAndroid Build Coastguard Worker  *		       fuse_setupmapping_out and fuse_removemapping_one.
403*9e564957SAndroid Build Coastguard Worker  * FUSE_SUBMOUNTS: kernel supports auto-mounting directory submounts
404*9e564957SAndroid Build Coastguard Worker  * FUSE_HANDLE_KILLPRIV_V2: fs kills suid/sgid/cap on write/chown/trunc.
405*9e564957SAndroid Build Coastguard Worker  *			Upon write/truncate suid/sgid is only killed if caller
406*9e564957SAndroid Build Coastguard Worker  *			does not have CAP_FSETID. Additionally upon
407*9e564957SAndroid Build Coastguard Worker  *			write/truncate sgid is killed only if file has group
408*9e564957SAndroid Build Coastguard Worker  *			execute permission. (Same as Linux VFS behavior).
409*9e564957SAndroid Build Coastguard Worker  * FUSE_SETXATTR_EXT:	Server supports extended struct fuse_setxattr_in
410*9e564957SAndroid Build Coastguard Worker  * FUSE_INIT_EXT: extended fuse_init_in request
411*9e564957SAndroid Build Coastguard Worker  * FUSE_INIT_RESERVED: reserved, do not use
412*9e564957SAndroid Build Coastguard Worker  * FUSE_SECURITY_CTX:	add security context to create, mkdir, symlink, and
413*9e564957SAndroid Build Coastguard Worker  *			mknod
414*9e564957SAndroid Build Coastguard Worker  * FUSE_HAS_INODE_DAX:  use per inode DAX
415*9e564957SAndroid Build Coastguard Worker  * FUSE_CREATE_SUPP_GROUP: add supplementary group info to create, mkdir,
416*9e564957SAndroid Build Coastguard Worker  *			symlink and mknod (single group that matches parent)
417*9e564957SAndroid Build Coastguard Worker  * FUSE_HAS_EXPIRE_ONLY: kernel supports expiry-only entry invalidation
418*9e564957SAndroid Build Coastguard Worker  * FUSE_DIRECT_IO_ALLOW_MMAP: allow shared mmap in FOPEN_DIRECT_IO mode.
419*9e564957SAndroid Build Coastguard Worker  */
420*9e564957SAndroid Build Coastguard Worker #define FUSE_ASYNC_READ		(1 << 0)
421*9e564957SAndroid Build Coastguard Worker #define FUSE_POSIX_LOCKS	(1 << 1)
422*9e564957SAndroid Build Coastguard Worker #define FUSE_FILE_OPS		(1 << 2)
423*9e564957SAndroid Build Coastguard Worker #define FUSE_ATOMIC_O_TRUNC	(1 << 3)
424*9e564957SAndroid Build Coastguard Worker #define FUSE_EXPORT_SUPPORT	(1 << 4)
425*9e564957SAndroid Build Coastguard Worker #define FUSE_BIG_WRITES		(1 << 5)
426*9e564957SAndroid Build Coastguard Worker #define FUSE_DONT_MASK		(1 << 6)
427*9e564957SAndroid Build Coastguard Worker #define FUSE_SPLICE_WRITE	(1 << 7)
428*9e564957SAndroid Build Coastguard Worker #define FUSE_SPLICE_MOVE	(1 << 8)
429*9e564957SAndroid Build Coastguard Worker #define FUSE_SPLICE_READ	(1 << 9)
430*9e564957SAndroid Build Coastguard Worker #define FUSE_FLOCK_LOCKS	(1 << 10)
431*9e564957SAndroid Build Coastguard Worker #define FUSE_HAS_IOCTL_DIR	(1 << 11)
432*9e564957SAndroid Build Coastguard Worker #define FUSE_AUTO_INVAL_DATA	(1 << 12)
433*9e564957SAndroid Build Coastguard Worker #define FUSE_DO_READDIRPLUS	(1 << 13)
434*9e564957SAndroid Build Coastguard Worker #define FUSE_READDIRPLUS_AUTO	(1 << 14)
435*9e564957SAndroid Build Coastguard Worker #define FUSE_ASYNC_DIO		(1 << 15)
436*9e564957SAndroid Build Coastguard Worker #define FUSE_WRITEBACK_CACHE	(1 << 16)
437*9e564957SAndroid Build Coastguard Worker #define FUSE_NO_OPEN_SUPPORT	(1 << 17)
438*9e564957SAndroid Build Coastguard Worker #define FUSE_PARALLEL_DIROPS    (1 << 18)
439*9e564957SAndroid Build Coastguard Worker #define FUSE_HANDLE_KILLPRIV	(1 << 19)
440*9e564957SAndroid Build Coastguard Worker #define FUSE_POSIX_ACL		(1 << 20)
441*9e564957SAndroid Build Coastguard Worker #define FUSE_ABORT_ERROR	(1 << 21)
442*9e564957SAndroid Build Coastguard Worker #define FUSE_MAX_PAGES		(1 << 22)
443*9e564957SAndroid Build Coastguard Worker #define FUSE_CACHE_SYMLINKS	(1 << 23)
444*9e564957SAndroid Build Coastguard Worker #define FUSE_NO_OPENDIR_SUPPORT (1 << 24)
445*9e564957SAndroid Build Coastguard Worker #define FUSE_EXPLICIT_INVAL_DATA (1 << 25)
446*9e564957SAndroid Build Coastguard Worker #define FUSE_MAP_ALIGNMENT	(1 << 26)
447*9e564957SAndroid Build Coastguard Worker #define FUSE_SUBMOUNTS		(1 << 27)
448*9e564957SAndroid Build Coastguard Worker #define FUSE_HANDLE_KILLPRIV_V2	(1 << 28)
449*9e564957SAndroid Build Coastguard Worker #define FUSE_SETXATTR_EXT	(1 << 29)
450*9e564957SAndroid Build Coastguard Worker #define FUSE_INIT_EXT		(1 << 30)
451*9e564957SAndroid Build Coastguard Worker #define FUSE_INIT_RESERVED	(1 << 31)
452*9e564957SAndroid Build Coastguard Worker /* bits 32..63 get shifted down 32 bits into the flags2 field */
453*9e564957SAndroid Build Coastguard Worker #define FUSE_SECURITY_CTX	(1ULL << 32)
454*9e564957SAndroid Build Coastguard Worker #define FUSE_HAS_INODE_DAX	(1ULL << 33)
455*9e564957SAndroid Build Coastguard Worker #define FUSE_CREATE_SUPP_GROUP	(1ULL << 34)
456*9e564957SAndroid Build Coastguard Worker #define FUSE_HAS_EXPIRE_ONLY	(1ULL << 35)
457*9e564957SAndroid Build Coastguard Worker #define FUSE_DIRECT_IO_ALLOW_MMAP (1ULL << 36)
458*9e564957SAndroid Build Coastguard Worker #define FUSE_PASSTHROUGH_UPSTREAM	(1ULL << 37)
459*9e564957SAndroid Build Coastguard Worker 
460*9e564957SAndroid Build Coastguard Worker /* Obsolete alias for FUSE_DIRECT_IO_ALLOW_MMAP */
461*9e564957SAndroid Build Coastguard Worker #define FUSE_DIRECT_IO_RELAX	FUSE_DIRECT_IO_ALLOW_MMAP
462*9e564957SAndroid Build Coastguard Worker 
463*9e564957SAndroid Build Coastguard Worker /*
464*9e564957SAndroid Build Coastguard Worker  * For FUSE < 7.36 FUSE_PASSTHROUGH has value (1 << 31).
465*9e564957SAndroid Build Coastguard Worker  * This condition check is not really required, but would prevent having a
466*9e564957SAndroid Build Coastguard Worker  * broken commit in the tree.
467*9e564957SAndroid Build Coastguard Worker  */
468*9e564957SAndroid Build Coastguard Worker #if FUSE_KERNEL_VERSION > 7 ||                                                 \
469*9e564957SAndroid Build Coastguard Worker 	(FUSE_KERNEL_VERSION == 7 && FUSE_KERNEL_MINOR_VERSION >= 36)
470*9e564957SAndroid Build Coastguard Worker #define FUSE_PASSTHROUGH (1ULL << 63)
471*9e564957SAndroid Build Coastguard Worker #else
472*9e564957SAndroid Build Coastguard Worker #define FUSE_PASSTHROUGH (1 << 31)
473*9e564957SAndroid Build Coastguard Worker #endif
474*9e564957SAndroid Build Coastguard Worker 
475*9e564957SAndroid Build Coastguard Worker /**
476*9e564957SAndroid Build Coastguard Worker  * CUSE INIT request/reply flags
477*9e564957SAndroid Build Coastguard Worker  *
478*9e564957SAndroid Build Coastguard Worker  * CUSE_UNRESTRICTED_IOCTL:  use unrestricted ioctl
479*9e564957SAndroid Build Coastguard Worker  */
480*9e564957SAndroid Build Coastguard Worker #define CUSE_UNRESTRICTED_IOCTL	(1 << 0)
481*9e564957SAndroid Build Coastguard Worker 
482*9e564957SAndroid Build Coastguard Worker /**
483*9e564957SAndroid Build Coastguard Worker  * Release flags
484*9e564957SAndroid Build Coastguard Worker  */
485*9e564957SAndroid Build Coastguard Worker #define FUSE_RELEASE_FLUSH	(1 << 0)
486*9e564957SAndroid Build Coastguard Worker #define FUSE_RELEASE_FLOCK_UNLOCK	(1 << 1)
487*9e564957SAndroid Build Coastguard Worker 
488*9e564957SAndroid Build Coastguard Worker /**
489*9e564957SAndroid Build Coastguard Worker  * Getattr flags
490*9e564957SAndroid Build Coastguard Worker  */
491*9e564957SAndroid Build Coastguard Worker #define FUSE_GETATTR_FH		(1 << 0)
492*9e564957SAndroid Build Coastguard Worker 
493*9e564957SAndroid Build Coastguard Worker /**
494*9e564957SAndroid Build Coastguard Worker  * Lock flags
495*9e564957SAndroid Build Coastguard Worker  */
496*9e564957SAndroid Build Coastguard Worker #define FUSE_LK_FLOCK		(1 << 0)
497*9e564957SAndroid Build Coastguard Worker 
498*9e564957SAndroid Build Coastguard Worker /**
499*9e564957SAndroid Build Coastguard Worker  * WRITE flags
500*9e564957SAndroid Build Coastguard Worker  *
501*9e564957SAndroid Build Coastguard Worker  * FUSE_WRITE_CACHE: delayed write from page cache, file handle is guessed
502*9e564957SAndroid Build Coastguard Worker  * FUSE_WRITE_LOCKOWNER: lock_owner field is valid
503*9e564957SAndroid Build Coastguard Worker  * FUSE_WRITE_KILL_SUIDGID: kill suid and sgid bits
504*9e564957SAndroid Build Coastguard Worker  */
505*9e564957SAndroid Build Coastguard Worker #define FUSE_WRITE_CACHE	(1 << 0)
506*9e564957SAndroid Build Coastguard Worker #define FUSE_WRITE_LOCKOWNER	(1 << 1)
507*9e564957SAndroid Build Coastguard Worker #define FUSE_WRITE_KILL_SUIDGID (1 << 2)
508*9e564957SAndroid Build Coastguard Worker 
509*9e564957SAndroid Build Coastguard Worker /* Obsolete alias; this flag implies killing suid/sgid only. */
510*9e564957SAndroid Build Coastguard Worker #define FUSE_WRITE_KILL_PRIV	FUSE_WRITE_KILL_SUIDGID
511*9e564957SAndroid Build Coastguard Worker 
512*9e564957SAndroid Build Coastguard Worker /**
513*9e564957SAndroid Build Coastguard Worker  * Read flags
514*9e564957SAndroid Build Coastguard Worker  */
515*9e564957SAndroid Build Coastguard Worker #define FUSE_READ_LOCKOWNER	(1 << 1)
516*9e564957SAndroid Build Coastguard Worker 
517*9e564957SAndroid Build Coastguard Worker /**
518*9e564957SAndroid Build Coastguard Worker  * Ioctl flags
519*9e564957SAndroid Build Coastguard Worker  *
520*9e564957SAndroid Build Coastguard Worker  * FUSE_IOCTL_COMPAT: 32bit compat ioctl on 64bit machine
521*9e564957SAndroid Build Coastguard Worker  * FUSE_IOCTL_UNRESTRICTED: not restricted to well-formed ioctls, retry allowed
522*9e564957SAndroid Build Coastguard Worker  * FUSE_IOCTL_RETRY: retry with new iovecs
523*9e564957SAndroid Build Coastguard Worker  * FUSE_IOCTL_32BIT: 32bit ioctl
524*9e564957SAndroid Build Coastguard Worker  * FUSE_IOCTL_DIR: is a directory
525*9e564957SAndroid Build Coastguard Worker  * FUSE_IOCTL_COMPAT_X32: x32 compat ioctl on 64bit machine (64bit time_t)
526*9e564957SAndroid Build Coastguard Worker  *
527*9e564957SAndroid Build Coastguard Worker  * FUSE_IOCTL_MAX_IOV: maximum of in_iovecs + out_iovecs
528*9e564957SAndroid Build Coastguard Worker  */
529*9e564957SAndroid Build Coastguard Worker #define FUSE_IOCTL_COMPAT	(1 << 0)
530*9e564957SAndroid Build Coastguard Worker #define FUSE_IOCTL_UNRESTRICTED	(1 << 1)
531*9e564957SAndroid Build Coastguard Worker #define FUSE_IOCTL_RETRY	(1 << 2)
532*9e564957SAndroid Build Coastguard Worker #define FUSE_IOCTL_32BIT	(1 << 3)
533*9e564957SAndroid Build Coastguard Worker #define FUSE_IOCTL_DIR		(1 << 4)
534*9e564957SAndroid Build Coastguard Worker #define FUSE_IOCTL_COMPAT_X32	(1 << 5)
535*9e564957SAndroid Build Coastguard Worker 
536*9e564957SAndroid Build Coastguard Worker #define FUSE_IOCTL_MAX_IOV	256
537*9e564957SAndroid Build Coastguard Worker 
538*9e564957SAndroid Build Coastguard Worker /**
539*9e564957SAndroid Build Coastguard Worker  * Poll flags
540*9e564957SAndroid Build Coastguard Worker  *
541*9e564957SAndroid Build Coastguard Worker  * FUSE_POLL_SCHEDULE_NOTIFY: request poll notify
542*9e564957SAndroid Build Coastguard Worker  */
543*9e564957SAndroid Build Coastguard Worker #define FUSE_POLL_SCHEDULE_NOTIFY (1 << 0)
544*9e564957SAndroid Build Coastguard Worker 
545*9e564957SAndroid Build Coastguard Worker /**
546*9e564957SAndroid Build Coastguard Worker  * Fsync flags
547*9e564957SAndroid Build Coastguard Worker  *
548*9e564957SAndroid Build Coastguard Worker  * FUSE_FSYNC_FDATASYNC: Sync data only, not metadata
549*9e564957SAndroid Build Coastguard Worker  */
550*9e564957SAndroid Build Coastguard Worker #define FUSE_FSYNC_FDATASYNC	(1 << 0)
551*9e564957SAndroid Build Coastguard Worker 
552*9e564957SAndroid Build Coastguard Worker /**
553*9e564957SAndroid Build Coastguard Worker  * fuse_attr flags
554*9e564957SAndroid Build Coastguard Worker  *
555*9e564957SAndroid Build Coastguard Worker  * FUSE_ATTR_SUBMOUNT: Object is a submount root
556*9e564957SAndroid Build Coastguard Worker  * FUSE_ATTR_DAX: Enable DAX for this file in per inode DAX mode
557*9e564957SAndroid Build Coastguard Worker  */
558*9e564957SAndroid Build Coastguard Worker #define FUSE_ATTR_SUBMOUNT      (1 << 0)
559*9e564957SAndroid Build Coastguard Worker #define FUSE_ATTR_DAX		(1 << 1)
560*9e564957SAndroid Build Coastguard Worker 
561*9e564957SAndroid Build Coastguard Worker /**
562*9e564957SAndroid Build Coastguard Worker  * Open flags
563*9e564957SAndroid Build Coastguard Worker  * FUSE_OPEN_KILL_SUIDGID: Kill suid and sgid if executable
564*9e564957SAndroid Build Coastguard Worker  */
565*9e564957SAndroid Build Coastguard Worker #define FUSE_OPEN_KILL_SUIDGID	(1 << 0)
566*9e564957SAndroid Build Coastguard Worker 
567*9e564957SAndroid Build Coastguard Worker /**
568*9e564957SAndroid Build Coastguard Worker  * setxattr flags
569*9e564957SAndroid Build Coastguard Worker  * FUSE_SETXATTR_ACL_KILL_SGID: Clear SGID when system.posix_acl_access is set
570*9e564957SAndroid Build Coastguard Worker  */
571*9e564957SAndroid Build Coastguard Worker #define FUSE_SETXATTR_ACL_KILL_SGID	(1 << 0)
572*9e564957SAndroid Build Coastguard Worker 
573*9e564957SAndroid Build Coastguard Worker /**
574*9e564957SAndroid Build Coastguard Worker  * notify_inval_entry flags
575*9e564957SAndroid Build Coastguard Worker  * FUSE_EXPIRE_ONLY
576*9e564957SAndroid Build Coastguard Worker  */
577*9e564957SAndroid Build Coastguard Worker #define FUSE_EXPIRE_ONLY		(1 << 0)
578*9e564957SAndroid Build Coastguard Worker 
579*9e564957SAndroid Build Coastguard Worker /**
580*9e564957SAndroid Build Coastguard Worker  * extension type
581*9e564957SAndroid Build Coastguard Worker  * FUSE_MAX_NR_SECCTX: maximum value of &fuse_secctx_header.nr_secctx
582*9e564957SAndroid Build Coastguard Worker  * FUSE_EXT_GROUPS: &fuse_supp_groups extension
583*9e564957SAndroid Build Coastguard Worker  */
584*9e564957SAndroid Build Coastguard Worker enum fuse_ext_type {
585*9e564957SAndroid Build Coastguard Worker 	/* Types 0..31 are reserved for fuse_secctx_header */
586*9e564957SAndroid Build Coastguard Worker 	FUSE_MAX_NR_SECCTX	= 31,
587*9e564957SAndroid Build Coastguard Worker 	FUSE_EXT_GROUPS		= 32,
588*9e564957SAndroid Build Coastguard Worker };
589*9e564957SAndroid Build Coastguard Worker 
590*9e564957SAndroid Build Coastguard Worker enum fuse_opcode {
591*9e564957SAndroid Build Coastguard Worker 	FUSE_LOOKUP		= 1,
592*9e564957SAndroid Build Coastguard Worker 	FUSE_FORGET		= 2,  /* no reply */
593*9e564957SAndroid Build Coastguard Worker 	FUSE_GETATTR		= 3,
594*9e564957SAndroid Build Coastguard Worker 	FUSE_SETATTR		= 4,
595*9e564957SAndroid Build Coastguard Worker 	FUSE_READLINK		= 5,
596*9e564957SAndroid Build Coastguard Worker 	FUSE_SYMLINK		= 6,
597*9e564957SAndroid Build Coastguard Worker 	FUSE_MKNOD		= 8,
598*9e564957SAndroid Build Coastguard Worker 	FUSE_MKDIR		= 9,
599*9e564957SAndroid Build Coastguard Worker 	FUSE_UNLINK		= 10,
600*9e564957SAndroid Build Coastguard Worker 	FUSE_RMDIR		= 11,
601*9e564957SAndroid Build Coastguard Worker 	FUSE_RENAME		= 12,
602*9e564957SAndroid Build Coastguard Worker 	FUSE_LINK		= 13,
603*9e564957SAndroid Build Coastguard Worker 	FUSE_OPEN		= 14,
604*9e564957SAndroid Build Coastguard Worker 	FUSE_READ		= 15,
605*9e564957SAndroid Build Coastguard Worker 	FUSE_WRITE		= 16,
606*9e564957SAndroid Build Coastguard Worker 	FUSE_STATFS		= 17,
607*9e564957SAndroid Build Coastguard Worker 	FUSE_RELEASE		= 18,
608*9e564957SAndroid Build Coastguard Worker 	FUSE_FSYNC		= 20,
609*9e564957SAndroid Build Coastguard Worker 	FUSE_SETXATTR		= 21,
610*9e564957SAndroid Build Coastguard Worker 	FUSE_GETXATTR		= 22,
611*9e564957SAndroid Build Coastguard Worker 	FUSE_LISTXATTR		= 23,
612*9e564957SAndroid Build Coastguard Worker 	FUSE_REMOVEXATTR	= 24,
613*9e564957SAndroid Build Coastguard Worker 	FUSE_FLUSH		= 25,
614*9e564957SAndroid Build Coastguard Worker 	FUSE_INIT		= 26,
615*9e564957SAndroid Build Coastguard Worker 	FUSE_OPENDIR		= 27,
616*9e564957SAndroid Build Coastguard Worker 	FUSE_READDIR		= 28,
617*9e564957SAndroid Build Coastguard Worker 	FUSE_RELEASEDIR		= 29,
618*9e564957SAndroid Build Coastguard Worker 	FUSE_FSYNCDIR		= 30,
619*9e564957SAndroid Build Coastguard Worker 	FUSE_GETLK		= 31,
620*9e564957SAndroid Build Coastguard Worker 	FUSE_SETLK		= 32,
621*9e564957SAndroid Build Coastguard Worker 	FUSE_SETLKW		= 33,
622*9e564957SAndroid Build Coastguard Worker 	FUSE_ACCESS		= 34,
623*9e564957SAndroid Build Coastguard Worker 	FUSE_CREATE		= 35,
624*9e564957SAndroid Build Coastguard Worker 	FUSE_INTERRUPT		= 36,
625*9e564957SAndroid Build Coastguard Worker 	FUSE_BMAP		= 37,
626*9e564957SAndroid Build Coastguard Worker 	FUSE_DESTROY		= 38,
627*9e564957SAndroid Build Coastguard Worker 	FUSE_IOCTL		= 39,
628*9e564957SAndroid Build Coastguard Worker 	FUSE_POLL		= 40,
629*9e564957SAndroid Build Coastguard Worker 	FUSE_NOTIFY_REPLY	= 41,
630*9e564957SAndroid Build Coastguard Worker 	FUSE_BATCH_FORGET	= 42,
631*9e564957SAndroid Build Coastguard Worker 	FUSE_FALLOCATE		= 43,
632*9e564957SAndroid Build Coastguard Worker 	FUSE_READDIRPLUS	= 44,
633*9e564957SAndroid Build Coastguard Worker 	FUSE_RENAME2		= 45,
634*9e564957SAndroid Build Coastguard Worker 	FUSE_LSEEK		= 46,
635*9e564957SAndroid Build Coastguard Worker 	FUSE_COPY_FILE_RANGE	= 47,
636*9e564957SAndroid Build Coastguard Worker 	FUSE_SETUPMAPPING	= 48,
637*9e564957SAndroid Build Coastguard Worker 	FUSE_REMOVEMAPPING	= 49,
638*9e564957SAndroid Build Coastguard Worker 	FUSE_SYNCFS		= 50,
639*9e564957SAndroid Build Coastguard Worker 	FUSE_TMPFILE		= 51,
640*9e564957SAndroid Build Coastguard Worker 	FUSE_STATX		= 52,
641*9e564957SAndroid Build Coastguard Worker 
642*9e564957SAndroid Build Coastguard Worker 	/* Android specific operations */
643*9e564957SAndroid Build Coastguard Worker 	FUSE_CANONICAL_PATH     = 2016,
644*9e564957SAndroid Build Coastguard Worker 
645*9e564957SAndroid Build Coastguard Worker 	/* CUSE specific operations */
646*9e564957SAndroid Build Coastguard Worker 	CUSE_INIT		= 4096,
647*9e564957SAndroid Build Coastguard Worker 
648*9e564957SAndroid Build Coastguard Worker 	/* Reserved opcodes: helpful to detect structure endian-ness */
649*9e564957SAndroid Build Coastguard Worker 	CUSE_INIT_BSWAP_RESERVED	= 1048576,	/* CUSE_INIT << 8 */
650*9e564957SAndroid Build Coastguard Worker 	FUSE_INIT_BSWAP_RESERVED	= 436207616,	/* FUSE_INIT << 24 */
651*9e564957SAndroid Build Coastguard Worker };
652*9e564957SAndroid Build Coastguard Worker 
653*9e564957SAndroid Build Coastguard Worker enum fuse_notify_code {
654*9e564957SAndroid Build Coastguard Worker 	FUSE_NOTIFY_POLL   = 1,
655*9e564957SAndroid Build Coastguard Worker 	FUSE_NOTIFY_INVAL_INODE = 2,
656*9e564957SAndroid Build Coastguard Worker 	FUSE_NOTIFY_INVAL_ENTRY = 3,
657*9e564957SAndroid Build Coastguard Worker 	FUSE_NOTIFY_STORE = 4,
658*9e564957SAndroid Build Coastguard Worker 	FUSE_NOTIFY_RETRIEVE = 5,
659*9e564957SAndroid Build Coastguard Worker 	FUSE_NOTIFY_DELETE = 6,
660*9e564957SAndroid Build Coastguard Worker 	FUSE_NOTIFY_CODE_MAX,
661*9e564957SAndroid Build Coastguard Worker };
662*9e564957SAndroid Build Coastguard Worker 
663*9e564957SAndroid Build Coastguard Worker /* The read buffer is required to be at least 8k, but may be much larger */
664*9e564957SAndroid Build Coastguard Worker #define FUSE_MIN_READ_BUFFER 8192
665*9e564957SAndroid Build Coastguard Worker 
666*9e564957SAndroid Build Coastguard Worker #define FUSE_COMPAT_ENTRY_OUT_SIZE 120
667*9e564957SAndroid Build Coastguard Worker 
668*9e564957SAndroid Build Coastguard Worker struct fuse_entry_out {
669*9e564957SAndroid Build Coastguard Worker 	uint64_t	nodeid;		/* Inode ID */
670*9e564957SAndroid Build Coastguard Worker 	uint64_t	generation;	/* Inode generation: nodeid:gen must
671*9e564957SAndroid Build Coastguard Worker 					   be unique for the fs's lifetime */
672*9e564957SAndroid Build Coastguard Worker 	uint64_t	entry_valid;	/* Cache timeout for the name */
673*9e564957SAndroid Build Coastguard Worker 	uint64_t	attr_valid;	/* Cache timeout for the attributes */
674*9e564957SAndroid Build Coastguard Worker 	uint32_t	entry_valid_nsec;
675*9e564957SAndroid Build Coastguard Worker 	uint32_t	attr_valid_nsec;
676*9e564957SAndroid Build Coastguard Worker 	struct fuse_attr attr;
677*9e564957SAndroid Build Coastguard Worker };
678*9e564957SAndroid Build Coastguard Worker 
679*9e564957SAndroid Build Coastguard Worker #define FUSE_ACTION_KEEP        0
680*9e564957SAndroid Build Coastguard Worker #define FUSE_ACTION_REMOVE      1
681*9e564957SAndroid Build Coastguard Worker #define FUSE_ACTION_REPLACE     2
682*9e564957SAndroid Build Coastguard Worker 
683*9e564957SAndroid Build Coastguard Worker struct fuse_entry_bpf_out {
684*9e564957SAndroid Build Coastguard Worker         uint64_t        backing_action;
685*9e564957SAndroid Build Coastguard Worker         uint64_t        backing_fd;
686*9e564957SAndroid Build Coastguard Worker         uint64_t        bpf_action;
687*9e564957SAndroid Build Coastguard Worker         uint64_t        bpf_fd;
688*9e564957SAndroid Build Coastguard Worker };
689*9e564957SAndroid Build Coastguard Worker 
690*9e564957SAndroid Build Coastguard Worker struct fuse_forget_in {
691*9e564957SAndroid Build Coastguard Worker 	uint64_t	nlookup;
692*9e564957SAndroid Build Coastguard Worker };
693*9e564957SAndroid Build Coastguard Worker 
694*9e564957SAndroid Build Coastguard Worker struct fuse_forget_one {
695*9e564957SAndroid Build Coastguard Worker 	uint64_t	nodeid;
696*9e564957SAndroid Build Coastguard Worker 	uint64_t	nlookup;
697*9e564957SAndroid Build Coastguard Worker };
698*9e564957SAndroid Build Coastguard Worker 
699*9e564957SAndroid Build Coastguard Worker struct fuse_batch_forget_in {
700*9e564957SAndroid Build Coastguard Worker 	uint32_t	count;
701*9e564957SAndroid Build Coastguard Worker 	uint32_t	dummy;
702*9e564957SAndroid Build Coastguard Worker };
703*9e564957SAndroid Build Coastguard Worker 
704*9e564957SAndroid Build Coastguard Worker struct fuse_getattr_in {
705*9e564957SAndroid Build Coastguard Worker 	uint32_t	getattr_flags;
706*9e564957SAndroid Build Coastguard Worker 	uint32_t	dummy;
707*9e564957SAndroid Build Coastguard Worker 	uint64_t	fh;
708*9e564957SAndroid Build Coastguard Worker };
709*9e564957SAndroid Build Coastguard Worker 
710*9e564957SAndroid Build Coastguard Worker #define FUSE_COMPAT_ATTR_OUT_SIZE 96
711*9e564957SAndroid Build Coastguard Worker 
712*9e564957SAndroid Build Coastguard Worker struct fuse_attr_out {
713*9e564957SAndroid Build Coastguard Worker 	uint64_t	attr_valid;	/* Cache timeout for the attributes */
714*9e564957SAndroid Build Coastguard Worker 	uint32_t	attr_valid_nsec;
715*9e564957SAndroid Build Coastguard Worker 	uint32_t	dummy;
716*9e564957SAndroid Build Coastguard Worker 	struct fuse_attr attr;
717*9e564957SAndroid Build Coastguard Worker };
718*9e564957SAndroid Build Coastguard Worker 
719*9e564957SAndroid Build Coastguard Worker struct fuse_statx_in {
720*9e564957SAndroid Build Coastguard Worker 	uint32_t	getattr_flags;
721*9e564957SAndroid Build Coastguard Worker 	uint32_t	reserved;
722*9e564957SAndroid Build Coastguard Worker 	uint64_t	fh;
723*9e564957SAndroid Build Coastguard Worker 	uint32_t	sx_flags;
724*9e564957SAndroid Build Coastguard Worker 	uint32_t	sx_mask;
725*9e564957SAndroid Build Coastguard Worker };
726*9e564957SAndroid Build Coastguard Worker 
727*9e564957SAndroid Build Coastguard Worker struct fuse_statx_out {
728*9e564957SAndroid Build Coastguard Worker 	uint64_t	attr_valid;	/* Cache timeout for the attributes */
729*9e564957SAndroid Build Coastguard Worker 	uint32_t	attr_valid_nsec;
730*9e564957SAndroid Build Coastguard Worker 	uint32_t	flags;
731*9e564957SAndroid Build Coastguard Worker 	uint64_t	spare[2];
732*9e564957SAndroid Build Coastguard Worker 	struct fuse_statx stat;
733*9e564957SAndroid Build Coastguard Worker };
734*9e564957SAndroid Build Coastguard Worker 
735*9e564957SAndroid Build Coastguard Worker #define FUSE_COMPAT_MKNOD_IN_SIZE 8
736*9e564957SAndroid Build Coastguard Worker 
737*9e564957SAndroid Build Coastguard Worker struct fuse_mknod_in {
738*9e564957SAndroid Build Coastguard Worker 	uint32_t	mode;
739*9e564957SAndroid Build Coastguard Worker 	uint32_t	rdev;
740*9e564957SAndroid Build Coastguard Worker 	uint32_t	umask;
741*9e564957SAndroid Build Coastguard Worker 	uint32_t	padding;
742*9e564957SAndroid Build Coastguard Worker };
743*9e564957SAndroid Build Coastguard Worker 
744*9e564957SAndroid Build Coastguard Worker struct fuse_mkdir_in {
745*9e564957SAndroid Build Coastguard Worker 	uint32_t	mode;
746*9e564957SAndroid Build Coastguard Worker 	uint32_t	umask;
747*9e564957SAndroid Build Coastguard Worker };
748*9e564957SAndroid Build Coastguard Worker 
749*9e564957SAndroid Build Coastguard Worker struct fuse_rename_in {
750*9e564957SAndroid Build Coastguard Worker 	uint64_t	newdir;
751*9e564957SAndroid Build Coastguard Worker };
752*9e564957SAndroid Build Coastguard Worker 
753*9e564957SAndroid Build Coastguard Worker struct fuse_rename2_in {
754*9e564957SAndroid Build Coastguard Worker 	uint64_t	newdir;
755*9e564957SAndroid Build Coastguard Worker 	uint32_t	flags;
756*9e564957SAndroid Build Coastguard Worker 	uint32_t	padding;
757*9e564957SAndroid Build Coastguard Worker };
758*9e564957SAndroid Build Coastguard Worker 
759*9e564957SAndroid Build Coastguard Worker struct fuse_link_in {
760*9e564957SAndroid Build Coastguard Worker 	uint64_t	oldnodeid;
761*9e564957SAndroid Build Coastguard Worker };
762*9e564957SAndroid Build Coastguard Worker 
763*9e564957SAndroid Build Coastguard Worker struct fuse_setattr_in {
764*9e564957SAndroid Build Coastguard Worker 	uint32_t	valid;
765*9e564957SAndroid Build Coastguard Worker 	uint32_t	padding;
766*9e564957SAndroid Build Coastguard Worker 	uint64_t	fh;
767*9e564957SAndroid Build Coastguard Worker 	uint64_t	size;
768*9e564957SAndroid Build Coastguard Worker 	uint64_t	lock_owner;
769*9e564957SAndroid Build Coastguard Worker 	uint64_t	atime;
770*9e564957SAndroid Build Coastguard Worker 	uint64_t	mtime;
771*9e564957SAndroid Build Coastguard Worker 	uint64_t	ctime;
772*9e564957SAndroid Build Coastguard Worker 	uint32_t	atimensec;
773*9e564957SAndroid Build Coastguard Worker 	uint32_t	mtimensec;
774*9e564957SAndroid Build Coastguard Worker 	uint32_t	ctimensec;
775*9e564957SAndroid Build Coastguard Worker 	uint32_t	mode;
776*9e564957SAndroid Build Coastguard Worker 	uint32_t	unused4;
777*9e564957SAndroid Build Coastguard Worker 	uint32_t	uid;
778*9e564957SAndroid Build Coastguard Worker 	uint32_t	gid;
779*9e564957SAndroid Build Coastguard Worker 	uint32_t	unused5;
780*9e564957SAndroid Build Coastguard Worker };
781*9e564957SAndroid Build Coastguard Worker 
782*9e564957SAndroid Build Coastguard Worker struct fuse_open_in {
783*9e564957SAndroid Build Coastguard Worker 	uint32_t	flags;
784*9e564957SAndroid Build Coastguard Worker 	uint32_t	open_flags;	/* FUSE_OPEN_... */
785*9e564957SAndroid Build Coastguard Worker };
786*9e564957SAndroid Build Coastguard Worker 
787*9e564957SAndroid Build Coastguard Worker struct fuse_create_in {
788*9e564957SAndroid Build Coastguard Worker 	uint32_t	flags;
789*9e564957SAndroid Build Coastguard Worker 	uint32_t	mode;
790*9e564957SAndroid Build Coastguard Worker 	uint32_t	umask;
791*9e564957SAndroid Build Coastguard Worker 	uint32_t	open_flags;	/* FUSE_OPEN_... */
792*9e564957SAndroid Build Coastguard Worker };
793*9e564957SAndroid Build Coastguard Worker 
794*9e564957SAndroid Build Coastguard Worker struct fuse_open_out {
795*9e564957SAndroid Build Coastguard Worker 	uint64_t	fh;
796*9e564957SAndroid Build Coastguard Worker 	uint32_t	open_flags;
797*9e564957SAndroid Build Coastguard Worker 	union {
798*9e564957SAndroid Build Coastguard Worker 		uint32_t	passthrough_fh;
799*9e564957SAndroid Build Coastguard Worker 		int32_t		backing_id;
800*9e564957SAndroid Build Coastguard Worker 	};
801*9e564957SAndroid Build Coastguard Worker };
802*9e564957SAndroid Build Coastguard Worker 
803*9e564957SAndroid Build Coastguard Worker struct fuse_release_in {
804*9e564957SAndroid Build Coastguard Worker 	uint64_t	fh;
805*9e564957SAndroid Build Coastguard Worker 	uint32_t	flags;
806*9e564957SAndroid Build Coastguard Worker 	uint32_t	release_flags;
807*9e564957SAndroid Build Coastguard Worker 	uint64_t	lock_owner;
808*9e564957SAndroid Build Coastguard Worker };
809*9e564957SAndroid Build Coastguard Worker 
810*9e564957SAndroid Build Coastguard Worker struct fuse_flush_in {
811*9e564957SAndroid Build Coastguard Worker 	uint64_t	fh;
812*9e564957SAndroid Build Coastguard Worker 	uint32_t	unused;
813*9e564957SAndroid Build Coastguard Worker 	uint32_t	padding;
814*9e564957SAndroid Build Coastguard Worker 	uint64_t	lock_owner;
815*9e564957SAndroid Build Coastguard Worker };
816*9e564957SAndroid Build Coastguard Worker 
817*9e564957SAndroid Build Coastguard Worker struct fuse_read_in {
818*9e564957SAndroid Build Coastguard Worker 	uint64_t	fh;
819*9e564957SAndroid Build Coastguard Worker 	uint64_t	offset;
820*9e564957SAndroid Build Coastguard Worker 	uint32_t	size;
821*9e564957SAndroid Build Coastguard Worker 	uint32_t	read_flags;
822*9e564957SAndroid Build Coastguard Worker 	uint64_t	lock_owner;
823*9e564957SAndroid Build Coastguard Worker 	uint32_t	flags;
824*9e564957SAndroid Build Coastguard Worker 	uint32_t	padding;
825*9e564957SAndroid Build Coastguard Worker };
826*9e564957SAndroid Build Coastguard Worker 
827*9e564957SAndroid Build Coastguard Worker struct fuse_read_out {
828*9e564957SAndroid Build Coastguard Worker 	uint64_t offset;
829*9e564957SAndroid Build Coastguard Worker 	uint32_t again;
830*9e564957SAndroid Build Coastguard Worker 	uint32_t padding;
831*9e564957SAndroid Build Coastguard Worker };
832*9e564957SAndroid Build Coastguard Worker 
833*9e564957SAndroid Build Coastguard Worker struct fuse_passthrough_out_v0 {
834*9e564957SAndroid Build Coastguard Worker 	uint32_t	fd;
835*9e564957SAndroid Build Coastguard Worker 	/* For future implementation */
836*9e564957SAndroid Build Coastguard Worker 	uint32_t	len;
837*9e564957SAndroid Build Coastguard Worker 	void *		vec;
838*9e564957SAndroid Build Coastguard Worker };
839*9e564957SAndroid Build Coastguard Worker 
840*9e564957SAndroid Build Coastguard Worker #define FUSE_COMPAT_WRITE_IN_SIZE 24
841*9e564957SAndroid Build Coastguard Worker 
842*9e564957SAndroid Build Coastguard Worker struct fuse_write_in {
843*9e564957SAndroid Build Coastguard Worker 	uint64_t	fh;
844*9e564957SAndroid Build Coastguard Worker 	uint64_t	offset;
845*9e564957SAndroid Build Coastguard Worker 	uint32_t	size;
846*9e564957SAndroid Build Coastguard Worker 	uint32_t	write_flags;
847*9e564957SAndroid Build Coastguard Worker 	uint64_t	lock_owner;
848*9e564957SAndroid Build Coastguard Worker 	uint32_t	flags;
849*9e564957SAndroid Build Coastguard Worker 	uint32_t	padding;
850*9e564957SAndroid Build Coastguard Worker };
851*9e564957SAndroid Build Coastguard Worker 
852*9e564957SAndroid Build Coastguard Worker struct fuse_write_out {
853*9e564957SAndroid Build Coastguard Worker 	uint32_t	size;
854*9e564957SAndroid Build Coastguard Worker 	uint32_t	padding;
855*9e564957SAndroid Build Coastguard Worker };
856*9e564957SAndroid Build Coastguard Worker 
857*9e564957SAndroid Build Coastguard Worker #define FUSE_COMPAT_STATFS_SIZE 48
858*9e564957SAndroid Build Coastguard Worker 
859*9e564957SAndroid Build Coastguard Worker struct fuse_statfs_out {
860*9e564957SAndroid Build Coastguard Worker 	struct fuse_kstatfs st;
861*9e564957SAndroid Build Coastguard Worker };
862*9e564957SAndroid Build Coastguard Worker 
863*9e564957SAndroid Build Coastguard Worker struct fuse_fsync_in {
864*9e564957SAndroid Build Coastguard Worker 	uint64_t	fh;
865*9e564957SAndroid Build Coastguard Worker 	uint32_t	fsync_flags;
866*9e564957SAndroid Build Coastguard Worker 	uint32_t	padding;
867*9e564957SAndroid Build Coastguard Worker };
868*9e564957SAndroid Build Coastguard Worker 
869*9e564957SAndroid Build Coastguard Worker #define FUSE_COMPAT_SETXATTR_IN_SIZE 8
870*9e564957SAndroid Build Coastguard Worker 
871*9e564957SAndroid Build Coastguard Worker struct fuse_setxattr_in {
872*9e564957SAndroid Build Coastguard Worker 	uint32_t	size;
873*9e564957SAndroid Build Coastguard Worker 	uint32_t	flags;
874*9e564957SAndroid Build Coastguard Worker 	uint32_t	setxattr_flags;
875*9e564957SAndroid Build Coastguard Worker 	uint32_t	padding;
876*9e564957SAndroid Build Coastguard Worker };
877*9e564957SAndroid Build Coastguard Worker 
878*9e564957SAndroid Build Coastguard Worker struct fuse_getxattr_in {
879*9e564957SAndroid Build Coastguard Worker 	uint32_t	size;
880*9e564957SAndroid Build Coastguard Worker 	uint32_t	padding;
881*9e564957SAndroid Build Coastguard Worker };
882*9e564957SAndroid Build Coastguard Worker 
883*9e564957SAndroid Build Coastguard Worker struct fuse_getxattr_out {
884*9e564957SAndroid Build Coastguard Worker 	uint32_t	size;
885*9e564957SAndroid Build Coastguard Worker 	uint32_t	padding;
886*9e564957SAndroid Build Coastguard Worker };
887*9e564957SAndroid Build Coastguard Worker 
888*9e564957SAndroid Build Coastguard Worker struct fuse_lk_in {
889*9e564957SAndroid Build Coastguard Worker 	uint64_t	fh;
890*9e564957SAndroid Build Coastguard Worker 	uint64_t	owner;
891*9e564957SAndroid Build Coastguard Worker 	struct fuse_file_lock lk;
892*9e564957SAndroid Build Coastguard Worker 	uint32_t	lk_flags;
893*9e564957SAndroid Build Coastguard Worker 	uint32_t	padding;
894*9e564957SAndroid Build Coastguard Worker };
895*9e564957SAndroid Build Coastguard Worker 
896*9e564957SAndroid Build Coastguard Worker struct fuse_lk_out {
897*9e564957SAndroid Build Coastguard Worker 	struct fuse_file_lock lk;
898*9e564957SAndroid Build Coastguard Worker };
899*9e564957SAndroid Build Coastguard Worker 
900*9e564957SAndroid Build Coastguard Worker struct fuse_access_in {
901*9e564957SAndroid Build Coastguard Worker 	uint32_t	mask;
902*9e564957SAndroid Build Coastguard Worker 	uint32_t	padding;
903*9e564957SAndroid Build Coastguard Worker };
904*9e564957SAndroid Build Coastguard Worker 
905*9e564957SAndroid Build Coastguard Worker struct fuse_init_in {
906*9e564957SAndroid Build Coastguard Worker 	uint32_t	major;
907*9e564957SAndroid Build Coastguard Worker 	uint32_t	minor;
908*9e564957SAndroid Build Coastguard Worker 	uint32_t	max_readahead;
909*9e564957SAndroid Build Coastguard Worker 	uint32_t	flags;
910*9e564957SAndroid Build Coastguard Worker 	uint32_t	flags2;
911*9e564957SAndroid Build Coastguard Worker 	uint32_t	unused[11];
912*9e564957SAndroid Build Coastguard Worker };
913*9e564957SAndroid Build Coastguard Worker 
914*9e564957SAndroid Build Coastguard Worker #define FUSE_COMPAT_INIT_OUT_SIZE 8
915*9e564957SAndroid Build Coastguard Worker #define FUSE_COMPAT_22_INIT_OUT_SIZE 24
916*9e564957SAndroid Build Coastguard Worker 
917*9e564957SAndroid Build Coastguard Worker struct fuse_init_out {
918*9e564957SAndroid Build Coastguard Worker 	uint32_t	major;
919*9e564957SAndroid Build Coastguard Worker 	uint32_t	minor;
920*9e564957SAndroid Build Coastguard Worker 	uint32_t	max_readahead;
921*9e564957SAndroid Build Coastguard Worker 	uint32_t	flags;
922*9e564957SAndroid Build Coastguard Worker 	uint16_t	max_background;
923*9e564957SAndroid Build Coastguard Worker 	uint16_t	congestion_threshold;
924*9e564957SAndroid Build Coastguard Worker 	uint32_t	max_write;
925*9e564957SAndroid Build Coastguard Worker 	uint32_t	time_gran;
926*9e564957SAndroid Build Coastguard Worker 	uint16_t	max_pages;
927*9e564957SAndroid Build Coastguard Worker 	uint16_t	map_alignment;
928*9e564957SAndroid Build Coastguard Worker 	uint32_t	flags2;
929*9e564957SAndroid Build Coastguard Worker 	uint32_t	max_stack_depth;
930*9e564957SAndroid Build Coastguard Worker 	uint32_t	unused[6];
931*9e564957SAndroid Build Coastguard Worker };
932*9e564957SAndroid Build Coastguard Worker 
933*9e564957SAndroid Build Coastguard Worker #define CUSE_INIT_INFO_MAX 4096
934*9e564957SAndroid Build Coastguard Worker 
935*9e564957SAndroid Build Coastguard Worker struct cuse_init_in {
936*9e564957SAndroid Build Coastguard Worker 	uint32_t	major;
937*9e564957SAndroid Build Coastguard Worker 	uint32_t	minor;
938*9e564957SAndroid Build Coastguard Worker 	uint32_t	unused;
939*9e564957SAndroid Build Coastguard Worker 	uint32_t	flags;
940*9e564957SAndroid Build Coastguard Worker };
941*9e564957SAndroid Build Coastguard Worker 
942*9e564957SAndroid Build Coastguard Worker struct cuse_init_out {
943*9e564957SAndroid Build Coastguard Worker 	uint32_t	major;
944*9e564957SAndroid Build Coastguard Worker 	uint32_t	minor;
945*9e564957SAndroid Build Coastguard Worker 	uint32_t	unused;
946*9e564957SAndroid Build Coastguard Worker 	uint32_t	flags;
947*9e564957SAndroid Build Coastguard Worker 	uint32_t	max_read;
948*9e564957SAndroid Build Coastguard Worker 	uint32_t	max_write;
949*9e564957SAndroid Build Coastguard Worker 	uint32_t	dev_major;		/* chardev major */
950*9e564957SAndroid Build Coastguard Worker 	uint32_t	dev_minor;		/* chardev minor */
951*9e564957SAndroid Build Coastguard Worker 	uint32_t	spare[10];
952*9e564957SAndroid Build Coastguard Worker };
953*9e564957SAndroid Build Coastguard Worker 
954*9e564957SAndroid Build Coastguard Worker struct fuse_interrupt_in {
955*9e564957SAndroid Build Coastguard Worker 	uint64_t	unique;
956*9e564957SAndroid Build Coastguard Worker };
957*9e564957SAndroid Build Coastguard Worker 
958*9e564957SAndroid Build Coastguard Worker struct fuse_bmap_in {
959*9e564957SAndroid Build Coastguard Worker 	uint64_t	block;
960*9e564957SAndroid Build Coastguard Worker 	uint32_t	blocksize;
961*9e564957SAndroid Build Coastguard Worker 	uint32_t	padding;
962*9e564957SAndroid Build Coastguard Worker };
963*9e564957SAndroid Build Coastguard Worker 
964*9e564957SAndroid Build Coastguard Worker struct fuse_bmap_out {
965*9e564957SAndroid Build Coastguard Worker 	uint64_t	block;
966*9e564957SAndroid Build Coastguard Worker };
967*9e564957SAndroid Build Coastguard Worker 
968*9e564957SAndroid Build Coastguard Worker struct fuse_ioctl_in {
969*9e564957SAndroid Build Coastguard Worker 	uint64_t	fh;
970*9e564957SAndroid Build Coastguard Worker 	uint32_t	flags;
971*9e564957SAndroid Build Coastguard Worker 	uint32_t	cmd;
972*9e564957SAndroid Build Coastguard Worker 	uint64_t	arg;
973*9e564957SAndroid Build Coastguard Worker 	uint32_t	in_size;
974*9e564957SAndroid Build Coastguard Worker 	uint32_t	out_size;
975*9e564957SAndroid Build Coastguard Worker };
976*9e564957SAndroid Build Coastguard Worker 
977*9e564957SAndroid Build Coastguard Worker struct fuse_ioctl_iovec {
978*9e564957SAndroid Build Coastguard Worker 	uint64_t	base;
979*9e564957SAndroid Build Coastguard Worker 	uint64_t	len;
980*9e564957SAndroid Build Coastguard Worker };
981*9e564957SAndroid Build Coastguard Worker 
982*9e564957SAndroid Build Coastguard Worker struct fuse_ioctl_out {
983*9e564957SAndroid Build Coastguard Worker 	int32_t		result;
984*9e564957SAndroid Build Coastguard Worker 	uint32_t	flags;
985*9e564957SAndroid Build Coastguard Worker 	uint32_t	in_iovs;
986*9e564957SAndroid Build Coastguard Worker 	uint32_t	out_iovs;
987*9e564957SAndroid Build Coastguard Worker };
988*9e564957SAndroid Build Coastguard Worker 
989*9e564957SAndroid Build Coastguard Worker struct fuse_poll_in {
990*9e564957SAndroid Build Coastguard Worker 	uint64_t	fh;
991*9e564957SAndroid Build Coastguard Worker 	uint64_t	kh;
992*9e564957SAndroid Build Coastguard Worker 	uint32_t	flags;
993*9e564957SAndroid Build Coastguard Worker 	uint32_t	events;
994*9e564957SAndroid Build Coastguard Worker };
995*9e564957SAndroid Build Coastguard Worker 
996*9e564957SAndroid Build Coastguard Worker struct fuse_poll_out {
997*9e564957SAndroid Build Coastguard Worker 	uint32_t	revents;
998*9e564957SAndroid Build Coastguard Worker 	uint32_t	padding;
999*9e564957SAndroid Build Coastguard Worker };
1000*9e564957SAndroid Build Coastguard Worker 
1001*9e564957SAndroid Build Coastguard Worker struct fuse_notify_poll_wakeup_out {
1002*9e564957SAndroid Build Coastguard Worker 	uint64_t	kh;
1003*9e564957SAndroid Build Coastguard Worker };
1004*9e564957SAndroid Build Coastguard Worker 
1005*9e564957SAndroid Build Coastguard Worker struct fuse_fallocate_in {
1006*9e564957SAndroid Build Coastguard Worker 	uint64_t	fh;
1007*9e564957SAndroid Build Coastguard Worker 	uint64_t	offset;
1008*9e564957SAndroid Build Coastguard Worker 	uint64_t	length;
1009*9e564957SAndroid Build Coastguard Worker 	uint32_t	mode;
1010*9e564957SAndroid Build Coastguard Worker 	uint32_t	padding;
1011*9e564957SAndroid Build Coastguard Worker };
1012*9e564957SAndroid Build Coastguard Worker 
1013*9e564957SAndroid Build Coastguard Worker struct fuse_in_header {
1014*9e564957SAndroid Build Coastguard Worker 	uint32_t	len;
1015*9e564957SAndroid Build Coastguard Worker 	uint32_t	opcode;
1016*9e564957SAndroid Build Coastguard Worker 	uint64_t	unique;
1017*9e564957SAndroid Build Coastguard Worker 	uint64_t	nodeid;
1018*9e564957SAndroid Build Coastguard Worker 	uint32_t	uid;
1019*9e564957SAndroid Build Coastguard Worker 	uint32_t	gid;
1020*9e564957SAndroid Build Coastguard Worker 	uint32_t	pid;
1021*9e564957SAndroid Build Coastguard Worker 	union {
1022*9e564957SAndroid Build Coastguard Worker 		uint32_t	error_in;
1023*9e564957SAndroid Build Coastguard Worker 		struct {
1024*9e564957SAndroid Build Coastguard Worker 			uint16_t	total_extlen; /* length of extensions in 8byte units */
1025*9e564957SAndroid Build Coastguard Worker 			uint16_t	padding;
1026*9e564957SAndroid Build Coastguard Worker 		};
1027*9e564957SAndroid Build Coastguard Worker 	};
1028*9e564957SAndroid Build Coastguard Worker };
1029*9e564957SAndroid Build Coastguard Worker 
1030*9e564957SAndroid Build Coastguard Worker struct fuse_out_header {
1031*9e564957SAndroid Build Coastguard Worker 	uint32_t	len;
1032*9e564957SAndroid Build Coastguard Worker 	int32_t		error;
1033*9e564957SAndroid Build Coastguard Worker 	uint64_t	unique;
1034*9e564957SAndroid Build Coastguard Worker };
1035*9e564957SAndroid Build Coastguard Worker 
1036*9e564957SAndroid Build Coastguard Worker struct fuse_dirent {
1037*9e564957SAndroid Build Coastguard Worker 	uint64_t	ino;
1038*9e564957SAndroid Build Coastguard Worker 	uint64_t	off;
1039*9e564957SAndroid Build Coastguard Worker 	uint32_t	namelen;
1040*9e564957SAndroid Build Coastguard Worker 	uint32_t	type;
1041*9e564957SAndroid Build Coastguard Worker 	char name[];
1042*9e564957SAndroid Build Coastguard Worker };
1043*9e564957SAndroid Build Coastguard Worker 
1044*9e564957SAndroid Build Coastguard Worker /* Align variable length records to 64bit boundary */
1045*9e564957SAndroid Build Coastguard Worker #define FUSE_REC_ALIGN(x) \
1046*9e564957SAndroid Build Coastguard Worker 	(((x) + sizeof(uint64_t) - 1) & ~(sizeof(uint64_t) - 1))
1047*9e564957SAndroid Build Coastguard Worker 
1048*9e564957SAndroid Build Coastguard Worker #define FUSE_NAME_OFFSET offsetof(struct fuse_dirent, name)
1049*9e564957SAndroid Build Coastguard Worker #define FUSE_DIRENT_ALIGN(x) FUSE_REC_ALIGN(x)
1050*9e564957SAndroid Build Coastguard Worker #define FUSE_DIRENT_SIZE(d) \
1051*9e564957SAndroid Build Coastguard Worker 	FUSE_DIRENT_ALIGN(FUSE_NAME_OFFSET + (d)->namelen)
1052*9e564957SAndroid Build Coastguard Worker 
1053*9e564957SAndroid Build Coastguard Worker struct fuse_direntplus {
1054*9e564957SAndroid Build Coastguard Worker 	struct fuse_entry_out entry_out;
1055*9e564957SAndroid Build Coastguard Worker 	struct fuse_dirent dirent;
1056*9e564957SAndroid Build Coastguard Worker };
1057*9e564957SAndroid Build Coastguard Worker 
1058*9e564957SAndroid Build Coastguard Worker #define FUSE_NAME_OFFSET_DIRENTPLUS \
1059*9e564957SAndroid Build Coastguard Worker 	offsetof(struct fuse_direntplus, dirent.name)
1060*9e564957SAndroid Build Coastguard Worker #define FUSE_DIRENTPLUS_SIZE(d) \
1061*9e564957SAndroid Build Coastguard Worker 	FUSE_DIRENT_ALIGN(FUSE_NAME_OFFSET_DIRENTPLUS + (d)->dirent.namelen)
1062*9e564957SAndroid Build Coastguard Worker 
1063*9e564957SAndroid Build Coastguard Worker struct fuse_notify_inval_inode_out {
1064*9e564957SAndroid Build Coastguard Worker 	uint64_t	ino;
1065*9e564957SAndroid Build Coastguard Worker 	int64_t		off;
1066*9e564957SAndroid Build Coastguard Worker 	int64_t		len;
1067*9e564957SAndroid Build Coastguard Worker };
1068*9e564957SAndroid Build Coastguard Worker 
1069*9e564957SAndroid Build Coastguard Worker struct fuse_notify_inval_entry_out {
1070*9e564957SAndroid Build Coastguard Worker 	uint64_t	parent;
1071*9e564957SAndroid Build Coastguard Worker 	uint32_t	namelen;
1072*9e564957SAndroid Build Coastguard Worker 	uint32_t	flags;
1073*9e564957SAndroid Build Coastguard Worker };
1074*9e564957SAndroid Build Coastguard Worker 
1075*9e564957SAndroid Build Coastguard Worker struct fuse_notify_delete_out {
1076*9e564957SAndroid Build Coastguard Worker 	uint64_t	parent;
1077*9e564957SAndroid Build Coastguard Worker 	uint64_t	child;
1078*9e564957SAndroid Build Coastguard Worker 	uint32_t	namelen;
1079*9e564957SAndroid Build Coastguard Worker 	uint32_t	padding;
1080*9e564957SAndroid Build Coastguard Worker };
1081*9e564957SAndroid Build Coastguard Worker 
1082*9e564957SAndroid Build Coastguard Worker struct fuse_notify_store_out {
1083*9e564957SAndroid Build Coastguard Worker 	uint64_t	nodeid;
1084*9e564957SAndroid Build Coastguard Worker 	uint64_t	offset;
1085*9e564957SAndroid Build Coastguard Worker 	uint32_t	size;
1086*9e564957SAndroid Build Coastguard Worker 	uint32_t	padding;
1087*9e564957SAndroid Build Coastguard Worker };
1088*9e564957SAndroid Build Coastguard Worker 
1089*9e564957SAndroid Build Coastguard Worker struct fuse_notify_retrieve_out {
1090*9e564957SAndroid Build Coastguard Worker 	uint64_t	notify_unique;
1091*9e564957SAndroid Build Coastguard Worker 	uint64_t	nodeid;
1092*9e564957SAndroid Build Coastguard Worker 	uint64_t	offset;
1093*9e564957SAndroid Build Coastguard Worker 	uint32_t	size;
1094*9e564957SAndroid Build Coastguard Worker 	uint32_t	padding;
1095*9e564957SAndroid Build Coastguard Worker };
1096*9e564957SAndroid Build Coastguard Worker 
1097*9e564957SAndroid Build Coastguard Worker /* Matches the size of fuse_write_in */
1098*9e564957SAndroid Build Coastguard Worker struct fuse_notify_retrieve_in {
1099*9e564957SAndroid Build Coastguard Worker 	uint64_t	dummy1;
1100*9e564957SAndroid Build Coastguard Worker 	uint64_t	offset;
1101*9e564957SAndroid Build Coastguard Worker 	uint32_t	size;
1102*9e564957SAndroid Build Coastguard Worker 	uint32_t	dummy2;
1103*9e564957SAndroid Build Coastguard Worker 	uint64_t	dummy3;
1104*9e564957SAndroid Build Coastguard Worker 	uint64_t	dummy4;
1105*9e564957SAndroid Build Coastguard Worker };
1106*9e564957SAndroid Build Coastguard Worker 
1107*9e564957SAndroid Build Coastguard Worker struct fuse_backing_map {
1108*9e564957SAndroid Build Coastguard Worker 	int32_t		fd;
1109*9e564957SAndroid Build Coastguard Worker 	uint32_t	flags;
1110*9e564957SAndroid Build Coastguard Worker 	uint64_t	padding;
1111*9e564957SAndroid Build Coastguard Worker };
1112*9e564957SAndroid Build Coastguard Worker 
1113*9e564957SAndroid Build Coastguard Worker /* Device ioctls: */
1114*9e564957SAndroid Build Coastguard Worker #define FUSE_DEV_IOC_MAGIC		229
1115*9e564957SAndroid Build Coastguard Worker #define FUSE_DEV_IOC_CLONE		_IOR(FUSE_DEV_IOC_MAGIC, 0, uint32_t)
1116*9e564957SAndroid Build Coastguard Worker #define FUSE_DEV_IOC_BACKING_OPEN	_IOW(FUSE_DEV_IOC_MAGIC, 1, \
1117*9e564957SAndroid Build Coastguard Worker 					     struct fuse_backing_map)
1118*9e564957SAndroid Build Coastguard Worker #define FUSE_DEV_IOC_BACKING_CLOSE	_IOW(FUSE_DEV_IOC_MAGIC, 2, uint32_t)
1119*9e564957SAndroid Build Coastguard Worker /* Android Passthrough ioctls */
1120*9e564957SAndroid Build Coastguard Worker #define FUSE_DEV_IOC_PASSTHROUGH_OPEN_V0 _IOW(229, 1, struct fuse_passthrough_out_v0)
1121*9e564957SAndroid Build Coastguard Worker #define FUSE_DEV_IOC_PASSTHROUGH_OPEN_V1 _IOW(229, 127, struct fuse_passthrough_out_v0)
1122*9e564957SAndroid Build Coastguard Worker #define FUSE_DEV_IOC_PASSTHROUGH_OPEN_V2 _IOW(229, 126, uint32_t)
1123*9e564957SAndroid Build Coastguard Worker 
1124*9e564957SAndroid Build Coastguard Worker struct fuse_lseek_in {
1125*9e564957SAndroid Build Coastguard Worker 	uint64_t	fh;
1126*9e564957SAndroid Build Coastguard Worker 	uint64_t	offset;
1127*9e564957SAndroid Build Coastguard Worker 	uint32_t	whence;
1128*9e564957SAndroid Build Coastguard Worker 	uint32_t	padding;
1129*9e564957SAndroid Build Coastguard Worker };
1130*9e564957SAndroid Build Coastguard Worker 
1131*9e564957SAndroid Build Coastguard Worker struct fuse_lseek_out {
1132*9e564957SAndroid Build Coastguard Worker 	uint64_t	offset;
1133*9e564957SAndroid Build Coastguard Worker };
1134*9e564957SAndroid Build Coastguard Worker 
1135*9e564957SAndroid Build Coastguard Worker struct fuse_copy_file_range_in {
1136*9e564957SAndroid Build Coastguard Worker 	uint64_t	fh_in;
1137*9e564957SAndroid Build Coastguard Worker 	uint64_t	off_in;
1138*9e564957SAndroid Build Coastguard Worker 	uint64_t	nodeid_out;
1139*9e564957SAndroid Build Coastguard Worker 	uint64_t	fh_out;
1140*9e564957SAndroid Build Coastguard Worker 	uint64_t	off_out;
1141*9e564957SAndroid Build Coastguard Worker 	uint64_t	len;
1142*9e564957SAndroid Build Coastguard Worker 	uint64_t	flags;
1143*9e564957SAndroid Build Coastguard Worker };
1144*9e564957SAndroid Build Coastguard Worker 
1145*9e564957SAndroid Build Coastguard Worker #define FUSE_SETUPMAPPING_FLAG_WRITE (1ull << 0)
1146*9e564957SAndroid Build Coastguard Worker #define FUSE_SETUPMAPPING_FLAG_READ (1ull << 1)
1147*9e564957SAndroid Build Coastguard Worker struct fuse_setupmapping_in {
1148*9e564957SAndroid Build Coastguard Worker 	/* An already open handle */
1149*9e564957SAndroid Build Coastguard Worker 	uint64_t	fh;
1150*9e564957SAndroid Build Coastguard Worker 	/* Offset into the file to start the mapping */
1151*9e564957SAndroid Build Coastguard Worker 	uint64_t	foffset;
1152*9e564957SAndroid Build Coastguard Worker 	/* Length of mapping required */
1153*9e564957SAndroid Build Coastguard Worker 	uint64_t	len;
1154*9e564957SAndroid Build Coastguard Worker 	/* Flags, FUSE_SETUPMAPPING_FLAG_* */
1155*9e564957SAndroid Build Coastguard Worker 	uint64_t	flags;
1156*9e564957SAndroid Build Coastguard Worker 	/* Offset in Memory Window */
1157*9e564957SAndroid Build Coastguard Worker 	uint64_t	moffset;
1158*9e564957SAndroid Build Coastguard Worker };
1159*9e564957SAndroid Build Coastguard Worker 
1160*9e564957SAndroid Build Coastguard Worker struct fuse_removemapping_in {
1161*9e564957SAndroid Build Coastguard Worker 	/* number of fuse_removemapping_one follows */
1162*9e564957SAndroid Build Coastguard Worker 	uint32_t        count;
1163*9e564957SAndroid Build Coastguard Worker };
1164*9e564957SAndroid Build Coastguard Worker 
1165*9e564957SAndroid Build Coastguard Worker struct fuse_removemapping_one {
1166*9e564957SAndroid Build Coastguard Worker 	/* Offset into the dax window start the unmapping */
1167*9e564957SAndroid Build Coastguard Worker 	uint64_t        moffset;
1168*9e564957SAndroid Build Coastguard Worker 	/* Length of mapping required */
1169*9e564957SAndroid Build Coastguard Worker 	uint64_t	len;
1170*9e564957SAndroid Build Coastguard Worker };
1171*9e564957SAndroid Build Coastguard Worker 
1172*9e564957SAndroid Build Coastguard Worker #define FUSE_REMOVEMAPPING_MAX_ENTRY   \
1173*9e564957SAndroid Build Coastguard Worker 		(PAGE_SIZE / sizeof(struct fuse_removemapping_one))
1174*9e564957SAndroid Build Coastguard Worker 
1175*9e564957SAndroid Build Coastguard Worker struct fuse_syncfs_in {
1176*9e564957SAndroid Build Coastguard Worker 	uint64_t	padding;
1177*9e564957SAndroid Build Coastguard Worker };
1178*9e564957SAndroid Build Coastguard Worker 
1179*9e564957SAndroid Build Coastguard Worker /*
1180*9e564957SAndroid Build Coastguard Worker  * For each security context, send fuse_secctx with size of security context
1181*9e564957SAndroid Build Coastguard Worker  * fuse_secctx will be followed by security context name and this in turn
1182*9e564957SAndroid Build Coastguard Worker  * will be followed by actual context label.
1183*9e564957SAndroid Build Coastguard Worker  * fuse_secctx, name, context
1184*9e564957SAndroid Build Coastguard Worker  */
1185*9e564957SAndroid Build Coastguard Worker struct fuse_secctx {
1186*9e564957SAndroid Build Coastguard Worker 	uint32_t	size;
1187*9e564957SAndroid Build Coastguard Worker 	uint32_t	padding;
1188*9e564957SAndroid Build Coastguard Worker };
1189*9e564957SAndroid Build Coastguard Worker 
1190*9e564957SAndroid Build Coastguard Worker /*
1191*9e564957SAndroid Build Coastguard Worker  * Contains the information about how many fuse_secctx structures are being
1192*9e564957SAndroid Build Coastguard Worker  * sent and what's the total size of all security contexts (including
1193*9e564957SAndroid Build Coastguard Worker  * size of fuse_secctx_header).
1194*9e564957SAndroid Build Coastguard Worker  *
1195*9e564957SAndroid Build Coastguard Worker  */
1196*9e564957SAndroid Build Coastguard Worker struct fuse_secctx_header {
1197*9e564957SAndroid Build Coastguard Worker 	uint32_t	size;
1198*9e564957SAndroid Build Coastguard Worker 	uint32_t	nr_secctx;
1199*9e564957SAndroid Build Coastguard Worker };
1200*9e564957SAndroid Build Coastguard Worker 
1201*9e564957SAndroid Build Coastguard Worker /**
1202*9e564957SAndroid Build Coastguard Worker  * struct fuse_ext_header - extension header
1203*9e564957SAndroid Build Coastguard Worker  * @size: total size of this extension including this header
1204*9e564957SAndroid Build Coastguard Worker  * @type: type of extension
1205*9e564957SAndroid Build Coastguard Worker  *
1206*9e564957SAndroid Build Coastguard Worker  * This is made compatible with fuse_secctx_header by using type values >
1207*9e564957SAndroid Build Coastguard Worker  * FUSE_MAX_NR_SECCTX
1208*9e564957SAndroid Build Coastguard Worker  */
1209*9e564957SAndroid Build Coastguard Worker struct fuse_ext_header {
1210*9e564957SAndroid Build Coastguard Worker 	uint32_t	size;
1211*9e564957SAndroid Build Coastguard Worker 	uint32_t	type;
1212*9e564957SAndroid Build Coastguard Worker };
1213*9e564957SAndroid Build Coastguard Worker 
1214*9e564957SAndroid Build Coastguard Worker /**
1215*9e564957SAndroid Build Coastguard Worker  * struct fuse_supp_groups - Supplementary group extension
1216*9e564957SAndroid Build Coastguard Worker  * @nr_groups: number of supplementary groups
1217*9e564957SAndroid Build Coastguard Worker  * @groups: flexible array of group IDs
1218*9e564957SAndroid Build Coastguard Worker  */
1219*9e564957SAndroid Build Coastguard Worker struct fuse_supp_groups {
1220*9e564957SAndroid Build Coastguard Worker 	uint32_t	nr_groups;
1221*9e564957SAndroid Build Coastguard Worker 	uint32_t	groups[];
1222*9e564957SAndroid Build Coastguard Worker };
1223*9e564957SAndroid Build Coastguard Worker 
1224*9e564957SAndroid Build Coastguard Worker /** Export fuse_args only for bpf */
1225*9e564957SAndroid Build Coastguard Worker #ifdef __KERNEL__
1226*9e564957SAndroid Build Coastguard Worker struct fuse_mount;
1227*9e564957SAndroid Build Coastguard Worker 
1228*9e564957SAndroid Build Coastguard Worker /*
1229*9e564957SAndroid Build Coastguard Worker  * Fuse BPF Args
1230*9e564957SAndroid Build Coastguard Worker  *
1231*9e564957SAndroid Build Coastguard Worker  * Used to communicate with bpf programs to allow checking or altering certain values.
1232*9e564957SAndroid Build Coastguard Worker  * The end_offset allows the bpf verifier to check boundaries statically. This reflects
1233*9e564957SAndroid Build Coastguard Worker  * the ends of the buffer. size shows the length that was actually used.
1234*9e564957SAndroid Build Coastguard Worker  *
1235*9e564957SAndroid Build Coastguard Worker  */
1236*9e564957SAndroid Build Coastguard Worker 
1237*9e564957SAndroid Build Coastguard Worker /** One input argument of a request */
1238*9e564957SAndroid Build Coastguard Worker struct fuse_bpf_in_arg {
1239*9e564957SAndroid Build Coastguard Worker   uint32_t size;
1240*9e564957SAndroid Build Coastguard Worker   const void *value;
1241*9e564957SAndroid Build Coastguard Worker   const void *end_offset;
1242*9e564957SAndroid Build Coastguard Worker };
1243*9e564957SAndroid Build Coastguard Worker 
1244*9e564957SAndroid Build Coastguard Worker /** One output argument of a request */
1245*9e564957SAndroid Build Coastguard Worker struct fuse_bpf_arg {
1246*9e564957SAndroid Build Coastguard Worker   uint32_t size;
1247*9e564957SAndroid Build Coastguard Worker   void *value;
1248*9e564957SAndroid Build Coastguard Worker   void *end_offset;
1249*9e564957SAndroid Build Coastguard Worker };
1250*9e564957SAndroid Build Coastguard Worker 
1251*9e564957SAndroid Build Coastguard Worker #define FUSE_MAX_IN_ARGS 5
1252*9e564957SAndroid Build Coastguard Worker #define FUSE_MAX_OUT_ARGS 3
1253*9e564957SAndroid Build Coastguard Worker 
1254*9e564957SAndroid Build Coastguard Worker #define FUSE_BPF_FORCE (1 << 0)
1255*9e564957SAndroid Build Coastguard Worker #define FUSE_BPF_OUT_ARGVAR (1 << 6)
1256*9e564957SAndroid Build Coastguard Worker 
1257*9e564957SAndroid Build Coastguard Worker struct fuse_bpf_args {
1258*9e564957SAndroid Build Coastguard Worker   uint64_t nodeid;
1259*9e564957SAndroid Build Coastguard Worker   uint32_t opcode;
1260*9e564957SAndroid Build Coastguard Worker   uint32_t error_in;
1261*9e564957SAndroid Build Coastguard Worker   uint32_t in_numargs;
1262*9e564957SAndroid Build Coastguard Worker   uint32_t out_numargs;
1263*9e564957SAndroid Build Coastguard Worker   uint32_t flags;
1264*9e564957SAndroid Build Coastguard Worker   struct fuse_bpf_in_arg in_args[FUSE_MAX_IN_ARGS];
1265*9e564957SAndroid Build Coastguard Worker   struct fuse_bpf_arg out_args[FUSE_MAX_OUT_ARGS];
1266*9e564957SAndroid Build Coastguard Worker };
1267*9e564957SAndroid Build Coastguard Worker #endif
1268*9e564957SAndroid Build Coastguard Worker 
1269*9e564957SAndroid Build Coastguard Worker #define FUSE_BPF_USER_FILTER    1
1270*9e564957SAndroid Build Coastguard Worker #define FUSE_BPF_BACKING        2
1271*9e564957SAndroid Build Coastguard Worker #define FUSE_BPF_POST_FILTER    4
1272*9e564957SAndroid Build Coastguard Worker 
1273*9e564957SAndroid Build Coastguard Worker #define FUSE_OPCODE_FILTER      0x0ffff
1274*9e564957SAndroid Build Coastguard Worker #define FUSE_PREFILTER          0x10000
1275*9e564957SAndroid Build Coastguard Worker #define FUSE_POSTFILTER         0x20000
1276*9e564957SAndroid Build Coastguard Worker 
1277*9e564957SAndroid Build Coastguard Worker #endif /* _LINUX_FUSE_H */
1278