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