plan 9 kernel history: overview | file list | diff list

1990/1110/port/devproc.c (diff list | history)

1990/0914/sys/src/9/port/devproc.c:4,111990/1110/sys/src/9/port/devproc.c:4,13 (short | long | prev | next)
1990/0227    
#include	"dat.h" 
#include	"fns.h" 
#include	"errno.h" 
1990/0914    
#include 	"io.h" 
1990/0227    
 
1990/1110    
/* BUG mips only TAKE IT OUT */ 
#include	"io.h" 
 
1990/0227    
#include	"devtab.h" 
 
enum{ 
1990/0914/sys/src/9/port/devproc.c:13,181990/1110/sys/src/9/port/devproc.c:15,21
1990/0227    
	Qctl, 
	Qmem, 
	Qnote, 
1990/1110    
	Qnotepg, 
1990/0227    
	Qproc, 
	Qstatus, 
	Qtext, 
1990/0914/sys/src/9/port/devproc.c:22,271990/1110/sys/src/9/port/devproc.c:25,31
1990/0227    
	"ctl",		Qctl,		0,			0600, 
	"mem",		Qmem,		0,			0600, 
	"note",		Qnote,		0,			0600, 
1990/1110    
	"notepg",	Qnotepg,	0,			0200, 
1990/0227    
	"proc",		Qproc,		sizeof(Proc),		0600, 
	"status",	Qstatus,	NAMELEN+12+6*12,	0600, 
	"text",		Qtext,		0,			0600, 
1990/0914/sys/src/9/port/devproc.c:109,1141990/1110/sys/src/9/port/devproc.c:113,119
1990/0227    
procopen(Chan *c, int omode) 
{ 
	Proc *p; 
1990/1110    
	Pgrp *pg; 
1990/0227    
	Orig *o; 
	Chan *tc; 
 
1990/0914/sys/src/9/port/devproc.c:118,1231990/1110/sys/src/9/port/devproc.c:123,129
1990/03081    
		goto done; 
	} 
1990/0227    
	p = proctab(SLOT(c->qid)); 
1990/1110    
	pg = p->pgrp; 
1990/0227    
	if((p->pid&PIDMASK) != PID(c->qid)) 
    Died: 
		error(0, Eprocdied); 
1990/0914/sys/src/9/port/devproc.c:147,1571990/1110/sys/src/9/port/devproc.c:153,170
1990/0227    
	case Qctl: 
	case Qnote: 
		break; 
1990/1110    
 
	case Qnotepg: 
		if(omode != OWRITE) 
			error(0, Eperm); 
		c->pgrpid = (pg->pgrpid<<PIDSHIFT)|((pg->index+1)<<QSHIFT); 
		break; 
 
1990/0227    
	case Qdir: 
1990/0614    
	case Qmem: 
1990/0227    
	case Qproc: 
	case Qstatus: 
1990/0424    
		if(omode!=OREAD) 
1990/1110    
		if(omode != OREAD) 
1990/0424    
			error(0, Eperm); 
		break; 
1990/0227    
	default: 
1990/0914/sys/src/9/port/devproc.c:264,2701990/1110/sys/src/9/port/devproc.c:277,283
1990/0227    
		} 
 
		/* u area */ 
		if(c->offset>=USERADDR && c->offset<=USERADDR+BY2PG){ 
1990/1110    
		if(c->offset>=USERADDR && c->offset<USERADDR+BY2PG){ 
1990/0227    
			if(c->offset+n > USERADDR+BY2PG) 
				n = USERADDR+BY2PG - c->offset; 
			pg = p->upage; 
1990/0914/sys/src/9/port/devproc.c:283,2891990/1110/sys/src/9/port/devproc.c:296,303
1990/0614    
				n = KZERO+conf.npage0*BY2PG - c->offset; 
1990/0914    
			memcpy(a, (char*)c->offset, n); 
			return n; 
		} else if(c->offset>=UNCACHED && c->offset<UNCACHED+conf.npage0*BY2PG){ 
1990/1110    
		}else if(c->offset>=UNCACHED && c->offset<UNCACHED+conf.npage0*BY2PG){ 
			/* BUT mips only TAKE IT OUT */ 
1990/0914    
			if(c->offset+n > UNCACHED+conf.npage0*BY2PG) 
				n = UNCACHED+conf.npage0*BY2PG - c->offset; 
1990/0227    
			memcpy(a, (char*)c->offset, n); 
1990/0914/sys/src/9/port/devproc.c:353,3581990/1110/sys/src/9/port/devproc.c:367,373
1990/0227    
procwrite(Chan *c, void *va, long n) 
{ 
	Proc *p; 
1990/1110    
	Pgrp *pg; 
1990/0227    
	User *up; 
1990/0614    
	KMap *k; 
1990/0227    
	char buf[ERRLEN]; 
1990/0914/sys/src/9/port/devproc.c:359,3641990/1110/sys/src/9/port/devproc.c:374,399
1990/0227    
 
	if(c->qid & CHDIR) 
		error(0, Eisdir); 
1990/1110    
 
	/* 
	 * Special case: don't worry about process, just use remembered group 
	 */ 
	if(QID(c->qid) == Qnotepg){ 
		pg = pgrptab(SLOT(c->pgrpid)); 
		lock(&pg->debug); 
		if(waserror()){ 
			unlock(&pg->debug); 
			nexterror(); 
		} 
		if((pg->pgrpid&PIDMASK) != PID(c->pgrpid)){ 
			unlock(&pg->debug); 
  	  		goto Died; 
		} 
		pgrpnote(pg, va, n, NUser); 
		unlock(&pg->debug); 
		return n; 
	} 
 
1990/0227    
	p = proctab(SLOT(c->qid)); 
	lock(&p->debug); 
	if(waserror()){ 


source code copyright © 1990-2005 Lucent Technologies; see license
Plan 9 distribution
comments to russ cox (rsc@swtch.com)