summaryrefslogtreecommitdiff
path: root/kc/core/cpu/irq.h
diff options
context:
space:
mode:
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
+