diff options
Diffstat (limited to 'c/src/exec/rtems/macros/rtems/rtems/tasks.inl')
-rw-r--r-- | c/src/exec/rtems/macros/rtems/rtems/tasks.inl | 82 |
1 files changed, 82 insertions, 0 deletions
diff --git a/c/src/exec/rtems/macros/rtems/rtems/tasks.inl b/c/src/exec/rtems/macros/rtems/rtems/tasks.inl new file mode 100644 index 0000000000..7b40cbf7fd --- /dev/null +++ b/c/src/exec/rtems/macros/rtems/rtems/tasks.inl @@ -0,0 +1,82 @@ +/* tasks.inl + * + * This file contains the macro implementation of all inlined + * routines in the with RTEMS Tasks Manager. + * + * COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994. + * On-Line Applications Research Corporation (OAR). + * All rights assigned to U.S. Government, 1994. + * + * This material may be reproduced by or for the U.S. Government pursuant + * to the copyright license under the clause at DFARS 252.227-7013. This + * notice must appear in all copies of this file and its derivatives. + * + * $Id$ + */ + +#ifndef __RTEMS_TASKS_inl +#define __RTEMS_TASKS_inl + +/*PAGE + * + * _RTEMS_tasks_Allocate + * + */ + +#define _RTEMS_tasks_Allocate() \ + (Thread_Control *) _Objects_Allocate( &_Thread_Information ) + +/*PAGE + * + * _RTEMS_tasks_Free + * + */ + +#define _RTEMS_tasks_Free( _the_task ) \ + _Objects_Free( &_Thread_Information, &(_the_task)->Object ) + +/*PAGE + * + * _RTEMS_tasks_Cancel_wait + * + */ + +#define _RTEMS_tasks_Cancel_wait( _the_thread ) \ + { \ + States_Control _state; \ + States_Control _remote_state; \ + \ + _state = (_the_thread)->current_state; \ + \ + if ( _States_Is_waiting_on_thread_queue( _state ) ) { \ + if ( _States_Is_waiting_for_rpc_reply( _state ) && \ + _States_Is_locally_blocked( _state ) ) { \ + _remote_state = _States_Clear( \ + STATES_WAITING_FOR_RPC_REPLY + STATES_TRANSIENT, \ + _state \ + ); \ + \ + switch ( _remote_state ) { \ + \ + case STATES_WAITING_FOR_BUFFER: \ + _Partition_MP_Send_extract_proxy( (_the_thread) ); \ + break; \ + case STATES_WAITING_FOR_SEGMENT: \ + _Region_MP_Send_extract_proxy( (_the_thread) ); \ + break; \ + case STATES_WAITING_FOR_SEMAPHORE: \ + _Semaphore_MP_Send_extract_proxy( (_the_thread) ); \ + break; \ + case STATES_WAITING_FOR_MESSAGE: \ + _Message_queue_MP_Send_extract_proxy( (_the_thread) ); \ + break; \ + } \ + } \ + _Thread_queue_Extract( (_the_thread)->Wait.queue, (_the_thread) ); \ + } \ + else if ( _Watchdog_Is_active( &(_the_thread)->Timer ) ) \ + (void) _Watchdog_Remove( &(_the_thread)->Timer ); \ + } + +#endif +/* end of include file */ |