mirror of
https://gitlab.rtems.org/rtems/rtos/rtems.git
synced 2025-12-25 22:07:15 +00:00
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.
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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 \
|
||||
|
||||
@@ -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 */
|
||||
}
|
||||
|
||||
@@ -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 */
|
||||
}
|
||||
@@ -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 */
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user