BSD 4_4 release
[unix-history] / usr / src / sys / tahoe / tahoe / mem.c
index 74a177c..3b58191 100644 (file)
@@ -1,49 +1,38 @@
-/*     mem.c   1.2     86/01/05        */
+/*
+ * Copyright (c) 1988, 1990 Regents of the University of California.
+ * All rights reserved.  The Berkeley software License Agreement
+ * specifies the terms and conditions for redistribution.
+ *
+ *     @(#)mem.c       7.5 (Berkeley) 12/16/90
+ */
 
 /*
  * Memory special file
  */
 
 
 /*
  * Memory special file
  */
 
-#include "../machine/pte.h"
-
-#include "../h/param.h"
-#include "../h/dir.h"
-#include "../h/user.h"
-#include "../h/conf.h"
-#include "../h/buf.h"
-#include "../h/systm.h"
-#include "../h/vm.h"
-#include "../h/cmap.h"
-#include "../h/uio.h"
-
-#include "../tahoe/mtpr.h"
-
-mmread(dev, uio)
-       dev_t dev;
-       struct uio *uio;
-{
-
-       return (mmrw(dev, uio, UIO_READ));
-}
+#include "sys/param.h"
+#include "sys/user.h"
+#include "sys/conf.h"
+#include "sys/buf.h"
+#include "sys/systm.h"
+#include "sys/vm.h"
+#include "sys/cmap.h"
+#include "sys/uio.h"
 
 
-mmwrite(dev, uio)
-       dev_t dev;
-       struct uio *uio;
-{
+#include "../include/pte.h"
+#include "../include/mtpr.h"
 
 
-       return (mmrw(dev, uio, UIO_WRITE));
-}
-
-mmrw(dev, uio, rw)
+/* ARGSUSED */
+mmrw(dev, uio, flag)
        dev_t dev;
        struct uio *uio;
        dev_t dev;
        struct uio *uio;
-       enum uio_rw rw;
+       int flag;
 {
        register int o;
        register u_int c, v;
        register struct iovec *iov;
        int error = 0;
 {
        register int o;
        register u_int c, v;
        register struct iovec *iov;
        int error = 0;
-       extern int vmembeg, vmemend;
+       extern caddr_t vmembeg, vmemend;
 
 
        while (uio->uio_resid > 0 && error == 0) {
 
 
        while (uio->uio_resid > 0 && error == 0) {
@@ -63,12 +52,13 @@ mmrw(dev, uio, rw)
                        if (v >= physmem)
                                goto fault;
                        *(int *)mmap = v | PG_V |
                        if (v >= physmem)
                                goto fault;
                        *(int *)mmap = v | PG_V |
-                               (rw == UIO_READ ? PG_KR : PG_KW);
+                               (uio->uio_rw == UIO_READ ? PG_KR : PG_KW);
                        mtpr(TBIS, vmmap);
                        o = (int)uio->uio_offset & PGOFSET;
                        mtpr(TBIS, vmmap);
                        o = (int)uio->uio_offset & PGOFSET;
-                       c = min((u_int)(NBPG - o), (u_int)iov->iov_len);
-                       c = min(c, (u_int)(NBPG - ((int)iov->iov_base&PGOFSET)));
-                       error = uiomove((caddr_t)&vmmap[o], (int)c, rw, uio);
+                       c = (u_int)(NBPG - ((int)iov->iov_base & PGOFSET));
+                       c = MIN(c, (u_int)(NBPG - o));
+                       c = MIN(c, (u_int)iov->iov_len);
+                       error = uiomove((caddr_t)&vmmap[o], (int)c, uio);
                        continue;
 
 /* minor device 1 is kernel memory */
                        continue;
 
 /* minor device 1 is kernel memory */
@@ -80,27 +70,29 @@ mmrw(dev, uio, rw)
                            (caddr_t)uio->uio_offset < (caddr_t)&vmemend)
                                goto fault;
                        c = iov->iov_len;
                            (caddr_t)uio->uio_offset < (caddr_t)&vmemend)
                                goto fault;
                        c = iov->iov_len;
-                       if (!kernacc((caddr_t)uio->uio_offset, c, rw == UIO_READ ? B_READ : B_WRITE))
+                       if (!kernacc((caddr_t)uio->uio_offset, c,
+                           uio->uio_rw == UIO_READ ? B_READ : B_WRITE))
                                goto fault;
                                goto fault;
-                       error = uiomove((caddr_t)uio->uio_offset, (int)c, rw, uio);
+                       error = uiomove((caddr_t)uio->uio_offset, (int)c, uio);
                        continue;
 
 /* minor device 2 is EOF/RATHOLE */
                case 2:
                        continue;
 
 /* minor device 2 is EOF/RATHOLE */
                case 2:
-                       if (rw == UIO_READ)
-                               return (0);
-                       c = iov->iov_len;
-                       break;
+                       if (uio->uio_rw == UIO_WRITE)
+                               uio->uio_resid = 0;
+                       return (0);
 
 /* minor device 3 is versabus memory (addressed by shorts) */
                case 3:
                        c = iov->iov_len;
 
 /* minor device 3 is versabus memory (addressed by shorts) */
                case 3:
                        c = iov->iov_len;
-                       if (!kernacc((caddr_t)uio->uio_offset, c, rw == UIO_READ ? B_READ : B_WRITE))
+                       if (!kernacc((caddr_t)uio->uio_offset, c,
+                           uio->uio_rw == UIO_READ ? B_READ : B_WRITE))
                                goto fault;
                                goto fault;
-                       if (!useracc(iov->iov_base, c, rw == UIO_READ ? B_WRITE : B_READ))
+                       if (!useracc(iov->iov_base, c,
+                           uio->uio_rw == UIO_READ ? B_WRITE : B_READ))
                                goto fault;
                        error = VERSAcpy((caddr_t)uio->uio_offset, iov->iov_base,
                                goto fault;
                        error = VERSAcpy((caddr_t)uio->uio_offset, iov->iov_base,
-                           (int)c, rw);
+                           (int)c, uio->uio_rw);
                        break;
                }
                if (error)
                        break;
                }
                if (error)