| 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,11 – 1990/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 |
| |
| 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,18 – 1990/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,27 – 1990/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,114 – 1990/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,123 – 1990/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,157 – 1990/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 |
| |
| 1990/1110 | if(omode != OREAD) | |
| 1990/0424 | error(0, Eperm); break; | |
| 1990/0227 | default: | |
| 1990/0914/sys/src/9/port/devproc.c:264,270 – 1990/1110/sys/src/9/port/devproc.c:277,283 | ||
| 1990/0227 | } /* u area */ | |
| 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,289 – 1990/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; | |
| 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,358 – 1990/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,364 – 1990/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()){ | |