source: rtems/cpukit/sapi/include/rtems/scheduler.h @ 981eed2

5
Last change on this file since 981eed2 was 981eed2, checked in by Sebastian Huber <sebastian.huber@…>, on 04/29/16 at 10:09:32

score: Add dummy Strong APA scheduler

Start with a copy of the Priority SMP scheduler implementation.

Update #2510.

  • Property mode set to 100644
File size: 6.4 KB
Line 
1/**
2 * @file
3 *
4 * @brief Scheduler Configuration API
5 */
6
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
61  #include <rtems/score/schedulercbs.h>
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
78  #include <rtems/score/scheduleredf.h>
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
95  #include <rtems/score/schedulerpriority.h>
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
115  #include <rtems/score/schedulerpriorityaffinitysmp.h>
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
135  #include <rtems/score/schedulerprioritysmp.h>
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_STRONG_APA
155  #include <rtems/score/schedulerstrongapa.h>
156
157  #define RTEMS_SCHEDULER_CONTEXT_STRONG_APA_NAME( name ) \
158    RTEMS_SCHEDULER_CONTEXT_NAME( strong_APA_ ## name )
159
160  #define RTEMS_SCHEDULER_CONTEXT_STRONG_APA( name, prio_count ) \
161    static struct { \
162      Scheduler_strong_APA_Context Base; \
163      Chain_Control                Ready[ ( prio_count ) ]; \
164    } RTEMS_SCHEDULER_CONTEXT_STRONG_APA_NAME( name )
165
166  #define RTEMS_SCHEDULER_CONTROL_STRONG_APA( name, obj_name ) \
167    { \
168      &RTEMS_SCHEDULER_CONTEXT_STRONG_APA_NAME( name ).Base.Base.Base, \
169      SCHEDULER_STRONG_APA_ENTRY_POINTS, \
170      ( obj_name ) \
171    }
172#endif
173
174#ifdef CONFIGURE_SCHEDULER_SIMPLE
175  #include <rtems/score/schedulersimple.h>
176
177  #define RTEMS_SCHEDULER_CONTEXT_SIMPLE_NAME( name ) \
178    RTEMS_SCHEDULER_CONTEXT_NAME( simple_ ## name )
179
180  #define RTEMS_SCHEDULER_CONTEXT_SIMPLE( name ) \
181    static Scheduler_simple_Context \
182      RTEMS_SCHEDULER_CONTEXT_SIMPLE_NAME( name )
183
184  #define RTEMS_SCHEDULER_CONTROL_SIMPLE( name, obj_name ) \
185    { \
186      &RTEMS_SCHEDULER_CONTEXT_SIMPLE_NAME( name ).Base, \
187      SCHEDULER_SIMPLE_ENTRY_POINTS, \
188      ( obj_name ) \
189    }
190#endif
191
192#ifdef CONFIGURE_SCHEDULER_SIMPLE_SMP
193  #include <rtems/score/schedulersimplesmp.h>
194
195  #define RTEMS_SCHEDULER_CONTEXT_SIMPLE_SMP_NAME( name ) \
196    RTEMS_SCHEDULER_CONTEXT_NAME( simple_SMP_ ## name )
197
198  #define RTEMS_SCHEDULER_CONTEXT_SIMPLE_SMP( name ) \
199    static Scheduler_simple_SMP_Context \
200      RTEMS_SCHEDULER_CONTEXT_SIMPLE_SMP_NAME( name )
201
202  #define RTEMS_SCHEDULER_CONTROL_SIMPLE_SMP( name, obj_name ) \
203    { \
204      &RTEMS_SCHEDULER_CONTEXT_SIMPLE_SMP_NAME( name ).Base.Base, \
205      SCHEDULER_SIMPLE_SMP_ENTRY_POINTS, \
206      ( obj_name ) \
207    }
208#endif
209
210#endif /* _RTEMS_SAPI_SCHEDULER_H */
Note: See TracBrowser for help on using the repository browser.