From 9a60edf72a3112adae4a914134da1adaf472ad5d Mon Sep 17 00:00:00 2001 From: Michal Idziorek Date: Wed, 13 May 2015 16:18:24 +0200 Subject: fixing gdt and interrupts --- kernel/interrupts.c | 49 ++++++++++++++++++++++--------------------------- 1 file changed, 22 insertions(+), 27 deletions(-) (limited to 'kernel/interrupts.c') diff --git a/kernel/interrupts.c b/kernel/interrupts.c index fed2b28..51d8f8e 100644 --- a/kernel/interrupts.c +++ b/kernel/interrupts.c @@ -51,7 +51,7 @@ void int_default() { log(FOOLOS_MODULE_NAME,FOOLOS_LOG_INFO,"default handler"); } -/* + void show_error(uint32_t err) { @@ -61,23 +61,23 @@ void show_error(uint32_t err) log(FOOLOS_MODULE_NAME,FOOLOS_LOG_INFO,"Selector: %x",err&0b1111111111111000); } -//void int_irq0(){ X86_IRQ_BEGIN panic(FOOLOS_MODULE_NAME,"Divide by 0"); X86_IRQ_END } -void int_irq1(){ X86_IRQ_BEGIN panic(FOOLOS_MODULE_NAME,"Single step (debugger)"); X86_IRQ_END } -void int_irq2(){ X86_IRQ_BEGIN panic(FOOLOS_MODULE_NAME,"Non Maskable Interrupt"); X86_IRQ_END } -void int_irq3(){ X86_IRQ_BEGIN panic(FOOLOS_MODULE_NAME,"Breakpoint (debugger)"); X86_IRQ_END } -void int_irq4(){ X86_IRQ_BEGIN panic(FOOLOS_MODULE_NAME,"Overflow"); X86_IRQ_END } -void int_irq5(){ X86_IRQ_BEGIN panic(FOOLOS_MODULE_NAME,"Bounds check"); X86_IRQ_END } -void int_irq6(){ X86_IRQ_BEGIN panic(FOOLOS_MODULE_NAME,"Undefined OP Code"); X86_IRQ_END } -void int_irq7(){ X86_IRQ_BEGIN panic(FOOLOS_MODULE_NAME,"No coprocessor"); X86_IRQ_END } -void int_irq8(){ X86_IRQ_BEGIN panic(FOOLOS_MODULE_NAME,"Double Fault"); X86_IRQ_END } -void int_irq9(){ X86_IRQ_BEGIN panic(FOOLOS_MODULE_NAME,"Coprocessor Segment Overrun"); X86_IRQ_END } -void int_irq10(){ X86_IRQ_BEGIN panic(FOOLOS_MODULE_NAME,"Invalid TSS"); X86_IRQ_END } -void int_irq11(){ X86_IRQ_BEGIN panic(FOOLOS_MODULE_NAME,"Segment Not Present"); X86_IRQ_END } -void int_irq12(){ X86_IRQ_BEGIN panic(FOOLOS_MODULE_NAME,"Stack Segment Overrun"); X86_IRQ_END } - -void int_irq13() + +void exception_handle_0(){ panic(FOOLOS_MODULE_NAME,"Divide by 0"); } +void exception_handle_1(){ panic(FOOLOS_MODULE_NAME,"Single step (debugger)"); } +void exception_handle_2(){ panic(FOOLOS_MODULE_NAME,"Non Maskable Interrupt"); } +void exception_handle_3(){ panic(FOOLOS_MODULE_NAME,"Breakpoint (debugger)"); } +void exception_handle_4(){ panic(FOOLOS_MODULE_NAME,"Overflow"); } +void exception_handle_5(){ panic(FOOLOS_MODULE_NAME,"Bounds check"); } +void exception_handle_6(){ panic(FOOLOS_MODULE_NAME,"Undefined OP Code"); } +void exception_handle_7(){ panic(FOOLOS_MODULE_NAME,"No coprocessor"); } +void exception_handle_8(){ panic(FOOLOS_MODULE_NAME,"Double Fault"); } +void exception_handle_9(){ panic(FOOLOS_MODULE_NAME,"Coprocessor Segment Overrun"); } +void exception_handle_10(){ panic(FOOLOS_MODULE_NAME,"Invalid TSS"); } +void exception_handle_11(){ panic(FOOLOS_MODULE_NAME,"Segment Not Present"); } +void exception_handle_12(){ panic(FOOLOS_MODULE_NAME,"Stack Segment Overrun"); } + +void exception_handle_13() { - X86_IRQ_BEGIN uint32_t err; asm("pop %eax"); // get Error Code @@ -85,16 +85,13 @@ void int_irq13() show_error(err); panic(FOOLOS_MODULE_NAME,"General Protection Fault"); - - X86_IRQ_END } -void int_irq14(){ X86_IRQ_BEGIN panic(FOOLOS_MODULE_NAME,"Page Fault"); X86_IRQ_END } -void int_irq15(){ X86_IRQ_BEGIN panic(FOOLOS_MODULE_NAME,"Unassigned"); X86_IRQ_END } -void int_irq16(){ X86_IRQ_BEGIN panic(FOOLOS_MODULE_NAME,"Coprocessor error"); X86_IRQ_END } -void int_irq17(){ X86_IRQ_BEGIN panic(FOOLOS_MODULE_NAME,"Alignment Check"); X86_IRQ_END } -void int_irq18(){ X86_IRQ_BEGIN panic(FOOLOS_MODULE_NAME,"Machine Check"); X86_IRQ_END } -*/ +void exception_handle_15(){ panic(FOOLOS_MODULE_NAME,"Unassigned"); } +void exception_handle_16(){ panic(FOOLOS_MODULE_NAME,"Coprocessor error"); } +void exception_handle_17(){ panic(FOOLOS_MODULE_NAME,"Alignment Check"); } +void exception_handle_18(){ panic(FOOLOS_MODULE_NAME,"Machine Check"); } + //set a handler for a specific interrupt void int_install_ir(int irq, uint16_t flags, uint16_t sel, void *addr) @@ -148,8 +145,6 @@ void int_init(uint16_t sel) int_install_ir(17, 0b10001110, 0x08,&int_irq17); int_install_ir(18, 0b10001110, 0x08,&int_irq18); - - // setup some custom interrupts // remember that we shifted all interrupts with the pic by 32 -- cgit v1.2.3