diff options
-rw-r--r-- | include/linux/irq.h | 30 | ||||
-rw-r--r-- | kernel/irq/chip.c | 12 |
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 | ||
25 | struct irq_desc; | ||
26 | typedef 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 | */ |
141 | struct irq_desc { | 147 | struct 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 | */ |
284 | extern const char * | 288 | extern const char *handle_irq_name(irq_flow_handler_t handle); |
285 | handle_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 | ||
336 | extern void | 338 | extern void |
337 | set_irq_chip_and_handler(unsigned int irq, struct irq_chip *chip, | 339 | set_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 *)); | ||
341 | extern void | 341 | extern 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 | */ |
350 | static inline void | 347 | static inline void |
351 | set_irq_handler(unsigned int irq, | 348 | set_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 | */ |
363 | static inline void | 358 | static inline void |
364 | set_irq_chained_handler(unsigned int irq, | 359 | set_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 | ||
507 | void | 507 | void |
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 | ||
562 | void | 559 | void |
563 | set_irq_chip_and_handler(unsigned int irq, struct irq_chip *chip, | 560 | set_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 | */ |
576 | const char * | 571 | const char * |
577 | handle_irq_name(void fastcall (*handle)(unsigned int, struct irq_desc *, | 572 | handle_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 "; |