Nucleus
Barry Send APIC end of interrupt e07c7c5 (3 years, 3 months ago)diff --git a/kernel/acpi/trampoline.S b/kernel/acpi/trampoline.S index 5438967..3230e85 100644 --- a/kernel/acpi/trampoline.S +++ b/kernel/acpi/trampoline.S @@ -23,7 +23,7 @@ ap_trampoline: mov %ax, %sp /* Load the GDT */ - lgdt (ap_gdt_desc - ap_trampoline) + lgdt (apGdtDesc - ap_trampoline) /* Enable PM */ movl %cr0, %eax @@ -44,9 +44,9 @@ ap_pm: movl $0x1000, %ebp movl %ebp, %esp - movl ap_id, %eax + movl apId, %eax incl %eax - movl %eax, ap_id + movl %eax, apId movl $0x1F00, %esi movl (%esi,%eax), %ebx @@ -62,7 +62,7 @@ ap_pm: jmp 1b .align 4 -ap_gdt_start: +apGdtStart: /* Null */ .4byte 0x00000000 .4byte 0x00000000 @@ -72,8 +72,8 @@ ap_gdt_start: /* Data */ .4byte 0x0000FFFF .4byte 0x00CF9200 -ap_gdt_desc: - .2byte ap_gdt_desc - ap_gdt_start - 1 - .4byte (ap_gdt_start - ap_trampoline) + 0x1000 -ap_id: +apGdtDesc: + .2byte apGdtDesc - apGdtStart - 1 + .4byte (apGdtStart - ap_trampoline) + 0x1000 +apId: .4byte 0 diff --git a/kernel/idt.c b/kernel/idt.c index 52076a8..8a7f809 100644 --- a/kernel/idt.c +++ b/kernel/idt.c @@ -46,7 +46,8 @@ exc_handler(int num, struct InterruptFrame *frame, uint32_t err) ASSERT(exceptions[num]); exceptions[num](frame, err); - /* TODO: Send APIC EOI */ + /* Send APIC EOI */ + LAPIC(0xB0) = 0; } /* First level generic interrupt handler */ @@ -60,7 +61,8 @@ int_handler(int num, struct InterruptFrame *frame) if (num >= 8) outb(0xA0, 0x20); outb(0x20, 0x20); - /* TODO: Send APIC EOI*/ + /* Send APIC EOI*/ + LAPIC(0xB0) = 0; } /* Exceptions */ diff --git a/kernel/start.S b/kernel/start.S index 9c49ee8..725d6e6 100644 --- a/kernel/start.S +++ b/kernel/start.S @@ -8,15 +8,16 @@ header: .long 0, 0, 0, 0, 0 .section .bss, "aw", @nobits -stack_bottom: +.global stackTop +stackBottom: .skip 16384 -stack_top: +stackTop: .section .text .extern kmain .global _start _start: - mov $stack_top, %ebp + mov $stackTop, %ebp mov %ebp, %esp push %ebx push %esp