From ac7d5ef06a6d6e8d84abbd1f0b82162725f98326 Mon Sep 17 00:00:00 2001 From: Joel Sherrill Date: Thu, 11 May 1995 17:39:37 +0000 Subject: Initial revision --- cpukit/rtems/macros/rtems/rtems/tasks.inl | 82 +++++++++++++++++++++++++++++++ 1 file changed, 82 insertions(+) create mode 100644 cpukit/rtems/macros/rtems/rtems/tasks.inl (limited to 'cpukit/rtems/macros/rtems/rtems/tasks.inl') diff --git a/cpukit/rtems/macros/rtems/rtems/tasks.inl b/cpukit/rtems/macros/rtems/rtems/tasks.inl new file mode 100644 index 0000000000..7b40cbf7fd --- /dev/null +++ b/cpukit/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 */ -- cgit v1.2.3