sun merge
[unix-history] / usr / src / sys / vax / uba / lp.c
index c3a18c7..cb7e2f5 100644 (file)
@@ -1,4 +1,4 @@
-/*     lp.c    4.20    81/07/25        */
+/*     lp.c    4.31    82/12/17        */
 
 #include "lp.h"
 #if NLP > 0
 
 #include "lp.h"
 #if NLP > 0
@@ -7,10 +7,8 @@
  *
  * This driver has been modified to work on printers where
  * leaving IENABLE set would cause continuous interrupts.
  *
  * This driver has been modified to work on printers where
  * leaving IENABLE set would cause continuous interrupts.
- *
- * TODO:
- *     Test driver on multiple printers
  */
  */
+#include "../machine/pte.h"
 
 #include "../h/param.h"
 #include "../h/dir.h"
 
 #include "../h/param.h"
 #include "../h/dir.h"
 #include "../h/buf.h"
 #include "../h/systm.h"
 #include "../h/map.h"
 #include "../h/buf.h"
 #include "../h/systm.h"
 #include "../h/map.h"
-#include "../h/pte.h"
-#include "../h/ubavar.h"
-#include "../h/ioctl.h"
-#include "../h/tty.h"
+
+#include "../vaxuba/ubavar.h"
 
 #define        LPPRI   (PZERO+8)
 #define        IENABLE 0100
 
 #define        LPPRI   (PZERO+8)
 #define        IENABLE 0100
 #define        LPLWAT  650
 #define        LPHWAT  800
 
 #define        LPLWAT  650
 #define        LPHWAT  800
 
+#ifndef CAD
 #define MAXCOL 132
 #define MAXCOL 132
+#else
+#define        MAXCOL  512
+#endif
 #define CAP    1
 
 #define LPUNIT(dev) (minor(dev) >> 3)
 #define CAP    1
 
 #define LPUNIT(dev) (minor(dev) >> 3)
@@ -83,12 +83,18 @@ lpprobe(reg)
        register struct lpdevice *lpaddr = (struct lpdevice *)reg;
 #ifdef lint
        br = 0; cvec = br; br = cvec;
        register struct lpdevice *lpaddr = (struct lpdevice *)reg;
 #ifdef lint
        br = 0; cvec = br; br = cvec;
+       lpintr(0);
 #endif
 
 #endif
 
+#ifdef INGVAX
+       br = 0x14;
+       cvec = 0200;
+#else
        lpaddr->lpsr = IENABLE;
        DELAY(5);
        lpaddr->lpsr = 0;
        lpaddr->lpsr = IENABLE;
        DELAY(5);
        lpaddr->lpsr = 0;
-       return (1);
+#endif
+       return (sizeof (struct lpdevice));
 }
 
 /*ARGSUSED*/
 }
 
 /*ARGSUSED*/
@@ -103,17 +109,13 @@ lpopen(dev, flag)
 
        if ((unit = LPUNIT(dev)) >= NLP ||
            (sc = &lp_softc[unit])->sc_state&OPEN ||
 
        if ((unit = LPUNIT(dev)) >= NLP ||
            (sc = &lp_softc[unit])->sc_state&OPEN ||
-           (ui = lpinfo[unit]) == 0 || ui->ui_alive == 0) {
-               u.u_error = ENXIO;
-               return;
-       }
+           (ui = lpinfo[unit]) == 0 || ui->ui_alive == 0)
+               return (ENXIO);
        lpaddr = (struct lpdevice *)ui->ui_addr;
        lpaddr = (struct lpdevice *)ui->ui_addr;
-       if (lpaddr->lpsr&ERROR) {
-               u.u_error = EIO;
-               return;
-       }
+       if (lpaddr->lpsr&ERROR)
+               return (EIO);
        sc->sc_state |= OPEN;
        sc->sc_state |= OPEN;
-       sc->sc_inbuf = geteblk();
+       sc->sc_inbuf = geteblk(512);
        sc->sc_flags = minor(dev) & 07;
        (void) spl4();
        if ((sc->sc_state&TOUT) == 0) {
        sc->sc_flags = minor(dev) & 07;
        (void) spl4();
        if ((sc->sc_state&TOUT) == 0) {
@@ -122,6 +124,7 @@ lpopen(dev, flag)
        }
        (void) spl0();
        lpcanon(dev, '\f');
        }
        (void) spl0();
        lpcanon(dev, '\f');
+       return (0);
 }
 
 /*ARGSUSED*/
 }
 
 /*ARGSUSED*/
@@ -136,20 +139,25 @@ lpclose(dev, flag)
        sc->sc_state &= ~OPEN;
 }
 
        sc->sc_state &= ~OPEN;
 }
 
-lpwrite(dev)
+lpwrite(dev, uio)
        dev_t dev;
        dev_t dev;
+       struct uio *uio;
 {
        register unsigned n;
        register char *cp;
        register struct lp_softc *sc = &lp_softc[LPUNIT(dev)];
 {
        register unsigned n;
        register char *cp;
        register struct lp_softc *sc = &lp_softc[LPUNIT(dev)];
+       int error;
 
 
-       while (n = min(BSIZE, u.u_count)) {
+       while (n = min(512, uio->uio_resid)) {
                cp = sc->sc_inbuf->b_un.b_addr;
                cp = sc->sc_inbuf->b_un.b_addr;
-               iomove(cp, n, B_WRITE);
+               error = uiomove(cp, n, UIO_WRITE, uio);
+               if (error)
+                       return (error);
                do
                        lpcanon(dev, *cp++);
                while (--n);
        }
                do
                        lpcanon(dev, *cp++);
                while (--n);
        }
+       return (0);
 }
 
 lpcanon(dev, c)
 }
 
 lpcanon(dev, c)