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
x86
include
asm
hw_irq.h
Go to the documentation of this file.
1
#ifndef _ASM_X86_HW_IRQ_H
2
#define _ASM_X86_HW_IRQ_H
3
4
/*
5
* (C) 1992, 1993 Linus Torvalds, (C) 1997 Ingo Molnar
6
*
7
* moved some of the old arch/i386/kernel/irq.h to here. VY
8
*
9
* IRQ/IPI changes taken from work by Thomas Radke
10
* <
[email protected]
>
11
*
12
* hacked by Andi Kleen for x86-64.
13
* unified by tglx
14
*/
15
16
#include <asm/irq_vectors.h>
17
18
#ifndef __ASSEMBLY__
19
20
#include <
linux/percpu.h
>
21
#include <
linux/profile.h
>
22
#include <
linux/smp.h
>
23
24
#include <
linux/atomic.h
>
25
#include <asm/irq.h>
26
#include <asm/sections.h>
27
28
/* Interrupt handlers registered during init_IRQ */
29
extern
void
apic_timer_interrupt
(
void
);
30
extern
void
x86_platform_ipi
(
void
);
31
extern
void
error_interrupt
(
void
);
32
extern
void
irq_work_interrupt
(
void
);
33
34
extern
void
spurious_interrupt
(
void
);
35
extern
void
thermal_interrupt
(
void
);
36
extern
void
reschedule_interrupt
(
void
);
37
38
extern
void
invalidate_interrupt
(
void
);
39
extern
void
invalidate_interrupt0
(
void
);
40
extern
void
invalidate_interrupt1
(
void
);
41
extern
void
invalidate_interrupt2
(
void
);
42
extern
void
invalidate_interrupt3
(
void
);
43
extern
void
invalidate_interrupt4
(
void
);
44
extern
void
invalidate_interrupt5
(
void
);
45
extern
void
invalidate_interrupt6
(
void
);
46
extern
void
invalidate_interrupt7
(
void
);
47
extern
void
invalidate_interrupt8
(
void
);
48
extern
void
invalidate_interrupt9
(
void
);
49
extern
void
invalidate_interrupt10
(
void
);
50
extern
void
invalidate_interrupt11
(
void
);
51
extern
void
invalidate_interrupt12
(
void
);
52
extern
void
invalidate_interrupt13
(
void
);
53
extern
void
invalidate_interrupt14
(
void
);
54
extern
void
invalidate_interrupt15
(
void
);
55
extern
void
invalidate_interrupt16
(
void
);
56
extern
void
invalidate_interrupt17
(
void
);
57
extern
void
invalidate_interrupt18
(
void
);
58
extern
void
invalidate_interrupt19
(
void
);
59
extern
void
invalidate_interrupt20
(
void
);
60
extern
void
invalidate_interrupt21
(
void
);
61
extern
void
invalidate_interrupt22
(
void
);
62
extern
void
invalidate_interrupt23
(
void
);
63
extern
void
invalidate_interrupt24
(
void
);
64
extern
void
invalidate_interrupt25
(
void
);
65
extern
void
invalidate_interrupt26
(
void
);
66
extern
void
invalidate_interrupt27
(
void
);
67
extern
void
invalidate_interrupt28
(
void
);
68
extern
void
invalidate_interrupt29
(
void
);
69
extern
void
invalidate_interrupt30
(
void
);
70
extern
void
invalidate_interrupt31
(
void
);
71
72
extern
void
irq_move_cleanup_interrupt
(
void
);
73
extern
void
reboot_interrupt
(
void
);
74
extern
void
threshold_interrupt
(
void
);
75
76
extern
void
call_function_interrupt
(
void
);
77
extern
void
call_function_single_interrupt
(
void
);
78
79
/* IOAPIC */
80
#define IO_APIC_IRQ(x) (((x) >= NR_IRQS_LEGACY) || ((1<<(x)) & io_apic_irqs))
81
extern
unsigned
long
io_apic_irqs
;
82
83
extern
void
init_VISWS_APIC_irqs
(
void
);
84
extern
void
setup_IO_APIC
(
void
);
85
extern
void
disable_IO_APIC
(
void
);
86
87
struct
io_apic_irq_attr
{
88
int
ioapic
;
89
int
ioapic_pin
;
90
int
trigger
;
91
int
polarity
;
92
};
93
94
static
inline
void
set_io_apic_irq_attr(
struct
io_apic_irq_attr
*irq_attr,
95
int
ioapic,
int
ioapic_pin,
96
int
trigger
,
int
polarity
)
97
{
98
irq_attr->
ioapic
= ioapic;
99
irq_attr->
ioapic_pin
= ioapic_pin;
100
irq_attr->
trigger
=
trigger
;
101
irq_attr->
polarity
=
polarity
;
102
}
103
104
struct
irq_2_iommu
{
105
struct
intel_iommu
*
iommu
;
106
u16
irte_index
;
107
u16
sub_handle
;
108
u8
irte_mask
;
109
};
110
111
/*
112
* This is performance-critical, we want to do it O(1)
113
*
114
* Most irqs are mapped 1:1 with pins.
115
*/
116
struct
irq_cfg
{
117
struct
irq_pin_list
*
irq_2_pin
;
118
cpumask_var_t
domain
;
119
cpumask_var_t
old_domain
;
120
u8
vector
;
121
u8
move_in_progress
: 1;
122
#ifdef CONFIG_IRQ_REMAP
123
struct
irq_2_iommu
irq_2_iommu
;
124
#endif
125
};
126
127
extern
int
assign_irq_vector
(
int
,
struct
irq_cfg
*,
const
struct
cpumask
*);
128
extern
void
send_cleanup_vector
(
struct
irq_cfg
*);
129
130
struct
irq_data
;
131
int
__ioapic_set_affinity
(
struct
irq_data
*,
const
struct
cpumask
*,
132
unsigned
int
*
dest_id
);
133
extern
int
IO_APIC_get_PCI_irq_vector
(
int
bus
,
int
devfn
,
int
pin
,
struct
io_apic_irq_attr
*irq_attr);
134
extern
void
setup_ioapic_dest
(
void
);
135
136
extern
void
enable_IO_APIC
(
void
);
137
138
/* Statistics */
139
extern
atomic_t
irq_err_count
;
140
extern
atomic_t
irq_mis_count
;
141
142
/* EISA */
143
extern
void
eisa_set_level_irq
(
unsigned
int
irq
);
144
145
/* SMP */
146
extern
void
smp_apic_timer_interrupt
(
struct
pt_regs
*);
147
extern
void
smp_spurious_interrupt
(
struct
pt_regs
*);
148
extern
void
smp_x86_platform_ipi
(
struct
pt_regs
*);
149
extern
void
smp_error_interrupt
(
struct
pt_regs
*);
150
#ifdef CONFIG_X86_IO_APIC
151
extern
asmlinkage
void
smp_irq_move_cleanup_interrupt(
void
);
152
#endif
153
#ifdef CONFIG_SMP
154
extern
void
smp_reschedule_interrupt
(
struct
pt_regs
*);
155
extern
void
smp_call_function_interrupt
(
struct
pt_regs
*);
156
extern
void
smp_call_function_single_interrupt
(
struct
pt_regs
*);
157
#ifdef CONFIG_X86_32
158
extern
void
smp_invalidate_interrupt
(
struct
pt_regs
*);
159
#else
160
extern
asmlinkage
void
smp_invalidate_interrupt
(
struct
pt_regs
*);
161
#endif
162
#endif
163
164
extern
void
(*
__initconst
interrupt
[
NR_VECTORS
-
FIRST_EXTERNAL_VECTOR
])(
void
);
165
166
typedef
int
vector_irq_t
[
NR_VECTORS
];
167
DECLARE_PER_CPU
(
vector_irq_t
, vector_irq);
168
extern
void
setup_vector_irq
(
int
cpu
);
169
170
#ifdef CONFIG_X86_IO_APIC
171
extern
void
lock_vector_lock
(
void
);
172
extern
void
unlock_vector_lock
(
void
);
173
extern
void
__setup_vector_irq
(
int
cpu
);
174
#else
175
static
inline
void
lock_vector_lock
(
void
) {}
176
static
inline
void
unlock_vector_lock
(
void
) {}
177
static
inline
void
__setup_vector_irq
(
int
cpu
) {}
178
#endif
179
180
#endif
/* !ASSEMBLY_ */
181
182
#endif
/* _ASM_X86_HW_IRQ_H */
Generated on Thu Jan 10 2013 12:49:43 for Linux Kernel by
1.8.2