diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2016-05-20 14:21:12 +0200 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2016-05-20 16:16:59 +0200 |
commit | 641b44c225c71af51285f9a1b408a4f4c2844f8b (patch) | |
tree | 0141b2e6d009fc681b3599796874734457ced6dd /cpukit/rtems/src/msgmp.c | |
parent | rtems: Remove location from _Partition_Get() (diff) | |
download | rtems-641b44c225c71af51285f9a1b408a4f4c2844f8b.tar.bz2 |
rtems: _Message_queue_Get_interrupt_disable()
Use _Objects_Get_local() for _Message_queue_Get_interrupt_disable() to
get rid of the location parameter. Move remote object handling to
message queue MPCI support.
Diffstat (limited to 'cpukit/rtems/src/msgmp.c')
-rw-r--r-- | cpukit/rtems/src/msgmp.c | 110 |
1 files changed, 107 insertions, 3 deletions
diff --git a/cpukit/rtems/src/msgmp.c b/cpukit/rtems/src/msgmp.c index d0ee4192a3..c336ba48c1 100644 --- a/cpukit/rtems/src/msgmp.c +++ b/cpukit/rtems/src/msgmp.c @@ -95,17 +95,21 @@ void _Message_queue_MP_Send_process_packet ( * */ -rtems_status_code _Message_queue_MP_Send_request_packet ( - Message_queue_MP_Remote_operations operation, +static rtems_status_code _Message_queue_MP_Send_request_packet ( Objects_Id message_queue_id, const void *buffer, size_t *size_p, rtems_option option_set, - rtems_interval timeout + rtems_interval timeout, + Message_queue_MP_Remote_operations operation ) { Message_queue_MP_Packet *the_packet; + if ( !_Message_queue_MP_Is_remote( message_queue_id ) ) { + return RTEMS_INVALID_ID; + } + switch ( operation ) { case MESSAGE_QUEUE_MP_SEND_REQUEST: @@ -200,6 +204,106 @@ rtems_status_code _Message_queue_MP_Send_request_packet ( return RTEMS_SUCCESSFUL; } +rtems_status_code _Message_queue_MP_Broadcast( + rtems_id id, + const void *buffer, + size_t size, + uint32_t *count +) +{ + _Thread_Get_executing()->Wait.return_argument = count; + return _Message_queue_MP_Send_request_packet( + id, + buffer, + &size, + 0, + MPCI_DEFAULT_TIMEOUT, + MESSAGE_QUEUE_MP_BROADCAST_REQUEST + ); +} + +rtems_status_code _Message_queue_MP_Flush( + rtems_id id, + uint32_t *count +) +{ + _Thread_Get_executing()->Wait.return_argument = count; + return _Message_queue_MP_Send_request_packet( + id, + NULL, + NULL, + 0, + MPCI_DEFAULT_TIMEOUT, + MESSAGE_QUEUE_MP_FLUSH_REQUEST + ); +} + +rtems_status_code _Message_queue_MP_Get_number_pending( + rtems_id id, + uint32_t *count +) +{ + _Thread_Get_executing()->Wait.return_argument = count; + return _Message_queue_MP_Send_request_packet( + id, + NULL, + NULL, + 0, + MPCI_DEFAULT_TIMEOUT, + MESSAGE_QUEUE_MP_GET_NUMBER_PENDING_REQUEST + ); +} + +rtems_status_code _Message_queue_MP_Receive( + rtems_id id, + void *buffer, + size_t *size, + rtems_option option_set, + rtems_interval timeout +) +{ + return _Message_queue_MP_Send_request_packet( + id, + buffer, + size, + option_set, + timeout, + MESSAGE_QUEUE_MP_RECEIVE_REQUEST + ); +} + +rtems_status_code _Message_queue_MP_Send( + rtems_id id, + const void *buffer, + size_t size +) +{ + return _Message_queue_MP_Send_request_packet( + id, + buffer, + &size, + 0, + MPCI_DEFAULT_TIMEOUT, + MESSAGE_QUEUE_MP_SEND_REQUEST + ); +} + +rtems_status_code _Message_queue_MP_Urgent( + rtems_id id, + const void *buffer, + size_t size +) +{ + return _Message_queue_MP_Send_request_packet( + id, + buffer, + &size, + 0, + MPCI_DEFAULT_TIMEOUT, + MESSAGE_QUEUE_MP_URGENT_REQUEST + ); +} + /* * _Message_queue_MP_Send_response_packet * |