aboutsummaryrefslogtreecommitdiffstats
path: root/arch/m68k/kernel/ints.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/m68k/kernel/ints.c')
-rw-r--r--arch/m68k/kernel/ints.c20
1 files changed, 14 insertions, 6 deletions
diff --git a/arch/m68k/kernel/ints.c b/arch/m68k/kernel/ints.c
index b33e37fb7b0e..6fa893fc5fd6 100644
--- a/arch/m68k/kernel/ints.c
+++ b/arch/m68k/kernel/ints.c
@@ -39,6 +39,7 @@
39#include <asm/page.h> 39#include <asm/page.h>
40#include <asm/machdep.h> 40#include <asm/machdep.h>
41#include <asm/cacheflush.h> 41#include <asm/cacheflush.h>
42#include <asm/irq_regs.h>
42 43
43#ifdef CONFIG_Q40 44#ifdef CONFIG_Q40
44#include <asm/q40ints.h> 45#include <asm/q40ints.h>
@@ -104,7 +105,7 @@ void __init init_IRQ(void)
104 * @handler: called from auto vector interrupts 105 * @handler: called from auto vector interrupts
105 * 106 *
106 * setup the handler to be called from auto vector interrupts instead of the 107 * setup the handler to be called from auto vector interrupts instead of the
107 * standard m68k_handle_int(), it will be called with irq numbers in the range 108 * standard __m68k_handle_int(), it will be called with irq numbers in the range
108 * from IRQ_AUTO_1 - IRQ_AUTO_7. 109 * from IRQ_AUTO_1 - IRQ_AUTO_7.
109 */ 110 */
110void __init m68k_setup_auto_interrupt(void (*handler)(unsigned int, struct pt_regs *)) 111void __init m68k_setup_auto_interrupt(void (*handler)(unsigned int, struct pt_regs *))
@@ -123,7 +124,7 @@ void __init m68k_setup_auto_interrupt(void (*handler)(unsigned int, struct pt_re
123 * setup user vector interrupts, this includes activating the specified range 124 * setup user vector interrupts, this includes activating the specified range
124 * of interrupts, only then these interrupts can be requested (note: this is 125 * of interrupts, only then these interrupts can be requested (note: this is
125 * different from auto vector interrupts). An optional handler can be installed 126 * different from auto vector interrupts). An optional handler can be installed
126 * to be called instead of the default m68k_handle_int(), it will be called 127 * to be called instead of the default __m68k_handle_int(), it will be called
127 * with irq numbers starting from IRQ_USER. 128 * with irq numbers starting from IRQ_USER.
128 */ 129 */
129void __init m68k_setup_user_interrupt(unsigned int vec, unsigned int cnt, 130void __init m68k_setup_user_interrupt(unsigned int vec, unsigned int cnt,
@@ -215,7 +216,7 @@ int setup_irq(unsigned int irq, struct irq_node *node)
215} 216}
216 217
217int request_irq(unsigned int irq, 218int request_irq(unsigned int irq,
218 irqreturn_t (*handler) (int, void *, struct pt_regs *), 219 irqreturn_t (*handler) (int, void *),
219 unsigned long flags, const char *devname, void *dev_id) 220 unsigned long flags, const char *devname, void *dev_id)
220{ 221{
221 struct irq_node *node; 222 struct irq_node *node;
@@ -379,18 +380,25 @@ unsigned int irq_canonicalize(unsigned int irq)
379 380
380EXPORT_SYMBOL(irq_canonicalize); 381EXPORT_SYMBOL(irq_canonicalize);
381 382
382asmlinkage void m68k_handle_int(unsigned int irq, struct pt_regs *regs) 383asmlinkage void m68k_handle_int(unsigned int irq)
383{ 384{
384 struct irq_node *node; 385 struct irq_node *node;
385
386 kstat_cpu(0).irqs[irq]++; 386 kstat_cpu(0).irqs[irq]++;
387 node = irq_list[irq]; 387 node = irq_list[irq];
388 do { 388 do {
389 node->handler(irq, node->dev_id, regs); 389 node->handler(irq, node->dev_id);
390 node = node->next; 390 node = node->next;
391 } while (node); 391 } while (node);
392} 392}
393 393
394asmlinkage void __m68k_handle_int(unsigned int irq, struct pt_regs *regs)
395{
396 struct pt_regs *old_regs;
397 old_regs = set_irq_regs(regs);
398 m68k_handle_int(irq);
399 set_irq_regs(old_regs);
400}
401
394asmlinkage void handle_badint(struct pt_regs *regs) 402asmlinkage void handle_badint(struct pt_regs *regs)
395{ 403{
396 kstat_cpu(0).irqs[0]++; 404 kstat_cpu(0).irqs[0]++;