2 * This file is subject to the terms and conditions of the GNU General Public
3 * License. See the file "COPYING" in the main directory of this archive
6 * Copyright (C) 1995, 1996, 1997, 2003 by Ralf Baechle
7 * Copyright (C) Wind River System Inc. Rongkai.Zhan <rongkai.zhan@windriver.com>
10 #include <asm/mipsregs.h>
11 #include <asm/addrspace.h>
12 #include <asm/regdef.h>
13 #include <asm/stackframe.h>
14 #include <asm/mach-wrppmc/mach-gt64120.h>
18 NESTED(handle_IRQ, PT_SIZE, sp)
20 CLI # Important: mark KERNEL mode !
23 mfc0 t0, CP0_CAUSE # get pending interrupts
24 mfc0 t1, CP0_STATUS # get enabled interrupts
25 and t0, t0, t1 # get allowed interrupts
28 move a1, sp # Prepare 'struct pt_regs *regs' pointer
30 andi t1, t0, CAUSEF_IP7 # CPU Compare/Count internal timer
31 bnez t1, handle_cputimer_irq
32 andi t1, t0, CAUSEF_IP6 # UART 16550 port
33 bnez t1, handle_uart_irq
34 andi t1, t0, CAUSEF_IP3 # PCI INT_A
35 bnez t1, handle_pci_intA_irq
37 /* wrong alarm or masked ... */
38 1: j spurious_interrupt
44 li a0, WRPPMC_MIPS_TIMER_IRQ
50 li a0, WRPPMC_UART16550_IRQ
56 li a0, WRPPMC_PCI_INTA_IRQ