diff options
Diffstat (limited to 'c/src/exec/itron/src/ref_tsk.c')
-rw-r--r-- | c/src/exec/itron/src/ref_tsk.c | 94 |
1 files changed, 53 insertions, 41 deletions
diff --git a/c/src/exec/itron/src/ref_tsk.c b/c/src/exec/itron/src/ref_tsk.c index eee348412b..da30497904 100644 --- a/c/src/exec/itron/src/ref_tsk.c +++ b/c/src/exec/itron/src/ref_tsk.c @@ -34,49 +34,61 @@ ER ref_tsk( return E_PAR; the_thread = _ITRON_Task_Get( tskid, &location ); - if ( location != OBJECTS_LOCAL) - _ITRON_return_errorno( _ITRON_Task_Clarify_get_id_error( tskid ) ); - - /* - * The following are extended functions [level X ]. - * XXX - tskwait, wid, wupcnt, and tskatr are presently not implemented. - */ - - pk_rtsk->tskwait = 0; - pk_rtsk->wid = 0; - pk_rtsk->wupcnt = 0; - pk_rtsk->suscnt = the_thread->suspend_count; - pk_rtsk->tskatr = 0; - pk_rtsk->task = the_thread->Start.entry_point; - core_priority = the_thread->Start.initial_priority; - pk_rtsk->itskpri = _ITRON_Task_Core_to_Priority( core_priority ); - pk_rtsk->stksz = the_thread->Start.Initial_stack.size; - - /* - * The following are required. - */ - - pk_rtsk->exinf = NULL; /* extended information */ - pk_rtsk->tskpri = _ITRON_Task_Core_to_Priority(the_thread->current_priority); - pk_rtsk->tskstat = 0; - - /* - * Mask in the tskstat information - * Convert the task state XXX double check this - */ - - if ( the_thread == _Thread_Executing ) - pk_rtsk->tskstat |= TTS_RUN; - if ((the_thread->current_state & STATES_READY) != 0) - pk_rtsk->tskstat = TTS_RDY; - if (_States_Is_dormant( the_thread->current_state )) - pk_rtsk->tskstat = TTS_DMT; - if ((the_thread->current_state & STATES_SUSPENDED) != 0) - pk_rtsk->tskstat = TTS_SUS; - if ((the_thread->current_state & STATES_BLOCKED) != 0) - pk_rtsk->tskstat = TTS_WAI; + switch ( location ) { + case OBJECTS_REMOTE: + case OBJECTS_ERROR: + return _ITRON_Task_Clarify_get_id_error( tskid ); + + case OBJECTS_LOCAL: + + if ( location != OBJECTS_LOCAL ) + return _ITRON_Task_Clarify_get_id_error( tskid ); + + /* + * The following are extended functions [level X ]. + * XXX - tskwait, wid, wupcnt, and tskatr are presently not implemented. + */ + + pk_rtsk->tskwait = 0; + pk_rtsk->wid = 0; + pk_rtsk->wupcnt = 0; + pk_rtsk->suscnt = the_thread->suspend_count; + pk_rtsk->tskatr = 0; /* XXX - Not correctly implemented */ + pk_rtsk->task = (FP) the_thread->Start.entry_point; + core_priority = the_thread->Start.initial_priority; + pk_rtsk->itskpri = _ITRON_Task_Core_to_Priority( core_priority ); + pk_rtsk->stksz = the_thread->Start.Initial_stack.size; + + /* + * The following are required. + */ + + pk_rtsk->exinf = NULL; /* extended information */ + pk_rtsk->tskpri = + _ITRON_Task_Core_to_Priority(the_thread->current_priority); + + /* + * Mask in the tskstat information + * Convert the task state XXX double check this + */ + + pk_rtsk->tskstat = 0; + if ( the_thread == _Thread_Executing ) + pk_rtsk->tskstat |= TTS_RUN; + if ( _States_Is_ready(the_thread->current_state) ) + pk_rtsk->tskstat |= TTS_RDY; + if ( _States_Is_dormant( the_thread->current_state) ) + pk_rtsk->tskstat |= TTS_DMT; + if ( _States_Is_suspended(the_thread->current_state) ) + pk_rtsk->tskstat |= TTS_SUS; + if ( _States_Is_blocked(the_thread->current_state) ) + pk_rtsk->tskstat |= TTS_WAI; + + break; + } _ITRON_return_errorno( E_OK ); + } |