## diffname port/devintrts.c 1999/0701 ## diff -e /dev/null /n/emeliedump/1999/0701/sys/src/brazil/port/devintrts.c 0a /* */ #include "u.h" #include "../port/lib.h" #include "mem.h" #include "dat.h" #include "fns.h" #include "../port/error.h" enum { Qdir, Qintrts, }; static Dirtab intrtsdir[] = { "intrts", { Qintrts, 0 }, 0, 0666, }; void (*saveintrts)(void) = nil; /* interrupt timestamps, trap() fills intrts each interrupt */ uvlong intrts; static struct { Lock; int vno; /* vector to save timestamps for */ int n; /* number of valid timestamps in ts[] */ uvlong ts[128]; /* time stamps */ } tsalloc; /* called with interrupts off by interrupt routine */ void _saveintrts(void) { lock(&tsalloc); if(tsalloc.n < nelem(tsalloc.ts)) tsalloc.ts[tsalloc.n++] = m->intrts; unlock(&tsalloc); } /* read interrupt timestamps */ static long readintrts(void *buf, int n) { n /= sizeof(uvlong); if(n <= 0) return 0; ilock(&tsalloc); if(n > tsalloc.n) n = tsalloc.n; memmove(buf, tsalloc.ts, n*sizeof(uvlong)); tsalloc.n = 0; iunlock(&tsalloc); return n*sizeof(uvlong); } static void intrtsreset(void) { saveintrts = _saveintrts; } static Chan* intrtsattach(char* spec) { return devattach('Z', spec); /* everything good was taken */ } int intrtswalk(Chan* c, char* name) { return devwalk(c, name, intrtsdir, nelem(intrtsdir), devgen); } static void intrtsstat(Chan* c, char* dp) { devstat(c, dp, intrtsdir, nelem(intrtsdir), devgen); } static Chan* intrtsopen(Chan* c, int omode) { return devopen(c, omode, intrtsdir, nelem(intrtsdir), devgen); } static void intrtsclose(Chan*) { } static long intrtsread(Chan* c, void* a, long n, vlong) { switch(c->qid.path & ~CHDIR){ case Qdir: return devdirread(c, a, n, intrtsdir, nelem(intrtsdir), devgen); case Qintrts: return readintrts(a, n); } error(Eperm); return 0; } static long intrtswrite(Chan*, void*, long, vlong) { error(Eperm); return 0; } Dev intrtsdevtab = { 'Z', "intrts", intrtsreset, devinit, intrtsattach, devclone, intrtswalk, intrtsstat, intrtsopen, devcreate, intrtsclose, intrtsread, devbread, intrtswrite, devbwrite, devremove, devwstat, }; . ## diffname port/devintrts.c 1999/0711 ## diff -e /n/emeliedump/1999/0701/sys/src/brazil/port/devintrts.c /n/emeliedump/1999/0711/sys/src/brazil/port/devintrts.c 37c iunlock(&tsalloc); . 34c ilock(&tsalloc); . ## diffname port/devintrts.c 2001/0527 # deleted ## diff -e /n/emeliedump/1999/0711/sys/src/brazil/port/devintrts.c /n/emeliedump/2001/0527/sys/src/9/port/devintrts.c 1,134d