📄 conf.c
字号:
/* * Copyright (c) 1992, 1993 * The Regents of the University of California. All rights reserved. * * This code is derived from software contributed to Berkeley by * Kazumasa Utashiro of Software Research Associates, Inc. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. All advertising materials mentioning features or use of this software * must display the following acknowledgement: * This product includes software developed by the University of * California, Berkeley and its contributors. * 4. Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * * @(#)conf.c 8.2 (Berkeley) 11/14/93 */#include <sys/param.h>#include <sys/systm.h>#include <sys/buf.h>#include <sys/ioctl.h>#include <sys/proc.h>#include <sys/vnode.h>#include <sys/tty.h>#include <sys/conf.h>int rawread __P((dev_t, struct uio *, int));int rawwrite __P((dev_t, struct uio *, int));int swstrategy __P((struct buf *));int ttselect __P((dev_t, int, struct proc *));#define dev_type_open(n) int n __P((dev_t, int, int, struct proc *))#define dev_type_close(n) int n __P((dev_t, int, int, struct proc *))#define dev_type_strategy(n) int n __P((struct buf *))#define dev_type_ioctl(n) \ int n __P((dev_t, int, caddr_t, int, struct proc *))/* bdevsw-specific types */#define dev_type_dump(n) int n __P((dev_t))#define dev_type_size(n) int n __P((dev_t))#define dev_decl(n,t) __CONCAT(dev_type_,t)(__CONCAT(n,t))#define dev_init(c,n,t) \ (c > 0 ? __CONCAT(n,t) : (__CONCAT(dev_type_,t)((*))) enxio)/* bdevsw-specific initializations */#define dev_size_init(c,n) (c > 0 ? __CONCAT(n,size) : 0)#define bdev_decl(n) \ dev_decl(n,open); dev_decl(n,close); dev_decl(n,strategy); \ dev_decl(n,ioctl); dev_decl(n,dump); dev_decl(n,size)#define bdev_disk_init(c,n) { \ dev_init(c,n,open), (dev_type_close((*))) nullop, \ dev_init(c,n,strategy), dev_init(c,n,ioctl), \ dev_init(c,n,dump), dev_size_init(c,n), 0 }#define bdev_tape_init(c,n) { \ dev_init(c,n,open), dev_init(c,n,close), \ dev_init(c,n,strategy), dev_init(c,n,ioctl), \ dev_init(c,n,dump), 0, B_TAPE }#define bdev_swap_init() { \ (dev_type_open((*))) enodev, (dev_type_close((*))) enodev, \ swstrategy, (dev_type_ioctl((*))) enodev, \ (dev_type_dump((*))) enodev, 0, 0 }#define bdev_notdef() bdev_tape_init(0,no)bdev_decl(no); /* dummy declarations */#include "sd.h"#define sd_b_ioctl sdioctl#define sd_b_strategy sdstrategy#define sd_b_dump sddump#define sd_b_size sdsizebdev_decl(sd_b_);#include "fd.h"#define fd_b_ioctl fdioctl#define fd_b_strategy fdstrategy#define fd_b_dump fddump#define fd_b_size fdsizebdev_decl(fd_b_);#include "vn.h"bdev_decl(vn);struct bdevsw bdevsw[] ={ bdev_disk_init(NSD,sd_b_), /* 0: SCSI disk */ bdev_disk_init(NFD,fd_b_), /* 1: floppy disk */ bdev_notdef(), /* 2 */ bdev_disk_init(NVN,vn), /* 3: vnode disk driver (swap to files) */ bdev_swap_init(), /* 4: swap pseudo-device */};int nblkdev = sizeof (bdevsw) / sizeof (bdevsw[0]);/* cdevsw-specific types */#define dev_type_read(n) int n __P((dev_t, struct uio *, int))#define dev_type_write(n) int n __P((dev_t, struct uio *, int))#define dev_type_stop(n) int n __P((struct tty *, int))#define dev_type_reset(n) int n __P((int))#define dev_type_select(n) int n __P((dev_t, int, struct proc *))#define dev_type_map(n) int n __P(())#define cdev_decl(n) \ dev_decl(n,open); dev_decl(n,close); dev_decl(n,read); \ dev_decl(n,write); dev_decl(n,ioctl); dev_decl(n,stop); \ dev_decl(n,reset); dev_decl(n,select); dev_decl(n,map); \ dev_decl(n,strategy); extern struct tty __CONCAT(n,_tty)[]#define dev_tty_init(c,n) (c > 0 ? __CONCAT(n,_tty) : 0)/* open, read, write, ioctl, strategy */#define cdev_disk_init(c,n) { \ dev_init(c,n,open), (dev_type_close((*))) nullop, dev_init(c,n,read), \ dev_init(c,n,write), dev_init(c,n,ioctl), (dev_type_stop((*))) enodev, \ (dev_type_reset((*))) nullop, 0, seltrue, (dev_type_map((*))) enodev, \ dev_init(c,n,strategy) }/* open, close, read, write, ioctl, strategy */#define cdev_tape_init(c,n) { \ dev_init(c,n,open), dev_init(c,n,close), rawread, \ rawwrite, dev_init(c,n,ioctl), (dev_type_stop((*))) enodev, \ (dev_type_reset((*))) nullop, 0, seltrue, (dev_type_map((*))) enodev, \ dev_init(c,n,strategy) }/* open, close, read, write, ioctl, stop, tty */#define cdev_tty_init(c,n) { \ dev_init(c,n,open), dev_init(c,n,close), dev_init(c,n,read), \ dev_init(c,n,write), dev_init(c,n,ioctl), dev_init(c,n,stop), \ (dev_type_reset((*))) nullop, dev_tty_init(c,n), ttselect, \ (dev_type_map((*))) enodev, 0 }#define cdev_notdef() { \ (dev_type_open((*))) enodev, (dev_type_close((*))) enodev, \ (dev_type_read((*))) enodev, (dev_type_write((*))) enodev, \ (dev_type_ioctl((*))) enodev, (dev_type_stop((*))) enodev, \ (dev_type_reset((*))) nullop, 0, seltrue, \ (dev_type_map((*))) enodev, 0 }/* open, close, read, write, ioctl -- XXX should be tty */#define cdev_vc_init(c,n) { \ dev_init(c,n,open), dev_init(c,n,close), dev_init(c,n,read), \ dev_init(c,n,write), dev_init(c,n,ioctl), dev_init(c,n,stop), \ (dev_type_reset((*))) nullop, 0, dev_init(c,n,select), \ (dev_type_map((*))) enodev, 0 }cdev_decl(no); /* dummy declarations */#include "rs.h"cdev_decl(rs);cdev_decl(vc);#include "bm.h"cdev_decl(cn);cdev_decl(ctty);/* open, read, write, ioctl, select -- XXX should be a tty */#define cdev_ctty_init(c,n) { \ dev_init(c,n,open), (dev_type_close((*))) nullop, dev_init(c,n,read), \ dev_init(c,n,write), dev_init(c,n,ioctl), (dev_type_stop((*))) nullop, \ (dev_type_reset((*))) nullop, 0, dev_init(c,n,select), \ (dev_type_map((*))) enodev, 0 }dev_type_read(mmrw);/* read/write */#define cdev_mm_init(c,n) { \ (dev_type_open((*))) nullop, (dev_type_close((*))) nullop, mmrw, \ mmrw, (dev_type_ioctl((*))) enodev, (dev_type_stop((*))) nullop, \ (dev_type_reset((*))) nullop, 0, seltrue, (dev_type_map((*))) enodev, 0 }#include "sd.h"#define sd_c_read sdread#define sd_c_write sdwrite#define sd_c_ioctl sdioctl#define sd_c_reset sdreset#define sd_c_strategy sdstrategy#define sd_c_dump sddump#define sd_c_size sdsizecdev_decl(sd_c_);#include "fd.h"#define fd_c_read fdread#define fd_c_write fdwrite#define fd_c_ioctl fdioctl#define fd_c_reset fdreset#define fd_c_strategy fdstrategy#define fd_c_dump fddump#define fd_c_size fdsizecdev_decl(fd_c_);#include "lp.h"cdev_decl(lp);/* read, write, strategy */#define cdev_swap_init(c,n) { \ (dev_type_open((*))) nullop, (dev_type_close((*))) nullop, rawread, \ rawwrite, (dev_type_ioctl((*))) enodev, (dev_type_stop((*))) enodev, \ (dev_type_reset((*))) nullop, 0, (dev_type_select((*))) enodev, \ (dev_type_map((*))) enodev, dev_init(c,n,strategy) }#include "pty.h"#define pts_tty pt_tty#define ptsioctl ptyioctlcdev_decl(pts);#define ptc_tty pt_tty#define ptcioctl ptyioctlcdev_decl(ptc);/* open, close, read, write, ioctl, tty, select */#define cdev_ptc_init(c,n) { \ dev_init(c,n,open), dev_init(c,n,close), dev_init(c,n,read), \ dev_init(c,n,write), dev_init(c,n,ioctl), (dev_type_stop((*))) nullop, \ (dev_type_reset((*))) nullop, dev_tty_init(c,n), dev_init(c,n,select), \ (dev_type_map((*))) enodev, 0 }#include "kb.h"cdev_decl(kb);/* open, close, write, ioctl */#define cdev_kb_init(c,n) { \ dev_init(c,n,open), dev_init(c,n,close), (dev_type_read((*))) enodev, \ dev_init(c,n,write), dev_init(c,n,ioctl), \ (dev_type_stop((*))) enodev, (dev_type_reset((*))) nullop, 0, \
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -