1f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)/*
2f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * sched_get_priority_min.c
3f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) *
4f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * Description:
5f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * POSIX thread functions that deal with thread scheduling.
6f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) *
7f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * --------------------------------------------------------------------------
8f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) *
9f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) *      Pthreads-win32 - POSIX Threads Library for Win32
10f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) *      Copyright(C) 1998 John E. Bossom
11f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) *      Copyright(C) 1999,2005 Pthreads-win32 contributors
12f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) *
13f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) *      Contact Email: rpj@callisto.canberra.edu.au
14f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) *
15f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) *      The current list of contributors is contained
16f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) *      in the file CONTRIBUTORS included with the source
17f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) *      code distribution. The list can also be seen at the
18f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) *      following World Wide Web location:
19f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) *      http://sources.redhat.com/pthreads-win32/contributors.html
20f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) *
21f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) *      This library is free software; you can redistribute it and/or
22f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) *      modify it under the terms of the GNU Lesser General Public
23f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) *      License as published by the Free Software Foundation; either
24f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) *      version 2 of the License, or (at your option) any later version.
25f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) *
26f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) *      This library is distributed in the hope that it will be useful,
27f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) *      but WITHOUT ANY WARRANTY; without even the implied warranty of
28f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) *      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
29f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) *      Lesser General Public License for more details.
30f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) *
31f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) *      You should have received a copy of the GNU Lesser General Public
32f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) *      License along with this library in the file COPYING.LIB;
33f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) *      if not, write to the Free Software Foundation, Inc.,
34f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) *      59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
35f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) */
36f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
37f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "pthread.h"
38f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "implement.h"
39f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "sched.h"
40f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
41f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)/*
42f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * On Windows98, THREAD_PRIORITY_LOWEST is (-2) and
43f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * THREAD_PRIORITY_HIGHEST is 2, and everything works just fine.
445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) *
455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * On WinCE 3.0, it so happen that THREAD_PRIORITY_LOWEST is 5
465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * and THREAD_PRIORITY_HIGHEST is 1 (yes, I know, it is funny:
47f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * highest priority use smaller numbers) and the following happens:
48f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) *
49f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * sched_get_priority_min() returns 5
50f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * sched_get_priority_max() returns 1
515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) *
525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * The following table shows the base priority levels for combinations
535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * of priority class and priority value in Win32.
545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) *
555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) *   Process Priority Class               Thread Priority Level
565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) *   -----------------------------------------------------------------
575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) *   1 IDLE_PRIORITY_CLASS                THREAD_PRIORITY_IDLE
585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) *   1 BELOW_NORMAL_PRIORITY_CLASS        THREAD_PRIORITY_IDLE
59a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) *   1 NORMAL_PRIORITY_CLASS              THREAD_PRIORITY_IDLE
60a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) *   1 ABOVE_NORMAL_PRIORITY_CLASS        THREAD_PRIORITY_IDLE
61a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) *   1 HIGH_PRIORITY_CLASS                THREAD_PRIORITY_IDLE
62a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) *   2 IDLE_PRIORITY_CLASS                THREAD_PRIORITY_LOWEST
63f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) *   3 IDLE_PRIORITY_CLASS                THREAD_PRIORITY_BELOW_NORMAL
64f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) *   4 IDLE_PRIORITY_CLASS                THREAD_PRIORITY_NORMAL
65f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) *   4 BELOW_NORMAL_PRIORITY_CLASS        THREAD_PRIORITY_LOWEST
66f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) *   5 IDLE_PRIORITY_CLASS                THREAD_PRIORITY_ABOVE_NORMAL
675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) *   5 BELOW_NORMAL_PRIORITY_CLASS        THREAD_PRIORITY_BELOW_NORMAL
685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) *   5 Background NORMAL_PRIORITY_CLASS   THREAD_PRIORITY_LOWEST
69f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) *   6 IDLE_PRIORITY_CLASS                THREAD_PRIORITY_HIGHEST
70f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) *   6 BELOW_NORMAL_PRIORITY_CLASS        THREAD_PRIORITY_NORMAL
71f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) *   6 Background NORMAL_PRIORITY_CLASS   THREAD_PRIORITY_BELOW_NORMAL
72f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) *   7 BELOW_NORMAL_PRIORITY_CLASS        THREAD_PRIORITY_ABOVE_NORMAL
73f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) *   7 Background NORMAL_PRIORITY_CLASS   THREAD_PRIORITY_NORMAL
74f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) *   7 Foreground NORMAL_PRIORITY_CLASS   THREAD_PRIORITY_LOWEST
75f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) *   8 BELOW_NORMAL_PRIORITY_CLASS        THREAD_PRIORITY_HIGHEST
76f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) *   8 NORMAL_PRIORITY_CLASS              THREAD_PRIORITY_ABOVE_NORMAL
77f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) *   8 Foreground NORMAL_PRIORITY_CLASS   THREAD_PRIORITY_BELOW_NORMAL
78f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) *   8 ABOVE_NORMAL_PRIORITY_CLASS        THREAD_PRIORITY_LOWEST
79f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) *   9 NORMAL_PRIORITY_CLASS              THREAD_PRIORITY_HIGHEST
80f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) *   9 Foreground NORMAL_PRIORITY_CLASS   THREAD_PRIORITY_NORMAL
81f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) *   9 ABOVE_NORMAL_PRIORITY_CLASS        THREAD_PRIORITY_BELOW_NORMAL
82f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) *  10 Foreground NORMAL_PRIORITY_CLASS   THREAD_PRIORITY_ABOVE_NORMAL
83f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) *  10 ABOVE_NORMAL_PRIORITY_CLASS        THREAD_PRIORITY_NORMAL
84f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) *  11 Foreground NORMAL_PRIORITY_CLASS   THREAD_PRIORITY_HIGHEST
85a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) *  11 ABOVE_NORMAL_PRIORITY_CLASS        THREAD_PRIORITY_ABOVE_NORMAL
86f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) *  11 HIGH_PRIORITY_CLASS                THREAD_PRIORITY_LOWEST
87f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) *  12 ABOVE_NORMAL_PRIORITY_CLASS        THREAD_PRIORITY_HIGHEST
88f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) *  12 HIGH_PRIORITY_CLASS                THREAD_PRIORITY_BELOW_NORMAL
89f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) *  13 HIGH_PRIORITY_CLASS                THREAD_PRIORITY_NORMAL
90f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) *  14 HIGH_PRIORITY_CLASS                THREAD_PRIORITY_ABOVE_NORMAL
91f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) *  15 HIGH_PRIORITY_CLASS                THREAD_PRIORITY_HIGHEST
92f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) *  15 HIGH_PRIORITY_CLASS                THREAD_PRIORITY_TIME_CRITICAL
93f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) *  15 IDLE_PRIORITY_CLASS                THREAD_PRIORITY_TIME_CRITICAL
94f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) *  15 BELOW_NORMAL_PRIORITY_CLASS        THREAD_PRIORITY_TIME_CRITICAL
95f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) *  15 NORMAL_PRIORITY_CLASS              THREAD_PRIORITY_TIME_CRITICAL
96f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) *  15 ABOVE_NORMAL_PRIORITY_CLASS        THREAD_PRIORITY_TIME_CRITICAL
97f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) *  16 REALTIME_PRIORITY_CLASS            THREAD_PRIORITY_IDLE
98f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) *  17 REALTIME_PRIORITY_CLASS            -7
99f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) *  18 REALTIME_PRIORITY_CLASS            -6
100f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) *  19 REALTIME_PRIORITY_CLASS            -5
101f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) *  20 REALTIME_PRIORITY_CLASS            -4
102f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) *  21 REALTIME_PRIORITY_CLASS            -3
103f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) *  22 REALTIME_PRIORITY_CLASS            THREAD_PRIORITY_LOWEST
104f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) *  23 REALTIME_PRIORITY_CLASS            THREAD_PRIORITY_BELOW_NORMAL
105f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) *  24 REALTIME_PRIORITY_CLASS            THREAD_PRIORITY_NORMAL
106f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) *  25 REALTIME_PRIORITY_CLASS            THREAD_PRIORITY_ABOVE_NORMAL
107f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) *  26 REALTIME_PRIORITY_CLASS            THREAD_PRIORITY_HIGHEST
108f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) *  27 REALTIME_PRIORITY_CLASS             3
109f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) *  28 REALTIME_PRIORITY_CLASS             4
110f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) *  29 REALTIME_PRIORITY_CLASS             5
111f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) *  30 REALTIME_PRIORITY_CLASS             6
112f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) *  31 REALTIME_PRIORITY_CLASS            THREAD_PRIORITY_TIME_CRITICAL
113f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) *
114f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * Windows NT:  Values -7, -6, -5, -4, -3, 3, 4, 5, and 6 are not supported.
115f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) *
116f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) */
1175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
1185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
1195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)int
1205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)sched_get_priority_min (int policy)
121f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles){
122f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  if (policy < SCHED_MIN || policy > SCHED_MAX)
123f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    {
124f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      errno = EINVAL;
125f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      return -1;
126f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    }
127f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
128f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#if (THREAD_PRIORITY_LOWEST > THREAD_PRIORITY_NORMAL)
129f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  /* WinCE? */
130f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  return PTW32_MIN (THREAD_PRIORITY_IDLE, THREAD_PRIORITY_TIME_CRITICAL);
131f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#else
132f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  /* This is independent of scheduling policy in Win32. */
133f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  return PTW32_MIN (THREAD_PRIORITY_IDLE, THREAD_PRIORITY_TIME_CRITICAL);
134f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#endif
135f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
136f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)