diff options
Diffstat (limited to 'cpukit/score/inline/rtems/score/scheduler.inl')
-rw-r--r-- | cpukit/score/inline/rtems/score/scheduler.inl | 165 |
1 files changed, 165 insertions, 0 deletions
diff --git a/cpukit/score/inline/rtems/score/scheduler.inl b/cpukit/score/inline/rtems/score/scheduler.inl new file mode 100644 index 0000000000..4a6c74cbf8 --- /dev/null +++ b/cpukit/score/inline/rtems/score/scheduler.inl @@ -0,0 +1,165 @@ +/** + * @file rtems/score/scheduler.inl + * + * This inline file contains all of the inlined routines associated with + * the manipulation of the scheduler. + */ + +/* + * Copyright (C) 2010 Gedare Bloom. + * Copyright (C) 2011 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$ + */ + +#ifndef _RTEMS_SCORE_SCHEDULER_H +# error "Never use <rtems/score/scheduler.inl> directly; include <rtems/score/scheduler.h> instead." +#endif + +#ifndef _RTEMS_SCORE_SCHEDULER_INL +#define _RTEMS_SCORE_SCHEDULER_INL + +/** + * @addtogroup ScoreScheduler + * @{ + */ + +/** + * The preferred method to add a new scheduler is to define the jump table + * entries and add a case to the _Scheduler_Initialize routine. + * + * Generic scheduling implementations that rely on the ready queue only can + * be found in the _Scheduler_queue_XXX functions. + * + */ + +/* Passing the Scheduler_Control* to these functions allows for multiple + * scheduler's to exist simultaneously, which could be useful on an SMP + * system. Then remote Schedulers may be accessible. How to protect such + * accesses remains an open problem. + */ + +/** @brief _Scheduler_Schedule + * + * This kernel routine implements the scheduling decision logic for + * the scheduler. It does NOT dispatch. + */ +RTEMS_INLINE_ROUTINE void _Scheduler_Schedule( void ) +{ + _Scheduler.Operations.schedule(); +} + +/** @brief _Scheduler_Yield + * + * This routine is invoked when a thread wishes to voluntarily + * transfer control of the processor to another thread. This routine + * always operates on the scheduler that 'owns' the currently executing + * thread. + */ +RTEMS_INLINE_ROUTINE void _Scheduler_Yield( void ) +{ + _Scheduler.Operations.yield(); +} + +/** @brief _Scheduler_Block + * + * This routine removes @a the_thread from the scheduling decision for + * the scheduler. The primary task is to remove the thread from the + * ready queue. It performs any necessary schedulering operations + * including the selection of a new heir thread. + */ +RTEMS_INLINE_ROUTINE void _Scheduler_Block( + Thread_Control *the_thread +) +{ + _Scheduler.Operations.block( the_thread ); +} + +/** @brief _Scheduler_Unblock + * + * This routine adds @a the_thread to the scheduling decision for + * the scheduler. The primary task is to add the thread to the + * ready queue per the schedulering policy and update any appropriate + * scheduling variables, for example the heir thread. + */ +RTEMS_INLINE_ROUTINE void _Scheduler_Unblock( + Thread_Control *the_thread +) +{ + _Scheduler.Operations.unblock( the_thread ); +} + +/** @brief _Scheduler_Allocate + * + * This routine allocates @a the_thread->scheduler + */ +RTEMS_INLINE_ROUTINE void* _Scheduler_Allocate( + Thread_Control *the_thread +) +{ + return _Scheduler.Operations.allocate( the_thread ); +} + +/** @brief _Scheduler_Free + * + * This routine frees @a the_thread->scheduler + */ +RTEMS_INLINE_ROUTINE void _Scheduler_Free( + Thread_Control *the_thread +) +{ + return _Scheduler.Operations.free( the_thread ); +} + +/** @brief _Scheduler_Update + * + * This routine updates @a the_thread->scheduler + */ +RTEMS_INLINE_ROUTINE void _Scheduler_Update( + Thread_Control *the_thread +) +{ + _Scheduler.Operations.update( the_thread ); +} + +/** @brief _Scheduler_Enqueue + * + * This routine enqueue @a the_thread->scheduler + */ +RTEMS_INLINE_ROUTINE void _Scheduler_Enqueue( + Thread_Control *the_thread +) +{ + _Scheduler.Operations.enqueue( the_thread ); +} + +/** @brief _Scheduler_Enqueue_first + * + * This routine enqueue_first @a the_thread->scheduler + */ +RTEMS_INLINE_ROUTINE void _Scheduler_Enqueue_first( + Thread_Control *the_thread +) +{ + _Scheduler.Operations.enqueue_first( the_thread ); +} + +/** @brief _Scheduler_Extract + * + * This routine extract @a the_thread->scheduler + */ +RTEMS_INLINE_ROUTINE void _Scheduler_Extract( + Thread_Control *the_thread +) +{ + _Scheduler.Operations.extract( the_thread ); +} + +/**@}*/ + +#endif +/* end of include file */ |