~kris/9p

9hist

f0ac91ac3943e675d8372f7422d5fd7cbda48411 — David du Colombier 25 years ago 4199025
Plan 9 from Bell Labs 2001-02-23
3 files changed, 71 insertions(+), 0 deletions(-)

M pc/mmu.c
M port/sysfile.c
M port/systab.h
M pc/mmu.c => pc/mmu.c +2 -0
@@ 36,6 36,7 @@ taskswitch(ulong pdb, ulong stack)
	tss->ss2 = KDSEL;
	tss->esp2 = stack;
	tss->cr3 = pdb;
	coherence();
	putcr3(pdb);
}



@@ 226,6 227,7 @@ putmmu(ulong va, ulong pa, Page*)

	s = splhi();
	pdb[PDX(MACHADDR)] = m->pdb[PDX(MACHADDR)];
	coherence();
	mmuflushtlb(up->mmupdb->pa);
	splx(s);
}

M port/sysfile.c => port/sysfile.c +63 -0
@@ 446,6 446,38 @@ sysread(ulong *arg)
}

long
syspread(ulong *arg)
{
	long n;
	Chan *c;
	union {
		uvlong v;
		ulong u[2];
	} o;

	n = arg[2];
	validaddr(arg[1], n, 1);
	c = fdtochan(arg[0], OREAD, 1, 1);
	o.u[0] = arg[3];
	o.u[1] = arg[4];

	if(waserror()) {
		cclose(c);
		nexterror();
	}

	if(c->qid.path&CHDIR)
		error(Eisdir);

	n = devtab[c->type]->read(c, (void*)arg[1], n, o.v);

	poperror();
	cclose(c);

	return n;
}

long
syswrite9p(ulong *arg)
{
	Chan *c;


@@ 515,6 547,37 @@ syswrite(ulong *arg)
	return m;
}

long
syspwrite(ulong *arg)
{
	Chan *c;
	long m, n;
	union {
		uvlong v;
		ulong u[2];
	} o;

	validaddr(arg[1], arg[2], 0);
	n = arg[2];
	c = fdtochan(arg[0], OWRITE, 1, 1);
	o.u[0] = arg[3];
	o.u[1] = arg[4];
	if(waserror()) {
		cclose(c);
		nexterror();
	}

	if(c->qid.path & CHDIR)
		error(Eisdir);

	m = devtab[c->type]->write(c, (void*)arg[1], n, o.v);

	poperror();
	cclose(c);

	return m;
}

static void
sseek(ulong *arg)
{

M port/systab.h => port/systab.h +6 -0
@@ 43,6 43,8 @@ Syscall syswait;
Syscall syswrite9p;
Syscall sysread9p;
Syscall sysseek;
Syscall syspread;
Syscall syspwrite;
Syscall	sysdeath;

Syscall *systab[]={


@@ 86,6 88,8 @@ Syscall *systab[]={
	[WRITE9P]	syswrite9p,
	[READ9P]	sysread9p,
	[SEEK]		sysseek,
	[PREAD]		syspread,
	[PWRITE]	syspwrite,
};

char *sysctab[]={


@@ 129,6 133,8 @@ char *sysctab[]={
	[WRITE9P]	"Write9p",
	[READ9P]	"Read9p",
	[SEEK]		"Seek",
	[PREAD]		"Pread",
	[PWRITE]	"Pwrite",
};

int nsyscall = (sizeof systab/sizeof systab[0]);