Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/sys/arch/sparc64/dev Separate out the generic console handli...
details: https://anonhg.NetBSD.org/src/rev/48cb32597064
branches: trunk
changeset: 473164:48cb32597064
user: eeh <eeh%NetBSD.org@localhost>
date: Sun May 23 02:46:35 1999 +0000
description:
Separate out the generic console handling from zs.c
diffstat:
sys/arch/sparc64/dev/consinit.c | 209 ++++++++++++++++++++++++++++++++++++++++
1 files changed, 209 insertions(+), 0 deletions(-)
diffs (213 lines):
diff -r 1d23ab2deb25 -r 48cb32597064 sys/arch/sparc64/dev/consinit.c
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/sys/arch/sparc64/dev/consinit.c Sun May 23 02:46:35 1999 +0000
@@ -0,0 +1,209 @@
+/* $NetBSD: consinit.c,v 1.1 1999/05/23 02:46:35 eeh Exp $ */
+
+/*-
+ * Copyright (c) 1999 Eduardo E. Horvath
+ * All rights reserved.
+ *
+ * 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. The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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.
+ */
+
+/*
+ * Default console driver. Uses the PROM or whatever
+ * driver(s) are appropriate.
+ */
+
+#include "opt_ddb.h"
+
+#include <sys/param.h>
+#include <sys/systm.h>
+#include <sys/conf.h>
+#include <sys/device.h>
+#include <sys/file.h>
+#include <sys/ioctl.h>
+#include <sys/kernel.h>
+#include <sys/proc.h>
+#include <sys/tty.h>
+#include <sys/time.h>
+#include <sys/syslog.h>
+
+#include <machine/autoconf.h>
+#include <machine/openfirm.h>
+#include <machine/bsd_openprom.h>
+#include <machine/conf.h>
+#include <machine/cpu.h>
+#include <machine/eeprom.h>
+#include <machine/psl.h>
+#include <machine/z8530var.h>
+
+#include <dev/cons.h>
+
+#include <sparc64/sparc64/vaddrs.h>
+#include <sparc64/sparc64/auxreg.h>
+#include <sparc64/dev/cons.h>
+
+
+
+static void prom_cninit __P((struct consdev *));
+static int prom_cngetc __P((dev_t));
+static void prom_cnputc __P((dev_t, int));
+
+int stdin = NULL, stdout = NULL;
+
+/*
+ * The console is set to this one initially,
+ * which lets us use the PROM until consinit()
+ * is called to select a real console.
+ */
+struct consdev consdev_prom = {
+ nullcnprobe,
+ prom_cninit,
+ prom_cngetc,
+ prom_cnputc,
+ nullcnpollc,
+};
+
+/*
+ * The console table pointer is statically initialized
+ * to point to the PROM (output only) table, so that
+ * early calls to printf will work.
+ */
+struct consdev *cn_tab = &consdev_prom;
+
+void
+nullcnprobe(cn)
+ struct consdev *cn;
+{
+}
+
+static void
+prom_cninit(cn)
+ struct consdev *cn;
+{
+ if (!stdin) {
+ int node = OF_finddevice("/chosen");
+ OF_getprop(node, "stdin", &stdin, sizeof(stdin));
+ }
+ if (!stdout) {
+ int node = OF_finddevice("/chosen");
+ OF_getprop(node, "stdout", &stdout, sizeof(stdout));
+ }
+}
+
+/*
+ * PROM console input putchar.
+ * (dummy - this is output only)
+ */
+static int
+prom_cngetc(dev)
+ dev_t dev;
+{
+ char c0;
+
+ if (!stdin) {
+ int node = OF_finddevice("/chosen");
+ OF_getprop(node, "stdin", &stdin, sizeof(stdin));
+ }
+ if (OF_read(stdin, &c0, 1) == 1)
+ return (c0);
+ return -1;
+}
+
+/*
+ * PROM console output putchar.
+ */
+static void
+prom_cnputc(dev, c)
+ dev_t dev;
+ int c;
+{
+ int s;
+ char c0 = (c & 0x7f);
+
+ if (!stdout) {
+ int node = OF_finddevice("/chosen");
+ OF_getprop(node, "stdout", &stdout, sizeof(stdout));
+ }
+
+ s = splhigh();
+ OF_write(stdout, &c0, 1);
+ splx(s);
+}
+
+/*****************************************************************/
+
+#ifdef DEBUG
+#define DBPRINT(x) printf x
+#else
+#define DBPRINT(x)
+#endif
+
+/*
+ * This function replaces sys/dev/cninit.c
+ * Determine which device is the console using
+ * the PROM "input source" and "output sink".
+ */
+void
+consinit()
+{
+ register int chosen;
+ char buffer[128];
+ extern int stdinnode, fbnode;
+ char *consname = "unknown";
+
+ DBPRINT(("consinit()\r\n"));
+ if (cn_tab != &consdev_prom) return;
+
+ DBPRINT(("setting up stdin\r\n"));
+ chosen = OF_finddevice("/chosen");
+ OF_getprop(chosen, "stdin", &stdin, sizeof(stdin));
+ DBPRINT(("stdin instance = %x\r\n", stdin));
+
+ if ((stdinnode = OF_instance_to_package(stdin)) == 0) {
+ printf("WARNING: no PROM stdin\n");
+ }
+
+ DBPRINT(("setting up stdout\r\n"));
+ OF_getprop(chosen, "stdout", &stdout, sizeof(stdout));
+
+ DBPRINT(("stdout instance = %x\r\n", stdout));
+
+ if ((fbnode = OF_instance_to_package(stdout)) == 0)
+ printf("WARNING: no PROM stdout\n");
+
+ DBPRINT(("stdout package = %x\r\n", fbnode));
+
+ if (stdinnode && (OF_getproplen(stdinnode,"keyboard") >= 0)) {
+#if NKBD > 0
+ printf("cninit: kdb/display not configured\n");
+#endif
+ consname = "keyboard/display";
+ } else if (fbnode &&
+ (OF_instance_to_path(stdinnode, buffer, sizeof(buffer) >= 0))) {
+ consname = buffer;
+ }
+ printf("console is %s\n", consname);
+
+ /* Defer the rest to the device attach */
+}
+
Home |
Main Index |
Thread Index |
Old Index