1/*	$NetBSD: rump.h,v 1.73 2020/11/04 22:06:38 christos Exp $	*/
2
3/*
4 * Copyright (c) 2007-2011 Antti Kantee.  All Rights Reserved.
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions
8 * are met:
9 * 1. Redistributions of source code must retain the above copyright
10 *    notice, this list of conditions and the following disclaimer.
11 * 2. Redistributions in binary form must reproduce the above copyright
12 *    notice, this list of conditions and the following disclaimer in the
13 *    documentation and/or other materials provided with the distribution.
14 *
15 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
16 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
17 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
18 * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
19 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
20 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
21 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
22 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
23 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
24 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
25 * SUCH DAMAGE.
26 */
27
28#ifndef _RUMP_RUMP_H_
29#define _RUMP_RUMP_H_
30
31/*
32 * NOTE: do not #include anything from <sys> here.  Otherwise this
33 * has no chance of working on non-NetBSD platforms.
34 */
35
36struct mount;
37struct vnode;
38struct vattr;
39struct componentname;
40struct vfsops;
41struct fid;
42struct statvfs;
43struct stat;
44struct kauth_cred;
45struct lwp;
46struct modinfo;
47struct uio;
48
49#if !defined(RUMP_REGISTER_T)
50# define RUMP_REGISTER_T long
51# if !defined(_KERNEL) && !defined(_KMEMUSER) &&  \
52    !defined(_KERNTYPES) && !defined(_STANDALONE)
53typedef RUMP_REGISTER_T register_t;
54# endif
55#endif
56
57#include <rump/rumpdefs.h>
58
59/* rumpkern */
60enum rump_uiorw { RUMPUIO_READ, RUMPUIO_WRITE };
61
62enum rump_sigmodel {
63	RUMP_SIGMODEL_PANIC,
64	RUMP_SIGMODEL_IGNORE,
65	RUMP_SIGMODEL__HOST_NOTANYMORE,
66	RUMP_SIGMODEL_RAISE,
67	RUMP_SIGMODEL_RECORD
68};
69
70/* flags to rump_lwproc_rfork */
71#define RUMP_RFFDG	0x01
72#define RUMP_RFCFDG	0x02
73/* slightly-easier-to-parse aliases for the above */
74#define RUMP_RFFD_SHARE 0x00 /* lossage */
75#define RUMP_RFFD_COPY	RUMP_RFFDG
76#define RUMP_RFFD_CLEAR	RUMP_RFCFDG
77
78/* rumpvfs */
79#define RUMPCN_FREECRED  0x02
80#define RUMP_ETFS_SIZE_ENDOFF ((uint64_t)-1)
81enum rump_etfs_type {
82	RUMP_ETFS_REG,
83	RUMP_ETFS_BLK,
84	RUMP_ETFS_CHR,
85	RUMP_ETFS_DIR,		/* only the registered directory */
86	RUMP_ETFS_DIR_SUBDIRS	/* dir + subdirectories (recursive) */
87};
88
89#if defined(__cplusplus)
90extern "C" {
91#endif
92
93int	rump_getversion(void);
94int	rump_pub_getversion(void); /* compat */
95int	rump_nativeabi_p(void);
96
97int	rump_boot_gethowto(void);
98void	rump_boot_sethowto(int);
99void	rump_boot_setsigmodel(enum rump_sigmodel);
100
101struct rump_boot_etfs {
102	/* client initializes */
103	const char *eb_key;
104	const char *eb_hostpath;
105	enum rump_etfs_type eb_type;
106	uint64_t eb_begin;
107	uint64_t eb_size;
108
109	/* rump kernel initializes */
110	struct rump_boot_etfs *_eb_next;
111	int eb_status;
112};
113void	rump_boot_etfs_register(struct rump_boot_etfs *);
114
115void	rump_schedule(void);
116void	rump_unschedule(void);
117
118void	rump_printevcnts(void);
119
120int	rump_daemonize_begin(void);
121int	rump_init_callback(void (*)(void));
122int	rump_init(void);
123int	rump_init_server(const char *);
124int	rump_daemonize_done(int);
125#define RUMP_DAEMONIZE_SUCCESS 0
126
127#ifndef _KERNEL
128#include <rump/rumpkern_if_pub.h>
129#include <rump/rumpvfs_if_pub.h>
130#include <rump/rumpnet_if_pub.h>
131#endif
132
133#if defined(__cplusplus)
134}
135#endif
136
137#endif /* _RUMP_RUMP_H_ */
138