summaryrefslogblamecommitdiffstats
path: root/cpukit/score/inline/rtems/score/coremsg.inl
blob: d1b5429947d3c4494ae2ca3d1a3892ad938ffd58 (plain) (tree)

























































































































































































                                                                                
/*  coremsg.inl
 *
 *  This include file contains the static inline implementation of all
 *  inlined routines in the Core Message Handler.
 *
 *  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
 *  On-Line Applications Research Corporation (OAR).
 *  All rights assigned to U.S. Government, 1994.
 *
 *  This material may be reproduced by or for the U.S. Government pursuant
 *  to the copyright license under the clause at DFARS 252.227-7013.  This
 *  notice must appear in all copies of this file and its derivatives.
 *
 *  $Id$
 */

#ifndef __CORE_MESSAGE_QUEUE_inl
#define __CORE_MESSAGE_QUEUE_inl

/*PAGE
 *
 *  _CORE_message_queue_Send
 *
 */
 
STATIC INLINE CORE_message_queue_Status _CORE_message_queue_Send(
  CORE_message_queue_Control                *the_message_queue,
  void                                      *buffer,
  unsigned32                                 size,
  Objects_Id                                 id,
  CORE_message_queue_API_mp_support_callout  api_message_queue_mp_support
)
{
  return _CORE_message_queue_Submit(
    the_message_queue,
    buffer,
    size,
    id,
    api_message_queue_mp_support,
    CORE_MESSAGE_QUEUE_SEND_REQUEST
  );
}
 
/*PAGE
 *
 *  _CORE_message_queue_Urgent
 *
 */
 
STATIC INLINE CORE_message_queue_Status _CORE_message_queue_Urgent(
  CORE_message_queue_Control                *the_message_queue,
  void                                      *buffer,
  unsigned32                                 size,
  Objects_Id                                 id,
  CORE_message_queue_API_mp_support_callout  api_message_queue_mp_support
)
{
  return _CORE_message_queue_Submit(
    the_message_queue,
    buffer,
    size,
    id,
    api_message_queue_mp_support,
    CORE_MESSAGE_QUEUE_URGENT_REQUEST
 );
}

/*PAGE
 *
 *  _CORE_message_queue_Copy_buffer
 *
 */

STATIC INLINE void _CORE_message_queue_Copy_buffer (
  void      *source,
  void      *destination,
  unsigned32 size
)
{
  memcpy(destination, source, size);
}

/*PAGE
 *
 *  _CORE_message_queue_Allocate_message_buffer
 *
 */

STATIC INLINE CORE_message_queue_Buffer_control *
_CORE_message_queue_Allocate_message_buffer (
    CORE_message_queue_Control *the_message_queue
)
{
   return (CORE_message_queue_Buffer_control *)
     _Chain_Get( &the_message_queue->Inactive_messages );
}

/*PAGE
 *
 *  _CORE_message_queue_Free_message_buffer
 *
 */

STATIC INLINE void _CORE_message_queue_Free_message_buffer (
    CORE_message_queue_Control        *the_message_queue,
    CORE_message_queue_Buffer_control *the_message
)
{
  _Chain_Append( &the_message_queue->Inactive_messages, &the_message->Node );
}

/*PAGE
 *
 *  _CORE_message_queue_Get_pending_message
 *
 */

STATIC INLINE
  CORE_message_queue_Buffer_control *_CORE_message_queue_Get_pending_message (
  CORE_message_queue_Control *the_message_queue
)
{
  return (CORE_message_queue_Buffer_control *)
    _Chain_Get_unprotected( &the_message_queue->Pending_messages );
}

/*PAGE
 *
 *  _CORE_message_queue_Is_priority
 *
 */
 
STATIC INLINE boolean _CORE_message_queue_Is_priority(
  CORE_message_queue_Attributes *the_attribute
)
{
  return (the_attribute->discipline == CORE_MESSAGE_QUEUE_DISCIPLINES_PRIORITY);
}

/*PAGE
 *
 *  _CORE_message_queue_Append
 *
 */

STATIC INLINE void _CORE_message_queue_Append (
  CORE_message_queue_Control        *the_message_queue,
  CORE_message_queue_Buffer_control *the_message
)
{
  _Chain_Append( &the_message_queue->Pending_messages, &the_message->Node );
}

/*PAGE
 *
 *  _CORE_message_queue_Prepend
 *
 */

STATIC INLINE void _CORE_message_queue_Prepend (
  CORE_message_queue_Control        *the_message_queue,
  CORE_message_queue_Buffer_control *the_message
)
{
  _Chain_Prepend(
    &the_message_queue->Pending_messages,
    &the_message->Node
  );
}

/*PAGE
 *
 *  _CORE_message_queue_Is_null
 *
 */

STATIC INLINE boolean _CORE_message_queue_Is_null (
  CORE_message_queue_Control *the_message_queue
)
{
  return ( the_message_queue == NULL  );
}


#endif
/* end of include file */