summaryrefslogtreecommitdiff
path: root/sys/arch/pmax/dev/dc_ioasic.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/arch/pmax/dev/dc_ioasic.c')
-rw-r--r--sys/arch/pmax/dev/dc_ioasic.c109
1 files changed, 109 insertions, 0 deletions
diff --git a/sys/arch/pmax/dev/dc_ioasic.c b/sys/arch/pmax/dev/dc_ioasic.c
new file mode 100644
index 00000000000..b6f9b9ad977
--- /dev/null
+++ b/sys/arch/pmax/dev/dc_ioasic.c
@@ -0,0 +1,109 @@
+/* $NetBSD: dc_ioasic.c,v 1.4 1996/10/14 17:15:42 jonathan Exp $ */
+
+/*
+ * Copyright 1996 The Board of Trustees of The Leland Stanford
+ * Junior University. All Rights Reserved.
+ *
+ * Permission to use, copy, modify, and distribute this
+ * software and its documentation for any purpose and without
+ * fee is hereby granted, provided that the above copyright
+ * notice appear in all copies. Stanford University
+ * makes no representations about the suitability of this
+ * software for any purpose. It is provided "as is" without
+ * express or implied warranty.
+ *
+ * this driver contributed by Jonathan Stone
+ */
+
+#include <sys/param.h>
+#include <sys/systm.h>
+#include <sys/types.h>
+#include <sys/device.h>
+#include <sys/tty.h>
+#include <machine/autoconf.h>
+#include <dev/tc/tcvar.h>
+#include <dev/tc/ioasicvar.h>
+#include <machine/dc7085cons.h>
+#include <pmax/dev/dcvar.h>
+#include <pmax/dev/dc_ioasic_cons.h>
+#include <pmax/pmax/kn02.h>
+/*
+ * Autoconfig definition of driver front-end
+ */
+int dc_ioasic_match __P((struct device * parent, void *cfdata, void *aux));
+void dc_ioasic_attach __P((struct device *parent, struct device *self, void *aux));
+
+struct cfattach dc_ioasic_ca = {
+ sizeof(struct dc_softc), dc_ioasic_match, dc_ioasic_attach
+};
+
+
+/*
+ * Initialize a line for (polled) console I/O
+ */
+int
+dc_ioasic_consinit(dev)
+ dev_t dev;
+{
+
+#if defined(DEBUG) && 0
+ printf("dc_ioasic(%d,%d): serial console at 0x%x\n",
+ minor(dev) >> 2, minor(dev) & 03,
+ MACH_PHYS_TO_UNCACHED(KN02_SYS_DZ));
+ DELAY(100000);
+#endif
+ dc_consinit(dev, (void *)MACH_PHYS_TO_UNCACHED(KN02_SYS_DZ));
+ return(1);
+}
+
+
+/*
+ * Match driver on 5000/200
+ * (not a real ioasic, but we configure it as one)
+ */
+int
+dc_ioasic_match(parent, match, aux)
+ struct device *parent;
+ void *match;
+ void *aux;
+{
+ struct ioasicdev_attach_args *d = aux;
+
+ if (strcmp(d->iada_modname, "dc") != 0 &&
+ strcmp(d->iada_modname, "dc7085") != 0)
+ return (0);
+
+ if (badaddr((caddr_t)(d->iada_addr), 2))
+ return (0);
+
+ return (1);
+}
+
+
+void
+dc_ioasic_attach(parent, self, aux)
+ struct device *parent;
+ struct device *self;
+ void *aux;
+{
+ struct dc_softc *sc = (void*) self;
+ struct ioasicdev_attach_args *d = aux;
+ caddr_t dcaddr;
+
+ dcaddr = (caddr_t)d->iada_addr;
+ printf("address 0x%p\n", dcaddr);
+ (void) dcattach(sc, (void*)MACH_PHYS_TO_UNCACHED(dcaddr),
+ /* dtr/dsr mask */ (1<< DCPRINTER_PORT) + (1 << DCCOMM_PORT),
+#ifdef HW_FLOW_CONTROL
+ /* rts/cts mask */ (1<< DCPRINTER_PORT) + (1 << DCCOMM_PORT),
+#else
+ 0,
+#endif
+ 1, 3);
+ /* tie pseudo-slot to device */
+ ioasic_intr_establish(parent, d->iada_cookie, TC_IPL_TTY,
+ dcintr, self);
+
+ printf("\n");
+}
+