/* | |
* This file is subject to the terms and conditions of the GNU General Public | |
* License. See the file "COPYING" in the main directory of this archive | |
* for more details. | |
* | |
* Copyright (C) 1999 Ralf Baechle | |
* Copyright (C) 1999 Silicon Graphics, Inc. | |
*/ | |
#include <asm/asm.h> | |
#include <asm/mipsregs.h> | |
#include <asm/regdef.h> | |
#include <asm/stackframe.h> | |
.text | |
.align 5 | |
NESTED(ip27_irq, PT_SIZE, sp) | |
SAVE_ALL | |
CLI | |
mfc0 s0, CP0_CAUSE | |
mfc0 t0, CP0_STATUS | |
and s0, t0 | |
move a0, sp | |
PTR_LA ra, ret_from_irq | |
/* First check for RT interrupt. */ | |
andi t0, s0, CAUSEF_IP4 | |
bnez t0, ip4 | |
andi t0, s0, CAUSEF_IP2 | |
bnez t0, ip2 | |
andi t0, s0, CAUSEF_IP3 | |
bnez t0, ip3 | |
andi t0, s0, CAUSEF_IP5 | |
bnez t0, ip5 | |
andi t0, s0, CAUSEF_IP6 | |
bnez t0, ip6 | |
j ra | |
ip2: j ip27_do_irq_mask0 # PI_INT_PEND_0 or CC_PEND_{A|B} | |
ip3: j ip27_do_irq_mask1 # PI_INT_PEND_1 | |
ip4: j ip27_rt_timer_interrupt | |
ip5: j ip27_prof_timer | |
ip6: j ip27_hub_error | |
END(ip27_irq) |