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)