21 #ifndef _RTEMS_SCORE_COREMSGIMPL_H 22 #define _RTEMS_SCORE_COREMSGIMPL_H 25 #include <rtems/score/status.h> 49 #define CORE_MESSAGE_QUEUE_SEND_REQUEST INT_MAX 57 #define CORE_MESSAGE_QUEUE_URGENT_REQUEST INT_MIN 94 uint32_t maximum_pending_messages,
95 size_t maximum_message_size
137 #if defined(FUNCTIONALITY_NOT_CURRENTLY_USED_BY_ANY_API) 150 void _CORE_message_queue_Flush_waiting_threads(
279 const void *content_source,
414 memcpy(destination, source,
size);
471 #if defined(RTEMS_SCORE_COREMSG_ENABLE_MESSAGE_PRIORITY) 498 #if defined(RTEMS_SCORE_COREMSG_ENABLE_NOTIFICATION) 514 return (the_message_queue->notify_handler !=
NULL);
527 #if defined(RTEMS_SCORE_COREMSG_ENABLE_NOTIFICATION) 530 CORE_message_queue_Notify_Handler the_handler
533 the_message_queue->notify_handler = the_handler;
537 #define _CORE_message_queue_Set_notify( the_message_queue, the_handler ) \ 586 if ( the_thread ==
NULL ) {
591 the_thread->
Wait.
count = (uint32_t) submit_type;
RTEMS_INLINE_ROUTINE Thread_Control * _Thread_queue_First_locked(Thread_queue_Control *the_thread_queue, const Thread_queue_Operations *operations)
Returns the first thread on the thread queue if it exists, otherwise NULL.
Definition: threadqimpl.h:1173
Thread_Wait_information Wait
Definition: thread.h:774
Thread queue context for the thread queue methods.
Definition: threadq.h:198
int CORE_message_queue_Submit_types
The modes in which a message may be submitted to a message queue.
Definition: coremsgimpl.h:69
void _CORE_message_queue_Close(CORE_message_queue_Control *the_message_queue, Thread_queue_Context *queue_context)
Closes a message queue.
Definition: coremsgclose.c:35
Chain_Control Inactive_messages
Definition: coremsg.h:176
RTEMS_INLINE_ROUTINE Thread_Control * _CORE_message_queue_Dequeue_receiver(CORE_message_queue_Control *the_message_queue, const void *buffer, size_t size, CORE_message_queue_Submit_types submit_type, Thread_queue_Context *queue_context)
Gets the first locked thread waiting to receive and dequeues it.
Definition: coremsgimpl.h:556
Constants and Structures Related with Thread Dispatch.
RTEMS_INLINE_ROUTINE void _CORE_message_queue_Free_message_buffer(CORE_message_queue_Control *the_message_queue, CORE_message_queue_Buffer_control *the_message)
Frees a message buffer to inactive message buffer chain.
Definition: coremsgimpl.h:446
Chain_Node Node
Definition: coremsg.h:94
uint32_t _CORE_message_queue_Flush(CORE_message_queue_Control *the_message_queue, Thread_queue_Context *queue_context)
Flushes pending messages.
Definition: coremsgflush.c:24
The organization of a message buffer.
Definition: coremsg.h:92
#define _CORE_message_queue_Set_notify(the_message_queue, the_handler)
Initializes notification information.
Definition: coremsgimpl.h:537
RTEMS_INLINE_ROUTINE void _CORE_message_queue_Release(CORE_message_queue_Control *the_message_queue, Thread_queue_Context *queue_context)
Releases the message queue.
Definition: coremsgimpl.h:390
void _CORE_message_queue_Insert_message(CORE_message_queue_Control *the_message_queue, CORE_message_queue_Buffer_control *the_message, const void *content_source, size_t content_size, CORE_message_queue_Submit_types submit_type)
Inserts a message into the message queue.
Definition: coremsginsert.c:41
Status_Control _CORE_message_queue_Seize(CORE_message_queue_Control *the_message_queue, Thread_Control *executing, void *buffer, size_t *size_p, bool wait, Thread_queue_Context *queue_context)
Seizes a message from the message queue.
Definition: coremsgseize.c:27
int priority
Definition: coremsg.h:97
const Thread_queue_Operations * operations
The thread queue operations according to the blocking discipline.
Definition: coremsg.h:145
uint32_t number_of_pending_messages
Definition: coremsg.h:153
Thread_queue_Queue Queue
The actual thread queue.
Definition: threadq.h:583
#define CORE_MESSAGE_QUEUE_SEND_REQUEST
Used when appending messages onto a message queue.
Definition: coremsgimpl.h:49
RTEMS_INLINE_ROUTINE CORE_message_queue_Buffer_control * _CORE_message_queue_Allocate_message_buffer(CORE_message_queue_Control *the_message_queue)
Allocates a message buffer from the inactive message buffer chain.
Definition: coremsgimpl.h:429
RTEMS_INLINE_ROUTINE void _CORE_message_queue_Copy_buffer(const void *source, void *destination, size_t size)
Copies the source message buffer to the destination message buffer.
Definition: coremsgimpl.h:408
Constants and Structures Associated with the Manipulation of Objects.
RTEMS_INLINE_ROUTINE Status_Control _CORE_message_queue_Send(CORE_message_queue_Control *the_message_queue, const void *buffer, size_t size, bool wait, Thread_queue_Context *queue_context)
Sends a message to the message queue.
Definition: coremsgimpl.h:301
Chain_Control Pending_messages
Definition: coremsg.h:161
RTEMS_INLINE_ROUTINE void _CORE_message_queue_Acquire_critical(CORE_message_queue_Control *the_message_queue, Thread_queue_Context *queue_context)
Acquires the message queue critical.
Definition: coremsgimpl.h:376
#define CORE_MESSAGE_QUEUE_URGENT_REQUEST
Used when prepending messages onto a message queue.
Definition: coremsgimpl.h:57
RTEMS_INLINE_ROUTINE void _CORE_message_queue_Acquire(CORE_message_queue_Control *the_message_queue, Thread_queue_Context *queue_context)
Acquires the message queue.
Definition: coremsgimpl.h:362
RTEMS_INLINE_ROUTINE int _CORE_message_queue_Get_message_priority(const CORE_message_queue_Buffer_control *the_message)
Gets message priority.
Definition: coremsgimpl.h:467
CORE_message_queue_Disciplines
The possible blocking disciplines for a message queue.
Definition: coremsg.h:109
RTEMS_INLINE_ROUTINE CORE_message_queue_Buffer_control * _CORE_message_queue_Get_pending_message(CORE_message_queue_Control *the_message_queue)
Gets first message of message queue and removes it.
Definition: coremsgimpl.h:490
RTEMS_INLINE_ROUTINE Status_Control _CORE_message_queue_Urgent(CORE_message_queue_Control *the_message_queue, const void *buffer, size_t size, bool wait, Thread_queue_Context *queue_context)
Sends an urgent message to the message queue.
Definition: coremsgimpl.h:337
RTEMS_INLINE_ROUTINE void _Thread_queue_Acquire_critical(Thread_queue_Control *the_thread_queue, Thread_queue_Context *queue_context)
Acquires the thread queue control in a critical section.
Definition: threadqimpl.h:681
RTEMS_INLINE_ROUTINE void _Chain_Append_unprotected(Chain_Control *the_chain, Chain_Node *the_node)
Appends a node (unprotected).
Definition: chainimpl.h:680
Status_Control _CORE_message_queue_Broadcast(CORE_message_queue_Control *the_message_queue, const void *buffer, size_t size, uint32_t *count, Thread_queue_Context *queue_context)
Broadcasts a message to the message queue.
Definition: coremsgbroadcast.c:24
Constants and Structures Associated with the Message Queue Handler.
Control block used to manage each message queue.
Definition: coremsg.h:136
Status_Control _CORE_message_queue_Submit(CORE_message_queue_Control *the_message_queue, Thread_Control *executing, const void *buffer, size_t size, CORE_message_queue_Submit_types submit_type, bool wait, Thread_queue_Context *queue_context)
Submits a message to the message queue.
Definition: coremsgsubmit.c:29
RTEMS_INLINE_ROUTINE void _Thread_queue_Release(Thread_queue_Control *the_thread_queue, Thread_queue_Context *queue_context)
Releases the thread queue control and enables interrupts.
Definition: threadqimpl.h:787
RTEMS_INLINE_ROUTINE Chain_Node * _Chain_Get_unprotected(Chain_Control *the_chain)
Gets the first node (unprotected).
Definition: chainimpl.h:630
unsigned size
Definition: tte.h:74
void _Thread_queue_Extract_critical(Thread_queue_Queue *queue, const Thread_queue_Operations *operations, Thread_Control *the_thread, Thread_queue_Context *queue_context)
Extracts the thread from the thread queue and unblocks it.
Definition: threadqenqueue.c:600
#define RTEMS_INLINE_ROUTINE
Definition: basedefs.h:66
RTEMS_INLINE_ROUTINE void _Thread_queue_Acquire(Thread_queue_Control *the_thread_queue, Thread_queue_Context *queue_context)
Acquires the thread queue control in a critical section.
Definition: threadqimpl.h:704
Thread_queue_Control Wait_queue
Definition: coremsg.h:140
bool _CORE_message_queue_Initialize(CORE_message_queue_Control *the_message_queue, CORE_message_queue_Disciplines discipline, uint32_t maximum_pending_messages, size_t maximum_message_size)
Initializes a message queue.
Definition: coremsg.c:45
#define NULL
Requests a GPIO pin group configuration.
Definition: bestcomm_api.h:77