aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/linux/irq.h30
-rw-r--r--kernel/irq/chip.c12
2 files changed, 15 insertions, 27 deletions
diff --git a/include/linux/irq.h b/include/linux/irq.h
index 6f463606c318..b947d46e4b18 100644
--- a/include/linux/irq.h
+++ b/include/linux/irq.h
@@ -22,6 +22,12 @@
22#include <asm/irq.h> 22#include <asm/irq.h>
23#include <asm/ptrace.h> 23#include <asm/ptrace.h>
24 24
25struct irq_desc;
26typedef void fastcall (*irq_flow_handler_t)(unsigned int irq,
27 struct irq_desc *desc,
28 struct pt_regs *regs);
29
30
25/* 31/*
26 * IRQ line status. 32 * IRQ line status.
27 * 33 *
@@ -139,9 +145,7 @@ struct irq_chip {
139 * Pad this out to 32 bytes for cache and indexing reasons. 145 * Pad this out to 32 bytes for cache and indexing reasons.
140 */ 146 */
141struct irq_desc { 147struct irq_desc {
142 void fastcall (*handle_irq)(unsigned int irq, 148 irq_flow_handler_t handle_irq;
143 struct irq_desc *desc,
144 struct pt_regs *regs);
145 struct irq_chip *chip; 149 struct irq_chip *chip;
146 void *handler_data; 150 void *handler_data;
147 void *chip_data; 151 void *chip_data;
@@ -281,9 +285,7 @@ handle_bad_irq(unsigned int irq, struct irq_desc *desc, struct pt_regs *regs);
281 * Get a descriptive string for the highlevel handler, for 285 * Get a descriptive string for the highlevel handler, for
282 * /proc/interrupts output: 286 * /proc/interrupts output:
283 */ 287 */
284extern const char * 288extern const char *handle_irq_name(irq_flow_handler_t handle);
285handle_irq_name(void fastcall (*handle)(unsigned int, struct irq_desc *,
286 struct pt_regs *));
287 289
288/* 290/*
289 * Monolithic do_IRQ implementation. 291 * Monolithic do_IRQ implementation.
@@ -335,22 +337,15 @@ extern struct irq_chip dummy_irq_chip;
335 337
336extern void 338extern void
337set_irq_chip_and_handler(unsigned int irq, struct irq_chip *chip, 339set_irq_chip_and_handler(unsigned int irq, struct irq_chip *chip,
338 void fastcall (*handle)(unsigned int, 340 irq_flow_handler_t handle);
339 struct irq_desc *,
340 struct pt_regs *));
341extern void 341extern void
342__set_irq_handler(unsigned int irq, 342__set_irq_handler(unsigned int irq, irq_flow_handler_t handle, int is_chained);
343 void fastcall (*handle)(unsigned int, struct irq_desc *,
344 struct pt_regs *),
345 int is_chained);
346 343
347/* 344/*
348 * Set a highlevel flow handler for a given IRQ: 345 * Set a highlevel flow handler for a given IRQ:
349 */ 346 */
350static inline void 347static inline void
351set_irq_handler(unsigned int irq, 348set_irq_handler(unsigned int irq, irq_flow_handler_t handle)
352 void fastcall (*handle)(unsigned int, struct irq_desc *,
353 struct pt_regs *))
354{ 349{
355 __set_irq_handler(irq, handle, 0); 350 __set_irq_handler(irq, handle, 0);
356} 351}
@@ -362,8 +357,7 @@ set_irq_handler(unsigned int irq,
362 */ 357 */
363static inline void 358static inline void
364set_irq_chained_handler(unsigned int irq, 359set_irq_chained_handler(unsigned int irq,
365 void fastcall (*handle)(unsigned int, struct irq_desc *, 360 irq_flow_handler_t handle)
366 struct pt_regs *))
367{ 361{
368 __set_irq_handler(irq, handle, 1); 362 __set_irq_handler(irq, handle, 1);
369} 363}
diff --git a/kernel/irq/chip.c b/kernel/irq/chip.c
index 4cf65f5c6a74..53e9dce6c657 100644
--- a/kernel/irq/chip.c
+++ b/kernel/irq/chip.c
@@ -505,10 +505,7 @@ handle_percpu_irq(unsigned int irq, struct irq_desc *desc, struct pt_regs *regs)
505#endif /* CONFIG_SMP */ 505#endif /* CONFIG_SMP */
506 506
507void 507void
508__set_irq_handler(unsigned int irq, 508__set_irq_handler(unsigned int irq, irq_flow_handler_t handle, int is_chained)
509 void fastcall (*handle)(unsigned int, irq_desc_t *,
510 struct pt_regs *),
511 int is_chained)
512{ 509{
513 struct irq_desc *desc; 510 struct irq_desc *desc;
514 unsigned long flags; 511 unsigned long flags;
@@ -561,9 +558,7 @@ __set_irq_handler(unsigned int irq,
561 558
562void 559void
563set_irq_chip_and_handler(unsigned int irq, struct irq_chip *chip, 560set_irq_chip_and_handler(unsigned int irq, struct irq_chip *chip,
564 void fastcall (*handle)(unsigned int, 561 irq_flow_handler_t handle)
565 struct irq_desc *,
566 struct pt_regs *))
567{ 562{
568 set_irq_chip(irq, chip); 563 set_irq_chip(irq, chip);
569 __set_irq_handler(irq, handle, 0); 564 __set_irq_handler(irq, handle, 0);
@@ -574,8 +569,7 @@ set_irq_chip_and_handler(unsigned int irq, struct irq_chip *chip,
574 * /proc/interrupts output: 569 * /proc/interrupts output:
575 */ 570 */
576const char * 571const char *
577handle_irq_name(void fastcall (*handle)(unsigned int, struct irq_desc *, 572handle_irq_name(irq_flow_handler_t handle)
578 struct pt_regs *))
579{ 573{
580 if (handle == handle_level_irq) 574 if (handle == handle_level_irq)
581 return "level "; 575 return "level ";