4.2 distribution
[unix-history] / usr / src / sys / vax / uba / kgclock.c
CommitLineData
92e67171 1/* kgclock.c 6.1 83/07/29 */
dbd3c33b 2
7f562db3
SL
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"
dbd3c33b 10
f7f6f047 11#include "../h/param.h"
dbd3c33b 12#include "../h/map.h"
dbd3c33b 13#include "../h/buf.h"
7f562db3
SL
14#include "../h/time.h"
15#include "../h/kernel.h"
16
f7f6f047 17#include "../vaxuba/ubavar.h"
dbd3c33b
KM
18
19int kgprobe(), kgattach();
20struct uba_device *kginfo[1];
21u_short kgstd[] = { 0177560, 0 };
22struct uba_driver kgdriver =
23 { kgprobe, 0, kgattach, 0, kgstd, "kg", kginfo };
24
25struct klregs {
26 u_short fill[2];
27 u_short tcsr;
28 u_short tbuf;
29};
30#define KLSTRT 0300 /* intr enbl + done */
31struct klregs *klbase;
32
33kgprobe(reg)
7f562db3 34 caddr_t reg;
dbd3c33b
KM
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
44kgattach(ui)
f7f6f047 45 struct uba_device *ui;
dbd3c33b 46{
f7f6f047 47
dbd3c33b
KM
48 klbase = (struct klregs *)ui->ui_addr;
49}
50
51/*
52 * start the sampling clock
53 */
54startkgclock()
55{
f7f6f047 56
dbd3c33b
KM
57 if (klbase)
58 klbase->tcsr = KLSTRT; /* enable interrupts */
59}
60
61/* ARGSUSED */
62kgclock(dev, r0, r1, r2, r3, r4 ,r5, pc, ps)
f7f6f047
SL
63 caddr_t pc;
64 int ps;
dbd3c33b
KM
65{
66 register int k;
7f562db3
SL
67 static long otime;
68 static long calibrate;
dbd3c33b
KM
69
70 klbase->tbuf = 0377; /* reprime clock (scope sync too) */
224a0d4a
KM
71 if (phz == 0) {
72 if (otime == 0) {
7f562db3 73 otime = time.tv_sec + 1;
224a0d4a
KM
74 calibrate = 0;
75 }
7f562db3 76 if (time.tv_sec >= otime)
224a0d4a 77 calibrate++;
7f562db3 78 if (time.tv_sec >= otime + 4) {
224a0d4a
KM
79 phz = calibrate / 4;
80 otime = 0;
81 }
82 return;
83 }
f7f6f047 84 gatherstats(pc, ps); /* this routine lives in kern_clock.c */
dbd3c33b 85}
7f562db3 86#endif