~kris/9p

9hist

ead8d85243a8c61936b548363147b3cc3cb39e1a — David du Colombier 23 years ago 0458899
Plan 9 from Bell Labs 2003-04-09
4 files changed, 82 insertions(+), 38 deletions(-)

M boot/bootip.c
M ip/rudp.c
M pc/sd53c8xx.c
M port/portclock.c
M boot/bootip.c => boot/bootip.c +0 -2
@@ 112,7 112,6 @@ setauthaddr(char *proto, int port)
void
configtcp(Method*)
{
	print("t");	
	sleep(100);
	configip();
	sleep(100);


@@ 133,7 132,6 @@ connecttcp(void)
void
configil(Method*)
{
	print("i");
	configip();
	setauthaddr("tcp", 567);
}

M ip/rudp.c => ip/rudp.c +0 -2
@@ 759,10 759,8 @@ relackproc(void *a)
	Proto *rudp;
	Reliable *r;
	Conv **s, *c;
	Rudppriv *upriv;

	rudp = (Proto *)a;
	upriv = rudp->priv;

loop:
	tsleep(&up->sleep, return0, 0, Rudptickms);

M pc/sd53c8xx.c => pc/sd53c8xx.c +76 -34
@@ 52,8 52,8 @@ extern SDifc sd53c8xxifc;

#else

#define KPRINT	if(0) print
#define IPRINT	if(0) print
#define KPRINT	if(1) print
#define IPRINT	if(1) print
#define DEBUG(n)	(0)
#define IFLUSH()



@@ 391,8 391,9 @@ dsaalloc(Controller *c, int target, int lun)
	ilock(&c->dsalist);
	if ((d = c->dsalist.freechain) == 0) {
		d = xalloc(sizeof(*d));
		if (DEBUG(1))
		if (DEBUG(1)) {
			KPRINT(PRINTPREFIX "%d/%d: allocated new dsa %lux\n", target, lun, (ulong)d);
		}
		lesetl(d->next, 0);
		lesetl(&d->stateb, A_STATE_ALLOCATED);
		if (legetl(c->dsalist.head) == 0)


@@ 402,8 403,9 @@ dsaalloc(Controller *c, int target, int lun)
		c->dsalist.tail = d;
	}
	else {
		if (DEBUG(1))
		if (DEBUG(1)) {
			KPRINT(PRINTPREFIX "%d/%d: reused dsa %lux\n", target, lun, (ulong)d);
		}
		c->dsalist.freechain = d->freechain;
		lesetl(&d->stateb, A_STATE_ALLOCATED);
	}


@@ 446,7 448,12 @@ dumpncrregs(Controller *c, int intr)
	Ncr *n = c->n;
	int depth = c->v->registers / 4;

	KPRINT("sa = %.8lux\n", c->scriptpa);
	if (intr) {
		IPRINT("sa = %.8lux\n", c->scriptpa);
	}
	else {
		KPRINT("sa = %.8lux\n", c->scriptpa);
	}
	for (i = 0; i < depth; i++) {
		int j;
		for (j = 0; j < 4; j++) {


@@ 455,16 462,20 @@ dumpncrregs(Controller *c, int intr)

			/* display little-endian to make 32-bit values readable */
			p = (uchar*)n+k*4;
			if (intr)
			if (intr) {
				IPRINT(" %.2x%.2x%.2x%.2x %.2x %.2x", p[3], p[2], p[1], p[0], k * 4, (k * 4) + 0x80);
			else
			}
			else {
				KPRINT(" %.2x%.2x%.2x%.2x %.2x %.2x", p[3], p[2], p[1], p[0], k * 4, (k * 4) + 0x80);
			}
			USED(p);
		}
		if (intr)
		if (intr) {
			IPRINT("\n");
		else
		}
		else {
			KPRINT("\n");
		}
	}
}	



@@ 1119,33 1130,38 @@ sd53c8xxinterrupt(Ureg *ur, void *a)
	Ncr *n = c->n;

	USED(ur);
	if (DEBUG(1))
	if (DEBUG(1)) {
		IPRINT(PRINTPREFIX "int\n");
	}
	ilock(c);
	istat = n->istat;
	if (istat & Intf) {
		Dsa *d;
		int wokesomething = 0;
		if (DEBUG(1))
		if (DEBUG(1)) {
			IPRINT(PRINTPREFIX "Intfly\n");
		}
		n->istat = Intf;
		/* search for structures in A_STATE_DONE */
		for (d = KPTR(legetl(c->dsalist.head)); d; d = KPTR(legetl(d->next))) {
			if (d->stateb == A_STATE_DONE) {
				d->p9status = d->status;
				if (DEBUG(1))
				if (DEBUG(1)) {
					IPRINT(PRINTPREFIX "waking up dsa %lux\n", (ulong)d);
				}
				wakeup(d);
				wokesomething = 1;
			}
		}
		if (!wokesomething)
		if (!wokesomething) {
			IPRINT(PRINTPREFIX "nothing to wake up\n");
		}
	}

	if ((istat & (Sip | Dip)) == 0) {
		if (DEBUG(1))
		if (DEBUG(1)) {
			IPRINT(PRINTPREFIX "int end %x\n", istat);
		}
		iunlock(c);
		return;
	}


