Changeset 849b98e8 in rtems
- Timestamp:
- 12/09/13 19:29:51 (10 years ago)
- Branches:
- 4.11, 5, master
- Children:
- 610825b1
- Parents:
- 07a3aa9d
- git-author:
- Joel Sherrill <joel.sherrill@…> (12/09/13 19:29:51)
- git-committer:
- Joel Sherrill <joel.sherrill@…> (12/10/13 01:50:55)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
cpukit/posix/include/rtems/posix/mqueueimpl.h
r07a3aa9d r849b98e8 9 9 10 10 /* 11 * COPYRIGHT (c) 1989-201 1.11 * COPYRIGHT (c) 1989-2013. 12 12 * On-Line Applications Research Corporation (OAR). 13 13 * … … 28 28 #endif 29 29 30 /* 31 * The following defines the information control block used to manage 32 * this class of objects. The second item is used to manage the set 33 * of "file descriptors" associated with the message queues. 34 */ 35 30 /** 31 * This defines the information control block used to manage 32 * this class of objects. 33 */ 36 34 POSIX_EXTERN Objects_Information _POSIX_Message_queue_Information; 35 36 /** 37 * The is used to manage the set of "file descriptors" associated with 38 * the message queues. 39 */ 37 40 POSIX_EXTERN Objects_Information _POSIX_Message_queue_Information_fds; 38 41 … … 40 43 * @brief Initialize message_queue manager related data structures. 41 44 * 42 * DESCRIPTION:43 *44 45 * This routine performs the initialization necessary for this manager. 45 46 * 46 * NOTE: The structure of the routines is identical to that of POSIX 47 * @note The structure of the routines is identical to that of POSIX 48 * Message_queues to leave the option of having unnamed message 49 * queues at a future date. They are currently not part of the 50 * POSIX standard but unnamed message_queues are. This is also 51 * the reason for the apparently unnecessary tracking of 52 * the process_shared attribute. [In addition to the fact that 53 * it would be trivial to add pshared to the mq_attr structure 54 * and have process private message queues.] 55 * 56 * @note This code ignores the O_RDONLY/O_WRONLY/O_RDWR flag at open time. 57 * 58 */ 59 void _POSIX_Message_queue_Manager_initialization(void); 60 61 /** 62 * @brief POSIX Message Queue Create Support 63 * 64 * This routine performs the creation of a message queue utilizing the 65 * core message queue. 66 */ 67 int _POSIX_Message_queue_Create_support( 68 const char *name, 69 size_t name_len, 70 int pshared, 71 struct mq_attr *attr, 72 POSIX_Message_queue_Control **message_queue 73 ); 74 75 /** 76 * @brief Delete a POSIX Message Queue 77 * 78 * This routine supports the mq_unlink and mq_close routines by 79 * doing most of the work involved with removing a message queue. 80 */ 81 void _POSIX_Message_queue_Delete( 82 POSIX_Message_queue_Control *the_mq 83 ); 84 85 /*@ 86 * @brief POSIX Message Queue Receive Support 87 * 88 * This routine supports the various flavors of receiving a message. 89 * 90 * @note The structure of the routines is identical to that of POSIX 47 91 * Message_queues to leave the option of having unnamed message 48 92 * queues at a future date. They are currently not part of the … … 53 97 * and have process private message queues.] 54 98 * 55 * This code ignores the O_RDONLY/O_WRONLY/O_RDWR flag at open 56 * time. 57 * 58 */ 59 60 void _POSIX_Message_queue_Manager_initialization(void); 61 62 /* 63 * 64 * _POSIX_Message_queue_Create_support 65 * 66 * DESCRIPTION: 67 * 68 * This routine performs the creation of a message queue utilizing the 69 * core message queue. 70 */ 71 72 int _POSIX_Message_queue_Create_support( 73 const char *name, 74 size_t name_len, 75 int pshared, 76 struct mq_attr *attr, 77 POSIX_Message_queue_Control **message_queue 78 ); 79 80 /** 81 * @brief Delete a POSIX message queue. 82 * 83 * DESCRIPTION: 84 * 85 * This routine supports the mq_unlink and mq_close routines by 86 * doing most of the work involved with removing a message queue. 87 */ 88 void _POSIX_Message_queue_Delete( 89 POSIX_Message_queue_Control *the_mq 90 ); 91 92 /* 93 * @brief POSIX Message Queue Receive Support 94 * 95 * DESCRIPTION: 96 * 97 * This routine supports the various flavors of receiving a message. 98 * 99 * NOTE: The structure of the routines is identical to that of POSIX 100 * Message_queues to leave the option of having unnamed message 101 * queues at a future date. They are currently not part of the 102 * POSIX standard but unnamed message_queues are. This is also 103 * the reason for the apparently unnecessary tracking of 104 * the process_shared attribute. [In addition to the fact that 105 * it would be trivial to add pshared to the mq_attr structure 106 * and have process private message queues.] 107 * 108 * This code ignores the O_RDONLY/O_WRONLY/O_RDWR flag at open 109 * time. 110 */ 111 99 * @note This code ignores the O_RDONLY/O_WRONLY/O_RDWR flag at open time. 100 */ 112 101 ssize_t _POSIX_Message_queue_Receive_support( 113 102 mqd_t mqdes, … … 119 108 ); 120 109 121 /* 122 * _POSIX_Message_queue_Send_support 123 * 124 * DESCRIPTION: 110 /** 111 * @brief POSIX Message Queue Send Support 125 112 * 126 113 * This routine posts a message to a specified message queue. 127 114 */ 128 129 115 int _POSIX_Message_queue_Send_support( 130 116 mqd_t mqdes, … … 136 122 ); 137 123 138 /* 139 * _POSIX_Message_queue_Allocate 140 * 141 * DESCRIPTION: 124 /** 125 * @brief POSIX Message Queue Allocate 142 126 * 143 127 * This function allocates a message queue control block from 144 128 * the inactive chain of free message queue control blocks. 145 129 */ 146 147 RTEMS_INLINE_ROUTINE POSIX_Message_queue_Control *_POSIX_Message_queue_Allocate( void ); 148 149 /* 150 * _POSIX_Message_queue_Free 151 * 152 * DESCRIPTION: 130 RTEMS_INLINE_ROUTINE 131 POSIX_Message_queue_Control *_POSIX_Message_queue_Allocate( void ) 132 { 133 return (POSIX_Message_queue_Control *) 134 _Objects_Allocate( &_POSIX_Message_queue_Information ); 135 } 136 137 /** 138 * @brief POSIX Message Queue Free 153 139 * 154 140 * This routine frees a message queue control block to the 155 141 * inactive chain of free message queue control blocks. 156 142 */ 157 158 RTEMS_INLINE_ROUTINE void _POSIX_Message_queue_Free ( 159 POSIX_Message_queue_Control *the_mq 160 ); 161 162 /* 163 * _POSIX_Message_queue_Get 164 * 165 * DESCRIPTION: 143 RTEMS_INLINE_ROUTINE void _POSIX_Message_queue_Free( 144 POSIX_Message_queue_Control *the_mq 145 ) 146 { 147 _Objects_Free( &_POSIX_Message_queue_Information, &the_mq->Object ); 148 } 149 150 151 /** 152 * @brief POSIX Message Queue Get 166 153 * 167 154 * This function maps message queue IDs to message queue control blocks. … … 173 160 * to OBJECTS_ERROR and the_mq is undefined. 174 161 */ 175 176 162 RTEMS_INLINE_ROUTINE POSIX_Message_queue_Control *_POSIX_Message_queue_Get ( 177 163 Objects_Id id, 178 164 Objects_Locations *location 179 ); 180 181 /* 182 * _POSIX_Message_queue_Is_null 183 * 184 * DESCRIPTION: 165 ) 166 { 167 return (POSIX_Message_queue_Control *) 168 _Objects_Get( &_POSIX_Message_queue_Information, id, location ); 169 } 170 171 /** 172 * @brief POSIX Message Queue Is NULL 185 173 * 186 174 * This function returns TRUE if the_message_queue is NULL and FALSE otherwise. 187 175 */ 188 189 RTEMS_INLINE_ROUTINE bool _POSIX_Message_queue_Is_null ( 190 POSIX_Message_queue_Control *the_mq 191 ); 192 193 /* 194 * _POSIX_Message_queue_Priority_to_core 195 * 196 * DESCRIPTION: 197 * 198 * XXX 199 */ 200 201 RTEMS_INLINE_ROUTINE CORE_message_queue_Submit_types _POSIX_Message_queue_Priority_to_core( 176 RTEMS_INLINE_ROUTINE bool _POSIX_Message_queue_Is_null ( 177 POSIX_Message_queue_Control *the_mq 178 ) 179 { 180 return !the_mq; 181 } 182 183 184 /* 185 * @brief POSIX Message Queue Convert Message Priority to Score 186 * 187 * This method converts a POSIX message priority to the priorities used 188 * by the Score. 189 */ 190 RTEMS_INLINE_ROUTINE CORE_message_queue_Submit_types 191 _POSIX_Message_queue_Priority_to_core( 202 192 unsigned int priority 203 ); 204 205 /* 206 * _POSIX_Message_queue_Priority_from_core 207 * 208 * DESCRIPTION: 209 * 210 * XXX 211 */ 212 193 ) 194 { 195 return (CORE_message_queue_Submit_types) priority * -1; 196 } 197 198 199 /* 200 * @brief POSIX Message Queue Convert Message Priority from Score 201 * 202 * This method converts a POSIX message priority from the priorities used 203 * by the Score. 204 */ 213 205 RTEMS_INLINE_ROUTINE unsigned int _POSIX_Message_queue_Priority_from_core( 214 206 CORE_message_queue_Submit_types priority 215 ) ;216 217 /* 218 * _POSIX_Message_queue_Translate_core_message_queue_return_code219 * 220 * DESCRIPTION: 221 222 * XXX223 * /224 207 ) 208 { 209 /* absolute value without a library dependency */ 210 return (unsigned int) ((priority >= 0) ? priority : -priority); 211 } 212 213 /** 214 * @brief POSIX Message Queue Translate Score Return Code 215 * 216 */ 225 217 int _POSIX_Message_queue_Translate_core_message_queue_return_code( 226 218 uint32_t the_message_queue_status 227 219 ); 228 220 229 /* 230 * _POSIX_Message_queue_Allocate 231 */ 232 233 RTEMS_INLINE_ROUTINE 234 POSIX_Message_queue_Control *_POSIX_Message_queue_Allocate( void ) 235 { 236 return (POSIX_Message_queue_Control *) 237 _Objects_Allocate( &_POSIX_Message_queue_Information ); 238 } 239 240 /* 241 * _POSIX_Message_queue_Allocate_fd 242 */ 243 221 /** 222 * @brief POSIX Message Queue Allocate File Descriptor 223 */ 244 224 RTEMS_INLINE_ROUTINE POSIX_Message_queue_Control_fd * 245 225 _POSIX_Message_queue_Allocate_fd( void ) … … 249 229 } 250 230 251 /* 252 * _POSIX_Message_queue_Free 253 */ 254 255 RTEMS_INLINE_ROUTINE void _POSIX_Message_queue_Free ( 256 POSIX_Message_queue_Control *the_mq 257 ) 258 { 259 _Objects_Free( &_POSIX_Message_queue_Information, &the_mq->Object ); 260 } 261 262 /* 263 * _POSIX_Message_queue_Free_fd 264 */ 265 231 /** 232 * @brief POSIX Message Queue Free File Descriptor 233 */ 266 234 RTEMS_INLINE_ROUTINE void _POSIX_Message_queue_Free_fd ( 267 235 POSIX_Message_queue_Control_fd *the_mq_fd … … 271 239 } 272 240 273 /* 274 * _POSIX_Message_queue_Namespace_remove 275 */ 276 241 /** 242 * @brief POSIX Message Queue Remove from Namespace 243 */ 277 244 RTEMS_INLINE_ROUTINE void _POSIX_Message_queue_Namespace_remove ( 278 245 POSIX_Message_queue_Control *the_mq … … 284 251 285 252 /* 286 * _POSIX_Message_queue_Get 287 */ 288 289 RTEMS_INLINE_ROUTINE POSIX_Message_queue_Control *_POSIX_Message_queue_Get ( 290 Objects_Id id, 291 Objects_Locations *location 292 ) 293 { 294 return (POSIX_Message_queue_Control *) 295 _Objects_Get( &_POSIX_Message_queue_Information, id, location ); 296 } 297 298 /* 299 * _POSIX_Message_queue_Get_fd 300 */ 301 253 * @brief POSIX Message Queue Get File Descriptor 254 */ 302 255 RTEMS_INLINE_ROUTINE POSIX_Message_queue_Control_fd *_POSIX_Message_queue_Get_fd ( 303 256 mqd_t id, … … 312 265 } 313 266 314 /*315 * _POSIX_Message_queue_Is_null316 */317 318 RTEMS_INLINE_ROUTINE bool _POSIX_Message_queue_Is_null (319 POSIX_Message_queue_Control *the_mq320 )321 {322 return !the_mq;323 }324 325 /*326 * _POSIX_Message_queue_Priority_to_core327 */328 329 RTEMS_INLINE_ROUTINE CORE_message_queue_Submit_types _POSIX_Message_queue_Priority_to_core(330 unsigned int priority331 )332 {333 return (CORE_message_queue_Submit_types) priority * -1;334 }335 336 /*337 * _POSIX_Message_queue_Priority_from_core338 *339 * DESCRIPTION:340 *341 * XXX342 */343 344 RTEMS_INLINE_ROUTINE unsigned int _POSIX_Message_queue_Priority_from_core(345 CORE_message_queue_Submit_types priority346 )347 {348 /* absolute value without a library dependency */349 return (unsigned int) ((priority >= 0) ? priority : -priority);350 }351 352 267 /** 353 268 * @see _POSIX_Name_to_id().
Note: See TracChangeset
for help on using the changeset viewer.