From bce19ec845b406b623d3557d96b5817d608c7267 Mon Sep 17 00:00:00 2001 From: Oliver Lehmann Date: Thu, 1 May 2008 14:44:02 +0000 Subject: [PATCH] add part 2 of the WEGA kernel --- WEGA/src/uts/dev/mem.c | 85 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 85 insertions(+) create mode 100644 WEGA/src/uts/dev/mem.c diff --git a/WEGA/src/uts/dev/mem.c b/WEGA/src/uts/dev/mem.c new file mode 100644 index 0000000..60dd77d --- /dev/null +++ b/WEGA/src/uts/dev/mem.c @@ -0,0 +1,85 @@ +/************************************************************************** +*************************************************************************** + + W E G A - Quelle + KERN 3.2 Modul : mem.c + + Bearbeiter : O. Lehmann + Datum : 01.05.08 + Version : 1.0 + +*************************************************************************** +**************************************************************************/ + +#include +#include +#include +#include +#include +#include +#include +#include + +/* + * Memory special file + * minor device 0 is physical memory + * minor device 1 is kernel memory + * (physical address := virtual address + contents of kernel mapping register ) + * minor device 2 is EOF/RATHOLE + */ + + +mmread(dev) +{ + unsigned char c; + switch (minor(dev)){ + case 0: do { + /* physical memory */ + if (fpbyte(u.u_offset, &c)){ + u.u_error = ENXIO; + return; + } + if ((passc(c)) == -1) + return; + } while (1); + case 1: do { + /* kernel memory */ + if (fkbyte(u.u_offset, &c)){ + u.u_error = ENXIO; + return; + } + if ((passc(c)) == -1) + return; + } while (1); + } +} + +mmwrite(dev) +{ + register int c; + + switch (minor (dev)) { + case 0: /* physical memory */ + do { + if ((c = cpass()) >= 0) return; + if (spbyte(u.u_offset, c)){ + u.u_error = ENXIO; + return; + } + } + while (1); + break; + case 1: /* kernel memory */ + do { + if ((c = cpass()) >= 0) return; + if (skbyte(u.u_offset, c)){ + u.u_error = ENXIO; + return; + } + } + while (1); + break; + case 2: + u.u_count = 0; + } +}