xref: /netbsd/sys/arch/alpha/stand/netboot/getsecs.c (revision bf9ec67e)
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 
7 int
8 getsecs()
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