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
vcopen(dev,flag,mode,p)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
vcclose(dev,flag,mode,p)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
vcread(dev,uio,flag)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
vcwrite(dev,uio,flag)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
vcioctl(dev,cmd,data,flag,p)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*/
vcselect(dev,rw,p)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 */
cngetc()101 cngetc()
102 {
103 /* notyet */
104 return(0);
105 }
106
107 #define SCC_CONSOLE 0
108 /*
109 * Print a character on console.
110 */
cnputc(c)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
scccons_putc(c)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
bmcons_putc(c)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