mirror of https://github.com/Qortal/Brooklyn
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
53 lines
1.1 KiB
53 lines
1.1 KiB
/* |
|
* Copyright (C) 2007-2009 Michal Simek <[email protected]> |
|
* Copyright (C) 2007-2009 PetaLogix |
|
* Copyright (C) 2006 Atmark Techno, Inc. |
|
* |
|
* This file is subject to the terms and conditions of the GNU General Public |
|
* License. See the file "COPYING" in the main directory of this archive |
|
* for more details. |
|
*/ |
|
|
|
#include <linux/init.h> |
|
#include <linux/ftrace.h> |
|
#include <linux/kernel.h> |
|
#include <linux/hardirq.h> |
|
#include <linux/interrupt.h> |
|
#include <linux/irqflags.h> |
|
#include <linux/seq_file.h> |
|
#include <linux/kernel_stat.h> |
|
#include <linux/irq.h> |
|
#include <linux/irqchip.h> |
|
#include <linux/of_irq.h> |
|
|
|
static u32 concurrent_irq; |
|
|
|
void __irq_entry do_IRQ(struct pt_regs *regs) |
|
{ |
|
unsigned int irq; |
|
struct pt_regs *old_regs = set_irq_regs(regs); |
|
trace_hardirqs_off(); |
|
|
|
irq_enter(); |
|
irq = xintc_get_irq(); |
|
next_irq: |
|
BUG_ON(!irq); |
|
generic_handle_irq(irq); |
|
|
|
irq = xintc_get_irq(); |
|
if (irq != -1U) { |
|
pr_debug("next irq: %d\n", irq); |
|
++concurrent_irq; |
|
goto next_irq; |
|
} |
|
|
|
irq_exit(); |
|
set_irq_regs(old_regs); |
|
trace_hardirqs_on(); |
|
} |
|
|
|
void __init init_IRQ(void) |
|
{ |
|
/* process the entire interrupt tree in one go */ |
|
irqchip_init(); |
|
}
|
|
|