getsecs.c revision 1.1
11.1Scgd#include <sys/param.h> 21.1Scgd#include "include/prom.h" 31.1Scgd#include "include/rpb.h" 41.1Scgd 51.1Scgdint 61.1Scgdgetsecs() 71.1Scgd{ 81.1Scgd static long tnsec; 91.1Scgd static long lastpcc, wrapsecs; 101.1Scgd long curpcc, pccdiff; 111.1Scgd 121.1Scgd if (tnsec == 0) { 131.1Scgd tnsec = 1; 141.1Scgd lastpcc = alpha_rpcc() & 0xffffffff; 151.1Scgd wrapsecs = (0xffffffff / 161.1Scgd ((struct rpb *)HWRPB_ADDR)->rpb_cc_freq) + 1; 171.1Scgd 181.1Scgd printf("getsecs: cc freq = %d, time to wrap = %d\n", 191.1Scgd ((struct rpb *)HWRPB_ADDR)->rpb_cc_freq, wrapsecs); 201.1Scgd } 211.1Scgd 221.1Scgd curpcc = alpha_rpcc() & 0xffffffff; 231.1Scgd if (curpcc < lastpcc) 241.1Scgd curpcc += 0x100000000; 251.1Scgd 261.1Scgd tnsec += ((curpcc - lastpcc) * 1000000000) / ((struct rpb *)HWRPB_ADDR)->rpb_cc_freq; 271.1Scgd lastpcc = curpcc; 281.1Scgd 291.1Scgd return (tnsec / 1000000000); 301.1Scgd} 31