/* * 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 #include #include #include #include .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)