blob: 529f3850045521b03823c0b227a99393c3e6a64b (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
#pragma once
#include "interrupt.h"
#ifndef __ASSEMBLER__
void irq_lock(void);
void irq_unlock(void);
#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
ISR_STORE_CALLER_REGS
ISR_STORE_CALLEE_REGS
mov $\irq, %di
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
|