fedora core 6 1.2949 + vserver 2.2.0
[linux-2.6.git] / arch / ppc / platforms / sbc82xx.c
index 3a404a8..cc0935c 100644 (file)
@@ -1,6 +1,4 @@
 /*
- * arch/ppc/platforms/sbc82xx.c
- *
  * SBC82XX platform support
  *
  * Author: Guy Streeter <streeter@redhat.com>
@@ -15,7 +13,6 @@
  * option) any later version.
  */
 
-#include <linux/config.h>
 #include <linux/stddef.h>
 #include <linux/interrupt.h>
 #include <linux/irq.h>
@@ -68,7 +65,7 @@ static void sbc82xx_time_init(void)
 
 static volatile char *sbc82xx_i8259_map;
 static char sbc82xx_i8259_mask = 0xff;
-static spinlock_t sbc82xx_i8259_lock = SPIN_LOCK_UNLOCKED;
+static DEFINE_SPINLOCK(sbc82xx_i8259_lock);
 
 static void sbc82xx_i8259_mask_and_ack_irq(unsigned int irq_nr)
 {
@@ -124,7 +121,7 @@ struct hw_interrupt_type sbc82xx_i8259_ic = {
        .end = sbc82xx_i8259_end_irq,
 };
 
-static irqreturn_t sbc82xx_i8259_demux(int irq, void *dev_id, struct pt_regs *regs)
+static irqreturn_t sbc82xx_i8259_demux(int irq, void *dev_id)
 {
        spin_lock(&sbc82xx_i8259_lock);
 
@@ -142,10 +139,17 @@ static irqreturn_t sbc82xx_i8259_demux(int irq, void *dev_id, struct pt_regs *re
                        return IRQ_HANDLED;
                }
        }
-       ppc_irq_dispatch_handler(regs, NR_SIU_INTS + irq);
+       __do_IRQ(NR_SIU_INTS + irq);
        return IRQ_HANDLED;
 }
 
+static struct irqaction sbc82xx_i8259_irqaction = {
+       .handler = sbc82xx_i8259_demux,
+       .flags = IRQF_DISABLED,
+       .mask = CPU_MASK_NONE,
+       .name = "i8259 demux",
+};
+
 void __init sbc82xx_init_IRQ(void)
 {
        volatile memctl_cpm2_t *mc = &cpm2_immr->im_memctl;
@@ -167,7 +171,7 @@ void __init sbc82xx_init_IRQ(void)
        
        /* Set up the interrupt handlers for the i8259 IRQs */
        for (i = NR_SIU_INTS; i < NR_SIU_INTS + 8; i++) {
-                irq_desc[i].handler = &sbc82xx_i8259_ic;
+                irq_desc[i].chip = &sbc82xx_i8259_ic;
                irq_desc[i].status |= IRQ_LEVEL;
        }
 
@@ -186,8 +190,7 @@ void __init sbc82xx_init_IRQ(void)
        sbc82xx_i8259_map[1] = sbc82xx_i8259_mask; /* Set interrupt mask */
 
        /* Request cascade IRQ */
-       if (request_irq(SIU_INT_IRQ6, sbc82xx_i8259_demux, SA_INTERRUPT,
-                       "i8259 demux", 0)) {
+       if (setup_irq(SIU_INT_IRQ6, &sbc82xx_i8259_irqaction)) {
                printk("Installation of i8259 IRQ demultiplexer failed.\n");
        }
 }