diff options
author | Danny Holman <dholman@gymli.org> | 2022-01-15 16:11:30 -0600 |
---|---|---|
committer | Danny Holman <dholman@gymli.org> | 2022-01-15 16:11:30 -0600 |
commit | c83d7bdcb60859f232e0fa6994ffba01509aba2e (patch) | |
tree | 66425a7362be26d27acf12015c7b3353a0e4159c /arch/i386/boot/isr.s | |
parent | 45e882197b3c2ab97d671bad87c995dff0380661 (diff) |
arch: i386: simplify IDT setup
Simplify the interrupt descriptor table setup and frame assembly.
Signed-off-by: Danny Holman <dholman@gymli.org>
Diffstat (limited to 'arch/i386/boot/isr.s')
-rw-r--r-- | arch/i386/boot/isr.s | 45 |
1 files changed, 23 insertions, 22 deletions
diff --git a/arch/i386/boot/isr.s b/arch/i386/boot/isr.s index b5f8be5..76afa9f 100644 --- a/arch/i386/boot/isr.s +++ b/arch/i386/boot/isr.s @@ -4,6 +4,7 @@ .global isr_stub_\num .type isr_stub_\num, @function isr_stub_\num: + cli pushl $\num jmp isr_frame_asm .endm @@ -11,18 +12,32 @@ isr_stub_\num: .global isr_stub_\num .type isr_stub_\num, @function isr_stub_\num: + cli pushl $0 pushl $\num jmp isr_frame_asm .endm +.macro irq_stub num +.global irq_stub_\num +.type irq_stub_\num, @function +irq_stub_\num: + cli + pushl $0 + pushl $\num + jmp isr_frame_asm +.endm + +.global syscall_stub +syscall_stub: + pushl $0 + pushl $0x80 + jmp isr_frame_asm + isr_frame_asm: - pushl %ebp - movl %esp, %ebp pushl %eax pushl %ebx pushl %ecx - pushl %ecx pushl %edx pushl %esi pushl %edi @@ -36,22 +51,9 @@ isr_frame_asm: movl %cr4, %eax pushl %eax - movw %ds, %ax - pushl %eax - pushl $0 - movw $0x10, %ax - movw %ax, %ds - movw %ax, %es - movw %ax, %ss - - lea 0xC(%esp), %edi + lea -8(%esp), %edi pushl %edi - call exception_handler - - popl %eax - popl %eax - movw %ax, %ds - movw %ax, %es + call interrupt_handler popl %eax movl %eax, %cr4 @@ -69,8 +71,7 @@ isr_frame_asm: popl %ebx popl %eax - popl %ebp - add $0x10, %esp + addl $4, %esp iret isr_no_err_stub 0 @@ -94,7 +95,7 @@ isr_err_stub 17 isr_no_err_stub 18 isr_no_err_stub 19 isr_no_err_stub 20 -isr_no_err_stub 21 +isr_err_stub 21 isr_no_err_stub 22 isr_no_err_stub 23 isr_no_err_stub 24 @@ -102,6 +103,6 @@ isr_no_err_stub 25 isr_no_err_stub 26 isr_no_err_stub 27 isr_no_err_stub 28 -isr_no_err_stub 29 +isr_err_stub 29 isr_err_stub 30 isr_no_err_stub 31 |