| plan 9 kernel history: overview | file list | diff list |
1993/0818/port/devproc.c (diff list | history)
| 1993/0501/sys/src/9/port/devproc.c:10,26 – 1993/0818/sys/src/9/port/devproc.c:10,28 (short | long | prev | next) | ||
| 1990/0227 | ||
| 1993/0501 | enum { | |
| 1990/0227 |
| |
| 1993/0818 | Qdir, Qfpregs, Qkregs, | |
| 1990/0227 | Qmem, Qnote, | |
| 1990/1110 | Qnotepg, | |
| 1990/0227 |
| |
| 1993/0818 | Qns, Qregs, | |
| 1991/0705 | Qsegment, | |
| 1990/0227 | Qstatus, Qtext, | |
| 1993/0309 | Qwait, | |
| 1993/0501 |
| |
| 1990/0227 | }; | |
| 1992/0814 | #define STATSIZE (2*NAMELEN+12+7*12) | |
| 1993/0501/sys/src/9/port/devproc.c:27,41 – 1993/0818/sys/src/9/port/devproc.c:29,45 | ||
| 1992/0824 | Dirtab procdir[] = { | |
| 1991/1109 | "ctl", {Qctl}, 0, 0000, | |
| 1993/0818 | "fpregs", {Qfpregs}, sizeof(FPsave), 0000, "kregs", {Qkregs}, sizeof(Ureg), 0000, | |
| 1991/1109 | "mem", {Qmem}, 0, 0000, "note", {Qnote}, 0, 0000, | |
| 1991/1112 | "notepg", {Qnotepg}, 0, 0000, | |
| 1991/1109 |
| |
| 1993/0818 | "ns", {Qns}, 0, 0400, "regs", {Qregs}, sizeof(Ureg), 0000, | |
| 1991/1112 | "segment", {Qsegment}, 0, 0444, "status", {Qstatus}, STATSIZE, 0444, | |
| 1991/1109 | "text", {Qtext}, 0, 0000, | |
| 1993/0309 | "wait", {Qwait}, 0, 0400, | |
| 1993/0501 |
| |
| 1990/0227 | }; | |
| 1991/1109 | /* Segment type from portdat.h */ | |
| 1993/0501/sys/src/9/port/devproc.c:173,188 – 1993/0818/sys/src/9/port/devproc.c:177,200 | ||
| 1990/0227 | tc->offset = 0; return tc; | |
| 1991/1110 | ||
| 1993/0818 | case Qkregs: case Qsegment: if(omode != OREAD) error(Eperm); break; | |
| 1990/0227 | case Qctl: case Qnote: | |
| 1991/1110 | case Qmem: | |
| 1991/0705 |
| |
| 1991/1112 |
| |
| 1993/0309 | case Qwait: | |
| 1993/0818 | case Qregs: case Qfpregs: | |
| 1990/0227 | break; | |
| 1990/1110 | ||
| 1993/0501 | case Qns: | |
| 1993/0818 | if(omode != OREAD) error(Eperm); | |
| 1993/0501 | c->aux = malloc(sizeof(Mntwalk)); break; | |
| 1993/0501/sys/src/9/port/devproc.c:251,259 – 1993/0818/sys/src/9/port/devproc.c:263,273 | ||
| 1990/0227 | { | |
| 1993/0501 | long l; | |
| 1990/0227 | Proc *p; | |
| 1991/0705 |
| |
| 1993/0309 | Waitq *wq; | |
| 1993/0818 | Ureg kur; uchar *rptr; | |
| 1993/0501 | Mntwalk *mw; | |
| 1993/0818 | int i, j, rsize; | |
| 1993/0501 | Segment *sg, *s; char *a = va, *sps; char statbuf[NSEG*32]; | |
| 1993/0501/sys/src/9/port/devproc.c:267,300 – 1993/0818/sys/src/9/port/devproc.c:281,314 | ||
| 1990/0227 | switch(QID(c->qid)){ case Qmem: | |
| 1991/1110 |
| |
| 1992/0824 |
| |
| 1993/0501 |
| |
| 1992/0824 |
| |
| 1993/0818 | if(offset < KZERO) return procctlmemio(p, offset, n, va, 1); | |
| 1992/0824 | ||
| 1992/0128 |
| |
| 1992/0628 |
| |
| 1991/1110 |
| |
| 1992/0628 |
| |
| 1991/1110 |
| |
| 1993/0818 | /* Protect crypt key memory */ if(offset >= palloc.cmembase&&offset < palloc.cmemtop) error(Eperm); /* validate physical kernel addresses */ if(offset < (ulong)end) { if(offset+n > (ulong)end) n = (ulong)end - offset; memmove(a, (char*)offset, n); break; | |
| 1990/0227 | } | |
| 1993/0818 | if(offset >= conf.base0 && offset < conf.npage0){ if(offset+n > conf.npage0) n = conf.npage0 - offset; memmove(a, (char*)offset, n); break; } if(offset >= conf.base1 && offset < conf.npage1){ if(offset+n > conf.npage1) n = conf.npage1 - offset; memmove(a, (char*)offset, n); break; } error(Ebadarg); | |
| 1991/1109 |
| |
| 1990/0227 | case Qnote: | |
| 1991/1216 | qlock(&p->debug); | |
| 1990/0227 | if(waserror()){ | |
| 1993/0501/sys/src/9/port/devproc.c:319,330 – 1993/0818/sys/src/9/port/devproc.c:333,360 | ||
| 1991/1216 | qunlock(&p->debug); | |
| 1990/0227 | return n; | |
| 1991/0411 |
| |
| 1993/0818 | case Qregs: rptr = (uchar*)p->dbgreg; rsize = sizeof(Ureg); goto regread; case Qkregs: memset(&kur, 0, sizeof(Ureg)); kur.pc = p->sched.pc; kur.sp = p->sched.sp; rptr = (uchar*)&kur; rsize = sizeof(Ureg); goto regread; case Qfpregs: rptr = (uchar*)&p->fpsave; rsize = sizeof(FPsave); regread: if(offset >= rsize) | |
| 1990/0227 | return 0; | |
| 1991/0411 |
| |
| 1993/0818 | if(offset+n > rsize) n = rsize - offset; memmove(a, rptr+offset, n); | |
| 1990/0227 | return n; case Qstatus: | |
| 1993/0501/sys/src/9/port/devproc.c:362,372 – 1993/0818/sys/src/9/port/devproc.c:392,406 | ||
| 1991/1110 | ||
| 1991/0705 | case Qsegment: j = 0; | |
| 1993/0818 | for(i = 0; i < NSEG; i++) { sg = p->seg[i]; if(sg == 0) continue; j += sprint(&statbuf[j], "%-6s %c %.8lux %.8lux %4d\n", sname[sg->type&SG_TYPE], sg->type&SG_RONLY ? 'R' : ' ', | |
| 1991/0705 | sg->base, sg->top, sg->ref); | |
| 1993/0818 | } | |
| 1991/0705 | if(offset >= j) return 0; if(offset+n > j) | |
| 1993/0501/sys/src/9/port/devproc.c:504,509 – 1993/0818/sys/src/9/port/devproc.c:538,559 | ||
| 1992/0114 | error(Ebadctl); | |
| 1991/1110 | ||
| 1993/0501 | n = procctlmemio(p, offset, n, va, 0); | |
| 1993/0818 | break; case Qregs: if(offset >= sizeof(Ureg)) return 0; if(offset+n > sizeof(Ureg)) n = sizeof(Ureg) - offset; setregisters(p->dbgreg, (char*)(p->dbgreg)+offset, va, n); break; case Qfpregs: if(offset >= sizeof(FPsave)) return 0; if(offset+n > sizeof(FPsave)) n = sizeof(FPsave) - offset; memmove((uchar*)&p->fpsave+offset, va, n); | |
| 1991/1110 | break; | |
| 1990/0227 | case Qctl: | |