]> git.saurik.com Git - apple/xnu.git/blame - osfmk/kern/queue.c
xnu-792.6.61.tar.gz
[apple/xnu.git] / osfmk / kern / queue.c
CommitLineData
1c79356b
A
1/*
2 * Copyright (c) 2000 Apple Computer, Inc. All rights reserved.
3 *
4 * @APPLE_LICENSE_HEADER_START@
5 *
37839358
A
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.
1c79356b 11 *
37839358
A
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
1c79356b
A
14 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
15 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
37839358
A
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.
1c79356b
A
19 *
20 * @APPLE_LICENSE_HEADER_END@
21 */
22/*
23 * @OSF_COPYRIGHT@
24 */
25/*
26 * HISTORY
27 *
28 * Revision 1.1.1.1 1998/09/22 21:05:33 wsanchez
29 * Import of Mac OS X kernel (~semeria)
30 *
31 * Revision 1.1.1.1 1998/03/07 02:25:55 wsanchez
32 * Import of OSF Mach kernel (~mburg)
33 *
34 * Revision 1.1.10.3 1995/03/15 17:21:19 bruel
35 * compile only if !__GNUC__.
36 * [95/03/09 bruel]
37 *
38 * Revision 1.1.10.2 1995/01/06 19:48:05 devrcs
39 * mk6 CR668 - 1.3b26 merge
40 * * Revision 1.1.3.5 1994/05/06 18:51:43 tmt
41 * Merge in DEC Alpha changes to osc1.3b19.
42 * Merge Alpha changes into osc1.312b source code.
43 * Remove ifdef sun around insque and remque.
44 * * End1.3merge
45 * [1994/11/04 09:29:15 dwm]
46 *
47 * Revision 1.1.10.1 1994/09/23 02:25:00 ezf
48 * change marker to not FREE
49 * [1994/09/22 21:35:34 ezf]
50 *
51 * Revision 1.1.3.3 1993/07/28 17:16:26 bernard
52 * CR9523 -- Prototypes.
53 * [1993/07/21 17:00:38 bernard]
54 *
55 * Revision 1.1.3.2 1993/06/02 23:39:41 jeffc
56 * Added to OSF/1 R1.3 from NMK15.0.
57 * [1993/06/02 21:13:58 jeffc]
58 *
59 * Revision 1.1 1992/09/30 02:09:52 robert
60 * Initial revision
61 *
62 * $EndLog$
63 */
64/* CMU_HIST */
65/*
66 * Revision 2.4 91/05/14 16:45:45 mrt
67 * Correcting copyright
68 *
69 * Revision 2.3 91/05/08 12:48:22 dbg
70 * Compile queue routines on vax.
71 * [91/03/26 dbg]
72 *
73 * Revision 2.2 91/02/05 17:28:38 mrt
74 * Changed to new Mach copyright
75 * [91/02/01 16:16:22 mrt]
76 *
77 * Revision 2.1 89/08/03 15:51:47 rwd
78 * Created.
79 *
80 * 17-Mar-87 David Golub (dbg) at Carnegie-Mellon University
81 * Created from routines written by David L. Black.
82 *
83 */
84/* CMU_ENDHIST */
85/*
86 * Mach Operating System
87 * Copyright (c) 1991,1990,1989,1988,1987 Carnegie Mellon University
88 * All Rights Reserved.
89 *
90 * Permission to use, copy, modify and distribute this software and its
91 * documentation is hereby granted, provided that both the copyright
92 * notice and this permission notice appear in all copies of the
93 * software, derivative works or modified versions, and any portions
94 * thereof, and that both notices appear in supporting documentation.
95 *
96 * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
97 * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR
98 * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
99 *
100 * Carnegie Mellon requests users of this software to return to
101 *
102 * Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU
103 * School of Computer Science
104 * Carnegie Mellon University
105 * Pittsburgh PA 15213-3890
106 *
107 * any improvements or extensions that they make and grant Carnegie Mellon
108 * the rights to redistribute these changes.
109 */
110/*
111 */
112
113/*
114 * Routines to implement queue package.
115 */
116
117#include <kern/queue.h>
118
119#if !defined(__GNUC__)
120
121/*
122 * Insert element at head of queue.
123 */
124void
125enqueue_head(
126 register queue_t que,
127 register queue_entry_t elt)
128{
129 elt->next = que->next;
130 elt->prev = que;
131 elt->next->prev = elt;
132 que->next = elt;
133}
134
135/*
136 * Insert element at tail of queue.
137 */
138void
139enqueue_tail(
140 register queue_t que,
141 register queue_entry_t elt)
142{
143 elt->next = que;
144 elt->prev = que->prev;
145 elt->prev->next = elt;
146 que->prev = elt;
147}
148
149/*
150 * Remove and return element at head of queue.
151 */
152queue_entry_t
153dequeue_head(
154 register queue_t que)
155{
156 register queue_entry_t elt;
157
158 if (que->next == que)
159 return((queue_entry_t)0);
160
161 elt = que->next;
162 elt->next->prev = que;
163 que->next = elt->next;
164 return(elt);
165}
166
167/*
168 * Remove and return element at tail of queue.
169 */
170queue_entry_t
171dequeue_tail(
172 register queue_t que)
173{
174 register queue_entry_t elt;
175
176 if (que->prev == que)
177 return((queue_entry_t)0);
178
179 elt = que->prev;
180 elt->prev->next = que;
181 que->prev = elt->prev;
182 return(elt);
183}
184
185/*
186 * Remove arbitrary element from queue.
187 * Does not check whether element is on queue - the world
188 * will go haywire if it isn't.
189 */
190
191/*ARGSUSED*/
192void
193remqueue(
194 queue_t que,
195 register queue_entry_t elt)
196{
197 elt->next->prev = elt->prev;
198 elt->prev->next = elt->next;
199}
200
201/*
202 * Routines to directly imitate the VAX hardware queue
203 * package.
204 */
205void
206insque(
207 register queue_entry_t entry,
208 register queue_entry_t pred)
209{
210 entry->next = pred->next;
211 entry->prev = pred;
212 (pred->next)->prev = entry;
213 pred->next = entry;
214}
215
216int
217remque(
218 register queue_entry_t elt)
219{
220 (elt->next)->prev = elt->prev;
221 (elt->prev)->next = elt->next;
222 return((int)elt);
223}
224
225#endif