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