getsecs.c revision 1.2
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.2Scgd#if 0 191.1Scgd printf("getsecs: cc freq = %d, time to wrap = %d\n", 201.1Scgd ((struct rpb *)HWRPB_ADDR)->rpb_cc_freq, wrapsecs); 211.2Scgd#endif 221.1Scgd } 231.1Scgd 241.1Scgd curpcc = alpha_rpcc() & 0xffffffff; 251.1Scgd if (curpcc < lastpcc) 261.1Scgd curpcc += 0x100000000; 271.1Scgd 281.1Scgd tnsec += ((curpcc - lastpcc) * 1000000000) / ((struct rpb *)HWRPB_ADDR)->rpb_cc_freq; 291.1Scgd lastpcc = curpcc; 301.1Scgd 311.1Scgd return (tnsec / 1000000000); 321.1Scgd} 33