1 | /* $NetBSD: conf.h,v 1.151 2016/12/17 03:46:52 riastradh Exp $ */ |
2 | |
3 | /*- |
4 | * Copyright (c) 1990, 1993 |
5 | * The Regents of the University of California. All rights reserved. |
6 | * (c) UNIX System Laboratories, Inc. |
7 | * All or some portions of this file are derived from material licensed |
8 | * to the University of California by American Telephone and Telegraph |
9 | * Co. or Unix System Laboratories, Inc. and are reproduced herein with |
10 | * the permission of UNIX System Laboratories, Inc. |
11 | * |
12 | * Redistribution and use in source and binary forms, with or without |
13 | * modification, are permitted provided that the following conditions |
14 | * are met: |
15 | * 1. Redistributions of source code must retain the above copyright |
16 | * notice, this list of conditions and the following disclaimer. |
17 | * 2. Redistributions in binary form must reproduce the above copyright |
18 | * notice, this list of conditions and the following disclaimer in the |
19 | * documentation and/or other materials provided with the distribution. |
20 | * 3. Neither the name of the University nor the names of its contributors |
21 | * may be used to endorse or promote products derived from this software |
22 | * without specific prior written permission. |
23 | * |
24 | * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND |
25 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
26 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
27 | * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE |
28 | * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL |
29 | * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS |
30 | * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |
31 | * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |
32 | * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY |
33 | * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF |
34 | * SUCH DAMAGE. |
35 | * |
36 | * @(#)conf.h 8.5 (Berkeley) 1/9/95 |
37 | */ |
38 | |
39 | #ifndef _SYS_CONF_H_ |
40 | #define _SYS_CONF_H_ |
41 | |
42 | /* |
43 | * Definitions of device driver entry switches |
44 | */ |
45 | |
46 | #include <sys/queue.h> |
47 | #include <sys/device_if.h> |
48 | |
49 | struct buf; |
50 | struct knote; |
51 | struct lwp; |
52 | struct tty; |
53 | struct uio; |
54 | struct vnode; |
55 | |
56 | /* |
57 | * Types for d_flag |
58 | */ |
59 | #define D_OTHER 0x0000 |
60 | #define D_TAPE 0x0001 |
61 | #define D_DISK 0x0002 |
62 | #define D_TTY 0x0003 |
63 | #define D_TYPEMASK 0x00ff |
64 | #define D_MPSAFE 0x0100 |
65 | #define D_NEGOFFSAFE 0x0200 |
66 | #define D_MCLOSE 0x0400 |
67 | |
68 | /* |
69 | * Block device switch table |
70 | */ |
71 | struct bdevsw { |
72 | int (*d_open)(dev_t, int, int, struct lwp *); |
73 | int (*d_close)(dev_t, int, int, struct lwp *); |
74 | void (*d_strategy)(struct buf *); |
75 | int (*d_ioctl)(dev_t, u_long, void *, int, struct lwp *); |
76 | int (*d_dump)(dev_t, daddr_t, void *, size_t); |
77 | int (*d_psize)(dev_t); |
78 | int (*d_discard)(dev_t, off_t, off_t); |
79 | int d_flag; |
80 | }; |
81 | |
82 | /* |
83 | * Character device switch table |
84 | */ |
85 | struct cdevsw { |
86 | int (*d_open)(dev_t, int, int, struct lwp *); |
87 | int (*d_close)(dev_t, int, int, struct lwp *); |
88 | int (*d_read)(dev_t, struct uio *, int); |
89 | int (*d_write)(dev_t, struct uio *, int); |
90 | int (*d_ioctl)(dev_t, u_long, void *, int, struct lwp *); |
91 | void (*d_stop)(struct tty *, int); |
92 | struct tty * (*d_tty)(dev_t); |
93 | int (*d_poll)(dev_t, int, struct lwp *); |
94 | paddr_t (*d_mmap)(dev_t, off_t, int); |
95 | int (*d_kqfilter)(dev_t, struct knote *); |
96 | int (*d_discard)(dev_t, off_t, off_t); |
97 | int d_flag; |
98 | }; |
99 | |
100 | #ifdef _KERNEL |
101 | |
102 | #include <sys/mutex.h> |
103 | extern kmutex_t device_lock; |
104 | |
105 | int devsw_attach(const char *, const struct bdevsw *, devmajor_t *, |
106 | const struct cdevsw *, devmajor_t *); |
107 | int devsw_detach(const struct bdevsw *, const struct cdevsw *); |
108 | const struct bdevsw *bdevsw_lookup(dev_t); |
109 | const struct cdevsw *cdevsw_lookup(dev_t); |
110 | devmajor_t bdevsw_lookup_major(const struct bdevsw *); |
111 | devmajor_t cdevsw_lookup_major(const struct cdevsw *); |
112 | |
113 | #define dev_type_open(n) int n (dev_t, int, int, struct lwp *) |
114 | #define dev_type_close(n) int n (dev_t, int, int, struct lwp *) |
115 | #define dev_type_read(n) int n (dev_t, struct uio *, int) |
116 | #define dev_type_write(n) int n (dev_t, struct uio *, int) |
117 | #define dev_type_ioctl(n) \ |
118 | int n (dev_t, u_long, void *, int, struct lwp *) |
119 | #define dev_type_stop(n) void n (struct tty *, int) |
120 | #define dev_type_tty(n) struct tty * n (dev_t) |
121 | #define dev_type_poll(n) int n (dev_t, int, struct lwp *) |
122 | #define dev_type_mmap(n) paddr_t n (dev_t, off_t, int) |
123 | #define dev_type_strategy(n) void n (struct buf *) |
124 | #define dev_type_dump(n) int n (dev_t, daddr_t, void *, size_t) |
125 | #define dev_type_size(n) int n (dev_t) |
126 | #define dev_type_kqfilter(n) int n (dev_t, struct knote *) |
127 | #define dev_type_discard(n) int n (dev_t, off_t, off_t) |
128 | |
129 | #define noopen ((dev_type_open((*)))enodev) |
130 | #define noclose ((dev_type_close((*)))enodev) |
131 | #define noread ((dev_type_read((*)))enodev) |
132 | #define nowrite ((dev_type_write((*)))enodev) |
133 | #define noioctl ((dev_type_ioctl((*)))enodev) |
134 | #define nostop ((dev_type_stop((*)))enodev) |
135 | #define notty NULL |
136 | #define nopoll seltrue |
137 | paddr_t nommap(dev_t, off_t, int); |
138 | #define nodump ((dev_type_dump((*)))enodev) |
139 | #define nosize NULL |
140 | #define nokqfilter seltrue_kqfilter |
141 | #define nodiscard ((dev_type_discard((*)))enodev) |
142 | |
143 | #define nullopen ((dev_type_open((*)))nullop) |
144 | #define nullclose ((dev_type_close((*)))nullop) |
145 | #define nullread ((dev_type_read((*)))nullop) |
146 | #define nullwrite ((dev_type_write((*)))nullop) |
147 | #define nullioctl ((dev_type_ioctl((*)))nullop) |
148 | #define nullstop ((dev_type_stop((*)))nullop) |
149 | #define nullpoll ((dev_type_poll((*)))nullop) |
150 | #define nulldump ((dev_type_dump((*)))nullop) |
151 | #define nullkqfilter ((dev_type_kqfilter((*)))eopnotsupp) |
152 | #define nulldiscard ((dev_type_discard((*)))nullop) |
153 | |
154 | /* device access wrappers. */ |
155 | |
156 | dev_type_open(bdev_open); |
157 | dev_type_close(bdev_close); |
158 | dev_type_strategy(bdev_strategy); |
159 | dev_type_ioctl(bdev_ioctl); |
160 | dev_type_dump(bdev_dump); |
161 | dev_type_size(bdev_size); |
162 | dev_type_discard(bdev_discard); |
163 | |
164 | dev_type_open(cdev_open); |
165 | dev_type_close(cdev_close); |
166 | dev_type_read(cdev_read); |
167 | dev_type_write(cdev_write); |
168 | dev_type_ioctl(cdev_ioctl); |
169 | dev_type_stop(cdev_stop); |
170 | dev_type_tty(cdev_tty); |
171 | dev_type_poll(cdev_poll); |
172 | dev_type_mmap(cdev_mmap); |
173 | dev_type_kqfilter(cdev_kqfilter); |
174 | dev_type_discard(cdev_discard); |
175 | |
176 | int cdev_type(dev_t); |
177 | int cdev_flags(dev_t); |
178 | int bdev_type(dev_t); |
179 | int bdev_flags(dev_t); |
180 | |
181 | /* symbolic sleep message strings */ |
182 | extern const char devopn[], devio[], devwait[], devin[], devout[]; |
183 | extern const char devioc[], devcls[]; |
184 | |
185 | #endif /* _KERNEL */ |
186 | |
187 | /* |
188 | * Line discipline switch table |
189 | */ |
190 | struct linesw { |
191 | const char *l_name; /* Linesw name */ |
192 | |
193 | LIST_ENTRY(linesw) l_list; |
194 | u_int l_refcnt; /* locked by ttyldisc_list_slock */ |
195 | int l_no; /* legacy discipline number (for TIOCGETD) */ |
196 | |
197 | int (*l_open) (dev_t, struct tty *); |
198 | int (*l_close) (struct tty *, int); |
199 | int (*l_read) (struct tty *, struct uio *, int); |
200 | int (*l_write) (struct tty *, struct uio *, int); |
201 | int (*l_ioctl) (struct tty *, u_long, void *, int, |
202 | struct lwp *); |
203 | int (*l_rint) (int, struct tty *); |
204 | int (*l_start) (struct tty *); |
205 | int (*l_modem) (struct tty *, int); |
206 | int (*l_poll) (struct tty *, int, struct lwp *); |
207 | }; |
208 | |
209 | #ifdef _KERNEL |
210 | void ttyldisc_init(void); |
211 | int ttyldisc_attach(struct linesw *); |
212 | int ttyldisc_detach(struct linesw *); |
213 | struct linesw *ttyldisc_lookup(const char *); |
214 | struct linesw *ttyldisc_lookup_bynum(int); |
215 | struct linesw *ttyldisc_default(void); |
216 | void ttyldisc_release(struct linesw *); |
217 | |
218 | /* For those defining their own line disciplines: */ |
219 | #define ttynodisc ((int (*)(dev_t, struct tty *))enodev) |
220 | #define ttyerrclose ((int (*)(struct tty *, int))enodev) |
221 | #define ttyerrio ((int (*)(struct tty *, struct uio *, int))enodev) |
222 | #define ttyerrinput ((int (*)(int, struct tty *))enodev) |
223 | #define ttyerrstart ((int (*)(struct tty *))enodev) |
224 | |
225 | int ttyerrpoll (struct tty *, int, struct lwp *); |
226 | int ttynullioctl(struct tty *, u_long, void *, int, struct lwp *); |
227 | |
228 | int iskmemdev(dev_t); |
229 | int seltrue_kqfilter(dev_t, struct knote *); |
230 | #endif |
231 | |
232 | #ifdef _KERNEL |
233 | |
234 | #define DEV_MEM 0 /* minor device 0 is physical memory */ |
235 | #define DEV_KMEM 1 /* minor device 1 is kernel memory */ |
236 | #define DEV_NULL 2 /* minor device 2 is EOF/rathole */ |
237 | #ifdef COMPAT_16 |
238 | #define _DEV_ZERO_oARM 3 /* reserved: old ARM /dev/zero minor */ |
239 | #endif |
240 | #define DEV_FULL 11 /* minor device 11 is '\0'/ENOSPC */ |
241 | #define DEV_ZERO 12 /* minor device 12 is '\0'/rathole */ |
242 | |
243 | enum devnode_class { |
244 | DEVNODE_DONTBOTHER, |
245 | DEVNODE_SINGLE, |
246 | DEVNODE_VECTOR, |
247 | }; |
248 | #define DEVNODE_FLAG_LINKZERO 0x01 /* create name -> name0 link */ |
249 | #define DEVNODE_FLAG_ISMINOR0 0x02 /* vector[0] specifies minor */ |
250 | #ifdef notyet |
251 | #define DEVNODE_FLAG_ISMINOR1 0x04 /* vector[1] specifies starting minor */ |
252 | #endif |
253 | |
254 | struct devsw_conv { |
255 | const char *d_name; |
256 | devmajor_t d_bmajor; |
257 | devmajor_t d_cmajor; |
258 | |
259 | /* information about /dev nodes related to the device */ |
260 | enum devnode_class d_class; |
261 | int d_flags; |
262 | int d_vectdim[2]; |
263 | }; |
264 | |
265 | void devsw_init(void); |
266 | const char *devsw_blk2name(devmajor_t); |
267 | const char *cdevsw_getname(devmajor_t); |
268 | const char *bdevsw_getname(devmajor_t); |
269 | devmajor_t devsw_name2blk(const char *, char *, size_t); |
270 | devmajor_t devsw_name2chr(const char *, char *, size_t); |
271 | dev_t devsw_chr2blk(dev_t); |
272 | dev_t devsw_blk2chr(dev_t); |
273 | |
274 | void mm_init(void); |
275 | #endif /* _KERNEL */ |
276 | |
277 | #ifdef _KERNEL |
278 | void setroot(device_t, int); |
279 | void rootconf(void); |
280 | void swapconf(void); |
281 | #endif /* _KERNEL */ |
282 | |
283 | #endif /* !_SYS_CONF_H_ */ |
284 | |