xref: /csrg-svn/sys/news3400/news3400/conf.c (revision 67957)
153903Smckusick /*
263309Sbostic  * Copyright (c) 1992, 1993
363309Sbostic  *	The Regents of the University of California.  All rights reserved.
453903Smckusick  *
553903Smckusick  * This code is derived from software contributed to Berkeley by
653903Smckusick  * Kazumasa Utashiro of Software Research Associates, Inc.
753903Smckusick  *
853903Smckusick  * %sccs.include.redist.c%
953903Smckusick  *
10*67957Smckusick  *	@(#)conf.c	8.3 (Berkeley) 11/21/94
1153903Smckusick  */
1253903Smckusick 
1357176Sutashiro #include <sys/param.h>
1457176Sutashiro #include <sys/systm.h>
1557176Sutashiro #include <sys/buf.h>
1657176Sutashiro #include <sys/ioctl.h>
1759780Sutashiro #include <sys/proc.h>
1859780Sutashiro #include <sys/vnode.h>
1957176Sutashiro #include <sys/tty.h>
2057176Sutashiro #include <sys/conf.h>
2153903Smckusick 
2253903Smckusick int	rawread		__P((dev_t, struct uio *, int));
2353903Smckusick int	rawwrite	__P((dev_t, struct uio *, int));
2453903Smckusick int	swstrategy	__P((struct buf *));
2553903Smckusick int	ttselect	__P((dev_t, int, struct proc *));
2653903Smckusick 
2753903Smckusick #define	dev_type_open(n)	int n __P((dev_t, int, int, struct proc *))
2853903Smckusick #define	dev_type_close(n)	int n __P((dev_t, int, int, struct proc *))
2953903Smckusick #define	dev_type_strategy(n)	int n __P((struct buf *))
3053903Smckusick #define	dev_type_ioctl(n) \
3153903Smckusick 	int n __P((dev_t, int, caddr_t, int, struct proc *))
3253903Smckusick 
3353903Smckusick /* bdevsw-specific types */
3453903Smckusick #define	dev_type_dump(n)	int n __P((dev_t))
3553903Smckusick #define	dev_type_size(n)	int n __P((dev_t))
3653903Smckusick 
3753903Smckusick #define	dev_decl(n,t)	__CONCAT(dev_type_,t)(__CONCAT(n,t))
3853903Smckusick #define	dev_init(c,n,t) \
3953903Smckusick 	(c > 0 ? __CONCAT(n,t) : (__CONCAT(dev_type_,t)((*))) enxio)
4053903Smckusick 
4153903Smckusick /* bdevsw-specific initializations */
4253903Smckusick #define	dev_size_init(c,n)	(c > 0 ? __CONCAT(n,size) : 0)
4353903Smckusick 
4453903Smckusick #define	bdev_decl(n) \
4553903Smckusick 	dev_decl(n,open); dev_decl(n,close); dev_decl(n,strategy); \
4653903Smckusick 	dev_decl(n,ioctl); dev_decl(n,dump); dev_decl(n,size)
4753903Smckusick 
4853903Smckusick #define	bdev_disk_init(c,n) { \
4953903Smckusick 	dev_init(c,n,open), (dev_type_close((*))) nullop, \
5053903Smckusick 	dev_init(c,n,strategy), dev_init(c,n,ioctl), \
5153903Smckusick 	dev_init(c,n,dump), dev_size_init(c,n), 0 }
5253903Smckusick 
5353903Smckusick #define	bdev_tape_init(c,n) { \
5453903Smckusick 	dev_init(c,n,open), dev_init(c,n,close), \
5553903Smckusick 	dev_init(c,n,strategy), dev_init(c,n,ioctl), \
5653903Smckusick 	dev_init(c,n,dump), 0, B_TAPE }
5753903Smckusick 
5853903Smckusick #define	bdev_swap_init() { \
5953903Smckusick 	(dev_type_open((*))) enodev, (dev_type_close((*))) enodev, \
6053903Smckusick 	swstrategy, (dev_type_ioctl((*))) enodev, \
6153903Smckusick 	(dev_type_dump((*))) enodev, 0, 0 }
6253903Smckusick 
6353903Smckusick #define	bdev_notdef()	bdev_tape_init(0,no)
6453903Smckusick bdev_decl(no);	/* dummy declarations */
6553903Smckusick 
6653903Smckusick #include "sd.h"
6753903Smckusick #define sd_b_ioctl	sdioctl
6853903Smckusick #define sd_b_strategy	sdstrategy
6953903Smckusick #define sd_b_dump	sddump
7053903Smckusick #define sd_b_size	sdsize
7153903Smckusick bdev_decl(sd_b_);
7253903Smckusick 
7353903Smckusick #include "fd.h"
7453903Smckusick #define fd_b_ioctl	fdioctl
7553903Smckusick #define fd_b_strategy	fdstrategy
7653903Smckusick #define fd_b_dump	fddump
7753903Smckusick #define fd_b_size	fdsize
7853903Smckusick bdev_decl(fd_b_);
7953903Smckusick 
8053903Smckusick #include "vn.h"
8153903Smckusick bdev_decl(vn);
8253903Smckusick 
8353903Smckusick struct bdevsw	bdevsw[] =
8453903Smckusick {
8553903Smckusick 	bdev_disk_init(NSD,sd_b_),  /* 0: SCSI disk */
8653903Smckusick 	bdev_disk_init(NFD,fd_b_),  /* 1: floppy disk */
8753903Smckusick 	bdev_notdef(),		    /* 2 */
8853903Smckusick 	bdev_disk_init(NVN,vn),	    /* 3: vnode disk driver (swap to files) */
8953903Smckusick 	bdev_swap_init(),	    /* 4: swap pseudo-device */
9053903Smckusick };
9153903Smckusick 
9253903Smckusick int	nblkdev = sizeof (bdevsw) / sizeof (bdevsw[0]);
9353903Smckusick 
9453903Smckusick /* cdevsw-specific types */
9553903Smckusick #define	dev_type_read(n)	int n __P((dev_t, struct uio *, int))
9653903Smckusick #define	dev_type_write(n)	int n __P((dev_t, struct uio *, int))
9753903Smckusick #define	dev_type_stop(n)	int n __P((struct tty *, int))
9853903Smckusick #define	dev_type_reset(n)	int n __P((int))
9953903Smckusick #define	dev_type_select(n)	int n __P((dev_t, int, struct proc *))
10053903Smckusick #define	dev_type_map(n)		int n __P(())
10153903Smckusick 
10253903Smckusick #define	cdev_decl(n) \
10353903Smckusick 	dev_decl(n,open); dev_decl(n,close); dev_decl(n,read); \
10453903Smckusick 	dev_decl(n,write); dev_decl(n,ioctl); dev_decl(n,stop); \
10553903Smckusick 	dev_decl(n,reset); dev_decl(n,select); dev_decl(n,map); \
10653903Smckusick 	dev_decl(n,strategy); extern struct tty __CONCAT(n,_tty)[]
10753903Smckusick 
10853903Smckusick #define	dev_tty_init(c,n)	(c > 0 ? __CONCAT(n,_tty) : 0)
10953903Smckusick 
11053903Smckusick /* open, read, write, ioctl, strategy */
11153903Smckusick #define	cdev_disk_init(c,n) { \
11253903Smckusick 	dev_init(c,n,open), (dev_type_close((*))) nullop, dev_init(c,n,read), \
11353903Smckusick 	dev_init(c,n,write), dev_init(c,n,ioctl), (dev_type_stop((*))) enodev, \
11453903Smckusick 	(dev_type_reset((*))) nullop, 0, seltrue, (dev_type_map((*))) enodev, \
11553903Smckusick 	dev_init(c,n,strategy) }
11653903Smckusick 
11753903Smckusick /* open, close, read, write, ioctl, strategy */
11853903Smckusick #define	cdev_tape_init(c,n) { \
11953903Smckusick 	dev_init(c,n,open), dev_init(c,n,close), rawread, \
12053903Smckusick 	rawwrite, dev_init(c,n,ioctl), (dev_type_stop((*))) enodev, \
12153903Smckusick 	(dev_type_reset((*))) nullop, 0, seltrue, (dev_type_map((*))) enodev, \
12253903Smckusick 	dev_init(c,n,strategy) }
12353903Smckusick 
12453903Smckusick /* open, close, read, write, ioctl, stop, tty */
12553903Smckusick #define	cdev_tty_init(c,n) { \
12653903Smckusick 	dev_init(c,n,open), dev_init(c,n,close), dev_init(c,n,read), \
12753903Smckusick 	dev_init(c,n,write), dev_init(c,n,ioctl), dev_init(c,n,stop), \
12853903Smckusick 	(dev_type_reset((*))) nullop, dev_tty_init(c,n), ttselect, \
12953903Smckusick 	(dev_type_map((*))) enodev, 0 }
13053903Smckusick 
13153903Smckusick #define	cdev_notdef() { \
13253903Smckusick 	(dev_type_open((*))) enodev, (dev_type_close((*))) enodev, \
13353903Smckusick 	(dev_type_read((*))) enodev, (dev_type_write((*))) enodev, \
13453903Smckusick 	(dev_type_ioctl((*))) enodev, (dev_type_stop((*))) enodev, \
13553903Smckusick 	(dev_type_reset((*))) nullop, 0, seltrue, \
13653903Smckusick 	(dev_type_map((*))) enodev, 0 }
13753903Smckusick 
13853903Smckusick /* open, close, read, write, ioctl -- XXX should be tty */
13953903Smckusick #define	cdev_vc_init(c,n) { \
14053903Smckusick 	dev_init(c,n,open), dev_init(c,n,close), dev_init(c,n,read), \
14153903Smckusick 	dev_init(c,n,write), dev_init(c,n,ioctl), dev_init(c,n,stop), \
14253903Smckusick 	(dev_type_reset((*))) nullop, 0, dev_init(c,n,select), \
14353903Smckusick 	(dev_type_map((*))) enodev, 0 }
14453903Smckusick 
14553903Smckusick cdev_decl(no);			/* dummy declarations */
14653903Smckusick 
14753903Smckusick #include "rs.h"
14853903Smckusick cdev_decl(rs);
14953903Smckusick cdev_decl(vc);
15054511Sutashiro 
15154511Sutashiro #include "bm.h"
15253903Smckusick cdev_decl(cn);
15353903Smckusick 
15454468Sutashiro cdev_decl(ctty);
15554468Sutashiro /* open, read, write, ioctl, select -- XXX should be a tty */
15654468Sutashiro #define	cdev_ctty_init(c,n) { \
15754468Sutashiro 	dev_init(c,n,open), (dev_type_close((*))) nullop, dev_init(c,n,read), \
15854468Sutashiro 	dev_init(c,n,write), dev_init(c,n,ioctl), (dev_type_stop((*))) nullop, \
15954468Sutashiro 	(dev_type_reset((*))) nullop, 0, dev_init(c,n,select), \
16054468Sutashiro 	(dev_type_map((*))) enodev, 0 }
16154468Sutashiro 
16253903Smckusick dev_type_read(mmrw);
16353903Smckusick /* read/write */
16453903Smckusick #define	cdev_mm_init(c,n) { \
16553903Smckusick 	(dev_type_open((*))) nullop, (dev_type_close((*))) nullop, mmrw, \
16653903Smckusick 	mmrw, (dev_type_ioctl((*))) enodev, (dev_type_stop((*))) nullop, \
16753903Smckusick 	(dev_type_reset((*))) nullop, 0, seltrue, (dev_type_map((*))) enodev, 0 }
16853903Smckusick 
16953903Smckusick #include "sd.h"
17053903Smckusick #define sd_c_read	sdread
17153903Smckusick #define sd_c_write	sdwrite
17253903Smckusick #define sd_c_ioctl	sdioctl
17353903Smckusick #define sd_c_reset	sdreset
17453903Smckusick #define sd_c_strategy	sdstrategy
17553903Smckusick #define sd_c_dump	sddump
17653903Smckusick #define sd_c_size	sdsize
17753903Smckusick cdev_decl(sd_c_);
17853903Smckusick 
17953903Smckusick #include "fd.h"
18053903Smckusick #define fd_c_read	fdread
18153903Smckusick #define fd_c_write	fdwrite
18253903Smckusick #define fd_c_ioctl	fdioctl
18353903Smckusick #define fd_c_reset	fdreset
18453903Smckusick #define fd_c_strategy	fdstrategy
18553903Smckusick #define fd_c_dump	fddump
18653903Smckusick #define fd_c_size	fdsize
18753903Smckusick cdev_decl(fd_c_);
18853903Smckusick 
18953903Smckusick #include "lp.h"
19053903Smckusick cdev_decl(lp);
19153903Smckusick 
19253903Smckusick /* read, write, strategy */
19353903Smckusick #define	cdev_swap_init(c,n) { \
19453903Smckusick 	(dev_type_open((*))) nullop, (dev_type_close((*))) nullop, rawread, \
19553903Smckusick 	rawwrite, (dev_type_ioctl((*))) enodev, (dev_type_stop((*))) enodev, \
19653903Smckusick 	(dev_type_reset((*))) nullop, 0, (dev_type_select((*))) enodev, \
19753903Smckusick 	(dev_type_map((*))) enodev, dev_init(c,n,strategy) }
19853903Smckusick 
19953903Smckusick #include "pty.h"
20053903Smckusick #define	pts_tty		pt_tty
20153903Smckusick #define	ptsioctl	ptyioctl
20253903Smckusick cdev_decl(pts);
20353903Smckusick #define	ptc_tty		pt_tty
20453903Smckusick #define	ptcioctl	ptyioctl
20553903Smckusick cdev_decl(ptc);
20653903Smckusick 
20753903Smckusick /* open, close, read, write, ioctl, tty, select */
20853903Smckusick #define	cdev_ptc_init(c,n) { \
20953903Smckusick 	dev_init(c,n,open), dev_init(c,n,close), dev_init(c,n,read), \
21053903Smckusick 	dev_init(c,n,write), dev_init(c,n,ioctl), (dev_type_stop((*))) nullop, \
21153903Smckusick 	(dev_type_reset((*))) nullop, dev_tty_init(c,n), dev_init(c,n,select), \
21253903Smckusick 	(dev_type_map((*))) enodev, 0 }
21353903Smckusick 
21453903Smckusick #include "kb.h"
21553903Smckusick cdev_decl(kb);
21653903Smckusick /* open, close, write, ioctl */
21753903Smckusick #define	cdev_kb_init(c,n) { \
21853903Smckusick 	dev_init(c,n,open), dev_init(c,n,close), (dev_type_read((*))) enodev, \
21953903Smckusick 	dev_init(c,n,write), dev_init(c,n,ioctl), \
22053903Smckusick 	(dev_type_stop((*))) enodev, (dev_type_reset((*))) nullop, 0, \
22153903Smckusick 	seltrue, (dev_type_map((*))) enodev, \
22253903Smckusick 	0 }
22353903Smckusick 
22453903Smckusick #include "ms.h"
22553903Smckusick #define msmap msmmap
22653903Smckusick cdev_decl(ms);
22753903Smckusick /* open, close, read, write, ioctl, select */
22853903Smckusick #define	cdev_ms_init(c,n) { \
22953903Smckusick 	dev_init(c,n,open), dev_init(c,n,close), dev_init(c,n,read), \
23053903Smckusick 	dev_init(c,n,write), dev_init(c,n,ioctl), (dev_type_stop((*))) enodev, \
23153903Smckusick 	(dev_type_reset((*))) nullop, 0, seltrue, (dev_type_map((*))) enodev, \
23253903Smckusick 	0 }
23353903Smckusick 
23453903Smckusick #include "fb.h"
23553903Smckusick cdev_decl(fb);
23653903Smckusick /* open, close, ioctl, mmap */
23753903Smckusick #define	cdev_fb_init(c,n) { \
23853903Smckusick 	dev_init(c,n,open), dev_init(c,n,close), (dev_type_read((*))) enodev, \
23953903Smckusick 	(dev_type_write((*))) enodev, dev_init(c,n,ioctl), \
24053903Smckusick 	(dev_type_stop((*))) enodev, \
24153903Smckusick 	(dev_type_reset((*))) nullop, 0, seltrue, (dev_type_map((*))) enodev, 0 }
24253903Smckusick /*
24353903Smckusick 	(dev_type_reset((*))) nullop, 0, seltrue, dev_init(c,n,map), 0 }
24453903Smckusick */
24553903Smckusick 
24653903Smckusick #include "st.h"
24753903Smckusick cdev_decl(st);
24853903Smckusick 
24953903Smckusick #include "lb.h"
25053903Smckusick cdev_decl(lbp);
25153903Smckusick 
25253903Smckusick #include "ir.h"
25353903Smckusick cdev_decl(ir);
25453903Smckusick /* open, close, read, ioctl */
25553903Smckusick #define	cdev_ir_init(c,n) { \
25653903Smckusick 	dev_init(c,n,open), dev_init(c,n,close), dev_init(c,n,read), \
25753903Smckusick 	(dev_type_write((*))) enodev, dev_init(c,n,ioctl), \
25853903Smckusick 	(dev_type_stop((*))) enodev, (dev_type_reset((*))) nullop, 0, \
25953903Smckusick 	seltrue, (dev_type_map((*))) enodev, 0 }
26053903Smckusick 
26153903Smckusick cdev_decl(log);
26253903Smckusick /* open, close, read, ioctl, select -- XXX should be a generic device */
26353903Smckusick #define	cdev_log_init(c,n) { \
26453903Smckusick 	dev_init(c,n,open), dev_init(c,n,close), dev_init(c,n,read), \
26553903Smckusick 	(dev_type_write((*))) enodev, dev_init(c,n,ioctl), \
26653903Smckusick 	(dev_type_stop((*))) enodev, (dev_type_reset((*))) nullop, 0, \
26753903Smckusick 	dev_init(c,n,select), (dev_type_map((*))) enodev, 0 }
26853903Smckusick 
26953903Smckusick dev_type_open(fdopen);
27053903Smckusick /* open */
27153903Smckusick #define	cdev_fd_init(c,n) { \
27253903Smckusick 	dev_init(c,n,open), (dev_type_close((*))) enodev, \
27353903Smckusick 	(dev_type_read((*))) enodev, (dev_type_write((*))) enodev, \
27453903Smckusick 	(dev_type_ioctl((*))) enodev, (dev_type_stop((*))) enodev, \
27553903Smckusick 	(dev_type_reset((*))) enodev, 0, (dev_type_select((*))) enodev, \
27653903Smckusick 	(dev_type_map((*))) enodev, 0 }
27753903Smckusick 
27853903Smckusick cdev_decl(vn);
27953903Smckusick /* open, read, write, ioctl -- XXX should be a disk */
28053903Smckusick #define	cdev_vn_init(c,n) { \
28153903Smckusick 	dev_init(c,n,open), (dev_type_close((*))) nullop, dev_init(c,n,read), \
28253903Smckusick 	dev_init(c,n,write), dev_init(c,n,ioctl), (dev_type_stop((*))) enodev, \
28353903Smckusick 	(dev_type_reset((*))) nullop, 0, seltrue, (dev_type_map((*))) enodev, \
28453903Smckusick 	0 }
28553903Smckusick 
28653903Smckusick #include "bpfilter.h"
28753903Smckusick cdev_decl(bpf);
28853903Smckusick /* open, close, read, write, ioctl, select -- XXX should be generic device */
28953903Smckusick #define	cdev_bpf_init(c,n) { \
29053903Smckusick 	dev_init(c,n,open), dev_init(c,n,close), dev_init(c,n,read), \
29153903Smckusick 	dev_init(c,n,write), dev_init(c,n,ioctl), (dev_type_stop((*))) enodev, \
29253903Smckusick 	(dev_type_reset((*))) enodev, 0, dev_init(c,n,select), \
29353903Smckusick 	(dev_type_map((*))) enodev, 0 }
29453903Smckusick 
29553903Smckusick struct cdevsw	cdevsw[] =
29653903Smckusick {
29753903Smckusick 	cdev_vc_init(1,vc),		/* 0: virtual console */
29853903Smckusick 	cdev_tty_init(NRS,rs),		/* 1: rs232c */
29954468Sutashiro 	cdev_ctty_init(1,ctty),		/* 2: controlling terminal */
30053903Smckusick 	cdev_mm_init(1,mm),		/* 3: /dev/{null,mem,kmem,...} */
30153903Smckusick 	cdev_disk_init(NSD,sd_c_),	/* 4: scsi disk */
30253903Smckusick 	cdev_disk_init(NFD,fd_c_),     	/* 5: floppy disk */
30353903Smckusick 	cdev_disk_init(NLP,lp),		/* 6: printer */
30453903Smckusick 	cdev_swap_init(1,sw),		/* 7: /dev/drum (swap pseudo-device) */
30553903Smckusick 	cdev_tty_init(NPTY,pts),	/* 8: pseudo-tty slave */
30653903Smckusick 	cdev_ptc_init(NPTY,ptc),	/* 9: pseudo-tty master */
30753903Smckusick 	cdev_notdef(),			/* 10: md (sony memory disk) */
30853903Smckusick 	cdev_kb_init(NKB,kb),		/* 11: keyboard */
30953903Smckusick 	cdev_ms_init(NMS,ms),		/* 12: mouse */
31053903Smckusick 	cdev_fd_init(1,fd),		/* 13: file descriptor pseudo-dev */
31153903Smckusick 	cdev_fb_init(NFB,fb),		/* 14: frame buffer */
31253903Smckusick 	cdev_vn_init(NVN,vn),		/* 15: vnode disk */
31353903Smckusick 	cdev_tape_init(NST,st),		/* 16: scsi tape */
31453903Smckusick 	cdev_kb_init(NLB,lbp),		/* 17: lbp */
31553903Smckusick 	cdev_ir_init(NIR,ir),		/* 18: image reader */
31653903Smckusick 	cdev_notdef(),			/* 19: vme */
31753903Smckusick 	cdev_notdef(),			/* 20: gpib */
31853903Smckusick 	cdev_notdef(),			/* 21: rd */
31954511Sutashiro 	cdev_tty_init(NBM,cn),		/* 22: console display device */
32053903Smckusick 	cdev_notdef(),			/* 23: ether */
32153903Smckusick 	cdev_bpf_init(NBPFILTER,bpf),	/* 24: berkeley packet filter */
32253903Smckusick 	cdev_notdef(),			/* 25 */
32353903Smckusick 	cdev_notdef(),			/* 26 */
32453903Smckusick 	cdev_notdef(),			/* 27 */
32553903Smckusick 	cdev_notdef(),			/* 28: scsi */
32653903Smckusick 	cdev_notdef(),			/* 29: sony shm */
32753903Smckusick 	cdev_notdef(),			/* 30: sony semaphoe? */
32853903Smckusick 	cdev_notdef(),			/* 31: vvcrs */
32953903Smckusick 	cdev_notdef(),			/* 32: fddi */
33053903Smckusick 	cdev_log_init(1,log),		/* 33: /dev/klog */
33153903Smckusick 	cdev_notdef(),			/* 34: image board */
33253903Smckusick 	cdev_notdef(),			/* 35: sb? */
33353903Smckusick 	cdev_notdef(),			/* 36: sbe? */
33453903Smckusick 	cdev_notdef(),			/* 37: vd (safs) */
33553903Smckusick 	cdev_notdef(),			/* 38: xd (safs) */
33653903Smckusick 	cdev_notdef(),			/* 39: isdn */
33753903Smckusick 	cdev_notdef(),			/* 40: rb */
33853903Smckusick 	cdev_notdef(),			/* 41: gs */
33953903Smckusick 	cdev_notdef(),			/* 42: rx */
34053903Smckusick };
34153903Smckusick 
34253903Smckusick int	nchrdev = sizeof (cdevsw) / sizeof (cdevsw[0]);
34353903Smckusick 
34453903Smckusick int	mem_no = 2; 	/* major device number of memory special file */
34553903Smckusick 
34653903Smckusick /*
34753903Smckusick  * Swapdev is a fake device implemented
34853903Smckusick  * in sw.c used only internally to get to swstrategy.
34953903Smckusick  * It cannot be provided to the users, because the
35053903Smckusick  * swstrategy routine munches the b_dev and b_blkno entries
35153903Smckusick  * before calling the appropriate driver.  This would horribly
35253903Smckusick  * confuse, e.g. the hashing routines. Instead, /dev/drum is
35353903Smckusick  * provided as a character (raw) device.
35453903Smckusick  */
35553903Smckusick dev_t	swapdev = makedev(1, 0);
35659780Sutashiro 
35759780Sutashiro /*
35859780Sutashiro  * Routine that identifies /dev/mem and /dev/kmem.
35959780Sutashiro  *
36059780Sutashiro  * A minimal stub routine can always return 0.
36159780Sutashiro  */
iskmemdev(dev)36259780Sutashiro iskmemdev(dev)
36359780Sutashiro 	dev_t dev;
36459780Sutashiro {
36559780Sutashiro 
36659780Sutashiro 	if (major(dev) == 3 && (minor(dev) == 0 || minor(dev) == 1))
36759780Sutashiro 		return (1);
36859780Sutashiro 	return (0);
36959780Sutashiro }
37059780Sutashiro 
iszerodev(dev)37164851Shibler iszerodev(dev)
37264851Shibler 	dev_t dev;
37364851Shibler {
37464851Shibler 	return (major(dev) == 3 && minor(dev) == 12);
37564851Shibler }
37664851Shibler 
37759780Sutashiro /*
378*67957Smckusick  * Routine to determine if a device is a tty.
379*67957Smckusick  *
380*67957Smckusick  * A minimal stub routine can always return 0.
381*67957Smckusick  */
istty(dev)382*67957Smckusick istty(dev)
383*67957Smckusick 	dev_t dev;
384*67957Smckusick {
385*67957Smckusick 
386*67957Smckusick 	switch (major(dev)) {
387*67957Smckusick 	case 0:
388*67957Smckusick 	case 1:
389*67957Smckusick 	case 2:
390*67957Smckusick 	case 8:
391*67957Smckusick 	case 9:
392*67957Smckusick 	case 11:
393*67957Smckusick 		return (1);
394*67957Smckusick 	default:
395*67957Smckusick 		return (0);
396*67957Smckusick 	}
397*67957Smckusick }
398*67957Smckusick 
399*67957Smckusick /*
40059780Sutashiro  * Routine to determine if a device is a disk.
40159780Sutashiro  *
40259780Sutashiro  * A minimal stub routine can always return 0.
40359780Sutashiro  */
isdisk(dev,type)40459780Sutashiro isdisk(dev, type)
40559780Sutashiro 	dev_t dev;
40659780Sutashiro 	int type;
40759780Sutashiro {
40859780Sutashiro 
40959780Sutashiro 	switch (major(dev)) {
41059780Sutashiro 	case 0:
41159780Sutashiro 	case 3:
41259780Sutashiro 		if (type == VBLK)
41359780Sutashiro 			return (1);
41459780Sutashiro 		return (0);
41559780Sutashiro 	case 4:
41659780Sutashiro 	case 15:
41759780Sutashiro 		if (type == VCHR)
41859780Sutashiro 			return (1);
41959780Sutashiro 		/* FALLTHROUGH */
42059780Sutashiro 	default:
42159780Sutashiro 		return (0);
42259780Sutashiro 	}
42359780Sutashiro 	/* NOTREACHED */
42459780Sutashiro }
42559780Sutashiro 
42659780Sutashiro #define MAXDEV	43
42759780Sutashiro static int chrtoblktbl[MAXDEV] =  {
42859780Sutashiro       /* VCHR */      /* VBLK */
42959780Sutashiro 	/* 0 */		NODEV,
43059780Sutashiro 	/* 1 */		NODEV,
43159780Sutashiro 	/* 2 */		NODEV,
43259780Sutashiro 	/* 3 */		NODEV,
43359780Sutashiro 	/* 4 */		0,
43459780Sutashiro 	/* 5 */		NODEV,
43559780Sutashiro 	/* 6 */		NODEV,
43659780Sutashiro 	/* 7 */		NODEV,
43759780Sutashiro 	/* 8 */		NODEV,
43859780Sutashiro 	/* 9 */		NODEV,
43959780Sutashiro 	/* 10 */	NODEV,
44059780Sutashiro 	/* 11 */	NODEV,
44159780Sutashiro 	/* 12 */	NODEV,
44259780Sutashiro 	/* 13 */	NODEV,
44359780Sutashiro 	/* 14 */	NODEV,
44459780Sutashiro 	/* 15 */	3,
44559780Sutashiro 	/* 16 */	NODEV,
44659780Sutashiro 	/* 17 */	NODEV,
44759780Sutashiro 	/* 18 */	NODEV,
44859780Sutashiro 	/* 19 */	NODEV,
44959780Sutashiro 	/* 20 */	NODEV,
45059780Sutashiro 	/* 21 */	NODEV,
45159780Sutashiro 	/* 22 */	NODEV,
45259780Sutashiro 	/* 23 */	NODEV,
45359780Sutashiro 	/* 24 */	NODEV,
45459780Sutashiro 	/* 25 */	NODEV,
45559780Sutashiro 	/* 26 */	NODEV,
45659780Sutashiro 	/* 27 */	NODEV,
45759780Sutashiro 	/* 28 */	NODEV,
45859780Sutashiro 	/* 29 */	NODEV,
45959780Sutashiro 	/* 30 */	NODEV,
46059780Sutashiro 	/* 31 */	NODEV,
46159780Sutashiro 	/* 32 */	NODEV,
46259780Sutashiro 	/* 33 */	NODEV,
46359780Sutashiro 	/* 34 */	NODEV,
46459780Sutashiro 	/* 35 */	NODEV,
46559780Sutashiro 	/* 36 */	NODEV,
46659780Sutashiro 	/* 37 */	NODEV,
46759780Sutashiro 	/* 38 */	NODEV,
46859780Sutashiro 	/* 39 */	NODEV,
46959780Sutashiro 	/* 40 */	NODEV,
47059780Sutashiro 	/* 41 */	NODEV,
47159780Sutashiro 	/* 42 */	NODEV,
47259780Sutashiro };
47359780Sutashiro /*
47459780Sutashiro  * Routine to convert from character to block device number.
47559780Sutashiro  *
47659780Sutashiro  * A minimal stub routine can always return NODEV.
47759780Sutashiro  */
chrtoblk(dev)47859780Sutashiro chrtoblk(dev)
47959780Sutashiro 	dev_t dev;
48059780Sutashiro {
48159780Sutashiro 	int blkmaj;
48259780Sutashiro 
48359780Sutashiro 	if (major(dev) >= MAXDEV || (blkmaj = chrtoblktbl[major(dev)]) == NODEV)
48459780Sutashiro 		return (NODEV);
48559780Sutashiro 	return (makedev(blkmaj, minor(dev)));
48659780Sutashiro }
487