Subversion Repositories shark

Compare Revisions

Regard whitespace Rev 1020 → Rev 1021

/shark/trunk/modules/intdrive/intdrive.c
99,7 → 99,6
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;
113,18 → 112,15
 
/*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 ||
132,12 → 128,10
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;
155,12 → 149,10
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;
 
175,7 → 167,6
 
static void INTDRIVE_public_epilogue(LEVEL l, PID p)
{
 
struct timespec time;
 
INTDRIVE_level_des *lev = (INTDRIVE_level_des *)(level_table[l]);
200,29 → 191,20
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);
233,7 → 215,6
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)
240,7 → 221,6
{
/* Insert task in the correct position */
proc_table[INTDRIVE_task].status = INTDRIVE_READY;
}
 
static void INTDRIVE_public_block(LEVEL l, PID p)
294,28 → 274,21
#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;
}
322,7 → 295,6
 
static void INTDRIVE_public_end(LEVEL l, PID p)
{
 
INTDRIVE_level_des *lev = (INTDRIVE_level_des *)(level_table[l]);
 
if (lev->replenish_timer != NIL)
332,7 → 304,6
kern_event_delete(lev->wcet_timer);*/
 
proc_table[INTDRIVE_task].status = INTDRIVE_IDLE;
 
}
 
/* Registration functions */
369,10 → 340,15
lev->act_number = 0;
lev->avail = 0;
lev->q_theta = q_theta;
mul32div32to32(MAX_BANDWIDTH,U,10000,lev->U);
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
 
//!!!calcolare parametro
intdrive_taskinit(l, 10000);
//TODO !!! Fixing 10000 is not a clean way to work !!!
if (intdrive_taskinit(l, 10000) == -1)
printk("Error: INTDRIVE task not activated!\n");
 
return l;
}
/shark/trunk/modules/intdrive/inttask.c
46,7 → 46,7
 
#include <intdrive/intdrive/inttask.h>
 
#define DEBUG_SHARK_GLUE
//#define DEBUG_SHARK_GLUE
 
PID intr_server = NIL;
void (*noint_handler)(int n);
64,6 → 64,10
{
int old_free_int = next_free_int;
 
#ifdef DEBUG_SHARK_GLUE
kern_printf("(add_interrupt_job: %d)", no);
#endif
 
if (no<16)
irq_mask(no);
 
99,6 → 103,10
 
TRACER_LOGEVENT(FTrace_EVT_user_event_2, res, 0);
 
#ifdef DEBUG_SHARK_GLUE
kern_printf("(get_interrupt_job: %d)", res);
#endif
 
return res;
}
 
114,8 → 122,16
 
no = get_interrupt_job();
 
#ifdef DEBUG_SHARK_GLUE
kern_printf("(interrupt_job: no %d)",no);
#endif
 
if (no != -1 && no < 16) {
tmp_fast = handler_get_intdrive(no);
 
/*extern void linux_intr(int irq);
linux_intr(no);*/
 
(tmp_fast)(no);
irq_unmask(no);
}
158,7 → 174,7
hard_task_def_system(ht);
hard_task_def_nokill(ht);
 
if (level >= 0)
if (level > 0)
intr_server = task_create("Interrupt Server (Protected)",Interrupt_Server_Prot,&ht,NULL);
else
intr_server = task_create("Interrupt Server",Interrupt_Server,&ht,NULL);