summaryrefslogtreecommitdiff
path: root/sys/arch/pmax/dev/dz_ioasic.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/arch/pmax/dev/dz_ioasic.c')
-rw-r--r--sys/arch/pmax/dev/dz_ioasic.c110
1 files changed, 110 insertions, 0 deletions
diff --git a/sys/arch/pmax/dev/dz_ioasic.c b/sys/arch/pmax/dev/dz_ioasic.c
new file mode 100644
index 00000000000..0beab7986c0
--- /dev/null
+++ b/sys/arch/pmax/dev/dz_ioasic.c
@@ -0,0 +1,110 @@
+/* $OpenBSD: dz_ioasic.c,v 1.1 2000/08/19 18:36:19 maja Exp $ */
+/* $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/dzvar.h>
+#include <pmax/dev/dz_ioasic_cons.h>
+#include <pmax/pmax/kn02.h>
+/*
+ * Autoconfig definition of driver front-end
+ */
+int dz_ioasic_match __P((struct device * parent, void *cfdata, void *aux));
+void dz_ioasic_attach __P((struct device *parent, struct device *self, void *aux));
+
+struct cfattach dz_ioasic_ca = {
+ sizeof(struct dz_softc), dz_ioasic_match, dz_ioasic_attach
+};
+
+
+/*
+ * Initialize a line for (polled) console I/O
+ */
+int
+dz_ioasic_consinit(dev)
+ dev_t dev;
+{
+
+#if defined(DEBUG) && 0
+ printf("dz_ioasic(%d,%d): serial console at 0x%x\n",
+ minor(dev) >> 2, minor(dev) & 03,
+ MIPS_PHYS_TO_KSEG1(KN02_SYS_DZ));
+ DELAY(100000);
+#endif
+ dz_consinit(dev, (void *)MIPS_PHYS_TO_KSEG1(KN02_SYS_DZ));
+ return(1);
+}
+
+
+/*
+ * Match driver on 5000/200
+ * (not a real ioasic, but we configure it as one)
+ */
+int
+dz_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
+dz_ioasic_attach(parent, self, aux)
+ struct device *parent;
+ struct device *self;
+ void *aux;
+{
+ struct dz_softc *sc = (void*) self;
+ struct ioasicdev_attach_args *d = aux;
+ caddr_t dcaddr;
+
+ dcaddr = (caddr_t)d->iada_addr;
+ printf(" address %p", dcaddr);
+ (void) dzattach(sc, (void*)MIPS_PHYS_TO_KSEG1(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,
+ dzintr, self);
+
+ printf("\n");
+}
+