/shark/trunk/drivers/linuxcom/timer.c |
---|
22,15 → 22,130 |
* Linux timer support. |
*/ |
#include<kernel/kern.h> |
#include<time.h> |
#include<linux/timer.h> |
//#define TIMER_DEBUG |
//#define IANPATCH |
#ifndef IANPATCH |
static inline void |
jiffies_to_timespec(unsigned long j, struct timespec *value) |
{ |
value->tv_nsec = (j % HZ) * (1000000000L / HZ); |
value->tv_sec = j / HZ; |
} |
int add_timer(struct timer_list *timer) |
{ |
struct timespec timeout; |
jiffies_to_timespec(timer->expires, &timeout); |
timer->event_timer = kern_event_post(&timeout, (void (*)(void *))timer->function, (void *)timer->data); |
#ifdef TIMER_DEBUG |
cprintf("Set to %ld:%ld\n",timeout.tv_sec,timeout.tv_nsec); |
#endif |
return 0; |
} |
void del_timer(struct timer_list *timer) |
{ |
kern_event_delete(timer->event_timer); |
} |
void mod_timer(struct timer_list *timer, unsigned long expires) |
{ |
kern_event_delete(timer->event_timer); |
timer->expires = expires; |
add_timer(timer); |
} |
void init_timer(struct timer_list * timer) |
{ |
} |
#else |
#include <pthread.h> |
/*Needs to have this sort of thing in the initfile |
* PTHREAD_register_module(1, 0, 1); |
* |
* TIMER_register_module(); |
* PI_register_module(); |
* PC_register_module(); |
*/ |
pthread_attr_t task_attr; /* attributtes for the task doing the callback*/ |
static inline void |
jiffies_to_timespec(unsigned long j, struct timespec *value) |
{ |
value->tv_nsec = (j % HZ) * (1000000000L / HZ); |
value->tv_sec = j / HZ; |
} |
int add_timer(struct timer_list *timer) |
{ |
int err; |
struct sigevent ev; |
struct sched_param task_param; |
struct itimerspec timeout; |
ev.sigev_notify = SIGEV_THREAD; |
ev.sigev_value.sival_int = timer->data; |
ev.sigev_notify_function = timer->function; |
ev.sigev_notify_attributes = &task_attr; |
pthread_attr_init(&task_attr); |
pthread_attr_setdetachstate(&task_attr, PTHREAD_CREATE_DETACHED); |
pthread_attr_setschedpolicy(&task_attr, SCHED_RR); |
task_param.sched_priority = 10; |
pthread_attr_setschedparam(&task_attr, &task_param); |
err =timer_create(CLOCK_REALTIME, &ev, &(timer->sharktimer)); |
if (err !=0 ) { cprintf("timer: unable to create timer\n"); } |
timeout.it_interval.tv_sec=0; |
timeout.it_interval.tv_nsec=0; |
jiffies_to_timespec(timer->expires, &(timeout.it_value)); |
err = timer_settime(timer->sharktimer, 0, &timeout, NULL); |
if (err !=0 ) { cprintf("timer: unable to timer_settime\n"); } |
cprintf("Set to %ld:%ld\n",timeout.it_value.tv_sec,timeout.it_value.tv_nsec); |
return err; |
} |
void del_timer(struct timer_list *timer) |
{ |
timer_delete(timer->sharktimer); |
} |
void mod_timer(struct timer_list *timer, unsigned long expires) |
{ |
timer_delete(timer->sharktimer); |
timer->expires=expires; |
add_timer(timer); |
} |
void init_timer(struct timer_list * timer) |
{ |
} |
#endif |
/shark/trunk/drivers/linuxcom/include/linux/compatib.h |
---|
50,8 → 50,8 |
#define NULL 0 |
#endif |
#define jiffies 0 /* Has to be controlled... */ |
#define HZ 100 /* Has to be controlled... */ |
#define jiffies (sys_gettime(NULL)*HZ/1000000) /* Has to be controlled... */ |
extern long unsigned int loops_per_sec; /* ... */ |
#define EISA_bus 0 /* We do not support EISA buses... */ |
61,6 → 61,11 |
#define MOD_INC_USE_COUNT /* Do nothing... */ |
#define MOD_DEC_USE_COUNT /* Do nothing... */ |
#define MOD_IN_USE 0 /* No module => never in use... */ |
#define MODULE_AUTHOR(a) |
#define MODULE_DESCRIPTION(a) |
#define MODULE_LICENSE(a) |
#define MODULE_PARM(a,b) |
#define MODULE_PARM_DESC(a,b) |
#define GFP_KERNEL 0x03 /* Don't know what it is... */ |
#define GFP_ATOMIC 0x01 /* Don't know what it is... */ |
71,6 → 76,7 |
//#define printk cprintf I would like to use the kernel printk if possible... |
#define check_region(a,b) 0 |
#define request_region(a,b,c) |
#define release_region(a,b); |
#define release_region(a,b) |
/* Linux funcs emulation... */ |
86,8 → 92,12 |
#define mark_bh(NET_BH) /* Don't use soft int emulation... */ |
#define __cli() kern_cli() |
#define __sti() kern_sti() |
#define cli() kern_cli() |
#define sti() kern_sti() |
#define __save_flags(f) f = kern_fsave() |
#define __restore_flags(f) kern_frestore(f) |
#define save_flags(f) f = kern_fsave() |
#define restore_flags(f) kern_frestore(f) |
122,8 → 132,9 |
#define spin_unlock_irqrestore(x,y) kern_frestore(y) |
#define spin_lock_init(x) |
#define SPIN_LOCK_UNLOCKED (spinlock_t) 0 |
#define spin_lock_irq(lock) kern_cli() |
#define spin_unlock_irq(lock) kern_sti() |
extern __inline__ void panic(const char *c) |
{ |
cputs((char *)c); |
137,6 → 148,23 |
/* *** from linux-2.2.17/include/linux/compatmac.h */ |
#define capable(x) suser() |
#define __devinitdata |
#define __devinit |
struct pci_device_id { |
unsigned int vendor, device; /* Vendor and device ID or PCI_ANY_ID */ |
unsigned int subvendor, subdevice; /* Subsystem ID's or PCI_ANY_ID */ |
unsigned int class, class_mask; /* (class,subclass,prog-if) triplet */ |
unsigned long driver_data; /* Data private to the driver */ |
}; |
#define PCI_ANY_ID (~0) |
#define MODULE_DEVICE_TABLE(a,b) |
#ifdef CONFIG_HIGHMEM |
typedef u64 dma_addr_t; |
#else |
typedef u32 dma_addr_t; |
#endif |
/* *** from linux-2.2.17/include/linux/capability.h */ |
#define CAP_NET_ADMIN 12 |
/shark/trunk/drivers/linuxcom/include/linux/timer.h |
---|
20,11 → 20,11 |
/** |
------------ |
CVS : $Id: timer.h,v 1.2 2003-03-13 13:48:05 pj Exp $ |
CVS : $Id: timer.h,v 1.3 2003-09-04 13:34:20 giacomo Exp $ |
File: $File$ |
Revision: $Revision: 1.2 $ |
Last update: $Date: 2003-03-13 13:48:05 $ |
Revision: $Revision: 1.3 $ |
Last update: $Date: 2003-09-04 13:34:20 $ |
------------ |
**/ |
50,6 → 50,7 |
#define __TIMER__ |
#include <kernel/kern.h> |
#include <time.h> |
#include <linux/compatib.h> |
#include "ll/sys/cdefs.h" |
76,14 → 77,19 |
void (*function)(unsigned long); |
PID pid; |
char Signat; |
time_t sharktimer; |
int event_timer; |
}; |
extern inline void init_timer(struct timer_list * timer) |
/*extern inline void init_timer(struct timer_list * timer) |
{ |
timer->next = NULL; |
timer->prev = NULL; |
} |
*/ |
void init_timer(struct timer_list * timer); |
void mod_timer(struct timer_list *timer, unsigned long expires); |
int add_timer(struct timer_list *timer); |
void del_timer(struct timer_list *timer); |
__END_DECLS |