getsecs.c revision 1.5
11.5Sperry/* $NetBSD: getsecs.c,v 1.5 1998/01/05 07:02:49 perry Exp $ */ 21.5Sperry 31.1Scgd#include <sys/param.h> 41.1Scgd#include "include/prom.h" 51.1Scgd#include "include/rpb.h" 61.1Scgd 71.1Scgdint 81.1Scgdgetsecs() 91.1Scgd{ 101.1Scgd static long tnsec; 111.1Scgd static long lastpcc, wrapsecs; 121.4Sdrochner long curpcc; 131.1Scgd 141.1Scgd if (tnsec == 0) { 151.3Scgd tnsec = 1; 161.1Scgd lastpcc = alpha_rpcc() & 0xffffffff; 171.1Scgd wrapsecs = (0xffffffff / 181.1Scgd ((struct rpb *)HWRPB_ADDR)->rpb_cc_freq) + 1; 191.1Scgd 201.2Scgd#if 0 211.1Scgd printf("getsecs: cc freq = %d, time to wrap = %d\n", 221.1Scgd ((struct rpb *)HWRPB_ADDR)->rpb_cc_freq, wrapsecs); 231.2Scgd#endif 241.1Scgd } 251.1Scgd 261.1Scgd curpcc = alpha_rpcc() & 0xffffffff; 271.1Scgd if (curpcc < lastpcc) 281.1Scgd curpcc += 0x100000000; 291.1Scgd 301.1Scgd tnsec += ((curpcc - lastpcc) * 1000000000) / ((struct rpb *)HWRPB_ADDR)->rpb_cc_freq; 311.1Scgd lastpcc = curpcc; 321.1Scgd 331.1Scgd return (tnsec / 1000000000); 341.1Scgd} 35