1 /* $OpenBSD: getsecs.c,v 1.2 1996/11/27 19:54:55 niklas Exp $ */ 2 3 #include <sys/param.h> 4 #include "include/rpb.h" 5 #include "include/prom.h" 6 7 int 8 getsecs() 9 { 10 static long tnsec; 11 static long lastpcc, wrapsecs; 12 long curpcc, pccdiff; 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