diff options
Diffstat (limited to 'cpukit/score/include/rtems/score/schedulerpriorityimpl.h')
-rw-r--r-- | cpukit/score/include/rtems/score/schedulerpriorityimpl.h | 241 |
1 files changed, 0 insertions, 241 deletions
diff --git a/cpukit/score/include/rtems/score/schedulerpriorityimpl.h b/cpukit/score/include/rtems/score/schedulerpriorityimpl.h deleted file mode 100644 index 354065fac4..0000000000 --- a/cpukit/score/include/rtems/score/schedulerpriorityimpl.h +++ /dev/null @@ -1,241 +0,0 @@ -/** - * @file - * - * @brief Inlined Routines Associated with the Manipulation of the - * Priority-Based Scheduling Structures - * - * This inline file contains all of the inlined routines associated with - * the manipulation of the priority-based scheduling structures. - */ - -/* - * 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.org/license/LICENSE. - */ - -#ifndef _RTEMS_SCORE_SCHEDULERPRIORITYIMPL_H -#define _RTEMS_SCORE_SCHEDULERPRIORITYIMPL_H - -#include <rtems/score/schedulerpriority.h> -#include <rtems/score/chainimpl.h> -#include <rtems/score/prioritybitmapimpl.h> -#include <rtems/score/schedulerimpl.h> -#include <rtems/score/thread.h> - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * @addtogroup ScoreSchedulerDPS - */ -/**@{**/ - -RTEMS_INLINE_ROUTINE Scheduler_priority_Context * - _Scheduler_priority_Get_context( const Scheduler_Control *scheduler ) -{ - return (Scheduler_priority_Context *) _Scheduler_Get_context( scheduler ); -} - -RTEMS_INLINE_ROUTINE Scheduler_priority_Node *_Scheduler_priority_Thread_get_node( - Thread_Control *the_thread -) -{ - return (Scheduler_priority_Node *) _Thread_Scheduler_get_home_node( the_thread ); -} - -RTEMS_INLINE_ROUTINE Scheduler_priority_Node *_Scheduler_priority_Node_downcast( - Scheduler_Node *node -) -{ - return (Scheduler_priority_Node *) node; -} - -/** - * @brief Ready queue initialization. - * - * This routine initializes @a ready_queues for priority-based scheduling. - */ -RTEMS_INLINE_ROUTINE void _Scheduler_priority_Ready_queue_initialize( - Chain_Control *ready_queues, - Priority_Control maximum_priority -) -{ - size_t index; - - for ( index = 0 ; index <= (size_t) maximum_priority ; ++index ) { - _Chain_Initialize_empty( &ready_queues[ index ] ); - } -} - -/** - * @brief Enqueues a node on the specified ready queue. - * - * The node is placed as the last element of its priority group. - * - * @param[in] node The node to enqueue. - * @param[in] ready_queue The ready queue. - * @param[in] bit_map The priority bit map of the scheduler instance. - */ -RTEMS_INLINE_ROUTINE void _Scheduler_priority_Ready_queue_enqueue( - Chain_Node *node, - Scheduler_priority_Ready_queue *ready_queue, - Priority_bit_map_Control *bit_map -) -{ - Chain_Control *ready_chain = ready_queue->ready_chain; - - _Chain_Append_unprotected( ready_chain, node ); - _Priority_bit_map_Add( bit_map, &ready_queue->Priority_map ); -} - -/** - * @brief Enqueues a node on the specified ready queue as first. - * - * The node is placed as the first element of its priority group. - * - * @param[in] node The node to enqueue as first. - * @param[in] ready_queue The ready queue. - * @param[in] bit_map The priority bit map of the scheduler instance. - */ -RTEMS_INLINE_ROUTINE void _Scheduler_priority_Ready_queue_enqueue_first( - Chain_Node *node, - Scheduler_priority_Ready_queue *ready_queue, - Priority_bit_map_Control *bit_map -) -{ - Chain_Control *ready_chain = ready_queue->ready_chain; - - _Chain_Prepend_unprotected( ready_chain, node ); - _Priority_bit_map_Add( bit_map, &ready_queue->Priority_map ); -} - -/** - * @brief Extracts a node from the specified ready queue. - * - * @param[in] node The node to extract. - * @param[in] ready_queue The ready queue. - * @param[in] bit_map The priority bit map of the scheduler instance. - */ -RTEMS_INLINE_ROUTINE void _Scheduler_priority_Ready_queue_extract( - Chain_Node *node, - Scheduler_priority_Ready_queue *ready_queue, - Priority_bit_map_Control *bit_map -) -{ - Chain_Control *ready_chain = ready_queue->ready_chain; - - if ( _Chain_Has_only_one_node( ready_chain ) ) { - _Chain_Initialize_empty( ready_chain ); - _Chain_Initialize_node( node ); - _Priority_bit_map_Remove( bit_map, &ready_queue->Priority_map ); - } else { - _Chain_Extract_unprotected( node ); - } -} - -RTEMS_INLINE_ROUTINE void _Scheduler_priority_Extract_body( - const Scheduler_Control *scheduler, - Thread_Control *the_thread, - Scheduler_Node *node -) -{ - Scheduler_priority_Context *context; - Scheduler_priority_Node *the_node; - - context = _Scheduler_priority_Get_context( scheduler ); - the_node = _Scheduler_priority_Node_downcast( node ); - - _Scheduler_priority_Ready_queue_extract( - &the_thread->Object.Node, - &the_node->Ready_queue, - &context->Bit_map - ); -} - -/** - * @brief Return a pointer to the first node. - * - * This routines returns a pointer to the first node on @a ready_queues. - * - * @param[in] bit_map The priority bit map of the scheduler instance. - * @param[in] ready_queues The ready queues of the scheduler instance. - * - * @return This method returns the first node. - */ -RTEMS_INLINE_ROUTINE Chain_Node *_Scheduler_priority_Ready_queue_first( - Priority_bit_map_Control *bit_map, - Chain_Control *ready_queues -) -{ - Priority_Control index = _Priority_bit_map_Get_highest( bit_map ); - Chain_Node *first = _Chain_First( &ready_queues[ index ] ); - - _Assert( first != _Chain_Tail( &ready_queues[ index ] ) ); - - return first; -} - -/** - * @brief Scheduling decision logic. - * - * This kernel routine implements scheduling decision logic - * for priority-based scheduling. - */ -RTEMS_INLINE_ROUTINE void _Scheduler_priority_Schedule_body( - const Scheduler_Control *scheduler, - Thread_Control *the_thread, - bool force_dispatch -) -{ - Scheduler_priority_Context *context = - _Scheduler_priority_Get_context( scheduler ); - Thread_Control *heir = (Thread_Control *) - _Scheduler_priority_Ready_queue_first( - &context->Bit_map, - &context->Ready[ 0 ] - ); - - ( void ) the_thread; - - _Scheduler_Update_heir( heir, force_dispatch ); -} - -/** - * @brief Updates the specified ready queue data according to the new priority - * value. - * - * @param[in] ready_queue The ready queue. - * @param[in] new_priority The new priority. - * @param[in] bit_map The priority bit map of the scheduler instance. - * @param[in] ready_queues The ready queues of the scheduler instance. - */ -RTEMS_INLINE_ROUTINE void _Scheduler_priority_Ready_queue_update( - Scheduler_priority_Ready_queue *ready_queue, - unsigned int new_priority, - Priority_bit_map_Control *bit_map, - Chain_Control *ready_queues -) -{ - ready_queue->current_priority = new_priority; - ready_queue->ready_chain = &ready_queues[ new_priority ]; - - _Priority_bit_map_Initialize_information( - bit_map, - &ready_queue->Priority_map, - new_priority - ); -} - -/** @} */ - -#ifdef __cplusplus -} -#endif - -#endif -/* end of include file */ |