]> git.saurik.com Git - apple/xnu.git/blob - osfmk/kern/thread_swap.h
xnu-123.5.tar.gz
[apple/xnu.git] / osfmk / kern / thread_swap.h
1 /*
2 * Copyright (c) 2000 Apple Computer, Inc. All rights reserved.
3 *
4 * @APPLE_LICENSE_HEADER_START@
5 *
6 * The contents of this file constitute Original Code as defined in and
7 * are subject to the Apple Public Source License Version 1.1 (the
8 * "License"). You may not use this file except in compliance with the
9 * License. Please obtain a copy of the License at
10 * http://www.apple.com/publicsource and read it before using this file.
11 *
12 * This Original Code and all software distributed under the License are
13 * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
14 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
15 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
16 * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT. Please see the
17 * License for the specific language governing rights and limitations
18 * under the License.
19 *
20 * @APPLE_LICENSE_HEADER_END@
21 */
22 /*
23 * @OSF_COPYRIGHT@
24 */
25 /*
26 * Mach Operating System
27 * Copyright (c) 1989 Carnegie-Mellon University
28 * Copyright (c) 1988 Carnegie-Mellon University
29 * Copyright (c) 1987 Carnegie-Mellon University
30 * All rights reserved. The CMU software License Agreement specifies
31 * the terms and conditions for use and redistribution.
32 */
33 /*
34 * HISTORY
35 *
36 * Revision 1.1.1.1 1998/09/22 21:05:32 wsanchez
37 * Import of Mac OS X kernel (~semeria)
38 *
39 * Revision 1.1.1.1 1998/03/07 02:25:57 wsanchez
40 * Import of OSF Mach kernel (~mburg)
41 *
42 * Revision 1.1.11.7 1995/06/13 18:58:49 bolinger
43 * Fix ri-osc CR1391: New return type from thread_swapin_blocking().
44 * [1995/06/13 18:56:52 bolinger]
45 *
46 * Revision 1.1.11.6 1995/06/05 21:46:36 dwm
47 * ri-osc CR1357 - ensure activation being returned to is swapped in.
48 * added thread_swapin_blocking [bolinger]
49 * [1995/06/05 21:34:08 dwm]
50 *
51 * Revision 1.1.11.5 1995/05/19 15:48:34 bernadat
52 * Let thread swapping be configurable.
53 * [95/05/19 bernadat]
54 *
55 * Revision 1.1.11.4 1995/04/07 19:04:46 barbou
56 * Merged into mainline.
57 * [95/03/09 barbou]
58 *
59 * Revision 1.1.12.2 1995/02/13 15:59:18 barbou
60 * Merged/ported to MK6.
61 *
62 * Revision 1.1.9.3 1994/08/12 14:22:30 barbou
63 * Overwritten with copy from IK.
64 * Old kern/thread_swap.h was renamed kern/thread_handoff.c.
65 * Added prototype for thread_swapout and thread_swapout_enqueue.
66 * [94/07/28 barbou]
67 *
68 * Revision 3.0.3.2 1994/01/20 19:53:20 chasb
69 * Remove excessively restrictive copyright notice
70 * [1994/01/20 17:50:56 chasb]
71 *
72 * Revision 3.0.3.1 1993/12/20 21:07:59 gupta
73 * Expanded C O P Y R I G H T
74 * [1993/12/17 22:19:43 gupta]
75 *
76 * Revision 3.0 1992/12/31 22:08:45 ede
77 * Initial revision for OSF/1 R1.3
78 *
79 * Revision 1.6.2.2 1992/01/22 22:14:42 gmf
80 * Added TH_SW_TASK_SWAPPING flag to swap_state. This state
81 * indicates that the thread is about to be swapped out by
82 * the task swapping mechanism, and prevents the thread
83 * swapper from doing it first.
84 * [1992/01/20 22:06:36 gmf]
85 *
86 * Revision 1.6 1991/08/15 19:16:39 devrcs
87 * Prototype all functions, change name to thread_swapper_init.
88 * [91/06/26 10:45:44 jeffc]
89 *
90 * Revision 1.5 91/06/10 16:19:07 devrcs
91 * Additions to allow thread to be made non-swappable on swap in,
92 * change thread_swapin interface.
93 * [91/05/30 15:56:38 jeffc]
94 *
95 * Revision 1.4 91/03/04 17:07:14 devrcs
96 * A small step toward ansiC: commented else/endif/elif trailers.
97 * [91/01/12 16:39:43 dwm]
98 *
99 * Revision 1.3 90/10/07 13:57:13 devrcs
100 * Added EndLog Marker.
101 * [90/09/28 09:59:56 gm]
102 *
103 * Revision 1.2 90/01/02 20:06:28 gm
104 * Fixes for first snapshot.
105 *
106 * Revision 1.1 89/10/16 19:36:28 gm
107 * Mach 2.5 and Encore 0.6 merge
108 *
109 * Revision 2.4 89/03/09 20:17:07 rpd
110 * More cleanup.
111 *
112 * Revision 2.3 89/02/25 18:10:24 gm0w
113 * Kernel code cleanup.
114 * Put entire file under #indef KERNEL.
115 * [89/02/15 mrt]
116 *
117 * Revision 0.0 88/01/21 dbg
118 * Created.
119 * [88/01/21 dbg]
120 *
121 * $EndLog$
122 */
123 /*
124 * File: kern/thread_swap.h
125 *
126 * Declarations of thread swap_states and swapping routines.
127 */
128
129 /*
130 * Swap states for threads.
131 */
132
133 #ifndef _KERN_THREAD_SWAP_H_
134 #define _KERN_THREAD_SWAP_H_
135
136 #if 1 /* USED CODE */
137
138 /*
139 * exported routines
140 */
141
142 extern void swapper_init();
143 extern void thread_swapin(thread_t thread);
144 extern void thread_doswapin(thread_t thread);
145 extern void swapin_thread();
146
147 #define thread_swappable(act, bool)
148
149
150 #else /* UNUSED SWAPPER CODE */
151 #if THREAD_SWAPPER
152 #define TH_SW_STATE 7 /* mask of swap state bits */
153 #define TH_SW_UNSWAPPABLE 1 /* not swappable */
154 #define TH_SW_IN 2 /* swapped in */
155 #define TH_SW_GOING_OUT 3 /* being swapped out */
156 #define TH_SW_WANT_IN 4 /* being swapped out, but should
157 immediately be swapped in */
158 #define TH_SW_OUT 5 /* swapped out */
159 #define TH_SW_COMING_IN 6 /* queued for swapin, or being
160 swapped in */
161
162 #define TH_SW_MAKE_UNSWAPPABLE 8 /*not state, command to swapin_thread */
163
164 /*
165 * This flag is only used by the task swapper. It implies that
166 * the thread is about to be swapped, but hasn't yet.
167 */
168 #define TH_SW_TASK_SWAPPING 0x10
169
170 /*
171 * exported routines
172 */
173 extern void thread_swapper_init(void);
174 extern void swapin_thread(void);
175 extern void swapout_thread(void);
176 extern void thread_doswapin(thread_act_t thr_act);
177 extern void thread_swapin(thread_act_t thr_act,
178 boolean_t make_unswappable);
179 extern boolean_t
180 thread_swapin_blocking(thread_act_t thr_act);
181 extern void thread_swapout(thread_act_t thr_act);
182 extern void swapout_threads(boolean_t now);
183 extern void thread_swapout_enqueue(thread_act_t thr_act);
184 extern void thread_swap_disable(thread_act_t thr_act);
185
186 extern void thread_swappable(thread_act_t thr_act, boolean_t swappable);
187
188 #else /* THREAD_SWAPPER */
189 #define thread_swappable(thr_act, swappable)
190 #endif /* THREAD_SWAPPER */
191
192 #endif /* UNUSED SWAPPER CODE */
193
194 #endif /*_KERN_THREAD_SWAP_H_*/
195