s/HZ/hz/
[unix-history] / usr / src / sys / vax / uba / rk.c
index 2a98e83..56e9b9c 100644 (file)
@@ -1,4 +1,4 @@
-/*     rk.c    4.11    %G%     */
+/*     rk.c    4.16    %G%     */
 
 #include "rk.h"
 #if NHK > 0
 
 #include "rk.h"
 #if NHK > 0
@@ -7,6 +7,8 @@ int     rkflags,rkerrs;         /* GROT */
  * RK11/RK07 disk driver
  *
  * This driver mimics up.c; see it for an explanation of common code.
  * RK11/RK07 disk driver
  *
  * This driver mimics up.c; see it for an explanation of common code.
+ *
+ * THIS DRIVER DOESN'T DEAL WITH DRIVES SPINNING DOWN AND UP
  */
 #define        DELAY(i)                { register int j; j = i; while (--j > 0); }
 #include "../h/param.h"
  */
 #define        DELAY(i)                { register int j; j = i; while (--j > 0); }
 #include "../h/param.h"
@@ -120,11 +122,11 @@ rkattach(ui)
 {
 
        if (rkwstart == 0) {
 {
 
        if (rkwstart == 0) {
-               timeout(rkwatch, (caddr_t)0, HZ);
+               timeout(rkwatch, (caddr_t)0, hz);
                rkwstart++;
        }
        if (ui->ui_dk >= 0)
                rkwstart++;
        }
        if (ui->ui_dk >= 0)
-               dk_mspw[ui->ui_dk] = 1.0 / (HZ * NRKSECT * 256);
+               dk_mspw[ui->ui_dk] = 1.0 / (60 * NRKSECT * 256);
        rkip[ui->ui_ctlr][ui->ui_slave] = ui;
        rk_softc[ui->ui_ctlr].sc_ndrive++;
        rkcyl[ui->ui_unit] = -1;
        rkip[ui->ui_ctlr][ui->ui_slave] = ui;
        rk_softc[ui->ui_ctlr].sc_ndrive++;
        rkcyl[ui->ui_unit] = -1;
@@ -289,7 +291,7 @@ rkdgo(um)
        rkaddr->rkcs1 = um->um_cmd|((um->um_ubinfo>>8)&0x300);
 }
 
        rkaddr->rkcs1 = um->um_cmd|((um->um_ubinfo>>8)&0x300);
 }
 
-hkintr(rk11)
+rkintr(rk11)
        int rk11;
 {
        register struct uba_minfo *um = rkminfo[rk11];
        int rk11;
 {
        register struct uba_minfo *um = rkminfo[rk11];
@@ -310,23 +312,38 @@ hkintr(rk11)
                dk_busy &= ~(1 << ui->ui_dk);
                if (rkaddr->rkcs1 & RK_CERR) {
                        int recal;
                dk_busy &= ~(1 << ui->ui_dk);
                if (rkaddr->rkcs1 & RK_CERR) {
                        int recal;
+#ifdef notdef
+                       int del = 0;
+#endif
                        u_short ds = rkaddr->rkds;
                        u_short cs2 = rkaddr->rkcs2;
                        u_short er = rkaddr->rker;
                        if (sc->sc_recal)
                                printf("recal CERR\n");
                        u_short ds = rkaddr->rkds;
                        u_short cs2 = rkaddr->rkcs2;
                        u_short er = rkaddr->rker;
                        if (sc->sc_recal)
                                printf("recal CERR\n");
-                       rkerrs++;                               /* GROT */
-                       if (rkflags&1)                          /* GROT */
-                       printf("%d ds %o cs2 %o er %o\n",       /* GROT */
-                           um->um_tab.b_errcnt, ds, cs2, er);  /* GROT */
-                       if (er & RK_WLE)        
-                               printf("rk%d is write locked\n", dkunit(bp));
-/* THIS DOESN'T SEEM TO HAPPEN */
-/* OR WAS SOMETHING BROKEN WHEN WE TRIED */
-/* SPINNING A DRIVE DOWN ? */
-                       if (ds & RKDS_HARD)
+                       rkerrs++;
+#ifdef notdef
+/* THIS ATTEMPTED TO FIND OUT IF THE DRIVE IS SPUN */
+/* DOWN BUT IT DOESN'T SEEM TO WORK... THE DRIVE SEEMS TO */
+/* TELL PAINFULLY LITTLE WHEN IT IS SPUN DOWN (I.E. NOTHING CHANGES) */
+/* THE DRIVE JUST KEEPS SAYING IT WANTS ATTENTION AND BLOWING ALL COMMANDS */
+                       if (ds & RK_CDA) {
+                               rkaddr->rkcs1 = RK_CDT|RK_CERR;
+                               rkaddr->rkcs2 = ui->ui_slave;
+                               rkaddr->rkcs1 = RK_CDT|RK_SELECT|RK_GO;
+                               rkwait(rkaddr);
+                               while ((rkaddr->rkds & RK_SVAL) == 0)
+                                       if (++del > 512)
+                                               break;
+                       }
+                       if (del > 512) {
                                printf("rk%d is down\n", dkunit(bp));
                                printf("rk%d is down\n", dkunit(bp));
-                       if (++um->um_tab.b_errcnt > 28 ||
+                               bp->b_flags |= B_ERROR;
+                       } else
+#endif
+                       if (ds & RK_WLE) {
+                               printf("rk%d is write locked\n", dkunit(bp));
+                               bp->b_flags |= B_ERROR;
+                       } else if (++um->um_tab.b_errcnt > 28 ||
                            ds&RKDS_HARD || er&RKER_HARD || cs2&RKCS2_HARD) {
                                bp->b_flags |= B_ERROR;
                                harderr(bp);
                            ds&RKDS_HARD || er&RKER_HARD || cs2&RKCS2_HARD) {
                                bp->b_flags |= B_ERROR;
                                harderr(bp);
@@ -444,9 +461,8 @@ rkecc(ui)
                rk->rkatt = 0;
                return (0);
        }
                rk->rkatt = 0;
                return (0);
        }
-       ubp->uba_dpr[(um->um_ubinfo>>28)&0x0f] |= UBA_BNE;
+       ubapurge(um);
        i = rk->rkec1 - 1;              /* -1 makes 0 origin */
        i = rk->rkec1 - 1;              /* -1 makes 0 origin */
-       printf("mask %x pos %x\n", mask, i+1);
        bit = i&07;
        i = (i&~07)>>3;
        byte = i + o;
        bit = i&07;
        i = (i&~07)>>3;
        byte = i + o;
@@ -527,7 +543,7 @@ rkwatch()
        register rk11, unit;
        register struct rk_softc *sc;
 
        register rk11, unit;
        register struct rk_softc *sc;
 
-       timeout(rkwatch, (caddr_t)0, HZ);
+       timeout(rkwatch, (caddr_t)0, hz);
        for (rk11 = 0; rk11 < NHK; rk11++) {
                um = rkminfo[rk11];
                if (um == 0 || um->um_alive == 0)
        for (rk11 = 0; rk11 < NHK; rk11++) {
                um = rkminfo[rk11];
                if (um == 0 || um->um_alive == 0)