1 /* $NetBSD: cons.c,v 1.2 2008/03/01 05:21:50 tsutsui Exp $ */ 2 3 /* 4 * Copyright (c) 1990, 1993 5 * The Regents of the University of California. All rights reserved. 6 * 7 * This code is derived from software contributed to Berkeley by 8 * the Systems Programming Group of the University of Utah Computer 9 * Science Department. 10 * 11 * Redistribution and use in source and binary forms, with or without 12 * modification, are permitted provided that the following conditions 13 * are met: 14 * 1. Redistributions of source code must retain the above copyright 15 * notice, this list of conditions and the following disclaimer. 16 * 2. Redistributions in binary form must reproduce the above copyright 17 * notice, this list of conditions and the following disclaimer in the 18 * documentation and/or other materials provided with the distribution. 19 * 3. Neither the name of the University nor the names of its contributors 20 * may be used to endorse or promote products derived from this software 21 * without specific prior written permission. 22 * 23 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 24 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 25 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 26 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 27 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 28 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 29 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 30 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 31 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 32 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 33 * SUCH DAMAGE. 34 * 35 * from: Utah Hdr: cons.c 1.7 92/02/28 36 * 37 * @(#)cons.c 8.1 (Berkeley) 6/10/93 38 */ 39 /* 40 * Copyright (c) 1988 University of Utah. 41 * 42 * This code is derived from software contributed to Berkeley by 43 * the Systems Programming Group of the University of Utah Computer 44 * Science Department. 45 * 46 * Redistribution and use in source and binary forms, with or without 47 * modification, are permitted provided that the following conditions 48 * are met: 49 * 1. Redistributions of source code must retain the above copyright 50 * notice, this list of conditions and the following disclaimer. 51 * 2. Redistributions in binary form must reproduce the above copyright 52 * notice, this list of conditions and the following disclaimer in the 53 * documentation and/or other materials provided with the distribution. 54 * 3. All advertising materials mentioning features or use of this software 55 * must display the following acknowledgement: 56 * This product includes software developed by the University of 57 * California, Berkeley and its contributors. 58 * 4. Neither the name of the University nor the names of its contributors 59 * may be used to endorse or promote products derived from this software 60 * without specific prior written permission. 61 * 62 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 63 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 64 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 65 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 66 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 67 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 68 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 69 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 70 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 71 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 72 * SUCH DAMAGE. 73 * 74 * from: Utah Hdr: cons.c 1.7 92/02/28 75 * 76 * @(#)cons.c 8.1 (Berkeley) 6/10/93 77 */ 78 79 #include <lib/libsa/stand.h> 80 81 #include "boot.h" 82 #include "cons.h" 83 84 #ifdef CONS_SERIAL 85 void siocnprobe(struct consdev *); 86 void siocninit(struct consdev *); 87 void siocnputchar(void *, int); 88 int siocngetchar(void *); 89 int siocnscan(void *); 90 # include "ns16550.h" 91 # ifndef COMPORT 92 # define COMPORT COM1 93 # endif 94 # ifndef COMSPEED 95 # define COMSPEED 9600 96 # endif 97 #endif 98 99 struct consdev constab[] = { 100 #ifdef CONS_SERIAL 101 { "com", COMPORT, COMSPEED, 102 siocnprobe, siocninit, siocngetchar, siocnputchar, siocnscan }, 103 #endif 104 { 0 } 105 }; 106 107 struct consdev *cn_tab; 108 109 char * 110 cninit(int *addr, int *speed) 111 { 112 register struct consdev *cp; 113 114 cn_tab = NULL; 115 for (cp = constab; cp->cn_probe; cp++) { 116 (*cp->cn_probe)(cp); 117 if (cp->cn_pri > CN_DEAD && 118 (cn_tab == NULL || cp->cn_pri > cn_tab->cn_pri)) 119 cn_tab = cp; 120 } 121 if (cn_tab) { 122 (*cn_tab->cn_init)(cn_tab); 123 *addr = cn_tab->address; 124 *speed = cn_tab->speed; 125 return (cn_tab->cn_name); 126 } 127 128 return (NULL); 129 } 130 131 int 132 cngetc(void) 133 { 134 135 if (cn_tab) 136 return ((*cn_tab->cn_getc)(cn_tab->cn_dev)); 137 return (0); 138 } 139 140 void 141 cnputc(int c) 142 { 143 144 if (cn_tab) 145 (*cn_tab->cn_putc)(cn_tab->cn_dev, c); 146 } 147 148 int 149 cnscan(void) 150 { 151 152 if (cn_tab) 153 return ((*cn_tab->cn_scan)(cn_tab->cn_dev)); 154 return -1; 155 } 156 157 #ifdef CONS_SERIAL 158 /* 159 * serial console 160 */ 161 void 162 siocnprobe(struct consdev *cp) 163 { 164 165 cp->cn_pri = CN_REMOTE; 166 } 167 168 void 169 siocninit(struct consdev *cp) 170 { 171 172 cp->cn_dev = (void *)NS16550_init(cp->address, cp->speed); 173 } 174 175 int 176 siocngetchar(void *dev) 177 { 178 179 return (NS16550_getc((struct NS16550 *)dev)); 180 } 181 182 void 183 siocnputchar(void *dev, register int c) 184 { 185 186 if (c == '\n') 187 NS16550_putc((struct NS16550 *)dev, '\r'); 188 NS16550_putc((struct NS16550 *)dev, c); 189 } 190 191 int 192 siocnscan(void *dev) 193 { 194 195 return (NS16550_scankbd((struct NS16550 *)dev)); 196 } 197 #endif /* CONS_SERIAL */ 198