new format of error prints; no more FLAKEY UP resets
[unix-history] / usr / src / sys / vax / uba / vp.c
index ff62178..304d536 100644 (file)
@@ -1,6 +1,11 @@
-/*     vp.c    3.3     %G%     */
+/*     vp.c    4.6     %G%     */
 
 
-#ifdef ERNIE
+#include "vp.h"
+#if NVP > 0
+/*
+ * Versatec matrix printer/plotter
+ * dma interface driver
+ */
 #include "../h/param.h"
 #include "../h/dir.h"
 #include "../h/user.h"
 #include "../h/param.h"
 #include "../h/dir.h"
 #include "../h/user.h"
 #include "../h/pte.h"
 #include "../h/uba.h"
 
 #include "../h/pte.h"
 #include "../h/uba.h"
 
-/*
- * Versatec matrix printer/plotter
- * dma interface driver
- */
 int    vpbdp = 1;
 
 unsigned minvpph();
 int    vpbdp = 1;
 
 unsigned minvpph();
@@ -22,7 +23,7 @@ unsigned minvpph();
 
 struct vpregs {
        short   plbcr;
 
 struct vpregs {
        short   plbcr;
-       short   fill;
+       short   pbxaddr;
        short   prbcr;
        unsigned short pbaddr;
        short   plcsr;
        short   prbcr;
        unsigned short pbaddr;
        short   plcsr;
@@ -31,8 +32,6 @@ struct        vpregs {
        unsigned short prbuf;
 };
 
        unsigned short prbuf;
 };
 
-#define        VPADDR  ((struct vpregs *)(UBA0_DEV + 0177500))
-
 #define        ERROR   0100000
 #define        DTCINTR 040000
 #define        DMAACT  020000
 #define        ERROR   0100000
 #define        DTCINTR 040000
 #define        DMAACT  020000
@@ -49,6 +48,7 @@ struct {
        int     vp_state;
        int     vp_count;
        int     vp_bufp;
        int     vp_state;
        int     vp_count;
        int     vp_bufp;
+       struct  buf *vp_bp;
 } vp11;
 int    vp_ubinfo;
 
 } vp11;
 int    vp_ubinfo;
 
@@ -94,10 +94,9 @@ vpstrategy(bp)
        while (vp11.vp_state & VBUSY)
                sleep((caddr_t)&vp11, VPPRI);
        vp11.vp_state |= VBUSY;
        while (vp11.vp_state & VBUSY)
                sleep((caddr_t)&vp11, VPPRI);
        vp11.vp_state |= VBUSY;
-       (void) spl0();
+       vp11.vp_bp = bp;
        vp_ubinfo = ubasetup(bp, vpbdp);
        vp11.vp_bufp = vp_ubinfo & 0x3ffff;
        vp_ubinfo = ubasetup(bp, vpbdp);
        vp11.vp_bufp = vp_ubinfo & 0x3ffff;
-       (void) spl4();
        if (e = vperror(READY))
                goto brkout;
        vp11.vp_count = bp->b_bcount;
        if (e = vperror(READY))
                goto brkout;
        vp11.vp_count = bp->b_bcount;
@@ -110,8 +109,9 @@ vpstrategy(bp)
                vp11.vp_state = (vp11.vp_state &~ MODE) | PLOT;
        (void) spl0();
 brkout:
                vp11.vp_state = (vp11.vp_state &~ MODE) | PLOT;
        (void) spl0();
 brkout:
-       ubafree(vp_ubinfo), vp_ubinfo = 0;
+       ubarelse(&vp_ubinfo);
        vp11.vp_state &= ~VBUSY;
        vp11.vp_state &= ~VBUSY;
+       vp11.vp_bp = 0;
        iodone(bp);
        if (e)
                u.u_error = EIO;
        iodone(bp);
        if (e)
                u.u_error = EIO;
@@ -152,6 +152,7 @@ vpstart()
 
        if (vp11.vp_count) {
                VPADDR->pbaddr = vp11.vp_bufp;
 
        if (vp11.vp_count) {
                VPADDR->pbaddr = vp11.vp_bufp;
+               VPADDR->pbxaddr = (vp11.vp_bufp>>12)&0x30;
                if (vp11.vp_state & (PRINT|PPLOT))
                        VPADDR->prbcr = vp11.vp_count;
                else
                if (vp11.vp_state & (PRINT|PPLOT))
                        VPADDR->prbcr = vp11.vp_count;
                else
@@ -209,7 +210,7 @@ vptimo()
 {
 
        if (vp11.vp_state&VISOPEN)
 {
 
        if (vp11.vp_state&VISOPEN)
-               timeout(vptimo, (caddr_t)0, HZ/10);
+               timeout(vptimo, (caddr_t)0, hz/10);
        vpintr(0);
 }
 
        vpintr(0);
 }
 
@@ -228,4 +229,22 @@ vpclose()
        vp11.vp_bufp = 0;
        VPADDR->plcsr = 0;
 }
        vp11.vp_bufp = 0;
        VPADDR->plcsr = 0;
 }
+
+vpreset()
+{
+
+       if ((vp11.vp_state & VISOPEN) == 0)
+               return;
+       printf(" vp");
+       VPADDR->prcsr = IENABLE | DTCINTR;
+       if ((vp11.vp_state & VBUSY) == 0)
+               return;
+       if (vp_ubinfo) {
+               printf("<%d>", (vp_ubinfo>>28)&0xf);
+               ubarelse(&vp_ubinfo);
+       }
+       vp11.vp_bufp = vp_ubinfo & 0x3ffff;
+       vp11.vp_count = vp11.vp_bp->b_bcount;
+       vpstart();
+}
 #endif
 #endif