X-Git-Url: http://rtime.felk.cvut.cz/gitweb/lincan.git/blobdiff_plain/2c5dbee366e95b46de0cb95cab23d2a94a13f184..8554583c1846da3be0ab3e25c5e4621e78de8125:/lincan/include/can_sysdep.h diff --git a/lincan/include/can_sysdep.h b/lincan/include/can_sysdep.h index b719236..53e2ce1 100644 --- a/lincan/include/can_sysdep.h +++ b/lincan/include/can_sysdep.h @@ -1,3 +1,12 @@ +/* can_sysdep.h - hides differences between individual Linux kernel + * versions and RT extensions + * Linux CAN-bus device driver. + * Written by Pavel Pisa - OCERA team member + * email:pisa@cmp.felk.cvut.cz + * This software is released under the GPL-License. + * Version lincan-0.3 17 Jun 2004 + */ + #ifndef _CAN_SYSDEP_H #define _CAN_SYSDEP_H @@ -27,9 +36,18 @@ #include #include +#include "lincan_config.h" + /*optional features*/ +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0)) #define CAN_ENABLE_KERN_FASYNC +#ifdef CONFIG_PCI #define CAN_ENABLE_PCI_SUPPORT +#endif +#ifdef CONFIG_OC_LINCANVME +#define CAN_ENABLE_VME_SUPPORT +#endif +#endif #if (LINUX_VERSION_CODE < KERNEL_VERSION(2,4,0)) #include @@ -57,6 +75,34 @@ #define DECLARE_MUTEX(name) struct semaphore name=MUTEX #endif /* 2.2.19 */ +#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,4,0)) && !defined(DECLARE_TASKLET) + #define tasklet_struct tq_struct + #define DECLARE_TASKLET(_name, _func, _data) \ + struct tq_struct _name = { sync: 0, routine: _func, data: (void*)_data } + + /* void tasklet_init(struct tasklet_struct *t, void (*func)(unsigned long), unsigned long data); */ + #define tasklet_init(_tasklet, _func, _data) \ + do{ \ + /* (_tasklet)->next=NULL; */ \ + /* Above not needed for 2.2.x and buggy for 2.4.x */ \ + (_tasklet)->sync=0; \ + (_tasklet)->routine=_func; \ + (_tasklet)->data=(void*)_data; \ + }while(0) + + /* void tasklet_schedule(struct tasklet_struct *t) */ + #define tasklet_schedule(_tasklet) \ + do{ \ + queue_task(_tasklet,&tq_immediate); \ + mark_bh(IMMEDIATE_BH); \ + }while(0) + + /* void tasklet_kill(struct tasklet_struct *t); */ + #define tasklet_kill(_tasklet) \ + synchronize_irq() + +#endif /* 2.4.0 */ + #if (LINUX_VERSION_CODE < KERNEL_VERSION(2,5,7)) || (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)) @@ -99,6 +145,10 @@ #define del_timer_sync del_timer #endif /* <2.4.0 */ +#ifdef __HAVE_ARCH_CMPXCHG + #define CAN_HAVE_ARCH_CMPXCHG +#endif + #ifndef CAN_WITH_RTL /* Standard LINUX kernel */ @@ -149,6 +199,8 @@ #define can_set_rtl_file_private_data(fptr, p) do{ fptr->f_minor=(long)(p); } while(0) #define can_get_rtl_file_private_data(fptr) ((void*)((fptr)->f_minor)) +extern can_spinlock_t can_irq_manipulation_lock; + #endif /*CAN_WITH_RTL*/ #endif /*_CAN_SYSDEP_H*/