Subversion Repositories shark

Compare Revisions

Ignore whitespace Rev 342 → Rev 343

/shark/trunk/ports/first/modules/mpegstar.c
51,7 → 51,10
/*+ Status used in the level +*/
#define MPEGSTAR_READY MODULE_STATUS_BASE
 
/*+ the level redefinition for the Round Robin level +*/
#define FRAME_IDLE 0
#define FRAME_DECODING 1
#define FRAME_SKIPPED 2
 
typedef struct {
level_des l; /*+ the standard level descriptor +*/
 
60,6 → 63,7
 
int budget;
int current;
int status;
int scheduling_level;
 
87,6 → 91,7
if (lev->current != NIL) return -1;
 
lev->current = p;
lev->status = FRAME_IDLE;
proc_table[p].avail_time = lev->server_Q;
proc_table[p].wcet = lev->server_Q;
114,6 → 119,7
static void MPEGSTAR_public_epilogue(LEVEL l, PID p)
{
MPEGSTAR_level_des *lev = (MPEGSTAR_level_des *)(level_table[l]);
int r;
 
#ifdef MPEGSTAR_DEBUG
kern_printf("(MS:Epi:%d)",p);
121,7 → 127,21
 
level_table[ lev->scheduling_level ] ->
private_epilogue(lev->scheduling_level,p);
 
r = SERVER_get_remain_capacity(lev->scheduling_level,lev->budget);
if (r < 0) {
 
#ifdef MPEGSTAR_DEBUG
kern_printf("(MS:FRAME SKIP %d)",p);
#endif
 
lev->status = FRAME_SKIPPED;
 
level_table[ lev->scheduling_level ]->
private_extract(lev->scheduling_level, p);
 
}
 
}
 
static void MPEGSTAR_public_activate(LEVEL l, PID p)
135,6 → 155,8
kern_printf("(MP:Act:%d:%d)",p,lev->budget);
#endif
 
lev->status = FRAME_DECODING;
 
level_table[ lev->scheduling_level ]->
private_insert(lev->scheduling_level, p, (TASK_MODEL *)&b);
 
165,6 → 187,8
kern_printf("(MS:EndCycle:%d)",p);
#endif
 
lev->status = FRAME_IDLE;
 
level_table[ lev->scheduling_level ]->
private_extract(lev->scheduling_level, p);
 
196,7 → 220,9
kern_printf("(MS:End:%d)", p);
#endif
 
lev->current = NIL; proc_table[p].status = FREE;
lev->current = NIL;
lev->status = FRAME_IDLE;
proc_table[p].status = FREE;
 
}
 
226,6 → 252,7
 
lev->budget = NIL;
lev->current = NIL;
lev->status = FRAME_IDLE;
lev->server_Q = 0;
lev->server_T = 0;
 
285,7 → 312,19
return SERVER_get_remain_capacity(fsf_get_server_level(),budget);
}
 
int MPEGSTAR_get_last_reclaiming()
int MPEGSTAR_get_last_reclaiming(int budget)
{
return SERVER_get_last_reclaiming(fsf_get_server_level(),exec_shadow);
}
 
int MPEGSTAR_is_frame_skipped(int budget)
{
LEVEL l = SERVER_get_local_scheduler_level_from_budget(fsf_get_server_level(),budget);
MPEGSTAR_level_des *lev = (MPEGSTAR_level_des *)(level_table[l]);
 
if (lev->status == FRAME_SKIPPED)
return 1;
else
return 0;
 
}