Subversion Repositories shark

Compare Revisions

Ignore whitespace Rev 243 → Rev 244

/shark/trunk/oslib/kl/advtimer.c
117,12 → 117,12
 
if (init_step < 5) {
init_step++;
sti();
#ifdef IRQ8_DEBUG
message(")");
#endif
 
sti();
 
return;
}
171,9 → 171,9
 
signed long long start;
signed long long end;
signed long long dtsc1,dtsc2,dtsc;
signed long long dtsc;
signed long start_8253, end_8253, delta1_8253, delta2_8253, delta_8253;
signed long start_8253, end_8253, delta_8253;
 
cli();
219,67 → 219,11
rdtscll(end);
 
//Delta TSC
dtsc1 = end - start;
dtsc = end - start;
 
//Delta PIT
delta1_8253 = start_8253 - end_8253 + 0x10001;
delta_8253 = start_8253 - end_8253 + 0x10000;
 
 
/* Set the Gate high, disable speaker */
outp(0x61, (inp(0x61) & ~0x02) | 0x01);
 
outp(0x43,0xB0); /* binary, mode 0, LSB/MSB, Ch 2 */
outp(0x42,0xFF); /* LSB of count */
outp(0x42,0xFF); /* MSB of count */
outp(0x43,0x00);
start_8253 = inp(0x42);
start_8253 |= inp(0x42) << 8;
rdtscll(start);
do {
outp(0x43,0x00);
end_8253 = inp(0x42);
end_8253 |= inp(0x42) << 8;
 
} while (end_8253 > COUNTER_END);
 
do {
outp(0x43,0x00);
end_8253 = inp(0x42);
end_8253 |= inp(0x42) << 8;
} while (end_8253 < COUNTER_END);
 
do {
outp(0x43,0x00);
end_8253 = inp(0x42);
end_8253 |= inp(0x42) << 8;
} while (end_8253 > COUNTER_END);
 
outp(0x43,0x00);
end_8253 = inp(0x42);
end_8253 |= inp(0x42) << 8;
rdtscll(end);
 
//Delta TSC
dtsc2 = end - start;
 
//Delta PIT
delta2_8253 = start_8253 - end_8253 + 0x10001;
 
if (dtsc1 > dtsc2) {
dtsc = dtsc1;
delta_8253 = delta1_8253;
} else {
dtsc = dtsc2;
delta_8253 = delta2_8253;
}
 
if (delta_8253 > 0x20000) {
message("Error calculating Delta PIT\n");
ll_abort(10);