getsecs.c revision 1.1
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		printf("getsecs: cc freq = %d, time to wrap = %d\n",
19		    ((struct rpb *)HWRPB_ADDR)->rpb_cc_freq, wrapsecs);
20	}
21
22	curpcc = alpha_rpcc() & 0xffffffff;
23	if (curpcc < lastpcc)
24		curpcc += 0x100000000;
25
26	tnsec += ((curpcc - lastpcc) * 1000000000) / ((struct rpb *)HWRPB_ADDR)->rpb_cc_freq;
27	lastpcc = curpcc;
28
29	return (tnsec / 1000000000);
30}
31