summaryrefslogtreecommitdiffstats
path: root/c/src/exec/rtems/macros/rtems/rtems/tasks.inl
diff options
context:
space:
mode:
Diffstat (limited to 'c/src/exec/rtems/macros/rtems/rtems/tasks.inl')
-rw-r--r--c/src/exec/rtems/macros/rtems/rtems/tasks.inl82
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 */