~kris/9p

9hist

4a8b32d910f43d31d2425e53c3b55c9976967e9c — David du Colombier 27 years ago 8540fff
Plan 9 from Bell Labs 1999-07-16
7 files changed, 33 insertions(+), 13 deletions(-)

M pc/ether589.c
M pc/etherelnk3.c
M pc/vgas3.c
M port/chan.c
M port/devdraw.c
M port/devsrv.c
M port/lib.h
M pc/ether589.c => pc/ether589.c +5 -1
@@ 123,12 123,15 @@ reset(Ether* ether)
	if(ioalloc(port, 0x10, 0, "3C589") < 0)
		return -1;

	if((slot = pcmspecial(ether->type, ether)) < 0)
	if((slot = pcmspecial(ether->type, ether)) < 0){
		iofree(port);
		return -1;
	}

	/* try configuring as a 10BaseT */
	if(configASIC(ether, port, xcvr10BaseT) < 0){
		pcmspecialclose(slot);
		iofree(port);
		return -1;
	}
	delay(100);


@@ 143,6 146,7 @@ reset(Ether* ether)
	COMMAND(port, GlobalReset, 0);
	if(configASIC(ether, port, xcvr10Base2) < 0){
		pcmspecialclose(slot);
		iofree(port);
		return -1;
	}
	print("#l%d: xcvr10Base2 %s\n", ether->ctlrno, ether->type);

M pc/etherelnk3.c => pc/etherelnk3.c +6 -2
@@ 1312,7 1312,7 @@ tcm509isa(void)
	 * it fully.
	 */
	while(port = activate()){
		if(ioalloc(port, 0x20, 0, "tcm509isa") < 0){
		if(ioalloc(port, 0x10, 0, "tcm509isa") < 0){
			print("tcm509isa:port %d in use\n", port);
			continue;
		}


@@ 1436,8 1436,12 @@ tcm5XXpcmcia(Ether* ether)

	for(i = 0; tcmpcmcia[i] != nil; i++){
		if(!cistrcmp(ether->type, tcmpcmcia[i])){
			if(ioalloc(ether->port, 0x20, 0, "tcm5XXpcmcia") < 0)
			/*
			 * No need for an ioalloc here, the 589 reset
			 * code deals with it.
			if(ioalloc(ether->port, 0x10, 0, "tcm5XXpcmcia") < 0)
				return 0;
			 */
			return ether->port;
		}
	}

M pc/vgas3.c => pc/vgas3.c +10 -1
@@ 64,12 64,14 @@ s3page(VGAscr* scr, int page)
static ulong
s3linear(VGAscr* scr, int* size, int* align)
{
	ulong aperture, oaperture;
	ulong aperture, oaperture, osize;
	int oapsize, wasupamem;
	Pcidev *p;
	Physseg seg;

	oaperture = scr->aperture;
	oapsize = scr->apsize;
	osize = *size;
	wasupamem = scr->isupamem;
	if(wasupamem)
		upafree(oaperture, oapsize);


@@ 90,6 92,13 @@ s3linear(VGAscr* scr, int* size, int* align)
	else
		scr->isupamem = 1;

	memset(&seg, 0, sizeof(seg));
	seg.attr = SG_PHYSICAL;
	seg.name = smalloc(NAMELEN);
	snprint(seg.name, NAMELEN, "s3screen");
	seg.pa = aperture;
	seg.size = osize;
	addphysseg(&seg);
	return aperture;
}


M port/chan.c => port/chan.c +5 -5
@@ 643,7 643,7 @@ saveregisters(void)
 * In place, rewrite name to compress multiple /, eliminate ., and process ..
 */
void
cleanname(Cname *n, int offset)
cleancname(Cname *n, int offset)
{
	char *p, *q, *dotdot, *name;
	int rooted;


@@ 669,7 669,7 @@ cleanname(Cname *n, int offset)
			if(q > dotdot) {	/* can backtrack */
				while(--q > dotdot && *q != '/')
					;
			} else if(!rooted) {	/* ``/..'' ≡ ``/'', but ``./../'' ≡ ``..'' */
			} else if(!rooted) {	/* /.. is / but ./../ is .. */
				if(q != name)
					*q++ = '/';
				*q++ = '.';


@@ 685,7 685,7 @@ cleanname(Cname *n, int offset)
	}
	if(q == name)	/* empty string is really ``.'' */
		*q++ = '.';
	*q = 0;
	*q = '\0';
	n->len = (q-name) + offset;
}



@@ 910,9 910,9 @@ namec(char *name, int amode, int omode, ulong perm)
	/* peculiar workaround for #/ */
	if(newname){
		if(cname->s[0]=='#' && cname->s[1]=='/')
			cleanname(cname, 2);
			cleancname(cname, 1);
		else
			cleanname(cname, 0);
			cleancname(cname, 0);
		cnameclose(c->name);
		c->name = cname;
	}else

M port/devdraw.c => port/devdraw.c +2 -2
@@ 1,9 1,9 @@
#include	"u.h"
#include	"../port/lib.h"
#include	"lib.h"
#include	"mem.h"
#include	"dat.h"
#include	"fns.h"
#include	"../port/error.h"
#include	"error.h"

#define	Image	IMAGE
#include	<draw.h>

M port/devsrv.c => port/devsrv.c +3 -1
@@ 114,7 114,7 @@ srvopen(Chan *c, int omode)
		error(Eshutdown);

	if(omode&OTRUNC)
		error(Eperm);
		error("srv file already exists");
	if(openmode(omode)!=sp->chan->mode && sp->chan->mode!=ORDWR)
		error(Eperm);



@@ 270,6 270,8 @@ srvwrite(Chan *c, void *va, long n, vlong)
		cclose(c1);
		nexterror();
	}
	if(c1->flag & (CCEXEC|CRCLOSE))
		error("posted fd has remove-on-close or close-on-exec");
	sp = srvlookup(nil, c->qid.path);
	if(sp == 0)
		error(Enonexist);

M port/lib.h => port/lib.h +2 -1
@@ 66,7 66,8 @@ extern	int	print(char*, ...);
/*
 * one-of-a-kind
 */
ulong	getcallerpc(void*);
extern	char*	cleanname(char*);
extern	ulong	getcallerpc(void*);
extern	long	strtol(char*, char**, int);
extern	ulong	strtoul(char*, char**, int);
extern	vlong	strtoll(char*, char**, int);