From 641b44c225c71af51285f9a1b408a4f4c2844f8b Mon Sep 17 00:00:00 2001 From: Sebastian Huber Date: Fri, 20 May 2016 14:21:12 +0200 Subject: 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. --- cpukit/rtems/src/msgqsend.c | 85 +++++++++++++++++---------------------------- 1 file changed, 31 insertions(+), 54 deletions(-) (limited to 'cpukit/rtems/src/msgqsend.c') diff --git a/cpukit/rtems/src/msgqsend.c b/cpukit/rtems/src/msgqsend.c index 355475c37f..af8f3c9706 100644 --- a/cpukit/rtems/src/msgqsend.c +++ b/cpukit/rtems/src/msgqsend.c @@ -18,17 +18,7 @@ #include "config.h" #endif -#include -#include -#include -#include -#include -#include -#include -#include #include -#include -#include rtems_status_code rtems_message_queue_send( rtems_id id, @@ -36,59 +26,46 @@ rtems_status_code rtems_message_queue_send( size_t size ) { - Message_queue_Control *the_message_queue; - Objects_Locations location; - CORE_message_queue_Status 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; + } the_message_queue = _Message_queue_Get_interrupt_disable( id, - &location, &lock_context ); - switch ( location ) { - - case OBJECTS_LOCAL: - _CORE_message_queue_Acquire_critical( - &the_message_queue->message_queue, - &lock_context - ); - status = _CORE_message_queue_Send( - &the_message_queue->message_queue, - buffer, - size, - _Message_queue_Core_message_queue_mp_support, - id, - false, /* sender does not block */ - 0, /* no timeout */ - &lock_context - ); - - /* - * Since this API does not allow for blocking sends, we can directly - * return the returned status. - */ - - return _Message_queue_Translate_core_message_queue_return_code(status); + if ( the_message_queue == NULL ) { #if defined(RTEMS_MULTIPROCESSING) - case OBJECTS_REMOTE: - return _Message_queue_MP_Send_request_packet( - MESSAGE_QUEUE_MP_SEND_REQUEST, - id, - buffer, - &size, - 0, /* option_set */ - MPCI_DEFAULT_TIMEOUT - ); - break; + _Message_queue_MP_Send( id, buffer, size ); +#else + return RTEMS_INVALID_ID; #endif - - case OBJECTS_ERROR: - break; } - return RTEMS_INVALID_ID; + + _CORE_message_queue_Acquire_critical( + &the_message_queue->message_queue, + &lock_context + ); + status = _CORE_message_queue_Send( + &the_message_queue->message_queue, + buffer, + size, + _Message_queue_Core_message_queue_mp_support, + id, + false, /* sender does not block */ + 0, /* no timeout */ + &lock_context + ); + + /* + * Since this API does not allow for blocking sends, we can directly + * return the returned status. + */ + + return _Message_queue_Translate_core_message_queue_return_code( status ); } -- cgit v1.2.3