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