getsecs.c revision 1.2
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