summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--cpukit/ChangeLog9
-rw-r--r--cpukit/rtems/Makefile.am3
-rw-r--r--cpukit/rtems/src/msgqsend.c64
-rw-r--r--cpukit/rtems/src/msgqsubmit.c151
-rw-r--r--cpukit/rtems/src/msgqurgent.c62
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 */
}