summaryrefslogtreecommitdiffstats
path: root/cpukit/rtems/src/msgqbroadcast.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/msgqbroadcast.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/msgqbroadcast.c')
-rw-r--r--cpukit/rtems/src/msgqbroadcast.c69
1 files changed, 22 insertions, 47 deletions
diff --git a/cpukit/rtems/src/msgqbroadcast.c b/cpukit/rtems/src/msgqbroadcast.c
index 7bd7e3b810..5aab1b1117 100644
--- a/cpukit/rtems/src/msgqbroadcast.c
+++ b/cpukit/rtems/src/msgqbroadcast.c
@@ -18,17 +18,7 @@
#include "config.h"
#endif
-#include <rtems/system.h>
-#include <rtems/score/chain.h>
-#include <rtems/score/isr.h>
-#include <rtems/score/coremsgimpl.h>
-#include <rtems/score/thread.h>
-#include <rtems/score/wkspace.h>
-#include <rtems/rtems/status.h>
-#include <rtems/rtems/attrimpl.h>
#include <rtems/rtems/messageimpl.h>
-#include <rtems/rtems/options.h>
-#include <rtems/rtems/support.h>
rtems_status_code rtems_message_queue_broadcast(
rtems_id id,
@@ -37,54 +27,39 @@ rtems_status_code rtems_message_queue_broadcast(
uint32_t *count
)
{
- Message_queue_Control *the_message_queue;
- Objects_Locations location;
- CORE_message_queue_Status core_status;
- ISR_lock_Context lock_context;
+ Message_queue_Control *the_message_queue;
+ ISR_lock_Context lock_context;
+ CORE_message_queue_Status status;
- if ( !buffer )
+ if ( buffer == NULL ) {
return RTEMS_INVALID_ADDRESS;
+ }
- if ( !count )
+ if ( count == NULL ) {
return RTEMS_INVALID_ADDRESS;
+ }
the_message_queue = _Message_queue_Get_interrupt_disable(
id,
- &location,
&lock_context
);
- switch ( location ) {
-
- case OBJECTS_LOCAL:
- core_status = _CORE_message_queue_Broadcast(
- &the_message_queue->message_queue,
- buffer,
- size,
- _Message_queue_Core_message_queue_mp_support,
- id,
- count,
- &lock_context
- );
- return
- _Message_queue_Translate_core_message_queue_return_code( core_status );
+ if ( the_message_queue == NULL ) {
#if defined(RTEMS_MULTIPROCESSING)
- case OBJECTS_REMOTE:
- _Thread_Executing->Wait.return_argument = count;
-
- return
- _Message_queue_MP_Send_request_packet(
- MESSAGE_QUEUE_MP_BROADCAST_REQUEST,
- id,
- buffer,
- &size,
- 0, /* option_set not used */
- MPCI_DEFAULT_TIMEOUT
- );
+ _Message_queue_MP_Broadcast( id, buffer, size, count );
+#else
+ return RTEMS_INVALID_ID;
#endif
-
- case OBJECTS_ERROR:
- break;
}
- return RTEMS_INVALID_ID;
+
+ status = _CORE_message_queue_Broadcast(
+ &the_message_queue->message_queue,
+ buffer,
+ size,
+ _Message_queue_Core_message_queue_mp_support,
+ id,
+ count,
+ &lock_context
+ );
+ return _Message_queue_Translate_core_message_queue_return_code( status );
}