87 lines
1.5 KiB
ArmAsm
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)
|