summaryrefslogtreecommitdiffstats
path: root/cpukit/rtems/src/msgmp.c
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2016-05-20 14:21:12 +0200
committerSebastian Huber <sebastian.huber@embedded-brains.de>2016-05-20 16:16:59 +0200
commit641b44c225c71af51285f9a1b408a4f4c2844f8b (patch)
tree0141b2e6d009fc681b3599796874734457ced6dd /cpukit/rtems/src/msgmp.c
parentrtems: Remove location from _Partition_Get() (diff)
downloadrtems-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.c110
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
*