linux_old1/arch/mips/sgi-ip32/ip32-irq-glue.S

87 lines
1.5 KiB
ArmAsm

/*
* Low level interrupt handler for the SGI O2 aka IP32 aka Moosehead
*
* 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) 2000 Harald Koerfgen
* Copyright (C) 2001 Keith M Wesolowski
*/
#include <asm/asm.h>
#include <asm/regdef.h>
#include <asm/mipsregs.h>
#include <asm/stackframe.h>
#include <asm/addrspace.h>
.text
.set noreorder
.set noat
.align 5
NESTED(ip32_handle_int, PT_SIZE, ra)
.set noat
SAVE_ALL
CLI # TEST: interrupts should be off
.set at
.set noreorder
mfc0 s0,CP0_CAUSE
andi t1, s0, IE_IRQ0
bnez t1, handle_irq0
andi t1, s0, IE_IRQ1
bnez t1, handle_irq1
andi t1, s0, IE_IRQ2
bnez t1, handle_irq2
andi t1, s0, IE_IRQ3
bnez t1, handle_irq3
andi t1, s0, IE_IRQ4
bnez t1, handle_irq4
andi t1, s0, IE_IRQ5
bnez t1, handle_irq5
nop
/* Either someone has triggered the "software interrupts"
* or we lost an interrupt somehow. Ignore it.
*/
j ret_from_irq
nop
handle_irq0:
jal ip32_irq0
move a0, sp
j ret_from_irq
nop
handle_irq1:
jal ip32_irq1
move a0, sp
j ret_from_irq
nop
handle_irq2:
jal ip32_irq2
move a0, sp
j ret_from_irq
nop
handle_irq3:
jal ip32_irq3
move a0, sp
j ret_from_irq
nop
handle_irq4:
jal ip32_irq4
move a0, sp
j ret_from_irq
nop
handle_irq5:
jal ip32_irq5
move a0, sp
j ret_from_irq
nop
END(ip32_handle_int)