diff options
Diffstat (limited to 'include/linux/interrupt.h')
| -rw-r--r-- | include/linux/interrupt.h | 38 |
1 files changed, 27 insertions, 11 deletions
diff --git a/include/linux/interrupt.h b/include/linux/interrupt.h index a103732b7588..664544ff77d5 100644 --- a/include/linux/interrupt.h +++ b/include/linux/interrupt.h | |||
| @@ -95,6 +95,7 @@ typedef irqreturn_t (*irq_handler_t)(int, void *); | |||
| 95 | * @flags: flags (see IRQF_* above) | 95 | * @flags: flags (see IRQF_* above) |
| 96 | * @name: name of the device | 96 | * @name: name of the device |
| 97 | * @dev_id: cookie to identify the device | 97 | * @dev_id: cookie to identify the device |
| 98 | * @percpu_dev_id: cookie to identify the device | ||
| 98 | * @next: pointer to the next irqaction for shared interrupts | 99 | * @next: pointer to the next irqaction for shared interrupts |
| 99 | * @irq: interrupt number | 100 | * @irq: interrupt number |
| 100 | * @dir: pointer to the proc/irq/NN/name entry | 101 | * @dir: pointer to the proc/irq/NN/name entry |
| @@ -104,17 +105,18 @@ typedef irqreturn_t (*irq_handler_t)(int, void *); | |||
| 104 | * @thread_mask: bitmask for keeping track of @thread activity | 105 | * @thread_mask: bitmask for keeping track of @thread activity |
| 105 | */ | 106 | */ |
| 106 | struct irqaction { | 107 | struct irqaction { |
| 107 | irq_handler_t handler; | 108 | irq_handler_t handler; |
| 108 | unsigned long flags; | 109 | unsigned long flags; |
| 109 | void *dev_id; | 110 | void *dev_id; |
| 110 | struct irqaction *next; | 111 | void __percpu *percpu_dev_id; |
| 111 | int irq; | 112 | struct irqaction *next; |
| 112 | irq_handler_t thread_fn; | 113 | int irq; |
| 113 | struct task_struct *thread; | 114 | irq_handler_t thread_fn; |
| 114 | unsigned long thread_flags; | 115 | struct task_struct *thread; |
| 115 | unsigned long thread_mask; | 116 | unsigned long thread_flags; |
| 116 | const char *name; | 117 | unsigned long thread_mask; |
| 117 | struct proc_dir_entry *dir; | 118 | const char *name; |
| 119 | struct proc_dir_entry *dir; | ||
| 118 | } ____cacheline_internodealigned_in_smp; | 120 | } ____cacheline_internodealigned_in_smp; |
| 119 | 121 | ||
| 120 | extern irqreturn_t no_action(int cpl, void *dev_id); | 122 | extern irqreturn_t no_action(int cpl, void *dev_id); |
| @@ -136,6 +138,10 @@ extern int __must_check | |||
| 136 | request_any_context_irq(unsigned int irq, irq_handler_t handler, | 138 | request_any_context_irq(unsigned int irq, irq_handler_t handler, |
| 137 | unsigned long flags, const char *name, void *dev_id); | 139 | unsigned long flags, const char *name, void *dev_id); |
| 138 | 140 | ||
| 141 | extern int __must_check | ||
| 142 | request_percpu_irq(unsigned int irq, irq_handler_t handler, | ||
| 143 | const char *devname, void __percpu *percpu_dev_id); | ||
| 144 | |||
| 139 | extern void exit_irq_thread(void); | 145 | extern void exit_irq_thread(void); |
| 140 | #else | 146 | #else |
| 141 | 147 | ||
| @@ -164,10 +170,18 @@ request_any_context_irq(unsigned int irq, irq_handler_t handler, | |||
| 164 | return request_irq(irq, handler, flags, name, dev_id); | 170 | return request_irq(irq, handler, flags, name, dev_id); |
| 165 | } | 171 | } |
| 166 | 172 | ||
| 173 | static inline int __must_check | ||
| 174 | request_percpu_irq(unsigned int irq, irq_handler_t handler, | ||
| 175 | const char *devname, void __percpu *percpu_dev_id) | ||
| 176 | { | ||
| 177 | return request_irq(irq, handler, 0, devname, percpu_dev_id); | ||
| 178 | } | ||
| 179 | |||
| 167 | static inline void exit_irq_thread(void) { } | 180 | static inline void exit_irq_thread(void) { } |
| 168 | #endif | 181 | #endif |
| 169 | 182 | ||
| 170 | extern void free_irq(unsigned int, void *); | 183 | extern void free_irq(unsigned int, void *); |
| 184 | extern void free_percpu_irq(unsigned int, void __percpu *); | ||
| 171 | 185 | ||
| 172 | struct device; | 186 | struct device; |
| 173 | 187 | ||
| @@ -207,7 +221,9 @@ extern void devm_free_irq(struct device *dev, unsigned int irq, void *dev_id); | |||
| 207 | 221 | ||
| 208 | extern void disable_irq_nosync(unsigned int irq); | 222 | extern void disable_irq_nosync(unsigned int irq); |
| 209 | extern void disable_irq(unsigned int irq); | 223 | extern void disable_irq(unsigned int irq); |
| 224 | extern void disable_percpu_irq(unsigned int irq); | ||
| 210 | extern void enable_irq(unsigned int irq); | 225 | extern void enable_irq(unsigned int irq); |
| 226 | extern void enable_percpu_irq(unsigned int irq, unsigned int type); | ||
| 211 | 227 | ||
| 212 | /* The following three functions are for the core kernel use only. */ | 228 | /* The following three functions are for the core kernel use only. */ |
| 213 | #ifdef CONFIG_GENERIC_HARDIRQS | 229 | #ifdef CONFIG_GENERIC_HARDIRQS |
