OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

[/] [or1k/] [trunk/] [linux/] [linux-2.4/] [arch/] [mips/] [lasat/] [lasatIRQ.S] - Rev 1773

Go to most recent revision | Compare with Previous | Blame | View Log

/*
 * Carsten Langgaard, carstenl@mips.com
 * Copyright (C) 1999, 2000 MIPS Technologies, Inc.  All rights reserved.
 *
 * ########################################################################
 *
 *  This program is free software; you can distribute it and/or modify it
 *  under the terms of the GNU General Public License (Version 2) as
 *  published by the Free Software Foundation.
 *
 *  This program is distributed in the hope it will be useful, but WITHOUT
 *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
 *  for more details.
 *
 *  You should have received a copy of the GNU General Public License along
 *  with this program; if not, write to the Free Software Foundation, Inc.,
 *  59 Temple Place - Suite 330, Boston MA 02111-1307, USA.
 *
 * ########################################################################
 *
 * Interrupt exception dispatch code.
 *
 */
#include <linux/config.h>

#include <asm/asm.h>
#include <asm/mipsregs.h>
#include <asm/regdef.h>
#include <asm/stackframe.h>

        .text
        .set    noreorder
        .set    noat
        .align  5
        NESTED(mipsIRQ, PT_SIZE, sp)
        SAVE_ALL
        CLI
        .set    at

        mfc0    s0, CP0_CAUSE           # get irq mask

        /* First we check for r4k counter/timer IRQ. */
        andi    a0, s0, CAUSEF_IP7
        beq     a0, zero, 1f
         andi   a0, s0, CAUSEF_IP2      # delay slot, check hw0 interrupt

        /* Wheee, a timer interrupt. */
        move    a0, sp
        jal     lasat_timer_interrupt
         nop

        j       ret_from_irq
         nop

1:
        /* Wheee, combined hardware level zero interrupt. */
        jal     lasat_hw0_irqdispatch
         move   a0, sp                  # delay slot

        j       ret_from_irq
         nop                            # delay slot

1:
        /*
         * Here by mistake?  This is possible, what can happen is that by the
         * time we take the exception the IRQ pin goes low, so just leave if
         * this is the case.
         */
        move    a1,s0
        mfc0    a1, CP0_EPC

        j       ret_from_irq
         nop
        END(mipsIRQ)

Go to most recent revision | Compare with Previous | Blame | View Log

powered by: WebSVN 2.1.0

© copyright 1999-2025 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.