summaryrefslogtreecommitdiffstats
path: root/arch/mips/galileo-boards/ev96100/int-handler.S
blob: 0edf1fec2905f92173bcb9ee1dfcecee0072d49a (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
#include <asm/asm.h>
#include <asm/mipsregs.h>
#include <asm/regdef.h>
#include <asm/stackframe.h>

	.set	noat
	.align	5

NESTED(ev96100IRQ, PT_SIZE, sp)
	SAVE_ALL
	CLI				# Important: mark KERNEL mode !

	mfc0	t0, CP0_CAUSE		# get pending interrupts
	mfc0	t1, CP0_STATUS		# get enabled interrupts
	and	t0, t1			# isolate allowed ones

	# FIX ME add R7000 extensions
	andi	t0,0xff00		# isolate pending bits
	andi	a0, t0, CAUSEF_IP7
	beq	a0, zero, 1f
	move	a0, sp
	jal	mips_timer_interrupt
	j	ret_from_irq

1:	beqz	t0, 3f			# spurious interrupt

	move	a0, t0
	move	a1, sp
	jal	ev96100_cpu_irq
	j	ret_from_irq

3:	jal	spurious_interrupt
	j	ret_from_irq
	END(ev96100IRQ)