Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
arch
arm64
kernel
irq.c
Go to the documentation of this file.
1
/*
2
* Based on arch/arm/kernel/irq.c
3
*
4
* Copyright (C) 1992 Linus Torvalds
5
* Modifications for ARM processor Copyright (C) 1995-2000 Russell King.
6
* Support for Dynamic Tick Timer Copyright (C) 2004-2005 Nokia Corporation.
7
* Dynamic Tick Timer written by Tony Lindgren <
[email protected]
> and
8
* Tuukka Tikkanen <
[email protected]
>.
9
* Copyright (C) 2012 ARM Ltd.
10
*
11
* This program is free software; you can redistribute it and/or modify
12
* it under the terms of the GNU General Public License version 2 as
13
* published by the Free Software Foundation.
14
*
15
* This program is distributed in the hope that it will be useful,
16
* but WITHOUT ANY WARRANTY; without even the implied warranty of
17
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18
* GNU General Public License for more details.
19
*
20
* You should have received a copy of the GNU General Public License
21
* along with this program. If not, see <http://www.gnu.org/licenses/>.
22
*/
23
24
#include <
linux/kernel_stat.h
>
25
#include <
linux/irq.h
>
26
#include <
linux/smp.h
>
27
#include <
linux/init.h
>
28
#include <
linux/of_irq.h
>
29
#include <
linux/seq_file.h
>
30
#include <
linux/ratelimit.h
>
31
32
unsigned
long
irq_err_count
;
33
34
int
arch_show_interrupts
(
struct
seq_file
*
p
,
int
prec)
35
{
36
#ifdef CONFIG_SMP
37
show_ipi_list
(p, prec);
38
#endif
39
seq_printf
(p,
"%*s: %10lu\n"
, prec,
"Err"
,
irq_err_count
);
40
return
0;
41
}
42
43
/*
44
* handle_IRQ handles all hardware IRQ's. Decoded IRQs should
45
* not come via this function. Instead, they should provide their
46
* own 'handler'. Used by platform code implementing C-based 1st
47
* level decoding.
48
*/
49
void
handle_IRQ
(
unsigned
int
irq,
struct
pt_regs
*
regs
)
50
{
51
struct
pt_regs
*old_regs = set_irq_regs(regs);
52
53
irq_enter
();
54
55
/*
56
* Some hardware gives randomly wrong interrupts. Rather
57
* than crashing, do something sensible.
58
*/
59
if
(
unlikely
(irq >=
nr_irqs
)) {
60
pr_warn_ratelimited
(
"Bad IRQ%u\n"
, irq);
61
ack_bad_irq
(irq);
62
}
else
{
63
generic_handle_irq
(irq);
64
}
65
66
irq_exit
();
67
set_irq_regs(old_regs);
68
}
69
70
/*
71
* Interrupt controllers supported by the kernel.
72
*/
73
static
const
struct
of_device_id
intctrl_of_match[]
__initconst
= {
74
/* IRQ controllers { .compatible, .data } info to go here */
75
{}
76
};
77
78
void
__init
init_IRQ
(
void
)
79
{
80
of_irq_init
(intctrl_of_match);
81
82
if
(!
handle_arch_irq
)
83
panic
(
"No interrupt controller found."
);
84
}
Generated on Thu Jan 10 2013 12:51:25 for Linux Kernel by
1.8.2