Add support for microvax 3000.
[unix-history] / usr / src / sys / vax / uba / dn.c
index d08bf20..268bc59 100644 (file)
@@ -1,29 +1,36 @@
-/*     dn.c    4.4     82/04/25        */
+/*
+ * Copyright (c) 1982, 1986 Regents of the University of California.
+ * All rights reserved.  The Berkeley software License Agreement
+ * specifies the terms and conditions for redistribution.
+ *
+ *     @(#)dn.c        7.1 (Berkeley) %G%
+ */
 
 #include "dn.h"
 #if NDN > 0
 /*
  * DN-11 ACU interface
  */
 
 #include "dn.h"
 #if NDN > 0
 /*
  * DN-11 ACU interface
  */
+#include "../machine/pte.h"
+
+#include "param.h"
+#include "systm.h"
+#include "dir.h"
+#include "user.h"
+#include "buf.h"
+#include "map.h"
+#include "conf.h"
+#include "uio.h"
 
 
-#include "../h/param.h"
-#include "../h/systm.h"
-#include "../h/dir.h"
-#include "../h/user.h"
-#include "../h/buf.h"
-#include "../h/map.h"
-#include "../h/pte.h"
-#include "../h/ubavar.h"
-#include "../h/conf.h"
-#include "../h/ioctl.h"
+#include "ubavar.h"
 
 struct dndevice {
        u_short dn_reg[4];
 };
 
 struct uba_device *dninfo[NDN];
 
 struct dndevice {
        u_short dn_reg[4];
 };
 
 struct uba_device *dninfo[NDN];
-int dnprobe(), dnattach();
-u_short dnstd[] = { 0175200 };
+int dnprobe(), dnattach(), dnintr();
+u_short dnstd[] = { 0175200, 0 };
 struct uba_driver dndriver =
        { dnprobe, 0, dnattach, 0, dnstd, "dn", dninfo };
 
 struct uba_driver dndriver =
        { dnprobe, 0, dnattach, 0, dnstd, "dn", dninfo };
 
@@ -56,22 +63,31 @@ dnprobe(reg)
        register int br, cvec;  /* value-result, must be r11, r10 */
        register struct dndevice *dnaddr = (struct dndevice *)reg;
 
        register int br, cvec;  /* value-result, must be r11, r10 */
        register struct dndevice *dnaddr = (struct dndevice *)reg;
 
+#ifdef lint
+       br = 0; cvec = 0; br = cvec; cvec = br;
+       dnintr(0);
+#endif
        /*
         * If there's at least one dialer out there it better be
        /*
         * If there's at least one dialer out there it better be
-        *  at chassis 0.
+        * at chassis 0.
         */
        dnaddr->dn_reg[0] = MENABLE|IENABLE|DONE;
        DELAY(5);
        dnaddr->dn_reg[0] = 0;
         */
        dnaddr->dn_reg[0] = MENABLE|IENABLE|DONE;
        DELAY(5);
        dnaddr->dn_reg[0] = 0;
+       return (sizeof (struct dndevice));
 }
 
 }
 
+/*ARGSUSED*/
 dnattach(ui)
        struct uba_device *ui;
 dnattach(ui)
        struct uba_device *ui;
-{}
+{
+
+}
 
 /*ARGSUSED*/
 dnopen(dev, flag)
        dev_t dev;
 
 /*ARGSUSED*/
 dnopen(dev, flag)
        dev_t dev;
+       int flag;
 {
        register struct dndevice *dp;
        register u_short unit, *dnreg;
 {
        register struct dndevice *dp;
        register u_short unit, *dnreg;
@@ -79,23 +95,18 @@ dnopen(dev, flag)
        register short dialer;
 
        if ((unit = DNUNIT(dev)) >= NDN || (ui = dninfo[unit]) == 0 ||
        register short dialer;
 
        if ((unit = DNUNIT(dev)) >= NDN || (ui = dninfo[unit]) == 0 ||
-           ui->ui_alive == 0) {
-               u.u_error = ENXIO;
-               return;
-       }
+           ui->ui_alive == 0)
+               return (ENXIO);
        dialer = DNREG(dev);
        dp = (struct dndevice *)ui->ui_addr;
        dialer = DNREG(dev);
        dp = (struct dndevice *)ui->ui_addr;
-       if (dp->dn_reg[dialer] & PWI) {
-               u.u_error = ENXIO;
-               return;
-       }
+       if (dp->dn_reg[dialer] & PWI)
+               return (ENXIO);
        dnreg = &(dp->dn_reg[dialer]);
        dnreg = &(dp->dn_reg[dialer]);
-       if (*dnreg&(DLO|CRQ)) {
-               u.u_error = EBUSY;
-               return;
-       }
+       if (*dnreg&(DLO|CRQ))
+               return (EBUSY);
        dp->dn_reg[0] |= MENABLE;
        *dnreg = IENABLE|MENABLE|CRQ;
        dp->dn_reg[0] |= MENABLE;
        *dnreg = IENABLE|MENABLE|CRQ;
+       return (0);
 }
 
 /*ARGSUSED*/
 }
 
 /*ARGSUSED*/
@@ -108,25 +119,27 @@ dnclose(dev, flag)
        dp->dn_reg[DNREG(dev)] = MENABLE;
 }
 
        dp->dn_reg[DNREG(dev)] = MENABLE;
 }
 
-dnwrite(dev)
+dnwrite(dev, uio)
        dev_t dev;
        dev_t dev;
+       struct uio *uio;
 {
        register u_short *dnreg;
        register int cc;
        register struct dndevice *dp;
 {
        register u_short *dnreg;
        register int cc;
        register struct dndevice *dp;
-       char buf[OBUFSIZ];
+       char obuf[OBUFSIZ];
        register char *cp;
        extern lbolt;
        register char *cp;
        extern lbolt;
+       int error;
 
        dp = (struct dndevice *)dninfo[DNUNIT(dev)]->ui_addr;
        dnreg = &(dp->dn_reg[DNREG(dev)]);
 
        dp = (struct dndevice *)dninfo[DNUNIT(dev)]->ui_addr;
        dnreg = &(dp->dn_reg[DNREG(dev)]);
-       cc = MIN(u.u_count, OBUFSIZ);
-       cp = buf;
-       iomove(cp, (unsigned)cc, B_WRITE);
-       if (u.u_error)
-               return;
+       cc = MIN(uio->uio_resid, OBUFSIZ);
+       cp = obuf;
+       error = uiomove(cp, cc, UIO_WRITE, uio);
+       if (error)
+               return (error);
        while ((*dnreg & (PWI|ACR|DSS)) == 0 && cc >= 0) {
        while ((*dnreg & (PWI|ACR|DSS)) == 0 && cc >= 0) {
-               spl4();
+               (void) spl4();
                if ((*dnreg & PND) == 0 || cc == 0)
                        sleep((caddr_t)dnreg, DNPRI);
                else switch(*cp) {
                if ((*dnreg & PND) == 0 || cc == 0)
                        sleep((caddr_t)dnreg, DNPRI);
                else switch(*cp) {
@@ -169,7 +182,8 @@ dnwrite(dev)
                spl0();
        }
        if (*dnreg & (PWI|ACR))
                spl0();
        }
        if (*dnreg & (PWI|ACR))
-               u.u_error = EIO;
+               return (EIO);
+       return (0);
 }
 
 dnintr(dev)
 }
 
 dnintr(dev)