#include #include #include #include void init_timer(void) { /* Set the apic timer to no interrupts and periodic mode */ lapic_write(LAPIC_LVTT, (1 << 17)|(1<< 16)|(0 << 12)|(0 << 0)); /* Set the divider to 1, no divider */ lapic_write(LAPIC_TDCR, LAPIC_TDR_DIV_1); /* Set the initial counter to 0xffffffff */ lapic_write(LAPIC_TMICT, 0xffffffff); } void udelay(unsigned usecs) { uint32_t start, value, ticks; /* Calculate the number of ticks to run, our FSB runs a 200Mhz */ ticks = usecs * 200; start = lapic_read(LAPIC_TMCCT); do { value = lapic_read(LAPIC_TMCCT); } while((start - value) < ticks); }