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
48struct buf;
49struct proc;
50struct tty;
51struct uio;
52struct vnode;
53struct 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 */
83struct 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
100extern 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 */
133struct 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
153extern 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 */
510struct 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
525extern struct linesw linesw[];
526#endif
527
528/*
529 * Swap device table
530 */
531struct 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
540extern struct swdevt swdevt[];
541extern const int chrtoblktbl[];
542extern const int nchrtoblktbl;
543
544struct bdevsw *bdevsw_lookup(dev_t);
545struct cdevsw *cdevsw_lookup(dev_t);
546dev_t	chrtoblk(dev_t);
547dev_t	blktochr(dev_t);
548int	iskmemdev(dev_t);
549int	iszerodev(dev_t);
550dev_t	getnulldev(void);
551
552cdev_decl(filedesc);
553
554cdev_decl(log);
555
556#define	ptstty		ptytty
557#define	ptsioctl	ptyioctl
558cdev_decl(pts);
559
560#define	ptctty		ptytty
561#define	ptcioctl	ptyioctl
562cdev_decl(ptc);
563
564cdev_decl(ptm);
565
566cdev_decl(ctty);
567
568cdev_decl(audio);
569cdev_decl(drm);
570cdev_decl(midi);
571cdev_decl(radio);
572cdev_decl(video);
573cdev_decl(cn);
574
575bdev_decl(sw);
576
577bdev_decl(vnd);
578cdev_decl(vnd);
579
580cdev_decl(ch);
581
582bdev_decl(sd);
583cdev_decl(sd);
584
585cdev_decl(st);
586
587bdev_decl(cd);
588cdev_decl(cd);
589
590bdev_decl(rd);
591cdev_decl(rd);
592
593bdev_decl(uk);
594cdev_decl(uk);
595
596cdev_decl(dt);
597
598cdev_decl(diskmap);
599
600cdev_decl(bpf);
601
602cdev_decl(pf);
603
604cdev_decl(tun);
605cdev_decl(tap);
606cdev_decl(pppx);
607cdev_decl(pppac);
608
609cdev_decl(random);
610
611cdev_decl(wsdisplay);
612cdev_decl(wskbd);
613cdev_decl(wsmouse);
614cdev_decl(wsmux);
615
616cdev_decl(ksyms);
617cdev_decl(kstat);
618
619cdev_decl(bio);
620cdev_decl(vscsi);
621
622cdev_decl(bktr);
623
624cdev_decl(usb);
625cdev_decl(ugen);
626cdev_decl(uhid);
627cdev_decl(fido);
628cdev_decl(ujoy);
629cdev_decl(ucom);
630cdev_decl(ulpt);
631
632cdev_decl(hotplug);
633cdev_decl(gpio);
634cdev_decl(amdmsr);
635cdev_decl(fuse);
636cdev_decl(pvbus);
637cdev_decl(ipmi);
638cdev_decl(efi);
639cdev_decl(kcov);
640
641#endif
642
643#endif /* _SYS_CONF_H_ */
644