blob: e00760a11478eaa5dd03977fa032fd27536df31c (
plain) (
tree)
|
|
.section .text
.global x86_64_lidt
.type x86_64_lidt @function
x86_64_lidt:
lidt (%rdi)
sti
retq
.macro irq_preserve
pushq %rax
pushq %rbx
pushq %rcx
pushq %rdx
pushq %rsi
pushq %rdi
pushq %rbp
pushq %r8
pushq %r9
pushq %r10
pushq %r11
pushq %r12
pushq %r13
pushq %r14
pushq %r15
.endm
.macro irq_restore
popq %r15
popq %r14
popq %r13
popq %r12
popq %r11
popq %r10
popq %r9
popq %r8
popq %rbp
popq %rdi
popq %rsi
popq %rdx
popq %rcx
popq %rbx
popq %rax
.endm
.global irq_stub
.type irq_stub @function
irq_stub:
irq_preserve
movq %rsp, %rdi
cld
.extern irq_handle
call irq_handle
movq %rax, %rsp
irq_restore
iretq
.extern __isr_err
.extern __isr_num
.macro isr_error num:req
.type __isr\num @function
isr\num:
pushq %rbx
movq 8(%rsp), %rbx
movq %rbx, __isr_err
popq %rbx
addq $8, %rsp
movq $\num, __isr_num
jmp irq_stub
.endm
.macro isr_noerr num:req
.type __isr\num @function
isr\num:
movq $\num, __isr_num
jmp irq_stub
.endm
isr_noerr 0
isr_noerr 1
isr_noerr 2
isr_noerr 3
isr_noerr 4
isr_noerr 5
isr_noerr 6
isr_noerr 7
isr_error 8
isr_noerr 9
isr_error 10
isr_error 11
isr_error 12
isr_error 13
isr_error 14
isr_noerr 15
isr_noerr 16
isr_error 17
isr_noerr 18
isr_noerr 19
isr_noerr 20
isr_error 21
.section .data
.global __isr_stubs
.type __isr_stubs @object
__isr_stubs:
.quad isr0
.quad isr1
.quad isr2
.quad isr3
.quad isr4
.quad isr5
.quad isr6
.quad isr7
.quad isr8
.quad isr9
.quad isr10
.quad isr11
.quad isr12
.quad isr13
.quad isr14
.quad isr15
.quad isr16
.quad isr17
.quad isr18
.quad isr19
.quad isr20
.quad isr21
|