xref: /netbsd-src/external/gpl3/gcc/dist/libphobos/libdruntime/core/sys/posix/sched.d (revision 0a3071956a3a9fdebdbf7f338cf2d439b45fc728)
1 /**
2  * D header file for POSIX.
3  *
4  * Copyright: Copyright Sean Kelly 2005 - 2009.
5  * License:   $(HTTP www.boost.org/LICENSE_1_0.txt, Boost License 1.0).
6  * Authors:   Sean Kelly,
7               Alex Rønne Petersen
8  * Standards: The Open Group Base Specifications Issue 6, IEEE Std 1003.1, 2004 Edition
9  */
10 
11 /*          Copyright Sean Kelly 2005 - 2009.
12  * Distributed under the Boost Software License, Version 1.0.
13  *    (See accompanying file LICENSE or copy at
14  *          http://www.boost.org/LICENSE_1_0.txt)
15  */
16 module core.sys.posix.sched;
17 
18 import core.sys.posix.config;
19 public import core.sys.posix.time;
20 public import core.sys.posix.sys.types;
21 
22 version (OSX)
23     version = Darwin;
24 else version (iOS)
25     version = Darwin;
26 else version (TVOS)
27     version = Darwin;
28 else version (WatchOS)
29     version = Darwin;
30 
version(Posix)31 version (Posix):
32 extern (C):
33 nothrow:
34 @nogc:
35 @system:
36 
37 //
38 // Required
39 //
40 /*
41 struct sched_param
42 {
43     int sched_priority (THR)
44     int sched_ss_low_priority (SS|TSP)
45     struct timespec sched_ss_repl_period (SS|TSP)
46     struct timespec sched_ss_init_budget (SS|TSP)
47     int sched_ss_max_repl (SS|TSP)
48 }
49 
50 SCHED_FIFO
51 SCHED_RR
52 SCHED_SPORADIC (SS|TSP)
53 SCHED_OTHER
54 
55 int sched_getparam(pid_t, sched_param*);
56 int sched_getscheduler(pid_t);
57 int sched_setparam(pid_t, const scope sched_param*);
58 int sched_setscheduler(pid_t, int, const scope sched_param*);
59 */
60 
61 version (linux)
62 {
63     version (CRuntime_Musl)
64     {
65         struct sched_param
66         {
67             int sched_priority;
68             int __reserved1;
69             timespec[2] __reserved2;
70             int __reserved3;
71         }
72     }
73     else
74     {
75         struct sched_param
76         {
77             int sched_priority;
78         }
79     }
80 
81     enum SCHED_OTHER    = 0;
82     enum SCHED_FIFO     = 1;
83     enum SCHED_RR       = 2;
84     //SCHED_SPORADIC (SS|TSP)
85     enum SCHED_BATCH    = 3;
86     enum SCHED_IDLE     = 5;
87     enum SCHED_RESET_ON_FORK = 0x40000000;
88 }
89 else version (Darwin)
90 {
91     enum SCHED_OTHER    = 1;
92     enum SCHED_FIFO     = 4;
93     enum SCHED_RR       = 2;
94     //SCHED_SPORADIC (SS|TSP)
95 
96     struct sched_param
97     {
98         int                             sched_priority;
99         byte[__PTHREAD_MUTEX_SIZE__]    __opaque;
100     }
101 }
102 else version (FreeBSD)
103 {
104     struct sched_param
105     {
106         int sched_priority;
107     }
108 
109     enum SCHED_FIFO     = 1;
110     enum SCHED_OTHER    = 2;
111     enum SCHED_RR       = 3;
112 }
113 else version (NetBSD)
114 {
115     struct sched_param
116     {
117         int sched_priority;
118     }
119 
120     enum SCHED_FIFO     = 1;
121     enum SCHED_OTHER    = 0;
122     enum SCHED_RR       = 2;
123 }
124 else version (OpenBSD)
125 {
126     struct sched_param
127     {
128         int sched_priority;
129     }
130 
131     enum SCHED_FIFO     = 1;
132     enum SCHED_OTHER    = 2;
133     enum SCHED_RR       = 3;
134 }
135 else version (DragonFlyBSD)
136 {
137     struct sched_param
138     {
139         int sched_priority;
140     }
141 
142     enum SCHED_FIFO     = 1;
143     enum SCHED_OTHER    = 2;
144     enum SCHED_RR       = 3;
145 }
146 else version (Solaris)
147 {
148     struct sched_param
149     {
150         int sched_priority;
151         int[8] sched_pad;
152     }
153 
154     enum SCHED_OTHER = 0;
155     enum SCHED_FIFO = 1;
156     enum SCHED_RR = 2;
157     enum SCHED_SYS = 3;
158     enum SCHED_IA = 4;
159     enum SCHED_FSS = 5;
160     enum SCHED_FX = 6;
161     enum _SCHED_NEXT = 7;
162 }
163 else
164 {
165     static assert(false, "Unsupported platform");
166 }
167 
168 int sched_getparam(pid_t, sched_param*);
169 int sched_getscheduler(pid_t);
170 int sched_setparam(pid_t, const scope sched_param*);
171 int sched_setscheduler(pid_t, int, const scope sched_param*);
172 
173 //
174 // Thread (THR)
175 //
176 /*
177 int sched_yield();
178 */
179 
180 version (CRuntime_Glibc)
181 {
182     int sched_yield();
183 }
184 else version (Darwin)
185 {
186     int sched_yield();
187 }
188 else version (FreeBSD)
189 {
190     int sched_yield();
191 }
192 else version (NetBSD)
193 {
194     int sched_yield();
195 }
196 else version (OpenBSD)
197 {
198     int sched_yield();
199 }
200 else version (DragonFlyBSD)
201 {
202     int sched_yield();
203 }
204 else version (Solaris)
205 {
206     int sched_yield();
207 }
208 else version (CRuntime_Bionic)
209 {
210     int sched_yield();
211 }
212 else version (CRuntime_Musl)
213 {
214     int sched_yield();
215 }
216 else version (CRuntime_UClibc)
217 {
218     int sched_yield();
219 }
220 else
221 {
222     static assert(false, "Unsupported platform");
223 }
224 
225 //
226 // Scheduling (TPS)
227 //
228 /*
229 int sched_get_priority_max(int);
230 int sched_get_priority_min(int);
231 int sched_rr_get_interval(pid_t, timespec*);
232 */
233 
234 version (CRuntime_Glibc)
235 {
236     int sched_get_priority_max(int);
237     int sched_get_priority_min(int);
238     int sched_rr_get_interval(pid_t, timespec*);
239 }
240 else version (Darwin)
241 {
242     int sched_get_priority_min(int);
243     int sched_get_priority_max(int);
244     //int sched_rr_get_interval(pid_t, timespec*); // FIXME: unavailable?
245 }
246 else version (FreeBSD)
247 {
248     int sched_get_priority_min(int);
249     int sched_get_priority_max(int);
250     int sched_rr_get_interval(pid_t, timespec*);
251 }
252 else version (NetBSD)
253 {
254     int sched_get_priority_min(int);
255     int sched_get_priority_max(int);
256     int sched_rr_get_interval(pid_t, timespec*);
257 }
258 else version (OpenBSD)
259 {
260     int sched_get_priority_min(int);
261     int sched_get_priority_max(int);
262     int sched_rr_get_interval(pid_t, timespec*);
263 }
264 else version (DragonFlyBSD)
265 {
266     int sched_get_priority_min(int);
267     int sched_get_priority_max(int);
268     int sched_rr_get_interval(pid_t, timespec*);
269 }
270 else version (Solaris)
271 {
272     int sched_get_priority_max(int);
273     int sched_get_priority_min(int);
274     int sched_rr_get_interval(pid_t, timespec*);
275 }
276 else version (CRuntime_Bionic)
277 {
278     int sched_get_priority_max(int);
279     int sched_get_priority_min(int);
280     int sched_rr_get_interval(pid_t, timespec*);
281 }
282 else version (CRuntime_Musl)
283 {
284     int sched_get_priority_max(int);
285     int sched_get_priority_min(int);
286     int sched_rr_get_interval(pid_t, timespec*);
287 }
288 else version (CRuntime_UClibc)
289 {
290     int sched_get_priority_max(int);
291     int sched_get_priority_min(int);
292     int sched_rr_get_interval(pid_t, timespec*);
293 }
294 else
295 {
296     static assert(false, "Unsupported platform");
297 }
298