fixes from lucasfilm
authorBill Joy <wnj@ucbvax.Berkeley.EDU>
Mon, 29 Mar 1982 15:48:56 +0000 (07:48 -0800)
committerBill Joy <wnj@ucbvax.Berkeley.EDU>
Mon, 29 Mar 1982 15:48:56 +0000 (07:48 -0800)
SCCS-vsn: sys/vax/uba/up.c 4.44
SCCS-vsn: sys/vax/uba/rk.c 4.39
SCCS-vsn: sys/vax/uba/uba.c 4.41

usr/src/sys/vax/uba/rk.c
usr/src/sys/vax/uba/uba.c
usr/src/sys/vax/uba/up.c

index 8e7f221..6db2e20 100644 (file)
@@ -1,4 +1,4 @@
-/*     rk.c    4.38    82/01/17        */
+/*     rk.c    4.39    82/03/29        */
 
 #include "rk.h"
 #if NHK > 0
 
 #include "rk.h"
 #if NHK > 0
@@ -212,27 +212,23 @@ rkustart(ui)
        register struct buf *bp, *dp;
        register struct uba_ctlr *um;
        register struct rkdevice *rkaddr;
        register struct buf *bp, *dp;
        register struct uba_ctlr *um;
        register struct rkdevice *rkaddr;
-       int didie = 0;
 
        if (ui == 0)
 
        if (ui == 0)
-               return (0);
+               return;
        dk_busy &= ~(1<<ui->ui_dk);
        dp = &rkutab[ui->ui_unit];
        um = ui->ui_mi;
        rkaddr = (struct rkdevice *)um->um_addr;
        if (um->um_tab.b_active) {
                rk_softc[um->um_ctlr].sc_softas |= 1<<ui->ui_slave;
        dk_busy &= ~(1<<ui->ui_dk);
        dp = &rkutab[ui->ui_unit];
        um = ui->ui_mi;
        rkaddr = (struct rkdevice *)um->um_addr;
        if (um->um_tab.b_active) {
                rk_softc[um->um_ctlr].sc_softas |= 1<<ui->ui_slave;
-               return (0);
+               return;
        }
        }
+       if ((bp = dp->b_actf) == NULL)
+               return;
        rkaddr->rkcs1 = rktypes[ui->ui_type]|RK_CERR;
        rkaddr->rkcs2 = ui->ui_slave;
        rkaddr->rkcs1 = rktypes[ui->ui_type]|RK_DCLR|RK_GO;
        rkwait(rkaddr);
        rkaddr->rkcs1 = rktypes[ui->ui_type]|RK_CERR;
        rkaddr->rkcs2 = ui->ui_slave;
        rkaddr->rkcs1 = rktypes[ui->ui_type]|RK_DCLR|RK_GO;
        rkwait(rkaddr);
-       if ((bp = dp->b_actf) == NULL) {
-               rkaddr->rkcs1 = rktypes[ui->ui_type]|RK_DCLR|RK_GO;
-               rkwait(rkaddr);
-               return (0);
-       }
        if ((rkaddr->rkds & RKDS_VV) == 0 || ui->ui_flags == 0) {
                /* SHOULD WARN SYSTEM THAT THIS HAPPENED */
 #ifndef NOBADSECT
        if ((rkaddr->rkds & RKDS_VV) == 0 || ui->ui_flags == 0) {
                /* SHOULD WARN SYSTEM THAT THIS HAPPENED */
 #ifndef NOBADSECT
@@ -267,7 +263,6 @@ rkustart(ui)
        rkaddr->rkcyl = bp->b_cylin;
        rkcyl[ui->ui_unit] = bp->b_cylin;
        rkaddr->rkcs1 = rktypes[ui->ui_type]|RK_IE|RK_SEEK|RK_GO;
        rkaddr->rkcyl = bp->b_cylin;
        rkcyl[ui->ui_unit] = bp->b_cylin;
        rkaddr->rkcs1 = rktypes[ui->ui_type]|RK_IE|RK_SEEK|RK_GO;
-       didie = 1;
        if (ui->ui_dk >= 0) {
                dk_busy |= 1<<ui->ui_dk;
                dk_seek[ui->ui_dk]++;
        if (ui->ui_dk >= 0) {
                dk_busy |= 1<<ui->ui_dk;
                dk_seek[ui->ui_dk]++;
@@ -284,7 +279,7 @@ done:
                dp->b_active = 2;
        }
 out:
                dp->b_active = 2;
        }
 out:
-       return (didie);
+       return;
 }
 
 rkstart(um)
 }
 
 rkstart(um)
