summaryrefslogblamecommitdiffstats
path: root/cpukit/rtems/inline/rtems/rtems/modes.inl
blob: 6331a18a3ac2ea9da71696f56db5095a300792a5 (plain) (tree)







































































































































                                                                          
/*  modes.inl
 *
 *  This include file contains the static inline implementation of the
 *  inlined routines in the Mode 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 __MODES_inl
#define __MODES_inl

/*PAGE
 *
 *  RTEMS_INTERRUPT_LEVEL
 */

STATIC INLINE unsigned32 RTEMS_INTERRUPT_LEVEL (
  rtems_mode mode_set
)
{
  return mode_set & RTEMS_INTERRUPT_MASK;
}

/*PAGE
 *
 *  _Modes_Mask_changed
 *
 */

STATIC INLINE boolean _Modes_Mask_changed (
  rtems_mode mode_set,
  rtems_mode masks
)
{
   return ( mode_set & masks );
}

/*PAGE
 *
 *  _Modes_Is_asr_disabled
 *
 */

STATIC INLINE boolean _Modes_Is_asr_disabled (
  rtems_mode mode_set
)
{
   return ( mode_set & RTEMS_ASR_MASK );
}

/*PAGE
 *
 *  _Modes_Is_preempt
 *
 */

STATIC INLINE boolean _Modes_Is_preempt (
  rtems_mode mode_set
)
{
   return ( ( mode_set & RTEMS_PREEMPT_MASK ) == RTEMS_PREEMPT );
}

/*PAGE
 *
 *  _Modes_Is_timeslice
 *
 */

STATIC INLINE boolean _Modes_Is_timeslice (
  rtems_mode mode_set
)
{
  return ((mode_set & (RTEMS_TIMESLICE_MASK|RTEMS_PREEMPT_MASK)) ==
                  (RTEMS_TIMESLICE|RTEMS_PREEMPT) );
}

/*PAGE
 *
 *  _Modes_Get_interrupt_level
 *
 */

STATIC INLINE ISR_Level _Modes_Get_interrupt_level (
  rtems_mode mode_set
)
{
  return ( mode_set & RTEMS_INTERRUPT_MASK );
}

/*PAGE
 *
 *  _Modes_Set_interrupt_level
 *
 */

STATIC INLINE void _Modes_Set_interrupt_level (
  rtems_mode mode_set
)
{
  _ISR_Set_level( _Modes_Get_interrupt_level( mode_set ) );
}

/*PAGE
 *
 *  _Modes_Change
 *
 */

STATIC INLINE void _Modes_Change (
  rtems_mode  old_mode_set,
  rtems_mode  new_mode_set,
  rtems_mode  mask,
  rtems_mode *out_mode_set,
  rtems_mode *changed
)
{
  rtems_mode _out_mode;

  _out_mode      =  old_mode_set;
  _out_mode     &= ~mask;
  _out_mode     |= new_mode_set & mask;
  *changed       = _out_mode ^ old_mode_set;
  *out_mode_set  = _out_mode;
}

#endif
/* end of include file */