diff options
Diffstat (limited to 'kc/core/cpu/irq.h')
| -rw-r--r-- | kc/core/cpu/irq.h | 30 |
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 + |