@@ -299,7 +294,7 @@ rkstart(um)
 
 loop:
        if ((dp = um->um_tab.b_actf) == NULL)
 
 loop:
        if ((dp = um->um_tab.b_actf) == NULL)
-               return (0);
+               return;
        if ((bp = dp->b_actf) == NULL) {
                um->um_tab.b_actf = dp->b_forw;
                goto loop;
        if ((bp = dp->b_actf) == NULL) {
                um->um_tab.b_actf = dp->b_forw;
                goto loop;
@@ -354,7 +349,6 @@ nosval:
                cmd = rktypes[ui->ui_type]|RK_IE|RK_WRITE|RK_GO;
        um->um_cmd = cmd;
        (void) ubago(ui);
                cmd = rktypes[ui->ui_type]|RK_IE|RK_WRITE|RK_GO;
        um->um_cmd = cmd;
        (void) ubago(ui);
-       return (1);
 }
 
 rkdgo(um)
 }
 
 rkdgo(um)
@@ -362,6 +356,7 @@ rkdgo(um)
 {
        register struct rkdevice *rkaddr = (struct rkdevice *)um->um_addr;
 
 {
        register struct rkdevice *rkaddr = (struct rkdevice *)um->um_addr;
 
+       um->um_tab.b_active++;  /* should now be 2 */
        rkaddr->rkba = um->um_ubinfo;
        rkaddr->rkcs1 = um->um_cmd|((um->um_ubinfo>>8)&0x300);
 }
        rkaddr->rkba = um->um_ubinfo;
        rkaddr->rkcs1 = um->um_cmd|((um->um_ubinfo>>8)&0x300);
 }
@@ -380,7 +375,7 @@ rkintr(rk11)
 
        sc->sc_wticks = 0;
        sc->sc_softas = 0;
 
        sc->sc_wticks = 0;
        sc->sc_softas = 0;
-       if (um->um_tab.b_active) {
+       if (um->um_tab.b_active == 2 || sc->sc_recal) {
                dp = um->um_tab.b_actf;
                bp = dp->b_actf;
                ui = rkdinfo[dkunit(bp)];
                dp = um->um_tab.b_actf;
                bp = dp->b_actf;
                ui = rkdinfo[dkunit(bp)];
@@ -482,8 +477,7 @@ retry:
                        bp->b_resid = -rkaddr->rkwc * sizeof(short);
                        iodone(bp);
                        if (dp->b_actf)
                        bp->b_resid = -rkaddr->rkwc * sizeof(short);
                        iodone(bp);
                        if (dp->b_actf)
-                               if (rkustart(ui))
-                                       needie = 0;
+                               rkustart(ui);
                }
                as &= ~(1<<ui->ui_slave);
        }
                }
                as &= ~(1<<ui->ui_slave);
        }
@@ -491,8 +485,7 @@ retry:
                if (as & 1) {
                        ui = rkip[rk11][unit];
                        if (ui) {
                if (as & 1) {
                        ui = rkip[rk11][unit];
                        if (ui) {
-                               if (rkustart(rkip[rk11][unit]))
-                                       needie = 0;
+                               rkustart(rkip[rk11][unit]);
                        } else {
                                rkaddr->rkcs1 = RK_CCLR;
                                rkaddr->rkcs2 = unit;
                        } else {
                                rkaddr->rkcs1 = RK_CCLR;
                                rkaddr->rkcs2 = unit;
@@ -502,9 +495,8 @@ retry:
                        }
                }
        if (um->um_tab.b_actf && um->um_tab.b_active == 0)
                        }
                }
        if (um->um_tab.b_actf && um->um_tab.b_active == 0)
