BXE: min->MIN, plus an spatch
[akaros.git] / kern / arch / x86 / apic.c
index f9aa04f..b975bc1 100644 (file)
@@ -20,8 +20,6 @@
 #include <bitmask.h>
 #include <arch/coreid.h>
 
-bool core_id_ready = FALSE;
-
 bool lapic_check_spurious(int trap_nr)
 {
        /* FYI: lapic_spurious is 255 on qemu and 15 on the nehalem..  We actually
@@ -79,7 +77,7 @@ bool lapic_get_irr_bit(uint8_t vector)
        return __lapic_get_isrr_bit(LAPIC_IRR, vector);
 }
 
-void lapic_mask_irq(int apic_vector)
+void lapic_mask_irq(struct irq_handler *unused, int apic_vector)
 {
        uintptr_t mm_reg;
        if (apic_vector < IdtLAPIC || IdtLAPIC + 4 < apic_vector) {
@@ -90,14 +88,14 @@ void lapic_mask_irq(int apic_vector)
        write_mmreg32(mm_reg, read_mmreg32(mm_reg) | LAPIC_LVT_MASK);
 }
 
-void lapic_unmask_irq(int apic_vector)
+void lapic_unmask_irq(struct irq_handler *unused, int apic_vector)
 {
        uintptr_t mm_reg;
        if (apic_vector < IdtLAPIC || IdtLAPIC + 4 < apic_vector) {
                warn("Bad apic vector %d\n", apic_vector);
                return;
        }
-       mm_reg = LAPIC_BASE + (apic_vector - IdtLAPIC) * 0x10;
+       mm_reg = LAPIC_BASE + 0x320 + (apic_vector - IdtLAPIC) * 0x10;
        write_mmreg32(mm_reg, read_mmreg32(mm_reg) & ~LAPIC_LVT_MASK);
 }
 
@@ -128,7 +126,7 @@ void __lapic_set_timer(uint32_t ticks, uint8_t vec, bool periodic, uint8_t div)
        // clears bottom bit and then set divider
        write_mmreg32(LAPIC_TIMER_DIVIDE, (read_mmreg32(LAPIC_TIMER_DIVIDE) &~0xf) |
                      (div & 0xf));
-       // set LVT with interrupt handling information
+       // set LVT with interrupt handling information.  also unmasks.
        write_mmreg32(LAPIC_LVT_TIMER, vec | (periodic << 17));
        write_mmreg32(LAPIC_TIMER_INIT, ticks);
        // For debugging when we expand this