|
|
1.1 root 1: /* kgclock.c 6.1 83/07/29 */
2:
3: #include "kg.h"
4: #if NKG > 0
5: /*
6: * KL-11 as profiling clock
7: */
8: #include "../machine/pte.h"
9: #include "../machine/psl.h"
10:
11: #include "../h/param.h"
12: #include "../h/map.h"
13: #include "../h/buf.h"
14: #include "../h/time.h"
15: #include "../h/kernel.h"
16:
17: #include "../vaxuba/ubavar.h"
18:
19: int kgprobe(), kgattach();
20: struct uba_device *kginfo[1];
21: u_short kgstd[] = { 0177560, 0 };
22: struct uba_driver kgdriver =
23: { kgprobe, 0, kgattach, 0, kgstd, "kg", kginfo };
24:
25: struct klregs {
26: u_short fill[2];
27: u_short tcsr;
28: u_short tbuf;
29: };
30: #define KLSTRT 0300 /* intr enbl + done */
31: struct klregs *klbase;
32:
33: kgprobe(reg)
34: caddr_t reg;
35: {
36: register int br, cvec; /* value-result */
37: register struct klregs *klp = (struct klregs *)reg;
38:
39: klp->tcsr = KLSTRT;
40: DELAY(100000);
41: klp->tcsr = 0;
42: }
43:
44: kgattach(ui)
45: struct uba_device *ui;
46: {
47:
48: klbase = (struct klregs *)ui->ui_addr;
49: }
50:
51: /*
52: * start the sampling clock
53: */
54: startkgclock()
55: {
56:
57: if (klbase)
58: klbase->tcsr = KLSTRT; /* enable interrupts */
59: }
60:
61: /* ARGSUSED */
62: kgclock(dev, r0, r1, r2, r3, r4 ,r5, pc, ps)
63: caddr_t pc;
64: int ps;
65: {
66: register int k;
67: static long otime;
68: static long calibrate;
69:
70: klbase->tbuf = 0377; /* reprime clock (scope sync too) */
71: if (phz == 0) {
72: if (otime == 0) {
73: otime = time.tv_sec + 1;
74: calibrate = 0;
75: }
76: if (time.tv_sec >= otime)
77: calibrate++;
78: if (time.tv_sec >= otime + 4) {
79: phz = calibrate / 4;
80: otime = 0;
81: }
82: return;
83: }
84: gatherstats(pc, ps); /* this routine lives in kern_clock.c */
85: }
86: #endif
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.