summaryrefslogtreecommitdiffstats
path: root/sys
diff options
context:
space:
mode:
authordg <dg@FreeBSD.org>1993-11-22 09:46:45 +0000
committerdg <dg@FreeBSD.org>1993-11-22 09:46:45 +0000
commitac967db637d0214a47c7545ad07efb8d9bb803a3 (patch)
treef18c806931c3b0627f9f6b964160e9df30f2657a /sys
parent29c03b31ae5e87b352d5f8caddbc80f8e88c882e (diff)
downloadFreeBSD-src-ac967db637d0214a47c7545ad07efb8d9bb803a3.zip
FreeBSD-src-ac967db637d0214a47c7545ad07efb8d9bb803a3.tar.gz
patches from Julian Elischer -
Added support for mmapping /dev/mem
Diffstat (limited to 'sys')
-rw-r--r--sys/amd64/amd64/mem.c28
-rw-r--r--sys/i386/i386/conf.c6
-rw-r--r--sys/i386/i386/mem.c28
3 files changed, 57 insertions, 5 deletions
diff --git a/sys/amd64/amd64/mem.c b/sys/amd64/amd64/mem.c
index 51c62ca..0caf00c 100644
--- a/sys/amd64/amd64/mem.c
+++ b/sys/amd64/amd64/mem.c
@@ -38,7 +38,7 @@
*
* from: Utah $Hdr: mem.c 1.13 89/10/08$
* from: @(#)mem.c 7.2 (Berkeley) 5/9/91
- * $Id$
+ * $Id: mem.c,v 1.3 1993/10/16 14:15:06 rgrimes Exp $
*/
/*
@@ -228,3 +228,29 @@ mmrw(dev, uio, flags)
free(zbuf, M_TEMP);
return (error);
}
+
+
+
+
+/*******************************************************\
+* allow user processes to MMAP some memory sections *
+* instead of going through read/write *
+\*******************************************************/
+int memmmap(dev_t dev, int offset, int nprot)
+{
+ switch (minor(dev))
+ {
+
+/* minor device 0 is physical memory */
+ case 0:
+ return i386_btop(offset);
+
+/* minor device 1 is kernel memory */
+ case 1:
+ return i386_btop(vtophys(offset));
+
+ default:
+ return -1;
+ }
+}
+
diff --git a/sys/i386/i386/conf.c b/sys/i386/i386/conf.c
index ae333fd..41e9aeb 100644
--- a/sys/i386/i386/conf.c
+++ b/sys/i386/i386/conf.c
@@ -34,7 +34,7 @@
* SUCH DAMAGE.
*
* from: @(#)conf.c 5.8 (Berkeley) 5/12/91
- * $Id: conf.c,v 1.14 1993/11/03 18:07:32 nate Exp $
+ * $Id: conf.c,v 1.15 1993/11/18 05:01:51 rgrimes Exp $
*/
#include "param.h"
@@ -188,7 +188,7 @@ extern struct tty pccons;
int cttyopen(), cttyread(), cttywrite(), cttyioctl(), cttyselect();
-int mmopen(), mmclose(), mmrw();
+int mmopen(), mmclose(), mmrw(), memmmap();
#define mmselect seltrue
#include "pty.h"
@@ -393,7 +393,7 @@ struct cdevsw cdevsw[] =
cttyselect, enodev, NULL },
{ mmopen, mmclose, mmrw, mmrw, /*2*/
enodev, nullop, nullop, NULL, /* memory */
- mmselect, enodev, NULL },
+ mmselect, memmmap, NULL },
{ wdopen, wdclose, rawread, rawwrite, /*3*/
wdioctl, enodev, nullop, NULL, /* wd */
seltrue, enodev, wdstrategy },
diff --git a/sys/i386/i386/mem.c b/sys/i386/i386/mem.c
index 51c62ca..0caf00c 100644
--- a/sys/i386/i386/mem.c
+++ b/sys/i386/i386/mem.c
@@ -38,7 +38,7 @@
*
* from: Utah $Hdr: mem.c 1.13 89/10/08$
* from: @(#)mem.c 7.2 (Berkeley) 5/9/91
- * $Id$
+ * $Id: mem.c,v 1.3 1993/10/16 14:15:06 rgrimes Exp $
*/
/*
@@ -228,3 +228,29 @@ mmrw(dev, uio, flags)
free(zbuf, M_TEMP);
return (error);
}
+
+
+
+
+/*******************************************************\
+* allow user processes to MMAP some memory sections *
+* instead of going through read/write *
+\*******************************************************/
+int memmmap(dev_t dev, int offset, int nprot)
+{
+ switch (minor(dev))
+ {
+
+/* minor device 0 is physical memory */
+ case 0:
+ return i386_btop(offset);
+
+/* minor device 1 is kernel memory */
+ case 1:
+ return i386_btop(vtophys(offset));
+
+ default:
+ return -1;
+ }
+}
+
OpenPOWER on IntegriCloud