xref: /openbsd/sys/sys/conf.h (revision 264ca280)
1 /*	$OpenBSD: conf.h,v 1.141 2016/04/26 07:08:20 deraadt Exp $	*/
2 /*	$NetBSD: conf.h,v 1.33 1996/05/03 20:03:32 christos Exp $	*/
3 
4 /*-
5  * Copyright (c) 1990, 1993
6  *	The Regents of the University of California.  All rights reserved.
7  * (c) UNIX System Laboratories, Inc.
8  * All or some portions of this file are derived from material licensed
9  * to the University of California by American Telephone and Telegraph
10  * Co. or Unix System Laboratories, Inc. and are reproduced herein with
11  * the permission of UNIX System Laboratories, Inc.
12  *
13  * Redistribution and use in source and binary forms, with or without
14  * modification, are permitted provided that the following conditions
15  * are met:
16  * 1. Redistributions of source code must retain the above copyright
17  *    notice, this list of conditions and the following disclaimer.
18  * 2. Redistributions in binary form must reproduce the above copyright
19  *    notice, this list of conditions and the following disclaimer in the
20  *    documentation and/or other materials provided with the distribution.
21  * 3. Neither the name of the University nor the names of its contributors
22  *    may be used to endorse or promote products derived from this software
23  *    without specific prior written permission.
24  *
25  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
26  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
27  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
28  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
29  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
30  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
31  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
32  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
33  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
34  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
35  * SUCH DAMAGE.
36  *
37  *	@(#)conf.h	8.3 (Berkeley) 1/21/94
38  */
39 
40 
41 #ifndef _SYS_CONF_H_
42 #define _SYS_CONF_H_
43 
44 /*
45  * Definitions of device driver entry switches
46  */
47 
48 struct buf;
49 struct proc;
50 struct tty;
51 struct uio;
52 struct vnode;
53 struct knote;
54 
55 /*
56  * Types for d_type
57  */
58 #define	D_TAPE	1
59 #define	D_DISK	2
60 #define	D_TTY	3
61 
62 /*
63  * Flags for d_flags
64  */
65 #define D_CLONE		0x0001		/* clone upon open */
66 
67 #ifdef _KERNEL
68 
69 #define	dev_type_open(n)	int n(dev_t, int, int, struct proc *)
70 #define	dev_type_close(n)	int n(dev_t, int, int, struct proc *)
71 #define	dev_type_strategy(n)	void n(struct buf *)
72 #define	dev_type_ioctl(n) \
73 	int n(dev_t, u_long, caddr_t, int, struct proc *)
74 
75 #define	dev_decl(n,t)	__CONCAT(dev_type_,t)(__CONCAT(n,t))
76 #define	dev_init(c,n,t) \
77 	((c) > 0 ? __CONCAT(n,t) : (__CONCAT(dev_type_,t)((*))) enxio)
78 
79 #endif /* _KERNEL */
80 
81 /*
82  * Block device switch table
83  */
84 struct bdevsw {
85 	int	(*d_open)(dev_t dev, int oflags, int devtype,
86 				     struct proc *p);
87 	int	(*d_close)(dev_t dev, int fflag, int devtype,
88 				     struct proc *p);
89 	void	(*d_strategy)(struct buf *bp);
90 	int	(*d_ioctl)(dev_t dev, u_long cmd, caddr_t data,
91 				     int fflag, struct proc *p);
92 	int	(*d_dump)(dev_t dev, daddr_t blkno, caddr_t va,
93 				    size_t size);
94 	daddr_t (*d_psize)(dev_t dev);
95 	u_int	d_type;
96 	/* u_int	d_flags; */
97 };
98 
99 #ifdef _KERNEL
100 
101 extern struct bdevsw bdevsw[];
102 
103 /* bdevsw-specific types */
104 #define	dev_type_dump(n)	int n(dev_t, daddr_t, caddr_t, size_t)
105 #define	dev_type_size(n)	daddr_t n(dev_t)
106 
107 /* bdevsw-specific initializations */
108 #define	dev_size_init(c,n)	(c > 0 ? __CONCAT(n,size) : 0)
109 
110 #define	bdev_decl(n) \
111 	dev_decl(n,open); dev_decl(n,close); dev_decl(n,strategy); \
112 	dev_decl(n,ioctl); dev_decl(n,dump); dev_decl(n,size)
113 
114 #define	bdev_disk_init(c,n) { \
115 	dev_init(c,n,open), dev_init(c,n,close), \
116 	dev_init(c,n,strategy), dev_init(c,n,ioctl), \
117 	dev_init(c,n,dump), dev_size_init(c,n), D_DISK }
118 
119 #define	bdev_tape_init(c,n) { \
120 	dev_init(c,n,open), dev_init(c,n,close), \
121 	dev_init(c,n,strategy), dev_init(c,n,ioctl), \
122 	dev_init(c,n,dump), 0, D_TAPE }
123 
124 #define	bdev_swap_init(c,n) { \
125 	(dev_type_open((*))) enodev, (dev_type_close((*))) enodev, \
126 	dev_init(c,n,strategy), (dev_type_ioctl((*))) enodev, \
127 	(dev_type_dump((*))) enodev, 0 }
128 
129 #define	bdev_notdef() { \
130 	(dev_type_open((*))) enodev, (dev_type_close((*))) enodev, \
131 	(dev_type_strategy((*))) enodev, (dev_type_ioctl((*))) enodev, \
132 	(dev_type_dump((*))) enodev, 0 }
133 
134 #endif
135 
136 /*
137  * Character device switch table
138  */
139 struct cdevsw {
140 	int	(*d_open)(dev_t dev, int oflags, int devtype,
141 				     struct proc *p);
142 	int	(*d_close)(dev_t dev, int fflag, int devtype,
143 				     struct proc *);
144 	int	(*d_read)(dev_t dev, struct uio *uio, int ioflag);
145 	int	(*d_write)(dev_t dev, struct uio *uio, int ioflag);
146 	int	(*d_ioctl)(dev_t dev, u_long cmd, caddr_t data,
147 				     int fflag, struct proc *p);
148 	int	(*d_stop)(struct tty *tp, int rw);
149 	struct tty *
150 		(*d_tty)(dev_t dev);
151 	int	(*d_poll)(dev_t dev, int events, struct proc *p);
152 	paddr_t	(*d_mmap)(dev_t, off_t, int);
153 	u_int	d_type;
154 	u_int	d_flags;
155 	int	(*d_kqfilter)(dev_t dev, struct knote *kn);
156 };
157 
158 #ifdef _KERNEL
159 
160 extern struct cdevsw cdevsw[];
161 
162 /* cdevsw-specific types */
163 #define	dev_type_read(n)	int n(dev_t, struct uio *, int)
164 #define	dev_type_write(n)	int n(dev_t, struct uio *, int)
165 #define	dev_type_stop(n)	int n(struct tty *, int)
166 #define	dev_type_tty(n)		struct tty *n(dev_t)
167 #define	dev_type_poll(n)	int n(dev_t, int, struct proc *)
168 #define	dev_type_mmap(n)	paddr_t n(dev_t, off_t, int)
169 #define dev_type_kqfilter(n)	int n(dev_t, struct knote *)
170 
171 #define	cdev_decl(n) \
172 	dev_decl(n,open); dev_decl(n,close); dev_decl(n,read); \
173 	dev_decl(n,write); dev_decl(n,ioctl); dev_decl(n,stop); \
174 	dev_decl(n,tty); dev_decl(n,poll); dev_decl(n,mmap); \
175 	dev_decl(n,kqfilter)
176 
177 /* open, close, read, write, ioctl */
178 #define	cdev_disk_init(c,n) { \
179 	dev_init(c,n,open), dev_init(c,n,close), dev_init(c,n,read), \
180 	dev_init(c,n,write), dev_init(c,n,ioctl), (dev_type_stop((*))) enodev, \
181 	0, seltrue, (dev_type_mmap((*))) enodev, \
182 	D_DISK, 0, seltrue_kqfilter }
183 
184 /* open, close, read, write, ioctl */
185 #define	cdev_tape_init(c,n) { \
186 	dev_init(c,n,open), dev_init(c,n,close), dev_init(c,n,read), \
187 	dev_init(c,n,write), dev_init(c,n,ioctl), (dev_type_stop((*))) enodev, \
188 	0, seltrue, (dev_type_mmap((*))) enodev, \
189 	D_TAPE, 0, seltrue_kqfilter }
190 
191 /* open, close, read, write, ioctl, stop, tty */
192 #define	cdev_tty_init(c,n) { \
193 	dev_init(c,n,open), dev_init(c,n,close), dev_init(c,n,read), \
194 	dev_init(c,n,write), dev_init(c,n,ioctl), dev_init(c,n,stop), \
195 	dev_init(c,n,tty), ttpoll, (dev_type_mmap((*))) enodev, \
196 	D_TTY, 0, ttkqfilter }
197 
198 /* open, close, read, ioctl, poll, kqfilter */
199 #define	cdev_mouse_init(c,n) { \
200 	dev_init(c,n,open), dev_init(c,n,close), dev_init(c,n,read), \
201 	(dev_type_write((*))) enodev, dev_init(c,n,ioctl), \
202 	(dev_type_stop((*))) enodev, 0, dev_init(c,n,poll), \
203 	(dev_type_mmap((*))) enodev , 0, 0, dev_init(c,n,kqfilter) }
204 
205 /* open, close, read, write, ioctl, poll, nokqfilter */
206 #define	cdev_mousewr_init(c,n) { \
207 	dev_init(c,n,open), dev_init(c,n,close), dev_init(c,n,read), \
208 	dev_init(c,n,write), dev_init(c,n,ioctl), \
209 	(dev_type_stop((*))) enodev, 0, dev_init(c,n,poll), \
210 	(dev_type_mmap((*))) enodev }
211 
212 #define	cdev_notdef() { \
213 	(dev_type_open((*))) enodev, (dev_type_close((*))) enodev, \
214 	(dev_type_read((*))) enodev, (dev_type_write((*))) enodev, \
215 	(dev_type_ioctl((*))) enodev, (dev_type_stop((*))) enodev, \
216 	0, seltrue, (dev_type_mmap((*))) enodev }
217 
218 /* open, close, read, write, ioctl, poll, kqfilter -- XXX should be a tty */
219 #define	cdev_cn_init(c,n) { \
220 	dev_init(c,n,open), dev_init(c,n,close), dev_init(c,n,read), \
221 	dev_init(c,n,write), dev_init(c,n,ioctl), dev_init(c,n,stop), \
222 	0, dev_init(c,n,poll), (dev_type_mmap((*))) enodev, \
223 	D_TTY, 0, dev_init(c,n,kqfilter) }
224 
225 /* open, read, write, ioctl, poll, kqfilter -- XXX should be a tty */
226 #define cdev_ctty_init(c,n) { \
227 	dev_init(c,n,open), (dev_type_close((*))) nullop, dev_init(c,n,read), \
228 	dev_init(c,n,write), dev_init(c,n,ioctl), (dev_type_stop((*))) nullop, \
229 	0, dev_init(c,n,poll), (dev_type_mmap((*))) enodev, \
230 	D_TTY, 0, dev_init(c,n,kqfilter) }
231 
232 /* open, close, read, write, ioctl, mmap */
233 #define cdev_mm_init(c,n) { \
234 	dev_init(c,n,open), dev_init(c,n,close), dev_init(c,n,read), \
235 	dev_init(c,n,write), dev_init(c,n,ioctl), \
236 	(dev_type_stop((*))) enodev, 0, seltrue, dev_init(c,n,mmap), \
237 	0, 0, seltrue_kqfilter }
238 
239 /* open, close, read, write, ioctl, tty, poll, kqfilter */
240 #define cdev_ptc_init(c,n) { \
241 	dev_init(c,n,open), dev_init(c,n,close), dev_init(c,n,read), \
242 	dev_init(c,n,write), dev_init(c,n,ioctl), (dev_type_stop((*))) nullop, \
243 	dev_init(c,n,tty), dev_init(c,n,poll), (dev_type_mmap((*))) enodev, \
244 	D_TTY, 0, dev_init(c,n,kqfilter) }
245 
246 /* open, close, read, write, ioctl, mmap */
247 #define cdev_ptm_init(c,n) { \
248 	dev_init(c,n,open), dev_init(c,n,close), (dev_type_read((*))) enodev, \
249 	(dev_type_write((*))) enodev, dev_init(c,n,ioctl), \
250 	(dev_type_stop((*))) enodev, 0, selfalse, (dev_type_mmap((*))) enodev }
251 
252 /* open, close, read, ioctl, poll, kqfilter XXX should be a generic device */
253 #define cdev_log_init(c,n) { \
254 	dev_init(c,n,open), dev_init(c,n,close), dev_init(c,n,read), \
255 	(dev_type_write((*))) enodev, dev_init(c,n,ioctl), \
256 	(dev_type_stop((*))) enodev, 0, dev_init(c,n,poll), \
257 	(dev_type_mmap((*))) enodev, 0, 0, dev_init(c,n,kqfilter) }
258 
259 /* open */
260 #define cdev_fd_init(c,n) { \
261 	dev_init(c,n,open), (dev_type_close((*))) enodev, \
262 	(dev_type_read((*))) enodev, (dev_type_write((*))) enodev, \
263 	(dev_type_ioctl((*))) enodev, (dev_type_stop((*))) enodev, \
264 	0, selfalse, (dev_type_mmap((*))) enodev }
265 
266 /* open, close, read, write, ioctl, poll, kqfilter -- XXX should be generic device */
267 #define cdev_tun_init(c,n) { \
268 	dev_init(c,n,open), dev_init(c,n,close), dev_init(c,n,read), \
269 	dev_init(c,n,write), dev_init(c,n,ioctl), (dev_type_stop((*))) enodev, \
270 	0, dev_init(c,n,poll), (dev_type_mmap((*))) enodev, \
271 	0, 0, dev_init(c,n,kqfilter) }
272 
273 /* open, close, ioctl, poll, kqfilter -- XXX should be generic device */
274 #define cdev_vscsi_init(c,n) { \
275 	dev_init(c,n,open), dev_init(c,n,close), \
276 	(dev_type_read((*))) enodev, (dev_type_write((*))) enodev, \
277 	dev_init(c,n,ioctl), (dev_type_stop((*))) enodev, \
278 	0, dev_init(c,n,poll), (dev_type_mmap((*))) enodev, \
279 	0, 0, dev_init(c,n,kqfilter) }
280 
281 /* open, close, read, write, ioctl, poll, kqfilter -- XXX should be generic device */
282 #define cdev_pppx_init(c,n) { \
283 	dev_init(c,n,open), dev_init(c,n,close), dev_init(c,n,read), \
284 	dev_init(c,n,write), dev_init(c,n,ioctl), (dev_type_stop((*))) enodev, \
285 	0, dev_init(c,n,poll), (dev_type_mmap((*))) enodev, \
286 	0, 0, dev_init(c,n,kqfilter) }
287 
288 /* open, close, read, write, ioctl, poll, kqfilter, cloning -- XXX should be generic device */
289 #define cdev_bpf_init(c,n) { \
290 	dev_init(c,n,open), dev_init(c,n,close), dev_init(c,n,read), \
291 	dev_init(c,n,write), dev_init(c,n,ioctl), (dev_type_stop((*))) enodev, \
292 	0, dev_init(c,n,poll), (dev_type_mmap((*))) enodev, \
293 	0, D_CLONE, dev_init(c,n,kqfilter) }
294 
295 /* open, close, ioctl */
296 #define	cdev_ch_init(c,n) { \
297 	dev_init(c,n,open), dev_init(c,n,close), (dev_type_read((*))) enodev, \
298 	(dev_type_write((*))) enodev, dev_init(c,n,ioctl), \
299 	(dev_type_stop((*))) enodev, 0, selfalse, \
300 	(dev_type_mmap((*))) enodev }
301 
302 /* open, close, ioctl */
303 #define       cdev_uk_init(c,n) { \
304 	dev_init(c,n,open), dev_init(c,n,close), (dev_type_read((*))) enodev, \
305 	(dev_type_write((*))) enodev, dev_init(c,n,ioctl), \
306 	(dev_type_stop((*))) enodev, 0, selfalse, \
307 	(dev_type_mmap((*))) enodev }
308 
309 /* open, close, ioctl, mmap */
310 #define	cdev_fb_init(c,n) { \
311 	dev_init(c,n,open), dev_init(c,n,close), (dev_type_read((*))) enodev, \
312 	(dev_type_write((*))) enodev, dev_init(c,n,ioctl), \
313 	(dev_type_stop((*))) enodev, 0, selfalse, \
314 	dev_init(c,n,mmap) }
315 
316 /* open, close, read, write, ioctl, poll, kqfilter */
317 #define cdev_audio_init(c,n) { \
318 	dev_init(c,n,open), dev_init(c,n,close), dev_init(c,n,read), \
319 	dev_init(c,n,write), dev_init(c,n,ioctl), \
320 	(dev_type_stop((*))) enodev, 0, dev_init(c,n,poll), \
321 	(dev_type_mmap((*))) enodev }
322 
323 /* open, close, read, write, ioctl, poll, kqfilter */
324 #define cdev_midi_init(c,n) { \
325 	dev_init(c,n,open), dev_init(c,n,close), dev_init(c,n,read), \
326 	dev_init(c,n,write), dev_init(c,n,ioctl), \
327 	(dev_type_stop((*))) enodev, 0, dev_init(c,n,poll), \
328 	(dev_type_mmap((*))) enodev, 0, 0, dev_init(c,n,kqfilter) }
329 
330 /* open, close, read */
331 #define cdev_ksyms_init(c,n) { \
332 	dev_init(c,n,open), dev_init(c,n,close), dev_init(c,n,read), \
333 	(dev_type_write((*))) enodev, (dev_type_ioctl((*))) enodev, \
334 	(dev_type_stop((*))) enodev, 0, seltrue, \
335 	(dev_type_mmap((*))) enodev, 0, 0, seltrue_kqfilter }
336 
337 /* open, close, read, write, ioctl, stop, tty, poll, mmap, kqfilter */
338 #define	cdev_wsdisplay_init(c,n) { \
339 	dev_init(c,n,open), dev_init(c,n,close), dev_init(c,n,read), \
340 	dev_init(c,n,write), dev_init(c,n,ioctl), dev_init(c,n,stop), \
341 	dev_init(c,n,tty), dev_init(c,n,poll), dev_init(c,n,mmap), \
342 	D_TTY, 0, dev_init(c,n,kqfilter) }
343 
344 /* open, close, read, write, ioctl, poll, kqfilter */
345 #define	cdev_random_init(c,n) { \
346 	dev_init(c,n,open), dev_init(c,n,close), dev_init(c,n,read), \
347 	dev_init(c,n,write), dev_init(c,n,ioctl), (dev_type_stop((*))) enodev, \
348 	0, seltrue, (dev_type_mmap((*))) enodev, \
349 	0, 0, dev_init(c,n,kqfilter) }
350 
351 /* open, close, ioctl, poll, nokqfilter */
352 #define	cdev_usb_init(c,n) { \
353 	dev_init(c,n,open), dev_init(c,n,close), (dev_type_read((*))) enodev, \
354 	(dev_type_write((*))) enodev, dev_init(c,n,ioctl), \
355 	(dev_type_stop((*))) enodev, 0, selfalse, \
356 	(dev_type_mmap((*))) enodev }
357 
358 /* open, close, write */
359 #define cdev_ulpt_init(c,n) { \
360 	dev_init(c,n,open), dev_init(c,n,close), (dev_type_read((*))) enodev, \
361 	dev_init(c,n,write), (dev_type_ioctl((*))) enodev, \
362 	(dev_type_stop((*))) enodev, 0, selfalse, (dev_type_mmap((*))) enodev }
363 
364 /* open, close, ioctl */
365 #define cdev_pf_init(c,n) { \
366 	dev_init(c,n,open), dev_init(c,n,close), (dev_type_read((*))) enodev, \
367 	(dev_type_write((*))) enodev, dev_init(c,n,ioctl), \
368 	(dev_type_stop((*))) enodev, 0, selfalse, \
369 	(dev_type_mmap((*))) enodev }
370 
371 /* open, close, read, write, ioctl, poll, kqfilter */
372 #define	cdev_usbdev_init(c,n) { \
373 	dev_init(c,n,open), dev_init(c,n,close), dev_init(c,n,read), \
374 	dev_init(c,n,write), dev_init(c,n,ioctl), (dev_type_stop((*))) enodev, \
375 	0, dev_init(c,n,poll), (dev_type_mmap((*))) enodev, 0, 0, \
376 	dev_init(c,n,kqfilter) }
377 
378 /* open, close, init */
379 #define cdev_pci_init(c,n) { \
380 	dev_init(c,n,open), dev_init(c,n,close), (dev_type_read((*))) enodev, \
381 	(dev_type_write((*))) enodev, dev_init(c,n,ioctl), \
382 	(dev_type_stop((*))) enodev, 0, selfalse, \
383 	(dev_type_mmap((*))) enodev }
384 
385 /* open, close, ioctl */
386 #define cdev_radio_init(c,n) { \
387 	dev_init(c,n,open), dev_init(c,n,close), (dev_type_read((*))) enodev, \
388 	(dev_type_write((*))) enodev, dev_init(c,n,ioctl), \
389 	(dev_type_stop((*))) enodev, 0, selfalse, \
390 	(dev_type_mmap((*))) enodev }
391 
392 /* open, close, ioctl, read, mmap, poll */
393 #define cdev_video_init(c,n) { \
394 	dev_init(c,n,open), dev_init(c,n,close), dev_init(c,n,read), \
395 	(dev_type_write((*))) enodev, dev_init(c,n,ioctl), \
396 	(dev_type_stop((*))) enodev, 0, dev_init(c,n,poll), \
397 	dev_init(c,n,mmap) }
398 
399 /* open, close, write, ioctl */
400 #define cdev_spkr_init(c,n) { \
401 	dev_init(c,n,open), dev_init(c,n,close), (dev_type_read((*))) enodev, \
402 	dev_init(c,n,write), dev_init(c,n,ioctl), (dev_type_stop((*))) enodev, \
403 	0, seltrue, (dev_type_mmap((*))) enodev, \
404 	0, 0, seltrue_kqfilter }
405 
406 /* open, close, write */
407 #define cdev_lpt_init(c,n) { \
408 	dev_init(c,n,open), dev_init(c,n,close), (dev_type_read((*))) enodev, \
409 	dev_init(c,n,write), (dev_type_ioctl((*))) enodev, \
410 	(dev_type_stop((*))) enodev, 0, seltrue, (dev_type_mmap((*))) enodev, \
411 	0, 0, seltrue_kqfilter }
412 
413 /* open, close, read, ioctl, mmap */
414 #define cdev_bktr_init(c, n) { \
415 	dev_init(c,n,open), dev_init(c,n,close), dev_init(c,n,read), \
416 	(dev_type_write((*))) enodev, dev_init(c,n,ioctl), \
417 	(dev_type_stop((*))) enodev, 0, seltrue, dev_init(c,n,mmap), \
418 	0, 0, seltrue_kqfilter }
419 
420 /* open, close, read, ioctl, poll, kqfilter */
421 #define cdev_hotplug_init(c,n) { \
422 	dev_init(c,n,open), dev_init(c,n,close), dev_init(c,n,read), \
423 	(dev_type_write((*))) enodev, dev_init(c,n,ioctl), \
424 	(dev_type_stop((*))) enodev, 0, dev_init(c,n,poll), \
425 	(dev_type_mmap((*))) enodev, 0, 0, dev_init(c,n,kqfilter) }
426 
427 /* open, close, ioctl */
428 #define cdev_gpio_init(c,n) { \
429 	dev_init(c,n,open), dev_init(c,n,close), (dev_type_read((*))) enodev, \
430 	(dev_type_write((*))) enodev, dev_init(c,n,ioctl), \
431 	(dev_type_stop((*))) enodev, 0, selfalse, \
432 	(dev_type_mmap((*))) enodev }
433 
434 /* open, close, ioctl */
435 #define       cdev_bio_init(c,n) { \
436 	dev_init(c,n,open), dev_init(c,n,close), (dev_type_read((*))) enodev, \
437 	(dev_type_write((*))) enodev, dev_init(c,n,ioctl), \
438 	(dev_type_stop((*))) enodev, 0, selfalse, \
439 	(dev_type_mmap((*))) enodev }
440 
441 /* open, close, read, ioctl, poll, mmap, nokqfilter */
442 #define      cdev_drm_init(c,n)        { \
443 	dev_init(c,n,open), dev_init(c,n,close), dev_init(c, n, read), \
444 	(dev_type_write((*))) enodev, dev_init(c,n,ioctl), \
445 	(dev_type_stop((*))) enodev, 0,  dev_init(c,n,poll), \
446 	dev_init(c,n,mmap), 0, D_CLONE }
447 
448 /* open, close, ioctl */
449 #define cdev_amdmsr_init(c,n) { \
450 	dev_init(c,n,open), dev_init(c,n,close), (dev_type_read((*))) enodev, \
451 	(dev_type_write((*))) enodev, dev_init(c,n,ioctl), \
452 	(dev_type_stop((*))) enodev, 0, selfalse, \
453 	(dev_type_mmap((*))) enodev }
454 
455 /* open, close, read, write, poll, ioctl */
456 #define cdev_fuse_init(c,n) { \
457 	dev_init(c,n,open), dev_init(c,n,close), dev_init(c,n,read), \
458 	dev_init(c,n,write), dev_init(c,n,ioctl), \
459 	(dev_type_stop((*))) enodev, 0, dev_init(c,n,poll), \
460 	(dev_type_mmap((*))) enodev, 0, D_CLONE, dev_init(c,n,kqfilter) }
461 
462 #define cdev_pvbus_init(c,n) { \
463 	dev_init(c,n,open), dev_init(c,n,close), \
464 	(dev_type_read((*))) enodev, \
465 	(dev_type_write((*))) enodev, \
466 	 dev_init(c,n,ioctl), \
467 	(dev_type_stop((*))) enodev, 0, selfalse, \
468 	(dev_type_mmap((*))) enodev }
469 
470 /* open, close, read, write, poll, ioctl, nokqfilter */
471 #define cdev_ipmi_init(c,n) { \
472 	dev_init(c,n,open), dev_init(c,n,close), (dev_type_read((*))) enodev, \
473 	(dev_type_write((*))) enodev, dev_init(c,n,ioctl), \
474 	(dev_type_stop((*))) enodev, 0, (dev_type_poll((*))) enodev, \
475 	(dev_type_mmap((*))) enodev, 0 }
476 
477 #endif
478 
479 /*
480  * Line discipline switch table
481  */
482 struct linesw {
483 	int	(*l_open)(dev_t dev, struct tty *tp, struct proc *p);
484 	int	(*l_close)(struct tty *tp, int flags, struct proc *p);
485 	int	(*l_read)(struct tty *tp, struct uio *uio,
486 				     int flag);
487 	int	(*l_write)(struct tty *tp, struct uio *uio,
488 				     int flag);
489 	int	(*l_ioctl)(struct tty *tp, u_long cmd, caddr_t data,
490 				     int flag, struct proc *p);
491 	int	(*l_rint)(int c, struct tty *tp);
492 	int	(*l_start)(struct tty *tp);
493 	int	(*l_modem)(struct tty *tp, int flag);
494 };
495 
496 #ifdef _KERNEL
497 extern struct linesw linesw[];
498 #endif
499 
500 /*
501  * Swap device table
502  */
503 struct swdevt {
504 	dev_t	sw_dev;
505 	int	sw_flags;
506 };
507 #define	SW_FREED	0x01
508 #define	SW_SEQUENTIAL	0x02
509 #define	sw_freed	sw_flags	/* XXX compat */
510 
511 #ifdef _KERNEL
512 extern struct swdevt swdevt[];
513 extern int chrtoblktbl[];
514 extern int nchrtoblktbl;
515 
516 struct bdevsw *bdevsw_lookup(dev_t);
517 struct cdevsw *cdevsw_lookup(dev_t);
518 dev_t	chrtoblk(dev_t);
519 dev_t	blktochr(dev_t);
520 int	iskmemdev(dev_t);
521 int	iszerodev(dev_t);
522 dev_t	getnulldev(void);
523 
524 cdev_decl(filedesc);
525 
526 cdev_decl(log);
527 
528 #define	ptstty		ptytty
529 #define	ptsioctl	ptyioctl
530 cdev_decl(pts);
531 
532 #define	ptctty		ptytty
533 #define	ptcioctl	ptyioctl
534 cdev_decl(ptc);
535 
536 cdev_decl(ptm);
537 
538 cdev_decl(ctty);
539 
540 cdev_decl(audio);
541 cdev_decl(drm);
542 cdev_decl(midi);
543 cdev_decl(radio);
544 cdev_decl(video);
545 cdev_decl(cn);
546 
547 bdev_decl(sw);
548 
549 bdev_decl(vnd);
550 cdev_decl(vnd);
551 
552 cdev_decl(ch);
553 
554 bdev_decl(sd);
555 cdev_decl(sd);
556 
557 cdev_decl(ses);
558 
559 bdev_decl(st);
560 cdev_decl(st);
561 
562 bdev_decl(cd);
563 cdev_decl(cd);
564 
565 bdev_decl(rd);
566 cdev_decl(rd);
567 
568 bdev_decl(uk);
569 cdev_decl(uk);
570 
571 cdev_decl(diskmap);
572 
573 cdev_decl(bpf);
574 
575 cdev_decl(pf);
576 
577 cdev_decl(tun);
578 cdev_decl(tap);
579 cdev_decl(pppx);
580 
581 cdev_decl(random);
582 
583 cdev_decl(wsdisplay);
584 cdev_decl(wskbd);
585 cdev_decl(wsmouse);
586 cdev_decl(wsmux);
587 
588 cdev_decl(ksyms);
589 
590 cdev_decl(bio);
591 cdev_decl(vscsi);
592 
593 cdev_decl(gpr);
594 cdev_decl(bktr);
595 
596 cdev_decl(usb);
597 cdev_decl(ugen);
598 cdev_decl(uhid);
599 cdev_decl(ucom);
600 cdev_decl(ulpt);
601 cdev_decl(urio);
602 
603 cdev_decl(hotplug);
604 cdev_decl(gpio);
605 cdev_decl(amdmsr);
606 cdev_decl(fuse);
607 cdev_decl(pvbus);
608 cdev_decl(ipmi);
609 
610 #endif
611 
612 #endif /* _SYS_CONF_H_ */
613