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); |