diff options
author | Jason Downs <downsj@cvs.openbsd.org> | 1997-07-14 08:15:01 +0000 |
---|---|---|
committer | Jason Downs <downsj@cvs.openbsd.org> | 1997-07-14 08:15:01 +0000 |
commit | 68982ee9315c1d2dfd5ae49889ef59a9a0a2b18e (patch) | |
tree | 49722ae0f8e398f3a79268c08a236e5b9bf0c3ad /sys/arch/hp300/stand/common/cons.c | |
parent | 5f2612599833ff2e0bc32cb218ce6f42643092b2 (diff) |
The grand reorganization, OpenBSD style.
Lossely based on the NetBSD reorg, but much improved upon, simpler, and doesn't
scribble needless junk into the bootblocks.
Diffstat (limited to 'sys/arch/hp300/stand/common/cons.c')
-rw-r--r-- | sys/arch/hp300/stand/common/cons.c | 131 |
1 files changed, 131 insertions, 0 deletions
diff --git a/sys/arch/hp300/stand/common/cons.c b/sys/arch/hp300/stand/common/cons.c new file mode 100644 index 00000000000..4132a82c053 --- /dev/null +++ b/sys/arch/hp300/stand/common/cons.c @@ -0,0 +1,131 @@ +/* $OpenBSD: cons.c,v 1.1 1997/07/14 08:14:08 downsj Exp $ */ +/* $NetBSD: cons.c,v 1.2 1997/05/12 07:44:53 thorpej Exp $ */ + +/* + * Copyright (c) 1988 University of Utah. + * Copyright (c) 1990, 1993 + * The Regents of the University of California. All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * the Systems Programming Group of the University of Utah Computer + * Science Department. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * from: Utah Hdr: cons.c 1.7 92/02/28 + * + * @(#)cons.c 8.1 (Berkeley) 6/10/93 + */ + +#include <sys/param.h> +#include <dev/cons.h> + +#include "consdefs.h" +#include "samachdep.h" + +struct consdev constab[] = { +#ifdef ITECONSOLE + { iteprobe, iteinit, itegetchar, iteputchar }, +#endif +#ifdef DCACONSOLE + { dcaprobe, dcainit, dcagetchar, dcaputchar }, +#endif +#ifdef APCICONSOLE + { apciprobe, apciinit, apcigetchar, apciputchar }, +#endif +#ifdef DCMCONSOLE + { dcmprobe, dcminit, dcmgetchar, dcmputchar }, +#endif + { 0 }, +}; + +int curcons_scode; /* select code of device currently being probed */ +int cons_scode; /* final select code of console device */ + +struct consdev *cn_tab; +int noconsole; + +void +cninit() +{ + register struct consdev *cp; + + cn_tab = NULL; + noconsole = 1; + cons_scode = 256; /* larger than last valid select code */ + for (cp = constab; cp->cn_probe; cp++) { + (*cp->cn_probe)(cp); + if (cp->cn_pri > CN_DEAD && + (cn_tab == NULL || cp->cn_pri > cn_tab->cn_pri)) { + cn_tab = cp; + cons_scode = curcons_scode; + } + } + if (cn_tab) { + (*cn_tab->cn_init)(cn_tab); + noconsole = 0; +#if 0 + printf("console: "); + switch (cons_scode) { + case -2: + printf("apci\n"); + break; + case -1: + printf("internal grf\n"); + break; + default: + printf("scode %d\n", cons_scode); + } +#endif + } +} + +int +cngetc() +{ + + /* Note: the dev_t arguments are not used! */ + if (cn_tab) + return((*cn_tab->cn_getc)(0)); + return(0); +} + +int +cnputc(c) + int c; +{ + + /* Note: the dev_t arguments are not used! */ + if (userom) + romputchar(c); + else if (cn_tab) + (*cn_tab->cn_putc)(0, c); + + return (0); +} |