Subversion Repositories shark

Compare Revisions

Ignore whitespace Rev 217 → Rev 218

/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