add: pic work
This commit is contained in:
parent
a4411b0581
commit
f3db3060af
@ -53,6 +53,9 @@ void irq_handler(void)
|
|||||||
int8_t index = -1;
|
int8_t index = -1;
|
||||||
__asm__ volatile("movb %%bl, %0" ::"m"(index));
|
__asm__ volatile("movb %%bl, %0" ::"m"(index));
|
||||||
|
|
||||||
pic_send_eoi(NTMFDP);
|
if (index == 0) {
|
||||||
kpanic("cramptés\n");
|
pic_send_eoi(index);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
kpanic("%d\n", index);
|
||||||
}
|
}
|
||||||
|
@ -5,6 +5,7 @@
|
|||||||
#include "apic.h"
|
#include "apic.h"
|
||||||
#include "gdt.h"
|
#include "gdt.h"
|
||||||
#include "idt.h"
|
#include "idt.h"
|
||||||
|
#include "kprintf.h"
|
||||||
|
|
||||||
#define PIC1 0x20 /* IO base address for master PIC */
|
#define PIC1 0x20 /* IO base address for master PIC */
|
||||||
#define PIC2 0xA0 /* IO base address for slave PIC */
|
#define PIC2 0xA0 /* IO base address for slave PIC */
|
||||||
@ -37,13 +38,12 @@ void init_idt(void)
|
|||||||
idtr.offset = (uintptr_t)&idt_entries[0];
|
idtr.offset = (uintptr_t)&idt_entries[0];
|
||||||
idtr.size = (uint16_t)sizeof(struct idt_entry) * IDT_SIZE - 1;
|
idtr.size = (uint16_t)sizeof(struct idt_entry) * IDT_SIZE - 1;
|
||||||
|
|
||||||
for (uint8_t i = 0; i < 32; i++)
|
uint8_t i;
|
||||||
|
for (i = 0; i < 32; i++)
|
||||||
idt_set_descriptor(i, isr_stub_table[i], 0x8E);
|
idt_set_descriptor(i, isr_stub_table[i], 0x8E);
|
||||||
for (uint8_t i = 32; i < 48; i++)
|
|
||||||
idt_set_descriptor(i, irq_stub_table[i], 0x8E);
|
|
||||||
load_idt(&idtr);
|
|
||||||
// https://wiki.osdev.org/8259_PIC#Programming_with_the_8259_PIC
|
|
||||||
pic_remap(0x20, 0x28);
|
pic_remap(0x20, 0x28);
|
||||||
pic_disable();
|
for (uint8_t j = 0; j < 16; j++)
|
||||||
enable_apic();
|
idt_set_descriptor(i + j, irq_stub_table[j], 0x8E);
|
||||||
|
load_idt(&idtr);
|
||||||
|
asm volatile("sti");
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user