RTEMS: cpukit/include/rtems/posix/mqueueimpl.h Source File

| RTEMS 5.4-rc2

Loading...
Searching...
No Matches
mqueueimpl.h
Go to the documentation of this file.
1
10/*
11 * COPYRIGHT (c) 1989-2013.
12 * On-Line Applications Research Corporation (OAR).
13 *
14 * The license and distribution terms for this file may be
15 * found in the file LICENSE in this distribution or at
16 * http://www.rtems.org/license/LICENSE.
17 */
18
19#ifndef _RTEMS_POSIX_MQUEUE_INL
20#define _RTEMS_POSIX_MQUEUE_INL
21
22#include <rtems/posix/mqueue.h>
23#include <rtems/posix/posixapi.h>
24#include <rtems/score/coremsgimpl.h>
25#include <rtems/score/threadqimpl.h>
26
27#include <rtems/seterr.h>
28
29#ifdef __cplusplus
30extern "C" {
31#endif
32
39void _POSIX_Message_queue_Delete(
40 POSIX_Message_queue_Control *the_mq,
41 Thread_queue_Context *queue_context
42);
43
44/*@
45 * @brief POSIX Message Queue Receive Support
46 *
47 * This routine supports the various flavors of receiving a message.
48 *
49 * @note The structure of the routines is identical to that of POSIX
50 * Message_queues to leave the option of having unnamed message
51 * queues at a future date. They are currently not part of the
52 * POSIX standard but unnamed message_queues are. This is also
53 * the reason for the apparently unnecessary tracking of
54 * the process_shared attribute. [In addition to the fact that
55 * it would be trivial to add pshared to the mq_attr structure
56 * and have process private message queues.]
57 *
58 * @note This code ignores the O_RDONLY/O_WRONLY/O_RDWR flag at open time.
59 */
60ssize_t _POSIX_Message_queue_Receive_support(
61 mqd_t mqdes,
62 char *msg_ptr,
63 size_t msg_len,
64 unsigned int *msg_prio,
65 const struct timespec *abstime,
66 Thread_queue_Enqueue_callout enqueue_callout
67);
68
74int _POSIX_Message_queue_Send_support(
75 mqd_t mqdes,
76 const char *msg_ptr,
77 size_t msg_len,
78 unsigned int msg_prio,
79 const struct timespec *abstime,
80 Thread_queue_Enqueue_callout enqueue_callout
81);
82
83 RTEMS_INLINE_ROUTINE POSIX_Message_queue_Control *
84 _POSIX_Message_queue_Allocate_unprotected( void )
85{
86 return (POSIX_Message_queue_Control *)
87 _Objects_Allocate_unprotected( &_POSIX_Message_queue_Information );
88}
89
96 RTEMS_INLINE_ROUTINE void _POSIX_Message_queue_Free(
97 POSIX_Message_queue_Control *the_mq
98)
99{
100 _Objects_Free( &_POSIX_Message_queue_Information, &the_mq->Object );
101}
102
103
104 RTEMS_INLINE_ROUTINE POSIX_Message_queue_Control *_POSIX_Message_queue_Get(
105 Objects_Id id,
106 Thread_queue_Context *queue_context
107)
108{
109 _Thread_queue_Context_initialize( queue_context );
110 return (POSIX_Message_queue_Control *) _Objects_Get(
111 id,
112 &queue_context->Lock_context.Lock_context,
113 &_POSIX_Message_queue_Information
114 );
115}
116
117/*
118 * @brief POSIX Message Queue Convert Message Priority to Score
119 *
120 * This method converts a POSIX message priority to the priorities used
121 * by the Score.
122 */
123 RTEMS_INLINE_ROUTINE CORE_message_queue_Submit_types
124 _POSIX_Message_queue_Priority_to_core(
125 unsigned int priority
126)
127{
128 return (CORE_message_queue_Submit_types) priority * -1;
129}
130
131
132/*
133 * @brief POSIX Message Queue Convert Message Priority from Score
134 *
135 * This method converts a POSIX message priority from the priorities used
136 * by the Score.
137 */
138 RTEMS_INLINE_ROUTINE unsigned int _POSIX_Message_queue_Priority_from_core(
139 CORE_message_queue_Submit_types priority
140)
141{
142 /* absolute value without a library dependency */
143 return (unsigned int) ((priority >= 0) ? priority : -priority);
144}
145
149 RTEMS_INLINE_ROUTINE void _POSIX_Message_queue_Namespace_remove (
150 POSIX_Message_queue_Control *the_mq
151)
152{
153 _Objects_Namespace_remove_string(
154 &_POSIX_Message_queue_Information,
155 &the_mq->Object
156 );
157}
158
159 RTEMS_INLINE_ROUTINE POSIX_Message_queue_Control *
160_POSIX_Message_queue_Get_by_name(
161 const char *name,
162 size_t *name_length_p,
163 Objects_Get_by_name_error *error
164)
165{
166 return (POSIX_Message_queue_Control *) _Objects_Get_by_name(
167 &_POSIX_Message_queue_Information,
168 name,
169 name_length_p,
170 error
171 );
172}
173
174#ifdef __cplusplus
175}
176#endif
177
178#endif
179/* end of include file */
coremsgimpl.h
Inlined Routines in the Core Message Handler.
_POSIX_Message_queue_Information
Objects_Information _POSIX_Message_queue_Information
The POSIX Message Queue objects information.
RTEMS_INLINE_ROUTINE
#define RTEMS_INLINE_ROUTINE
Definition: basedefs.h:66
CORE_message_queue_Submit_types
int CORE_message_queue_Submit_types
The modes in which a message may be submitted to a message queue.
Definition: coremsgimpl.h:69
_Objects_Get_by_name
Objects_Control * _Objects_Get_by_name(const Objects_Information *information, const char *name, size_t *name_length_p, Objects_Get_by_name_error *error)
Gets an object control block identified by its name.
Definition: objectnametoidstring.c:26
_Objects_Free
RTEMS_INLINE_ROUTINE void _Objects_Free(Objects_Information *information, Objects_Control *the_object)
Frees an object.
Definition: objectimpl.h:930
_Objects_Allocate_unprotected
RTEMS_INLINE_ROUTINE Objects_Control * _Objects_Allocate_unprotected(Objects_Information *information)
Allocates an object without locking the allocator mutex.
Definition: objectimpl.h:874
Objects_Id
uint32_t Objects_Id
Definition: object.h:80
_Objects_Get
Objects_Control * _Objects_Get(Objects_Id id, ISR_lock_Context *lock_context, const Objects_Information *information)
Maps the specified object identifier to the associated local object control block.
Definition: objectgetlocal.c:28
_Objects_Namespace_remove_string
void _Objects_Namespace_remove_string(const Objects_Information *information, Objects_Control *the_object)
Removes object with a string name from its namespace.
Definition: objectnamespaceremove.c:25
Thread_queue_Enqueue_callout
void(* Thread_queue_Enqueue_callout)(Thread_queue_Queue *queue, Thread_Control *the_thread, struct Per_CPU_Control *cpu_self, Thread_queue_Context *queue_context)
Thread queue enqueue callout.
Definition: threadq.h:72
_Thread_queue_Context_initialize
RTEMS_INLINE_ROUTINE void _Thread_queue_Context_initialize(Thread_queue_Context *queue_context)
Initializes a thread queue context.
Definition: threadqimpl.h:152
_POSIX_Message_queue_Free
RTEMS_INLINE_ROUTINE void _POSIX_Message_queue_Free(POSIX_Message_queue_Control *the_mq)
POSIX Message Queue Free.
Definition: mqueueimpl.h:96
_POSIX_Message_queue_Namespace_remove
RTEMS_INLINE_ROUTINE void _POSIX_Message_queue_Namespace_remove(POSIX_Message_queue_Control *the_mq)
POSIX Message Queue Remove from Namespace.
Definition: mqueueimpl.h:149
_POSIX_Message_queue_Delete
void _POSIX_Message_queue_Delete(POSIX_Message_queue_Control *the_mq, Thread_queue_Context *queue_context)
Delete a POSIX Message Queue.
Definition: mqueuedeletesupp.c:23
_POSIX_Message_queue_Send_support
int _POSIX_Message_queue_Send_support(mqd_t mqdes, const char *msg_ptr, size_t msg_len, unsigned int msg_prio, const struct timespec *abstime, Thread_queue_Enqueue_callout enqueue_callout)
POSIX Message Queue Send Support.
Definition: mqueuesendsupp.c:38
posixapi.h
POSIX API Implementation.
mqueue.h
POSIX Message Queues Private Private Support.
seterr.h
Data which Ease the Burden of Consistently Setting Errno.
POSIX_Message_queue_Control
Definition: mqueue.h:57
Thread_queue_Context
Thread queue context for the thread queue methods.
Definition: threadq.h:198
Thread_queue_Context::Lock_context
Thread_queue_Lock_context Lock_context
The lock context for the thread queue acquire and release operations.
Definition: threadq.h:203
Thread_queue_Lock_context::Lock_context
ISR_lock_Context Lock_context
The lock context for the thread queue acquire and release operations.
Definition: threadq.h:130
threadqimpl.h
Constants and Structures Associated with the Manipulation of Objects.