-               if (rkstart(um))
-                       needie = 0;
-       if (needie)
+               rkstart(um);
+       if (((needie = rkaddr->rkcs1) & RK_IE) == 0)
                rkaddr->rkcs1 = RK_IE;
 }
 
                rkaddr->rkcs1 = RK_IE;
 }
 
@@ -567,7 +559,7 @@ rkecc(ui, flag)
        cn += tn/st->ntrak;
        tn %= st->ntrak;
        ubapurge(um);
        cn += tn/st->ntrak;
        tn %= st->ntrak;
        ubapurge(um);
-       um->um_tab.b_active++;  /* Either complete or continuing... */
+       um->um_tab.b_active = 2;        /* Either complete or continuing... */
        switch (flag) {
        case ECC:
                {
        switch (flag) {
        case ECC:
                {
@@ -663,6 +655,7 @@ rkreset(uban)
                um->um_tab.b_active = 0;
                um->um_tab.b_actf = um->um_tab.b_actl = 0;
                rk_softc[um->um_ctlr].sc_recal = 0;
                um->um_tab.b_active = 0;
                um->um_tab.b_actf = um->um_tab.b_actl = 0;
                rk_softc[um->um_ctlr].sc_recal = 0;
+               rk_softc[um->um_ctlr].sc_wticks = 0;
                if (um->um_ubinfo) {
                        printf("<%d>", (um->um_ubinfo>>28)&0xf);
                        ubadone(um);
                if (um->um_ubinfo) {
                        printf("<%d>", (um->um_ubinfo>>28)&0xf);
                        ubadone(um);
index e80e5b8..1540929 100644 (file)
@@ -1,4 +1,4 @@
-/*     uba.c   4.40    82/03/14        */
+/*     uba.c   4.41    82/03/29        */
 
 #include "../h/param.h"
 #include "../h/systm.h"
 
 #include "../h/param.h"
 #include "../h/systm.h"
@@ -56,14 +56,12 @@ ubago(ui)
        if (ui->ui_dk >= 0) {
                unit = ui->ui_dk;
                dk_busy |= 1<<unit;
        if (ui->ui_dk >= 0) {
                unit = ui->ui_dk;
                dk_busy |= 1<<unit;
+               dk_xfer[unit]++;
+               dk_wds[unit] += um->um_tab.b_actf->b_actf->b_bcount>>6;
        }
        if (uh->uh_actf == ui)
                uh->uh_actf = ui->ui_forw;
        (*um->um_driver->ud_dgo)(um);
        }
        if (uh->uh_actf == ui)
                uh->uh_actf = ui->ui_forw;
        (*um->um_driver->ud_dgo)(um);
-       if (ui->ui_dk >= 0) {
-               dk_xfer[unit]++;
-               dk_wds[unit] += um->um_tab.b_actf->b_actf->b_bcount>>6;
-       }
        return (1);
 rwait:
        if (uh->uh_actf != ui) {
        return (1);
 rwait:
        if (uh->uh_actf != ui) {
@@ -456,7 +454,7 @@ ubaerror(uban, uh, xx, uvec, uba)
 }
 #endif
 
 }
 #endif
 
-#if notdef
+#ifdef notdef
 /*
  * This routine allows remapping of previously
  * allocated UNIBUS bdp and map resources
 /*
  * This routine allows remapping of previously
  * allocated UNIBUS bdp and map resources
index 920ec2f..09f9943 100644 (file)
@@ -1,5 +1,4 @@
-#define UPECCDEBUG
-/*     up.c    4.43    82/03/24        */
+/*     up.c    4.44    82/03/29        */
 
 #include "up.h"
 #if NSC > 0
 
 #include "up.h"
 #if NSC > 0
@@ -81,7 +80,11 @@ struct       size
 };
 /* END OF STUFF WHICH SHOULD BE READ IN PER DISK */
 
 };
 /* END OF STUFF WHICH SHOULD BE READ IN PER DISK */
 
-#define        _upSDIST        2               /* 1.0 msec */
+/*
+ * On a 780 upSDIST could be 2, but
+ * in the interest of 750's...
+ */
+#define        _upSDIST        3               /* 1.5 msec */
 #define        _upRDIST        4               /* 2.0 msec */
 
 int    upSDIST = _upSDIST;
 #define        _upRDIST        4               /* 2.0 msec */
 
 int    upSDIST = _upSDIST;
@@ -107,7 +110,7 @@ struct      upst {
        32,     19,     32*19,  823,    up_sizes,       /* 9300/cdc */
 /* 9300 actually has 815 cylinders... */
        32,     10,     32*10,  823,    fj_sizes,       /* fujitsu 160m */
        32,     19,     32*19,  823,    up_sizes,       /* 9300/cdc */
 /* 9300 actually has 815 cylinders... */
        32,     10,     32*10,  823,    fj_sizes,       /* fujitsu 160m */
-       32,     16,     32*16,  1024,   am_sizes,       /* fujitsu 160m */
+       32,     16,     32*16,  1024,   am_sizes,       /* ampex capricorn */
 };
 
 u_char up_offset[16] = {
 };
 
 u_char up_offset[16] = {
@@ -456,6 +459,7 @@ updgo(um)
 {
        register struct updevice *upaddr = (struct updevice *)um->um_addr;
 
 {
        register struct updevice *upaddr = (struct updevice *)um->um_addr;
 
+       um->um_tab.b_active++;  /* should now be 2 */
        upaddr->upba = um->um_ubinfo;
        upaddr->upcs1 = um->um_cmd|((um->um_ubinfo>>8)&0x300);
 }
        upaddr->upba = um->um_ubinfo;
        upaddr->upcs1 = um->um_cmd|((um->um_ubinfo>>8)&0x300);
 }
@@ -482,7 +486,7 @@ upintr(sc21)
         * interrupt for attention status on seeking drives.
         * Just service them.
         */
         * interrupt for attention status on seeking drives.
         * Just service them.
         */
-       if (um->um_tab.b_active == 0) {
+       if (um->um_tab.b_active != 2 && !sc->sc_recal) {
                if (upaddr->upcs1 & UP_TRE)
                        upaddr->upcs1 = UP_TRE;
                goto doattn;
                if (upaddr->upcs1 & UP_TRE)
                        upaddr->upcs1 = UP_TRE;
                goto doattn;
@@ -733,7 +737,7 @@ upecc(ui)
                i++;
                bit -= 8;
        }
                i++;
                bit -= 8;
        }
-       um->um_tab.b_active++;  /* Either complete or continuing... */
+       um->um_tab.b_active = 2;        /* Either complete or continuing... */
        if (up->upwc == 0)
                return (0);
        /*
        if (up->upwc == 0)
                return (0);
        /*
@@ -786,6 +790,7 @@ upreset(uban)
                um->um_tab.b_active = 0;
                um->um_tab.b_actf = um->um_tab.b_actl = 0;
                up_softc[sc21].sc_recal = 0;
                um->um_tab.b_active = 0;
                um->um_tab.b_actf = um->um_tab.b_actl = 0;
                up_softc[sc21].sc_recal = 0;
+               up_softc[sc21].sc_wticks = 0;
                if (um->um_ubinfo) {
                        printf("<%d>", (um->um_ubinfo>>28)&0xf);
                        ubadone(um);
                if (um->um_ubinfo) {
                        printf("<%d>", (um->um_ubinfo>>28)&0xf);
                        ubadone(um);