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