Fix real-time interrupt handlers for 2.6.19.
authorIan Abbott <abbotti@mev.co.uk>
Mon, 16 Jul 2007 17:39:58 +0000 (17:39 +0000)
committerIan Abbott <abbotti@mev.co.uk>
Mon, 16 Jul 2007 17:39:58 +0000 (17:39 +0000)
comedi/rt.c
comedi/rt_pend_tq.c
include/linux/comedi_rt.h
include/linux/interrupt.h

index debe8a1b68c3e7f0e91d12e4ec717855c8a05bcb..968d0c8a15518877f4c0440dbcfd564bc6feef88 100644 (file)
@@ -54,7 +54,7 @@
 struct comedi_irq_struct {
        int rt;
        int irq;
-       irqreturn_t (*handler)(int irq,void *dev_id,struct pt_regs *regs);
+       irqreturn_t (*handler)(int irq,void *dev_id PT_REGS_ARG);
        unsigned long flags;
        const char *device;
        comedi_device *dev_id;
@@ -65,7 +65,8 @@ static int comedi_rt_release_irq(struct comedi_irq_struct *it);
 
 static struct comedi_irq_struct *comedi_irqs[NR_IRQS];
 
-int comedi_request_irq(unsigned irq, irqreturn_t (*handler)(int, void *,struct pt_regs *),
+int comedi_request_irq(unsigned irq, irqreturn_t (*handler)(int, void *
+                       PT_REGS_ARG),
                unsigned long flags,const char *device,comedi_device *dev_id)
 {
        struct comedi_irq_struct *it;
@@ -194,7 +195,7 @@ static void handle_void_irq(int irq)
                rt_printk("comedi: null irq struct?\n");
                return;
        }
-       it->handler(irq, it->dev_idNULL);
+       it->handler(irq, it->dev_id PT_REGS_NULL);
        rt_enable_irq(irq);     //needed by rtai-adeos, seems like it shouldn't hurt earlier versions
 }
 
@@ -312,7 +313,7 @@ static void fusion_handle_irq(unsigned int irq, void *cookie)
 {
        struct comedi_irq_struct *it = cookie;
 
-       it->handler(irq, it->dev_idNULL);
+       it->handler(irq, it->dev_id PT_REGS_NULL);
        rthal_irq_enable(irq);
 }
 
@@ -345,13 +346,13 @@ void comedi_rt_cleanup(void)
 /* RTLinux section */
 #ifdef CONFIG_COMEDI_RTL
 
-static unsigned int handle_rtl_irq(unsigned int irq,struct pt_regs *regs)
+static unsigned int handle_rtl_irq(unsigned int irq PT_REGS_ARG)
 {
        struct comedi_irq_struct *it;
 
        it = comedi_irqs[irq];
        if( it == NULL ) return 0;
-       it->handler( irq, it->dev_id, regs );
+       it->handler( irq, it->dev_id PT_REGS_NULL );
        rtl_hard_enable_irq(irq);
        return 0;
 }
index 2681ef9d3c44d23fa69020715e9d5679b5d2cafe..a261169acda0b81eea461b0311918ae41b6bf36f 100644 (file)
@@ -69,7 +69,7 @@ void rt_pend_irq_handler(void)
 #elif defined(CONFIG_COMEDI_FUSION)
 void rt_pend_irq_handler(void * cookie)
 #elif defined(CONFIG_COMEDI_RTL)
-void rt_pend_irq_handler(int irq, void *dev, struct pt_regs * regs)
+void rt_pend_irq_handler(int irq, void *dev PT_REGS_ARG)
 #endif
 {
        while(rt_pend_head!=rt_pend_tail) {
index 8e23dfb341d377e325d149ee950ca79bd7b9687c..8fc06446da8239802213c1a0e7eea81f8b1e44a5 100644 (file)
@@ -57,8 +57,8 @@
 #define rt_printk printk
 #endif
 
-int comedi_request_irq(unsigned int irq,irqreturn_t (*handler)(int,void *,
-       struct pt_regs *regs),unsigned long flags,const char *device,
+int comedi_request_irq(unsigned int irq,irqreturn_t (*handler)(int,void *
+       PT_REGS_ARG),unsigned long flags,const char *device,
        comedi_device *dev_id);
 void comedi_free_irq(unsigned int irq,comedi_device *dev_id);
 void comedi_rt_init(void);
index 1cea8d93e40c174a26f3852b6c7f819303fa33a3..881f02b81a7b3467b6c17e9b404a6839a74c2946 100644 (file)
@@ -56,8 +56,12 @@ typedef void irqreturn_t;
 /* if interrupt handler prototype has pt_regs* parameter */
 #if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 19)
 #define PT_REGS_ARG , struct pt_regs *regs
+#define PT_REGS_CALL , regs
+#define PT_REGS_NULL , NULL
 #else
 #define PT_REGS_ARG
+#define PT_REGS_CALL
+#define PT_REGS_NULL
 #endif
 
 #endif