after attempt at ht driver at cc again; working with new
authorBill Joy <wnj@ucbvax.Berkeley.EDU>
Sun, 8 Mar 1981 06:28:55 +0000 (22:28 -0800)
committerBill Joy <wnj@ucbvax.Berkeley.EDU>
Sun, 8 Mar 1981 06:28:55 +0000 (22:28 -0800)
field names

SCCS-vsn: sys/vax/mba/ht.c 4.8
SCCS-vsn: sys/vax/mba/mba.c 4.16
SCCS-vsn: sys/vax/uba/rk.c 4.24
SCCS-vsn: sys/vax/uba/tm.c 4.23
SCCS-vsn: sys/vax/uba/up.c 4.30

usr/src/sys/vax/mba/ht.c
usr/src/sys/vax/mba/mba.c
usr/src/sys/vax/uba/rk.c
usr/src/sys/vax/uba/tm.c
usr/src/sys/vax/uba/up.c

index 0ecd85d..9dddd97 100644 (file)
@@ -1,6 +1,6 @@
-/*     ht.c    4.7     81/03/07        */
+/*     ht.c    4.8     81/03/07        */
 
 
-#include "ht.h"
+#include "tu.h"
 #if NHT > 0
 /*
  * TM03/TU?? tape driver
 #if NHT > 0
 /*
  * TM03/TU?? tape driver
@@ -14,7 +14,8 @@
 #include "../h/user.h"
 #include "../h/map.h"
 #include "../h/pte.h"
 #include "../h/user.h"
 #include "../h/map.h"
 #include "../h/pte.h"
-#include "../h/mba.h"
+#include "../h/mbareg.h"
+#include "../h/mbavar.h"
 #include "../h/mtio.h"
 #include "../h/ioctl.h"
 #include "../h/cmap.h"
 #include "../h/mtio.h"
 #include "../h/ioctl.h"
 #include "../h/cmap.h"
@@ -27,18 +28,21 @@ struct      buf     chtbuf[NHT];
 
 short  httypes[] =
        { MBDT_TE16, MBDT_TU45, MBDT_TU77, 0 };
 
 short  httypes[] =
        { MBDT_TE16, MBDT_TU45, MBDT_TU77, 0 };
-struct mba_info *htinfo[NHT];
-int    htdkinit(), htustart(), htndtint(), htdtint();
+struct mba_device *htinfo[NHT];
+int    htdkinit(), htattach(), htslave(), htustart(), htndtint(), htdtint();
 struct mba_driver htdriver =
 struct mba_driver htdriver =
-       { htdkinit, htustart, 0, htdtint, htndtint, httypes, htinfo };
+    { htattach, htslave, htustart, 0, htdtint, htndtint,
+      httypes, "ht", "tu", htinfo };
 
 #define MASKREG(r)     ((r) & 0xffff)
 
 /* bits in minor device */
 
 #define MASKREG(r)     ((r) & 0xffff)
 
 /* bits in minor device */
-#define HTUNIT(dev)    (minor(dev)&03)
+#define        TUUNIT(dev)     (minor(dev)&03)
 #define        H_NOREWIND      04
 #define        H_1600BPI       08
 
 #define        H_NOREWIND      04
 #define        H_1600BPI       08
 
