166d857b0SGreg Ungerer /* 266d857b0SGreg Ungerer * irq.c 366d857b0SGreg Ungerer * 466d857b0SGreg Ungerer * (C) Copyright 2007, Greg Ungerer <gerg@snapgear.com> 566d857b0SGreg Ungerer * 666d857b0SGreg Ungerer * This file is subject to the terms and conditions of the GNU General Public 766d857b0SGreg Ungerer * License. See the file COPYING in the main directory of this archive 866d857b0SGreg Ungerer * for more details. 966d857b0SGreg Ungerer */ 1066d857b0SGreg Ungerer 1166d857b0SGreg Ungerer #include <linux/types.h> 1266d857b0SGreg Ungerer #include <linux/init.h> 1366d857b0SGreg Ungerer #include <linux/kernel.h> 1466d857b0SGreg Ungerer #include <linux/kernel_stat.h> 1566d857b0SGreg Ungerer #include <linux/interrupt.h> 1666d857b0SGreg Ungerer #include <linux/irq.h> 1766d857b0SGreg Ungerer #include <linux/seq_file.h> 1866d857b0SGreg Ungerer #include <asm/system.h> 1966d857b0SGreg Ungerer #include <asm/traps.h> 2066d857b0SGreg Ungerer 2166d857b0SGreg Ungerer asmlinkage void do_IRQ(int irq, struct pt_regs *regs) 2266d857b0SGreg Ungerer { 2366d857b0SGreg Ungerer struct pt_regs *oldregs = set_irq_regs(regs); 2466d857b0SGreg Ungerer 2566d857b0SGreg Ungerer irq_enter(); 2666d857b0SGreg Ungerer generic_handle_irq(irq); 2766d857b0SGreg Ungerer irq_exit(); 2866d857b0SGreg Ungerer 2966d857b0SGreg Ungerer set_irq_regs(oldregs); 3066d857b0SGreg Ungerer } 318c9f08f9SGeert Uytterhoeven 328c9f08f9SGeert Uytterhoeven 338c9f08f9SGeert Uytterhoeven /* The number of spurious interrupts */ 348c9f08f9SGeert Uytterhoeven atomic_t irq_err_count; 358c9f08f9SGeert Uytterhoeven 368c9f08f9SGeert Uytterhoeven int arch_show_interrupts(struct seq_file *p, int prec) 378c9f08f9SGeert Uytterhoeven { 388c9f08f9SGeert Uytterhoeven seq_printf(p, "%*s: %10u\n", prec, "ERR", atomic_read(&irq_err_count)); 398c9f08f9SGeert Uytterhoeven return 0; 408c9f08f9SGeert Uytterhoeven } 41