Subversion Repositories shark

Compare Revisions

Regard whitespace Rev 1021 → Rev 1018

/shark/trunk/modules/intdrive/intdrive.c
99,6 → 99,7
TRACER_LOGEVENT(FTrace_EVT_user_event_0, 0, lev->avail + INT_MAX);
 
switch (proc_table[INTDRIVE_task].status) {
 
case INTDRIVE_IDLE:
if (lev->act_number) {
proc_table[INTDRIVE_task].status = INTDRIVE_READY;
112,15 → 113,18
 
/*static void INTDRIVE_wcet_timer(void *arg)
{
 
INTDRIVE_level_des *lev = (INTDRIVE_level_des *)(arg);
 
lev->wcet_timer = NIL;
 
kern_raise(XWCET_VIOLATION,INTDRIVE_task);
 
}*/
 
static PID INTDRIVE_public_scheduler(LEVEL l)
{
 
if (INTDRIVE_task == NIL) return NIL;
 
if (proc_table[INTDRIVE_task].status == INTDRIVE_READY ||
128,10 → 132,12
return INTDRIVE_task;
else
return NIL;
 
}
 
static int INTDRIVE_public_create(LEVEL l, PID p, TASK_MODEL *m)
{
 
HARD_TASK_MODEL *h;
 
if (m->pclass != HARD_PCLASS) return -1;
149,10 → 155,12
proc_table[INTDRIVE_task].control &= ~CONTROL_CAP;
 
return 0;
 
}
 
static void INTDRIVE_public_dispatch(LEVEL l, PID p, int nostop)
{
 
INTDRIVE_level_des *lev = (INTDRIVE_level_des *)(level_table[l]);
//struct timespec time;
 
167,6 → 175,7
 
static void INTDRIVE_public_epilogue(LEVEL l, PID p)
{
 
struct timespec time;
 
INTDRIVE_level_des *lev = (INTDRIVE_level_des *)(level_table[l]);
191,20 → 200,29
INTDRIVE_level_des *lev = (INTDRIVE_level_des *)(level_table[l]);
 
if (proc_table[INTDRIVE_task].status == INTDRIVE_WAIT) {
 
proc_table[INTDRIVE_task].status = INTDRIVE_READY;
 
lev->act_number++;
 
} else {
 
if (proc_table[INTDRIVE_task].status == INTDRIVE_IDLE ||
proc_table[INTDRIVE_task].status == INTDRIVE_READY ||
proc_table[INTDRIVE_task].status == EXE) {
 
#ifdef INTDRIVE_DEBUG
kern_printf("(INTD:WAIT_REC)");
#endif
lev->act_number++;
 
}
 
}
 
if (lev->replenish_timer == NIL) {
 
delta_capacity = lev->q_theta - lev->avail;
mul32div32to32(delta_capacity, MAX_BANDWIDTH, lev->U, time);
kern_gettime(&acttime);
215,6 → 233,7
ADDUSEC2TIMESPEC(lev->replenish_period,&(lev->replenish_expires));
lev->replenish_timer = kern_event_post(&(lev->replenish_expires),INTDRIVE_timer,(void *)lev);*/
}
}
 
static void INTDRIVE_public_unblock(LEVEL l, PID p)
221,6 → 240,7
{
/* Insert task in the correct position */
proc_table[INTDRIVE_task].status = INTDRIVE_READY;
}
 
static void INTDRIVE_public_block(LEVEL l, PID p)
274,21 → 294,28
#ifdef INTDRIVE_DEBUG
kern_printf("(INTD:IDLE:%d)",delta_time);
#endif
 
} else {
if (lev->act_number) {
proc_table[INTDRIVE_task].status = INTDRIVE_READY;
 
#ifdef INTDRIVE_DEBUG
kern_printf("(INTD:NEXT_ACT)");
#endif
 
} else {
 
#ifdef INTDRIVE_DEBUG
kern_printf("(INTD:WAIT_ACT)");
#endif
 
proc_table[INTDRIVE_task].status = INTDRIVE_WAIT;
 
}
}
 
TRACER_LOGEVENT(FTrace_EVT_task_end_cycle, (unsigned short int)proc_table[INTDRIVE_task].context,(unsigned int)l);
TRACER_LOGEVENT(FTrace_EVT_task_end_cycle,
(unsigned short int)proc_table[INTDRIVE_task].context,(unsigned int)l);
 
return 0;
}
295,6 → 322,7
 
static void INTDRIVE_public_end(LEVEL l, PID p)
{
 
INTDRIVE_level_des *lev = (INTDRIVE_level_des *)(level_table[l]);
 
if (lev->replenish_timer != NIL)
304,6 → 332,7
kern_event_delete(lev->wcet_timer);*/
 
proc_table[INTDRIVE_task].status = INTDRIVE_IDLE;
 
}
 
/* Registration functions */
340,15 → 369,10
lev->act_number = 0;
lev->avail = 0;
lev->q_theta = q_theta;
lev->U = U;
//mul32div32to32(MAX_BANDWIDTH,U,10000,lev->U);
#ifdef INTDRIVE_DEBUG
printk("INTDRIVE Init: %d %d %d\n", lev->capacity, lev->q_theta, lev->U);
#endif
mul32div32to32(MAX_BANDWIDTH,U,10000,lev->U);
 
//TODO !!! Fixing 10000 is not a clean way to work !!!
if (intdrive_taskinit(l, 10000) == -1)
printk("Error: INTDRIVE task not activated!\n");
//!!!calcolare parametro
intdrive_taskinit(l, 10000);
 
return l;
}