add part 2 of the WEGA kernel

This commit is contained in:
Oliver Lehmann 2008-05-01 14:44:02 +00:00
parent eb29928de4
commit bce19ec845
1 changed files with 85 additions and 0 deletions

85
WEGA/src/uts/dev/mem.c Normal file
View File

@ -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 <sys/param.h>
#include <sys/tty.h>
#include <sys/dir.h>
#include <sys/mmu.h>
#include <sys/s.out.h>
#include <sys/user.h>
#include <sys/sysinfo.h>
#include <sys/systm.h>
/*
* 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;
}
}