]> git.karo-electronics.de Git - mv-sheeva.git/blobdiff - arch/alpha/kernel/sys_titan.c
[PATCH] alpha pt_regs cleanups: handle_irq()
[mv-sheeva.git] / arch / alpha / kernel / sys_titan.c
index 2551fb49ae099150561407adc726e410b8e03c9f..e8e8ec9c0f4e2cff6f1690335c2ab9c3794a20ac 100644 (file)
@@ -12,7 +12,6 @@
  *     Granite
  */
 
-#include <linux/config.h>
 #include <linux/kernel.h>
 #include <linux/types.h>
 #include <linux/mm.h>
@@ -168,18 +167,18 @@ titan_set_irq_affinity(unsigned int irq, cpumask_t affinity)
 }
 
 static void
-titan_device_interrupt(unsigned long vector, struct pt_regs * regs)
+titan_device_interrupt(unsigned long vector)
 {
        printk("titan_device_interrupt: NOT IMPLEMENTED YET!! \n");
 }
 
 static void 
-titan_srm_device_interrupt(unsigned long vector, struct pt_regs * regs)
+titan_srm_device_interrupt(unsigned long vector)
 {
        int irq;
 
        irq = (vector - 0x800) >> 4;
-       handle_irq(irq, regs);
+       handle_irq(irq);
 }
 
 
@@ -189,7 +188,7 @@ init_titan_irqs(struct hw_interrupt_type * ops, int imin, int imax)
        long i;
        for (i = imin; i <= imax; ++i) {
                irq_desc[i].status = IRQ_DISABLED | IRQ_LEVEL;
-               irq_desc[i].handler = ops;
+               irq_desc[i].chip = ops;
        }
 }
 
@@ -246,6 +245,7 @@ titan_legacy_init_irq(void)
 void
 titan_dispatch_irqs(u64 mask, struct pt_regs *regs)
 {
+       struct pt_regs *old_regs;
        unsigned long vector;
 
        /*
@@ -253,6 +253,7 @@ titan_dispatch_irqs(u64 mask, struct pt_regs *regs)
         */
        mask &= titan_cpu_irq_affinity[smp_processor_id()];
 
+       old_regs = set_irq_regs(regs);
        /*
         * Dispatch all requested interrupts 
         */
@@ -264,8 +265,9 @@ titan_dispatch_irqs(u64 mask, struct pt_regs *regs)
                vector = 0x900 + (vector << 4); /* convert to SRM vector */
                
                /* dispatch it */
-               alpha_mv.device_interrupt(vector, regs);
+               alpha_mv.device_interrupt(vector);
        }
+       set_irq_regs(old_regs);
 }
   
 \f
@@ -280,15 +282,15 @@ titan_late_init(void)
         * all reported to the kernel as machine checks, so the handler
         * is a nop so it can be called to count the individual events.
         */
-       request_irq(63+16, titan_intr_nop, SA_INTERRUPT, 
+       request_irq(63+16, titan_intr_nop, IRQF_DISABLED,
                    "CChip Error", NULL);
-       request_irq(62+16, titan_intr_nop, SA_INTERRUPT, 
+       request_irq(62+16, titan_intr_nop, IRQF_DISABLED,
                    "PChip 0 H_Error", NULL);
-       request_irq(61+16, titan_intr_nop, SA_INTERRUPT, 
+       request_irq(61+16, titan_intr_nop, IRQF_DISABLED,
                    "PChip 1 H_Error", NULL);
-       request_irq(60+16, titan_intr_nop, SA_INTERRUPT, 
+       request_irq(60+16, titan_intr_nop, IRQF_DISABLED,
                    "PChip 0 C_Error", NULL);
-       request_irq(59+16, titan_intr_nop, SA_INTERRUPT, 
+       request_irq(59+16, titan_intr_nop, IRQF_DISABLED,
                    "PChip 1 C_Error", NULL);
 
        /* 
@@ -349,9 +351,9 @@ privateer_init_pci(void)
         * Hook a couple of extra err interrupts that the
         * common titan code won't.
         */
-       request_irq(53+16, titan_intr_nop, SA_INTERRUPT, 
+       request_irq(53+16, titan_intr_nop, IRQF_DISABLED,
                    "NMI", NULL);
-       request_irq(50+16, titan_intr_nop, SA_INTERRUPT, 
+       request_irq(50+16, titan_intr_nop, IRQF_DISABLED,
                    "Temperature Warning", NULL);
 
        /*