@@ -70,7 +70,7 @@ b \label
70
70
ldr x16 ,[ sp , # 8 * 34 ] //pc
71
71
msr elr_el1 , x16
72
72
add sp , sp , # 280
73
- eret
73
+ // eret
74
74
.endm
75
75
76
76
@@ -97,7 +97,7 @@ vectors:
97
97
handler fiq_invalid_el1h // FIQ EL1h
98
98
handler error_invalid_el1h // Error EL1h
99
99
100
- handler sync_invalid_el0_64 // Synchronous 64 - bit EL0
100
+ handler el0_sync // Synchronous 64 - bit EL0
101
101
handler el0_irq // IRQ 64 - bit EL0
102
102
handler fiq_invalid_el0_64 // FIQ 64 - bit EL0
103
103
handler error_invalid_el0_64 // Error 64 - bit EL0
@@ -163,9 +163,8 @@ el0_irq:
163
163
CLI
164
164
ldr x16 , = 0x82000000 //TIMESTACK
165
165
mov sp , x16
166
- //saveall
167
-
168
- sub sp , sp , # 280
166
+ saveall
167
+ / * sub sp , sp , # 280
169
168
stp x0 , x1 , [ sp , # 16 * 0 ]
170
169
stp x2 , x3 , [ sp , # 16 * 1 ]
171
170
stp x4 , x5 , [ sp , # 16 * 2 ]
@@ -182,6 +181,7 @@ el0_irq:
182
181
stp x26 , x27 , [ sp , # 16 * 13 ]
183
182
stp x28 , x29 , [ sp , # 16 * 14 ]
184
183
str x30 , [ sp , # 16 * 15 ]
184
+
185
185
mrs x16 , sp_el0
186
186
str x16 ,[ sp , # 8 * 31 ]
187
187
mrs x16 , elr_el1
@@ -190,13 +190,88 @@ el0_irq:
190
190
191
191
mrs x16 , spsr_el1
192
192
str x16 ,[ sp , # 8 * 33 ]
193
-
193
+ * /
194
194
195
195
bl handle_irq
196
196
restore
197
197
STI
198
198
eret
199
199
200
+ el0_sync:
201
+ . extern sys_call_table
202
+ . extern invalid_syscall
203
+ CLI
204
+ ldr x16 , = 0x81fff000 //TIMESTACK
205
+ mov sp , x16
206
+ saveall
207
+ / * sub sp , sp , # 280
208
+ stp x0 , x1 , [ sp , # 16 * 0 ]
209
+ stp x2 , x3 , [ sp , # 16 * 1 ]
210
+ stp x4 , x5 , [ sp , # 16 * 2 ]
211
+ stp x6 , x7 , [ sp , # 16 * 3 ]
212
+ stp x8 , x9 , [ sp , # 16 * 4 ]
213
+ stp x10 , x11 , [ sp , # 16 * 5 ]
214
+ stp x12 , x13 , [ sp , # 16 * 6 ]
215
+ stp x14 , x15 , [ sp , # 16 * 7 ]
216
+ stp x16 , x17 , [ sp , # 16 * 8 ]
217
+ stp x18 , x19 , [ sp , # 16 * 9 ]
218
+ stp x20 , x21 , [ sp , # 16 * 10 ]
219
+ stp x22 , x23 , [ sp , # 16 * 11 ]
220
+ stp x24 , x25 , [ sp , # 16 * 12 ]
221
+ stp x26 , x27 , [ sp , # 16 * 13 ]
222
+ stp x28 , x29 , [ sp , # 16 * 14 ]
223
+ str x30 , [ sp , # 16 * 15 ]
224
+
225
+ mrs x16 , sp_el0
226
+ str x16 ,[ sp , # 8 * 31 ]
227
+ mrs x16 , elr_el1
228
+ str x16 ,[ sp , # 8 * 32 ]
229
+ str x16 ,[ sp , # 8 * 34 ] //pc
230
+
231
+ mrs x16 , spsr_el1
232
+ str x16 ,[ sp , # 8 * 33 ]* /
233
+
234
+ ldr x17 , = 9527
235
+ sub x0 , x0 , x17
236
+ cmp x0 , # 1 //=========== 1 syscalls
237
+ b.ge invalid_syscall
238
+
239
+ adr x17 , sys_call_table
240
+ add x17 , x17 , x0 , lsl # 3
241
+ ldr x17 ,[ x17 ]
242
+ blr x17
243
+
244
+ / * ldp x0 , x1 , [ sp , # 16 * 0 ]
245
+ ldp x2 , x3 , [ sp , # 16 * 1 ]
246
+ ldp x4 , x5 , [ sp , # 16 * 2 ]
247
+ ldp x6 , x7 , [ sp , # 16 * 3 ]
248
+ ldp x8 , x9 , [ sp , # 16 * 4 ]
249
+ ldp x10 , x11 , [ sp , # 16 * 5 ]
250
+ ldp x12 , x13 , [ sp , # 16 * 6 ]
251
+ ldp x14 , x15 , [ sp , # 16 * 7 ]
252
+ ldp x16 , x17 , [ sp , # 16 * 8 ]
253
+ ldp x18 , x19 , [ sp , # 16 * 9 ]
254
+ ldp x20 , x21 , [ sp , # 16 * 10 ]
255
+ ldp x22 , x23 , [ sp , # 16 * 11 ]
256
+ ldp x24 , x25 , [ sp , # 16 * 12 ]
257
+ ldp x26 , x27 , [ sp , # 16 * 13 ]
258
+ ldp x28 , x29 , [ sp , # 16 * 14 ]
259
+ ldr x30 , [ sp , # 16 * 15 ]
260
+
261
+ ldr x16 ,[ sp , # 8 * 31 ]
262
+ msr sp_el0 , x16
263
+
264
+ ldr x16 ,[ sp , # 8 * 33 ]
265
+ msr spsr_el1 , x16
266
+
267
+ ldr x16 ,[ sp , # 8 * 34 ] //pc
268
+ msr elr_el1 , x16
269
+ add sp , sp , # 280 * /
270
+ restore
271
+ // STI
272
+ eret
273
+
274
+
200
275
.globl irq_vector_init
201
276
. extern vectors
202
277
irq_vector_init:
0 commit comments