~kris/9p

9hist

4fa489af282d5dc52a5122f1aea726e4ce4a0eaf — David du Colombier 35 years ago 1385db9
Plan 9 from Bell Labs 1991-04-02
2 files changed, 22 insertions(+), 7 deletions(-)

M power/dat.h
M power/devhotrod.c
M power/dat.h => power/dat.h +3 -2
@@ 98,8 98,9 @@ struct Hotmsg
	ulong	cmd;
	ulong	param[5];
	Rendez	r;
	short	intr;			/* flag: interrupt has occurred */
	short	abort;			/* flag: don't interrupt */
	uchar	intr;			/* flag: interrupt has occurred */
	uchar	abort;			/* flag: don't interrupt */
	uchar	wtype;			/* type of last message written */
};

#define	CHDIR	0x80000000L

M power/devhotrod.c => power/devhotrod.c +19 -5
@@ 25,7 25,7 @@ ulong	testbuf[NTESTBUF];
/*
 * If 1, ENABCKSUM causes data transfers to have checksums
 */
#define	ENABCKSUM	0
#define	ENABCKSUM	1

typedef struct Hotrod	Hotrod;



@@ 278,6 278,7 @@ hotrodread(Chan *c, void *buf, long n)
			 *  use supplied buffer, no need to lock for reply
			 */
			isflush = 0;
memset(buf, 0, n);
			mp = &((User*)(u->p->upage->pa|KZERO))->khot;
			if(mp->abort){	/* use reserved flush msg */
				mp = &((User*)(u->p->upage->pa|KZERO))->fhot;


@@ 313,11 314,21 @@ hotrodread(Chan *c, void *buf, long n)
			if(mp->param[2] != hotsum(buf, m, mp->param[2])){
				hp->addr->error++;
				print("hotrod cksum err is %lux sb %lux\n",
					hotsum(buf, n, 1), mp->param[2]);
{int i; for(i=0; i<8; i++) print("%lux\n", ((ulong*)buf)[i]); }
					hotsum(buf, m, 1), mp->param[2]);
				print("addr %lux\n", ((char*)buf)+m);
				{
					int i;
					ulong *p = buf;
					for(i=2; i<m/4; i++)
						if(p[i] != i-2)
							print("%d sb %d %lux %lux\n", p[i], i-2, p[i], &p[i]);
				}
				error(Eio);
			}
			if(!isflush)
			mp->abort = 0;
			if(isflush)
				u->khot.abort = 0;	/* flushed message's done too */
			else
				poperror();
		}else{
			/*


@@ 347,12 358,13 @@ hotrodread(Chan *c, void *buf, long n)
			if(mp->param[2] != hotsum((ulong*)hp->buf, m, mp->param[2])){
				hp->addr->error++;
				print("hotrod cksum err is %lux sb %lux\n",
					hotsum((ulong*)hp->buf, n, 1), mp->param[2]);
					hotsum((ulong*)hp->buf, m, 1), mp->param[2]);
				qunlock(&hp->buflock);
{int i; for(i=0; i<8; i++) print("%lux\n", ((ulong*)buf)[i]); }
				error(Eio);
			}
			memmove(buf, hp->buf, m);
			mp->abort = 0;
			qunlock(&hp->buflock);
		}
		return m;


@@ 383,6 395,7 @@ hotrodwrite(Chan *c, void *buf, long n)
			 * use supplied buffer, no need to lock for reply
			 */
			mp = &((User*)(u->p->upage->pa|KZERO))->khot;
			mp->wtype = ((char*)buf)[0];
			if(mp->abort)	/* use reserved flush msg */
				mp = &((User*)(u->p->upage->pa|KZERO))->fhot;
			qlock(hp);


@@ 397,6 410,7 @@ hotrodwrite(Chan *c, void *buf, long n)
			 * use hotrod buffer.  lock the buffer until the reply
			 */
			mp = &((User*)(u->p->upage->pa|KZERO))->uhot;
			mp->wtype = ((char*)buf)[0];
			qlock(&hp->buflock);
			qlock(hp);
			memmove(hp->buf, buf, n);