summaryrefslogtreecommitdiff
path: root/kc/core/cpu/irq.h
diff options
context:
space:
mode:
authorAda Christine <adachristine18@gmail.com>2022-02-13 18:47:58 +0000
committerAda Christine <adachristine18@gmail.com>2022-02-13 18:47:58 +0000
commite8a76b2f6b53d99640ceb2850bf4e45118b923f1 (patch)
tree9e7ab33233883a2db2aa60393b66e6d526edbaf1 /kc/core/cpu/irq.h
parent78788acf026b21b516fd981d321b0809c07de921 (diff)
rudimentary irq and timer support
Diffstat (limited to 'kc/core/cpu/irq.h')
-rw-r--r--kc/core/cpu/irq.h30
1 files changed, 30 insertions, 0 deletions
diff --git a/kc/core/cpu/irq.h b/kc/core/cpu/irq.h
new file mode 100644
index 0000000..9874761
--- /dev/null
+++ b/kc/core/cpu/irq.h
@@ -0,0 +1,30 @@
+#pragma once
+
+#include "interrupt.h"
+
+#ifndef __ASSEMBLER__
+#else
+
+.macro IRQ_DECLARE name:req handler:req, irq:req, offset:req
+.hidden \name\()_irq\()\irq\()_isr
+.global \name\()_irq\()\irq\()_isr
+.extern \handler
+.type \name\()_irq\()\irq\()_isr, @function
+.endm
+
+.macro IRQ_DEFINE name:req handler:req, irq:req
+\name\()_irq\()\irq\()_isr:
+ ISR_STORE_PARAM_REGS
+ movb \irq, %dil
+ ISR_STORE_CALLER_REGS
+ ISR_STORE_CALLEE_REGS
+ ISR_CALL \handler
+ ISR_RESTORE_CALLEE_REGS
+ ISR_RESTORE_CALLER_REGS
+ ISR_RESTORE_PARAM_REGS
+ iretq
+.size \name\()_irq\()\irq\()_isr, . - \name\()_irq\()\irq\()_isr
+.endm
+
+#endif
+