~kris/9p

9hist

ab3f03d8c78a03dccd267c3d93659836fc06280f — David du Colombier 31 years ago cb5c09b
Plan 9 from Bell Labs 1995-02-09
2 files changed, 20 insertions(+), 14 deletions(-)

M pc/devi82365.c
M pc/mmu.c
M pc/devi82365.c => pc/devi82365.c +18 -12
@@ 117,7 117,6 @@ enum
};
struct I82365
{
	QLock;
	int	type;
	int	dev;
	int	nslot;


@@ 130,6 129,7 @@ static int ncontroller;
/* a Slot slot */
struct Slot
{
	Lock;
	int	ref;

	I82365	*cp;		/* controller for this slot */


@@ 168,6 168,7 @@ struct Slot
	ulong	otherwait;

	/* memory maps */
	QLock	mlock;		/* lock down the maps */
	int	time;
	PCMmap	mmap[Nmap];
};


@@ 322,10 323,11 @@ getmap(Slot *pp, ulong offset, int attr)
		pp->gotmem = 1;

		/* grab ISA address space for memory maps */
		for(i = 0; i < Nmap; i++)
		for(i = 0; i < Nmap; i++){
			pp->mmap[i].isa = getisa(0, Mchunk, BY2PG);
		if(pp->mmap[i].isa == 0)
			panic("getmap");
			if(pp->mmap[i].isa == 0)
				panic("getmap");
		}
	}

	/* look for a map that starts in the right place */


@@ 368,19 370,19 @@ getmap(Slot *pp, ulong offset, int attr)
static void
increfp(Slot *pp)
{
	qlock(pp->cp);
	lock(pp);
	if(pp->ref++ == 0)
		slotena(pp);
	qunlock(pp->cp);
	unlock(pp);
}

static void
decrefp(Slot *pp)
{
	qlock(pp->cp);
	lock(pp);
	if(pp->ref-- == 1)
		slotdis(pp);
	qunlock(pp->cp);
	unlock(pp);
}

char*


@@ 653,7 655,6 @@ pcmread(int dev, int attr, void *a, long n, ulong offset)
	pp = slot + dev;
	if(pp->memlen < offset)
		return 0;
	qlock(pp->cp);
	ac = a;
	if(pp->memlen < offset + n)
		n = pp->memlen - offset;


@@ 670,7 671,6 @@ pcmread(int dev, int attr, void *a, long n, ulong offset)
		offset += i;
		ac += i;
	}
	qunlock(pp->cp);
	return n;
}



@@ 687,7 687,11 @@ i82365read(Chan *c, void *a, long n, ulong offset)
		return devdirread(c, a, n, 0, 0, pcmgen);
	case Qmem:
	case Qattr:
		qlock(&pp->mlock);
		n = pcmread(DEV(c), p==Qattr, a, n, offset);
		qunlock(&pp->mlock);
		if(n < 0)
			error(Eio);
		break;
	case Qctl:
		cp = buf;


@@ 734,7 738,6 @@ pcmwrite(int dev, int attr, void *a, long n, ulong offset)
	pp = slot + dev;
	if(pp->memlen < offset)
		return 0;
	qlock(pp->cp);
	ac = a;
	if(pp->memlen < offset + n)
		n = pp->memlen - offset;


@@ 749,7 752,6 @@ pcmwrite(int dev, int attr, void *a, long n, ulong offset)
		offset += i;
		ac += i;
	}
	qunlock(pp->cp);
	return n;
}



@@ 766,7 768,11 @@ i82365write(Chan *c, void *a, long n, ulong offset)
		pp = slot + DEV(c);
		if(pp->occupied == 0 || pp->enabled == 0)
			error(Eio);
		qlock(&pp->mlock);
		n = pcmwrite(pp->dev, p == Qattr, a, n, offset);
		qunlock(&pp->mlock);
		if(n < 0)
			error(Eio);
		break;
	default:
		error(Ebadusefd);

M pc/mmu.c => pc/mmu.c +2 -2
@@ 377,7 377,7 @@ ulong
getisa(ulong addr, int len, int align)
{
	int i;
	ulong os, s, e;
	long os, s, e;

	lock(&isaalloc);
	os = s = e = 0;


@@ 386,7 386,7 @@ getisa(ulong addr, int len, int align)
		if(s == 0)
			continue;
		e = isaalloc.e[i];
		if(addr && addr >= s && addr < isaalloc.e[i])
		if(addr && addr >= s && addr < e)
			break;
		if(align > 0)
			s = ((s + align - 1)/align)*align;