1 /**
2  * D header file for POSIX.
3  *
4  * Copyright: Public Domain
5  * License:   Public Domain
6  * Authors:   Sean Kelly
7  * Standards: The Open Group Base Specifications Issue 6, IEEE Std 1003.1, 2004 Edition
8  */
9 module tango.stdc.posix.sched;
10 
11 private import tango.stdc.posix.config;
12 public import tango.stdc.posix.time;
13 public import tango.stdc.posix.sys.types;
14 
15 extern (C):
16 
17 //
18 // Required
19 //
20 /*
21 struct sched_param
22 {
23     int sched_priority (THR)
24     int sched_ss_low_priority (SS|TSP)
25     struct timespec sched_ss_repl_period (SS|TSP)
26     struct timespec sched_ss_init_budget (SS|TSP)
27     int sched_ss_max_repl (SS|TSP)
28 }
29 
30 SCHED_FIFO
31 SCHED_RR
32 SCHED_SPORADIC (SS|TSP)
33 SCHED_OTHER
34 
35 int sched_getparam(pid_t, sched_param*);
36 int sched_getscheduler(pid_t);
37 int sched_setparam(pid_t, in sched_param*);
38 int sched_setscheduler(pid_t, int, in sched_param*);
39 */
40 
41 version( linux )
42 {
43     struct sched_param
44     {
45         int sched_priority;
46     }
47 
48     const SCHED_OTHER   = 0;
49     const SCHED_FIFO    = 1;
50     const SCHED_RR      = 2;
51     //SCHED_SPORADIC (SS|TSP)
52 }
53 else version( darwin )
54 {
55     const SCHED_OTHER   = 1;
56     const SCHED_FIFO    = 4;
57     const SCHED_RR      = 2;
58     // SCHED_SPORADIC seems to be unavailable
59 
60     private const __SCHED_PARAM_SIZE__ = 4;
61 
62     struct sched_param
63     {
64         int                         sched_priority;
65         byte[__SCHED_PARAM_SIZE__]  opaque;
66     }
67 }
68 else version( FreeBSD )
69 {
70     struct sched_param
71     {
72         int sched_priority;
73     }
74 
75 	const SCHED_FIFO    = 1;
76     const SCHED_OTHER   = 2;
77     const SCHED_RR      = 3;
78     //SCHED_SPORADIC (SS|TSP)
79 }
80 else version( solaris )
81 {
82 	struct sched_param
83 	{
84 		int		sched_priority;
85 		int[8]	sched_pad;
86 	}
87 
88 	const SCHED_FIFO    = 1;
89     const SCHED_OTHER   = 0;
90     const SCHED_RR      = 2;
91     //SCHED_SPORADIC ?
92 }
93 
94 int sched_getparam(pid_t, sched_param*);
95 int sched_getscheduler(pid_t);
96 int sched_setparam(pid_t, in sched_param*);
97 int sched_setscheduler(pid_t, int, in sched_param*);
98 
99 //
100 // Thread (THR)
101 //
102 /*
103 int sched_yield();
104 */
105 
106 version( linux )
107 {
108     int sched_yield();
109 }
110 else version( darwin )
111 {
112     int sched_yield();
113 }
114 else version( FreeBSD )
115 {
116 	int sched_yield();
117 }
118 else version( solaris )
119 {
120 	int sched_yield();
121 }
122 
123 //
124 // Scheduling (TPS)
125 //
126 /*
127 int sched_get_priority_max(int);
128 int sched_get_priority_min(int);
129 int sched_rr_get_interval(pid_t, timespec*);
130 */
131 
132 version( linux )
133 {
134     int sched_get_priority_max(int);
135     int sched_get_priority_min(int);
136     int sched_rr_get_interval(pid_t, timespec*);
137 }
138 else version( darwin )
139 {
140     int sched_get_priority_min(int);
141     int sched_get_priority_max(int);
142     //int sched_rr_get_interval(pid_t, timespec*); // FIXME: unavailable?
143 }
144 else version( FreeBSD )
145 {
146     int sched_get_priority_min(int);
147     int sched_get_priority_max(int);
148     int sched_rr_get_interval(pid_t, timespec*);
149 }
150 else version( solaris )
151 {
152     int sched_get_priority_min(int);
153     int sched_get_priority_max(int);
154     int sched_rr_get_interval(pid_t, timespec*);
155 }