1eedbdab9SMichal Simek /* 2eedbdab9SMichal Simek * Copyright (C) 2007-2009 Michal Simek <monstr@monstr.eu> 3eedbdab9SMichal Simek * Copyright (C) 2007-2009 PetaLogix 4eedbdab9SMichal Simek * Copyright (C) 2006 Atmark Techno, Inc. 5eedbdab9SMichal Simek * 6eedbdab9SMichal Simek * This file is subject to the terms and conditions of the GNU General Public 7eedbdab9SMichal Simek * License. See the file "COPYING" in the main directory of this archive 8eedbdab9SMichal Simek * for more details. 9eedbdab9SMichal Simek */ 10eedbdab9SMichal Simek 11eedbdab9SMichal Simek #include <linux/init.h> 12e6d7961eSSteven J. Magnani #include <linux/ftrace.h> 13eedbdab9SMichal Simek #include <linux/kernel.h> 14eedbdab9SMichal Simek #include <linux/hardirq.h> 15eedbdab9SMichal Simek #include <linux/interrupt.h> 16eedbdab9SMichal Simek #include <linux/irqflags.h> 17eedbdab9SMichal Simek #include <linux/seq_file.h> 18eedbdab9SMichal Simek #include <linux/kernel_stat.h> 19eedbdab9SMichal Simek #include <linux/irq.h> 208a9e90a1SMichal Simek #include <linux/irqchip.h> 21e3873444SGrant Likely #include <linux/of_irq.h> 22eedbdab9SMichal Simek do_IRQ(struct pt_regs * regs)23e6d7961eSSteven J. Magnanivoid __irq_entry do_IRQ(struct pt_regs *regs) 24eedbdab9SMichal Simek { 254cea749dSMarc Zyngier struct pt_regs *old_regs = set_irq_regs(regs); 260d9ec762SMichal Simek trace_hardirqs_off(); 274cea749dSMarc Zyngier 284cea749dSMarc Zyngier irq_enter(); 29*1e364921SMichal Simek handle_arch_irq(regs); 304cea749dSMarc Zyngier irq_exit(); 314cea749dSMarc Zyngier set_irq_regs(old_regs); 320d9ec762SMichal Simek trace_hardirqs_on(); 33eedbdab9SMichal Simek } 348a9e90a1SMichal Simek init_IRQ(void)358a9e90a1SMichal Simekvoid __init init_IRQ(void) 368a9e90a1SMichal Simek { 378a9e90a1SMichal Simek /* process the entire interrupt tree in one go */ 388a9e90a1SMichal Simek irqchip_init(); 398a9e90a1SMichal Simek } 40