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