|
|
1.1 root 1: /*
2: * read a fine-resolution clock,
3: * derived from the VAX interval timer
4: */
5: #include "sys/param.h"
6: #include "sys/mtpr.h"
7: #include "sys/clock.h"
8: #include "sys/systm.h" /* for time and lbolt */
9: #include "sys/buf.h" /* just for B_READ */
10: #include "sys/conf.h"
11: #include "sys/user.h"
12:
13: static int clkread();
14: struct cdevsw clkcdev = cdinit(nulldev, nulldev, clkread, nodev, nodev);
15:
16: #define FINERES (-CLK60HZ)
17:
18: static
19: clkread(dev)
20: int dev;
21: {
22: register int s;
23: long finetime;
24:
25: s = spl7();
26: finetime = FINERES + mfpr(ICR); /* ICR is negative remaining count */
27: if (mfpr(ICCS) & ICCS_INT)
28: finetime += FINERES; /* one tick already past */
29: finetime += (lbolt * FINERES) + (time * FINERES * HZ);
30: splx(s);
31: iomove((caddr_t)&finetime, MIN(u.u_count, sizeof(finetime)), B_READ);
32: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.