| plan 9 kernel history: overview | file list | diff list |
1995/0910/port/devcons.c (diff list | history)
| 1995/0815/sys/src/9/port/devcons.c:27,35 – 1995/0910/sys/src/9/port/devcons.c:27,37 (short | long | prev | next) | ||
| 1995/0112 | int ctlpoff; | |
| 1993/0601 | } kbd; | |
| 1992/0321 | char sysname[NAMELEN]; | |
| 1991/1109 | ||
| 1995/0910 | static ulong randomread(uchar*, ulong); static void randomreset(void); | |
| 1990/0227 | void | |
| 1991/0607 | printinit(void) | |
| 1990/0227 | { | |
| 1995/0815/sys/src/9/port/devcons.c:330,335 – 1995/0910/sys/src/9/port/devcons.c:332,338 | ||
| 1990/0227 | Qpgrpid, Qpid, Qppid, | |
| 1995/0910 | Qrandom, | |
| 1991/0705 | Qswap, | |
| 1992/0321 | Qsysname, | |
| 1992/0428 | Qsysstat, | |
| 1995/0815/sys/src/9/port/devcons.c:356,361 – 1995/0910/sys/src/9/port/devcons.c:359,365 | ||
| 1991/1127 | "pgrpid", {Qpgrpid}, NUMSIZE, 0444, "pid", {Qpid}, NUMSIZE, 0444, "ppid", {Qppid}, NUMSIZE, 0444, | |
| 1995/0910 | "random", {Qrandom}, 0, 0664, | |
| 1991/1211 | "swap", {Qswap}, 0, 0664, | |
| 1992/0428 | "sysname", {Qsysname}, 0, 0664, "sysstat", {Qsysstat}, 0, 0666, | |
| 1995/0815/sys/src/9/port/devcons.c:406,411 – 1995/0910/sys/src/9/port/devcons.c:410,416 | ||
| 1990/0227 | void consreset(void) { | |
| 1995/0910 | randomreset(); | |
| 1990/0227 | } void | |
| 1995/0815/sys/src/9/port/devcons.c:642,647 – 1995/0910/sys/src/9/port/devcons.c:647,655 | ||
| 1992/0321 | case Qsysname: return readstr(offset, buf, n, sysname); | |
| 1995/0910 | case Qrandom: return randomread(buf, n); | |
| 1990/0227 | default: | |
| 1991/1127 | print("consread %lux\n", c->qid); error(Egreg); | |
| 1995/0815/sys/src/9/port/devcons.c:878,881 – 1995/0910/sys/src/9/port/devcons.c:886,985 | ||
| 1991/1102 | sprint(buf, f, conffile); ksetenv("terminal", buf); | |
| 1995/0910 | } static struct { QLock; Rendez r; uchar buf[4096]; uchar *ep; uchar *rp; uchar *wp; uchar next; uchar bits; uchar wakeme; } rb; ulong randomcount; void randomreset(void) { rb.ep = rb.buf + sizeof(rb.buf); rb.rp = rb.wp = rb.buf; } /* * produce random bits in a circular buffer */ void randomclock(void) { int i; uchar *p; i = rb.rp - rb.wp; if(i == 1 || i == (1 - sizeof(rb.buf))) return; rb.bits = (rb.bits<<2) ^ randomcount; rb.next += 2; if(rb.next != 8) return; rb.next = 0; *rb.wp ^= rb.bits; p = rb.wp+1; if(p == rb.ep) p = rb.buf; rb.wp = p; if(rb.wakeme) wakeup(&rb.r); } static int notempty(void*) { return rb.wp != rb.rp; } /* * consume random bytes from a circular buffer */ static ulong randomread(uchar *p, ulong n) { int i, sofar; uchar *e; if(waserror()){ qunlock(&rb); nexterror(); } qlock(&rb); for(sofar = 0; sofar < n; sofar += i){ i = rb.wp - rb.rp; if(i == 0){ rb.wakeme = 1; sleep(&rb.r, notempty, 0); rb.wakeme = 0; continue; } if(i < 0) i = rb.ep - rb.rp; if(i > n) i = n; memmove(p + sofar, rb.rp, i); e = rb.rp + i; if(e == rb.ep) e = rb.buf; rb.rp = e; } qunlock(&rb); poperror(); return n; | |
| 1991/1102 | } | |