xref: /openbsd-src/sys/miscfs/fuse/fusefs.h (revision 2d6b9e38f30a31b6aa3a85df5a94059bc694a80e)
1*2d6b9e38Sclaudio /* $OpenBSD: fusefs.h,v 1.14 2020/01/20 23:21:56 claudio Exp $ */
2a2badd06Stedu /*
3a2badd06Stedu  * Copyright (c) 2012-2013 Sylvestre Gallon <ccna.syl@gmail.com>
4a2badd06Stedu  *
5a2badd06Stedu  * Permission to use, copy, modify, and distribute this software for any
6a2badd06Stedu  * purpose with or without fee is hereby granted, provided that the above
7a2badd06Stedu  * copyright notice and this permission notice appear in all copies.
8a2badd06Stedu  *
9a2badd06Stedu  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
10a2badd06Stedu  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
11a2badd06Stedu  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
12a2badd06Stedu  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
13a2badd06Stedu  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14a2badd06Stedu  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
15a2badd06Stedu  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
16a2badd06Stedu  */
17a2badd06Stedu 
18a2badd06Stedu #ifndef __FUSEFS_H__
19a2badd06Stedu #define __FUSEFS_H__
20a2badd06Stedu 
211f3b60e1Stedu /* sysctl defines */
221f3b60e1Stedu #define FUSEFS_OPENDEVS		1	/* # of fuse devices opened */
231f3b60e1Stedu #define FUSEFS_INFBUFS		2	/* # of in fbufs */
241f3b60e1Stedu #define FUSEFS_WAITFBUFS	3	/* # of fbufs waiting for a response */
251f3b60e1Stedu #define FUSEFS_POOL_NBPAGES	4	/* # total fusefs size */
261f3b60e1Stedu #define FUSEFS_MAXID		5	/* number of valid fusefs ids */
271f3b60e1Stedu 
281f3b60e1Stedu #define FUSEFS_NAMES { \
291f3b60e1Stedu 	{ 0, 0}, \
301f3b60e1Stedu 	{ "fusefs_open_devices", CTLTYPE_INT }, \
311f3b60e1Stedu 	{ "fusefs_fbufs_in", CTLTYPE_INT }, \
321f3b60e1Stedu 	{ "fusefs_fbufs_wait", CTLTYPE_INT }, \
331f3b60e1Stedu 	{ "fusefs_pool_pages", CTLTYPE_INT }, \
341f3b60e1Stedu }
351f3b60e1Stedu 
3692f58b66Ssyl struct fb_ioctl_xch {
3792f58b66Ssyl 	uint64_t	fbxch_uuid;
3892f58b66Ssyl 	size_t		fbxch_len;
3992f58b66Ssyl 	uint8_t		*fbxch_data;
4092f58b66Ssyl };
4192f58b66Ssyl 
4292f58b66Ssyl /* FUSE Device ioctls */
4392f58b66Ssyl #define FIOCGETFBDAT	_IOW('F', 0, struct fb_ioctl_xch)
4492f58b66Ssyl #define FIOCSETFBDAT	_IOW('F', 1, struct fb_ioctl_xch)
4592f58b66Ssyl 
461f3b60e1Stedu #ifdef _KERNEL
471f3b60e1Stedu 
48a2badd06Stedu struct fuse_msg;
49a2badd06Stedu 
50a2badd06Stedu struct fusefs_mnt {
51a2badd06Stedu 	struct mount *mp;
52a2badd06Stedu 	uint32_t undef_op;
534a254543Ssyl 	int max_read;
54a2badd06Stedu 	int sess_init;
550f4d2db5Shelg 	int allow_other;
56a2badd06Stedu 	dev_t dev;
57a2badd06Stedu };
58a2badd06Stedu 
59a2badd06Stedu #define	UNDEF_ACCESS	1<<0
60a2badd06Stedu #define	UNDEF_MKDIR	1<<1
61a2badd06Stedu #define	UNDEF_CREATE	1<<2
62a2badd06Stedu #define	UNDEF_LINK	1<<3
63a2badd06Stedu #define UNDEF_READLINK	1<<4
64a2badd06Stedu #define UNDEF_RMDIR	1<<5
65a2badd06Stedu #define UNDEF_REMOVE	1<<6
66a2badd06Stedu #define UNDEF_SETATTR	1<<7
67a2badd06Stedu #define UNDEF_RENAME	1<<8
68a2badd06Stedu #define UNDEF_SYMLINK	1<<9
693a6f6456Ssyl #define UNDEF_MKNOD	1<<10
70e1487996Shelg #define UNDEF_FLUSH	1<<11
710d644658Shelg #define UNDEF_FSYNC	1<<12
72a2badd06Stedu 
73*2d6b9e38Sclaudio extern const struct vops fusefs_vops;
74a2badd06Stedu extern struct pool fusefs_fbuf_pool;
75a2badd06Stedu 
76a2badd06Stedu /* files helpers. */
77a2badd06Stedu int fusefs_file_open(struct fusefs_mnt *, struct fusefs_node *, enum fufh_type,
78a2badd06Stedu     int, int, struct proc *);
79a2badd06Stedu int fusefs_file_close(struct fusefs_mnt *, struct fusefs_node *,
80a2badd06Stedu     enum fufh_type, int, int, struct proc *);
81a2badd06Stedu 
82a2badd06Stedu /* device helpers. */
83b7e69da4Shelg void fuse_device_cleanup(dev_t);
84a2badd06Stedu void fuse_device_queue_fbuf(dev_t, struct fusebuf *);
8548ee6ddaSpelikan void fuse_device_set_fmp(struct fusefs_mnt *, int);
86a2badd06Stedu 
87a2badd06Stedu /*
88a2badd06Stedu  * The root inode is the root of the file system.  Inode 0 can't be used for
89a2badd06Stedu  * normal purposes.
90a2badd06Stedu  */
91a2badd06Stedu #define	FUSE_ROOTINO ((ino_t)1)
92a2badd06Stedu #define VFSTOFUSEFS(mp)	((struct fusefs_mnt *)((mp)->mnt_data))
93a2badd06Stedu 
941f3b60e1Stedu #endif /* _KERNEL */
95a2badd06Stedu #endif /* __FUSEFS_H__ */
96