aboutsummaryrefslogtreecommitdiff
path: root/kernel/exceptions/fiq.S
blob: 005ed763210e06966240c3c2366b60667839e3d8 (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
.section ".text.exceptions"
.globl fiq
fiq:
	cpsid aif
	stmfd sp!, {r0-r12,lr}
	bl c_fiq_handler
	cmp r0, #1
	bne 1f
	// Schedule if interrupted a thread
	mrs r1, spsr
	and r1, r1, #0x1f
	cmp r1, #0x10
	bne 1f
	ldmfd sp!, {r0-r12,lr}
	// Don't skip missed instruction upon return
	sub lr, #4
	push {r3}
	// Store the instruction in a special area for
	//  future processing
	ldr r3, =irqlr
	str lr, [r3, #0]
	pop {r3}
	cps #0x13
	b schedule
1:
	ldmfd sp!, {r0-r12,lr}
	subs pc, lr, #4