From 10896fe2e9efab2b7df5f7889ae05e9286e6cce5 Mon Sep 17 00:00:00 2001 From: Julien CLEMENT Date: Fri, 16 Jul 2021 02:46:07 +0200 Subject: [PATCH] feat(isr): add basic isr wrappers Signed-off-by: Julien CLEMENT --- k/isr.h | 32 +++++++++++++++++ k/isr.s | 107 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 139 insertions(+) create mode 100644 k/isr.h create mode 100644 k/isr.s diff --git a/k/isr.h b/k/isr.h new file mode 100644 index 0000000..1d5c8a6 --- /dev/null +++ b/k/isr.h @@ -0,0 +1,32 @@ +#ifndef ISR_H +#define ISR_H + +struct isr_param +{ + uint32_t int_vector; + uint32_t error_code; +} __attribute__ ((packed)); + +void isr_divide(void); +void isr_debug(void); +void isr_nmi(void); +void isr_breakpoint(void); +void isr_overflow(void); +void isr_bound_range_exceeded(void); +void isr_invalid_opcode(void); +void isr_device_not_available(void); +void isr_double_fault(void); +void isr_coprocessor_segment_overrun(void); +void isr_invalid_tss(void); +void isr_segment_not_present(void); +void isr_stack_segment_fault(void); +void isr_general_protection(void); +void isr_page_fault(void); +void isr_fpu_floating_point_error(void); +void isr_alignment_check(void); +void isr_machine_check(void); +void isr_simd_floating_point_exception(void); +void isr_virtualization_exception(void); +void isr_control_protection_exception(void); + +#endif /* !ISR_H */ diff --git a/k/isr.s b/k/isr.s new file mode 100644 index 0000000..3b1eeb1 --- /dev/null +++ b/k/isr.s @@ -0,0 +1,107 @@ +.section .text + +isr: + pushal + pushl %esp + add $32, (%esp) + call interrupt_handler + add $4, %esp + popal + iret + +.global isr_divide: + pushl $0 ; error code padding + pushl $0 ; int vector + jmp isr + +.global isr_debug: + pushl $0 ; error code padding + pushl $1 ; int vector + jmp isr + +.global isr_nmi: + pushl $0 ; error code padding + pushl $2 ; int vector + jmp isr + +.global isr_breakpoint: + pushl $0 ; error code padding + pushl $3 ; int vector + jmp isr + +.global isr_overflow: + pushl $0 ; error code padding + pushl $4 ; int vector + jmp isr + +.global isr_bound_range_exceeded: + pushl $0 ; error code padding + pushl $5 ; int vector + jmp isr + +.global isr_invalid_opcode: + pushl $0 ; error code padding + pushl $6 ; int vector + jmp isr + +.global isr_device_not_available: + pushl $0 ; error code padding + pushl $7 ; int vector + jmp isr + +.global isr_double_fault: + pushl $8 ; int vector + jmp isr + +.global isr_coprocessor_segment_overrun: + pushl $0 ; error code padding + pushl $9 ; int vector + jmp isr + +.global isr_invalid_tss: + pushl $10 ; int vector + jmp isr + +.global isr_segment_not_present: + pushl $11 ; int vector + jmp isr + +.global isr_stack_segment_fault: + pushl $12 ; int vector + jmp isr + +.global isr_general_protection: + pushl $13 ; int vector + jmp isr + +.global isr_page_fault: + pushl $14 ; int vector + jmp isr + +.global isr_fpu_floating_point_error: + pushl $0 ; error code padding + pushl $16 ; int vector + jmp isr + +.global isr_alignment_check: + pushl $17 ; int vector + jmp isr + +.global isr_machine_check: + pushl $0 ; error code padding + pushl $18 ; int vector + jmp isr + +.global isr_simd_floating_point_exception: + pushl $0 ; error code padding + pushl $19 ; int vector + jmp isr + +.global isr_virtualization_exception: + pushl $0 ; error code padding + pushl $20 ; int vector + jmp isr + +.global isr_control_protection_exception: + pushl $21 ; int vector + jmp isr