From bd303ed06096395778c80558e013b64bb47b9e9c Mon Sep 17 00:00:00 2001 From: kaashoek Date: Wed, 28 Jun 2006 16:35:03 +0000 Subject: timer interrupts --- mp.c | 38 +++++++++++++++++++++++++------------- 1 file changed, 25 insertions(+), 13 deletions(-) (limited to 'mp.c') diff --git a/mp.c b/mp.c index f267b8a..ca581e5 100644 --- a/mp.c +++ b/mp.c @@ -4,6 +4,7 @@ #include "memlayout.h" #include "param.h" #include "x86.h" +#include "traps.h" #include "mmu.h" /* @@ -115,12 +116,33 @@ lapic_write(int r, int data) *(lapicaddr+(r/sizeof(*lapicaddr))) = data; } + +void +lapic_timerinit() +{ + cprintf("%d: init timer\n", cpu()); + lapic_write(LAPIC_TDCR, LAPIC_X1); + lapic_write(LAPIC_TIMER, LAPIC_CLKIN | LAPIC_PERIODIC | (IRQ_OFFSET + IRQ_TIMER)); + lapic_write(LAPIC_TCCR, 1000000); + lapic_write(LAPIC_TICR, 1000000); +} + +void +lapic_timerintr() +{ + cprintf("%d: timer interrupt!\n", cpu()); + lapic_write (LAPIC_EOI, 0); +} + void lapic_init(int c) { uint32_t r, lvt; cprintf("lapic_init %d\n", c); + + irq_setmask_8259A(0xFFFF); + lapic_write(LAPIC_DFR, 0xFFFFFFFF); r = (lapic_read(LAPIC_ID)>>24) & 0xFF; lapic_write(LAPIC_LDR, (1<version != 1 && pcmp->version != 4)) return 3; - cprintf("MP spec rev #: %x\n", mp->specrev); + cprintf("Mp spec rev #: %x\n", mp->specrev); return 0; } @@ -348,8 +362,6 @@ mp_init() lapic_init(bcpu-cpus); cprintf("ncpu: %d boot %d\n", ncpu, bcpu-cpus); - lapic_online(); - extern uint8_t _binary_bootother_start[], _binary_bootother_size[]; memmove((void *) APBOOTCODE,_binary_bootother_start, (uint32_t) _binary_bootother_size); -- cgit v1.2.3