aboutsummaryrefslogtreecommitdiff
path: root/kernel/irq-as.S
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/irq-as.S')
-rw-r--r--kernel/irq-as.S139
1 files changed, 139 insertions, 0 deletions
diff --git a/kernel/irq-as.S b/kernel/irq-as.S
new file mode 100644
index 0000000..12de4b6
--- /dev/null
+++ b/kernel/irq-as.S
@@ -0,0 +1,139 @@
+ .extern irq_handler
+
+irq_stub:
+
+ pusha
+ push %ds
+ push %es
+ push %fs
+ push %gs
+ mov $0x10, %ax
+ mov %ax, %ds
+ mov %ax, %es
+ mov %ax, %fs
+ mov %ax, %gs
+ mov %esp, %eax
+ push %eax
+ mov $irq_handler, %eax
+ call *%eax
+ pop %eax
+ pop %gs
+ pop %fs
+ pop %es
+ pop %ds
+ popa
+ addl $8, %esp
+ iret
+
+ .global _irq0
+ .global _irq1
+ .global _irq2
+ .global _irq3
+ .global _irq4
+ .global _irq5
+ .global _irq6
+ .global _irq7
+ .global _irq8
+ .global _irq9
+ .global _irq10
+ .global _irq11
+ .global _irq12
+ .global _irq13
+ .global _irq14
+ .global _irq15
+
+_irq0:
+ cli
+ push $0
+ push $32
+ jmp irq_stub
+
+_irq1:
+ cli
+ push $0
+ push $33
+ jmp irq_stub
+
+_irq2:
+ cli
+ push $0
+ push $34
+ jmp irq_stub
+
+_irq3:
+ cli
+ push $0
+ push $35
+ jmp irq_stub
+
+_irq4:
+ cli
+ push $0
+ push $36
+ jmp irq_stub
+
+_irq5:
+ cli
+ push $0
+ push $37
+ jmp irq_stub
+
+_irq6:
+ cli
+ push $0
+ push $38
+ jmp irq_stub
+
+_irq7:
+ cli
+ push $0
+ push $39
+ jmp irq_stub
+
+_irq8:
+ cli
+ push $0
+ push $40
+ jmp irq_stub
+
+_irq9:
+ cli
+ push $0
+ push $41
+ jmp irq_stub
+
+_irq10:
+ cli
+ push $0
+ push $42
+ jmp irq_stub
+
+_irq11:
+ cli
+ push $0
+ push $43
+ jmp irq_stub
+
+_irq12:
+ cli
+ push $0
+ push $44
+ jmp irq_stub
+
+_irq13:
+ cli
+ push $0
+ push $45
+ jmp irq_stub
+
+_irq14:
+ cli
+ push $0
+ push $46
+ jmp irq_stub
+
+_irq15:
+ cli
+ push $0
+ push $47
+ jmp irq_stub