/*
 *  arch/mips/philips/nino/int-handler.S
 *
 *  Copyright (C) 2001 Steven J. Hill (sjhill@realitydiluted.com)
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 2 as
 * published by the Free Software Foundation.
 *
 *  Interrupt exception dispatch code for Philips Nino
 */
#include <asm/asm.h>
#include <asm/mipsregs.h>
#include <asm/regdef.h>
#include <asm/stackframe.h>

	/*
	 * Here is the table of interrupts for the Philips Nino
	 * which uses the Philips PR31700/Toshiba TMPR3912 core.
	 *
	 *   MIPS IRQ             Description
	 *   --------	--------------------------------
	 *       0	SW0 interrupt (unused)
	 *       1	SW1 interrupt (unused)
	 *       2
	 *       3
	 *       4	PR31700 low priority interrupts
	 *       5
	 *       6	PR31700 high priority interrupts
	 *       7
	 */

	.text
	.set	noreorder
	.set	noat
	.align	5
	NESTED(ninoIRQ, PT_SIZE, sp)
	SAVE_ALL
	CLI
	.set	at
	mfc0	s0, CP0_CAUSE		# determine cause

	andi	a0, s0, CAUSEF_IP6
	beq	a0, zero, 1f
	andi	a0, s0, CAUSEF_IP4	# delay slot
	move    a0, sp
	jal	irq6_dispatch
	nop				# delay slot
	j	ret_from_irq
	nop				# delay slot

1:
	beq	a0, zero, 1f
	nop				# delay slot
	move	a0, sp
	jal	irq4_dispatch
	nop				# delay slot
	j	ret_from_irq
	nop				# delay slot

1:
	/* We should never get here */
	move	a0, sp
	j	irq_bad
	nop
	END(ninoIRQ)