diff options
-rw-r--r-- | cpukit/ChangeLog | 9 | ||||
-rw-r--r-- | cpukit/rtems/Makefile.am | 3 | ||||
-rw-r--r-- | cpukit/rtems/src/msgqsend.c | 64 | ||||
-rw-r--r-- | cpukit/rtems/src/msgqsubmit.c | 151 | ||||
-rw-r--r-- | cpukit/rtems/src/msgqurgent.c | 62 |
5 files changed, 124 insertions, 165 deletions
diff --git a/cpukit/ChangeLog b/cpukit/ChangeLog index f9c80cbf00..52c486d382 100644 --- a/cpukit/ChangeLog +++ b/cpukit/ChangeLog @@ -1,3 +1,12 @@ +2007-03-08 Joel Sherrill <joel@OARcorp.com> + + * rtems/Makefile.am, rtems/src/msgqsend.c, rtems/src/msgqurgent.c: + Remove wrapper for message queue send and urgent and implement them + directly. There was an unnecessary function call layer in addition to + conditions in the shared routine. Directly coding both directives is + simpler and should result in smaller code. + * rtems/src/msgqsubmit.c: Removed. + 2007-03-05 Joel Sherrill <joel@OARcorp.com> PR 1222/cpukit diff --git a/cpukit/rtems/Makefile.am b/cpukit/rtems/Makefile.am index 1eb5bbc811..7e9d3393e4 100644 --- a/cpukit/rtems/Makefile.am +++ b/cpukit/rtems/Makefile.am @@ -89,8 +89,7 @@ librtems_a_SOURCES += src/rtemstimer.c src/timercancel.c src/timercreate.c \ librtems_a_SOURCES += src/msg.c src/msgqallocate.c src/msgqbroadcast.c \ src/msgqcreate.c src/msgqdelete.c src/msgqflush.c \ src/msgqgetnumberpending.c src/msgqident.c src/msgqreceive.c \ - src/msgqsend.c src/msgqsubmit.c src/msgqtranslatereturncode.c \ - src/msgqurgent.c + src/msgqsend.c c src/msgqtranslatereturncode.c src/msgqurgent.c ## SEMAPHORE_C_FILES librtems_a_SOURCES += src/sem.c src/semcreate.c src/semdelete.c src/semident.c \ diff --git a/cpukit/rtems/src/msgqsend.c b/cpukit/rtems/src/msgqsend.c index 7d2c8af840..a52f05273b 100644 --- a/cpukit/rtems/src/msgqsend.c +++ b/cpukit/rtems/src/msgqsend.c @@ -1,8 +1,7 @@ /* - * Message Queue Manager + * Message Queue Manager - rtems_message_queue_send * - * - * COPYRIGHT (c) 1989-1999. + * COPYRIGHT (c) 1989-2007. * On-Line Applications Research Corporation (OAR). * * The license and distribution terms for this file may be @@ -34,11 +33,11 @@ #include <rtems/rtems/options.h> #include <rtems/rtems/support.h> -/*PAGE +/* * * rtems_message_queue_send * - * This routine implements the directives q_send. It sends a + * This routine implements the directive rtems_message_queue_sent. It sends a * message to the specified message queue. * * Input parameters: @@ -51,11 +50,64 @@ * error code - if unsuccessful */ +#if defined(RTEMS_MULTIPROCESSING) +#define MESSAGE_QUEUE_MP_HANDLER _Message_queue_Core_message_queue_mp_support +#else +#define MESSAGE_QUEUE_MP_HANDLER NULL +#endif + rtems_status_code rtems_message_queue_send( Objects_Id id, void *buffer, size_t size ) { - return( _Message_queue_Submit(id, buffer, size, MESSAGE_QUEUE_SEND_REQUEST) ); + register Message_queue_Control *the_message_queue; + Objects_Locations location; + CORE_message_queue_Status status; + + if ( !buffer ) + return RTEMS_INVALID_ADDRESS; + + the_message_queue = _Message_queue_Get( id, &location ); + switch ( location ) + { + case OBJECTS_REMOTE: +#if defined(RTEMS_MULTIPROCESSING) + return _Message_queue_MP_Send_request_packet( + MESSAGE_QUEUE_MP_SEND_REQUEST, + id, + buffer, + &size, + 0, /* option_set */ + MPCI_DEFAULT_TIMEOUT + ); + break; +#endif + + case OBJECTS_ERROR: + return RTEMS_INVALID_ID; + + case OBJECTS_LOCAL: + status = _CORE_message_queue_Send( + &the_message_queue->message_queue, + buffer, + size, + id, + MESSAGE_QUEUE_MP_HANDLER, + FALSE, /* sender does not block */ + 0 /* no timeout */ + ); + + _Thread_Enable_dispatch(); + + /* + * 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); + + } + return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } diff --git a/cpukit/rtems/src/msgqsubmit.c b/cpukit/rtems/src/msgqsubmit.c deleted file mode 100644 index 331fcecca2..0000000000 --- a/cpukit/rtems/src/msgqsubmit.c +++ /dev/null @@ -1,151 +0,0 @@ -/* - * Message Queue Manager - * - * - * COPYRIGHT (c) 1989-1999. - * On-Line Applications Research Corporation (OAR). - * - * The license and distribution terms for this file may be - * found in the file LICENSE in this distribution or at - * http://www.rtems.com/license/LICENSE. - * - * $Id$ - */ - -#if HAVE_CONFIG_H -#include "config.h" -#endif - -#include <rtems/system.h> -#include <rtems/score/sysstate.h> -#include <rtems/score/chain.h> -#include <rtems/score/isr.h> -#include <rtems/score/coremsg.h> -#include <rtems/score/object.h> -#include <rtems/score/states.h> -#include <rtems/score/thread.h> -#include <rtems/score/wkspace.h> -#if defined(RTEMS_MULTIPROCESSING) -#include <rtems/score/mpci.h> -#endif -#include <rtems/rtems/status.h> -#include <rtems/rtems/attr.h> -#include <rtems/rtems/message.h> -#include <rtems/rtems/options.h> -#include <rtems/rtems/support.h> - -/*PAGE - * - * _Message_queue_Submit - * - * This routine implements the directives rtems_message_queue_send - * and rtems_message_queue_urgent. It processes a message that is - * to be submitted to the designated message queue. The message will - * either be processed as a send send message which it will be inserted - * at the rear of the queue or it will be processed as an urgent message - * which will be inserted at the front of the queue. - * - * Input parameters: - * id - pointer to message queue - * buffer - pointer to message buffer - * size - size in bytes of message to send - * submit_type - send or urgent message - * - * Output parameters: - * RTEMS_SUCCESSFUL - if successful - * error code - if unsuccessful - */ - -#if defined(RTEMS_MULTIPROCESSING) -#define MESSAGE_QUEUE_MP_HANDLER _Message_queue_Core_message_queue_mp_support -#else -#define MESSAGE_QUEUE_MP_HANDLER NULL -#endif - -rtems_status_code _Message_queue_Submit( - Objects_Id id, - void *buffer, - size_t size, - Message_queue_Submit_types submit_type -) -{ - register Message_queue_Control *the_message_queue; - Objects_Locations location; - CORE_message_queue_Status msg_status; - - if ( !buffer ) - return RTEMS_INVALID_ADDRESS; - - the_message_queue = _Message_queue_Get( id, &location ); - switch ( location ) - { - case OBJECTS_REMOTE: -#if defined(RTEMS_MULTIPROCESSING) - switch ( submit_type ) { - case MESSAGE_QUEUE_SEND_REQUEST: - return _Message_queue_MP_Send_request_packet( - MESSAGE_QUEUE_MP_SEND_REQUEST, - id, - buffer, - &size, - 0, /* option_set */ - MPCI_DEFAULT_TIMEOUT - ); - - case MESSAGE_QUEUE_URGENT_REQUEST: - return _Message_queue_MP_Send_request_packet( - MESSAGE_QUEUE_MP_URGENT_REQUEST, - id, - buffer, - &size, - 0, /* option_set */ - MPCI_DEFAULT_TIMEOUT - ); - } - break; -#endif - - case OBJECTS_ERROR: - return RTEMS_INVALID_ID; - - case OBJECTS_LOCAL: - switch ( submit_type ) { - case MESSAGE_QUEUE_SEND_REQUEST: - msg_status = _CORE_message_queue_Send( - &the_message_queue->message_queue, - buffer, - size, - id, - MESSAGE_QUEUE_MP_HANDLER, - FALSE, /* sender does not block */ - 0 /* no timeout */ - ); - break; - case MESSAGE_QUEUE_URGENT_REQUEST: - msg_status = _CORE_message_queue_Urgent( - &the_message_queue->message_queue, - buffer, - size, - id, - MESSAGE_QUEUE_MP_HANDLER, - FALSE, /* sender does not block */ - 0 /* no timeout */ - ); - break; - default: - return RTEMS_INTERNAL_ERROR; /* should never get here */ - } - - _Thread_Enable_dispatch(); - - /* - * Since this API does not allow for blocking sends, we can directly - * return the returned msg_status. - */ - - return - _Message_queue_Translate_core_message_queue_return_code( msg_status ); - - } - return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ -} diff --git a/cpukit/rtems/src/msgqurgent.c b/cpukit/rtems/src/msgqurgent.c index 9247f89930..d509129507 100644 --- a/cpukit/rtems/src/msgqurgent.c +++ b/cpukit/rtems/src/msgqurgent.c @@ -1,8 +1,7 @@ /* - * Message Queue Manager + * Message Queue Manager - rtems_message_queue_urgent * - * - * COPYRIGHT (c) 1989-1999. + * COPYRIGHT (c) 1989-2007. * On-Line Applications Research Corporation (OAR). * * The license and distribution terms for this file may be @@ -38,8 +37,8 @@ * * rtems_message_queue_urgent * - * This routine implements the directives q_urgent. It urgents a - * message to the specified message queue. + * This routine implements the directives rtems_message_queue_urgent. It + * prepends a message to the specified message queue. * * Input parameters: * id - pointer to message queue @@ -51,11 +50,62 @@ * error code - if unsuccessful */ +#if defined(RTEMS_MULTIPROCESSING) +#define MESSAGE_QUEUE_MP_HANDLER _Message_queue_Core_message_queue_mp_support +#else +#define MESSAGE_QUEUE_MP_HANDLER NULL +#endif + rtems_status_code rtems_message_queue_urgent( Objects_Id id, void *buffer, size_t size ) { - return(_Message_queue_Submit(id, buffer, size, MESSAGE_QUEUE_URGENT_REQUEST)); + register Message_queue_Control *the_message_queue; + Objects_Locations location; + CORE_message_queue_Status status; + + if ( !buffer ) + return RTEMS_INVALID_ADDRESS; + + the_message_queue = _Message_queue_Get( id, &location ); + switch ( location ) + { + case OBJECTS_REMOTE: +#if defined(RTEMS_MULTIPROCESSING) + return _Message_queue_MP_Send_request_packet( + MESSAGE_QUEUE_MP_URGENT_REQUEST, + id, + buffer, + &size, + 0, /* option_set */ + MPCI_DEFAULT_TIMEOUT + ); +#endif + + case OBJECTS_ERROR: + return RTEMS_INVALID_ID; + + case OBJECTS_LOCAL: + status = _CORE_message_queue_Urgent( + &the_message_queue->message_queue, + buffer, + size, + id, + MESSAGE_QUEUE_MP_HANDLER, + FALSE, /* sender does not block */ + 0 /* no timeout */ + ); + _Thread_Enable_dispatch(); + + /* + * 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); + + } + return RTEMS_INTERNAL_ERROR; /* unreached - only to remove warnings */ } |