- Add ACPI-based timer (PMTIMER) functionality.

This commit is contained in:
Jan Stoess 2007-08-09 16:51:03 +02:00
parent e5929db6c2
commit ed2cfd80fa
1 changed files with 19 additions and 0 deletions

View File

@ -38,6 +38,8 @@
#include INC_PLAT(82093.h)
#include INC_ARCHX(x86,apic.h)
#include INC_ARCHX(x86,apic.h)
#include INC_ARCHX(x86,ioport.h)
#include <sync.h>
#include <linear_ptab.h>
@ -143,6 +145,10 @@ private:
void check_ioapic_shared(word_t id);
private:
bool pmtimer_available;
word_t pmtimer_ioport;
public:
word_t get_lapic_map() { return lapic_map; }
@ -163,6 +169,19 @@ public:
void set_cpu(word_t irq, word_t cpu);
static const word_t pmtimer_ticks = 3579545;
static const word_t pmtimer_mask = 0xFFFFFF;
u32_t pmtimer_read() { return in_u32(pmtimer_ioport) & pmtimer_mask; }
bool has_pmtimer() { return pmtimer_available; }
void pmtimer_wait(const word_t ms)
{
/* Need to wait ms * pmtimer_ticks / 1000; */
const word_t delta = (ms * pmtimer_ticks) / 1000;
word_t start = pmtimer_read();
while (pmtimer_read() < start + delta) ;
}
/* handler invoked on interrupt */
void handle_irq(word_t irq) __asm__("intctrl_t_handle_irq");