RTEMS CPU Kit with SuperCore  4.11.3
scheduler.h
Go to the documentation of this file.
1 
7 /*
8  * Copyright (c) 2014 embedded brains GmbH. All rights reserved.
9  *
10  * embedded brains GmbH
11  * Dornierstr. 4
12  * 82178 Puchheim
13  * Germany
14  * <rtems@embedded-brains.de>
15  *
16  * The license and distribution terms for this file may be
17  * found in the file LICENSE in this distribution or at
18  * http://www.rtems.org/license/LICENSE.
19  */
20 
21 #ifndef _RTEMS_SAPI_SCHEDULER_H
22 #define _RTEMS_SAPI_SCHEDULER_H
23 
24 #include <rtems/score/scheduler.h>
25 
26 #define RTEMS_SCHEDULER_CONTEXT_NAME( name ) \
27  _Configuration_Scheduler_ ## name
28 
29 #if defined(RTEMS_SMP)
30  /* This object doesn't exist and indicates a configuration error */
31  extern const Scheduler_Control RTEMS_SCHEDULER_INVALID_INDEX;
32 
33  #define RTEMS_SCHEDULER_ASSIGN_DEFAULT \
34  SCHEDULER_ASSIGN_DEFAULT
35 
36  #define RTEMS_SCHEDULER_ASSIGN_PROCESSOR_OPTIONAL \
37  SCHEDULER_ASSIGN_PROCESSOR_OPTIONAL
38 
39  #define RTEMS_SCHEDULER_ASSIGN_PROCESSOR_MANDATORY \
40  SCHEDULER_ASSIGN_PROCESSOR_MANDATORY
41 
42  #define RTEMS_SCHEDULER_ASSIGN( index, attr ) \
43  { \
44  ( index ) < RTEMS_ARRAY_SIZE( _Scheduler_Table ) ? \
45  &_Scheduler_Table[ ( index ) ] : &RTEMS_SCHEDULER_INVALID_INDEX, \
46  ( attr ) \
47  }
48 
49  #define RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER { NULL, 0 }
50 #endif
51 
52 /*
53  * This file should be only included in the context of <rtems/confdefs.h>.
54  * Define the scheduler configuration macros only in case the corresponding
55  * configure symbol is defined. This is necessary to prevent invalid workspace
56  * size estimates since we have to account for the per-thread scheduler
57  * information.
58  */
59 
60 #ifdef CONFIGURE_SCHEDULER_CBS
62 
63  #define RTEMS_SCHEDULER_CONTEXT_CBS_NAME( name ) \
64  RTEMS_SCHEDULER_CONTEXT_NAME( CBS_ ## name )
65 
66  #define RTEMS_SCHEDULER_CONTEXT_CBS( name ) \
67  static Scheduler_EDF_Context RTEMS_SCHEDULER_CONTEXT_CBS_NAME( name )
68 
69  #define RTEMS_SCHEDULER_CONTROL_CBS( name, obj_name ) \
70  { \
71  &RTEMS_SCHEDULER_CONTEXT_CBS_NAME( name ).Base, \
72  SCHEDULER_CBS_ENTRY_POINTS, \
73  ( obj_name ) \
74  }
75 #endif
76 
77 #ifdef CONFIGURE_SCHEDULER_EDF
79 
80  #define RTEMS_SCHEDULER_CONTEXT_EDF_NAME( name ) \
81  RTEMS_SCHEDULER_CONTEXT_NAME( EDF_ ## name )
82 
83  #define RTEMS_SCHEDULER_CONTEXT_EDF( name ) \
84  static Scheduler_EDF_Context RTEMS_SCHEDULER_CONTEXT_EDF_NAME( name )
85 
86  #define RTEMS_SCHEDULER_CONTROL_EDF( name, obj_name ) \
87  { \
88  &RTEMS_SCHEDULER_CONTEXT_EDF_NAME( name ).Base, \
89  SCHEDULER_EDF_ENTRY_POINTS, \
90  ( obj_name ) \
91  }
92 #endif
93 
94 #ifdef CONFIGURE_SCHEDULER_PRIORITY
96 
97  #define RTEMS_SCHEDULER_CONTEXT_PRIORITY_NAME( name ) \
98  RTEMS_SCHEDULER_CONTEXT_NAME( priority_ ## name )
99 
100  #define RTEMS_SCHEDULER_CONTEXT_PRIORITY( name, prio_count ) \
101  static struct { \
102  Scheduler_priority_Context Base; \
103  Chain_Control Ready[ ( prio_count ) ]; \
104  } RTEMS_SCHEDULER_CONTEXT_PRIORITY_NAME( name )
105 
106  #define RTEMS_SCHEDULER_CONTROL_PRIORITY( name, obj_name ) \
107  { \
108  &RTEMS_SCHEDULER_CONTEXT_PRIORITY_NAME( name ).Base.Base, \
109  SCHEDULER_PRIORITY_ENTRY_POINTS, \
110  ( obj_name ) \
111  }
112 #endif
113 
114 #ifdef CONFIGURE_SCHEDULER_PRIORITY_AFFINITY_SMP
116 
117  #define RTEMS_SCHEDULER_CONTEXT_PRIORITY_AFFINITY_SMP_NAME( name ) \
118  RTEMS_SCHEDULER_CONTEXT_NAME( priority_affinity_SMP_ ## name )
119 
120  #define RTEMS_SCHEDULER_CONTEXT_PRIORITY_AFFINITY_SMP( name, prio_count ) \
121  static struct { \
122  Scheduler_priority_SMP_Context Base; \
123  Chain_Control Ready[ ( prio_count ) ]; \
124  } RTEMS_SCHEDULER_CONTEXT_PRIORITY_AFFINITY_SMP_NAME( name )
125 
126  #define RTEMS_SCHEDULER_CONTROL_PRIORITY_AFFINITY_SMP( name, obj_name ) \
127  { \
128  &RTEMS_SCHEDULER_CONTEXT_PRIORITY_AFFINITY_SMP_NAME( name ).Base.Base.Base, \
129  SCHEDULER_PRIORITY_AFFINITY_SMP_ENTRY_POINTS, \
130  ( obj_name ) \
131  }
132 #endif
133 
134 #ifdef CONFIGURE_SCHEDULER_PRIORITY_SMP
136 
137  #define RTEMS_SCHEDULER_CONTEXT_PRIORITY_SMP_NAME( name ) \
138  RTEMS_SCHEDULER_CONTEXT_NAME( priority_SMP_ ## name )
139 
140  #define RTEMS_SCHEDULER_CONTEXT_PRIORITY_SMP( name, prio_count ) \
141  static struct { \
142  Scheduler_priority_SMP_Context Base; \
143  Chain_Control Ready[ ( prio_count ) ]; \
144  } RTEMS_SCHEDULER_CONTEXT_PRIORITY_SMP_NAME( name )
145 
146  #define RTEMS_SCHEDULER_CONTROL_PRIORITY_SMP( name, obj_name ) \
147  { \
148  &RTEMS_SCHEDULER_CONTEXT_PRIORITY_SMP_NAME( name ).Base.Base.Base, \
149  SCHEDULER_PRIORITY_SMP_ENTRY_POINTS, \
150  ( obj_name ) \
151  }
152 #endif
153 
154 #ifdef CONFIGURE_SCHEDULER_SIMPLE
156 
157  #define RTEMS_SCHEDULER_CONTEXT_SIMPLE_NAME( name ) \
158  RTEMS_SCHEDULER_CONTEXT_NAME( simple_ ## name )
159 
160  #define RTEMS_SCHEDULER_CONTEXT_SIMPLE( name ) \
161  static Scheduler_simple_Context \
162  RTEMS_SCHEDULER_CONTEXT_SIMPLE_NAME( name )
163 
164  #define RTEMS_SCHEDULER_CONTROL_SIMPLE( name, obj_name ) \
165  { \
166  &RTEMS_SCHEDULER_CONTEXT_SIMPLE_NAME( name ).Base, \
167  SCHEDULER_SIMPLE_ENTRY_POINTS, \
168  ( obj_name ) \
169  }
170 #endif
171 
172 #ifdef CONFIGURE_SCHEDULER_SIMPLE_SMP
174 
175  #define RTEMS_SCHEDULER_CONTEXT_SIMPLE_SMP_NAME( name ) \
176  RTEMS_SCHEDULER_CONTEXT_NAME( simple_SMP_ ## name )
177 
178  #define RTEMS_SCHEDULER_CONTEXT_SIMPLE_SMP( name ) \
179  static Scheduler_simple_SMP_Context \
180  RTEMS_SCHEDULER_CONTEXT_SIMPLE_SMP_NAME( name )
181 
182  #define RTEMS_SCHEDULER_CONTROL_SIMPLE_SMP( name, obj_name ) \
183  { \
184  &RTEMS_SCHEDULER_CONTEXT_SIMPLE_SMP_NAME( name ).Base.Base, \
185  SCHEDULER_SIMPLE_SMP_ENTRY_POINTS, \
186  ( obj_name ) \
187  }
188 #endif
189 
190 #endif /* _RTEMS_SAPI_SCHEDULER_H */
Scheduler control.
Definition: scheduler.h:192
Thread Manipulation with the Priority-Based Scheduler.
Data Related to the Manipulation of Threads for the EDF Scheduler.
Simple SMP Scheduler API.
Deterministic Priority SMP Scheduler API.
Manipulation of Threads Simple-Priority-Based Ready Queue.
Constants and Structures Associated with the Scheduler.
Deterministic Priority Affinity SMP Scheduler API.
Thread manipulation for the CBS scheduler.