File indexing completed on 2025-05-11 08:24:12
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031
0032
0033
0034
0035
0036
0037 #ifndef _RTEMS_CONFDEFS_SCHEDULER_H
0038 #define _RTEMS_CONFDEFS_SCHEDULER_H
0039
0040 #ifndef __CONFIGURATION_TEMPLATE_h
0041 #error "Do not include this file directly, use <rtems/confdefs.h> instead"
0042 #endif
0043
0044 #ifdef CONFIGURE_INIT
0045
0046 #include <rtems/confdefs/percpu.h>
0047
0048 #if !defined(CONFIGURE_SCHEDULER_CBS) \
0049 && !defined(CONFIGURE_SCHEDULER_EDF) \
0050 && !defined(CONFIGURE_SCHEDULER_EDF_SMP) \
0051 && !defined(CONFIGURE_SCHEDULER_PRIORITY) \
0052 && !defined(CONFIGURE_SCHEDULER_PRIORITY_AFFINITY_SMP) \
0053 && !defined(CONFIGURE_SCHEDULER_PRIORITY_SMP) \
0054 && !defined(CONFIGURE_SCHEDULER_SIMPLE) \
0055 && !defined(CONFIGURE_SCHEDULER_SIMPLE_SMP) \
0056 && !defined(CONFIGURE_SCHEDULER_STRONG_APA) \
0057 && !defined(CONFIGURE_SCHEDULER_USER)
0058 #if defined(RTEMS_SMP) && _CONFIGURE_MAXIMUM_PROCESSORS > 1
0059 #define CONFIGURE_SCHEDULER_EDF_SMP
0060 #else
0061 #define CONFIGURE_SCHEDULER_PRIORITY
0062 #endif
0063 #endif
0064
0065 #include <rtems/scheduler.h>
0066
0067 #ifdef __cplusplus
0068 extern "C" {
0069 #endif
0070
0071 #ifndef CONFIGURE_MAXIMUM_PRIORITY
0072 #define CONFIGURE_MAXIMUM_PRIORITY PRIORITY_DEFAULT_MAXIMUM
0073 #endif
0074
0075 #if CONFIGURE_MAXIMUM_PRIORITY != 3 \
0076 && CONFIGURE_MAXIMUM_PRIORITY != 7 \
0077 && CONFIGURE_MAXIMUM_PRIORITY != 15 \
0078 && CONFIGURE_MAXIMUM_PRIORITY != 31 \
0079 && CONFIGURE_MAXIMUM_PRIORITY != 63 \
0080 && CONFIGURE_MAXIMUM_PRIORITY != 127 \
0081 && CONFIGURE_MAXIMUM_PRIORITY != 255
0082 #error "CONFIGURE_MAXIMUM_PRIORITY must be one of 3, 7, 15, 31, 63, 127, and 255"
0083 #endif
0084
0085 #if CONFIGURE_MAXIMUM_PRIORITY > PRIORITY_DEFAULT_MAXIMUM
0086 #error "CONFIGURE_SCHEDULER_PRIORITY must be less than or equal to the architecture defined maximum priority"
0087 #endif
0088
0089 #ifdef CONFIGURE_SCHEDULER_PRIORITY
0090 #ifndef CONFIGURE_SCHEDULER_NAME
0091 #define CONFIGURE_SCHEDULER_NAME rtems_build_name( 'U', 'P', 'D', ' ' )
0092 #endif
0093
0094 #ifndef CONFIGURE_SCHEDULER_TABLE_ENTRIES
0095 #define CONFIGURE_SCHEDULER \
0096 RTEMS_SCHEDULER_PRIORITY( \
0097 dflt, \
0098 CONFIGURE_MAXIMUM_PRIORITY + 1 \
0099 )
0100
0101 #define CONFIGURE_SCHEDULER_TABLE_ENTRIES \
0102 RTEMS_SCHEDULER_TABLE_PRIORITY( dflt, CONFIGURE_SCHEDULER_NAME )
0103 #endif
0104 #endif
0105
0106 #ifdef CONFIGURE_SCHEDULER_PRIORITY_SMP
0107 #ifndef CONFIGURE_SCHEDULER_NAME
0108 #define CONFIGURE_SCHEDULER_NAME rtems_build_name( 'M', 'P', 'D', ' ' )
0109 #endif
0110
0111 #ifndef CONFIGURE_SCHEDULER_TABLE_ENTRIES
0112 #define CONFIGURE_SCHEDULER \
0113 RTEMS_SCHEDULER_PRIORITY_SMP( \
0114 dflt, \
0115 CONFIGURE_MAXIMUM_PRIORITY + 1 \
0116 )
0117
0118 #define CONFIGURE_SCHEDULER_TABLE_ENTRIES \
0119 RTEMS_SCHEDULER_TABLE_PRIORITY_SMP( dflt, CONFIGURE_SCHEDULER_NAME )
0120 #endif
0121 #endif
0122
0123 #ifdef CONFIGURE_SCHEDULER_PRIORITY_AFFINITY_SMP
0124 #ifndef CONFIGURE_SCHEDULER_NAME
0125 #define CONFIGURE_SCHEDULER_NAME rtems_build_name( 'M', 'P', 'A', ' ' )
0126 #endif
0127
0128 #ifndef CONFIGURE_SCHEDULER_TABLE_ENTRIES
0129 #define CONFIGURE_SCHEDULER \
0130 RTEMS_SCHEDULER_PRIORITY_AFFINITY_SMP( \
0131 dflt, \
0132 CONFIGURE_MAXIMUM_PRIORITY + 1 \
0133 )
0134
0135 #define CONFIGURE_SCHEDULER_TABLE_ENTRIES \
0136 RTEMS_SCHEDULER_TABLE_PRIORITY_AFFINITY_SMP( \
0137 dflt, \
0138 CONFIGURE_SCHEDULER_NAME \
0139 )
0140 #endif
0141 #endif
0142
0143 #ifdef CONFIGURE_SCHEDULER_STRONG_APA
0144 #ifndef CONFIGURE_SCHEDULER_NAME
0145 #define CONFIGURE_SCHEDULER_NAME rtems_build_name( 'M', 'A', 'P', 'A' )
0146 #endif
0147
0148 #ifndef CONFIGURE_SCHEDULER_TABLE_ENTRIES
0149 #define CONFIGURE_SCHEDULER \
0150 RTEMS_SCHEDULER_STRONG_APA( \
0151 dflt, \
0152 CONFIGURE_MAXIMUM_PRIORITY + 1 \
0153 )
0154
0155 #define CONFIGURE_SCHEDULER_TABLE_ENTRIES \
0156 RTEMS_SCHEDULER_TABLE_STRONG_APA( dflt, CONFIGURE_SCHEDULER_NAME )
0157 #endif
0158 #endif
0159
0160 #ifdef CONFIGURE_SCHEDULER_SIMPLE
0161 #ifndef CONFIGURE_SCHEDULER_NAME
0162 #define CONFIGURE_SCHEDULER_NAME rtems_build_name( 'U', 'P', 'S', ' ' )
0163 #endif
0164
0165 #ifndef CONFIGURE_SCHEDULER_TABLE_ENTRIES
0166 #define CONFIGURE_SCHEDULER RTEMS_SCHEDULER_SIMPLE( dflt )
0167
0168 #define CONFIGURE_SCHEDULER_TABLE_ENTRIES \
0169 RTEMS_SCHEDULER_TABLE_SIMPLE( dflt, CONFIGURE_SCHEDULER_NAME )
0170 #endif
0171 #endif
0172
0173 #ifdef CONFIGURE_SCHEDULER_SIMPLE_SMP
0174 #ifndef CONFIGURE_SCHEDULER_NAME
0175 #define CONFIGURE_SCHEDULER_NAME rtems_build_name( 'M', 'P', 'S', ' ' )
0176 #endif
0177
0178 #ifndef CONFIGURE_SCHEDULER_TABLE_ENTRIES
0179 #define CONFIGURE_SCHEDULER \
0180 RTEMS_SCHEDULER_SIMPLE_SMP( dflt )
0181
0182 #define CONFIGURE_SCHEDULER_TABLE_ENTRIES \
0183 RTEMS_SCHEDULER_TABLE_SIMPLE_SMP( dflt, CONFIGURE_SCHEDULER_NAME )
0184 #endif
0185 #endif
0186
0187 #ifdef CONFIGURE_SCHEDULER_EDF
0188 #ifndef CONFIGURE_SCHEDULER_NAME
0189 #define CONFIGURE_SCHEDULER_NAME rtems_build_name( 'U', 'E', 'D', 'F' )
0190 #endif
0191
0192 #ifndef CONFIGURE_SCHEDULER_TABLE_ENTRIES
0193 #define CONFIGURE_SCHEDULER RTEMS_SCHEDULER_EDF( dflt )
0194
0195 #define CONFIGURE_SCHEDULER_TABLE_ENTRIES \
0196 RTEMS_SCHEDULER_TABLE_EDF( dflt, CONFIGURE_SCHEDULER_NAME )
0197 #endif
0198 #endif
0199
0200 #ifdef CONFIGURE_SCHEDULER_EDF_SMP
0201 #ifndef CONFIGURE_SCHEDULER_NAME
0202 #define CONFIGURE_SCHEDULER_NAME rtems_build_name( 'M', 'E', 'D', 'F' )
0203 #endif
0204
0205 #ifndef CONFIGURE_SCHEDULER_TABLE_ENTRIES
0206 #define CONFIGURE_SCHEDULER RTEMS_SCHEDULER_EDF_SMP( dflt )
0207
0208 #define CONFIGURE_SCHEDULER_TABLE_ENTRIES \
0209 RTEMS_SCHEDULER_TABLE_EDF_SMP( dflt, CONFIGURE_SCHEDULER_NAME )
0210 #endif
0211 #endif
0212
0213 #ifdef CONFIGURE_SCHEDULER_CBS
0214 #ifndef CONFIGURE_SCHEDULER_NAME
0215 #define CONFIGURE_SCHEDULER_NAME rtems_build_name( 'U', 'C', 'B', 'S' )
0216 #endif
0217
0218 #ifndef CONFIGURE_SCHEDULER_TABLE_ENTRIES
0219 #define CONFIGURE_SCHEDULER RTEMS_SCHEDULER_CBS( dflt )
0220
0221 #define CONFIGURE_SCHEDULER_TABLE_ENTRIES \
0222 RTEMS_SCHEDULER_TABLE_CBS( dflt, CONFIGURE_SCHEDULER_NAME )
0223 #endif
0224
0225 #ifndef CONFIGURE_CBS_MAXIMUM_SERVERS
0226 #define CONFIGURE_CBS_MAXIMUM_SERVERS CONFIGURE_MAXIMUM_TASKS
0227 #endif
0228
0229 const uint32_t _Scheduler_CBS_Maximum_servers =
0230 CONFIGURE_CBS_MAXIMUM_SERVERS;
0231
0232 Scheduler_CBS_Server
0233 _Scheduler_CBS_Server_list[ CONFIGURE_CBS_MAXIMUM_SERVERS ];
0234 #endif
0235
0236 #ifdef CONFIGURE_SCHEDULER
0237
0238
0239
0240
0241
0242
0243
0244 #pragma GCC diagnostic push
0245 #pragma GCC diagnostic ignored "-Wpedantic"
0246 CONFIGURE_SCHEDULER;
0247 #pragma GCC diagnostic pop
0248 #endif
0249
0250 const Scheduler_Control _Scheduler_Table[] = {
0251 CONFIGURE_SCHEDULER_TABLE_ENTRIES
0252 };
0253
0254 #define _CONFIGURE_SCHEDULER_COUNT RTEMS_ARRAY_SIZE( _Scheduler_Table )
0255
0256 #ifdef RTEMS_SMP
0257
0258 const size_t _Scheduler_Count = _CONFIGURE_SCHEDULER_COUNT;
0259
0260 const Scheduler_Assignment _Scheduler_Initial_assignments[] = {
0261 #ifdef CONFIGURE_SCHEDULER_ASSIGNMENTS
0262 CONFIGURE_SCHEDULER_ASSIGNMENTS
0263 #else
0264 #define _CONFIGURE_SCHEDULER_ASSIGN \
0265 RTEMS_SCHEDULER_ASSIGN( \
0266 0, \
0267 RTEMS_SCHEDULER_ASSIGN_PROCESSOR_OPTIONAL \
0268 )
0269 _CONFIGURE_SCHEDULER_ASSIGN
0270 #if _CONFIGURE_MAXIMUM_PROCESSORS >= 2
0271 , _CONFIGURE_SCHEDULER_ASSIGN
0272 #endif
0273 #if _CONFIGURE_MAXIMUM_PROCESSORS >= 3
0274 , _CONFIGURE_SCHEDULER_ASSIGN
0275 #endif
0276 #if _CONFIGURE_MAXIMUM_PROCESSORS >= 4
0277 , _CONFIGURE_SCHEDULER_ASSIGN
0278 #endif
0279 #if _CONFIGURE_MAXIMUM_PROCESSORS >= 5
0280 , _CONFIGURE_SCHEDULER_ASSIGN
0281 #endif
0282 #if _CONFIGURE_MAXIMUM_PROCESSORS >= 6
0283 , _CONFIGURE_SCHEDULER_ASSIGN
0284 #endif
0285 #if _CONFIGURE_MAXIMUM_PROCESSORS >= 7
0286 , _CONFIGURE_SCHEDULER_ASSIGN
0287 #endif
0288 #if _CONFIGURE_MAXIMUM_PROCESSORS >= 8
0289 , _CONFIGURE_SCHEDULER_ASSIGN
0290 #endif
0291 #if _CONFIGURE_MAXIMUM_PROCESSORS >= 9
0292 , _CONFIGURE_SCHEDULER_ASSIGN
0293 #endif
0294 #if _CONFIGURE_MAXIMUM_PROCESSORS >= 10
0295 , _CONFIGURE_SCHEDULER_ASSIGN
0296 #endif
0297 #if _CONFIGURE_MAXIMUM_PROCESSORS >= 11
0298 , _CONFIGURE_SCHEDULER_ASSIGN
0299 #endif
0300 #if _CONFIGURE_MAXIMUM_PROCESSORS >= 12
0301 , _CONFIGURE_SCHEDULER_ASSIGN
0302 #endif
0303 #if _CONFIGURE_MAXIMUM_PROCESSORS >= 13
0304 , _CONFIGURE_SCHEDULER_ASSIGN
0305 #endif
0306 #if _CONFIGURE_MAXIMUM_PROCESSORS >= 14
0307 , _CONFIGURE_SCHEDULER_ASSIGN
0308 #endif
0309 #if _CONFIGURE_MAXIMUM_PROCESSORS >= 15
0310 , _CONFIGURE_SCHEDULER_ASSIGN
0311 #endif
0312 #if _CONFIGURE_MAXIMUM_PROCESSORS >= 16
0313 , _CONFIGURE_SCHEDULER_ASSIGN
0314 #endif
0315 #if _CONFIGURE_MAXIMUM_PROCESSORS >= 17
0316 , _CONFIGURE_SCHEDULER_ASSIGN
0317 #endif
0318 #if _CONFIGURE_MAXIMUM_PROCESSORS >= 18
0319 , _CONFIGURE_SCHEDULER_ASSIGN
0320 #endif
0321 #if _CONFIGURE_MAXIMUM_PROCESSORS >= 19
0322 , _CONFIGURE_SCHEDULER_ASSIGN
0323 #endif
0324 #if _CONFIGURE_MAXIMUM_PROCESSORS >= 20
0325 , _CONFIGURE_SCHEDULER_ASSIGN
0326 #endif
0327 #if _CONFIGURE_MAXIMUM_PROCESSORS >= 21
0328 , _CONFIGURE_SCHEDULER_ASSIGN
0329 #endif
0330 #if _CONFIGURE_MAXIMUM_PROCESSORS >= 22
0331 , _CONFIGURE_SCHEDULER_ASSIGN
0332 #endif
0333 #if _CONFIGURE_MAXIMUM_PROCESSORS >= 23
0334 , _CONFIGURE_SCHEDULER_ASSIGN
0335 #endif
0336 #if _CONFIGURE_MAXIMUM_PROCESSORS >= 24
0337 , _CONFIGURE_SCHEDULER_ASSIGN
0338 #endif
0339 #if _CONFIGURE_MAXIMUM_PROCESSORS >= 25
0340 , _CONFIGURE_SCHEDULER_ASSIGN
0341 #endif
0342 #if _CONFIGURE_MAXIMUM_PROCESSORS >= 26
0343 , _CONFIGURE_SCHEDULER_ASSIGN
0344 #endif
0345 #if _CONFIGURE_MAXIMUM_PROCESSORS >= 27
0346 , _CONFIGURE_SCHEDULER_ASSIGN
0347 #endif
0348 #if _CONFIGURE_MAXIMUM_PROCESSORS >= 28
0349 , _CONFIGURE_SCHEDULER_ASSIGN
0350 #endif
0351 #if _CONFIGURE_MAXIMUM_PROCESSORS >= 29
0352 , _CONFIGURE_SCHEDULER_ASSIGN
0353 #endif
0354 #if _CONFIGURE_MAXIMUM_PROCESSORS >= 30
0355 , _CONFIGURE_SCHEDULER_ASSIGN
0356 #endif
0357 #if _CONFIGURE_MAXIMUM_PROCESSORS >= 31
0358 , _CONFIGURE_SCHEDULER_ASSIGN
0359 #endif
0360 #if _CONFIGURE_MAXIMUM_PROCESSORS >= 32
0361 , _CONFIGURE_SCHEDULER_ASSIGN
0362 #endif
0363 #undef _CONFIGURE_SCHEDULER_ASSIGN
0364 #endif
0365 };
0366
0367 RTEMS_STATIC_ASSERT(
0368 _CONFIGURE_MAXIMUM_PROCESSORS
0369 == RTEMS_ARRAY_SIZE( _Scheduler_Initial_assignments ),
0370 _Scheduler_Initial_assignments
0371 );
0372
0373 #endif
0374
0375 #ifdef __cplusplus
0376 }
0377 #endif
0378
0379 #endif
0380
0381 #endif