Subversion Repositories shark

Compare Revisions

Ignore whitespace Rev 527 → Rev 528

/shark/trunk/kernel/modules/intdrive.c
58,7 → 58,6
level_des l; /*+ the standard level descriptor +*/
 
TIME replenish_period;
TIME next_time;
TIME capacity;
 
struct timespec act_time;
65,6 → 64,7
 
int avail;
 
struct timespec replenish_expires;
int replenish_timer;
int wcet_timer;
 
93,7 → 93,6
if (INTDRIVE_task == NIL) return;
 
lev->avail = lev->capacity;
lev->next_time = lev->replenish_period;
 
switch (proc_table[INTDRIVE_task].status) {
 
173,7 → 172,6
{
 
struct timespec time;
int temp;
 
INTDRIVE_level_des *lev = (INTDRIVE_level_des *)(level_table[l]);
 
181,16 → 179,13
kern_event_delete(lev->wcet_timer);
 
SUBTIMESPEC(&schedule_time, &(lev->act_time), &time);
temp = TIMESPEC2USEC(&time);
lev->avail -= TIMESPEC2USEC(&time);
lev->avail -= temp;
 
}
 
static void INTDRIVE_public_activate(LEVEL l, PID p)
{
 
struct timespec time;
INTDRIVE_level_des *lev = (INTDRIVE_level_des *)(level_table[l]);
 
if (proc_table[INTDRIVE_task].status == INTDRIVE_WAIT) {
212,10 → 207,9
 
if (lev->replenish_timer == NIL) {
 
kern_gettime(&time);
ADDUSEC2TIMESPEC(lev->next_time,&time);
 
lev->replenish_timer = kern_event_post(&time,INTDRIVE_timer,(void *)lev);
kern_gettime(&(lev->replenish_expires));
ADDUSEC2TIMESPEC(lev->replenish_period,&(lev->replenish_expires));
lev->replenish_timer = kern_event_post(&(lev->replenish_expires),INTDRIVE_timer,(void *)lev);
}
237,15 → 231,14
{
INTDRIVE_level_des *lev = (INTDRIVE_level_des *)(level_table[l]);
struct timespec time;
int temp;
int temp,delta_time;;
 
if (lev->wcet_timer != NIL)
kern_event_delete(lev->wcet_timer);
 
SUBTIMESPEC(&schedule_time, &(lev->act_time), &time);
temp = TIMESPEC2USEC(&time);
lev->avail -= TIMESPEC2USEC(&time);
lev->avail -= temp;
#ifdef INTDRIVE_DEBUG
kern_printf("(INTD:AV:%d)",(int)(lev->avail));
#endif
252,18 → 245,16
 
if (lev->avail < 0) {
proc_table[INTDRIVE_task].status = INTDRIVE_IDLE;
temp = lev->capacity - lev->avail;
mul32div32to32(temp,lev->replenish_period,lev->capacity,lev->next_time);
temp = -lev->avail;
mul32div32to32(temp,lev->replenish_period,lev->capacity,delta_time);
 
if (lev->replenish_timer != NIL)
kern_event_delete(lev->replenish_timer);
 
kern_gettime(&time);
ADDUSEC2TIMESPEC(lev->next_time,&time);
lev->replenish_timer = kern_event_post(&time,INTDRIVE_timer,(void *)lev);
ADDUSEC2TIMESPEC(delta_time,&(lev->replenish_expires)); lev->replenish_timer = kern_event_post(&(lev->replenish_expires),INTDRIVE_timer,(void *)lev);
 
#ifdef INTDRIVE_DEBUG
kern_printf("(INTD:IDLE)");
kern_printf("(INTD:IDLE:%d)",delta_time);
#endif
 
} else {
335,7 → 326,6
 
lev->capacity = capacity;
lev->replenish_period = replenish_period;
lev->next_time = replenish_period;
lev->replenish_timer = NIL;
lev->wcet_timer = NIL;
lev->flags = flags;