|
RTEMS CPU Kit with SuperCore
4.10.99.0
|
00001 00010 /* 00011 * COPYRIGHT (c) 1989-2009. 00012 * On-Line Applications Research Corporation (OAR). 00013 * 00014 * The license and distribution terms for this file may be 00015 * found in the file LICENSE in this distribution or at 00016 * http://www.rtems.com/license/LICENSE. 00017 */ 00018 00019 #ifndef _RTEMS_SCORE_COREMSG_H 00020 #define _RTEMS_SCORE_COREMSG_H 00021 00032 #include <limits.h> 00033 #include <rtems/score/thread.h> 00034 #include <rtems/score/threadq.h> 00035 #include <rtems/score/priority.h> 00036 #include <rtems/score/watchdog.h> 00037 00038 #if defined(RTEMS_POSIX_API) 00039 00044 #define RTEMS_SCORE_COREMSG_ENABLE_MESSAGE_PRIORITY 00045 #endif 00046 00047 #if defined(RTEMS_POSIX_API) 00048 00053 #define RTEMS_SCORE_COREMSG_ENABLE_NOTIFICATION 00054 #endif 00055 00056 #if defined(RTEMS_POSIX_API) 00057 00061 #define RTEMS_SCORE_COREMSG_ENABLE_BLOCKING_SEND 00062 #endif 00063 00064 #ifdef __cplusplus 00065 extern "C" { 00066 #endif 00067 00074 typedef void ( *CORE_message_queue_API_mp_support_callout )( 00075 Thread_Control *, 00076 Objects_Id 00077 ); 00078 00088 typedef struct { 00090 size_t size; 00092 uint32_t buffer[1]; 00093 } CORE_message_queue_Buffer; 00094 00101 typedef struct { 00103 Chain_Node Node; 00104 #if defined(RTEMS_SCORE_COREMSG_ENABLE_MESSAGE_PRIORITY) 00105 00106 int priority; 00107 #endif 00108 00109 CORE_message_queue_Buffer Contents; 00110 } CORE_message_queue_Buffer_control; 00111 00118 typedef enum { 00120 CORE_MESSAGE_QUEUE_DISCIPLINES_FIFO, 00122 CORE_MESSAGE_QUEUE_DISCIPLINES_PRIORITY 00123 } CORE_message_queue_Disciplines; 00124 00131 #define CORE_MESSAGE_QUEUE_SEND_REQUEST INT_MAX 00132 00139 #define CORE_MESSAGE_QUEUE_URGENT_REQUEST INT_MIN 00140 00151 typedef int CORE_message_queue_Submit_types; 00152 00159 typedef enum { 00161 CORE_MESSAGE_QUEUE_STATUS_SUCCESSFUL, 00163 CORE_MESSAGE_QUEUE_STATUS_INVALID_SIZE, 00165 CORE_MESSAGE_QUEUE_STATUS_TOO_MANY, 00167 CORE_MESSAGE_QUEUE_STATUS_UNSATISFIED, 00169 CORE_MESSAGE_QUEUE_STATUS_UNSATISFIED_NOWAIT, 00173 CORE_MESSAGE_QUEUE_STATUS_WAS_DELETED, 00177 CORE_MESSAGE_QUEUE_STATUS_TIMEOUT, 00179 CORE_MESSAGE_QUEUE_STATUS_UNSATISFIED_WAIT 00180 } CORE_message_queue_Status; 00181 00187 #define CORE_MESSAGE_QUEUE_STATUS_LAST CORE_MESSAGE_QUEUE_STATUS_UNSATISFIED_WAIT 00188 00195 typedef struct { 00197 CORE_message_queue_Disciplines discipline; 00198 } CORE_message_queue_Attributes; 00199 00200 #if defined(RTEMS_SCORE_COREMSG_ENABLE_NOTIFICATION) 00201 00208 typedef void (*CORE_message_queue_Notify_Handler)( void * ); 00209 #endif 00210 00217 typedef struct { 00221 Thread_queue_Control Wait_queue; 00225 CORE_message_queue_Attributes Attributes; 00229 uint32_t maximum_pending_messages; 00232 uint32_t number_of_pending_messages; 00236 size_t maximum_message_size; 00240 Chain_Control Pending_messages; 00245 CORE_message_queue_Buffer *message_buffers; 00246 #if defined(RTEMS_SCORE_COREMSG_ENABLE_NOTIFICATION) 00247 00250 CORE_message_queue_Notify_Handler notify_handler; 00252 void *notify_argument; 00253 #endif 00254 00257 Chain_Control Inactive_messages; 00258 } CORE_message_queue_Control; 00259 00284 bool _CORE_message_queue_Initialize( 00285 CORE_message_queue_Control *the_message_queue, 00286 CORE_message_queue_Attributes *the_message_queue_attributes, 00287 uint32_t maximum_pending_messages, 00288 size_t maximum_message_size 00289 ); 00290 00308 void _CORE_message_queue_Close( 00309 CORE_message_queue_Control *the_message_queue, 00310 Thread_queue_Flush_callout remote_extract_callout, 00311 uint32_t status 00312 ); 00313 00329 uint32_t _CORE_message_queue_Flush( 00330 CORE_message_queue_Control *the_message_queue 00331 ); 00332 00346 uint32_t _CORE_message_queue_Flush_support( 00347 CORE_message_queue_Control *the_message_queue 00348 ); 00349 00350 #if defined(FUNCTIONALITY_NOT_CURRENTLY_USED_BY_ANY_API) 00351 00362 void _CORE_message_queue_Flush_waiting_threads( 00363 CORE_message_queue_Control *the_message_queue 00364 ); 00365 #endif 00366 00390 CORE_message_queue_Status _CORE_message_queue_Broadcast( 00391 CORE_message_queue_Control *the_message_queue, 00392 const void *buffer, 00393 size_t size, 00394 Objects_Id id, 00395 CORE_message_queue_API_mp_support_callout api_message_queue_mp_support, 00396 uint32_t *count 00397 ); 00398 00424 CORE_message_queue_Status _CORE_message_queue_Submit( 00425 CORE_message_queue_Control *the_message_queue, 00426 const void *buffer, 00427 size_t size, 00428 Objects_Id id, 00429 CORE_message_queue_API_mp_support_callout api_message_queue_mp_support, 00430 CORE_message_queue_Submit_types submit_type, 00431 bool wait, 00432 Watchdog_Interval timeout 00433 ); 00434 00470 void _CORE_message_queue_Seize( 00471 CORE_message_queue_Control *the_message_queue, 00472 Objects_Id id, 00473 void *buffer, 00474 size_t *size_p, 00475 bool wait, 00476 Watchdog_Interval timeout 00477 ); 00478 00494 void _CORE_message_queue_Insert_message( 00495 CORE_message_queue_Control *the_message_queue, 00496 CORE_message_queue_Buffer_control *the_message, 00497 CORE_message_queue_Submit_types submit_type 00498 ); 00499 00500 #ifndef __RTEMS_APPLICATION__ 00501 #include <rtems/score/coremsg.inl> 00502 #endif 00503 00504 #ifdef __cplusplus 00505 } 00506 #endif 00507 00510 #endif 00511 /* end of include file */
1.7.5