Subversion Repositories shark

Compare Revisions

Ignore whitespace Rev 125 → Rev 126

/shark/trunk/oslib/kl/advtimer.c
35,13 → 35,9
unsigned char use_tsc = 0; //Enable the TSC counter mode
unsigned char use_cmos = 0; //Enable the RTC correction
 
//Max single delta_clk_per_msec increment
#define MAX_DELTA_INK 10
//Max single delta_clk_per_msec increment = clk_per_msec / MAX_DIV_INK;
#define MAX_DIV_INK 30000
 
//Max delta_clk_per_msec before declare lost
//the CMOS sync
#define MAX_DELTA_TOT 10000
 
signed long long init_tsc;
signed long long init_nsec; //Warp around 292 years !!
signed long long clk_per_msec;
60,10 → 56,12
static unsigned long init_step = 0;
signed long long actual_tsc;
 
signed long max_dcms = clk_per_msec / MAX_DIV_INK;
signed long long dt,dn;
signed long delta_clk_per_msec;
 
cli();
CMOS_READ(0x0C,set);
93,24 → 91,18
//clk_per_msec adjustment
if (delta_clk_per_msec < 0) {
if (delta_clk_per_msec > -MAX_DELTA_INK)
if (delta_clk_per_msec > -max_dcms)
clk_per_msec += delta_clk_per_msec;
else
clk_per_msec -= MAX_DELTA_INK;
clk_per_msec -= max_dcms;
} else {
if (delta_clk_per_msec < MAX_DELTA_INK)
if (delta_clk_per_msec < max_dcms)
clk_per_msec += delta_clk_per_msec;
else
clk_per_msec += MAX_DELTA_INK;
clk_per_msec += max_dcms;
}
if (delta_clk_per_msec > MAX_DELTA_TOT || delta_clk_per_msec < -MAX_DELTA_TOT) {
message("Error: Delta_clk_per_msec |%ld| > %ld\n",\
(long)delta_clk_per_msec,(long)MAX_DELTA_TOT);
ll_abort(10);
}
last_delta_clk_per_msec = delta_clk_per_msec;
total_delta_clk_per_msec += delta_clk_per_msec;