~kris/9p

9hist

123b9a72f9791f9d29d76ef10918a03cf0533e29 — David du Colombier 34 years ago 4dd6ce2
Plan 9 from Bell Labs 1991-11-16
5 files changed, 43 insertions(+), 25 deletions(-)

M pc/clock.c
M port/devcons.c
M port/devdk.c
M port/devproc.c
M port/net.c
M pc/clock.c => pc/clock.c +2 -0
@@ 87,10 87,12 @@ clock(Ureg *ur)
			else
				sched();
		}
#ifdef asdf
		if((ur->cs&0xffff) == UESEL){
			spllo();		/* in case we fault */
			(*(ulong*)(USTKTOP-BY2WD)) += TK2MS(1);	/* profiling clock */
			splhi();
		}
#endif asdf
	}
}

M port/devcons.c => port/devcons.c +8 -8
@@ 679,7 679,7 @@ conswrite(Chan *c, void *va, long n, ulong offset)
{
	char cbuf[64];
	char buf[256];
	long l, m;
	long l, bp;
	char *a = va;
	Mach *mp;
	int id, fd;


@@ 693,13 693,13 @@ conswrite(Chan *c, void *va, long n, ulong offset)
		 */
		l = n;
		while(l > 0){
			m = l;
			if(m > sizeof buf)
				m = sizeof buf;
			memmove(buf, a, m);
			putstrn(a, m);
			a += m;
			l -= m;
			bp = l;
			if(bp > sizeof buf)
				bp = sizeof buf;
			memmove(buf, a, bp);
			putstrn(a, bp);
			a += bp;
			l -= bp;
		}
		break;


M port/devdk.c => port/devdk.c +30 -14
@@ 106,14 106,17 @@ struct Line {
 *  dkmux line discipline is pushed onto.
 */
struct Dk {
	QLock;
	Chan	*csc;

	Lock;
	int	opened;

	char	name[64];	/* dk name */
	Queue	*wq;		/* dk output queue */
	Stream	*s;
	int	lines;		/* number of lines */
	int	ncsc;		/* csc line number */
	Chan	*csc;
	int	lines;		/* number of lines */
	Line	**linep;
	int	restart;
	int	urpwindow;


@@ 123,7 126,7 @@ struct Dk {
	Network	net;
	Netprot *prot;

	Block	*alloc;
	Block	*alloc;		/* blocks containing Line structs */
};
static Dk *dk;
static Lock dklock;


@@ 179,6 182,7 @@ extern Qinfo urpinfo;
Chan*		dkattach(char*);
static void	dkmuxconfig(Queue*, Block*);
static Chan*	dkopenline(Dk*, int);
static Chan*	dkopencsc(Dk*);
static int	dkmesg(Chan*, int, int, int, int);
static void	dkcsckproc(void*);
static void	dkanswer(Chan*, int, int);


@@ 504,7 508,7 @@ dkstclose(Queue *q)
			close(c);
		goto out;
	}	
	c = dkopenline(dp, dp->ncsc);
	c = dkopencsc(dp);

	/*
	 *  shake hands with dk


@@ 536,8 540,11 @@ dkstclose(Queue *q)
out:
	qlock(lp);
	lp->rq = 0;
	netdisown(&dp->net, lp->lineno);
	qunlock(lp);

	if(lp->lineno == dp->ncsc)
		dp->csc = 0;
	netdisown(&dp->net, lp->lineno);
}

/*


@@ 672,7 679,7 @@ dkmuxconfig(Queue *q, Block *bp)
	 *  all fighting for it at once.
	 */
	dp->closeall = 0;
	dp->csc = dkopenline(dp, dp->ncsc);
	dkopencsc(dp);

	/*
	 *  start a process to listen to csc messages


@@ 873,9 880,6 @@ dkcloneline(Chan *c)
	error(Enodev);
}

/*
 *  open the common signalling channel
 */
static Chan*
dkopenline(Dk *dp, int line)
{


@@ 896,6 900,21 @@ dkopenline(Dk *dp, int line)
}

/*
 *  open the common signalling channel
 */
static Chan*
dkopencsc(Dk *dp)
{
	qlock(dp);
	if(dp->csc == 0)
		dp->csc = dkopenline(dp, dp->ncsc);
	else
		incref(dp->csc);
	qunlock(dp);
	return dp->csc;
}

/*
 *  return the contents of the info files
 */
void


@@ 1037,7 1056,7 @@ dkcall(int type, Chan *c, char *addr, char *nuser, char *machine)
	 *  tell the controller we want to make a call
	 */
	DPRINT("dialout\n");
	csc = dkopenline(dp, dp->ncsc);
	csc = dkopencsc(dp);
	if(waserror()){
		close(csc);
		nexterror();


@@ 1610,10 1629,7 @@ dktimer(void *a)
		return;
	}

	/*
	 *  open csc
	 */
	c = dkopenline(dp, dp->ncsc);
	c = dkopencsc(dp);

	for(;;){
		if(dp->opened==0)

M port/devproc.c => port/devproc.c +1 -1
@@ 426,7 426,7 @@ procwrite(Chan *c, void *va, long n, ulong offset)

	case Qnote:
		if(p->kp)
			errors("can' t note kproc");
			errors("can't note kproc");
		k = kmap(p->upage);
		up = (User*)VA(k);
		if(up->p != p){

M port/net.c => port/net.c +2 -2
@@ 180,8 180,6 @@ netopen(Chan *c, int omode, Network *np)
		case Sdataqid:
		case Sctlqid:
			id = STREAMID(c->qid.path);
			if(netown(np, id, u->p->user, omode&7) < 0)
				error(Eperm);
			break;
		case Qlisten:
			streamopen(c, np->devp);


@@ 203,6 201,8 @@ netopen(Chan *c, int omode, Network *np)
			streamopen(c, np->devp);
			if(np->protop && c->stream->devq->next->info != np->protop)
				pushq(c->stream, np->protop);
			if(netown(np, id, u->p->user, omode&7) < 0)
				error(Eperm);
			break;
		}
	}