xref: /utopia/UTPA2-700.0.x/projects/tools/lint/mips-linux-gnu_include/linux/fuse.h (revision 53ee8cc121a030b8d368113ac3e966b4705770ef)
1*53ee8cc1Swenshuai.xi /*
2*53ee8cc1Swenshuai.xi     FUSE: Filesystem in Userspace
3*53ee8cc1Swenshuai.xi     Copyright (C) 2001-2006  Miklos Szeredi <miklos@szeredi.hu>
4*53ee8cc1Swenshuai.xi 
5*53ee8cc1Swenshuai.xi     This program can be distributed under the terms of the GNU GPL.
6*53ee8cc1Swenshuai.xi     See the file COPYING.
7*53ee8cc1Swenshuai.xi */
8*53ee8cc1Swenshuai.xi 
9*53ee8cc1Swenshuai.xi /*
10*53ee8cc1Swenshuai.xi  * This file defines the kernel interface of FUSE
11*53ee8cc1Swenshuai.xi  *
12*53ee8cc1Swenshuai.xi  * Protocol changelog:
13*53ee8cc1Swenshuai.xi  *
14*53ee8cc1Swenshuai.xi  * 7.9:
15*53ee8cc1Swenshuai.xi  *  - new fuse_getattr_in input argument of GETATTR
16*53ee8cc1Swenshuai.xi  *  - add lk_flags in fuse_lk_in
17*53ee8cc1Swenshuai.xi  *  - add lock_owner field to fuse_setattr_in, fuse_read_in and fuse_write_in
18*53ee8cc1Swenshuai.xi  *  - add blksize field to fuse_attr
19*53ee8cc1Swenshuai.xi  *  - add file flags field to fuse_read_in and fuse_write_in
20*53ee8cc1Swenshuai.xi  */
21*53ee8cc1Swenshuai.xi 
22*53ee8cc1Swenshuai.xi #include <asm/types.h>
23*53ee8cc1Swenshuai.xi #include <linux/major.h>
24*53ee8cc1Swenshuai.xi 
25*53ee8cc1Swenshuai.xi /** Version number of this interface */
26*53ee8cc1Swenshuai.xi #define FUSE_KERNEL_VERSION 7
27*53ee8cc1Swenshuai.xi 
28*53ee8cc1Swenshuai.xi /** Minor version number of this interface */
29*53ee8cc1Swenshuai.xi #define FUSE_KERNEL_MINOR_VERSION 9
30*53ee8cc1Swenshuai.xi 
31*53ee8cc1Swenshuai.xi /** The node ID of the root inode */
32*53ee8cc1Swenshuai.xi #define FUSE_ROOT_ID 1
33*53ee8cc1Swenshuai.xi 
34*53ee8cc1Swenshuai.xi /** The major number of the fuse character device */
35*53ee8cc1Swenshuai.xi #define FUSE_MAJOR MISC_MAJOR
36*53ee8cc1Swenshuai.xi 
37*53ee8cc1Swenshuai.xi /** The minor number of the fuse character device */
38*53ee8cc1Swenshuai.xi #define FUSE_MINOR 229
39*53ee8cc1Swenshuai.xi 
40*53ee8cc1Swenshuai.xi /* Make sure all structures are padded to 64bit boundary, so 32bit
41*53ee8cc1Swenshuai.xi    userspace works under 64bit kernels */
42*53ee8cc1Swenshuai.xi 
43*53ee8cc1Swenshuai.xi struct fuse_attr {
44*53ee8cc1Swenshuai.xi 	__u64	ino;
45*53ee8cc1Swenshuai.xi 	__u64	size;
46*53ee8cc1Swenshuai.xi 	__u64	blocks;
47*53ee8cc1Swenshuai.xi 	__u64	atime;
48*53ee8cc1Swenshuai.xi 	__u64	mtime;
49*53ee8cc1Swenshuai.xi 	__u64	ctime;
50*53ee8cc1Swenshuai.xi 	__u32	atimensec;
51*53ee8cc1Swenshuai.xi 	__u32	mtimensec;
52*53ee8cc1Swenshuai.xi 	__u32	ctimensec;
53*53ee8cc1Swenshuai.xi 	__u32	mode;
54*53ee8cc1Swenshuai.xi 	__u32	nlink;
55*53ee8cc1Swenshuai.xi 	__u32	uid;
56*53ee8cc1Swenshuai.xi 	__u32	gid;
57*53ee8cc1Swenshuai.xi 	__u32	rdev;
58*53ee8cc1Swenshuai.xi 	__u32	blksize;
59*53ee8cc1Swenshuai.xi 	__u32	padding;
60*53ee8cc1Swenshuai.xi };
61*53ee8cc1Swenshuai.xi 
62*53ee8cc1Swenshuai.xi struct fuse_kstatfs {
63*53ee8cc1Swenshuai.xi 	__u64	blocks;
64*53ee8cc1Swenshuai.xi 	__u64	bfree;
65*53ee8cc1Swenshuai.xi 	__u64	bavail;
66*53ee8cc1Swenshuai.xi 	__u64	files;
67*53ee8cc1Swenshuai.xi 	__u64	ffree;
68*53ee8cc1Swenshuai.xi 	__u32	bsize;
69*53ee8cc1Swenshuai.xi 	__u32	namelen;
70*53ee8cc1Swenshuai.xi 	__u32	frsize;
71*53ee8cc1Swenshuai.xi 	__u32	padding;
72*53ee8cc1Swenshuai.xi 	__u32	spare[6];
73*53ee8cc1Swenshuai.xi };
74*53ee8cc1Swenshuai.xi 
75*53ee8cc1Swenshuai.xi struct fuse_file_lock {
76*53ee8cc1Swenshuai.xi 	__u64	start;
77*53ee8cc1Swenshuai.xi 	__u64	end;
78*53ee8cc1Swenshuai.xi 	__u32	type;
79*53ee8cc1Swenshuai.xi 	__u32	pid; /* tgid */
80*53ee8cc1Swenshuai.xi };
81*53ee8cc1Swenshuai.xi 
82*53ee8cc1Swenshuai.xi /**
83*53ee8cc1Swenshuai.xi  * Bitmasks for fuse_setattr_in.valid
84*53ee8cc1Swenshuai.xi  */
85*53ee8cc1Swenshuai.xi #define FATTR_MODE	(1 << 0)
86*53ee8cc1Swenshuai.xi #define FATTR_UID	(1 << 1)
87*53ee8cc1Swenshuai.xi #define FATTR_GID	(1 << 2)
88*53ee8cc1Swenshuai.xi #define FATTR_SIZE	(1 << 3)
89*53ee8cc1Swenshuai.xi #define FATTR_ATIME	(1 << 4)
90*53ee8cc1Swenshuai.xi #define FATTR_MTIME	(1 << 5)
91*53ee8cc1Swenshuai.xi #define FATTR_FH	(1 << 6)
92*53ee8cc1Swenshuai.xi #define FATTR_ATIME_NOW	(1 << 7)
93*53ee8cc1Swenshuai.xi #define FATTR_MTIME_NOW	(1 << 8)
94*53ee8cc1Swenshuai.xi #define FATTR_LOCKOWNER	(1 << 9)
95*53ee8cc1Swenshuai.xi 
96*53ee8cc1Swenshuai.xi /**
97*53ee8cc1Swenshuai.xi  * Flags returned by the OPEN request
98*53ee8cc1Swenshuai.xi  *
99*53ee8cc1Swenshuai.xi  * FOPEN_DIRECT_IO: bypass page cache for this open file
100*53ee8cc1Swenshuai.xi  * FOPEN_KEEP_CACHE: don't invalidate the data cache on open
101*53ee8cc1Swenshuai.xi  */
102*53ee8cc1Swenshuai.xi #define FOPEN_DIRECT_IO		(1 << 0)
103*53ee8cc1Swenshuai.xi #define FOPEN_KEEP_CACHE	(1 << 1)
104*53ee8cc1Swenshuai.xi 
105*53ee8cc1Swenshuai.xi /**
106*53ee8cc1Swenshuai.xi  * INIT request/reply flags
107*53ee8cc1Swenshuai.xi  */
108*53ee8cc1Swenshuai.xi #define FUSE_ASYNC_READ		(1 << 0)
109*53ee8cc1Swenshuai.xi #define FUSE_POSIX_LOCKS	(1 << 1)
110*53ee8cc1Swenshuai.xi #define FUSE_FILE_OPS		(1 << 2)
111*53ee8cc1Swenshuai.xi #define FUSE_ATOMIC_O_TRUNC	(1 << 3)
112*53ee8cc1Swenshuai.xi #define FUSE_BIG_WRITES		(1 << 5)
113*53ee8cc1Swenshuai.xi 
114*53ee8cc1Swenshuai.xi /**
115*53ee8cc1Swenshuai.xi  * Release flags
116*53ee8cc1Swenshuai.xi  */
117*53ee8cc1Swenshuai.xi #define FUSE_RELEASE_FLUSH	(1 << 0)
118*53ee8cc1Swenshuai.xi 
119*53ee8cc1Swenshuai.xi /**
120*53ee8cc1Swenshuai.xi  * Getattr flags
121*53ee8cc1Swenshuai.xi  */
122*53ee8cc1Swenshuai.xi #define FUSE_GETATTR_FH		(1 << 0)
123*53ee8cc1Swenshuai.xi 
124*53ee8cc1Swenshuai.xi /**
125*53ee8cc1Swenshuai.xi  * Lock flags
126*53ee8cc1Swenshuai.xi  */
127*53ee8cc1Swenshuai.xi #define FUSE_LK_FLOCK		(1 << 0)
128*53ee8cc1Swenshuai.xi 
129*53ee8cc1Swenshuai.xi /**
130*53ee8cc1Swenshuai.xi  * WRITE flags
131*53ee8cc1Swenshuai.xi  *
132*53ee8cc1Swenshuai.xi  * FUSE_WRITE_CACHE: delayed write from page cache, file handle is guessed
133*53ee8cc1Swenshuai.xi  * FUSE_WRITE_LOCKOWNER: lock_owner field is valid
134*53ee8cc1Swenshuai.xi  */
135*53ee8cc1Swenshuai.xi #define FUSE_WRITE_CACHE	(1 << 0)
136*53ee8cc1Swenshuai.xi #define FUSE_WRITE_LOCKOWNER	(1 << 1)
137*53ee8cc1Swenshuai.xi 
138*53ee8cc1Swenshuai.xi /**
139*53ee8cc1Swenshuai.xi  * Read flags
140*53ee8cc1Swenshuai.xi  */
141*53ee8cc1Swenshuai.xi #define FUSE_READ_LOCKOWNER	(1 << 1)
142*53ee8cc1Swenshuai.xi 
143*53ee8cc1Swenshuai.xi enum fuse_opcode {
144*53ee8cc1Swenshuai.xi 	FUSE_LOOKUP	   = 1,
145*53ee8cc1Swenshuai.xi 	FUSE_FORGET	   = 2,  /* no reply */
146*53ee8cc1Swenshuai.xi 	FUSE_GETATTR	   = 3,
147*53ee8cc1Swenshuai.xi 	FUSE_SETATTR	   = 4,
148*53ee8cc1Swenshuai.xi 	FUSE_READLINK	   = 5,
149*53ee8cc1Swenshuai.xi 	FUSE_SYMLINK	   = 6,
150*53ee8cc1Swenshuai.xi 	FUSE_MKNOD	   = 8,
151*53ee8cc1Swenshuai.xi 	FUSE_MKDIR	   = 9,
152*53ee8cc1Swenshuai.xi 	FUSE_UNLINK	   = 10,
153*53ee8cc1Swenshuai.xi 	FUSE_RMDIR	   = 11,
154*53ee8cc1Swenshuai.xi 	FUSE_RENAME	   = 12,
155*53ee8cc1Swenshuai.xi 	FUSE_LINK	   = 13,
156*53ee8cc1Swenshuai.xi 	FUSE_OPEN	   = 14,
157*53ee8cc1Swenshuai.xi 	FUSE_READ	   = 15,
158*53ee8cc1Swenshuai.xi 	FUSE_WRITE	   = 16,
159*53ee8cc1Swenshuai.xi 	FUSE_STATFS	   = 17,
160*53ee8cc1Swenshuai.xi 	FUSE_RELEASE       = 18,
161*53ee8cc1Swenshuai.xi 	FUSE_FSYNC         = 20,
162*53ee8cc1Swenshuai.xi 	FUSE_SETXATTR      = 21,
163*53ee8cc1Swenshuai.xi 	FUSE_GETXATTR      = 22,
164*53ee8cc1Swenshuai.xi 	FUSE_LISTXATTR     = 23,
165*53ee8cc1Swenshuai.xi 	FUSE_REMOVEXATTR   = 24,
166*53ee8cc1Swenshuai.xi 	FUSE_FLUSH         = 25,
167*53ee8cc1Swenshuai.xi 	FUSE_INIT          = 26,
168*53ee8cc1Swenshuai.xi 	FUSE_OPENDIR       = 27,
169*53ee8cc1Swenshuai.xi 	FUSE_READDIR       = 28,
170*53ee8cc1Swenshuai.xi 	FUSE_RELEASEDIR    = 29,
171*53ee8cc1Swenshuai.xi 	FUSE_FSYNCDIR      = 30,
172*53ee8cc1Swenshuai.xi 	FUSE_GETLK         = 31,
173*53ee8cc1Swenshuai.xi 	FUSE_SETLK         = 32,
174*53ee8cc1Swenshuai.xi 	FUSE_SETLKW        = 33,
175*53ee8cc1Swenshuai.xi 	FUSE_ACCESS        = 34,
176*53ee8cc1Swenshuai.xi 	FUSE_CREATE        = 35,
177*53ee8cc1Swenshuai.xi 	FUSE_INTERRUPT     = 36,
178*53ee8cc1Swenshuai.xi 	FUSE_BMAP          = 37,
179*53ee8cc1Swenshuai.xi 	FUSE_DESTROY       = 38,
180*53ee8cc1Swenshuai.xi };
181*53ee8cc1Swenshuai.xi 
182*53ee8cc1Swenshuai.xi /* The read buffer is required to be at least 8k, but may be much larger */
183*53ee8cc1Swenshuai.xi #define FUSE_MIN_READ_BUFFER 8192
184*53ee8cc1Swenshuai.xi 
185*53ee8cc1Swenshuai.xi #define FUSE_COMPAT_ENTRY_OUT_SIZE 120
186*53ee8cc1Swenshuai.xi 
187*53ee8cc1Swenshuai.xi struct fuse_entry_out {
188*53ee8cc1Swenshuai.xi 	__u64	nodeid;		/* Inode ID */
189*53ee8cc1Swenshuai.xi 	__u64	generation;	/* Inode generation: nodeid:gen must
190*53ee8cc1Swenshuai.xi 				   be unique for the fs's lifetime */
191*53ee8cc1Swenshuai.xi 	__u64	entry_valid;	/* Cache timeout for the name */
192*53ee8cc1Swenshuai.xi 	__u64	attr_valid;	/* Cache timeout for the attributes */
193*53ee8cc1Swenshuai.xi 	__u32	entry_valid_nsec;
194*53ee8cc1Swenshuai.xi 	__u32	attr_valid_nsec;
195*53ee8cc1Swenshuai.xi 	struct fuse_attr attr;
196*53ee8cc1Swenshuai.xi };
197*53ee8cc1Swenshuai.xi 
198*53ee8cc1Swenshuai.xi struct fuse_forget_in {
199*53ee8cc1Swenshuai.xi 	__u64	nlookup;
200*53ee8cc1Swenshuai.xi };
201*53ee8cc1Swenshuai.xi 
202*53ee8cc1Swenshuai.xi struct fuse_getattr_in {
203*53ee8cc1Swenshuai.xi 	__u32	getattr_flags;
204*53ee8cc1Swenshuai.xi 	__u32	dummy;
205*53ee8cc1Swenshuai.xi 	__u64	fh;
206*53ee8cc1Swenshuai.xi };
207*53ee8cc1Swenshuai.xi 
208*53ee8cc1Swenshuai.xi #define FUSE_COMPAT_ATTR_OUT_SIZE 96
209*53ee8cc1Swenshuai.xi 
210*53ee8cc1Swenshuai.xi struct fuse_attr_out {
211*53ee8cc1Swenshuai.xi 	__u64	attr_valid;	/* Cache timeout for the attributes */
212*53ee8cc1Swenshuai.xi 	__u32	attr_valid_nsec;
213*53ee8cc1Swenshuai.xi 	__u32	dummy;
214*53ee8cc1Swenshuai.xi 	struct fuse_attr attr;
215*53ee8cc1Swenshuai.xi };
216*53ee8cc1Swenshuai.xi 
217*53ee8cc1Swenshuai.xi struct fuse_mknod_in {
218*53ee8cc1Swenshuai.xi 	__u32	mode;
219*53ee8cc1Swenshuai.xi 	__u32	rdev;
220*53ee8cc1Swenshuai.xi };
221*53ee8cc1Swenshuai.xi 
222*53ee8cc1Swenshuai.xi struct fuse_mkdir_in {
223*53ee8cc1Swenshuai.xi 	__u32	mode;
224*53ee8cc1Swenshuai.xi 	__u32	padding;
225*53ee8cc1Swenshuai.xi };
226*53ee8cc1Swenshuai.xi 
227*53ee8cc1Swenshuai.xi struct fuse_rename_in {
228*53ee8cc1Swenshuai.xi 	__u64	newdir;
229*53ee8cc1Swenshuai.xi };
230*53ee8cc1Swenshuai.xi 
231*53ee8cc1Swenshuai.xi struct fuse_link_in {
232*53ee8cc1Swenshuai.xi 	__u64	oldnodeid;
233*53ee8cc1Swenshuai.xi };
234*53ee8cc1Swenshuai.xi 
235*53ee8cc1Swenshuai.xi struct fuse_setattr_in {
236*53ee8cc1Swenshuai.xi 	__u32	valid;
237*53ee8cc1Swenshuai.xi 	__u32	padding;
238*53ee8cc1Swenshuai.xi 	__u64	fh;
239*53ee8cc1Swenshuai.xi 	__u64	size;
240*53ee8cc1Swenshuai.xi 	__u64	lock_owner;
241*53ee8cc1Swenshuai.xi 	__u64	atime;
242*53ee8cc1Swenshuai.xi 	__u64	mtime;
243*53ee8cc1Swenshuai.xi 	__u64	unused2;
244*53ee8cc1Swenshuai.xi 	__u32	atimensec;
245*53ee8cc1Swenshuai.xi 	__u32	mtimensec;
246*53ee8cc1Swenshuai.xi 	__u32	unused3;
247*53ee8cc1Swenshuai.xi 	__u32	mode;
248*53ee8cc1Swenshuai.xi 	__u32	unused4;
249*53ee8cc1Swenshuai.xi 	__u32	uid;
250*53ee8cc1Swenshuai.xi 	__u32	gid;
251*53ee8cc1Swenshuai.xi 	__u32	unused5;
252*53ee8cc1Swenshuai.xi };
253*53ee8cc1Swenshuai.xi 
254*53ee8cc1Swenshuai.xi struct fuse_open_in {
255*53ee8cc1Swenshuai.xi 	__u32	flags;
256*53ee8cc1Swenshuai.xi 	__u32	mode;
257*53ee8cc1Swenshuai.xi };
258*53ee8cc1Swenshuai.xi 
259*53ee8cc1Swenshuai.xi struct fuse_open_out {
260*53ee8cc1Swenshuai.xi 	__u64	fh;
261*53ee8cc1Swenshuai.xi 	__u32	open_flags;
262*53ee8cc1Swenshuai.xi 	__u32	padding;
263*53ee8cc1Swenshuai.xi };
264*53ee8cc1Swenshuai.xi 
265*53ee8cc1Swenshuai.xi struct fuse_release_in {
266*53ee8cc1Swenshuai.xi 	__u64	fh;
267*53ee8cc1Swenshuai.xi 	__u32	flags;
268*53ee8cc1Swenshuai.xi 	__u32	release_flags;
269*53ee8cc1Swenshuai.xi 	__u64	lock_owner;
270*53ee8cc1Swenshuai.xi };
271*53ee8cc1Swenshuai.xi 
272*53ee8cc1Swenshuai.xi struct fuse_flush_in {
273*53ee8cc1Swenshuai.xi 	__u64	fh;
274*53ee8cc1Swenshuai.xi 	__u32	unused;
275*53ee8cc1Swenshuai.xi 	__u32	padding;
276*53ee8cc1Swenshuai.xi 	__u64	lock_owner;
277*53ee8cc1Swenshuai.xi };
278*53ee8cc1Swenshuai.xi 
279*53ee8cc1Swenshuai.xi struct fuse_read_in {
280*53ee8cc1Swenshuai.xi 	__u64	fh;
281*53ee8cc1Swenshuai.xi 	__u64	offset;
282*53ee8cc1Swenshuai.xi 	__u32	size;
283*53ee8cc1Swenshuai.xi 	__u32	read_flags;
284*53ee8cc1Swenshuai.xi 	__u64	lock_owner;
285*53ee8cc1Swenshuai.xi 	__u32	flags;
286*53ee8cc1Swenshuai.xi 	__u32	padding;
287*53ee8cc1Swenshuai.xi };
288*53ee8cc1Swenshuai.xi 
289*53ee8cc1Swenshuai.xi #define FUSE_COMPAT_WRITE_IN_SIZE 24
290*53ee8cc1Swenshuai.xi 
291*53ee8cc1Swenshuai.xi struct fuse_write_in {
292*53ee8cc1Swenshuai.xi 	__u64	fh;
293*53ee8cc1Swenshuai.xi 	__u64	offset;
294*53ee8cc1Swenshuai.xi 	__u32	size;
295*53ee8cc1Swenshuai.xi 	__u32	write_flags;
296*53ee8cc1Swenshuai.xi 	__u64	lock_owner;
297*53ee8cc1Swenshuai.xi 	__u32	flags;
298*53ee8cc1Swenshuai.xi 	__u32	padding;
299*53ee8cc1Swenshuai.xi };
300*53ee8cc1Swenshuai.xi 
301*53ee8cc1Swenshuai.xi struct fuse_write_out {
302*53ee8cc1Swenshuai.xi 	__u32	size;
303*53ee8cc1Swenshuai.xi 	__u32	padding;
304*53ee8cc1Swenshuai.xi };
305*53ee8cc1Swenshuai.xi 
306*53ee8cc1Swenshuai.xi #define FUSE_COMPAT_STATFS_SIZE 48
307*53ee8cc1Swenshuai.xi 
308*53ee8cc1Swenshuai.xi struct fuse_statfs_out {
309*53ee8cc1Swenshuai.xi 	struct fuse_kstatfs st;
310*53ee8cc1Swenshuai.xi };
311*53ee8cc1Swenshuai.xi 
312*53ee8cc1Swenshuai.xi struct fuse_fsync_in {
313*53ee8cc1Swenshuai.xi 	__u64	fh;
314*53ee8cc1Swenshuai.xi 	__u32	fsync_flags;
315*53ee8cc1Swenshuai.xi 	__u32	padding;
316*53ee8cc1Swenshuai.xi };
317*53ee8cc1Swenshuai.xi 
318*53ee8cc1Swenshuai.xi struct fuse_setxattr_in {
319*53ee8cc1Swenshuai.xi 	__u32	size;
320*53ee8cc1Swenshuai.xi 	__u32	flags;
321*53ee8cc1Swenshuai.xi };
322*53ee8cc1Swenshuai.xi 
323*53ee8cc1Swenshuai.xi struct fuse_getxattr_in {
324*53ee8cc1Swenshuai.xi 	__u32	size;
325*53ee8cc1Swenshuai.xi 	__u32	padding;
326*53ee8cc1Swenshuai.xi };
327*53ee8cc1Swenshuai.xi 
328*53ee8cc1Swenshuai.xi struct fuse_getxattr_out {
329*53ee8cc1Swenshuai.xi 	__u32	size;
330*53ee8cc1Swenshuai.xi 	__u32	padding;
331*53ee8cc1Swenshuai.xi };
332*53ee8cc1Swenshuai.xi 
333*53ee8cc1Swenshuai.xi struct fuse_lk_in {
334*53ee8cc1Swenshuai.xi 	__u64	fh;
335*53ee8cc1Swenshuai.xi 	__u64	owner;
336*53ee8cc1Swenshuai.xi 	struct fuse_file_lock lk;
337*53ee8cc1Swenshuai.xi 	__u32	lk_flags;
338*53ee8cc1Swenshuai.xi 	__u32	padding;
339*53ee8cc1Swenshuai.xi };
340*53ee8cc1Swenshuai.xi 
341*53ee8cc1Swenshuai.xi struct fuse_lk_out {
342*53ee8cc1Swenshuai.xi 	struct fuse_file_lock lk;
343*53ee8cc1Swenshuai.xi };
344*53ee8cc1Swenshuai.xi 
345*53ee8cc1Swenshuai.xi struct fuse_access_in {
346*53ee8cc1Swenshuai.xi 	__u32	mask;
347*53ee8cc1Swenshuai.xi 	__u32	padding;
348*53ee8cc1Swenshuai.xi };
349*53ee8cc1Swenshuai.xi 
350*53ee8cc1Swenshuai.xi struct fuse_init_in {
351*53ee8cc1Swenshuai.xi 	__u32	major;
352*53ee8cc1Swenshuai.xi 	__u32	minor;
353*53ee8cc1Swenshuai.xi 	__u32	max_readahead;
354*53ee8cc1Swenshuai.xi 	__u32	flags;
355*53ee8cc1Swenshuai.xi };
356*53ee8cc1Swenshuai.xi 
357*53ee8cc1Swenshuai.xi struct fuse_init_out {
358*53ee8cc1Swenshuai.xi 	__u32	major;
359*53ee8cc1Swenshuai.xi 	__u32	minor;
360*53ee8cc1Swenshuai.xi 	__u32	max_readahead;
361*53ee8cc1Swenshuai.xi 	__u32	flags;
362*53ee8cc1Swenshuai.xi 	__u32	unused;
363*53ee8cc1Swenshuai.xi 	__u32	max_write;
364*53ee8cc1Swenshuai.xi };
365*53ee8cc1Swenshuai.xi 
366*53ee8cc1Swenshuai.xi struct fuse_interrupt_in {
367*53ee8cc1Swenshuai.xi 	__u64	unique;
368*53ee8cc1Swenshuai.xi };
369*53ee8cc1Swenshuai.xi 
370*53ee8cc1Swenshuai.xi struct fuse_bmap_in {
371*53ee8cc1Swenshuai.xi 	__u64	block;
372*53ee8cc1Swenshuai.xi 	__u32	blocksize;
373*53ee8cc1Swenshuai.xi 	__u32	padding;
374*53ee8cc1Swenshuai.xi };
375*53ee8cc1Swenshuai.xi 
376*53ee8cc1Swenshuai.xi struct fuse_bmap_out {
377*53ee8cc1Swenshuai.xi 	__u64	block;
378*53ee8cc1Swenshuai.xi };
379*53ee8cc1Swenshuai.xi 
380*53ee8cc1Swenshuai.xi struct fuse_in_header {
381*53ee8cc1Swenshuai.xi 	__u32	len;
382*53ee8cc1Swenshuai.xi 	__u32	opcode;
383*53ee8cc1Swenshuai.xi 	__u64	unique;
384*53ee8cc1Swenshuai.xi 	__u64	nodeid;
385*53ee8cc1Swenshuai.xi 	__u32	uid;
386*53ee8cc1Swenshuai.xi 	__u32	gid;
387*53ee8cc1Swenshuai.xi 	__u32	pid;
388*53ee8cc1Swenshuai.xi 	__u32	padding;
389*53ee8cc1Swenshuai.xi };
390*53ee8cc1Swenshuai.xi 
391*53ee8cc1Swenshuai.xi struct fuse_out_header {
392*53ee8cc1Swenshuai.xi 	__u32	len;
393*53ee8cc1Swenshuai.xi 	__s32	error;
394*53ee8cc1Swenshuai.xi 	__u64	unique;
395*53ee8cc1Swenshuai.xi };
396*53ee8cc1Swenshuai.xi 
397*53ee8cc1Swenshuai.xi struct fuse_dirent {
398*53ee8cc1Swenshuai.xi 	__u64	ino;
399*53ee8cc1Swenshuai.xi 	__u64	off;
400*53ee8cc1Swenshuai.xi 	__u32	namelen;
401*53ee8cc1Swenshuai.xi 	__u32	type;
402*53ee8cc1Swenshuai.xi 	char name[0];
403*53ee8cc1Swenshuai.xi };
404*53ee8cc1Swenshuai.xi 
405*53ee8cc1Swenshuai.xi #define FUSE_NAME_OFFSET offsetof(struct fuse_dirent, name)
406*53ee8cc1Swenshuai.xi #define FUSE_DIRENT_ALIGN(x) (((x) + sizeof(__u64) - 1) & ~(sizeof(__u64) - 1))
407*53ee8cc1Swenshuai.xi #define FUSE_DIRENT_SIZE(d) \
408*53ee8cc1Swenshuai.xi 	FUSE_DIRENT_ALIGN(FUSE_NAME_OFFSET + (d)->namelen)
409