37#ifndef _RTEMS_CONFDEFS_SCHEDULER_H
38#define _RTEMS_CONFDEFS_SCHEDULER_H
40#ifndef __CONFIGURATION_TEMPLATE_h
41#error "Do not include this file directly, use <rtems/confdefs.h> instead"
48#if !defined(CONFIGURE_SCHEDULER_CBS) \
49 && !defined(CONFIGURE_SCHEDULER_EDF) \
50 && !defined(CONFIGURE_SCHEDULER_EDF_SMP) \
51 && !defined(CONFIGURE_SCHEDULER_PRIORITY) \
52 && !defined(CONFIGURE_SCHEDULER_PRIORITY_AFFINITY_SMP) \
53 && !defined(CONFIGURE_SCHEDULER_PRIORITY_SMP) \
54 && !defined(CONFIGURE_SCHEDULER_SIMPLE) \
55 && !defined(CONFIGURE_SCHEDULER_SIMPLE_SMP) \
56 && !defined(CONFIGURE_SCHEDULER_STRONG_APA) \
57 && !defined(CONFIGURE_SCHEDULER_USER)
58 #if defined(RTEMS_SMP) && _CONFIGURE_MAXIMUM_PROCESSORS > 1
59 #define CONFIGURE_SCHEDULER_EDF_SMP
61 #define CONFIGURE_SCHEDULER_PRIORITY
65#include <rtems/scheduler.h>
71#ifndef CONFIGURE_MAXIMUM_PRIORITY
72 #define CONFIGURE_MAXIMUM_PRIORITY PRIORITY_DEFAULT_MAXIMUM
75#if !defined(CONFIGURE_SCHEDULER_EDF) && \
76 !defined(CONFIGURE_SCHEDULER_EDF_SMP) && \
77 !defined(CONFIGURE_SCHEDULER_CBS)
79#if CONFIGURE_MAXIMUM_PRIORITY != 3 \
80 && CONFIGURE_MAXIMUM_PRIORITY != 7 \
81 && CONFIGURE_MAXIMUM_PRIORITY != 15 \
82 && CONFIGURE_MAXIMUM_PRIORITY != 31 \
83 && CONFIGURE_MAXIMUM_PRIORITY != 63 \
84 && CONFIGURE_MAXIMUM_PRIORITY != 127 \
85 && CONFIGURE_MAXIMUM_PRIORITY != 255
86 #error "CONFIGURE_MAXIMUM_PRIORITY must be one of 3, 7, 15, 31, 63, 127, and 255"
89#if CONFIGURE_MAXIMUM_PRIORITY > PRIORITY_DEFAULT_MAXIMUM
90 #error "CONFIGURE_SCHEDULER_PRIORITY must be less than or equal to the architecture defined maximum priority"
95#ifdef CONFIGURE_SCHEDULER_PRIORITY
96 #ifndef CONFIGURE_SCHEDULER_NAME
97 #define CONFIGURE_SCHEDULER_NAME rtems_build_name( 'U', 'P', 'D', ' ' )
100 #ifndef CONFIGURE_SCHEDULER_TABLE_ENTRIES
101 #define CONFIGURE_SCHEDULER \
102 RTEMS_SCHEDULER_PRIORITY( \
104 CONFIGURE_MAXIMUM_PRIORITY + 1 \
107 #define CONFIGURE_SCHEDULER_TABLE_ENTRIES \
108 RTEMS_SCHEDULER_TABLE_PRIORITY( dflt, CONFIGURE_SCHEDULER_NAME )
112#ifdef CONFIGURE_SCHEDULER_PRIORITY_SMP
113 #ifndef CONFIGURE_SCHEDULER_NAME
114 #define CONFIGURE_SCHEDULER_NAME rtems_build_name( 'M', 'P', 'D', ' ' )
117 #ifndef CONFIGURE_SCHEDULER_TABLE_ENTRIES
118 #define CONFIGURE_SCHEDULER \
119 RTEMS_SCHEDULER_PRIORITY_SMP( \
121 CONFIGURE_MAXIMUM_PRIORITY + 1 \
124 #define CONFIGURE_SCHEDULER_TABLE_ENTRIES \
125 RTEMS_SCHEDULER_TABLE_PRIORITY_SMP( dflt, CONFIGURE_SCHEDULER_NAME )
129#ifdef CONFIGURE_SCHEDULER_PRIORITY_AFFINITY_SMP
130 #ifndef CONFIGURE_SCHEDULER_NAME
131 #define CONFIGURE_SCHEDULER_NAME rtems_build_name( 'M', 'P', 'A', ' ' )
134 #ifndef CONFIGURE_SCHEDULER_TABLE_ENTRIES
135 #define CONFIGURE_SCHEDULER \
136 RTEMS_SCHEDULER_PRIORITY_AFFINITY_SMP( \
138 CONFIGURE_MAXIMUM_PRIORITY + 1 \
141 #define CONFIGURE_SCHEDULER_TABLE_ENTRIES \
142 RTEMS_SCHEDULER_TABLE_PRIORITY_AFFINITY_SMP( \
144 CONFIGURE_SCHEDULER_NAME \
149#ifdef CONFIGURE_SCHEDULER_STRONG_APA
150 #ifndef CONFIGURE_SCHEDULER_NAME
151 #define CONFIGURE_SCHEDULER_NAME rtems_build_name( 'M', 'A', 'P', 'A' )
154 #ifndef CONFIGURE_SCHEDULER_TABLE_ENTRIES
155 #define CONFIGURE_SCHEDULER \
156 RTEMS_SCHEDULER_STRONG_APA( \
158 CONFIGURE_MAXIMUM_PRIORITY + 1 \
161 #define CONFIGURE_SCHEDULER_TABLE_ENTRIES \
162 RTEMS_SCHEDULER_TABLE_STRONG_APA( dflt, CONFIGURE_SCHEDULER_NAME )
166#ifdef CONFIGURE_SCHEDULER_SIMPLE
167 #ifndef CONFIGURE_SCHEDULER_NAME
168 #define CONFIGURE_SCHEDULER_NAME rtems_build_name( 'U', 'P', 'S', ' ' )
171 #ifndef CONFIGURE_SCHEDULER_TABLE_ENTRIES
172 #define CONFIGURE_SCHEDULER RTEMS_SCHEDULER_SIMPLE( dflt )
174 #define CONFIGURE_SCHEDULER_TABLE_ENTRIES \
175 RTEMS_SCHEDULER_TABLE_SIMPLE( dflt, CONFIGURE_SCHEDULER_NAME )
179#ifdef CONFIGURE_SCHEDULER_SIMPLE_SMP
180 #ifndef CONFIGURE_SCHEDULER_NAME
181 #define CONFIGURE_SCHEDULER_NAME rtems_build_name( 'M', 'P', 'S', ' ' )
184 #ifndef CONFIGURE_SCHEDULER_TABLE_ENTRIES
185 #define CONFIGURE_SCHEDULER \
186 RTEMS_SCHEDULER_SIMPLE_SMP( dflt )
188 #define CONFIGURE_SCHEDULER_TABLE_ENTRIES \
189 RTEMS_SCHEDULER_TABLE_SIMPLE_SMP( dflt, CONFIGURE_SCHEDULER_NAME )
193#ifdef CONFIGURE_SCHEDULER_EDF
194 #ifndef CONFIGURE_SCHEDULER_NAME
195 #define CONFIGURE_SCHEDULER_NAME rtems_build_name( 'U', 'E', 'D', 'F' )
198 #ifndef CONFIGURE_SCHEDULER_TABLE_ENTRIES
199 #define CONFIGURE_SCHEDULER RTEMS_SCHEDULER_EDF( dflt )
201 #define CONFIGURE_SCHEDULER_TABLE_ENTRIES \
202 RTEMS_SCHEDULER_TABLE_EDF( dflt, CONFIGURE_SCHEDULER_NAME )
206#ifdef CONFIGURE_SCHEDULER_EDF_SMP
207 #ifndef CONFIGURE_SCHEDULER_NAME
208 #define CONFIGURE_SCHEDULER_NAME rtems_build_name( 'M', 'E', 'D', 'F' )
211 #ifndef CONFIGURE_SCHEDULER_TABLE_ENTRIES
212 #define CONFIGURE_SCHEDULER RTEMS_SCHEDULER_EDF_SMP( dflt )
214 #define CONFIGURE_SCHEDULER_TABLE_ENTRIES \
215 RTEMS_SCHEDULER_TABLE_EDF_SMP( dflt, CONFIGURE_SCHEDULER_NAME )
219#ifdef CONFIGURE_SCHEDULER_CBS
220 #ifndef CONFIGURE_SCHEDULER_NAME
221 #define CONFIGURE_SCHEDULER_NAME rtems_build_name( 'U', 'C', 'B', 'S' )
224 #ifndef CONFIGURE_SCHEDULER_TABLE_ENTRIES
225 #define CONFIGURE_SCHEDULER RTEMS_SCHEDULER_CBS( dflt )
227 #define CONFIGURE_SCHEDULER_TABLE_ENTRIES \
228 RTEMS_SCHEDULER_TABLE_CBS( dflt, CONFIGURE_SCHEDULER_NAME )
231 #ifndef CONFIGURE_CBS_MAXIMUM_SERVERS
232 #define CONFIGURE_CBS_MAXIMUM_SERVERS CONFIGURE_MAXIMUM_TASKS
242#ifdef CONFIGURE_SCHEDULER
250 #pragma GCC diagnostic push
251 #pragma GCC diagnostic ignored "-Wpedantic"
253 #pragma GCC diagnostic pop
260#define _CONFIGURE_SCHEDULER_COUNT RTEMS_ARRAY_SIZE( _Scheduler_Table )
266const Scheduler_Assignment _Scheduler_Initial_assignments[] = {
267 #ifdef CONFIGURE_SCHEDULER_ASSIGNMENTS
270 #define _CONFIGURE_SCHEDULER_ASSIGN \
271 RTEMS_SCHEDULER_ASSIGN( \
273 RTEMS_SCHEDULER_ASSIGN_PROCESSOR_OPTIONAL \
275 _CONFIGURE_SCHEDULER_ASSIGN
276 #if _CONFIGURE_MAXIMUM_PROCESSORS >= 2
277 , _CONFIGURE_SCHEDULER_ASSIGN
279 #if _CONFIGURE_MAXIMUM_PROCESSORS >= 3
280 , _CONFIGURE_SCHEDULER_ASSIGN
282 #if _CONFIGURE_MAXIMUM_PROCESSORS >= 4
283 , _CONFIGURE_SCHEDULER_ASSIGN
285 #if _CONFIGURE_MAXIMUM_PROCESSORS >= 5
286 , _CONFIGURE_SCHEDULER_ASSIGN
288 #if _CONFIGURE_MAXIMUM_PROCESSORS >= 6
289 , _CONFIGURE_SCHEDULER_ASSIGN
291 #if _CONFIGURE_MAXIMUM_PROCESSORS >= 7
292 , _CONFIGURE_SCHEDULER_ASSIGN
294 #if _CONFIGURE_MAXIMUM_PROCESSORS >= 8
295 , _CONFIGURE_SCHEDULER_ASSIGN
297 #if _CONFIGURE_MAXIMUM_PROCESSORS >= 9
298 , _CONFIGURE_SCHEDULER_ASSIGN
300 #if _CONFIGURE_MAXIMUM_PROCESSORS >= 10
301 , _CONFIGURE_SCHEDULER_ASSIGN
303 #if _CONFIGURE_MAXIMUM_PROCESSORS >= 11
304 , _CONFIGURE_SCHEDULER_ASSIGN
306 #if _CONFIGURE_MAXIMUM_PROCESSORS >= 12
307 , _CONFIGURE_SCHEDULER_ASSIGN
309 #if _CONFIGURE_MAXIMUM_PROCESSORS >= 13
310 , _CONFIGURE_SCHEDULER_ASSIGN
312 #if _CONFIGURE_MAXIMUM_PROCESSORS >= 14
313 , _CONFIGURE_SCHEDULER_ASSIGN
315 #if _CONFIGURE_MAXIMUM_PROCESSORS >= 15
316 , _CONFIGURE_SCHEDULER_ASSIGN
318 #if _CONFIGURE_MAXIMUM_PROCESSORS >= 16
319 , _CONFIGURE_SCHEDULER_ASSIGN
321 #if _CONFIGURE_MAXIMUM_PROCESSORS >= 17
322 , _CONFIGURE_SCHEDULER_ASSIGN
324 #if _CONFIGURE_MAXIMUM_PROCESSORS >= 18
325 , _CONFIGURE_SCHEDULER_ASSIGN
327 #if _CONFIGURE_MAXIMUM_PROCESSORS >= 19
328 , _CONFIGURE_SCHEDULER_ASSIGN
330 #if _CONFIGURE_MAXIMUM_PROCESSORS >= 20
331 , _CONFIGURE_SCHEDULER_ASSIGN
333 #if _CONFIGURE_MAXIMUM_PROCESSORS >= 21
334 , _CONFIGURE_SCHEDULER_ASSIGN
336 #if _CONFIGURE_MAXIMUM_PROCESSORS >= 22
337 , _CONFIGURE_SCHEDULER_ASSIGN
339 #if _CONFIGURE_MAXIMUM_PROCESSORS >= 23
340 , _CONFIGURE_SCHEDULER_ASSIGN
342 #if _CONFIGURE_MAXIMUM_PROCESSORS >= 24
343 , _CONFIGURE_SCHEDULER_ASSIGN
345 #if _CONFIGURE_MAXIMUM_PROCESSORS >= 25
346 , _CONFIGURE_SCHEDULER_ASSIGN
348 #if _CONFIGURE_MAXIMUM_PROCESSORS >= 26
349 , _CONFIGURE_SCHEDULER_ASSIGN
351 #if _CONFIGURE_MAXIMUM_PROCESSORS >= 27
352 , _CONFIGURE_SCHEDULER_ASSIGN
354 #if _CONFIGURE_MAXIMUM_PROCESSORS >= 28
355 , _CONFIGURE_SCHEDULER_ASSIGN
357 #if _CONFIGURE_MAXIMUM_PROCESSORS >= 29
358 , _CONFIGURE_SCHEDULER_ASSIGN
360 #if _CONFIGURE_MAXIMUM_PROCESSORS >= 30
361 , _CONFIGURE_SCHEDULER_ASSIGN
363 #if _CONFIGURE_MAXIMUM_PROCESSORS >= 31
364 , _CONFIGURE_SCHEDULER_ASSIGN
366 #if _CONFIGURE_MAXIMUM_PROCESSORS >= 32
367 , _CONFIGURE_SCHEDULER_ASSIGN
369 #undef _CONFIGURE_SCHEDULER_ASSIGN
374 _CONFIGURE_MAXIMUM_PROCESSORS
376 _Scheduler_Initial_assignments
This header file evaluates configuration options related to the per-CPU configuration.
#define RTEMS_STATIC_ASSERT(_cond, _msg)
It is defined if a static analysis run is performed.
Definition: basedefs.h:866
#define RTEMS_ARRAY_SIZE(_array)
Gets the element count of the array.
Definition: basedefs.h:244
#define CONFIGURE_SCHEDULER_TABLE_ENTRIES
This configuration option is an initializer define.
Definition: appl-config.h:5016
#define CONFIGURE_SCHEDULER_ASSIGNMENTS
This configuration option is an initializer define.
Definition: appl-config.h:4607
#define CONFIGURE_CBS_MAXIMUM_SERVERS
This configuration option is an integer define.
Definition: appl-config.h:4495
Scheduler_CBS_Server _Scheduler_CBS_Server_list[]
const uint32_t _Scheduler_CBS_Maximum_servers
#define _Scheduler_Count
This constant contains the count of configured schedulers.
Definition: scheduler.h:395
const Scheduler_Control _Scheduler_Table[]
This table contains the configured schedulers.
Definition: schedulercbs.h:131
Scheduler control.
Definition: scheduler.h:337