Ultrix-3.1/sys/dev/mem.c

Compare this file to the similar file:
Show the results in this format:


/**********************************************************************
 *   Copyright (c) Digital Equipment Corporation 1984, 1985, 1986.    *
 *   All Rights Reserved. 					      *
 *   Reference "/usr/src/COPYRIGHT" for applicable restrictions.      *
 **********************************************************************/

/*
 * SCCSID: @(#)mem.c	3.0	4/21/86
 */
#
/*
 */

/* Made changes to implement maus
 * George Mathew  6/26/85 */

/* Removed mmoff routine from this file and put in sys/maus.c
 * easier to make maus sysgenable  George Mathew 6/28/85 */

/*
 *	Memory special file
 *	minor device 0 is physical memory
 *	minor device 1 is kernel memory
 *	minor device 2 is EOF/RATHOLE
 *	minor device >= 8 are MAUS
 */

#include <sys/param.h>
#include <sys/dir.h>
#include <sys/user.h>
#include <sys/conf.h>
#include <sys/seg.h>
#include <sys/maus.h>

#define	NBPC	64	/* number of bytes/click */

mmread(dev)
register dev;
{
	register unsigned n;
	long offset;

	if ((dev = minor(dev)) == 2)
		return;
	while (u.u_error == 0 && u.u_count != 0) {
		if (dev > 2) {
			if ( (offset = mmoff(dev)) < 0)
				break;
			n = MIN(u.u_count, NBPC);
		} else {
			offset = u.u_offset;
			n = MIN(u.u_count, BSIZE);
		}
		if (dev == 1) {
			if (copyout((short)offset, u.u_base, n))
				u.u_error = ENXIO;
		} else {
			if (copyio(offset, u.u_base, n, U_RUD))
				u.u_error = ENXIO;
		}
		u.u_offset += n;
		u.u_base += n;
		u.u_count -= n;
	}
}

mmwrite(dev)
register dev;
{
	register unsigned n;
	long offset;

	if ((dev = minor(dev)) == 2) {
		u.u_count = 0;
		return;
	}
	while (u.u_error == 0 && u.u_count != 0) {
		if (minor(dev) > 2) {    /* if not for maus */
			if ( (offset = mmoff(minor(dev))) <0)
				break;
			n = MIN(u.u_count, NBPC);
		} else {
			offset = u.u_offset;
			n = MIN(u.u_count, BSIZE);
		}
		if (dev == 1) {
			if (copyin(u.u_base, (short)offset, n))
				u.u_error = ENXIO;
		} else {
			if (copyio(offset, u.u_base, n, U_WUD))
				u.u_error = ENXIO;
		}
		u.u_offset +=n;
		u.u_base += n;
		u.u_count -= n;
	}
}