summaryrefslogtreecommitdiff
path: root/kernel/src/cpu/irq_stub.S
blob: ee02d3e1d7a1a5c62751d63e75459a670ae24494 (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
126
127
128
129
130
131
132
133
134
135
.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 isr_no_error number
.global isr\number
isr\number:
	pushall
	cld
	mov %rsp, panic_rsp
	call isr\number\()_handler
	popall
	iretq
.endm

.macro isr_error number
.global isr\number
isr\number:
	pushall
	mov 0x88(%rsp), %rdi
	cld
	mov %rsp, panic_rsp
	call isr\number\()_handler
	popall
	add $8, %rsp
	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

.macro irq number
.global irq\number
irq\number:
	pushall
	cld
	mov %rsp, panic_rsp
	call irq\number\()_handler
	popall
	iretq
.endm

irq 0
irq 1
irq 2
irq 3
irq 4
irq 5
irq 6
irq 7
irq 8
irq 9
irq 10
irq 11
irq 12
irq 13
irq 14
irq 15