163,8 → 163,10 |
# define CLOCK_TICK_RATE 1193180 /* Underlying HZ */ |
#endif |
|
#define COUNTER_END 1000 |
#define COUNTER_END 300 |
|
#define barrier() __asm__ __volatile__("" ::: "memory"); |
|
//TSC Calibration (idea from the linux kernel code) |
void ll_calibrate_tsc(void) |
{ |
184,10 → 186,15 |
outp(0x42,0xFF); /* LSB of count */ |
outp(0x42,0xFF); /* MSB of count */ |
|
barrier(); |
rdtscll(start); |
barrier(); |
outp(0x43,0x00); |
start_8253 = inp(0x42); |
start_8253 |= inp(0x42) << 8; |
barrier(); |
rdtscll(start); |
barrier(); |
|
do { |
|
197,6 → 204,10 |
|
} while (end_8253 > COUNTER_END); |
|
outp(0x43,0x00); |
end_8253 = inp(0x42); |
end_8253 |= inp(0x42) << 8; |
|
do { |
|
outp(0x43,0x00); |
203,8 → 214,12 |
end_8253 = inp(0x42); |
end_8253 |= inp(0x42) << 8; |
|
} while (end_8253 < COUNTER_END); |
} while (end_8253 <= COUNTER_END); |
|
outp(0x43,0x00); |
end_8253 = inp(0x42); |
end_8253 |= inp(0x42) << 8; |
|
do { |
|
outp(0x43,0x00); |
213,10 → 228,15 |
|
} while (end_8253 > COUNTER_END); |
|
barrier(); |
rdtscll(end); |
barrier(); |
outp(0x43,0x00); |
end_8253 = inp(0x42); |
end_8253 |= inp(0x42) << 8; |
barrier(); |
rdtscll(end); |
barrier(); |
|
//Delta TSC |
dtsc = end - start; |