RTEMS  5.0.0
schedulersimpleimpl.h
Go to the documentation of this file.
1 
11 /*
12  * Copyright (C) 2011 On-Line Applications Research Corporation (OAR).
13  *
14  * The license and distribution terms for this file may be
15  * found in the file LICENSE in this distribution or at
16  * http://www.rtems.org/license/LICENSE.
17  */
18 
19 #ifndef _RTEMS_SCORE_SCHEDULERSIMPLEIMPL_H
20 #define _RTEMS_SCORE_SCHEDULERSIMPLEIMPL_H
21 
23 #include <rtems/score/chainimpl.h>
25 
26 #ifdef __cplusplus
27 extern "C" {
28 #endif
29 
36  _Scheduler_simple_Get_context( const Scheduler_Control *scheduler )
37 {
38  return (Scheduler_simple_Context *) _Scheduler_Get_context( scheduler );
39 }
40 
41 RTEMS_INLINE_ROUTINE bool _Scheduler_simple_Priority_less_equal(
42  const void *to_insert,
43  const Chain_Node *next
44 )
45 {
46  const unsigned int *priority_to_insert;
47  const Thread_Control *thread_next;
48 
49  priority_to_insert = (const unsigned int *) to_insert;
50  thread_next = (const Thread_Control *) next;
51 
52  return *priority_to_insert <= _Thread_Get_priority( thread_next );
53 }
54 
55 RTEMS_INLINE_ROUTINE void _Scheduler_simple_Insert(
56  Chain_Control *chain,
57  Thread_Control *to_insert,
58  unsigned int insert_priority
59 )
60 {
62  chain,
63  &to_insert->Object.Node,
64  &insert_priority,
65  _Scheduler_simple_Priority_less_equal
66  );
67 }
68 
69 RTEMS_INLINE_ROUTINE void _Scheduler_simple_Extract(
70  const Scheduler_Control *scheduler,
71  Thread_Control *the_thread,
72  Scheduler_Node *node
73 )
74 {
75  (void) scheduler;
76  (void) node;
77 
78  _Chain_Extract_unprotected( &the_thread->Object.Node );
79 }
80 
81 RTEMS_INLINE_ROUTINE void _Scheduler_simple_Schedule_body(
82  const Scheduler_Control *scheduler,
83  Thread_Control *the_thread,
84  bool force_dispatch
85 )
86 {
88  _Scheduler_simple_Get_context( scheduler );
89  Thread_Control *heir = (Thread_Control *) _Chain_First( &context->Ready );
90 
91  ( void ) the_thread;
92 
93  _Scheduler_Update_heir( heir, force_dispatch );
94 }
95 
98 #ifdef __cplusplus
99 }
100 #endif
101 
102 #endif
103 /* end of include file */
Definition: chain.h:65
RTEMS_INLINE_ROUTINE void _Chain_Insert_ordered_unprotected(Chain_Control *the_chain, Chain_Node *to_insert, const void *left, Chain_Node_order order)
Inserts a node into the chain according to the order relation.
Definition: chainimpl.h:860
Chain_Control Ready
One ready queue for all ready threads.
Definition: schedulersimple.h:72
#define RTEMS_INLINE_ROUTINE
Definition: basedefs.h:65
Inlined Routines Associated with the Manipulation of the Scheduler.
Definition: chain.h:83
RTEMS_INLINE_ROUTINE Priority_Control _Thread_Get_priority(const Thread_Control *the_thread)
Returns the priority of the thread.
Definition: threadimpl.h:1140
RTEMS_INLINE_ROUTINE void _Chain_Extract_unprotected(Chain_Node *the_node)
Extract this node (unprotected).
Definition: chainimpl.h:557
Simple scheduler context.
Definition: schedulersimple.h:63
Manipulation of Threads Simple-Priority-Based Ready Queue.
RTEMS_INLINE_ROUTINE Chain_Node * _Chain_First(const Chain_Control *the_chain)
Return pointer to chain&#39;s first node.
Definition: chainimpl.h:257
Definition: thread.h:728
Chain_Node Node
Definition: objectdata.h:41
Objects_Control Object
Definition: thread.h:730
Chain Handler API.
unsigned context
Definition: tlb.h:108
Scheduler control.
Definition: scheduler.h:266
Scheduler node for per-thread data.
Definition: schedulernode.h:65