~kris/9p

9hist

a81ae850244b93768e3abea9a699043e9cd7e10a — David du Colombier 31 years ago fc19d1f
Plan 9 from Bell Labs 1994-11-18
3 files changed, 46 insertions(+), 41 deletions(-)

M pc/devastar.c
M pc/ns16552.h
M port/devns16552.c
M pc/devastar.c => pc/devastar.c +16 -11
@@ 344,17 344,17 @@ astargen(Chan *c, Dirtab *tab, int ntab, int i, Dir *db)
			t = i%3;
			switch(t){
			case 0:
				sprint(db->name, "eia%d%2.2d", dev, ch+1);
				sprint(db->name, "eia%d%2.2d", dev, ch);
				db->mode = astar[dev]->c[ch].perm;
				db->qid.path = QID(dev, ch, Qdata);
				break;
			case 1:
				sprint(db->name, "eia%d%2.2dctl", dev, ch+1);
				sprint(db->name, "eia%d%2.2dctl", dev, ch);
				db->mode = astar[dev]->c[ch].perm;
				db->qid.path = QID(dev, ch, Qctl);
				break;
			case 2:
				sprint(db->name, "eia%d%2.2dstat", dev, ch+1);
				sprint(db->name, "eia%d%2.2dstat", dev, ch);
				db->mode = 0444;
				db->qid.path = QID(dev, ch, Qstat);
				break;


@@ 391,26 391,24 @@ astarreset(void)
		if(isaconfig("serial", i, a) == 0){
			xfree(a);
			astar[nastar] = 0;
			break;
			continue;
		}

		if(strcmp(a->type, "a100i") == 0 || strcmp(a->type,"A100I") == 0)
			a->ramsize = 16*1024;
		else if(strcmp(a->type, "a200i") == 0 || strcmp(a->type,"A200I") == 0)
			a->ramsize = 256*1024;
		else
		else {
			xfree(a);
			astar[nastar] = 0;
			continue;

		c = inb(a->port+ISActl1);
		outb(a->port+ISActl1, c | ISAnotdl);
		a->memsize = a->ramsize;
		}

		if(a->mem == 0)
			a->mem = 0xD4000;
		if(a->irq == 0)
			a->irq = 15;
		a->id = i;
		a->page = -1;

		if(astarsetup(a) < 0){
			xfree(a);


@@ 421,7 419,13 @@ astarreset(void)
			a->addr, a->irq);
		nastar++;

		setvec(Int0vec + a->irq, astarintr, a);
		c = inb(a->port+ISActl1);
		outb(a->port+ISActl1, c & ~ISAnotdl);
		a->memsize = Pramsize;

		c = inb(a->port+ISActl2);
		outb(a->port+ISActl2, c & ~ISAmen);
		a->page = -1;
	}
}



@@ 790,6 794,7 @@ startcp(Astar *a)
	}

	/* enable control program interrupt generation */
	setvec(Int0vec + a->irq, astarintr, a);
	LOCKPAGE(a, 0);
	a->gcb->cmd2 = LEUS(Gintack);
	UNLOCKPAGE(a);

M pc/ns16552.h => pc/ns16552.h +9 -5
@@ 84,7 84,7 @@ mp008intr(Ureg *ur, void *arg)
void
ns16552install(void)
{
	int i, j, port;
	int i, j, port, nscard;
	char *p;
	Scard *sc;
	char name[NAMELEN];


@@ 106,11 106,13 @@ ns16552install(void)
		ns16552special(atoi(p), 9600, &kbdq, &printq, kbdcr2nl);

	/* the rest come out of plan9.ini */
	nscard = 0;
	for(i = 0; i < Maxcard; i++){
		sc = scard[i] = xalloc(sizeof(Scard));
		sc = scard[nscard] = xalloc(sizeof(Scard));
		if(isaconfig("serial", i, sc) == 0){
			xfree(sc);
			break;
			scard[nscard] = 0;
			continue;
		}

		if(strcmp(sc->type, "MP008") == 0 || strcmp(sc->type, "mp008") == 0){


@@ 129,7 131,7 @@ ns16552install(void)
			setvec(Int0vec+sc->irq, mp008intr, sc);
			port = sc->port;
			for(j=0; j < sc->size; j++){
				sprint(name, "eia%d%2.2d", i, j);
				sprint(name, "eia%d%2.2d", nscard, j);
				ns16552setup(port, sc->freq, name);
				port += 8;
			}


@@ 141,10 143,12 @@ ns16552install(void)
			 */
			if(sc->freq == 0)
				sc->freq = UartFREQ;
			sprint(name, "eia%d00", i);
			sprint(name, "eia%d00", nscard);
			ns16552setup(sc->port, sc->freq, name);
			setvec(Int0vec+sc->irq, ns16552intrx, (void*)(nuart-1));
		}

		nscard++;
	}
}


M port/devns16552.c => port/devns16552.c +21 -25
@@ 319,7 319,6 @@ ns16552enable(Uart *p)
	 */
	ns16552dtr(p, 1);
	ns16552rts(p, 1);
	ns16552setbaud(p, 9600);

	/*
	 *  assume we can send


@@ 532,18 531,12 @@ void
ns16552intr(int dev)
{
	uchar ch;
	int s, l, loops, shakes;
	int s, l, loops;
	Uart *p = uart[dev];

	shakes = 0;
	for(loops = 0;; loops++){
		p->istat = s = uartrdreg(p, Istat);
		if(loops > 100000){
			if(shakes++ < 3){
				/* try resetting the interface */
				ns16552shake(p);
				continue;
			}
		if(loops > 10000000){
			print("lstat %ux mstat %ux istat %ux iena %ux ferr %d oerr %d",
				uartrdreg(p, Lstat), uartrdreg(p, Mstat),
				s, uartrdreg(p, Iena), p->frame, p->overrun);


@@ 744,11 737,13 @@ ns16552open(Chan *c, int omode)
	case Ndataqid:
		p = uart[NETID(c->qid.path)];
		qlock(p);
		p->opens++;
		ns16552enable(p);
		qreopen(p->iq);
		qreopen(p->oq);
		if(p->opens++ == 0){
			ns16552enable(p);
			qreopen(p->iq);
			qreopen(p->oq);
		}
		qunlock(p);
		break;
	}

	return c;


@@ 768,21 763,22 @@ ns16552close(Chan *c)

	if(c->qid.path & CHDIR)
		return;
	if(NETTYPE(c->qid.path) == Nstatqid)
		return;
	if((c->flag & COPEN) == 0)
		return;

	p = uart[NETID(c->qid.path)];
	qlock(p);
	p->opens--;
	if(p->opens == 0){
		ns16552disable(p);
		qclose(p->iq);
		qclose(p->oq);
		p->ip = p->istage;
	switch(NETTYPE(c->qid.path)){
	case Ndataqid:
	case Nctlqid:
		p = uart[NETID(c->qid.path)];
		qlock(p);
		if(--(p->opens) == 0){
			ns16552disable(p);
			qclose(p->iq);
			qclose(p->oq);
			p->ip = p->istage;
		}
		qunlock(p);
		break;
	}
	qunlock(p);
}

static long