Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/sys/arch/vax/vsa Rename dz_ibus to dz_vsbus.



details:   https://anonhg.NetBSD.org/src/rev/54cb34b62db7
branches:  trunk
changeset: 503005:54cb34b62db7
user:      ragge <ragge%NetBSD.org@localhost>
date:      Sun Jan 28 19:26:34 2001 +0000

description:
Rename dz_ibus to dz_vsbus.

diffstat:

 sys/arch/vax/vsa/dz_vsbus.c |  338 ++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 338 insertions(+), 0 deletions(-)

diffs (truncated from 342 to 300 lines):

diff -r ee81d213234f -r 54cb34b62db7 sys/arch/vax/vsa/dz_vsbus.c
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/sys/arch/vax/vsa/dz_vsbus.c       Sun Jan 28 19:26:34 2001 +0000
@@ -0,0 +1,338 @@
+/*     $NetBSD: dz_vsbus.c,v 1.15 2001/01/28 19:26:34 ragge Exp $ */
+/*
+ * Copyright (c) 1998 Ludd, University of Lule}, Sweden.
+ * 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. All advertising materials mentioning features or use of this software
+ *    must display the following acknowledgement:
+ *      This product includes software developed at Ludd, University of 
+ *      Lule}, Sweden and its contributors.
+ * 4. 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.
+ */
+
+
+
+#include <sys/param.h>
+#include <sys/proc.h>
+#include <sys/systm.h>
+#include <sys/ioctl.h>
+#include <sys/tty.h>
+#include <sys/file.h>
+#include <sys/conf.h>
+#include <sys/device.h>
+#include <sys/reboot.h>
+
+#include <dev/cons.h>
+
+#include <machine/mtpr.h>
+#include <machine/sid.h>
+#include <machine/uvax.h>
+#include <machine/vsbus.h>
+#include <machine/cpu.h>
+#include <machine/scb.h>
+
+#include <arch/vax/vax/gencons.h>
+
+#include <dev/qbus/dzreg.h>
+#include <dev/qbus/dzvar.h>
+
+#include "ioconf.h"
+#include "dzkbd.h"
+#include "dzms.h"
+
+#if NDZKBD > 0 || NDZMS > 0
+#include <dev/dec/dzkbdvar.h>
+
+#if 0
+static struct dz_linestate dz_conslinestate = { NULL, -1, NULL, NULL, NULL };
+#endif
+#endif
+
+static  int     dz_vsbus_match(struct device *, struct cfdata *, void *);
+static  void    dz_vsbus_attach(struct device *, struct device *, void *);
+
+static vaddr_t dz_regs; /* Used for console */
+
+struct  cfattach dz_vsbus_ca = {
+       sizeof(struct dz_softc), dz_vsbus_match, dz_vsbus_attach
+};
+
+#define REG(name)     short name; short X##name##X;
+static volatile struct ss_dz {/* base address of DZ-controller: 0x200A0000 */
+       REG(csr);       /* 00 Csr: control/status register */
+       REG(rbuf);      /* 04 Rbuf/Lpr: receive buffer/line param reg. */
+       REG(tcr);       /* 08 Tcr: transmit console register */
+       REG(tdr);       /* 0C Msr/Tdr: modem status reg/transmit data reg */
+       REG(lpr0);      /* 10 Lpr0: */
+       REG(lpr1);      /* 14 Lpr0: */
+       REG(lpr2);      /* 18 Lpr0: */
+       REG(lpr3);      /* 1C Lpr0: */
+} *dz;
+#undef REG
+
+cons_decl(dz);
+cdev_decl(dz);
+
+#if NDZKBD > 0 || NDZMS > 0
+static int
+dz_print(void *aux, const char *name)
+{
+#if 0
+#if NDZKBD > 0 || NDZMS > 0
+       struct dz_attach_args *dz_args = aux;
+       if (name == NULL) {
+               printf (" line %d", dz_args->line);
+               if (dz_args->hwflags & DZ_HWFLAG_CONSOLE)
+                       printf (" (console)");
+       }
+       return (QUIET);
+#else
+       if (name)
+               printf ("lkc at %s", name);
+       return (UNCONF);
+#endif
+#endif
+       return (UNCONF);
+}
+#endif
+
+static int
+dz_vsbus_match(struct device *parent, struct cfdata *cf, void *aux)
+{
+       struct vsbus_attach_args *va = aux;
+       struct ss_dz *dzP;
+       short i;
+
+       dzP = (struct ss_dz *)va->va_addr;
+       i = dzP->tcr;
+       dzP->csr = DZ_CSR_MSE|DZ_CSR_TXIE;
+       dzP->tcr = 0;
+       DELAY(1000);
+       dzP->tcr = 1;
+       DELAY(100000);
+       dzP->tcr = i;
+
+       /* If the device doesn't exist, no interrupt has been generated */
+       return 1;
+}
+
+static void
+dz_vsbus_attach(struct device *parent, struct device *self, void *aux)
+{
+       struct dz_softc *sc = (void *)self;
+       struct vsbus_attach_args *va = aux;
+#if NDZKBD > 0 || NDZMS > 0
+       struct dzkm_attach_args daa;
+#endif
+
+       /* 
+        * XXX - This is evil and ugly, but...
+        * due to the nature of how bus_space_* works on VAX, this will
+        * be perfectly good until everything is converted.
+        */
+       sc->sc_ioh = dz_regs;
+       sc->sc_dr.dr_csr = 0;
+       sc->sc_dr.dr_rbuf = 4;
+       sc->sc_dr.dr_dtr = 9;
+       sc->sc_dr.dr_break = 13;
+       sc->sc_dr.dr_tbuf = 12;
+       sc->sc_dr.dr_tcr = 8;
+       sc->sc_dr.dr_dcd = 13;
+       sc->sc_dr.dr_ring = 13;
+
+       sc->sc_type = DZ_DZV;
+
+       sc->sc_dsr = 0x0f; /* XXX check if VS has modem ctrl bits */
+
+       scb_vecalloc(va->va_cvec, dzxint, sc, SCB_ISTACK, &sc->sc_tintrcnt);
+       scb_vecalloc(va->va_cvec - 4, dzrint, sc, SCB_ISTACK, &sc->sc_rintrcnt);
+
+       printf("\n%s: 4 lines", self->dv_xname);
+
+       dzattach(sc, NULL);
+
+#if NDZKBD > 0
+       /* Don't change speed if this is the console */
+       if (cn_tab->cn_dev != makedev(getmajor(dzopen), 0))
+               dz->rbuf = DZ_LPR_RX_ENABLE | (DZ_LPR_B4800 << 8) 
+                   | DZ_LPR_8_BIT_CHAR;
+       daa.daa_line = 0;
+       daa.daa_flags = (cn_tab->cn_pri == CN_INTERNAL ? DZKBD_CONSOLE : 0);
+       config_found(self, &daa, dz_print);
+#endif
+#if NDZMS > 0
+       dz->rbuf = DZ_LPR_RX_ENABLE | (DZ_LPR_B4800 << 8) | DZ_LPR_7_BIT_CHAR \
+           | DZ_LPR_PARENB | DZ_LPR_OPAR | 1 /* line */;
+       daa.daa_line = 1;
+       daa.daa_flags = 0;
+       config_found(self, &daa, dz_print);
+#endif
+       dzrint(sc);
+       dzxint(sc);
+}
+
+int
+dzcngetc(dev_t dev)
+{
+       int c = 0;
+       int mino = minor(dev);
+       u_short rbuf;
+
+       do {
+               while ((dz->csr & 0x80) == 0)
+                       ; /* Wait for char */
+               rbuf = dz->rbuf;
+               if (((rbuf >> 8) & 3) != mino)
+                       continue;
+               c = rbuf & 0x7f;
+       } while (c == 17 || c == 19);           /* ignore XON/XOFF */
+
+       if (c == 13)
+               c = 10;
+
+       return (c);
+}
+
+void
+dzcnprobe(struct consdev *cndev)
+{
+       extern  vaddr_t iospace;
+       int diagcons;
+       paddr_t ioaddr = 0x200A0000;
+
+       switch (vax_boardtype) {
+       case VAX_BTYP_410:
+       case VAX_BTYP_420:
+       case VAX_BTYP_43:
+               diagcons = (vax_confdata & 0x20 ? 3 : 0);
+               break;
+
+       case VAX_BTYP_46:
+       case VAX_BTYP_48:
+               diagcons = (vax_confdata & 0x100 ? 3 : 0);
+               break;
+
+       case VAX_BTYP_49:
+               ioaddr = 0x25000000;
+               diagcons = 3;
+               break;
+
+       default:
+               cndev->cn_pri = CN_DEAD;
+               return;
+       }
+       if (diagcons)
+               cndev->cn_pri = CN_REMOTE;
+       else
+               cndev->cn_pri = CN_NORMAL;
+       cndev->cn_dev = makedev(getmajor(dzopen), diagcons);
+       (vaddr_t)dz = dz_regs = iospace;
+       ioaccess(iospace, ioaddr, 1);
+}
+
+void
+dzcninit(struct consdev *cndev)
+{
+       dz = (void*)dz_regs;
+
+       dz->csr = 0;    /* Disable scanning until initting is done */
+       dz->tcr = (1 << minor(cndev->cn_dev));    /* Turn on xmitter */
+       dz->csr = 0x20; /* Turn scanning back on */
+}
+
+
+void
+dzcnputc(dev_t dev, int        ch)
+{
+       int timeout = 1<<15;            /* don't hang the machine! */
+       int mino = minor(dev);
+       u_short tcr;
+
+       if (mfpr(PR_MAPEN) == 0)
+               return;
+
+       tcr = dz->tcr;  /* remember which lines to scan */
+       dz->tcr = (1 << mino);
+
+       while ((dz->csr & 0x8000) == 0) /* Wait until ready */
+               if (--timeout < 0)
+                       break;
+       dz->tdr = ch;                    /* Put the  character */
+       timeout = 1<<15;
+       while ((dz->csr & 0x8000) == 0) /* Wait until ready */
+               if (--timeout < 0)
+                       break;
+
+       dz->tcr = tcr;
+}
+
+void 
+dzcnpollc(dev_t dev, int pollflag)
+{
+       static  u_char mask;
+
+       if (pollflag)
+               mask = vsbus_setmask(0);
+       else



Home | Main Index | Thread Index | Old Index