xref: /original-bsd/sys/news3400/news3400/cons.c (revision 3705696b)
1 /*
2  * Copyright (c) 1992, 1993
3  *	The Regents of the University of California.  All rights reserved.
4  *
5  * This code is derived from software contributed to Berkeley by
6  * Kazumasa Utashiro of Software Research Associates, Inc.
7  *
8  * %sccs.include.redist.c%
9  *
10  *	@(#)cons.c	8.1 (Berkeley) 06/11/93
11  */
12 
13 #include <sys/param.h>
14 #include <sys/proc.h>
15 #include <sys/systm.h>
16 #include <sys/buf.h>
17 #include <sys/ioctl.h>
18 #include <sys/tty.h>
19 #include <sys/file.h>
20 #include <sys/conf.h>
21 
22 #include "bm.h"
23 
24 dev_t consdev = (dev_t)NULL;	/* initialized by consinit() */
25 struct tty *constty = 0;
26 
27 vcopen(dev, flag, mode, p)
28 	dev_t dev;
29 	int flag, mode;
30 	struct proc *p;
31 {
32 	if ((dev = consdev) == NULL)
33 		return 0;
34 	return ((*cdevsw[major(dev)].d_open)(dev, flag, mode, p));
35 }
36 
37 vcclose(dev, flag, mode, p)
38 	dev_t dev;
39 	int flag, mode;
40 	struct proc *p;
41 {
42 	if ((dev = consdev) == NULL)
43 		return 0;
44 	return ((*cdevsw[major(dev)].d_close)(dev, flag, mode, p));
45 }
46 
47 vcread(dev, uio, flag)
48 	dev_t dev;
49 	struct uio *uio;
50 {
51 	if ((dev = consdev) == NULL)
52 		return 0;
53 	return ((*cdevsw[major(dev)].d_read)(dev, uio, flag));
54 }
55 
56 vcwrite(dev, uio, flag)
57 	dev_t dev;
58 	struct uio *uio;
59 	int flag;
60 {
61 	if ((dev = consdev) == NULL)
62 		return 0;
63 	return ((*cdevsw[major(dev)].d_write)(dev, uio, flag));
64 }
65 
66 vcstop(tp, flag)
67 	struct tty *tp;
68 	int flag;
69 {
70 	dev_t dev;
71 
72 	if ((dev = consdev) == NULL)
73 		return 0;
74 	return ((*cdevsw[major(dev)].d_stop)(tp, flag));
75 }
76 
77 vcioctl(dev, cmd, data, flag, p)
78 	dev_t dev;
79 	caddr_t data;
80 	struct proc *p;
81 {
82 	if ((dev = consdev) == NULL)
83 		return 0;
84 	return ((*cdevsw[major(dev)].d_ioctl)(dev, cmd, data, flag, p));
85 }
86 
87 /*ARGSUSED*/
88 vcselect(dev, rw, p)
89 	dev_t dev;
90 	int rw;
91 	struct proc *p;
92 {
93 	if ((dev = consdev) == NULL)
94 		return 1;
95 	return (ttselect(dev, rw, p));
96 }
97 
98 /*
99  * Get character from console.
100  */
101 cngetc()
102 {
103 	/* notyet */
104 	return(0);
105 }
106 
107 #define	SCC_CONSOLE	0
108 /*
109  * Print a character on console.
110  */
111 cnputc(c)
112 	int c;
113 {
114 	int s;
115 	int (*putc)(), scccons_putc(), bmcons_putc();
116 
117 	if (consdev == NULL)
118 		return 0;
119 
120 #if NBM > 0
121 	if (consdev == makedev(1, 0))
122 		putc = scccons_putc;
123 	else
124 		putc = bmcons_putc;
125 #else
126 	putc = scccons_putc;
127 #endif
128 
129 	/* KU: should be much more efficient */
130 	s = splhigh();
131 	putc(c);
132 	if (c == '\n')
133 		putc('\r');
134 	splx(s);
135 }
136 
137 scccons_putc(c)
138 	int c;
139 {
140 	char cnbuf[1];
141 
142 	cnbuf[0] = (char)c;
143 	scc_error_write(SCC_CONSOLE, cnbuf, 1);
144 }
145 
146 #if NBM > 0
147 bmcons_putc(c)
148 	int c;
149 {
150 	char cnbuf[1];
151 
152 	cnbuf[0] = (char)c;
153 	vt100_write(0, cnbuf, 1);
154 }
155 #endif
156