Initial priority IRQ support
authorDavid Schleef <ds@schleef.org>
Mon, 13 Aug 2001 10:23:35 +0000 (10:23 +0000)
committerDavid Schleef <ds@schleef.org>
Mon, 13 Aug 2001 10:23:35 +0000 (10:23 +0000)
comedi/Makefile
comedi/rt.c

index dce14283656c98f98aac2686438eaff34540f5c2..f911ec9b65fa6013e81580379659e2935ea4736f 100644 (file)
@@ -13,9 +13,11 @@ ifneq ($(CONFIG_COMEDI_KLIB),)
 endif
 
 ifeq ($(CONFIG_COMEDI_RT),y)
+  ifneq ($(CONFIG_COMEDI_PIRQ),y)
        MOD_SUB_DIRS += rt_pend_tq
        SUB_DIRS += rt_pend_tq
        EXTRA_OBJS := rt_pend_tq/rt_pend_tq.o
+  endif
 endif
 
 MOD_LIST_NAME := MISC_MODULES
index b481a52c97c71fbc8a81237518737af21f4375c1..f382a54a97506c8f5819f1821060d24be1229a22 100644 (file)
 #define RT_spin_unlock_irq(x)  do{rtl_spin_unlock(x);RT_unprotect();}while(0)
 #endif
 
+#ifdef CONFIG_PRIORITY_IRQ
+#define RT_protect()   __local_irq_disable()
+#define RT_unprotect() __local_irq_enable()
+#define RT_spin_lock_irq(x)    spin_lock_hard_irq(x)
+#define RT_spin_unlock_irq(x)  spin_unlock_hard_irq(x)
+#endif
 
 struct comedi_irq_struct {
        int rt;
@@ -346,4 +352,37 @@ void comedi_rt_cleanup(void)
 
 #endif
 
+#ifdef CONFIG_COMEDI_PIRQ
+static int rt_get_irq(struct comedi_irq_struct *it)
+{
+       int ret;
+
+       free_irq(it->irq,it->dev_id);
+       ret=request_irq(it->irq,it->handler,it->flags|SA_PRIORITY,
+               it->device,it->dev_id);
+
+       return ret;
+}
+
+static int rt_release_irq(struct comedi_irq_struct *it)
+{
+       int ret;
+
+       free_irq(it->irq,it->dev_id);
+       ret=request_irq(it->irq,it->handler,it->flags,
+               it->device,it->dev_id);
+
+       return ret;
+}
+
+void comedi_rt_init(void)
+{
+       //rt_pend_tq_init();
+}
+
+void comedi_rt_cleanup(void)
+{
+       //rt_pend_tq_cleanup();
+}
+#endif