BSD 4_4 release
[unix-history] / usr / src / sys / vax / vax / flp.c
index 3793817..d10a8e3 100644 (file)
@@ -1,15 +1,22 @@
-/*     flp.c   4.2     %G%     */
+/*
+ * Copyright (c) 1982, 1986 Regents of the University of California.
+ * All rights reserved.  The Berkeley software License Agreement
+ * specifies the terms and conditions for redistribution.
+ *
+ *     @(#)flp.c       7.4 (Berkeley) 12/16/90
+ */
+
+#if VAX780
+#include "sys/param.h"
+#include "sys/systm.h"
+#include "sys/conf.h"
+#include "sys/user.h"
+#include "sys/buf.h"
 
 
-#if VAX==780
-#include "../h/flp.h"
-#include "../h/param.h"
-#include "../h/systm.h"
-#include "../h/conf.h"
-#include "../h/dir.h"
-#include "../h/user.h"
-#include "../h/mtpr.h"
-#include "../h/buf.h"
-#include "../h/cons.h"
+#include "cons.h"
+#include "../include/cpu.h"
+#include "flp.h"
+#include "../include/mtpr.h"
 
 struct {
        short   fl_state;               /* open and busy flags */
 
 struct {
        short   fl_state;               /* open and busy flags */
@@ -26,13 +33,14 @@ flopen(dev, flag)
 {
        struct buf *geteblk();
 
 {
        struct buf *geteblk();
 
-       if (fltab.fl_state != 0) {
-               u.u_error = ENXIO;
-               return;
-       }
+       if (cpu != VAX_780)
+               return (ENXIO);
+       if (fltab.fl_state != 0)
+               return (ENXIO);
        fltab.fl_state = FL_OPEN;
        fltab.fl_state = FL_OPEN;
-       fltab.fl_buf = geteblk();
+       fltab.fl_buf = geteblk(512);
        fltab.fl_active = FL_IDLE;
        fltab.fl_active = FL_IDLE;
+       return (0);
 }
 
 /*ARGSUSED*/
 }
 
 /*ARGSUSED*/
@@ -45,11 +53,15 @@ flclose(dev, flag)
        fltab.fl_state = 0;
 }
 
        fltab.fl_state = 0;
 }
 
-flstrategy(rw)
-       int rw;
+/*ARGSUSED*/
+flrw(dev, uio, flag)
+       dev_t dev;
+       struct uio *uio;
+       int flag;
 {
        register struct buf *bp;
 {
        register struct buf *bp;
-       register unsigned i;
+       register int i;
+       int error;
 
        /*
         * Assume one block read/written for each call - 
 
        /*
         * Assume one block read/written for each call - 
@@ -60,8 +72,8 @@ flstrategy(rw)
         *
         *      track# * (sectors/track) + sector #
         */
         *
         *      track# * (sectors/track) + sector #
         */
-       if (u.u_count == 0) 
-               return;
+       if (uio->uio_resid == 0) 
+               return (0);
        (void) spl4();
        while (fltab.fl_state & FL_BUSY)
                sleep((caddr_t)&fltab, PRIBIO);
        (void) spl4();
        while (fltab.fl_state & FL_BUSY)
                sleep((caddr_t)&fltab, PRIBIO);
@@ -69,54 +81,37 @@ flstrategy(rw)
        (void) spl0();
 
        bp = fltab.fl_buf;
        (void) spl0();
 
        bp = fltab.fl_buf;
-       while ((i = min(RXBYSEC, u.u_count)) != 0) {
-               bp->b_blkno = u.u_offset>>7;
-               if (bp->b_blkno >= MAXSEC || (u.u_offset & 0177) != 0) {
-                       /* block number out of range */
-                       /* or offset in middle of block */
-                       u.u_error = ENXIO;
-                       break;  
+       error = 0;
+       while ((i = imin(RXBYSEC, uio->uio_resid)) > 0) {
+               bp->b_blkno = uio->uio_offset>>7;
+               if (bp->b_blkno >= MAXSEC || (uio->uio_offset & 0177) != 0) {
+                       error = ENXIO;
+                       break;
                }
                }
-               if (rw == B_WRITE) {
-                       iomove(bp->b_un.b_addr, i, B_WRITE);
-                       if (u.u_error != 0)
+               if (uio->uio_rw == UIO_WRITE) {
+                       error = uiomove(bp->b_un.b_addr, i, uio);
+                       if (error)
                                break;
                }
                                break;
                }
-               bp->b_flags = rw;
+               bp->b_flags = uio->uio_rw == UIO_WRITE ? B_WRITE : B_READ;
                (void) spl4(); 
                flstart();
                while ((bp->b_flags & B_DONE) == 0)
                        sleep((caddr_t)bp, PRIBIO);     
                (void) spl0();
                if (bp->b_flags & B_ERROR) {
                (void) spl4(); 
                flstart();
                while ((bp->b_flags & B_DONE) == 0)
                        sleep((caddr_t)bp, PRIBIO);     
                (void) spl0();
                if (bp->b_flags & B_ERROR) {
-                       u.u_error = EIO;
+                       error = EIO;
                        break;
                }
                        break;
                }
-               if (rw == B_READ) {
-                       iomove(bp->b_un.b_addr, i, B_READ);
-                       if (u.u_error != 0)
+               if (uio->uio_rw == UIO_READ) {
+                       error = uiomove(bp->b_un.b_addr, i, uio);
+                       if (error)
                                break;
                }
        }
                                break;
                }
        }
-       u.u_count = bp->b_resid;
        fltab.fl_state &= ~FL_BUSY;
        wakeup((caddr_t)&fltab);
        fltab.fl_state &= ~FL_BUSY;
        wakeup((caddr_t)&fltab);
-}
-
-/*ARGSUSED*/
-flread(dev)
-       dev_t dev;
-{
-
-       flstrategy(B_READ);
-}
-
-/*ARGSUSED*/
-flwrite(dev)
-       dev_t dev;
-{
-
-       flstrategy(B_WRITE);
+       return (error);
 }
 
 flstart()
 }
 
 flstart()