summaryrefslogtreecommitdiff
path: root/kernel/src/cpu/irq_stub.S
blob: 3ba4360ff86b30c1454a7947df582c9bddc8f254 (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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
.extern panic_rsp

.macro pushall
	push %rax
	push %rbx
	push %rcx
	push %rdx
	push %rsi
	push %rdi
	push %r8
	push %r9
	push %r10
	push %r11
	push %r12
	push %r13
	push %r14
	push %r15
	mov %ds, %ax
	push %rax
	mov %es, %ax
	push %rax
	mov %ss, %ax
	push %rax
	mov $0x10, %ax
	mov %ax, %ds
	mov %ax, %es
	mov 0x80(%rsp), %rax
.endm

.macro popall
	pop %rax
	pop %rax
	mov %ax, %es
	pop %rax
	mov %ax, %ds
	pop %r15
	pop %r14
	pop %r13
	pop %r12
	pop %r11
	pop %r10
	pop %r9
	pop %r8
	pop %rdi
	pop %rsi
	pop %rdx
	pop %rcx
	pop %rbx
	pop %rax
.endm

.macro isrstub
	pushall
	mov 0x88(%rsp), %rsi
	mov %rsp, panic_rsp
	cld
	call isr_def_handler
	popall
	add $8, %rsp
	iretq
.endm

.macro isr_no_error number
.global isr\number
isr\number:
	push $0
	mov $\number, %rdi
	isrstub
.endm

.macro isr_error number
.global isr\number
isr\number:
	mov $\number, %rdi
	isrstub
.endm

.macro irq number
.global irq\number
irq\number:
	pushall
	mov $\number, %rdi
	mov %rsp, panic_rsp
	cld
	call irq_def_handler
	popall
	iretq
.endm

isr_no_error 0
isr_no_error 1
isr_no_error 2
isr_no_error 3
isr_no_error 4
isr_no_error 5
isr_no_error 6
isr_no_error 7
isr_error 8
isr_no_error 9
isr_error 10
isr_error 11
isr_error 12
isr_error 13
isr_error 14
isr_no_error 15
isr_no_error 16
isr_error 17
isr_no_error 18
isr_no_error 19
isr_no_error 20
isr_no_error 21
isr_no_error 22
isr_no_error 23
isr_no_error 24
isr_no_error 25
isr_no_error 26
isr_no_error 27
isr_no_error 28
isr_error 29
isr_error 30
isr_no_error 31

irq 0
irq 1
irq 2