| @@ -1,131 +1,131 @@ | | | @@ -1,131 +1,131 @@ |
1 | /* $NetBSD: rump_private.h,v 1.66 2011/01/07 15:10:22 pooka Exp $ */ | | 1 | /* $NetBSD: rump_private.h,v 1.67 2011/01/09 12:20:10 pooka Exp $ */ |
2 | | | 2 | |
3 | /* | | 3 | /* |
4 | * Copyright (c) 2007 Antti Kantee. All Rights Reserved. | | 4 | * Copyright (c) 2007 Antti Kantee. All Rights Reserved. |
5 | * | | 5 | * |
6 | * Development of this software was supported by Google Summer of Code. | | 6 | * Development of this software was supported by Google Summer of Code. |
7 | * | | 7 | * |
8 | * Redistribution and use in source and binary forms, with or without | | 8 | * Redistribution and use in source and binary forms, with or without |
9 | * modification, are permitted provided that the following conditions | | 9 | * modification, are permitted provided that the following conditions |
10 | * are met: | | 10 | * are met: |
11 | * 1. Redistributions of source code must retain the above copyright | | 11 | * 1. Redistributions of source code must retain the above copyright |
12 | * notice, this list of conditions and the following disclaimer. | | 12 | * notice, this list of conditions and the following disclaimer. |
13 | * 2. Redistributions in binary form must reproduce the above copyright | | 13 | * 2. Redistributions in binary form must reproduce the above copyright |
14 | * notice, this list of conditions and the following disclaimer in the | | 14 | * notice, this list of conditions and the following disclaimer in the |
15 | * documentation and/or other materials provided with the distribution. | | 15 | * documentation and/or other materials provided with the distribution. |
16 | * | | 16 | * |
17 | * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS | | 17 | * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS |
18 | * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | | 18 | * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED |
19 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | | 19 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE |
20 | * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE | | 20 | * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE |
21 | * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | | 21 | * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL |
22 | * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR | | 22 | * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR |
23 | * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | | 23 | * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |
24 | * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT | | 24 | * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |
25 | * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | | 25 | * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY |
26 | * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | | 26 | * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF |
27 | * SUCH DAMAGE. | | 27 | * SUCH DAMAGE. |
28 | */ | | 28 | */ |
29 | | | 29 | |
30 | #ifndef _SYS_RUMP_PRIVATE_H_ | | 30 | #ifndef _SYS_RUMP_PRIVATE_H_ |
31 | #define _SYS_RUMP_PRIVATE_H_ | | 31 | #define _SYS_RUMP_PRIVATE_H_ |
32 | | | 32 | |
33 | #include <sys/param.h> | | 33 | #include <sys/param.h> |
34 | #include <sys/cpu.h> | | 34 | #include <sys/cpu.h> |
35 | #include <sys/device.h> | | 35 | #include <sys/device.h> |
36 | #include <sys/lwp.h> | | 36 | #include <sys/lwp.h> |
37 | #include <sys/proc.h> | | 37 | #include <sys/proc.h> |
38 | #include <sys/systm.h> | | 38 | #include <sys/systm.h> |
39 | #include <sys/types.h> | | 39 | #include <sys/types.h> |
40 | | | 40 | |
41 | #include <uvm/uvm.h> | | 41 | #include <uvm/uvm.h> |
42 | #include <uvm/uvm_object.h> | | 42 | #include <uvm/uvm_object.h> |
43 | #include <uvm/uvm_page.h> | | 43 | #include <uvm/uvm_page.h> |
44 | | | 44 | |
45 | #include <rump/rump.h> | | 45 | #include <rump/rump.h> |
46 | #include <rump/rumpuser.h> | | 46 | #include <rump/rumpuser.h> |
47 | | | 47 | |
48 | #include "rumpkern_if_priv.h" | | 48 | #include "rumpkern_if_priv.h" |
49 | | | 49 | |
50 | extern struct rumpuser_mtx *rump_giantlock; | | 50 | extern struct rumpuser_mtx *rump_giantlock; |
51 | | | 51 | |
52 | extern int rump_threads; | | 52 | extern int rump_threads; |
53 | extern struct device rump_rootdev; | | 53 | extern struct device rump_rootdev; |
54 | | | 54 | |
55 | extern struct sysent rump_sysent[]; | | 55 | extern struct sysent rump_sysent[]; |
56 | | | 56 | |
57 | enum rump_component_type { | | 57 | enum rump_component_type { |
58 | RUMP_COMPONENT_DEV, | | 58 | RUMP_COMPONENT_DEV, |
59 | RUMP_COMPONENT_NET, RUMP_COMPONENT_NET_ROUTE, RUMP_COMPONENT_NET_IF, | | 59 | RUMP_COMPONENT_NET, RUMP_COMPONENT_NET_ROUTE, RUMP_COMPONENT_NET_IF, |
60 | RUMP_COMPONENT_VFS, | | 60 | RUMP_COMPONENT_VFS, |
61 | RUMP_COMPONENT_KERN, RUMP_COMPONENT_KERN_VFS, | | 61 | RUMP_COMPONENT_KERN, RUMP_COMPONENT_KERN_VFS, |
62 | RUMP_COMPONENT_MAX, | | 62 | RUMP_COMPONENT_MAX, |
63 | }; | | 63 | }; |
64 | struct rump_component { | | 64 | struct rump_component { |
65 | enum rump_component_type rc_type; | | 65 | enum rump_component_type rc_type; |
66 | void (*rc_init)(void); | | 66 | void (*rc_init)(void); |
67 | }; | | 67 | }; |
68 | #define RUMP_COMPONENT(type) \ | | 68 | #define RUMP_COMPONENT(type) \ |
69 | static void rumpcompinit(void); \ | | 69 | static void rumpcompinit##type(void); \ |
70 | static const struct rump_component rumpcomp = { \ | | 70 | static const struct rump_component rumpcomp##type = { \ |
71 | .rc_type = type, \ | | 71 | .rc_type = type, \ |
72 | .rc_init = rumpcompinit, \ | | 72 | .rc_init = rumpcompinit##type, \ |
73 | }; \ | | 73 | }; \ |
74 | __link_set_add_rodata(rump_components, rumpcomp); \ | | 74 | __link_set_add_rodata(rump_components, rumpcomp##type); \ |
75 | static void rumpcompinit(void) | | 75 | static void rumpcompinit##type(void) |
76 | | | 76 | |
77 | #define FLAWLESSCALL(call) \ | | 77 | #define FLAWLESSCALL(call) \ |
78 | do { \ | | 78 | do { \ |
79 | int att_error; \ | | 79 | int att_error; \ |
80 | if ((att_error = call) != 0) \ | | 80 | if ((att_error = call) != 0) \ |
81 | panic("\"%s\" failed", #call); \ | | 81 | panic("\"%s\" failed", #call); \ |
82 | } while (/*CONSTCOND*/0) | | 82 | } while (/*CONSTCOND*/0) |
83 | | | 83 | |
84 | #define RUMPMEM_UNLIMITED ((unsigned long)-1) | | 84 | #define RUMPMEM_UNLIMITED ((unsigned long)-1) |
85 | extern unsigned long rump_physmemlimit; | | 85 | extern unsigned long rump_physmemlimit; |
86 | | | 86 | |
87 | void rump_component_init(enum rump_component_type); | | 87 | void rump_component_init(enum rump_component_type); |
88 | int rump_component_count(enum rump_component_type); | | 88 | int rump_component_count(enum rump_component_type); |
89 | | | 89 | |
90 | typedef void (*rump_proc_vfs_init_fn)(struct proc *); | | 90 | typedef void (*rump_proc_vfs_init_fn)(struct proc *); |
91 | typedef void (*rump_proc_vfs_release_fn)(struct proc *); | | 91 | typedef void (*rump_proc_vfs_release_fn)(struct proc *); |
92 | extern rump_proc_vfs_init_fn rump_proc_vfs_init; | | 92 | extern rump_proc_vfs_init_fn rump_proc_vfs_init; |
93 | extern rump_proc_vfs_release_fn rump_proc_vfs_release; | | 93 | extern rump_proc_vfs_release_fn rump_proc_vfs_release; |
94 | | | 94 | |
95 | extern struct cpu_info *rump_cpu; | | 95 | extern struct cpu_info *rump_cpu; |
96 | | | 96 | |
97 | extern bool rump_ttycomponent; | | 97 | extern bool rump_ttycomponent; |
98 | | | 98 | |
99 | struct lwp * rump__lwproc_alloclwp(struct proc *); | | 99 | struct lwp * rump__lwproc_alloclwp(struct proc *); |
100 | | | 100 | |
101 | void rump_cpus_bootstrap(int *); | | 101 | void rump_cpus_bootstrap(int *); |
102 | void rump_scheduler_init(int); | | 102 | void rump_scheduler_init(int); |
103 | void rump_schedule(void); | | 103 | void rump_schedule(void); |
104 | void rump_unschedule(void); | | 104 | void rump_unschedule(void); |
105 | void rump_schedule_cpu(struct lwp *); | | 105 | void rump_schedule_cpu(struct lwp *); |
106 | void rump_schedule_cpu_interlock(struct lwp *, void *); | | 106 | void rump_schedule_cpu_interlock(struct lwp *, void *); |
107 | void rump_unschedule_cpu(struct lwp *); | | 107 | void rump_unschedule_cpu(struct lwp *); |
108 | void rump_unschedule_cpu_interlock(struct lwp *, void *); | | 108 | void rump_unschedule_cpu_interlock(struct lwp *, void *); |
109 | void rump_unschedule_cpu1(struct lwp *, void *); | | 109 | void rump_unschedule_cpu1(struct lwp *, void *); |
110 | | | 110 | |
111 | void rump_schedlock_cv_wait(struct rumpuser_cv *); | | 111 | void rump_schedlock_cv_wait(struct rumpuser_cv *); |
112 | int rump_schedlock_cv_timedwait(struct rumpuser_cv *, | | 112 | int rump_schedlock_cv_timedwait(struct rumpuser_cv *, |
113 | const struct timespec *); | | 113 | const struct timespec *); |
114 | | | 114 | |
115 | void rump_user_schedule(int, void *); | | 115 | void rump_user_schedule(int, void *); |
116 | void rump_user_unschedule(int, int *, void *); | | 116 | void rump_user_unschedule(int, int *, void *); |
117 | | | 117 | |
118 | void rump_cpu_attach(struct cpu_info *); | | 118 | void rump_cpu_attach(struct cpu_info *); |
119 | | | 119 | |
120 | void rump_kernel_bigwrap(int *); | | 120 | void rump_kernel_bigwrap(int *); |
121 | void rump_kernel_bigunwrap(int); | | 121 | void rump_kernel_bigunwrap(int); |
122 | | | 122 | |
123 | void rump_tsleep_init(void); | | 123 | void rump_tsleep_init(void); |
124 | | | 124 | |
125 | void rump_intr_init(int); | | 125 | void rump_intr_init(int); |
126 | void rump_softint_run(struct cpu_info *); | | 126 | void rump_softint_run(struct cpu_info *); |
127 | | | 127 | |
128 | void *rump_hypermalloc(size_t, int, bool, const char *); | | 128 | void *rump_hypermalloc(size_t, int, bool, const char *); |
129 | void rump_hyperfree(void *, size_t); | | 129 | void rump_hyperfree(void *, size_t); |
130 | | | 130 | |
131 | #endif /* _SYS_RUMP_PRIVATE_H_ */ | | 131 | #endif /* _SYS_RUMP_PRIVATE_H_ */ |