diff options
author | Ralf Baechle <ralf@linux-mips.org> | 2000-03-07 15:45:24 +0000 |
---|---|---|
committer | Ralf Baechle <ralf@linux-mips.org> | 2000-03-07 15:45:24 +0000 |
commit | 9f9f3e6e8548a596697778337110a423c384b6f3 (patch) | |
tree | 5dd4b290ef532cf5ecb058e1a92cd3435afeac8c /arch/alpha/kernel/sys_alcor.c | |
parent | d5c9a365ee7d2fded249aa5abfc5e89587583029 (diff) |
Merge with Linux 2.3.49.
Diffstat (limited to 'arch/alpha/kernel/sys_alcor.c')
-rw-r--r-- | arch/alpha/kernel/sys_alcor.c | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/arch/alpha/kernel/sys_alcor.c b/arch/alpha/kernel/sys_alcor.c index 5498c72ec..867d762f8 100644 --- a/arch/alpha/kernel/sys_alcor.c +++ b/arch/alpha/kernel/sys_alcor.c @@ -48,7 +48,7 @@ alcor_enable_irq(unsigned int irq) alcor_update_irq_hw(cached_irq_mask |= 1UL << (irq - 16)); } -static inline void +static void alcor_disable_irq(unsigned int irq) { alcor_update_irq_hw(cached_irq_mask &= ~(1UL << (irq - 16))); @@ -81,6 +81,13 @@ alcor_isa_mask_and_ack_irq(unsigned int irq) *(vuip)GRU_INT_CLEAR = 0; mb(); } +static void +alcor_end_irq(unsigned int irq) +{ + if (!(irq_desc[irq].status & (IRQ_DISABLED|IRQ_INPROGRESS))) + alcor_enable_irq(irq); +} + static struct hw_interrupt_type alcor_irq_type = { typename: "ALCOR", startup: alcor_startup_irq, @@ -88,7 +95,7 @@ static struct hw_interrupt_type alcor_irq_type = { enable: alcor_enable_irq, disable: alcor_disable_irq, ack: alcor_mask_and_ack_irq, - end: alcor_enable_irq, + end: alcor_end_irq, }; static void @@ -134,13 +141,12 @@ alcor_init_irq(void) on while IRQ probing. */ if (i >= 16+20 && i <= 16+30) continue; - irq_desc[i].status = IRQ_DISABLED; + irq_desc[i].status = IRQ_DISABLED | IRQ_LEVEL; irq_desc[i].handler = &alcor_irq_type; } i8259a_irq_type.ack = alcor_isa_mask_and_ack_irq; init_i8259a_irqs(); - init_rtc_irq(); common_init_isa_dma(); setup_irq(16+31, &isa_cascade_irqaction); |