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