00001
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef _RTEMS_SCORE_THREADQ_H
00020 #define _RTEMS_SCORE_THREADQ_H
00021
00030 #ifdef __cplusplus
00031 extern "C" {
00032 #endif
00033
00034 #include <rtems/score/tqdata.h>
00035
00036 #include <rtems/score/object.h>
00037 #include <rtems/score/thread.h>
00038 #include <rtems/score/watchdog.h>
00039
00043 #define THREAD_QUEUE_WAIT_FOREVER WATCHDOG_NO_TIMEOUT
00044
00049 typedef void ( *Thread_queue_Flush_callout )(
00050 Thread_Control *
00051 );
00052
00058 typedef void ( *Thread_queue_Timeout_callout )(
00059 Objects_Id,
00060 void *
00061 );
00062
00070 Thread_Control *_Thread_queue_Dequeue(
00071 Thread_queue_Control *the_thread_queue
00072 );
00073
00079 #define _Thread_queue_Enqueue( _the_thread_queue, _timeout ) \
00080 _Thread_queue_Enqueue_with_handler( \
00081 _the_thread_queue, \
00082 _timeout, \
00083 _Thread_queue_Timeout )
00084
00085
00091 void _Thread_queue_Enqueue_with_handler(
00092 Thread_queue_Control* the_thread_queue,
00093 Watchdog_Interval timeout,
00094 Thread_queue_Timeout_callout handler
00095 );
00096
00106 void _Thread_queue_Requeue(
00107 Thread_queue_Control *the_thread_queue,
00108 Thread_Control *the_thread
00109 );
00110
00116 void _Thread_queue_Extract(
00117 Thread_queue_Control *the_thread_queue,
00118 Thread_Control *the_thread
00119 );
00120
00127 boolean _Thread_queue_Extract_with_proxy(
00128 Thread_Control *the_thread
00129 );
00130
00137 Thread_Control *_Thread_queue_First(
00138 Thread_queue_Control *the_thread_queue
00139 );
00140
00146 void _Thread_queue_Flush(
00147 Thread_queue_Control *the_thread_queue,
00148 Thread_queue_Flush_callout remote_extract_callout,
00149 uint32_t status
00150 );
00151
00158 void _Thread_queue_Initialize(
00159 Thread_queue_Control *the_thread_queue,
00160 Thread_queue_Disciplines the_discipline,
00161 States_Control state,
00162 uint32_t timeout_status
00163 );
00164
00171 Thread_Control *_Thread_queue_Dequeue_priority(
00172 Thread_queue_Control *the_thread_queue
00173 );
00174
00181 Thread_blocking_operation_States _Thread_queue_Enqueue_priority (
00182 Thread_queue_Control *the_thread_queue,
00183 Thread_Control *the_thread,
00184 ISR_Level *level_p
00185 );
00186
00192 void _Thread_queue_Extract_priority_helper(
00193 Thread_queue_Control *the_thread_queue,
00194 Thread_Control *the_thread,
00195 boolean requeuing
00196 );
00197
00204 #define _Thread_queue_Extract_priority( _the_thread_queue, _the_thread ) \
00205 _Thread_queue_Extract_priority_helper( _the_thread_queue, _the_thread, FALSE )
00206
00207
00214 Thread_Control *_Thread_queue_First_priority(
00215 Thread_queue_Control *the_thread_queue
00216 );
00217
00224 Thread_Control *_Thread_queue_Dequeue_fifo(
00225 Thread_queue_Control *the_thread_queue
00226 );
00227
00234 Thread_blocking_operation_States _Thread_queue_Enqueue_fifo (
00235 Thread_queue_Control *the_thread_queue,
00236 Thread_Control *the_thread,
00237 ISR_Level *level_p
00238 );
00239
00245 void _Thread_queue_Extract_fifo(
00246 Thread_queue_Control *the_thread_queue,
00247 Thread_Control *the_thread
00248 );
00249
00256 Thread_Control *_Thread_queue_First_fifo(
00257 Thread_queue_Control *the_thread_queue
00258 );
00259
00268 void _Thread_queue_Timeout (
00269 Objects_Id id,
00270 void *ignored
00271 );
00272
00285 void _Thread_queue_Process_timeout(
00286 Thread_Control *the_thread
00287 );
00288
00289 #ifndef __RTEMS_APPLICATION__
00290 #include <rtems/score/threadq.inl>
00291 #endif
00292
00293 #ifdef __cplusplus
00294 }
00295 #endif
00296
00299 #endif
00300