patch-2.4.19 linux-2.4.19/arch/mips/philips/nino/int-handler.S
Next file: linux-2.4.19/arch/mips/philips/nino/irq.c
Previous file: linux-2.4.19/arch/mips/philips/nino/TODO
Back to the patch index
Back to the overall index
- Lines: 191
- Date:
Fri Aug 2 17:39:43 2002
- Orig file:
linux-2.4.18/arch/mips/philips/nino/int-handler.S
- Orig date:
Sun Sep 9 10:43:02 2001
diff -urN linux-2.4.18/arch/mips/philips/nino/int-handler.S linux-2.4.19/arch/mips/philips/nino/int-handler.S
@@ -1,137 +1,66 @@
/*
- * linux/arch/mips/philips/nino/int-handler.S
+ * arch/mips/philips/nino/int-handler.S
*
- * Copyright (C) 1999 Harald Koerfgen
- * Copyright (C) 2000 Jim Pick (jim@jimpick.com)
* 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 handler for Philips Nino.
+ * Interrupt exception dispatch code for Philips Nino
*/
#include <asm/asm.h>
-#include <asm/regdef.h>
#include <asm/mipsregs.h>
+#include <asm/regdef.h>
#include <asm/stackframe.h>
-#include <asm/tx3912.h>
-
- .data
- .globl HighPriVect
-
-HighPriVect: .word spurious # Reserved
- .word io_posnegint0 # IOPOSINT(0) or IONEGINT(0)
- .word spurious # CHIDMACNTINT
- .word spurious # TELDMACNTINT
- .word spurious # SNDDMACNTINT
- .word spurious # Reserved
- .word io_negint56 # IONEGINT(6) or IONEGINT(5)
- .word spurious # Reserved
- .word io_posint56 # IOPOSINT(6) or IOPOSINT(5)
- .word spurious # Reserved
- .word spurious # UARTBRXINT
- .word uarta_rx # UARTARXINT
- .word spurious # Reserved
- .word periodic_timer # PERINT
- .word spurious # ALARMINT
- .word spurious # POSPWROKINT or NEGPWROKINT
-
-/*
- * Here is the entry point to handle all interrupts.
- */
- .text
- .set noreorder
- .align 5
- NESTED(nino_handle_int, PT_SIZE, ra)
- .set noat
- SAVE_ALL
- CLI
- .set at
-
- /*
- * Get pending Interrupts
- */
- mfc0 t0, CP0_CAUSE # Get pending interrupts
- andi t2, t0, IE_IRQ4 # IRQ4 (high priority)
- bne t2, IE_IRQ4, low_priority
- nop
-
-/*
- * Ok, we've got a high priority interrupt (a.k.a. an external interrupt).
- * Read Interrupt Status Register 6 to get vector.
- */
-high_priority:
- lui t0, %hi(IntStatus6)
- lw t1, %lo(IntStatus6)(t0)
- andi t1, INT6_INTVECT
- la t2, HighPriVect
- addu t1, t1, t2
- lw t2, 0(t1)
- jr t2
- nop
-
-/*
- * Ok, we've got one of over a hundred other interupts.
- */
-low_priority:
- lui t0, %hi(IntStatus1)
- lw t1, %lo(IntStatus1)(t0)
- j handle_it
- li a0, 20
-
-/*
- * We don't currently handle spurious interrupts.
- */
-spurious:
- j spurious_interrupt
- nop
-
-/*
- * We have the IRQ number, dispatch to the real handler.
- */
-handle_it: jal do_IRQ
- move a1,sp
- j ret_from_irq
- nop
-
-/************************************
- * High priority interrupt mappings *
- ************************************/
-
-/*
- * Periodic timer - IRQ 0
- */
-periodic_timer:
- j handle_it
- li a0, 0
-
-/*
- * UARTA RX - IRQ 3
- */
-uarta_rx:
- j handle_it
- li a0, 3
-
-/*
- * GPIO Pin 0 transition - IRQ 10
- */
-io_posnegint0:
- j handle_it
- li a0, 10
-
-/*
- * GPIO Pin 5 or 6 transition (0-to-1) - IRQ 11
- */
-io_posint56:
- j handle_it
- li a0, 11
-
-/*
- * GPIO Pin 5 or 6 transition (1-to-0) - IRQ 12
- */
-io_negint56:
- j handle_it
- li a0, 12
- END(nino_handle_int)
+ /*
+ * 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)
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)