xref: /f-stack/tools/compat/include/sys/priority.h (revision 1eaf0ac3)
1*1eaf0ac3Slogwang /*-
2*1eaf0ac3Slogwang  * Copyright (c) 1994, Henrik Vestergaard Draboel
3*1eaf0ac3Slogwang  * All rights reserved.
4*1eaf0ac3Slogwang  *
5*1eaf0ac3Slogwang  * Redistribution and use in source and binary forms, with or without
6*1eaf0ac3Slogwang  * modification, are permitted provided that the following conditions
7*1eaf0ac3Slogwang  * are met:
8*1eaf0ac3Slogwang  * 1. Redistributions of source code must retain the above copyright
9*1eaf0ac3Slogwang  *    notice, this list of conditions and the following disclaimer.
10*1eaf0ac3Slogwang  * 2. Redistributions in binary form must reproduce the above copyright
11*1eaf0ac3Slogwang  *    notice, this list of conditions and the following disclaimer in the
12*1eaf0ac3Slogwang  *    documentation and/or other materials provided with the distribution.
13*1eaf0ac3Slogwang  * 3. All advertising materials mentioning features or use of this software
14*1eaf0ac3Slogwang  *    must display the following acknowledgement:
15*1eaf0ac3Slogwang  *	This product includes software developed by Henrik Vestergaard Draboel.
16*1eaf0ac3Slogwang  * 4. The name of the author may not be used to endorse or promote products
17*1eaf0ac3Slogwang  *    derived from this software without specific prior written permission.
18*1eaf0ac3Slogwang  *
19*1eaf0ac3Slogwang  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
20*1eaf0ac3Slogwang  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21*1eaf0ac3Slogwang  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
22*1eaf0ac3Slogwang  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
23*1eaf0ac3Slogwang  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
24*1eaf0ac3Slogwang  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
25*1eaf0ac3Slogwang  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
26*1eaf0ac3Slogwang  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
27*1eaf0ac3Slogwang  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
28*1eaf0ac3Slogwang  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
29*1eaf0ac3Slogwang  * SUCH DAMAGE.
30*1eaf0ac3Slogwang  *
31*1eaf0ac3Slogwang  * $FreeBSD$
32*1eaf0ac3Slogwang  */
33*1eaf0ac3Slogwang 
34*1eaf0ac3Slogwang #ifndef _SYS_PRIORITY_H_
35*1eaf0ac3Slogwang #define _SYS_PRIORITY_H_
36*1eaf0ac3Slogwang 
37*1eaf0ac3Slogwang /*
38*1eaf0ac3Slogwang  * Process priority specifications.
39*1eaf0ac3Slogwang  */
40*1eaf0ac3Slogwang 
41*1eaf0ac3Slogwang /*
42*1eaf0ac3Slogwang  * Priority classes.
43*1eaf0ac3Slogwang  */
44*1eaf0ac3Slogwang 
45*1eaf0ac3Slogwang #define	PRI_ITHD		1	/* Interrupt thread. */
46*1eaf0ac3Slogwang #define	PRI_REALTIME		2	/* Real time process. */
47*1eaf0ac3Slogwang #define	PRI_TIMESHARE		3	/* Time sharing process. */
48*1eaf0ac3Slogwang #define	PRI_IDLE		4	/* Idle process. */
49*1eaf0ac3Slogwang 
50*1eaf0ac3Slogwang /*
51*1eaf0ac3Slogwang  * PRI_FIFO is POSIX.1B SCHED_FIFO.
52*1eaf0ac3Slogwang  */
53*1eaf0ac3Slogwang 
54*1eaf0ac3Slogwang #define	PRI_FIFO_BIT		8
55*1eaf0ac3Slogwang #define	PRI_FIFO		(PRI_FIFO_BIT | PRI_REALTIME)
56*1eaf0ac3Slogwang 
57*1eaf0ac3Slogwang #define	PRI_BASE(P)		((P) & ~PRI_FIFO_BIT)
58*1eaf0ac3Slogwang #define	PRI_IS_REALTIME(P)	(PRI_BASE(P) == PRI_REALTIME)
59*1eaf0ac3Slogwang #define	PRI_NEED_RR(P)		((P) != PRI_FIFO)
60*1eaf0ac3Slogwang 
61*1eaf0ac3Slogwang /*
62*1eaf0ac3Slogwang  * Priorities.  Note that with 64 run queues, differences less than 4 are
63*1eaf0ac3Slogwang  * insignificant.
64*1eaf0ac3Slogwang  */
65*1eaf0ac3Slogwang 
66*1eaf0ac3Slogwang /*
67*1eaf0ac3Slogwang  * Priorities range from 0 to 255, but differences of less then 4 (RQ_PPQ)
68*1eaf0ac3Slogwang  * are insignificant.  Ranges are as follows:
69*1eaf0ac3Slogwang  *
70*1eaf0ac3Slogwang  * Interrupt threads:		0 - 47
71*1eaf0ac3Slogwang  * Realtime user threads:	48 - 79
72*1eaf0ac3Slogwang  * Top half kernel threads:	80 - 119
73*1eaf0ac3Slogwang  * Time sharing user threads:	120 - 223
74*1eaf0ac3Slogwang  * Idle user threads:		224 - 255
75*1eaf0ac3Slogwang  *
76*1eaf0ac3Slogwang  * XXX If/When the specific interrupt thread and top half thread ranges
77*1eaf0ac3Slogwang  * disappear, a larger range can be used for user processes.
78*1eaf0ac3Slogwang  */
79*1eaf0ac3Slogwang 
80*1eaf0ac3Slogwang #define	PRI_MIN			(0)		/* Highest priority. */
81*1eaf0ac3Slogwang #define	PRI_MAX			(255)		/* Lowest priority. */
82*1eaf0ac3Slogwang 
83*1eaf0ac3Slogwang #define	PRI_MIN_ITHD		(PRI_MIN)
84*1eaf0ac3Slogwang #define	PRI_MAX_ITHD		(PRI_MIN_REALTIME - 1)
85*1eaf0ac3Slogwang 
86*1eaf0ac3Slogwang #define	PI_REALTIME		(PRI_MIN_ITHD + 0)
87*1eaf0ac3Slogwang #define	PI_AV			(PRI_MIN_ITHD + 4)
88*1eaf0ac3Slogwang #define	PI_NET			(PRI_MIN_ITHD + 8)
89*1eaf0ac3Slogwang #define	PI_DISK			(PRI_MIN_ITHD + 12)
90*1eaf0ac3Slogwang #define	PI_TTY			(PRI_MIN_ITHD + 16)
91*1eaf0ac3Slogwang #define	PI_DULL			(PRI_MIN_ITHD + 20)
92*1eaf0ac3Slogwang #define	PI_SOFT			(PRI_MIN_ITHD + 24)
93*1eaf0ac3Slogwang #define	PI_SWI(x)		(PI_SOFT + (x) * RQ_PPQ)
94*1eaf0ac3Slogwang 
95*1eaf0ac3Slogwang #define	PRI_MIN_REALTIME	(48)
96*1eaf0ac3Slogwang #define	PRI_MAX_REALTIME	(PRI_MIN_KERN - 1)
97*1eaf0ac3Slogwang 
98*1eaf0ac3Slogwang #define	PRI_MIN_KERN		(80)
99*1eaf0ac3Slogwang #define	PRI_MAX_KERN		(PRI_MIN_TIMESHARE - 1)
100*1eaf0ac3Slogwang 
101*1eaf0ac3Slogwang #define	PSWP			(PRI_MIN_KERN + 0)
102*1eaf0ac3Slogwang #define	PVM			(PRI_MIN_KERN + 4)
103*1eaf0ac3Slogwang #define	PINOD			(PRI_MIN_KERN + 8)
104*1eaf0ac3Slogwang #define	PRIBIO			(PRI_MIN_KERN + 12)
105*1eaf0ac3Slogwang #define	PVFS			(PRI_MIN_KERN + 16)
106*1eaf0ac3Slogwang #define	PZERO			(PRI_MIN_KERN + 20)
107*1eaf0ac3Slogwang #define	PSOCK			(PRI_MIN_KERN + 24)
108*1eaf0ac3Slogwang #define	PWAIT			(PRI_MIN_KERN + 28)
109*1eaf0ac3Slogwang #define	PLOCK			(PRI_MIN_KERN + 32)
110*1eaf0ac3Slogwang #define	PPAUSE			(PRI_MIN_KERN + 36)
111*1eaf0ac3Slogwang 
112*1eaf0ac3Slogwang #define	PRI_MIN_TIMESHARE	(120)
113*1eaf0ac3Slogwang #define	PRI_MAX_TIMESHARE	(PRI_MIN_IDLE - 1)
114*1eaf0ac3Slogwang 
115*1eaf0ac3Slogwang #define	PUSER			(PRI_MIN_TIMESHARE)
116*1eaf0ac3Slogwang 
117*1eaf0ac3Slogwang #define	PRI_MIN_IDLE		(224)
118*1eaf0ac3Slogwang #define	PRI_MAX_IDLE		(PRI_MAX)
119*1eaf0ac3Slogwang 
120*1eaf0ac3Slogwang #ifdef _KERNEL
121*1eaf0ac3Slogwang /* Other arguments for kern_yield(9). */
122*1eaf0ac3Slogwang #define	PRI_USER	-2	/* Change to current user priority. */
123*1eaf0ac3Slogwang #define	PRI_UNCHANGED	-1	/* Do not change priority. */
124*1eaf0ac3Slogwang #endif
125*1eaf0ac3Slogwang 
126*1eaf0ac3Slogwang struct priority {
127*1eaf0ac3Slogwang 	u_char	pri_class;	/* Scheduling class. */
128*1eaf0ac3Slogwang 	u_char	pri_level;	/* Normal priority level. */
129*1eaf0ac3Slogwang 	u_char	pri_native;	/* Priority before propagation. */
130*1eaf0ac3Slogwang 	u_char	pri_user;	/* User priority based on p_cpu and p_nice. */
131*1eaf0ac3Slogwang };
132*1eaf0ac3Slogwang 
133*1eaf0ac3Slogwang #endif	/* !_SYS_PRIORITY_H_ */
134