@@ 1155,8 1171,9 @@ sd53c8xxinterrupt(Ureg *ur, void *a)
	dsa = (Dsa *)DMASEG_TO_KADDR(legetl(n->dsa));
	c->running = 0;
	if (istat & Sip) {
		if (DEBUG(1))
		if (DEBUG(1)) {
			IPRINT("sist = %.4x\n", sist);
		}
		if (sist & 0x80) {
			ulong addr;
			ulong sa;


@@ 1167,9 1184,10 @@ sd53c8xxinterrupt(Ureg *ur, void *a)

			addr = legetl(n->dsp);
			sa = addr - c->scriptpa;
			if (DEBUG(1) || DEBUG(2))
			if (DEBUG(1) || DEBUG(2)) {
				IPRINT(PRINTPREFIX "%d/%d: Phase Mismatch sa=%.8lux\n",
				    dsa->target, dsa->lun, sa);
			}
			/*
			 * now recover
			 */


@@ 1184,9 1202,10 @@ sd53c8xxinterrupt(Ureg *ur, void *a)
				dsa->dmablks = 0;
				n->scratcha[2] = 0;
				advancedata(&dsa->data_buf, tbc);
				if (DEBUG(1) || DEBUG(2))
				if (DEBUG(1) || DEBUG(2)) {
					IPRINT(PRINTPREFIX "%d/%d: transferred = %ld residue = %ld\n",
					    dsa->target, dsa->lun, tbc, legetl(dsa->data_buf.dbc));
				}
				cont = E_data_mismatch_recover;
			}
			else if (sa == E_data_in_block_mismatch) {


@@ 1216,9 1235,10 @@ sd53c8xxinterrupt(Ureg *ur, void *a)
				dsa->dmablks = 0;
				n->scratcha[2] = 0;
				advancedata(&dsa->data_buf, tbc);
				if (DEBUG(1) || DEBUG(2))
				if (DEBUG(1) || DEBUG(2)) {
					IPRINT(PRINTPREFIX "%d/%d: transferred = %ld residue = %ld\n",
					    dsa->target, dsa->lun, tbc, legetl(dsa->data_buf.dbc));
				}
				cont = E_data_mismatch_recover;
			}
			else if (sa == E_data_out_block_mismatch) {


@@ 1290,8 1310,9 @@ sd53c8xxinterrupt(Ureg *ur, void *a)
			}
		}
		/*else*/ if (sist & 0x400) {
			if (DEBUG(0))
			if (DEBUG(0)) {
				IPRINT(PRINTPREFIX "%d/%d Sto\n", dsa->target, dsa->lun);
			}
			dsa->p9status = SDtimeout;
			dsa->stateb = A_STATE_DONE;
			softreset(c);


@@ 1311,8 1332,9 @@ sd53c8xxinterrupt(Ureg *ur, void *a)
		}
	}
	if (istat & Dip) {
		if (DEBUG(1))
		if (DEBUG(1)) {
			IPRINT("dstat = %.2x\n", dstat);
		}
		/*else*/ if (dstat & Ssi) {
			ulong *p = DMASEG_TO_KADDR(legetl(n->dsp));
			ulong w = (uchar *)p - (uchar *)c->script;


@@ 1336,9 1358,10 @@ sd53c8xxinterrupt(Ureg *ur, void *a)
				/* back up one in the data transfer */
				IPRINT(PRINTPREFIX "%d/%d: ignore wide residue %d, WSR = %d\n",
				    dsa->target, dsa->lun, n->scratcha[1], n->scntl2 & 1);
				if (dsa->flag == 2)
				if (dsa->flag == 2) {
					IPRINT(PRINTPREFIX "%d/%d: transfer over; residue ignored\n",
					    dsa->target, dsa->lun);
				}
				else {
					calcblockdma(dsa, legetl(dsa->dmaaddr) - 1,
					    dsa->dmablks * A_BSIZE + legetl(dsa->data_buf.dbc) + 1);


@@ 1427,8 1450,9 @@ sd53c8xxinterrupt(Ureg *ur, void *a)
				ulong *dsp = DMASEG_TO_KADDR(legetl(n->dsp));
				int x;
				IPRINT(PRINTPREFIX "code at %lux", dsp - c->script);
				for (x = 0; x < 6; x++)
				for (x = 0; x < 6; x++) {
					IPRINT(" %.8lux", dsp[x]);
				}
				IPRINT("\n");
				USED(dsp);
				cont = -2;


@@ 1444,15 1468,18 @@ sd53c8xxinterrupt(Ureg *ur, void *a)
				cont = -2;
				break;
			case A_SIR_NOTIFY_RESELECTED_ON_SELECT:
				IPRINT(PRINTPREFIX "%d/%d: reselected during select\n",
				    dsa->target, dsa->lun);
				if (DEBUG(2)) {
					IPRINT(PRINTPREFIX "%d/%d: reselected during select\n",
 					    dsa->target, dsa->lun);
				}
				cont = -2;
				break;
			case A_error_reselected:		/* dsa isn't valid here */
				print(PRINTPREFIX "reselection error\n");
				dumpncrregs(c, 1);
				for (dsa = KPTR(legetl(c->dsalist.head)); dsa; dsa = KPTR(legetl(dsa->next)))
				for (dsa = KPTR(legetl(c->dsalist.head)); dsa; dsa = KPTR(legetl(dsa->next))) {
					IPRINT(PRINTPREFIX "dsa target %d lun %d state %d\n", dsa->target, dsa->lun, dsa->stateb);
				}
				break;
			default:
				IPRINT(PRINTPREFIX "%d/%d: script error %ld\n",


@@ 1534,8 1561,9 @@ dumpwritedata(uchar *data, int datalen)

	if (datalen) {
		KPRINT(PRINTPREFIX "write:");
		for (i = 0, bp = data; i < 50 && i < datalen; i++, bp++)
		for (i = 0, bp = data; i < 50 && i < datalen; i++, bp++) {
			KPRINT("%.2ux", *bp);
		}
		if (i < datalen) {
			KPRINT("...");
		}


@@ 1555,8 1583,9 @@ dumpreaddata(uchar *data, int datalen)

	if (datalen) {
		KPRINT(PRINTPREFIX "read:");
		for (i = 0, bp = data; i < 50 && i < datalen; i++, bp++)
		for (i = 0, bp = data; i < 50 && i < datalen; i++, bp++) {
			KPRINT("%.2ux", *bp);
		}
		if (i < datalen) {
			KPRINT("...");
		}


@@ 1601,7 1630,7 @@ sd53c8xxrio(SDreq* r)
	uchar *bp;
	Controller *c;
	uchar target_expo, my_expo;
	int bc, check, status, target;
	int bc, check, i, status, target;

	if((target = r->unit->subno) == 0x07)
		return r->status = SDtimeout;	/* assign */


@@ 1677,12 1706,14 @@ docheck:

	if (DEBUG(0)) {
		KPRINT(PRINTPREFIX "%d/%d: exec: ", target, r->lun);
		for (bp = r->cmd; bp < &r->cmd[r->clen]; bp++)
		for (bp = r->cmd; bp < &r->cmd[r->clen]; bp++) {
			KPRINT("%.2ux", *bp);
		}
		KPRINT("\n");
		if (!r->write)
		if (!r->write) {
			KPRINT(PRINTPREFIX "%d/%d: exec: limit=(%d)%ld\n",
			  target, r->lun, d->dmablks, legetl(d->data_buf.dbc));
		}
		else
			dumpwritedata(r->data, r->dlen);
	}


@@ 1730,9 1761,10 @@ docheck:
	 * adjust datalen
	 */
	r->rlen = r->dlen;
	if (DEBUG(0))
	if (DEBUG(0)) {
		KPRINT(PRINTPREFIX "%d/%d: exec: before rlen adjust: dmablks %d flag %d dbc %lud\n",
		    target, r->lun, d->dmablks, d->flag, legetl(d->data_buf.dbc));
	}
	r->rlen = r->dlen;
	if (d->flag != 2) {
		r->rlen -= d->dmablks * A_BSIZE;


@@ 1740,9 1772,10 @@ docheck:
	}
	if(!r->write)
		dumpreaddata(r->data, r->rlen);
	if (DEBUG(0))
	if (DEBUG(0)) {
		KPRINT(PRINTPREFIX "%d/%d: exec: p9status=%d status %d rlen %ld\n",
		    target, r->lun, d->p9status, status, r->rlen);
	}
	/*
	 * spot the identify
	 */


@@ 1778,8 1811,17 @@ docheck:
		status = SDcheck;
		r->flags |= SDvalidsense;
	}
	KPRINT(PRINTPREFIX "%d: r flags %8.8uX status %d rlen %ld\n",
		target, r->flags, status, r->rlen);
	if(DEBUG(0))
		KPRINT(PRINTPREFIX "%d: r flags %8.8uX status %d rlen %ld\n",
			target, r->flags, status, r->rlen);
	if(r->flags & SDvalidsense){
		if(!DEBUG(0))
			KPRINT(PRINTPREFIX "%d: r flags %8.8uX status %d rlen %ld\n",
				target, r->flags, status, r->rlen);
		for(i = 0; i < r->rlen; i++)
			KPRINT(" %2.2uX", r->sense[i]);
		KPRINT("\n");
	}
	return r->status = status;
}


M port/portclock.c => port/portclock.c +6 -0
@@ 96,6 96,12 @@ void
hzclock(Ureg *ur)
{
	m->ticks++;
if((m->ticks % 10000) == 0){
	extern int allints[];
	int i;
	for(i=0; i < 32; i++)
		print("[%d] %d\n", i, allints[i]);
}
	if(m->proc)
		m->proc->pc = ur->pc;