/trunk/kernel/arch/ia32/src/drivers/i8254.c |
39,7 → 39,6 |
#include <arch/types.h> |
#include <time/clock.h> |
#include <time/delay.h> |
#include <arch/cycle.h> |
#include <arch/interrupt.h> |
#include <arch/drivers/i8259.h> |
#include <arch/drivers/i8254.h> |
138,11 → 137,11 |
|
CPU->delay_loop_const = ((MAGIC_NUMBER*LOOPS)/1000) / ((t1-t2)-(o1-o2)) + (((MAGIC_NUMBER*LOOPS)/1000) % ((t1-t2)-(o1-o2)) ? 1 : 0); |
|
clk1 = get_cycle(); |
delay(1 << SHIFT); |
clk2 = get_cycle(); |
clk1 = rdtsc(); |
delay(1<<SHIFT); |
clk2 = rdtsc(); |
|
CPU->frequency_mhz = (clk2 - clk1) >> SHIFT; |
CPU->frequency_mhz = (clk2-clk1)>>SHIFT; |
|
return; |
} |
/trunk/kernel/arch/ia32/include/asm.h |
228,6 → 228,15 |
return v; |
} |
|
static inline uint64_t rdtsc(void) |
{ |
uint64_t v; |
|
__asm__ volatile("rdtsc\n" : "=A" (v)); |
|
return v; |
} |
|
/** Return current IP address */ |
static inline uintptr_t * get_ip() |
{ |