+#define HTUNIT(dev)    (htunit[TUUNIT(dev)])
+
 #define        INF     (daddr_t)1000000L       /* a block number that wont exist */
 
 struct ht_softc {
 #define        INF     (daddr_t)1000000L       /* a block number that wont exist */
 
 struct ht_softc {
@@ -50,7 +54,10 @@ struct       ht_softc {
        u_short sc_dsreg;
        short   sc_resid;
        short   sc_dens;
        u_short sc_dsreg;
        short   sc_resid;
        short   sc_dens;
-} ht_softc[NHT];
+       struct  mba_device *sc_mi;
+       int     sc_slave;
+} ht_softc[NTU];
+short  htunit[NTU];
 
 /*
  * Bits for sc_flags.
 
 /*
  * Bits for sc_flags.
@@ -60,10 +67,21 @@ struct      ht_softc {
 #define H_REWIND  4    /* last unit start was a rewind */
 
 /*ARGSUSED*/
 #define H_REWIND  4    /* last unit start was a rewind */
 
 /*ARGSUSED*/
-htdkinit(mi)
-       struct mba_info *mi;
+htattach(mi)
+       struct mba_device *mi;
+{
+
+}
+
+htslave(mi, ms)
+       struct mba_device *mi;
+       struct mba_slave *ms;
 {
 {
+       register struct ht_softc *sc = &ht_softc[ms->ms_unit];
 
 
+       sc->sc_mi = mi;
+       sc->sc_slave = ms->ms_slave;
+       htunit[ms->ms_unit] = mi->mi_unit;
 }
 
 htopen(dev, flag)
 }
 
 htopen(dev, flag)
@@ -71,12 +89,12 @@ htopen(dev, flag)
        int flag;
 {
        register int unit;
        int flag;
 {
        register int unit;
-       register struct mba_info *mi;
+       register struct mba_device *mi;
        register struct ht_softc *sc;
 
        register struct ht_softc *sc;
 
-       unit = HTUNIT(dev);
-       if (unit >= NHT || (sc = &ht_softc[unit])->sc_openf ||
-           (mi = htinfo[unit]) == 0 || mi->mi_alive == 0) {
+       unit = TUUNIT(dev);
+       if (unit >= NTU || (sc = &ht_softc[unit])->sc_openf ||
+           (mi = htinfo[HTUNIT(dev)]) == 0 || mi->mi_alive == 0) {
                u.u_error = ENXIO;
                return;
        }
                u.u_error = ENXIO;
                return;
        }
@@ -93,7 +111,7 @@ htopen(dev, flag)
        }
        sc->sc_dens =
            ((minor(dev)&H_1600BPI)?HTTC_1600BPI:HTTC_800BPI)|
        }
        sc->sc_dens =
            ((minor(dev)&H_1600BPI)?HTTC_1600BPI:HTTC_800BPI)|
-               HTTC_PDP11|mi->mi_slave;
+               HTTC_PDP11|sc->sc_slave;
        sc->sc_openf = 1;
        sc->sc_blkno = (daddr_t)0;
        sc->sc_nxrec = INF;
        sc->sc_openf = 1;
        sc->sc_blkno = (daddr_t)0;
        sc->sc_nxrec = INF;
@@ -104,7 +122,7 @@ htclose(dev, flag)
        register dev_t dev;
        register flag;
 {
        register dev_t dev;
        register flag;
 {
-       register struct ht_softc *sc = &ht_softc[HTUNIT(dev)];
+       register struct ht_softc *sc = &ht_softc[TUUNIT(dev)];
 
        if (flag == FWRITE || ((flag&FWRITE) && (sc->sc_flags&H_WRITTEN))) {
                htcommand(dev, HT_WEOF, 1);
 
        if (flag == FWRITE || ((flag&FWRITE) && (sc->sc_flags&H_WRITTEN))) {
                htcommand(dev, HT_WEOF, 1);
@@ -131,6 +149,9 @@ htcommand(dev, com, count)
        bp = &chtbuf[HTUNIT(dev)];
        (void) spl5();
        while (bp->b_flags&B_BUSY) {
        bp = &chtbuf[HTUNIT(dev)];
        (void) spl5();
        while (bp->b_flags&B_BUSY) {
+               if (bp->b_command == H_REWIND && bp->b_repcnt == 0 &&
+                   (bp->b_flags&B_DONE))
+                       break;
                bp->b_flags |= B_WANTED;
                sleep((caddr_t)bp, PRIBIO);
        }
                bp->b_flags |= B_WANTED;
                sleep((caddr_t)bp, PRIBIO);
        }
@@ -153,7 +174,7 @@ htstrategy(bp)
        register struct buf *bp;
 {
        register int unit = HTUNIT(bp->b_dev);
        register struct buf *bp;
 {
        register int unit = HTUNIT(bp->b_dev);
-       register struct mba_info *mi = htinfo[unit];
+       register struct mba_device *mi = htinfo[unit];
        register struct buf *dp;
 
        bp->av_forw = NULL;
        register struct buf *dp;
 
        bp->av_forw = NULL;
@@ -170,12 +191,12 @@ htstrategy(bp)
 }
 
 htustart(mi)
 }
 
 htustart(mi)
-       register struct mba_info *mi;
+       register struct mba_device *mi;
 {
        register struct htdevice *htaddr =
            (struct htdevice *)mi->mi_drv;
        register struct buf *bp = mi->mi_tab.b_actf;
 {
        register struct htdevice *htaddr =
            (struct htdevice *)mi->mi_drv;
        register struct buf *bp = mi->mi_tab.b_actf;
-       int unit = HTUNIT(bp->b_dev);
+       int unit = TUUNIT(bp->b_dev);
        register struct ht_softc *sc = &ht_softc[unit];
        daddr_t blkno;
 
        register struct ht_softc *sc = &ht_softc[unit];
        daddr_t blkno;
 
@@ -246,7 +267,7 @@ htustart(mi)
  */
 /*ARGSUSED*/
 htdtint(mi, mbasr)
  */
 /*ARGSUSED*/
 htdtint(mi, mbasr)
-       register struct mba_info *mi;
+       register struct mba_device *mi;
        int mbasr;
 {
        register struct htdevice *htaddr = (struct htdevice *)mi->mi_drv;
        int mbasr;
 {
        register struct htdevice *htaddr = (struct htdevice *)mi->mi_drv;
@@ -254,7 +275,7 @@ htdtint(mi, mbasr)
        register struct ht_softc *sc;
        int ds, er, mbs;
 
        register struct ht_softc *sc;
        int ds, er, mbs;
 
-       sc = &ht_softc[HTUNIT(bp->b_dev)];
+       sc = &ht_softc[TUUNIT(bp->b_dev)];
        ds = sc->sc_dsreg = MASKREG(htaddr->htds);
        er = sc->sc_erreg = MASKREG(htaddr->hter);
        sc->sc_resid = MASKREG(htaddr->htfc);
        ds = sc->sc_dsreg = MASKREG(htaddr->htds);
        er = sc->sc_erreg = MASKREG(htaddr->hter);
        sc->sc_resid = MASKREG(htaddr->htfc);
@@ -277,8 +298,8 @@ htdtint(mi, mbasr)
                    er && ++mi->mi_tab.b_errcnt >= 7) {
                        if ((ds & HTDS_MOL) == 0 && sc->sc_openf > 0)
                                sc->sc_openf = -1;
                    er && ++mi->mi_tab.b_errcnt >= 7) {
                        if ((ds & HTDS_MOL) == 0 && sc->sc_openf > 0)
                                sc->sc_openf = -1;
-                       printf("ht%d: hard error bn%d mbasr=%b er=%b\n",
-                           HTUNIT(bp->b_dev), bp->b_blkno,
+                       printf("tu%d: hard error bn%d mbasr=%b er=%b\n",
+                           TUUNIT(bp->b_dev), bp->b_blkno,
                            mbasr, mbasr_bits,
                            MASKREG(htaddr->hter), HTER_BITS);
                        bp->b_flags |= B_ERROR;
                            mbasr, mbasr_bits,
                            MASKREG(htaddr->hter), HTER_BITS);
                        bp->b_flags |= B_ERROR;
@@ -301,14 +322,16 @@ htdtint(mi, mbasr)
  * non-data-transfer interrupt
  */
 htndtint(mi)
  * non-data-transfer interrupt
  */
 htndtint(mi)
-       register struct mba_info *mi;
+       register struct mba_device *mi;
 {
        register struct htdevice *htaddr = (struct htdevice *)mi->mi_drv;
        register struct buf *bp = mi->mi_tab.b_actf;
        register struct ht_softc *sc;
        int er, ds, fc;
 
 {
        register struct htdevice *htaddr = (struct htdevice *)mi->mi_drv;
        register struct buf *bp = mi->mi_tab.b_actf;
        register struct ht_softc *sc;
        int er, ds, fc;
 
-       sc = &ht_softc[HTUNIT(bp->b_dev)];
+       if (bp == 0)
+               return (MBN_SKIP);
+       sc = &ht_softc[TUUNIT(bp->b_dev)];
        ds = sc->sc_dsreg = MASKREG(htaddr->htds);
        er = sc->sc_erreg = MASKREG(htaddr->hter);
        fc = sc->sc_resid = MASKREG(htaddr->htfc);
        ds = sc->sc_dsreg = MASKREG(htaddr->htds);
        er = sc->sc_erreg = MASKREG(htaddr->hter);
        fc = sc->sc_resid = MASKREG(htaddr->htfc);
@@ -316,7 +339,11 @@ htndtint(mi)
                htaddr->htcs1 = HT_DCLR|HT_GO;
                mbclrattn(mi);
        }
                htaddr->htcs1 = HT_DCLR|HT_GO;
                mbclrattn(mi);
        }
-       if (bp == &chtbuf[HTUNIT(bp->b_dev)]) {
+       if (sc->sc_flags&H_REWIND) {
+               sc->sc_flags &= ~H_REWIND;
+               return (MBN_CONT);
+       }
+       if (bp == &chtbuf[TUUNIT(bp->b_dev)]) {
                if (bp->b_command == HT_REWOFFL)
                        /* offline is on purpose; don't do anything special */
                        ds |= HTDS_MOL; 
                if (bp->b_command == HT_REWOFFL)
                        /* offline is on purpose; don't do anything special */
                        ds |= HTDS_MOL; 
@@ -331,13 +358,13 @@ htndtint(mi)
        if ((ds & (HTDS_ERR|HTDS_MOL)) != HTDS_MOL) {
                if ((ds & HTDS_MOL) == 0 && sc->sc_openf > 0)
                        sc->sc_openf = -1;
        if ((ds & (HTDS_ERR|HTDS_MOL)) != HTDS_MOL) {
                if ((ds & HTDS_MOL) == 0 && sc->sc_openf > 0)
                        sc->sc_openf = -1;
-               printf("ht%d: hard error bn%d er=%b ds=%b\n",
-                   HTUNIT(bp->b_dev), bp->b_blkno,
+               printf("tu%d: hard error bn%d er=%b ds=%b\n",
+                   TUUNIT(bp->b_dev), bp->b_blkno,
                    sc->sc_erreg, HTER_BITS, sc->sc_dsreg, HTDS_BITS);
                bp->b_flags |= B_ERROR;
                return (MBN_DONE);
        }
                    sc->sc_erreg, HTER_BITS, sc->sc_dsreg, HTDS_BITS);
                bp->b_flags |= B_ERROR;
                return (MBN_DONE);
        }
-       if (bp == &chtbuf[HTUNIT(bp->b_dev)]) {
+       if (bp == &chtbuf[TUUNIT(bp->b_dev)]) {
                if (sc->sc_flags & H_REWIND)
                        return (ds & HTDS_BOT ? MBN_DONE : MBN_RETRY);
                bp->b_resid = -sc->sc_resid;
                if (sc->sc_flags & H_REWIND)
                        return (ds & HTDS_BOT ? MBN_DONE : MBN_RETRY);
                bp->b_resid = -sc->sc_resid;
@@ -471,7 +498,7 @@ htioctl(dev, cmd, addr, flag)
 
 htdump()
 {
 
 htdump()
 {
-       register struct mba_info *mi;
+       register struct mba_device *mi;
        register struct mba_regs *mp;
        register struct htdevice *htaddr;
        int blk, num;
        register struct mba_regs *mp;
        register struct htdevice *htaddr;
        int blk, num;
@@ -482,7 +509,7 @@ htdump()
 #define        phys(a,b)               ((b)((int)(a)&0x7fffffff))
        if (htinfo[0] == 0)
                return (ENXIO);
 #define        phys(a,b)               ((b)((int)(a)&0x7fffffff))
        if (htinfo[0] == 0)
                return (ENXIO);
-       mi = phys(htinfo[0], struct mba_info *);
+       mi = phys(htinfo[0], struct mba_device *);
        mp = phys(mi->mi_hd, struct mba_hd *)->mh_physmba;
 #if VAX780
        if (cpu == VAX780)
        mp = phys(mi->mi_hd, struct mba_hd *)->mh_physmba;
 #if VAX780
        if (cpu == VAX780)
index 5f6b636..a43e033 100644 (file)
@@ -1,4 +1,4 @@
-/*     mba.c   4.15    81/03/06        */
+/*     mba.c   4.16    81/03/07        */
 
 #include "mba.h"
 #if NMBA > 0
 
 #include "mba.h"
 #if NMBA > 0
 #include "../h/proc.h"
 #include "../h/map.h"
 #include "../h/pte.h"
 #include "../h/proc.h"
 #include "../h/map.h"
 #include "../h/pte.h"
-#include "../h/mba.h"
+#include "../h/mbareg.h"
+#include "../h/mbavar.h"
 #include "../h/mtpr.h"
 #include "../h/vm.h"
 
 char   mbasr_bits[] = MBASR_BITS;
 /*
  * Start activity on a massbus device.
 #include "../h/mtpr.h"
 #include "../h/vm.h"
 
 char   mbasr_bits[] = MBASR_BITS;
 /*
  * Start activity on a massbus device.
- * We are given the device's mba_info structure and activate
+ * We are given the device's mba_device structure and activate
  * the device via the unit start routine.  The unit start
  * routine may indicate that it is finished (e.g. if the operation
  * was a ``sense'' on a tape drive), that the (multi-ported) unit
  * the device via the unit start routine.  The unit start
  * routine may indicate that it is finished (e.g. if the operation
  * was a ``sense'' on a tape drive), that the (multi-ported) unit
@@ -32,7 +33,7 @@ char  mbasr_bits[] = MBASR_BITS;
  * set up a data transfer operation and we should start the massbus adaptor.
  */
 mbustart(mi)
  * set up a data transfer operation and we should start the massbus adaptor.
  */
 mbustart(mi)
-       register struct mba_info *mi;
+       register struct mba_device *mi;
 {
        register struct buf *bp;        /* i/o operation at head of queue */
        register struct mba_hd *mhp;    /* header for mba device is on */
 {
        register struct buf *bp;        /* i/o operation at head of queue */
        register struct mba_hd *mhp;    /* header for mba device is on */
@@ -59,7 +60,7 @@ loop:
 
        case MBU_DODATA:        /* all ready to do data transfer */
                /*
 
        case MBU_DODATA:        /* all ready to do data transfer */
                /*
-                * Queue the device mba_info structure on the massbus
+                * Queue the device mba_device structure on the massbus
                 * mba_hd structure for processing as soon as the
                 * data path is available.
                 */
                 * mba_hd structure for processing as soon as the
                 * data path is available.
                 */
@@ -113,7 +114,7 @@ loop:
 mbstart(mhp)
        register struct mba_hd *mhp;
 {
 mbstart(mhp)
        register struct mba_hd *mhp;
 {
-       register struct mba_info *mi;
+       register struct mba_device *mi;
        struct buf *bp;
        register struct mba_regs *mbp;
 
        struct buf *bp;
        register struct mba_regs *mbp;
 
@@ -133,7 +134,8 @@ loop:
         * we screwed up, and can't really do the operation.
         */
        if ((mi->mi_drv->mbd_ds & (MBD_DPR|MBD_MOL)) != (MBD_DPR|MBD_MOL)) {
         * we screwed up, and can't really do the operation.
         */
        if ((mi->mi_drv->mbd_ds & (MBD_DPR|MBD_MOL)) != (MBD_DPR|MBD_MOL)) {
-               printf("%c%d: not ready\n", mi->mi_name, dkunit(bp));
+               printf("%s%d: not ready\n", mi->mi_driver->md_dname,
+                   dkunit(bp));
                mi->mi_tab.b_actf = bp->av_forw;
                mi->mi_tab.b_errcnt = 0;
                mi->mi_tab.b_active = 0;
                mi->mi_tab.b_actf = bp->av_forw;
                mi->mi_tab.b_errcnt = 0;
                mi->mi_tab.b_active = 0;
@@ -177,7 +179,7 @@ mbintr(mbanum)
 {
        register struct mba_hd *mhp = &mba_hd[mbanum];
        register struct mba_regs *mbp = mhp->mh_mba;
 {
        register struct mba_hd *mhp = &mba_hd[mbanum];
        register struct mba_regs *mbp = mhp->mh_mba;
-       register struct mba_info *mi;
+       register struct mba_device *mi;
        register struct buf *bp;
        register int drive;
        int mbasr, as;
        register struct buf *bp;
        register int drive;
        int mbasr, as;
@@ -262,14 +264,14 @@ mbintr(mbanum)
        while (drive = ffs(as)) {
                drive--;                /* was 1 origin */
                as &= ~(1 << drive);
        while (drive = ffs(as)) {
                drive--;                /* was 1 origin */
                as &= ~(1 << drive);
+               mi = mhp->mh_mbip[drive];
+               if (mi == NULL)
+                       continue;
                /*
                /*
-                * driver has a handler for non-data transfer
+                * If driver has a handler for non-data transfer
                 * interrupts, give it a chance to tell us that
                 * the operation needs to be redone
                 */
                 * interrupts, give it a chance to tell us that
                 * the operation needs to be redone
                 */
-               mi = mhp->mh_mbip[drive];
-               if (mi == NULL)
-                       continue;
                if (mi->mi_driver->md_ndint) {
                        mi->mi_tab.b_active = 0;
                        switch ((*mi->mi_driver->md_ndint)(mi)) {
                if (mi->mi_driver->md_ndint) {
                        mi->mi_tab.b_active = 0;
                        switch ((*mi->mi_driver->md_ndint)(mi)) {
@@ -280,6 +282,7 @@ mbintr(mbanum)
                                 * completed i/o request's processing.
                                 */
                                mi->mi_tab.b_errcnt = 0;
                                 * completed i/o request's processing.
                                 */
                                mi->mi_tab.b_errcnt = 0;
+                               bp = mi->mi_tab.b_actf;
                                mi->mi_tab.b_actf = bp->av_forw;
                                iodone(bp);
                                /* fall into... */
                                mi->mi_tab.b_actf = bp->av_forw;
                                iodone(bp);
                                /* fall into... */
@@ -288,6 +291,21 @@ mbintr(mbanum)
                                        mbustart(mi);
                                break;
 
                                        mbustart(mi);
                                break;
 
+                       case MBN_SKIP:
+                               /*
+                                * Ignore (unsolicited interrupt, e.g.)
+                                */
+                               break;
+
+                       case MBN_CONT:
+                               /*
+                                * Continue with unit active, e.g.
+                                * between first and second rewind
+                                * interrupts.
+                                */
+                               mi->mi_tab.b_active = 1;
+                               break;
+
                        default:
                                panic("mbintr");
                        }
                        default:
                                panic("mbintr");
                        }
@@ -307,7 +325,7 @@ mbintr(mbanum)
  * Setup the mapping registers for a transfer.
  */
 mbasetup(mi)
  * Setup the mapping registers for a transfer.
  */
 mbasetup(mi)
-       register struct mba_info *mi;
+       register struct mba_device *mi;
 {
        register struct mba_regs *mbap = mi->mi_mba;
        struct buf *bp = mi->mi_tab.b_actf;
 {
        register struct mba_regs *mbap = mi->mi_mba;
        struct buf *bp = mi->mi_tab.b_actf;
index 087c72f..07cac8c 100644 (file)
@@ -1,4 +1,4 @@
-/*     rk.c    4.23    %G%     */
+/*     rk.c    4.24    %G%     */
 
 int    rkpip;
 int    rknosval;
 
 int    rkpip;
 int    rknosval;
@@ -24,7 +24,8 @@ int   rknosval;
 #include "../h/pte.h"
 #include "../h/map.h"
 #include "../h/vm.h"
 #include "../h/pte.h"
 #include "../h/map.h"
 #include "../h/vm.h"
-#include "../h/uba.h"
+#include "../h/ubareg.h"
+#include "../h/ubavar.h"
 #include "../h/dk.h"
 #include "../h/cpu.h"
 #include "../h/cmap.h"
 #include "../h/dk.h"
 #include "../h/cpu.h"
 #include "../h/cmap.h"
@@ -55,9 +56,9 @@ struct size {
 /* END OF STUFF WHICH SHOULD BE READ IN PER DISK */
 
 int    rkprobe(), rkslave(), rkattach(), rkdgo(), rkintr();
 /* END OF STUFF WHICH SHOULD BE READ IN PER DISK */
 
 int    rkprobe(), rkslave(), rkattach(), rkdgo(), rkintr();
-struct uba_minfo *rkminfo[NHK];
-struct uba_dinfo *rkdinfo[NRK];
-struct uba_dinfo *rkip[NHK][4];
+struct uba_ctlr *rkminfo[NHK];
+struct uba_device *rkdinfo[NRK];
+struct uba_device *rkip[NHK][4];
 
 u_short        rkstd[] = { 0777440, 0 };
 struct uba_driver hkdriver =
 
 u_short        rkstd[] = { 0777440, 0 };
 struct uba_driver hkdriver =
@@ -103,7 +104,7 @@ rkprobe(reg)
 }
 
 rkslave(ui, reg)
 }
 
 rkslave(ui, reg)
-       struct uba_dinfo *ui;
+       struct uba_device *ui;
        caddr_t reg;
 {
        register struct rkdevice *rkaddr = (struct rkdevice *)reg;
        caddr_t reg;
 {
        register struct rkdevice *rkaddr = (struct rkdevice *)reg;
@@ -121,7 +122,7 @@ rkslave(ui, reg)
 }
 
 rkattach(ui)
 }
 
 rkattach(ui)
-       register struct uba_dinfo *ui;
+       register struct uba_device *ui;
 {
 
        if (rkwstart == 0) {
 {
 
        if (rkwstart == 0) {
@@ -138,7 +139,7 @@ rkattach(ui)
 rkstrategy(bp)
        register struct buf *bp;
 {
 rkstrategy(bp)
        register struct buf *bp;
 {
-       register struct uba_dinfo *ui;
+       register struct uba_device *ui;
        register struct rkst *st;
        register int unit;
        register struct buf *dp;
        register struct rkst *st;
        register int unit;
        register struct buf *dp;
@@ -176,10 +177,10 @@ bad:
 }
 
 rkustart(ui)
 }
 
 rkustart(ui)
-       register struct uba_dinfo *ui;
+       register struct uba_device *ui;
 {
        register struct buf *bp, *dp;
 {
        register struct buf *bp, *dp;
-       register struct uba_minfo *um;
+       register struct uba_ctlr *um;
        register struct rkdevice *rkaddr;
        register struct rkst *st;
        daddr_t bn;
        register struct rkdevice *rkaddr;
        register struct rkst *st;
        daddr_t bn;
@@ -243,10 +244,10 @@ out:
 }
 
 rkstart(um)
 }
 
 rkstart(um)
-       register struct uba_minfo *um;
+       register struct uba_ctlr *um;
 {
        register struct buf *bp, *dp;
 {
        register struct buf *bp, *dp;
-       register struct uba_dinfo *ui;
+       register struct uba_device *ui;
        register struct rkdevice *rkaddr;
        struct rkst *st;
        daddr_t bn;
        register struct rkdevice *rkaddr;
        struct rkst *st;
        daddr_t bn;
@@ -313,7 +314,7 @@ nosval:
 }
 
 rkdgo(um)
 }
 
 rkdgo(um)
-       register struct uba_minfo *um;
+       register struct uba_ctlr *um;
 {
        register struct rkdevice *rkaddr = (struct rkdevice *)um->um_addr;
 
 {
        register struct rkdevice *rkaddr = (struct rkdevice *)um->um_addr;
 
@@ -324,8 +325,8 @@ rkdgo(um)
 rkintr(rk11)
        int rk11;
 {
 rkintr(rk11)
        int rk11;
 {
-       register struct uba_minfo *um = rkminfo[rk11];
-       register struct uba_dinfo *ui;
+       register struct uba_ctlr *um = rkminfo[rk11];
+       register struct uba_device *ui;
        register struct rkdevice *rkaddr = (struct rkdevice *)um->um_addr;
        register struct buf *bp, *dp;
        int unit;
        register struct rkdevice *rkaddr = (struct rkdevice *)um->um_addr;
        register struct buf *bp, *dp;
        int unit;
@@ -423,9 +424,18 @@ retry:
                as &= ~(1<<ui->ui_slave);
        }
        for (unit = 0; as; as >>= 1, unit++)
                as &= ~(1<<ui->ui_slave);
        }
        for (unit = 0; as; as >>= 1, unit++)
-               if (as & 1)
-                       if (rkustart(rkip[rk11][unit]))
-                               needie = 0;
+               if (as & 1) {
+                       ui = rkip[rk11][unit];
+                       if (ui) {
+                               if (rkustart(rkip[rk11][unit]))
+                                       needie = 0;
+                       } else {
+                               rkaddr->rkcs1 = RK_CERR|RK_CDT;
+                               rkaddr->rkcs2 = unit;
+                               rkaddr->rkcs1 = RK_CDT|RK_DCLR|RK_GO;
+                               rkwait(rkaddr);
+                       }
+               }
        if (um->um_tab.b_actf && um->um_tab.b_active == 0)
                if (rkstart(um))
                        needie = 0;
        if (um->um_tab.b_actf && um->um_tab.b_active == 0)
                if (rkstart(um))
                        needie = 0;
@@ -464,11 +474,11 @@ rkwrite(dev)
 }
 
 rkecc(ui)
 }
 
 rkecc(ui)
-       register struct uba_dinfo *ui;
+       register struct uba_device *ui;
 {
        register struct rkdevice *rk = (struct rkdevice *)ui->ui_addr;
        register struct buf *bp = rkutab[ui->ui_unit].b_actf;
 {
        register struct rkdevice *rk = (struct rkdevice *)ui->ui_addr;
        register struct buf *bp = rkutab[ui->ui_unit].b_actf;
-       register struct uba_minfo *um = ui->ui_mi;
+       register struct uba_ctlr *um = ui->ui_mi;
        register struct rkst *st;
        struct uba_regs *ubp = ui->ui_hd->uh_uba;
        register int i;
        register struct rkst *st;
        struct uba_regs *ubp = ui->ui_hd->uh_uba;
        register int i;
@@ -527,8 +537,8 @@ rkecc(ui)
 rkreset(uban)
        int uban;
 {
 rkreset(uban)
        int uban;
 {
-       register struct uba_minfo *um;
-       register struct uba_dinfo *ui;
+       register struct uba_ctlr *um;
+       register struct uba_device *ui;
        register rk11, unit;
 
        for (rk11 = 0; rk11 < NHK; rk11++) {
        register rk11, unit;
 
        for (rk11 = 0; rk11 < NHK; rk11++) {
@@ -557,7 +567,7 @@ rkreset(uban)
 
 rkwatch()
 {
 
 rkwatch()
 {
-       register struct uba_minfo *um;
+       register struct uba_ctlr *um;
        register rk11, unit;
        register struct rk_softc *sc;
 
        register rk11, unit;
        register struct rk_softc *sc;
 
@@ -595,7 +605,7 @@ rkdump(dev)
        int num, blk, unit;
        struct size *sizes;
        register struct uba_regs *uba;
        int num, blk, unit;
        struct size *sizes;
        register struct uba_regs *uba;
-       register struct uba_dinfo *ui;
+       register struct uba_device *ui;
        register short *rp;
        struct rkst *st;
 
        register short *rp;
        struct rkst *st;
 
@@ -603,7 +613,7 @@ rkdump(dev)
        if (unit >= NRK)
                return (ENXIO);
 #define        phys(cast, addr) ((cast)((int)addr & 0x7fffffff))
        if (unit >= NRK)
                return (ENXIO);
 #define        phys(cast, addr) ((cast)((int)addr & 0x7fffffff))
-       ui = phys(struct uba_dinfo *, rkdinfo[unit]);
+       ui = phys(struct uba_device *, rkdinfo[unit]);
        if (ui->ui_alive == 0)
                return (ENXIO);
        uba = phys(struct uba_hd *, ui->ui_hd)->uh_physuba;
        if (ui->ui_alive == 0)
                return (ENXIO);
        uba = phys(struct uba_hd *, ui->ui_hd)->uh_physuba;
@@ -635,7 +645,7 @@ rkdump(dev)
                blk = num > DBSIZE ? DBSIZE : num;
                io = uba->uba_map;
                for (i = 0; i < blk; i++)
                blk = num > DBSIZE ? DBSIZE : num;
                io = uba->uba_map;
                for (i = 0; i < blk; i++)
-                       *(int *)io++ = (btop(start)+i) | (1<<21) | UBA_MRV;
+                       *(int *)io++ = (btop(start)+i) | (1<<21) | UBAMR_MRV;
                *(int *)io = 0;
                bn = dumplo + btop(start);
                cn = bn/st->nspc + sizes[minor(dev)&07].cyloff;
                *(int *)io = 0;
                bn = dumplo + btop(start);
                cn = bn/st->nspc + sizes[minor(dev)&07].cyloff;
index cd5e51a..9ef5f44 100644 (file)
@@ -1,4 +1,4 @@
-/*     tm.c    4.22    %G%     */
+/*     tm.c    4.23    %G%     */
 
 #include "te.h"
 #if NTM > 0
 
 #include "te.h"
 #if NTM > 0
@@ -21,7 +21,8 @@ int   tmgapsdcnt;             /* DEBUG */
 #include "../h/map.h"
 #include "../h/pte.h"
 #include "../h/vm.h"
 #include "../h/map.h"
 #include "../h/pte.h"
 #include "../h/vm.h"
-#include "../h/uba.h"
+#include "../h/ubareg.h"
+#include "../h/ubavar.h"
 #include "../h/mtio.h"
 #include "../h/ioctl.h"
 #include "../h/cmap.h"
 #include "../h/mtio.h"
 #include "../h/ioctl.h"
 #include "../h/cmap.h"
@@ -33,11 +34,11 @@ struct      buf     ctmbuf[NTE];
 struct buf     rtmbuf[NTE];
 
 int    tmprobe(), tmslave(), tmattach(), tmdgo(), tmintr();
 struct buf     rtmbuf[NTE];
 
 int    tmprobe(), tmslave(), tmattach(), tmdgo(), tmintr();
-struct uba_minfo *tmminfo[NTM];
-struct uba_dinfo *tmdinfo[NTE];
+struct uba_ctlr *tmminfo[NTM];
+struct uba_device *tmdinfo[NTE];
 struct buf tmutab[NTE];
 #ifdef notyet
 struct buf tmutab[NTE];
 #ifdef notyet
-struct uba_dinfo *tmip[NTM][4];
+struct uba_device *tmip[NTM][4];
 #endif
 u_short        tmstd[] = { 0772520, 0 };
 struct uba_driver tmdriver =
 #endif
 u_short        tmstd[] = { 0772520, 0 };
 struct uba_driver tmdriver =
@@ -118,7 +119,7 @@ tmprobe(reg)
  */
 /*ARGSUSED*/
 tmslave(ui, reg)
  */
 /*ARGSUSED*/
 tmslave(ui, reg)
-       struct uba_dinfo *ui;
+       struct uba_device *ui;
        caddr_t reg;
 {
 
        caddr_t reg;
 {
 
@@ -130,7 +131,7 @@ tmslave(ui, reg)
  */
 /*ARGSUSED*/
 tmattach(ui)
  */
 /*ARGSUSED*/
 tmattach(ui)
-       struct uba_dinfo *ui;
+       struct uba_device *ui;
 {
 
 #ifdef notyet
 {
 
 #ifdef notyet
@@ -149,7 +150,7 @@ tmopen(dev, flag)
        int flag;
 {
        register int unit;
        int flag;
 {
        register int unit;
-       register struct uba_dinfo *ui;
+       register struct uba_device *ui;
        register struct tm_softc *sc;
 
        unit = TMUNIT(dev);
        register struct tm_softc *sc;
 
        unit = TMUNIT(dev);
@@ -231,7 +232,7 @@ tmstrategy(bp)
        register struct buf *bp;
 {
        int unit = TMUNIT(bp->b_dev);
        register struct buf *bp;
 {
        int unit = TMUNIT(bp->b_dev);
-       register struct uba_minfo *um;
+       register struct uba_ctlr *um;
        register struct buf *dp;
        register struct tm_softc *sc = &tm_softc[unit];
 
        register struct buf *dp;
        register struct tm_softc *sc = &tm_softc[unit];
 
@@ -270,12 +271,12 @@ tmstrategy(bp)
  * Start activity on a tm controller.
  */
 tmstart(um)
  * Start activity on a tm controller.
  */
 tmstart(um)
-       register struct uba_minfo *um;
+       register struct uba_ctlr *um;
 {
        register struct buf *bp, *dp;
        register struct device *addr = (struct device *)um->um_addr;
        register struct tm_softc *sc;
 {
        register struct buf *bp, *dp;
        register struct device *addr = (struct device *)um->um_addr;
        register struct tm_softc *sc;
-       register struct uba_dinfo *ui;
+       register struct uba_device *ui;
        int unit, cmd;
        daddr_t blkno;
 
        int unit, cmd;
        daddr_t blkno;
 
@@ -419,7 +420,7 @@ next:
  * allocated to us; start the device.
  */
 tmdgo(um)
  * allocated to us; start the device.
  */
 tmdgo(um)
-       register struct uba_minfo *um;
+       register struct uba_ctlr *um;
 {
        register struct device *addr = (struct device *)um->um_addr;
 
 {
        register struct device *addr = (struct device *)um->um_addr;
 
@@ -436,7 +437,7 @@ tmintr(tm11)
 {
        struct buf *dp;
        register struct buf *bp;
 {
        struct buf *dp;
        register struct buf *bp;
-       register struct uba_minfo *um = tmminfo[tm11];
+       register struct uba_ctlr *um = tmminfo[tm11];
        register struct device *addr = (struct device *)tmdinfo[tm11]->ui_addr;
        register struct tm_softc *sc;
        int unit;
        register struct device *addr = (struct device *)tmdinfo[tm11]->ui_addr;
        register struct tm_softc *sc;
        int unit;
@@ -623,6 +624,8 @@ tmread(dev)
 {
 
        tmphys(dev);
 {
 
        tmphys(dev);
+       if (u.u_error)
+               return;
        physio(tmstrategy, &rtmbuf[TMUNIT(dev)], dev, B_READ, minphys);
 }
 
        physio(tmstrategy, &rtmbuf[TMUNIT(dev)], dev, B_READ, minphys);
 }
 
@@ -631,15 +634,23 @@ tmwrite(dev)
 {
 
        tmphys(dev);
 {
 
        tmphys(dev);
+       if (u.u_error)
+               return;
        physio(tmstrategy, &rtmbuf[TMUNIT(dev)], dev, B_WRITE, minphys);
 }
 
 tmphys(dev)
        dev_t dev;
 {
        physio(tmstrategy, &rtmbuf[TMUNIT(dev)], dev, B_WRITE, minphys);
 }
 
 tmphys(dev)
        dev_t dev;
 {
+       register int unit = TMUNIT(dev);
        register daddr_t a;
        register daddr_t a;
-       register struct tm_softc *sc = &tm_softc[TMUNIT(dev)];
+       register struct tm_softc *sc;
 
 
+       if (unit >= NTM) {
+               u.u_error = ENXIO;
+               return;
+       }
+       sc = &tm_softc[TMUNIT(dev)];
        a = dbtofsb(u.u_offset >> 9);
        sc->sc_blkno = a;
        sc->sc_nxrec = a + 1;
        a = dbtofsb(u.u_offset >> 9);
        sc->sc_blkno = a;
        sc->sc_nxrec = a + 1;
@@ -648,9 +659,9 @@ tmphys(dev)
 tmreset(uban)
        int uban;
 {
 tmreset(uban)
        int uban;
 {
-       register struct uba_minfo *um;
+       register struct uba_ctlr *um;
        register tm11, unit;
        register tm11, unit;
-       register struct uba_dinfo *ui;
+       register struct uba_device *ui;
        register struct buf *dp;
 
        for (tm11 = 0; tm11 < NTM; tm11++) {
        register struct buf *dp;
 
        for (tm11 = 0; tm11 < NTM; tm11++) {
@@ -759,7 +770,7 @@ tmioctl(dev, cmd, addr, flag)
 
 tmdump()
 {
 
 tmdump()
 {
-       register struct uba_dinfo *ui;
+       register struct uba_device *ui;
        register struct uba_regs *up;
        register struct device *addr;
        int blk, num;
        register struct uba_regs *up;
        register struct device *addr;
        int blk, num;
@@ -770,7 +781,7 @@ tmdump()
 #define        phys(a,b)       ((b)((int)(a)&0x7fffffff))
        if (tmdinfo[0] == 0)
                return (ENXIO);
 #define        phys(a,b)       ((b)((int)(a)&0x7fffffff))
        if (tmdinfo[0] == 0)
                return (ENXIO);
-       ui = phys(tmdinfo[0], struct uba_dinfo *);
+       ui = phys(tmdinfo[0], struct uba_device *);
        up = phys(ui->ui_hd, struct uba_hd *)->uh_physuba;
 #if VAX780
        if (cpu == VAX_780)
        up = phys(ui->ui_hd, struct uba_hd *)->uh_physuba;
 #if VAX780
        if (cpu == VAX_780)
@@ -808,7 +819,7 @@ tmdwrite(dbuf, num, addr, up)
        io = up->uba_map;
        npf = num+1;
        while (--npf != 0)
        io = up->uba_map;
        npf = num+1;
        while (--npf != 0)
-                *(int *)io++ = (dbuf++ | (1<<UBA_DPSHIFT) | UBA_MRV);
+                *(int *)io++ = (dbuf++ | (1<<UBAMR_DPSHIFT) | UBAMR_MRV);
        *(int *)io = 0;
        addr->tmbc = -(num*NBPG);
        addr->tmba = 0;
        *(int *)io = 0;
        addr->tmbc = -(num*NBPG);
        addr->tmba = 0;
index 4e88914..bdc6524 100644 (file)
@@ -1,4 +1,4 @@
-/*     up.c    4.29    81/03/06        */
+/*     up.c    4.30    81/03/07        */
 
 #include "up.h"
 #if NSC > 0
 
 #include "up.h"
 #if NSC > 0
@@ -6,12 +6,11 @@
  * UNIBUS disk driver with overlapped seeks and ECC recovery.
  *
  * TODO:
  * UNIBUS disk driver with overlapped seeks and ECC recovery.
  *
  * TODO:
- *     Check out handling of spun-down drives and write lock
  *     Add reading of bad sector information and disk layout from sector 1
  *     Add bad sector forwarding code
  *     Check multiple drive handling
  *     Add reading of bad sector information and disk layout from sector 1
  *     Add bad sector forwarding code
  *     Check multiple drive handling
- *     Check dump code
  *     Check unibus reset code
  *     Check unibus reset code
+ *     Check that offset recovery code, etc works
  */
 #define        DELAY(N)                { register int d; d = N; while (--d > 0); }
 
  */
 #define        DELAY(N)                { register int d; d = N; while (--d > 0); }
 
@@ -28,7 +27,8 @@
 #include "../h/pte.h"
 #include "../h/mtpr.h"
 #include "../h/vm.h"
 #include "../h/pte.h"
 #include "../h/mtpr.h"
 #include "../h/vm.h"
-#include "../h/uba.h"
+#include "../h/ubavar.h"
+#include "../h/ubareg.h"
 #include "../h/cmap.h"
 
 #include "../h/upreg.h"
 #include "../h/cmap.h"
 
 #include "../h/upreg.h"
@@ -73,9 +73,9 @@ int   upSDIST = _upSDIST;
 int    upRDIST = _upRDIST;
 
 int    upprobe(), upslave(), upattach(), updgo(), upintr();
 int    upRDIST = _upRDIST;
 
 int    upprobe(), upslave(), upattach(), updgo(), upintr();
-struct uba_minfo *upminfo[NSC];
-struct uba_dinfo *updinfo[NUP];
-struct uba_dinfo *upip[NSC][4];
+struct uba_ctlr *upminfo[NSC];
+struct uba_device *updinfo[NUP];
+struct uba_device *upip[NSC][4];
 
 u_short        upstd[] = { 0776700, 0774400, 0776300, 0 };
 struct uba_driver scdriver =
 
 u_short        upstd[] = { 0776700, 0774400, 0776300, 0 };
 struct uba_driver scdriver =
@@ -127,7 +127,7 @@ upprobe(reg)
 }
 
 upslave(ui, reg)
 }
 
 upslave(ui, reg)
-       struct uba_dinfo *ui;
+       struct uba_device *ui;
        caddr_t reg;
 {
        register struct updevice *upaddr = (struct updevice *)reg;
        caddr_t reg;
 {
        register struct updevice *upaddr = (struct updevice *)reg;
@@ -142,7 +142,7 @@ upslave(ui, reg)
 }
 
 upattach(ui)
 }
 
 upattach(ui)
-       register struct uba_dinfo *ui;
+       register struct uba_device *ui;
 {
 #ifdef notdef
        register struct updevice *upaddr;
 {
 #ifdef notdef
        register struct updevice *upaddr;
@@ -170,7 +170,7 @@ upattach(ui)
 upstrategy(bp)
        register struct buf *bp;
 {
 upstrategy(bp)
        register struct buf *bp;
 {
-       register struct uba_dinfo *ui;
+       register struct uba_device *ui;
        register struct upst *st;
        register int unit;
        register struct buf *dp;
        register struct upst *st;
        register int unit;
        register struct buf *dp;
@@ -220,10 +220,10 @@ bad:
  * positioning forever without transferrring.)
  */
 upustart(ui)
  * positioning forever without transferrring.)
  */
 upustart(ui)
-       register struct uba_dinfo *ui;
+       register struct uba_device *ui;
 {
        register struct buf *bp, *dp;
 {
        register struct buf *bp, *dp;
-       register struct uba_minfo *um = ui->ui_mi;
+       register struct uba_ctlr *um;
        register struct updevice *upaddr;
        register struct upst *st;
        daddr_t bn;
        register struct updevice *upaddr;
        register struct upst *st;
        daddr_t bn;
@@ -238,6 +238,7 @@ upustart(ui)
 
        if (ui == 0)
                return (0);
 
        if (ui == 0)
                return (0);
+       um = ui->ui_mi;
        dk_busy &= ~(1<<ui->ui_dk);
        dp = &uputab[ui->ui_unit];
        if ((bp = dp->b_actf) == NULL)
        dk_busy &= ~(1<<ui->ui_dk);
        dp = &uputab[ui->ui_unit];
        if ((bp = dp->b_actf) == NULL)
@@ -343,10 +344,10 @@ out:
  * Start up a transfer on a drive.
  */
 upstart(um)
  * Start up a transfer on a drive.
  */
 upstart(um)
-       register struct uba_minfo *um;
+       register struct uba_ctlr *um;
 {
        register struct buf *bp, *dp;
 {
        register struct buf *bp, *dp;
-       register struct uba_dinfo *ui;
+       register struct uba_device *ui;
        register struct updevice *upaddr;
        struct upst *st;
        daddr_t bn;
        register struct updevice *upaddr;
        struct upst *st;
        daddr_t bn;
@@ -436,7 +437,7 @@ loop:
  * Now all ready to go, stuff the registers.
  */
 updgo(um)
  * Now all ready to go, stuff the registers.
  */
 updgo(um)
-       struct uba_minfo *um;
+       struct uba_ctlr *um;
 {
        register struct updevice *upaddr = (struct updevice *)um->um_addr;
 
 {
        register struct updevice *upaddr = (struct updevice *)um->um_addr;
 
@@ -451,8 +452,8 @@ upintr(sc21)
        register sc21;
 {
        register struct buf *bp, *dp;
        register sc21;
 {
        register struct buf *bp, *dp;
-       register struct uba_minfo *um = upminfo[sc21];
-       register struct uba_dinfo *ui;
+       register struct uba_ctlr *um = upminfo[sc21];
+       register struct uba_device *ui;
        register struct updevice *upaddr = (struct updevice *)um->um_addr;
        register unit;
        struct up_softc *sc = &up_softc[um->um_ctlr];
        register struct updevice *upaddr = (struct updevice *)um->um_addr;
        register unit;
        struct up_softc *sc = &up_softc[um->um_ctlr];
@@ -473,7 +474,7 @@ upintr(sc21)
        }
        /*
         * Get device and block structures, and a pointer
        }
        /*
         * Get device and block structures, and a pointer
-        * to the uba_dinfo for the drive.  Select the drive.
+        * to the uba_device for the drive.  Select the drive.
         */
        dp = um->um_tab.b_actf;
        bp = dp->b_actf;
         */
        dp = um->um_tab.b_actf;
        bp = dp->b_actf;
@@ -633,11 +634,11 @@ upwrite(dev)
  * across a page boundary.
  */
 upecc(ui)
  * across a page boundary.
  */
 upecc(ui)
-       register struct uba_dinfo *ui;
+       register struct uba_device *ui;
 {
        register struct updevice *up = (struct updevice *)ui->ui_addr;
        register struct buf *bp = uputab[ui->ui_unit].b_actf;
 {
        register struct updevice *up = (struct updevice *)ui->ui_addr;
        register struct buf *bp = uputab[ui->ui_unit].b_actf;
-       register struct uba_minfo *um = ui->ui_mi;
+       register struct uba_ctlr *um = ui->ui_mi;
        register struct upst *st;
        struct uba_regs *ubp = ui->ui_hd->uh_uba;
        register int i;
        register struct upst *st;
        struct uba_regs *ubp = ui->ui_hd->uh_uba;
        register int i;
@@ -654,7 +655,7 @@ upecc(ui)
        npf = btop((up->upwc * sizeof(short)) + bp->b_bcount) - 1;
        reg = btop(um->um_ubinfo&0x3ffff) + npf;
        o = (int)bp->b_un.b_addr & PGOFSET;
        npf = btop((up->upwc * sizeof(short)) + bp->b_bcount) - 1;
        reg = btop(um->um_ubinfo&0x3ffff) + npf;
        o = (int)bp->b_un.b_addr & PGOFSET;
-       printf("up%d%c: soft ecc bn%d\n", dkunit(bp),
+       printf("up%d%c: soft ecc sn%d\n", dkunit(bp),
            'a'+(minor(bp->b_dev)&07), bp->b_blkno + npf);
        mask = up->upec2;
        /*
            'a'+(minor(bp->b_dev)&07), bp->b_blkno + npf);
        mask = up->upec2;
        /*
@@ -723,8 +724,8 @@ upecc(ui)
 upreset(uban)
        int uban;
 {
 upreset(uban)
        int uban;
 {
-       register struct uba_minfo *um;
-       register struct uba_dinfo *ui;
+       register struct uba_ctlr *um;
+       register struct uba_device *ui;
        register sc21, unit;
 
        for (sc21 = 0; sc21 < NSC; sc21++) {
        register sc21, unit;
 
        for (sc21 = 0; sc21 < NSC; sc21++) {
@@ -760,7 +761,7 @@ upreset(uban)
  */
 upwatch()
 {
  */
 upwatch()
 {
-       register struct uba_minfo *um;
+       register struct uba_ctlr *um;
        register sc21, unit;
        register struct up_softc *sc;
 
        register sc21, unit;
        register struct up_softc *sc;
 
@@ -798,7 +799,7 @@ updump(dev)
        int num, blk, unit, i;
        struct size *sizes;
        register struct uba_regs *uba;
        int num, blk, unit, i;
        struct size *sizes;
        register struct uba_regs *uba;
-       register struct uba_dinfo *ui;
+       register struct uba_device *ui;
        register short *rp;
        struct upst *st;
 
        register short *rp;
        struct upst *st;
 
@@ -806,20 +807,19 @@ updump(dev)
        if (unit >= NUP)
                return (ENXIO);
 #define        phys(cast, addr) ((cast)((int)addr & 0x7fffffff))
        if (unit >= NUP)
                return (ENXIO);
 #define        phys(cast, addr) ((cast)((int)addr & 0x7fffffff))
-       ui = phys(struct uba_dinfo *, updinfo[unit]);
+       ui = phys(struct uba_device *, updinfo[unit]);
        if (ui->ui_alive == 0)
                return (ENXIO);
        uba = phys(struct uba_hd *, ui->ui_hd)->uh_physuba;
        if (ui->ui_alive == 0)
                return (ENXIO);
        uba = phys(struct uba_hd *, ui->ui_hd)->uh_physuba;
-#if VAX780
-       if (cpu == VAX_780)
-               ubainit(uba);
-#endif
+       ubainit(uba);
        upaddr = (struct updevice *)ui->ui_physaddr;
        upaddr = (struct updevice *)ui->ui_physaddr;
-       if ((upaddr->upcs1&UP_DVA) == 0)
-               return (EFAULT);
+       DELAY(2000000);
        num = maxfree;
        start = 0;
        upaddr->upcs2 = unit;
        num = maxfree;
        start = 0;
        upaddr->upcs2 = unit;
+       DELAY(100);
+       if ((upaddr->upcs1&UP_DVA) == 0)
+               return (EFAULT);
        if ((upaddr->upds & UP_VV) == 0) {
                upaddr->upcs1 = UP_DCLR|UP_GO;
                upaddr->upcs1 = UP_PRESET|UP_GO;
        if ((upaddr->upds & UP_VV) == 0) {
                upaddr->upcs1 = UP_DCLR|UP_GO;
                upaddr->upcs1 = UP_PRESET|UP_GO;
@@ -840,7 +840,7 @@ updump(dev)
                blk = num > DBSIZE ? DBSIZE : num;
                io = uba->uba_map;
                for (i = 0; i < blk; i++)
                blk = num > DBSIZE ? DBSIZE : num;
                io = uba->uba_map;
                for (i = 0; i < blk; i++)
-                       *(int *)io++ = (btop(start)+i) | (1<<21) | UBA_MRV;
+                       *(int *)io++ = (btop(start)+i) | (1<<21) | UBAMR_MRV;
                *(int *)io = 0;
                bn = dumplo + btop(start);
                cn = bn/st->nspc + sizes[minor(dev)&07].cyloff;
                *(int *)io = 0;
                bn = dumplo + btop(start);
                cn = bn/st->nspc + sizes[minor(dev)&07].cyloff;