fedora core 6 1.2949 + vserver 2.2.0
[linux-2.6.git] / arch / mips / dec / ioasic-irq.c
index d5bca5d..4c7cb40 100644 (file)
@@ -13,7 +13,6 @@
 
 #include <linux/init.h>
 #include <linux/irq.h>
-#include <linux/spinlock.h>
 #include <linux/types.h>
 
 #include <asm/dec/ioasic.h>
@@ -21,8 +20,6 @@
 #include <asm/dec/ioasic_ints.h>
 
 
-static DEFINE_SPINLOCK(ioasic_lock);
-
 static int ioasic_irq_base;
 
 
@@ -52,65 +49,30 @@ static inline void clear_ioasic_irq(unsigned int irq)
        ioasic_write(IO_REG_SIR, sir);
 }
 
-static inline void enable_ioasic_irq(unsigned int irq)
-{
-       unsigned long flags;
-
-       spin_lock_irqsave(&ioasic_lock, flags);
-       unmask_ioasic_irq(irq);
-       spin_unlock_irqrestore(&ioasic_lock, flags);
-}
-
-static inline void disable_ioasic_irq(unsigned int irq)
-{
-       unsigned long flags;
-
-       spin_lock_irqsave(&ioasic_lock, flags);
-       mask_ioasic_irq(irq);
-       spin_unlock_irqrestore(&ioasic_lock, flags);
-}
-
-
-static inline unsigned int startup_ioasic_irq(unsigned int irq)
-{
-       enable_ioasic_irq(irq);
-       return 0;
-}
-
-#define shutdown_ioasic_irq disable_ioasic_irq
-
 static inline void ack_ioasic_irq(unsigned int irq)
 {
-       spin_lock(&ioasic_lock);
        mask_ioasic_irq(irq);
-       spin_unlock(&ioasic_lock);
        fast_iob();
 }
 
 static inline void end_ioasic_irq(unsigned int irq)
 {
        if (!(irq_desc[irq].status & (IRQ_DISABLED | IRQ_INPROGRESS)))
-               enable_ioasic_irq(irq);
+               unmask_ioasic_irq(irq);
 }
 
-static struct hw_interrupt_type ioasic_irq_type = {
+static struct irq_chip ioasic_irq_type = {
        .typename = "IO-ASIC",
-       .startup = startup_ioasic_irq,
-       .shutdown = shutdown_ioasic_irq,
-       .enable = enable_ioasic_irq,
-       .disable = disable_ioasic_irq,
        .ack = ack_ioasic_irq,
-       .end = end_ioasic_irq,
+       .mask = mask_ioasic_irq,
+       .mask_ack = ack_ioasic_irq,
+       .unmask = unmask_ioasic_irq,
 };
 
 
-#define startup_ioasic_dma_irq startup_ioasic_irq
-
-#define shutdown_ioasic_dma_irq shutdown_ioasic_irq
-
-#define enable_ioasic_dma_irq enable_ioasic_irq
+#define unmask_ioasic_dma_irq unmask_ioasic_irq
 
-#define disable_ioasic_dma_irq disable_ioasic_irq
+#define mask_ioasic_dma_irq mask_ioasic_irq
 
 #define ack_ioasic_dma_irq ack_ioasic_irq
 
@@ -121,13 +83,12 @@ static inline void end_ioasic_dma_irq(unsigned int irq)
        end_ioasic_irq(irq);
 }
 
-static struct hw_interrupt_type ioasic_dma_irq_type = {
+static struct irq_chip ioasic_dma_irq_type = {
        .typename = "IO-ASIC-DMA",
-       .startup = startup_ioasic_dma_irq,
-       .shutdown = shutdown_ioasic_dma_irq,
-       .enable = enable_ioasic_dma_irq,
-       .disable = disable_ioasic_dma_irq,
        .ack = ack_ioasic_dma_irq,
+       .mask = mask_ioasic_dma_irq,
+       .mask_ack = ack_ioasic_dma_irq,
+       .unmask = unmask_ioasic_dma_irq,
        .end = end_ioasic_dma_irq,
 };
 
@@ -140,18 +101,11 @@ void __init init_ioasic_irqs(int base)
        ioasic_write(IO_REG_SIMR, 0);
        fast_iob();
 
-       for (i = base; i < base + IO_INR_DMA; i++) {
-               irq_desc[i].status = IRQ_DISABLED;
-               irq_desc[i].action = 0;
-               irq_desc[i].depth = 1;
-               irq_desc[i].handler = &ioasic_irq_type;
-       }
-       for (; i < base + IO_IRQ_LINES; i++) {
-               irq_desc[i].status = IRQ_DISABLED;
-               irq_desc[i].action = 0;
-               irq_desc[i].depth = 1;
-               irq_desc[i].handler = &ioasic_dma_irq_type;
-       }
+       for (i = base; i < base + IO_INR_DMA; i++)
+               set_irq_chip_and_handler(i, &ioasic_irq_type,
+                                        handle_level_irq);
+       for (; i < base + IO_IRQ_LINES; i++)
+               set_irq_chip(i, &ioasic_dma_irq_type);
 
        ioasic_irq_base = base;
 }