xref: /openbsd/sys/sys/conf.h (revision 6be71d15)
1 /*	$OpenBSD: conf.h,v 1.163 2024/06/11 01:49:17 jsg 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_DISK	1
59 #define	D_TTY	2
60 
61 /*
62  * Flags for d_flags
63  */
64 #define D_CLONE		0x0001		/* clone upon open */
65 
66 #ifdef _KERNEL
67 
68 #define	dev_type_open(n)	int n(dev_t, int, int, struct proc *)
69 #define	dev_type_close(n)	int n(dev_t, int, int, struct proc *)
70 #define	dev_type_strategy(n)	void n(struct buf *)
71 #define	dev_type_ioctl(n) \
72 	int n(dev_t, u_long, caddr_t, int, struct proc *)
73 
74 #define	dev_decl(n,t)	__CONCAT(dev_type_,t)(__CONCAT(n,t))
75 #define	dev_init(c,n,t) \
76 	((c) > 0 ? __CONCAT(n,t) : (__CONCAT(dev_type_,t)((*))) enxio)
77 
78 #endif /* _KERNEL */
79 
80 /*
81  * Block device switch table
82  */
83 struct bdevsw {
84 	int	(*d_open)(dev_t dev, int oflags, int devtype,
85 				     struct proc *p);
86 	int	(*d_close)(dev_t dev, int fflag, int devtype,
87 				     struct proc *p);
88 	void	(*d_strategy)(struct buf *bp);
89 	int	(*d_ioctl)(dev_t dev, u_long cmd, caddr_t data,
90 				     int fflag, struct proc *p);
91 	int	(*d_dump)(dev_t dev, daddr_t blkno, caddr_t va,
92 				    size_t size);
93 	daddr_t (*d_psize)(dev_t dev);
94 	u_int	d_type;
95 	/* u_int	d_flags; */
96 };
97 
98 #ifdef _KERNEL
99 
100 extern struct bdevsw bdevsw[];
101 
102 /* bdevsw-specific types */
103 #define	dev_type_dump(n)	int n(dev_t, daddr_t, caddr_t, size_t)
104 #define	dev_type_size(n)	daddr_t n(dev_t)
105 
106 /* bdevsw-specific initializations */
107 #define	dev_size_init(c,n)	(c > 0 ? __CONCAT(n,size) : 0)
108 
109 #define	bdev_decl(n) \
110 	dev_decl(n,open); dev_decl(n,close); dev_decl(n,strategy); \
111 	dev_decl(n,ioctl); dev_decl(n,dump); dev_decl(n,size)
112 
113 #define	bdev_disk_init(c,n) { \
114 	dev_init(c,n,open), dev_init(c,n,close), \
115 	dev_init(c,n,strategy), dev_init(c,n,ioctl), \
116 	dev_init(c,n,dump), dev_size_init(c,n), D_DISK }
117 
118 #define	bdev_swap_init(c,n) { \
119 	(dev_type_open((*))) enodev, (dev_type_close((*))) enodev, \
120 	dev_init(c,n,strategy), (dev_type_ioctl((*))) enodev, \
121 	(dev_type_dump((*))) enodev, 0 }
122 
123 #define	bdev_notdef() { \
124 	(dev_type_open((*))) enodev, (dev_type_close((*))) enodev, \
125 	(dev_type_strategy((*))) enodev, (dev_type_ioctl((*))) enodev, \
126 	(dev_type_dump((*))) enodev, 0 }
127 
128 #endif
129 
130 /*
131  * Character device switch table
132  */
133 struct cdevsw {
134 	int	(*d_open)(dev_t dev, int oflags, int devtype,
135 				     struct proc *p);
136 	int	(*d_close)(dev_t dev, int fflag, int devtype,
137 				     struct proc *);
138 	int	(*d_read)(dev_t dev, struct uio *uio, int ioflag);
139 	int	(*d_write)(dev_t dev, struct uio *uio, int ioflag);
140 	int	(*d_ioctl)(dev_t dev, u_long cmd, caddr_t data,
141 				     int fflag, struct proc *p);
142 	int	(*d_stop)(struct tty *tp, int rw);
143 	struct tty *
144 		(*d_tty)(dev_t dev);
145 	paddr_t	(*d_mmap)(dev_t, off_t, int);
146 	u_int	d_type;
147 	u_int	d_flags;
148 	int	(*d_kqfilter)(dev_t dev, struct knote *kn);
149 };
150 
151 #ifdef _KERNEL
152 
153 extern struct cdevsw cdevsw[];
154 
155 /* cdevsw-specific types */
156 #define	dev_type_read(n)	int n(dev_t, struct uio *, int)
157 #define	dev_type_write(n)	int n(dev_t, struct uio *, int)
158 #define	dev_type_stop(n)	int n(struct tty *, int)
159 #define	dev_type_tty(n)		struct tty *n(dev_t)
160 #define	dev_type_mmap(n)	paddr_t n(dev_t, off_t, int)
161 #define dev_type_kqfilter(n)	int n(dev_t, struct knote *)
162 
163 #define	cdev_decl(n) \
164 	dev_decl(n,open); dev_decl(n,close); dev_decl(n,read); \
165 	dev_decl(n,write); dev_decl(n,ioctl); dev_decl(n,stop); \
166 	dev_decl(n,tty); dev_decl(n,mmap); \
167 	dev_decl(n,kqfilter)
168 
169 /* open, close, read, write, ioctl */
170 #define	cdev_disk_init(c,n) { \
171 	dev_init(c,n,open), dev_init(c,n,close), dev_init(c,n,read), \
172 	dev_init(c,n,write), dev_init(c,n,ioctl), (dev_type_stop((*))) enodev, \
173 	0, (dev_type_mmap((*))) enodev, \
174 	D_DISK, 0, seltrue_kqfilter }
175 
176 /* open, close, read, write, ioctl */
177 #define	cdev_tape_init(c,n) { \
178 	dev_init(c,n,open), dev_init(c,n,close), dev_init(c,n,read), \
179 	dev_init(c,n,write), dev_init(c,n,ioctl), (dev_type_stop((*))) enodev, \
180 	0, (dev_type_mmap((*))) enodev, \
181 	0, 0, seltrue_kqfilter }
182 
183 /* open, close, read, write, ioctl, stop, tty */
184 #define	cdev_tty_init(c,n) { \
185 	dev_init(c,n,open), dev_init(c,n,close), dev_init(c,n,read), \
186 	dev_init(c,n,write), dev_init(c,n,ioctl), dev_init(c,n,stop), \
187 	dev_init(c,n,tty), (dev_type_mmap((*))) enodev, \
188 	D_TTY, 0, ttkqfilter }
189 
190 /* open, close, read, ioctl, kqfilter */
191 #define	cdev_mouse_init(c,n) { \
192 	dev_init(c,n,open), dev_init(c,n,close), dev_init(c,n,read), \
193 	(dev_type_write((*))) enodev, dev_init(c,n,ioctl), \
194 	(dev_type_stop((*))) enodev, 0, \
195 	(dev_type_mmap((*))) enodev , 0, 0, dev_init(c,n,kqfilter) }
196 
197 #define	cdev_notdef() { \
198 	(dev_type_open((*))) enodev, (dev_type_close((*))) enodev, \
199 	(dev_type_read((*))) enodev, (dev_type_write((*))) enodev, \
200 	(dev_type_ioctl((*))) enodev, (dev_type_stop((*))) enodev, \
201 	0, (dev_type_mmap((*))) enodev, 0, 0, seltrue_kqfilter }
202 
203 /* open, close, read, write, ioctl, kqfilter -- XXX should be a tty */
204 #define	cdev_cn_init(c,n) { \
205 	dev_init(c,n,open), dev_init(c,n,close), dev_init(c,n,read), \
206 	dev_init(c,n,write), dev_init(c,n,ioctl), dev_init(c,n,stop), \
207 	0, (dev_type_mmap((*))) enodev, \
208 	D_TTY, 0, dev_init(c,n,kqfilter) }
209 
210 /* open, read, write, ioctl, kqfilter -- XXX should be a tty */
211 #define cdev_ctty_init(c,n) { \
212 	dev_init(c,n,open), (dev_type_close((*))) nullop, dev_init(c,n,read), \
213 	dev_init(c,n,write), dev_init(c,n,ioctl), (dev_type_stop((*))) nullop, \
214 	0, (dev_type_mmap((*))) enodev, \
215 	D_TTY, 0, dev_init(c,n,kqfilter) }
216 
217 /* open, close, read, write, ioctl, mmap */
218 #define cdev_mm_init(c,n) { \
219 	dev_init(c,n,open), dev_init(c,n,close), dev_init(c,n,read), \
220 	dev_init(c,n,write), dev_init(c,n,ioctl), \
221 	(dev_type_stop((*))) enodev, 0, dev_init(c,n,mmap), \
222 	0, 0, seltrue_kqfilter }
223 
224 /* open, close, read, write, ioctl, tty, kqfilter */
225 #define cdev_ptc_init(c,n) { \
226 	dev_init(c,n,open), dev_init(c,n,close), dev_init(c,n,read), \
227 	dev_init(c,n,write), dev_init(c,n,ioctl), (dev_type_stop((*))) nullop, \
228 	dev_init(c,n,tty), (dev_type_mmap((*))) enodev, \
229 	D_TTY, 0, dev_init(c,n,kqfilter) }
230 
231 /* open, close, read, write, ioctl, mmap */
232 #define cdev_ptm_init(c,n) { \
233 	dev_init(c,n,open), dev_init(c,n,close), (dev_type_read((*))) enodev, \
234 	(dev_type_write((*))) enodev, dev_init(c,n,ioctl), \
235 	(dev_type_stop((*))) enodev, 0, (dev_type_mmap((*))) enodev }
236 
237 /* open, close, read, ioctl, kqfilter XXX should be a generic device */
238 #define cdev_log_init(c,n) { \
239 	dev_init(c,n,open), dev_init(c,n,close), dev_init(c,n,read), \
240 	(dev_type_write((*))) enodev, dev_init(c,n,ioctl), \
241 	(dev_type_stop((*))) enodev, 0, \
242 	(dev_type_mmap((*))) enodev, 0, 0, dev_init(c,n,kqfilter) }
243 
244 /* open */
245 #define cdev_fd_init(c,n) { \
246 	dev_init(c,n,open), (dev_type_close((*))) enodev, \
247 	(dev_type_read((*))) enodev, (dev_type_write((*))) enodev, \
248 	(dev_type_ioctl((*))) enodev, (dev_type_stop((*))) enodev, \
249 	0, (dev_type_mmap((*))) enodev }
250 
251 /* open, close, read, write, ioctl, kqfilter -- XXX should be generic device */
252 #define cdev_tun_init(c,n) { \
253 	dev_init(c,n,open), dev_init(c,n,close), dev_init(c,n,read), \
254 	dev_init(c,n,write), dev_init(c,n,ioctl), (dev_type_stop((*))) enodev, \
255 	0, (dev_type_mmap((*))) enodev, \
256 	0, 0, dev_init(c,n,kqfilter) }
257 
258 /* open, close, ioctl, kqfilter -- XXX should be generic device */
259 #define cdev_vscsi_init(c,n) { \
260 	dev_init(c,n,open), dev_init(c,n,close), \
261 	(dev_type_read((*))) enodev, (dev_type_write((*))) enodev, \
262 	dev_init(c,n,ioctl), (dev_type_stop((*))) enodev, \
263 	0, (dev_type_mmap((*))) enodev, \
264 	0, 0, dev_init(c,n,kqfilter) }
265 
266 /* open, close, read, write, ioctl, kqfilter -- XXX should be generic device */
267 #define cdev_pppx_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_type_mmap((*))) enodev, \
271 	0, 0, dev_init(c,n,kqfilter) }
272 
273 /* open, close, read, write, ioctl, kqfilter, cloning -- XXX should be generic device */
274 #define cdev_bpf_init(c,n) { \
275 	dev_init(c,n,open), dev_init(c,n,close), dev_init(c,n,read), \
276 	dev_init(c,n,write), dev_init(c,n,ioctl), (dev_type_stop((*))) enodev, \
277 	0, (dev_type_mmap((*))) enodev, \
278 	0, D_CLONE, dev_init(c,n,kqfilter) }
279 
280 /* open, close, ioctl */
281 #define	cdev_ch_init(c,n) { \
282 	dev_init(c,n,open), dev_init(c,n,close), (dev_type_read((*))) enodev, \
283 	(dev_type_write((*))) enodev, dev_init(c,n,ioctl), \
284 	(dev_type_stop((*))) enodev, 0, \
285 	(dev_type_mmap((*))) enodev }
286 
287 /* open, close, ioctl */
288 #define       cdev_uk_init(c,n) { \
289 	dev_init(c,n,open), dev_init(c,n,close), (dev_type_read((*))) enodev, \
290 	(dev_type_write((*))) enodev, dev_init(c,n,ioctl), \
291 	(dev_type_stop((*))) enodev, 0, \
292 	(dev_type_mmap((*))) enodev }
293 
294 /* open, close, ioctl, mmap */
295 #define	cdev_fb_init(c,n) { \
296 	dev_init(c,n,open), dev_init(c,n,close), (dev_type_read((*))) enodev, \
297 	(dev_type_write((*))) enodev, dev_init(c,n,ioctl), \
298 	(dev_type_stop((*))) enodev, 0, \
299 	dev_init(c,n,mmap) }
300 
301 /* open, close, read, write, ioctl, kqfilter */
302 #define cdev_audio_init(c,n) { \
303 	dev_init(c,n,open), dev_init(c,n,close), dev_init(c,n,read), \
304 	dev_init(c,n,write), dev_init(c,n,ioctl), \
305 	(dev_type_stop((*))) enodev, 0, \
306 	(dev_type_mmap((*))) enodev, 0, 0, dev_init(c,n,kqfilter) }
307 
308 /* open, close, read, write, ioctl, kqfilter */
309 #define cdev_midi_init(c,n) { \
310 	dev_init(c,n,open), dev_init(c,n,close), dev_init(c,n,read), \
311 	dev_init(c,n,write), dev_init(c,n,ioctl), \
312 	(dev_type_stop((*))) enodev, 0, \
313 	(dev_type_mmap((*))) enodev, 0, 0, dev_init(c,n,kqfilter) }
314 
315 /* open, close, read */
316 #define cdev_ksyms_init(c,n) { \
317 	dev_init(c,n,open), dev_init(c,n,close), dev_init(c,n,read), \
318 	(dev_type_write((*))) enodev, (dev_type_ioctl((*))) enodev, \
319 	(dev_type_stop((*))) enodev, 0, \
320 	(dev_type_mmap((*))) enodev, 0, 0, seltrue_kqfilter }
321 
322 /* open, close, ioctl */
323 #define cdev_kstat_init(c,n) { \
324 	dev_init(c,n,open), dev_init(c,n,close), (dev_type_read((*))) enodev, \
325 	(dev_type_write((*))) enodev, dev_init(c,n,ioctl), \
326 	(dev_type_stop((*))) enodev, 0, \
327 	(dev_type_mmap((*))) enodev }
328 
329 /* open, close, read, write, ioctl, stop, tty, mmap, kqfilter */
330 #define	cdev_wsdisplay_init(c,n) { \
331 	dev_init(c,n,open), dev_init(c,n,close), dev_init(c,n,read), \
332 	dev_init(c,n,write), dev_init(c,n,ioctl), dev_init(c,n,stop), \
333 	dev_init(c,n,tty), dev_init(c,n,mmap), \
334 	D_TTY, 0, dev_init(c,n,kqfilter) }
335 
336 /* open, close, read, write, ioctl, kqfilter */
337 #define	cdev_random_init(c,n) { \
338 	dev_init(c,n,open), dev_init(c,n,close), dev_init(c,n,read), \
339 	dev_init(c,n,write), dev_init(c,n,ioctl), (dev_type_stop((*))) enodev, \
340 	0, (dev_type_mmap((*))) enodev, \
341 	0, 0, dev_init(c,n,kqfilter) }
342 
343 /* open, close, ioctl, nokqfilter */
344 #define	cdev_usb_init(c,n) { \
345 	dev_init(c,n,open), dev_init(c,n,close), (dev_type_read((*))) enodev, \
346 	(dev_type_write((*))) enodev, dev_init(c,n,ioctl), \
347 	(dev_type_stop((*))) enodev, 0, \
348 	(dev_type_mmap((*))) enodev }
349 
350 /* open, close, write */
351 #define cdev_ulpt_init(c,n) { \
352 	dev_init(c,n,open), dev_init(c,n,close), (dev_type_read((*))) enodev, \
353 	dev_init(c,n,write), (dev_type_ioctl((*))) enodev, \
354 	(dev_type_stop((*))) enodev, 0, (dev_type_mmap((*))) enodev }
355 
356 /* open, close, ioctl */
357 #define cdev_pf_init(c,n) { \
358 	dev_init(c,n,open), dev_init(c,n,close), (dev_type_read((*))) enodev, \
359 	(dev_type_write((*))) enodev, dev_init(c,n,ioctl), \
360 	(dev_type_stop((*))) enodev, 0, \
361 	(dev_type_mmap((*))) enodev, 0, D_CLONE }
362 
363 /* open, close, read, write, ioctl, kqfilter */
364 #define	cdev_usbdev_init(c,n) { \
365 	dev_init(c,n,open), dev_init(c,n,close), dev_init(c,n,read), \
366 	dev_init(c,n,write), dev_init(c,n,ioctl), (dev_type_stop((*))) enodev, \
367 	0, (dev_type_mmap((*))) enodev, 0, 0, \
368 	dev_init(c,n,kqfilter) }
369 
370 /* open, close, read, write, ioctl, kqfilter */
371 #define	cdev_fido_init(c,n) { \
372 	dev_init(c,n,open), dev_init(c,uhid,close), dev_init(c,uhid,read), \
373 	dev_init(c,uhid,write), dev_init(c,fido,ioctl), \
374 	(dev_type_stop((*))) enodev, 0, \
375 	(dev_type_mmap((*))) enodev, 0, 0, dev_init(c,uhid,kqfilter) }
376 
377 /* open, close, read, write, ioctl, kqfilter */
378 #define	cdev_ujoy_init(c,n) { \
379 	dev_init(c,n,open), dev_init(c,uhid,close), dev_init(c,uhid,read), \
380 	dev_init(c,uhid,write), dev_init(c,ujoy,ioctl), \
381 	(dev_type_stop((*))) enodev, 0, \
382 	(dev_type_mmap((*))) enodev, 0, 0, dev_init(c,uhid,kqfilter) }
383 
384 /* open, close, init */
385 #define cdev_pci_init(c,n) { \
386 	dev_init(c,n,open), dev_init(c,n,close), (dev_type_read((*))) enodev, \
387 	(dev_type_write((*))) enodev, dev_init(c,n,ioctl), \
388 	(dev_type_stop((*))) enodev, 0, \
389 	(dev_type_mmap((*))) enodev }
390 
391 /* open, close, ioctl */
392 #define cdev_radio_init(c,n) { \
393 	dev_init(c,n,open), dev_init(c,n,close), (dev_type_read((*))) enodev, \
394 	(dev_type_write((*))) enodev, dev_init(c,n,ioctl), \
395 	(dev_type_stop((*))) enodev, 0, \
396 	(dev_type_mmap((*))) enodev }
397 
398 /* open, close, ioctl, read, mmap, kqfilter */
399 #define cdev_video_init(c,n) { \
400 	dev_init(c,n,open), dev_init(c,n,close), dev_init(c,n,read), \
401 	(dev_type_write((*))) enodev, dev_init(c,n,ioctl), \
402 	(dev_type_stop((*))) enodev, 0, \
403 	dev_init(c,n,mmap), 0, 0, dev_init(c,n,kqfilter) }
404 
405 /* open, close, write, ioctl */
406 #define cdev_spkr_init(c,n) { \
407 	dev_init(c,n,open), dev_init(c,n,close), (dev_type_read((*))) enodev, \
408 	dev_init(c,n,write), dev_init(c,n,ioctl), (dev_type_stop((*))) enodev, \
409 	0, (dev_type_mmap((*))) enodev, \
410 	0, 0, seltrue_kqfilter }
411 
412 /* open, close, write */
413 #define cdev_lpt_init(c,n) { \
414 	dev_init(c,n,open), dev_init(c,n,close), (dev_type_read((*))) enodev, \
415 	dev_init(c,n,write), (dev_type_ioctl((*))) enodev, \
416 	(dev_type_stop((*))) enodev, 0, (dev_type_mmap((*))) enodev, \
417 	0, 0, seltrue_kqfilter }
418 
419 /* open, close, read, ioctl, mmap */
420 #define cdev_bktr_init(c, n) { \
421 	dev_init(c,n,open), dev_init(c,n,close), dev_init(c,n,read), \
422 	(dev_type_write((*))) enodev, dev_init(c,n,ioctl), \
423 	(dev_type_stop((*))) enodev, 0, dev_init(c,n,mmap), \
424 	0, 0, seltrue_kqfilter }
425 
426 /* open, close, read, ioctl, kqfilter */
427 #define cdev_hotplug_init(c,n) { \
428 	dev_init(c,n,open), dev_init(c,n,close), dev_init(c,n,read), \
429 	(dev_type_write((*))) enodev, dev_init(c,n,ioctl), \
430 	(dev_type_stop((*))) enodev, 0, \
431 	(dev_type_mmap((*))) enodev, 0, 0, dev_init(c,n,kqfilter) }
432 
433 /* open, close, ioctl */
434 #define cdev_gpio_init(c,n) { \
435 	dev_init(c,n,open), dev_init(c,n,close), (dev_type_read((*))) enodev, \
436 	(dev_type_write((*))) enodev, dev_init(c,n,ioctl), \
437 	(dev_type_stop((*))) enodev, 0, \
438 	(dev_type_mmap((*))) enodev }
439 
440 /* open, close, ioctl */
441 #define       cdev_bio_init(c,n) { \
442 	dev_init(c,n,open), dev_init(c,n,close), (dev_type_read((*))) enodev, \
443 	(dev_type_write((*))) enodev, dev_init(c,n,ioctl), \
444 	(dev_type_stop((*))) enodev, 0, \
445 	(dev_type_mmap((*))) enodev }
446 
447 /* open, close, read, ioctl, mmap, nokqfilter */
448 #define      cdev_drm_init(c,n)        { \
449 	dev_init(c,n,open), dev_init(c,n,close), dev_init(c, n, read), \
450 	(dev_type_write((*))) enodev, dev_init(c,n,ioctl), \
451 	(dev_type_stop((*))) enodev, 0, \
452 	dev_init(c,n,mmap), 0, D_CLONE, dev_init(c,n,kqfilter) }
453 
454 /* open, close, ioctl */
455 #define cdev_amdmsr_init(c,n) { \
456 	dev_init(c,n,open), dev_init(c,n,close), (dev_type_read((*))) enodev, \
457 	(dev_type_write((*))) enodev, dev_init(c,n,ioctl), \
458 	(dev_type_stop((*))) enodev, 0, \
459 	(dev_type_mmap((*))) enodev }
460 
461 /* open, close, read, write, ioctl */
462 #define cdev_fuse_init(c,n) { \
463 	dev_init(c,n,open), dev_init(c,n,close), dev_init(c,n,read), \
464 	dev_init(c,n,write), dev_init(c,n,ioctl), \
465 	(dev_type_stop((*))) enodev, 0, \
466 	(dev_type_mmap((*))) enodev, 0, D_CLONE, dev_init(c,n,kqfilter) }
467 
468 /* open, close, ioctl */
469 #define cdev_pvbus_init(c,n) { \
470 	dev_init(c,n,open), dev_init(c,n,close), \
471 	(dev_type_read((*))) enodev, \
472 	(dev_type_write((*))) enodev, \
473 	 dev_init(c,n,ioctl), \
474 	(dev_type_stop((*))) enodev, 0, \
475 	(dev_type_mmap((*))) enodev }
476 
477 /* open, close, ioctl */
478 #define cdev_ipmi_init(c,n) { \
479 	dev_init(c,n,open), dev_init(c,n,close), (dev_type_read((*))) enodev, \
480 	(dev_type_write((*))) enodev, dev_init(c,n,ioctl), \
481 	(dev_type_stop((*))) enodev, 0, (dev_type_mmap((*))) enodev, \
482 	0, 0, seltrue_kqfilter }
483 
484 /* open, close, ioctl */
485 #define cdev_efi_init(c,n) { \
486 	dev_init(c,n,open), dev_init(c,n,close), (dev_type_read((*))) enodev, \
487 	(dev_type_write((*))) enodev, dev_init(c,n,ioctl), \
488 	(dev_type_stop((*))) enodev, 0, \
489 	(dev_type_mmap((*))) enodev }
490 
491 /* open, close, ioctl, mmap */
492 #define cdev_kcov_init(c,n) { \
493 	dev_init(c,n,open), dev_init(c,n,close), (dev_type_read((*))) enodev, \
494 	(dev_type_write((*))) enodev, dev_init(c,n,ioctl), \
495 	(dev_type_stop((*))) enodev, 0, \
496 	(dev_init(c,n,mmap)), 0, D_CLONE }
497 
498 /* open, close, read, ioctl */
499 #define cdev_dt_init(c,n) { \
500 	dev_init(c,n,open), dev_init(c,n,close), dev_init(c,n,read), \
501 	(dev_type_write((*))) enodev, dev_init(c,n,ioctl), \
502 	(dev_type_stop((*))) enodev, 0, \
503 	(dev_type_mmap((*))) enodev, 0, D_CLONE }
504 
505 #endif
506 
507 /*
508  * Line discipline switch table
509  */
510 struct linesw {
511 	int	(*l_open)(dev_t dev, struct tty *tp, struct proc *p);
512 	int	(*l_close)(struct tty *tp, int flags, struct proc *p);
513 	int	(*l_read)(struct tty *tp, struct uio *uio,
514 				     int flag);
515 	int	(*l_write)(struct tty *tp, struct uio *uio,
516 				     int flag);
517 	int	(*l_ioctl)(struct tty *tp, u_long cmd, caddr_t data,
518 				     int flag, struct proc *p);
519 	int	(*l_rint)(int c, struct tty *tp);
520 	int	(*l_start)(struct tty *tp);
521 	int	(*l_modem)(struct tty *tp, int flag);
522 };
523 
524 #ifdef _KERNEL
525 extern struct linesw linesw[];
526 #endif
527 
528 /*
529  * Swap device table
530  */
531 struct swdevt {
532 	dev_t	sw_dev;
533 	int	sw_flags;
534 };
535 #define	SW_FREED	0x01
536 #define	SW_SEQUENTIAL	0x02
537 #define	sw_freed	sw_flags	/* XXX compat */
538 
539 #ifdef _KERNEL
540 extern struct swdevt swdevt[];
541 extern const int chrtoblktbl[];
542 extern const int nchrtoblktbl;
543 
544 struct bdevsw *bdevsw_lookup(dev_t);
545 struct cdevsw *cdevsw_lookup(dev_t);
546 dev_t	chrtoblk(dev_t);
547 dev_t	blktochr(dev_t);
548 int	iskmemdev(dev_t);
549 int	iszerodev(dev_t);
550 dev_t	getnulldev(void);
551 
552 cdev_decl(filedesc);
553 
554 cdev_decl(log);
555 
556 #define	ptstty		ptytty
557 #define	ptsioctl	ptyioctl
558 cdev_decl(pts);
559 
560 #define	ptctty		ptytty
561 #define	ptcioctl	ptyioctl
562 cdev_decl(ptc);
563 
564 cdev_decl(ptm);
565 
566 cdev_decl(ctty);
567 
568 cdev_decl(audio);
569 cdev_decl(drm);
570 cdev_decl(midi);
571 cdev_decl(radio);
572 cdev_decl(video);
573 cdev_decl(cn);
574 
575 bdev_decl(sw);
576 
577 bdev_decl(vnd);
578 cdev_decl(vnd);
579 
580 cdev_decl(ch);
581 
582 bdev_decl(sd);
583 cdev_decl(sd);
584 
585 cdev_decl(st);
586 
587 bdev_decl(cd);
588 cdev_decl(cd);
589 
590 bdev_decl(rd);
591 cdev_decl(rd);
592 
593 bdev_decl(uk);
594 cdev_decl(uk);
595 
596 cdev_decl(dt);
597 
598 cdev_decl(diskmap);
599 
600 cdev_decl(bpf);
601 
602 cdev_decl(pf);
603 
604 cdev_decl(tun);
605 cdev_decl(tap);
606 cdev_decl(pppx);
607 cdev_decl(pppac);
608 
609 cdev_decl(random);
610 
611 cdev_decl(wsdisplay);
612 cdev_decl(wskbd);
613 cdev_decl(wsmouse);
614 cdev_decl(wsmux);
615 
616 cdev_decl(ksyms);
617 cdev_decl(kstat);
618 
619 cdev_decl(bio);
620 cdev_decl(vscsi);
621 
622 cdev_decl(bktr);
623 
624 cdev_decl(usb);
625 cdev_decl(ugen);
626 cdev_decl(uhid);
627 cdev_decl(fido);
628 cdev_decl(ujoy);
629 cdev_decl(ucom);
630 cdev_decl(ulpt);
631 
632 cdev_decl(hotplug);
633 cdev_decl(gpio);
634 cdev_decl(amdmsr);
635 cdev_decl(fuse);
636 cdev_decl(pvbus);
637 cdev_decl(ipmi);
638 cdev_decl(efi);
639 cdev_decl(kcov);
640 
641 #endif
642 
643 #endif /* _SYS_CONF_H_ */
644