xref: /netbsd/sys/sys/conf.h (revision bf9ec67e)
1 /*	$NetBSD: conf.h,v 1.101 2002/04/23 06:48:46 manu 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. All advertising materials mentioning features or use of this software
21  *    must display the following acknowledgement:
22  *	This product includes software developed by the University of
23  *	California, Berkeley and its contributors.
24  * 4. Neither the name of the University nor the names of its contributors
25  *    may be used to endorse or promote products derived from this software
26  *    without specific prior written permission.
27  *
28  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
29  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
30  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
31  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
32  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
33  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
34  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
35  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
36  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
37  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
38  * SUCH DAMAGE.
39  *
40  *	@(#)conf.h	8.5 (Berkeley) 1/9/95
41  */
42 
43 #ifndef _SYS_CONF_H_
44 #define _SYS_CONF_H_
45 
46 /*
47  * Definitions of device driver entry switches
48  */
49 
50 struct buf;
51 struct proc;
52 struct tty;
53 struct uio;
54 struct vnode;
55 
56 /*
57  * Types for d_type
58  */
59 #define	D_TAPE	1
60 #define	D_DISK	2
61 #define	D_TTY	3
62 
63 #ifdef _KERNEL
64 
65 #define	dev_type_open(n)	int n __P((dev_t, int, int, struct proc *))
66 #define	dev_type_close(n)	int n __P((dev_t, int, int, struct proc *))
67 #define	dev_type_strategy(n)	void n __P((struct buf *))
68 #define	dev_type_ioctl(n) \
69 	int n __P((dev_t, u_long, caddr_t, int, struct proc *))
70 
71 #define	dev_decl(n,t)		__CONCAT(dev_type_,t)(__CONCAT(n,t))
72 #define	dev_init(c,n,t) \
73 	((c) > 0 ? __CONCAT(n,t) : (__CONCAT(dev_type_,t)((*))) enxio)
74 #define	dev_noimpl(t,f)		(__CONCAT(dev_type_,t)((*)))f
75 
76 #endif /* _KERNEL */
77 
78 /*
79  * Block device switch table
80  */
81 struct bdevsw {
82 	int	(*d_open)	__P((dev_t dev, int oflags, int devtype,
83 				     struct proc *p));
84 	int	(*d_close)	__P((dev_t dev, int fflag, int devtype,
85 				     struct proc *p));
86 	void	(*d_strategy)	__P((struct buf *bp));
87 	int	(*d_ioctl)	__P((dev_t dev, u_long cmd, caddr_t data,
88 				     int fflag, struct proc *p));
89 	int	(*d_dump)	__P((dev_t dev, daddr_t blkno, caddr_t va,
90 				    size_t size));
91 	int	(*d_psize)	__P((dev_t dev));
92 	int	d_type;
93 };
94 
95 #ifdef _KERNEL
96 
97 extern struct bdevsw bdevsw[];
98 
99 /* bdevsw-specific types */
100 #define	dev_type_dump(n)	int n __P((dev_t, daddr_t, caddr_t, size_t))
101 #define	dev_type_size(n)	int n __P((dev_t))
102 
103 /* bdevsw-specific initializations */
104 #define	dev_size_init(c,n)	(c > 0 ? __CONCAT(n,size) : 0)
105 
106 #define	bdev_decl(n) \
107 	dev_decl(n,open); dev_decl(n,close); dev_decl(n,strategy); \
108 	dev_decl(n,ioctl); dev_decl(n,dump); dev_decl(n,size)
109 
110 #define	bdev_disk_init(c,n) { \
111 	dev_init(c,n,open), dev_init(c,n,close), \
112 	dev_init(c,n,strategy), dev_init(c,n,ioctl), \
113 	dev_init(c,n,dump), dev_size_init(c,n), D_DISK }
114 
115 #define	bdev_tape_init(c,n) { \
116 	dev_init(c,n,open), dev_init(c,n,close), \
117 	dev_init(c,n,strategy), dev_init(c,n,ioctl), \
118 	dev_init(c,n,dump), 0, D_TAPE }
119 
120 #define	bdev_swap_init(c,n) { \
121 	dev_noimpl(open,enodev), dev_noimpl(close,enodev), \
122 	dev_init(c,n,strategy), dev_noimpl(ioctl,enodev), \
123 	dev_noimpl(dump,enodev), 0 }
124 
125 #ifdef LKM
126 #define	bdev_lkm_dummy() { \
127 	dev_noimpl(open,lkmenodev), dev_noimpl(close,enodev), \
128 	dev_noimpl(strategy,enodev), dev_noimpl(ioctl,enodev), \
129 	dev_noimpl(dump,enodev), 0 }
130 #else
131 #define	bdev_lkm_dummy()	bdev_notdef()
132 #endif
133 
134 #define	bdev_notdef() { \
135 	dev_noimpl(open,enodev), dev_noimpl(close,enodev), \
136 	dev_noimpl(strategy,enodev), dev_noimpl(ioctl,enodev), \
137 	dev_noimpl(dump,enodev), 0 }
138 
139 #endif /* _KERNEL */
140 
141 /*
142  * Character device switch table
143  */
144 struct cdevsw {
145 	int	(*d_open)	__P((dev_t dev, int oflags, int devtype,
146 				     struct proc *p));
147 	int	(*d_close)	__P((dev_t dev, int fflag, int devtype,
148 				     struct proc *));
149 	int	(*d_read)	__P((dev_t dev, struct uio *uio, int ioflag));
150 	int	(*d_write)	__P((dev_t dev, struct uio *uio, int ioflag));
151 	int	(*d_ioctl)	__P((dev_t dev, u_long cmd, caddr_t data,
152 				     int fflag, struct proc *p));
153 	void	(*d_stop)	__P((struct tty *tp, int rw));
154 	struct tty *
155 		(*d_tty)	__P((dev_t dev));
156 	int	(*d_poll)	__P((dev_t dev, int events, struct proc *p));
157 	paddr_t	(*d_mmap)	__P((dev_t, off_t, int));
158 	int	d_type;
159 };
160 
161 #ifdef _KERNEL
162 
163 extern struct cdevsw cdevsw[];
164 
165 /* cdevsw-specific types */
166 #define	dev_type_read(n)	int n __P((dev_t, struct uio *, int))
167 #define	dev_type_write(n)	int n __P((dev_t, struct uio *, int))
168 #define	dev_type_stop(n)	void n __P((struct tty *, int))
169 #define	dev_type_tty(n)		struct tty *n __P((dev_t))
170 #define	dev_type_poll(n)	int n __P((dev_t, int, struct proc *))
171 #define	dev_type_mmap(n)	paddr_t n __P((dev_t, off_t, int))
172 
173 #define	cdev_decl(n) \
174 	dev_decl(n,open); dev_decl(n,close); dev_decl(n,read); \
175 	dev_decl(n,write); dev_decl(n,ioctl); dev_decl(n,stop); \
176 	dev_decl(n,tty); dev_decl(n,poll); dev_decl(n,mmap)
177 
178 /* helper macros */
179 
180 /*  open, close, ioctl */
181 #define	cdev__oci_init(c,n) { \
182 	dev_init(c,n,open), dev_init(c,n,close), dev_noimpl(read,enodev), \
183 	dev_noimpl(write,enodev), dev_init(c,n,ioctl), \
184 	dev_noimpl(stop,enodev), 0, seltrue, dev_noimpl(mmap,enodev), 0 }
185 
186 /*  open, close, mmap */
187 #define cdev__ocm_init(c,n) { \
188         dev_init(c,n,open), dev_init(c,n,close), dev_noimpl(read,enodev), \
189         dev_noimpl(write,enodev), dev_noimpl(ioctl,enodev), \
190         dev_noimpl(stop,enodev), 0, dev_noimpl(poll,enodev), \
191         dev_init(c,n,mmap), 0 }
192 
193 /*  open, close, ioctl, poll */
194 #define cdev__ocip_init(c,n) { \
195         dev_init(c,n,open), dev_init(c,n,close), dev_noimpl(read,enodev), \
196         dev_noimpl(write,enodev), dev_init(c,n,ioctl), \
197         dev_noimpl(stop,enodev), 0, dev_init(c,n,poll), \
198         dev_noimpl(mmap,enodev), 0 }
199 
200 /*  open, close, ioctl, poll, mmap */
201 #define cdev__ocipm_init(c,n) { \
202         dev_init(c,n,open), dev_init(c,n,close), dev_noimpl(read,enodev), \
203         dev_noimpl(write,enodev), dev_init(c,n,ioctl), \
204         dev_noimpl(stop,enodev), 0, dev_init(c,n,poll), dev_init(c,n,mmap), 0 }
205 
206 /*  open, close, read, ioctl */
207 #define	cdev__ocri_init(c,n) { \
208 	dev_init(c,n,open), dev_init(c,n,close), dev_init(c,n,read), \
209 	dev_noimpl(write,enodev), dev_init(c,n,ioctl), \
210 	dev_noimpl(stop,enodev), 0, seltrue, dev_noimpl(mmap,enodev), 0 }
211 
212 /*  open, close, read, write */
213 #define	cdev__ocrw_init(c,n) { \
214 	dev_init(c,n,open), dev_init(c,n,close), dev_init(c,n,read), \
215 	dev_init(c,n,write), dev_noimpl(ioctl,enodev), \
216 	dev_noimpl(stop,enodev), 0, seltrue, dev_noimpl(mmap,enodev), 0 }
217 
218 /*  open, close, read, write, ioctl */
219 #define	cdev__ocrwi_t_init(c,n,t) { \
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_noimpl(stop,enodev), \
222 	0, seltrue, dev_noimpl(mmap,enodev), t }
223 #define	cdev__ocrwi_init(c,n)	cdev__ocrwi_t_init(c,n,0)
224 
225 /*  open, close, read, write, ioctl, mmap */
226 #define	cdev__ocrwim_init(c,n) { \
227 	dev_init(c,n,open), dev_init(c,n,close), dev_init(c,n,read), \
228 	dev_init(c,n,write), dev_init(c,n,ioctl), dev_noimpl(stop,enodev), \
229 	0, seltrue, dev_init(c,n,mmap), 0 }
230 
231 /*  open, close, read, ioctl, poll */
232 #define	cdev__ocrip_init(c,n) { \
233 	dev_init(c,n,open), dev_init(c,n,close), dev_init(c,n,read), \
234 	dev_noimpl(write,enodev), dev_init(c,n,ioctl), \
235 	dev_noimpl(stop,enodev), 0, dev_init(c,n,poll), \
236 	dev_noimpl(mmap,enodev), 0 }
237 
238 /*  open, close, read, write, poll */
239 #define	cdev__ocrwp_init(c,n) { \
240 	dev_init(c,n,open), dev_init(c,n,close), dev_init(c,n,read), \
241 	dev_init(c,n,write), dev_noimpl(ioctl,enodev), \
242 	dev_noimpl(stop,enodev), 0, dev_init(c,n,poll), \
243 	dev_noimpl(mmap,enodev), 0 }
244 
245 /*  open, close, read, write, ioctl, poll */
246 #define cdev__ocrwip_init(c,n) { \
247 	dev_init(c,n,open), dev_init(c,n,close), dev_init(c,n,read), \
248 	dev_init(c,n,write), dev_init(c,n,ioctl), dev_noimpl(stop,enodev), \
249 	0, dev_init(c,n,poll), dev_noimpl(mmap,enodev), 0 }
250 
251 /*  open, close, (read), (write), ioctl, poll, mmap */
252 #define	cdev__ocRWipm_init(c,n) { \
253 	dev_init(c,n,open), dev_init(c,n,close), \
254 	dev_noimpl(read,nullop), dev_noimpl(write,nullop), \
255 	dev_init(c,n,ioctl), dev_noimpl(stop,enodev), 0, \
256 	dev_init(c,n,poll), dev_init(c,n,mmap), 0 }
257 
258 /*  open, close, ioctl, mmap */
259 #define	cdev__ocim_init(c,n) { \
260 	dev_init(c,n,open), dev_init(c,n,close), \
261 	dev_noimpl(read,enodev), dev_noimpl(write,enodev), \
262 	dev_init(c,n,ioctl), dev_noimpl(stop,enodev), 0, \
263 	dev_noimpl(poll,enodev), dev_init(c,n,mmap), 0 }
264 
265 /*  open, close, read, write, ioctl, stop, poll */
266 #define	cdev__ocrwisp_init(c,n) { \
267 	dev_init(c,n,open), dev_init(c,n,close), dev_init(c,n,read), \
268 	dev_init(c,n,write), dev_init(c,n,ioctl), dev_init(c,n,stop), \
269 	0, dev_init(c,n,poll), dev_noimpl(mmap,enodev), 0 }
270 
271 /*  open, close, write, ioctl */
272 #define	cdev__ocwi_init(c,n) { \
273 	dev_init(c,n,open), dev_init(c,n,close), dev_noimpl(read,enodev), \
274 	dev_init(c,n,write), dev_init(c,n,ioctl), dev_noimpl(stop,enodev), \
275 	0, seltrue, dev_noimpl(mmap,enodev), 0 }
276 
277 /*  open, close, read, write, ioctl, stop, tty, poll */
278 #define	cdev__tty_init(c,n,t) { \
279 	dev_init(c,n,open), dev_init(c,n,close), dev_init(c,n,read), \
280 	dev_init(c,n,write), dev_init(c,n,ioctl), dev_init(c,n,stop), \
281 	dev_init(c,n,tty), dev_init(c,n,poll), dev_noimpl(mmap,enodev), t }
282 
283 /*  open, close, read, write, ioctl, stop, tty, poll, mmap */
284 #define	cdev__ttym_init(c,n,t) { \
285 	dev_init(c,n,open), dev_init(c,n,close), dev_init(c,n,read), \
286 	dev_init(c,n,write), dev_init(c,n,ioctl), dev_init(c,n,stop), \
287 	dev_init(c,n,tty), dev_init(c,n,poll), dev_init(c,n,mmap), t }
288 
289 /* open, close, read, write, ioctl */
290 #define	cdev_disk_init(c,n)	cdev__ocrwi_t_init(c,n,D_DISK)
291 #define	cdev_tape_init(c,n)	cdev__ocrwi_t_init(c,n,D_TAPE)
292 
293 /* open, close, read, write, ioctl, stop, tty, poll */
294 #define	cdev_tty_init(c,n)	cdev__tty_init(c,n,D_TTY)
295 
296 /* open, close, read, ioctl, poll */
297 #define	cdev_mouse_init(c,n)	cdev__ocrip_init(c,n)
298 
299 /* open, close, read, ioctl */
300 #define cdev_scanner_init(c,n)	cdev__ocri_init(c,n)
301 
302 #ifdef LKM
303 #define	cdev_lkm_dummy() { \
304 	dev_noimpl(open,lkmenodev), dev_noimpl(close,enodev), \
305 	dev_noimpl(read,enodev), dev_noimpl(write,enodev), \
306 	dev_noimpl(ioctl,enodev), dev_noimpl(stop,enodev), \
307 	0, seltrue, dev_noimpl(mmap,enodev) }
308 #else
309 #define	cdev_lkm_dummy()	cdev_notdef()
310 #endif
311 
312 #define	cdev_notdef() { \
313 	dev_noimpl(open,enodev), dev_noimpl(close,enodev), \
314 	dev_noimpl(read,enodev), dev_noimpl(write,enodev), \
315 	dev_noimpl(ioctl,enodev), dev_noimpl(stop,enodev), \
316 	0, seltrue, dev_noimpl(mmap,enodev) }
317 
318 /* open, close, read, write, ioctl, stop, poll -- XXX should be a tty */
319 #define	cdev_cn_init(c,n) { \
320 	dev_init(c,n,open), dev_init(c,n,close), dev_init(c,n,read), \
321 	dev_init(c,n,write), dev_init(c,n,ioctl), dev_init(c,n,stop), \
322 	0, dev_init(c,n,poll), dev_noimpl(mmap,enodev), D_TTY }
323 
324 /* open, (close), read, write, ioctl, (stop), poll -- XXX should be a tty */
325 #define cdev_ctty_init(c,n) { \
326 	dev_init(c,n,open), dev_noimpl(close,nullop), dev_init(c,n,read), \
327 	dev_init(c,n,write), dev_init(c,n,ioctl), dev_noimpl(stop,nullop), \
328 	0, dev_init(c,n,poll), dev_noimpl(mmap,enodev), D_TTY }
329 
330 /* open, close, read, write, mmap */
331 #define cdev_mm_init(c,n) { \
332 	dev_init(c,n,open), dev_init(c,n,close), dev_init(c,n,read), \
333 	dev_init(c,n,write), dev_init(c,n,ioctl), \
334 	dev_noimpl(stop,enodev), 0, seltrue, dev_init(c,n,mmap) }
335 
336 /* (open), (close), read, write */
337 #define cdev_swap_init(c,n) { \
338 	dev_noimpl(open,nullop), dev_noimpl(close,nullop), \
339 	dev_init(c,n,read), dev_init(c,n,write), dev_noimpl(ioctl,enodev), \
340 	dev_noimpl(stop,enodev), 0, seltrue, dev_noimpl(mmap,enodev) }
341 
342 /* open, close, read, write, ioctl, (stop), tty, poll */
343 #define cdev_ptc_init(c,n) { \
344 	dev_init(c,n,open), dev_init(c,n,close), dev_init(c,n,read), \
345 	dev_init(c,n,write), dev_init(c,n,ioctl), dev_noimpl(stop,nullop), \
346 	dev_init(c,n,tty), dev_init(c,n,poll), dev_noimpl(mmap,enodev), D_TTY }
347 
348 /* open, close, read, ioctl, poll -- XXX should be a generic device */
349 #define cdev_log_init(c,n)	cdev__ocrip_init(c,n)
350 #define	cdev_ch_init(c,n)	cdev__ocrip_init(c,n)
351 
352 /* open */
353 #define cdev_fd_init(c,n) { \
354 	dev_init(c,n,open), dev_noimpl(close,enodev), \
355 	dev_noimpl(read,enodev), dev_noimpl(write,enodev), \
356 	dev_noimpl(ioctl,enodev), dev_noimpl(stop,enodev), \
357 	0, seltrue, dev_noimpl(mmap,enodev) }
358 
359 /* open, close, read, write, ioctl, poll -- XXX should be generic device */
360 #define cdev_bpftun_init(c,n)	cdev__ocrwip_init(c,n)
361 
362 /* open, close, ioctl */
363 #define	cdev_lkm_init(c,n)	cdev__oci_init(c,n)
364 #define	cdev_uk_init(c,n)	cdev__oci_init(c,n)
365 #define	cdev_scsibus_init(c,n)	cdev__oci_init(c,n)
366 #define	cdev_se_init(c,n)	cdev__oci_init(c,n)
367 #define	cdev_ses_init(c,n)	cdev__oci_init(c,n)
368 #define	cdev_sysmon_init(c,n)	cdev__oci_init(c,n)
369 #define	cdev_openfirm_init(c,n)	cdev__oci_init(c,n)
370 #define	cdev_openprom_init(c,n)	cdev__oci_init(c,n)
371 #define	cdev_clockctl_init(c,n)	cdev__oci_init(c,n)
372 #define	cdev_radio_init(c,n)	cdev__oci_init(c,n)
373 
374 /* open, close, read, write */
375 #define cdev_irix_kmem_init(c,n)	cdev__ocrw_init(c,n)
376 
377 /* open, close, read, ioctl, poll */
378 #define	cdev_usb_init(c,n)	cdev__ocrip_init(c,n)
379 
380 /* open, close, read, write, ioctl, poll */
381 #define cdev_rnd_init(c,n)	cdev__ocrwip_init(c,n)
382 #define	cdev_usbdev_init(c,n)	cdev__ocrwip_init(c,n)
383 #define	cdev_ugen_init(c,n)	cdev__ocrwip_init(c,n)
384 #define cdev_midi_init(c,n)	cdev__ocrwip_init(c,n)
385 #define cdev_ir_init(c,n)	cdev__ocrwip_init(c,n)
386 #define cdev_netsmb_init(c,n)	cdev__ocrwip_init(c,n)
387 
388 /* open, close, ioctl, poll, mmap */
389 #define	cdev_fb_init(c,n)	cdev__ocipm_init(c,n)
390 
391 /* open, close, read, write, ioctl, poll, mmap */
392 #define cdev_audio_init(c,n) { \
393 	dev_init(c,n,open), dev_init(c,n,close), dev_init(c,n,read), \
394 	dev_init(c,n,write), dev_init(c,n,ioctl), dev_noimpl(stop,enodev), \
395 	0, dev_init(c,n,poll), dev_init(c,n,mmap) }
396 
397 /* open, close, read, ioctl */
398 #define cdev_ipf_init(c,n)	cdev__ocri_init(c,n)
399 
400 /* open */
401 #define	cdev_svr4_net_init(c,n) { \
402 	dev_init(c,n,open), dev_noimpl(close,enodev), \
403 	dev_noimpl(read,enodev), dev_noimpl(write,enodev), \
404 	dev_noimpl(ioctl,enodev), dev_noimpl(stop,enodev), \
405 	0, seltrue, dev_noimpl(mmap,enodev) }
406 
407 /* open, close, read, write, ioctl, stop, tty, poll, mmap */
408 #define cdev_wsdisplay_init(c,n)	cdev__ttym_init(c,n,D_TTY)
409 
410 /* open, close, (read), (write), ioctl, poll, mmap -- XXX should be a map device */
411 #define	cdev_grf_init(c,n)	cdev__ocRWipm_init(c,n)
412 #define	cdev_view_init(c,n)	cdev__ocRWipm_init(c,n)
413 
414 /* open, close, write, ioctl */
415 #define	cdev_spkr_init(c,n)	cdev__ocwi_init(c,n)
416 
417 /* open, close, read, write, ioctl, poll */
418 #define cdev_vc_nb_init(c,n)	cdev__ocrwip_init(c,n)
419 #define cdev_irix_usema_init(c,n)	cdev__ocrwip_init(c,n)
420 
421 /* open, close, read, write, ioctl, stop, poll */
422 #define	cdev_esh_init(c,n)	cdev__ocrwisp_init(c,n)
423 
424 /* open, close, read, ioctl, mmap */
425 #define cdev_bktr_init(c,n) { \
426 	dev_init(c,n,open), dev_init(c,n,close), dev_init(c,n,read), \
427 	dev_noimpl(write,enodev), dev_init(c,n,ioctl), \
428 	dev_noimpl(stop,enodev), 0, seltrue, (dev_init(c,n,mmap)) }
429 
430 /* open, close, read, write, ioctl, stop, tty, poll, mmap */
431 #define	cdev_pc_init(c,n)	cdev__ttym_init(c,n,D_TTY)
432 
433 /* open, close, write, ioctl */
434 #define cdev_lpt_init(c,n)	cdev__ocwi_init(c,n)
435 
436 /* open, close, read, ioctl */
437 #define	cdev_joy_init(c,n)	cdev__ocri_init(c,n)
438 
439 /* open, close, ioctl, poll -- XXX should be a generic device */
440 #define cdev_apm_init(c,n)	cdev__ocip_init(c,n)
441 
442 /* open, close, read, ioctl, poll */
443 #define cdev_satlink_init(c,n)	cdev__ocrip_init(c,n)
444 
445 /* open, close, ioctl */
446 #define cdev_wdog_init(c,n)	cdev__oci_init(c,n)
447 
448 /* open, close, ioctl */
449 #define cdev_isdnctl_init(c,n)	cdev__oci_init(c,n)
450 
451 /* open, close, read, write, ioctl, poll */
452 #define	cdev_isdnbchan_init(c,n)	cdev__ocrwip_init(c,n)
453 
454 /* open, close, read, write, ioctl, poll */
455 #define	cdev_isdntel_init(c,n)	cdev__ocrwip_init(c,n)
456 
457 /* open, close, read, ioctl */
458 #define cdev_isdntrc_init(c,n)	cdev__ocri_init(c,n)
459 
460 /* open, close, read, ioctl, poll */
461 #define cdev_isdn_init(c,n)	cdev__ocrip_init(c,n)
462 
463 /* open, close, ioctl, mmap */
464 #define	cdev_pci_init(c,n)	cdev__ocim_init(c,n)
465 
466 /* symbolic sleep message strings */
467 extern	const char devopn[], devio[], devwait[], devin[], devout[];
468 extern	const char devioc[], devcls[];
469 
470 #endif /* _KERNEL */
471 
472 /*
473  * Line discipline switch table
474  */
475 struct linesw {
476 	char	*l_name;	/* Linesw name */
477 	int	l_no;		/* Linesw number (compatibility) */
478 
479 	int	(*l_open)	__P((dev_t dev, struct tty *tp));
480 	int	(*l_close)	__P((struct tty *tp, int flags));
481 	int	(*l_read)	__P((struct tty *tp, struct uio *uio,
482 				     int flag));
483 	int	(*l_write)	__P((struct tty *tp, struct uio *uio,
484 				     int flag));
485 	int	(*l_ioctl)	__P((struct tty *tp, u_long cmd, caddr_t data,
486 				     int flag, struct proc *p));
487 	int	(*l_rint)	__P((int c, struct tty *tp));
488 	int	(*l_start)	__P((struct tty *tp));
489 	int	(*l_modem)	__P((struct tty *tp, int flag));
490 	int	(*l_poll)	__P((struct tty *tp, int events,
491 				     struct proc *p));
492 };
493 
494 #ifdef _KERNEL
495 extern struct linesw **linesw;
496 extern int nlinesw;
497 extern void ttyldisc_init __P((void));
498 int ttyldisc_add __P((struct linesw *disc, int no));
499 struct linesw *ttyldisc_remove __P((char *name));
500 struct linesw *ttyldisc_lookup __P((char *name));
501 
502 /* For those defining their own line disciplines: */
503 #define	ttynodisc ((int (*) __P((dev_t, struct tty *)))enodev)
504 #define	ttyerrclose ((int (*) __P((struct tty *, int flags)))enodev)
505 #define	ttyerrio ((int (*) __P((struct tty *, struct uio *, int)))enodev)
506 #define	ttyerrinput ((int (*) __P((int c, struct tty *)))enodev)
507 #define	ttyerrstart ((int (*) __P((struct tty *)))enodev)
508 #define	ttyerrpoll ((int (*) __P((struct tty *, int, struct proc *)))enodev)
509 
510 int	nullioctl __P((struct tty *, u_long, caddr_t, int, struct proc *));
511 #endif
512 
513 /*
514  * Swap device table
515  */
516 struct swdevt {
517 	dev_t	sw_dev;
518 	int	sw_flags;
519 	int	sw_nblks;
520 	struct	vnode *sw_vp;
521 };
522 #define	SW_FREED	0x01
523 #define	SW_SEQUENTIAL	0x02
524 #define	sw_freed	sw_flags	/* XXX compat */
525 
526 #ifdef _KERNEL
527 extern struct swdevt swdevt[];
528 
529 dev_t	chrtoblk __P((dev_t));
530 int	iskmemdev __P((dev_t));
531 int	iszerodev __P((dev_t));
532 
533 /*
534  * [bc]dev_decl()s for 'fake' tty devices.
535  */
536 cdev_decl(cn);
537 
538 cdev_decl(ctty);
539 
540 #define	ptctty		ptytty
541 #define	ptcioctl	ptyioctl
542 cdev_decl(ptc);
543 
544 #define	ptstty		ptytty
545 #define	ptsioctl	ptyioctl
546 cdev_decl(pts);
547 
548 #define mmread		mmrw
549 #define mmwrite		mmrw
550 cdev_decl(mm);
551 #define	DEV_MEM		0	/* minor device 0 is physical memory */
552 #define	DEV_KMEM	1	/* minor device 1 is kernel memory */
553 #define DEV_NULL	2	/* minor device 2 is EOF/rathole */
554 #ifdef __arm__			/* XXX: FIX ME ARM! */
555 #define DEV_ZERO	3	/* minor device 3 is '\0'/rathole */
556 #else
557 #define DEV_ZERO	12	/* minor device 12 is '\0'/rathole */
558 #endif
559 
560 
561 /*
562  * [bc]dev_decl()s for 'fake' disk devices.
563  */
564 bdev_decl(ccd);
565 cdev_decl(ccd);
566 
567 bdev_decl(md);
568 cdev_decl(md);
569 
570 bdev_decl(raid);
571 cdev_decl(raid);
572 
573 bdev_decl(vnd);
574 cdev_decl(vnd);
575 
576 /*
577  * [bc]dev_decl()s for SCSI devices.
578  */
579 bdev_decl(cd);
580 cdev_decl(cd);
581 
582 cdev_decl(ch);
583 
584 bdev_decl(sd);
585 cdev_decl(sd);
586 
587 /* XXX Namespace collisions with SYSVSEM; just declare what we need. */
588 dev_decl(se,open); dev_decl(se,close); dev_decl(se,ioctl);
589 
590 bdev_decl(st);
591 cdev_decl(st);
592 
593 bdev_decl(ss);
594 cdev_decl(ss);
595 
596 bdev_decl(uk);
597 cdev_decl(uk);
598 
599 /*
600  * [bc]dev_decl()s for logical disks.
601  */
602 bdev_decl(ld);
603 cdev_decl(ld);
604 
605 /*
606  * cdev_decl()s for Brooktree 8[47][89] based TV cards.
607  */
608 cdev_decl(bktr);
609 
610 /*
611  * [bc]dev_decl()s for 'fake' network devices.
612  */
613 cdev_decl(bpf);
614 
615 cdev_decl(ipl);
616 
617 #ifdef COMPAT_SVR4
618 # define NSVR4_NET	1
619 #else
620 # define NSVR4_NET	0
621 #endif
622 cdev_decl(svr4_net);
623 
624 cdev_decl(tun);
625 
626 /*
627  * [bc]dev_decl()s for miscellaneous 'fake' devices.
628  */
629 cdev_decl(audio);
630 cdev_decl(midi);
631 cdev_decl(sequencer);
632 
633 cdev_decl(filedesc);
634 
635 #ifndef LKM
636 # define	NLKM	0
637 #else
638 # define	NLKM	1
639 #endif
640 cdev_decl(lkm);
641 
642 cdev_decl(log);
643 
644 cdev_decl(rnd);
645 
646 #endif /* _KERNEL */
647 
648 /*
649  * Used by setroot() to map device names to bdev major numbers.
650  * Ports declare a NULL-terminated array of these structures
651  * to setroot().
652  */
653 struct devnametobdevmaj {
654 	const char *d_name;
655 	int	d_maj;
656 };
657 
658 #ifdef _KERNEL
659 extern	struct devnametobdevmaj dev_name2blk[];
660 struct	device;
661 void	setroot __P((struct device *, int));
662 void	swapconf __P((void));
663 #endif /* _KERNEL */
664 
665 #endif /* !_SYS_CONF_H_ */
666