getsecs.c revision 1.3
1#include <sys/param.h>
2#include "include/prom.h"
3#include "include/rpb.h"
4
5int
6getsecs()
7{
8	static long tnsec;
9	static long lastpcc, wrapsecs;
10	long curpcc, pccdiff;
11
12	if (tnsec == 0) {
13		tnsec = 1;
14		lastpcc = alpha_rpcc() & 0xffffffff;
15		wrapsecs = (0xffffffff /
16		    ((struct rpb *)HWRPB_ADDR)->rpb_cc_freq) + 1;
17
18#if 0
19		printf("getsecs: cc freq = %d, time to wrap = %d\n",
20		    ((struct rpb *)HWRPB_ADDR)->rpb_cc_freq, wrapsecs);
21#endif
22	}
23
24	curpcc = alpha_rpcc() & 0xffffffff;
25	if (curpcc < lastpcc)
26		curpcc += 0x100000000;
27
28	tnsec += ((curpcc - lastpcc) * 1000000000) / ((struct rpb *)HWRPB_ADDR)->rpb_cc_freq;
29	lastpcc = curpcc;
30
31	return (tnsec / 1000000000);
32}
33