X-Git-Url: http://rtime.felk.cvut.cz/gitweb/lincan.git/blobdiff_plain/50e9e47fc21191ea9ea758fea1e7f2bd5a275e98..9152514c81ee47c7941fc64204a3eaace518acbd:/embedded/app/usbcan/can/can_sysless.h diff --git a/embedded/app/usbcan/can/can_sysless.h b/embedded/app/usbcan/can/can_sysless.h index af3d703..1648b7c 100644 --- a/embedded/app/usbcan/can/can_sysless.h +++ b/embedded/app/usbcan/can/can_sysless.h @@ -1,23 +1,40 @@ -/* 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 - */ +/**************************************************************************/ +/* File: can_sysless.h - provides can_sysdep.h definitions to hide */ +/* between Linux kernel and embedded target build */ +/* */ +/* LinCAN - (Not only) Linux CAN bus driver */ +/* Copyright (C) 2002-2009 DCE FEE CTU Prague */ +/* Copyright (C) 2002-2009 Pavel Pisa */ +/* Funded by OCERA and FRESCOR IST projects */ +/* */ +/* LinCAN is free software; you can redistribute it and/or modify it */ +/* under terms of the GNU General Public License as published by the */ +/* Free Software Foundation; either version 2, or (at your option) any */ +/* later version. LinCAN is distributed in the hope that it will be */ +/* useful, but WITHOUT ANY WARRANTY; without even the implied warranty */ +/* of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU */ +/* General Public License for more details. You should have received a */ +/* copy of the GNU General Public License along with LinCAN; see file */ +/* COPYING. If not, write to the Free Software Foundation, 675 Mass Ave, */ +/* Cambridge, MA 02139, USA. */ +/* */ +/* To allow use of LinCAN in the compact embedded systems firmware */ +/* and RT-executives (RTEMS for example), main authors agree with next */ +/* special exception: */ +/* */ +/* Including LinCAN header files in a file, instantiating LinCAN generics */ +/* or templates, or linking other files with LinCAN objects to produce */ +/* an application image/executable, does not by itself cause the */ +/* resulting application image/executable to be covered by */ +/* the GNU General Public License. */ +/* This exception does not however invalidate any other reasons */ +/* why the executable file might be covered by the GNU Public License. */ +/* Publication of enhanced or derived LinCAN files is required although. */ +/**************************************************************************/ #ifndef _CAN_SYSDEP_H #define _CAN_SYSDEP_H -#ifdef CAN_WITH_RTL -#include -#include -#include -#include -#include -#include -#endif /*CAN_WITH_RTL*/ #include #include @@ -39,161 +56,35 @@ typedef struct { volatile int counter; } atomic_t; (type *)( (char *)__mptr - offsetof(type,member) );}) -/*#define __NO_VERSION__*/ -/*#include */ - -// #include -// #include -// #include -// #include -// #include -// #include -// #include -// #include -// #include -// -// #include -// #include -// #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 -// #else -// #include -// #endif - -// #ifdef CAN_ENABLE_PCI_SUPPORT -// #include "linux/pci.h" -// #endif /*CAN_ENABLE_PCI_SUPPORT*/ - -/* Next is not sctrictly correct, because of 2.3.0, 2.3.1, 2.3.2 - kernels need next definitions too */ -// #if (LINUX_VERSION_CODE < KERNEL_VERSION(2,2,19)) /* may need correction */ - #define wait_queue_head_t struct wait_queue * - #define wait_queue_t struct wait_queue - #define init_waitqueue_head(queue_head) (*queue_head=NULL) - #define init_waitqueue_entry(qentry,qtask) \ - (qentry->next=NULL,qentry->task=qtask) - #define DECLARE_WAIT_QUEUE_HEAD(name) \ - struct wait_queue * name=NULL - #define DECLARE_WAITQUEUE(wait, current) \ + +#define wait_queue_head_t struct wait_queue * +#define wait_queue_t struct wait_queue +#define init_waitqueue_head(queue_head) (*queue_head=NULL) +#define init_waitqueue_entry(qentry,qtask) \ + (qentry->next=NULL,qentry->task=qtask) +#define DECLARE_WAIT_QUEUE_HEAD(name) \ + struct wait_queue * name=NULL +#define DECLARE_WAITQUEUE(wait, current) \ struct wait_queue wait = { current, NULL } -// #define init_MUTEX(sem) (*sem=MUTEX) -// #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)->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)) - -#define MINOR_NR \ - (MINOR(file->f_dentry->d_inode->i_rdev)) - -// #else /* Linux kernel < 2.5.7 or >= 2.6.0 */ -// -/*#define MINOR_NR \ - (minor(file->f_dentry->d_inode->i_rdev))*/ -// -// #endif /* Linux kernel < 2.5.7 or >= 2.6.0 */ - -// #ifndef CAN_WITH_RTL -// #if ((LINUX_VERSION_CODE < KERNEL_VERSION(2,5,68)) && !defined(IRQ_RETVAL)) - typedef void can_irqreturn_t; - #define CAN_IRQ_NONE - #define CAN_IRQ_HANDLED - #define CAN_IRQ_RETVAL(x) -// #else /* <=2.5.67 */ -// typedef irqreturn_t can_irqreturn_t; -// #define CAN_IRQ_NONE IRQ_NONE -// #define CAN_IRQ_HANDLED IRQ_HANDLED -// #define CAN_IRQ_RETVAL IRQ_RETVAL -// #endif /* <=2.5.67 */ -// #if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,19)) -/* #define CAN_IRQ_HANDLER_ARGS(irq_number, dev_id) \ - int irq_number, void *dev_id, struct pt_regs *regs*/ -// #else /* < 2.6.19 */ - #define CAN_IRQ_HANDLER_ARGS(irq_number, dev_id) \ + +typedef irqreturn_t can_irqreturn_t; +#define CAN_IRQ_NONE IRQ_NONE +#define CAN_IRQ_HANDLED IRQ_HANDLED +#define CAN_IRQ_RETVAL IRQ_RETVAL + +#define CAN_IRQ_HANDLER_ARGS(irq_number, dev_id) \ int irq_number, void *dev_id -// #endif /* < 2.6.19 */ -// #else /*CAN_WITH_RTL*/ -// typedef int can_irqreturn_t; -// #define CAN_IRQ_NONE 0 -// #define CAN_IRQ_HANDLED 1 -// #define CAN_IRQ_RETVAL(x) ((x) != 0) -/* #define CAN_IRQ_HANDLER_ARGS(irq_number, dev_id) \ - int irq_number, void *dev_id, struct pt_regs *regs*/ -// #endif /*CAN_WITH_RTL*/ - -// #if (LINUX_VERSION_CODE < KERNEL_VERSION(2,5,33)) -// #define can_synchronize_irq(irqnum) synchronize_irq() -// #else /* >=2.5.33 */ - #define can_synchronize_irq synchronize_irq -// #endif - -// #if (LINUX_VERSION_CODE < KERNEL_VERSION(2,4,0)) -// #define del_timer_sync del_timer -// #endif /* <2.4.0 */ - -// #if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,9)) - typedef unsigned long can_ioptr_t; - #define can_ioptr2ulong(ioaddr) ((unsigned long)(ioaddr)) - #define can_ulong2ioptr(addr) ((unsigned long)(addr)) - #define can_inb(ioaddr) inb(ioaddr) - #define can_outb(data,ioaddr) outb(data,ioaddr) - #define can_inw(ioaddr) inb(ioaddr) - #define can_outw(data,ioaddr) outb(data,ioaddr) - #define can_inl(ioaddr) inb(ioaddr) - #define can_outl(data,ioaddr) outb(data,ioaddr) -// #else /* >=2.6.9 */ -// typedef void __iomem * can_ioptr_t; -// #define can_ioptr2ulong(ioaddr) ((unsigned long __force)(ioaddr)) -// #define can_ulong2ioptr(addr) ((can_ioptr_t)(addr)) -// #define can_inb(ioaddr) inb(can_ioptr2ulong(ioaddr)) -// #define can_outb(data,ioaddr) outb(data,can_ioptr2ulong(ioaddr)) -// #define can_inw(ioaddr) inb(can_ioptr2ulong(ioaddr)) -// #define can_outw(data,ioaddr) outb(data,can_ioptr2ulong(ioaddr)) -// #define can_inl(ioaddr) inb(can_ioptr2ulong(ioaddr)) -// #define can_outl(data,ioaddr) outb(data,can_ioptr2ulong(ioaddr)) -// #endif +#define can_synchronize_irq(irqnum) do {} while(0) + +typedef unsigned long can_ioptr_t; +#define can_ioptr2ulong(ioaddr) ((unsigned long)(ioaddr)) +#define can_ulong2ioptr(addr) ((unsigned long)(addr)) +#define can_inb(ioaddr) inb(ioaddr) +#define can_outb(data,ioaddr) outb(data,ioaddr) +#define can_inw(ioaddr) inb(ioaddr) +#define can_outw(data,ioaddr) outb(data,ioaddr) +#define can_inl(ioaddr) inb(ioaddr) +#define can_outl(data,ioaddr) outb(data,ioaddr) #define can_readb readb #define can_writeb writeb @@ -208,13 +99,12 @@ typedef struct { volatile int counter; } atomic_t; #define CAN_HAVE_ARCH_CMPXCHG #endif -// #ifndef CAN_WITH_RTL -/* Standard LINUX kernel */ - #define can_spinlock_t long #define can_spin_irqflags_t unsigned long -#define can_spin_lock(lock) cli() -#define can_spin_unlock(lock) sti() +/* Only one CPU is supposed on sys-less embedded target => no need for spinloks */ +#define can_spin_lock(lock) do { } while (0) +#define can_spin_unlock(lock) do { } while (0) +/* Only one CPU is supposed on sys-less embedded target => no need for spinloks */ #define can_spin_lock_irqsave(lock,flags) save_and_cli(flags) #define can_spin_unlock_irqrestore(lock,flags) restore_flags(flags) #define can_spin_lock_init can_splck_init @@ -227,18 +117,16 @@ void can_splck_init(can_spinlock_t *x) *x=0; } -// #if !defined(CONFIG_PREEMPT_RT) && ( defined(CONFIG_PREEMPT) || (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)) ) -// #define can_preempt_disable preempt_disable -// #define can_preempt_enable preempt_enable -// #else /*CONFIG_PREEMPT*/ #define can_preempt_disable() do { } while (0) #define can_preempt_enable() do { } while (0) -// #endif /*CONFIG_PREEMPT*/ -// #define can_enable_irq sti() -// #define can_disable_irq cli() -#define can_enable_irq(var) (var=1) -#define can_disable_irq(var) (var=0) +#if 1 +#define can_enable_irq(var) do { } while (0) +#define can_disable_irq(var) do { } while (0) +#else +#define can_enable_irq enable_irq +#define can_disable_irq disable_irq +#endif #define can_printk printf #define KERN_CRIT @@ -254,6 +142,7 @@ void can_splck_init(can_spinlock_t *x) #define test_and_change_bit ____atomic_test_and_change_bit #define raw_local_irq_save(flags) save_and_cli(flags); #define raw_local_irq_restore(flags) restore_flags(flags); + /* * These functions are the basis of our bit ops. * @@ -494,44 +383,4 @@ static inline void udelay(long time) while(ticks>0); } -// #else /*CAN_WITH_RTL*/ -// -// #define can_spinlock_t long -// #define can_spin_irqflags_t unsigned long -// #define can_spin_lock save_and_cli -// #define can_spin_unlock restore_flags -// #define can_spin_lock_irqsave save_and_cli -// #define can_spin_unlock_irqrestore restore_flags -// #define can_spin_lock_init can_splck_init -// -// #define CAN_DEFINE_SPINLOCK(x) can_spinlock_t x = 0 -// -// #define can_preempt_disable() do { } while (0) -// #define can_preempt_enable() do { } while (0) -// -// #define can_enable_irq sti -// #define can_disable_irq cli -// -// #define can_printk rtl_printf -// -// /* -// * terrible hack to test rtl_file private_data concept, ugh !!! -// * this would result in crash on architectures, where -// * sizeof(int) < sizeof(void *) -// */ -// #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; -// -// /* CAN message timestamp source, it is called from interrupt context */ -/*#define can_gettimeofday(ptr) do {\ - struct timespec temp_timespec;\ - clock_gettime(CLOCK_REALTIME,&temp_timespec);\ - ptr->tv_usec=temp_timespec.tv_nsec/1000;\ - ptr->tv_sec=temp_timespec.tv_sec;\ - } while(0)*/ -// -// #endif /*CAN_WITH_RTL*/ - #endif /*_CAN_SYSDEP_H*/