diff options
Diffstat (limited to 'arch/parisc/kernel/irq.c')
-rw-r--r-- | arch/parisc/kernel/irq.c | 26 |
1 files changed, 16 insertions, 10 deletions
diff --git a/arch/parisc/kernel/irq.c b/arch/parisc/kernel/irq.c index efbcee5d2220..272c29a44f2a 100644 --- a/arch/parisc/kernel/irq.c +++ b/arch/parisc/kernel/irq.c | |||
@@ -151,7 +151,7 @@ static struct irq_chip cpu_interrupt_type = { | |||
151 | .enable = cpu_enable_irq, | 151 | .enable = cpu_enable_irq, |
152 | .disable = cpu_disable_irq, | 152 | .disable = cpu_disable_irq, |
153 | .ack = cpu_ack_irq, | 153 | .ack = cpu_ack_irq, |
154 | .end = cpu_end_irq, | 154 | .eoi = cpu_end_irq, |
155 | #ifdef CONFIG_SMP | 155 | #ifdef CONFIG_SMP |
156 | .set_affinity = cpu_set_affinity_irq, | 156 | .set_affinity = cpu_set_affinity_irq, |
157 | #endif | 157 | #endif |
@@ -247,10 +247,11 @@ int cpu_claim_irq(unsigned int irq, struct irq_chip *type, void *data) | |||
247 | if (irq_desc[irq].chip != &cpu_interrupt_type) | 247 | if (irq_desc[irq].chip != &cpu_interrupt_type) |
248 | return -EBUSY; | 248 | return -EBUSY; |
249 | 249 | ||
250 | /* for iosapic interrupts */ | ||
250 | if (type) { | 251 | if (type) { |
251 | irq_desc[irq].chip = type; | 252 | set_irq_chip_and_handler(irq, type, parisc_do_IRQ); |
252 | irq_desc[irq].chip_data = data; | 253 | set_irq_chip_data(irq, data); |
253 | cpu_interrupt_type.enable(irq); | 254 | cpu_enable_irq(irq); |
254 | } | 255 | } |
255 | return 0; | 256 | return 0; |
256 | } | 257 | } |
@@ -368,7 +369,7 @@ void do_cpu_irq_mask(struct pt_regs *regs) | |||
368 | goto set_out; | 369 | goto set_out; |
369 | } | 370 | } |
370 | #endif | 371 | #endif |
371 | __do_IRQ(irq); | 372 | generic_handle_irq(irq); |
372 | 373 | ||
373 | out: | 374 | out: |
374 | irq_exit(); | 375 | irq_exit(); |
@@ -398,14 +399,14 @@ static void claim_cpu_irqs(void) | |||
398 | { | 399 | { |
399 | int i; | 400 | int i; |
400 | for (i = CPU_IRQ_BASE; i <= CPU_IRQ_MAX; i++) { | 401 | for (i = CPU_IRQ_BASE; i <= CPU_IRQ_MAX; i++) { |
401 | irq_desc[i].chip = &cpu_interrupt_type; | 402 | set_irq_chip_and_handler(i, &cpu_interrupt_type, parisc_do_IRQ); |
402 | } | 403 | } |
403 | 404 | ||
404 | irq_desc[TIMER_IRQ].action = &timer_action; | 405 | set_irq_handler(TIMER_IRQ, handle_percpu_irq); |
405 | irq_desc[TIMER_IRQ].status = IRQ_PER_CPU; | 406 | setup_irq(TIMER_IRQ, &timer_action); |
406 | #ifdef CONFIG_SMP | 407 | #ifdef CONFIG_SMP |
407 | irq_desc[IPI_IRQ].action = &ipi_action; | 408 | set_irq_handler(IPI_IRQ, handle_percpu_irq); |
408 | irq_desc[IPI_IRQ].status = IRQ_PER_CPU; | 409 | setup_irq(IPI_IRQ, &ipi_action); |
409 | #endif | 410 | #endif |
410 | } | 411 | } |
411 | 412 | ||
@@ -423,3 +424,8 @@ void __init init_IRQ(void) | |||
423 | set_eiem(cpu_eiem); /* EIEM : enable all external intr */ | 424 | set_eiem(cpu_eiem); /* EIEM : enable all external intr */ |
424 | 425 | ||
425 | } | 426 | } |
427 | |||
428 | void parisc_do_IRQ(unsigned int irq, struct irq_desc *desc) | ||
429 | { | ||
430 | __do_IRQ(irq); | ||
431 | } | ||