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