FreeBSD/Linux Kernel Cross Reference
sys/norma/xmm_obj.h
1 /*
2 * Mach Operating System
3 * Copyright (c) 1991 Carnegie Mellon University
4 * All Rights Reserved.
5 *
6 * Permission to use, copy, modify and distribute this software and its
7 * documentation is hereby granted, provided that both the copyright
8 * notice and this permission notice appear in all copies of the
9 * software, derivative works or modified versions, and any portions
10 * thereof, and that both notices appear in supporting documentation.
11 *
12 * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS
13 * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR
14 * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
15 *
16 * Carnegie Mellon requests users of this software to return to
17 *
18 * Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU
19 * School of Computer Science
20 * Carnegie Mellon University
21 * Pittsburgh PA 15213-3890
22 *
23 * any improvements or extensions that they make and grant Carnegie the
24 * rights to redistribute these changes.
25 */
26 /*
27 * HISTORY
28 * $Log: xmm_obj.h,v $
29 * Revision 2.5 92/03/10 16:29:25 jsb
30 * Merged in norma branch changes as of NORMA_MK7.
31 * [92/03/09 12:51:33 jsb]
32 *
33 * Revision 2.4.2.2 92/02/21 11:27:30 jsb
34 * Changed mobj field in xmm_reply to kobj, and added kobj_held field.
35 * Changed xmm_reply_allocate_send_once macro accordingly.
36 * [92/02/16 18:23:36 jsb]
37 *
38 * Added explicit name paramater to xmm_decl, since not all cpps
39 * recoginize arguments inside quotes. Sigh.
40 * [92/02/16 14:14:38 jsb]
41 *
42 * Defined more robust xmm_decl.
43 * [92/02/09 12:55:40 jsb]
44 *
45 * Revision 2.4.2.1 92/01/21 21:54:33 jsb
46 * Moved IKOT_XMM_* definitions to kern/ipc_kobject.h.
47 * [92/01/21 18:21:45 jsb]
48 *
49 * De-linted. Supports new (dlb) memory object routines.
50 * Supports arbitrary reply ports to lock_request, etc.
51 * Converted mach_port_t (and port_t) to ipc_port_t.
52 * Added XMM_USE_MACROS conditional, off by default,
53 * which toggles between macros and functions for invocation
54 * routines. (Right now only the functions are provided.)
55 * [92/01/20 17:27:35 jsb]
56 *
57 * Revision 2.4 91/07/01 08:26:25 jsb
58 * Removed malloc, free definitions.
59 * Added xmm_decl macro.
60 * Renamed Xobj_allocate to xmm_obj_allocate.
61 * Added zone element to xmm_class structure.
62 * [91/06/29 14:41:25 jsb]
63 *
64 * Revision 2.3 91/06/18 20:53:00 jsb
65 * Removed bogus include.
66 * [91/06/18 19:06:29 jsb]
67 *
68 * Revision 2.2 91/06/17 15:48:28 jsb
69 * First checkin.
70 * [91/06/17 11:03:46 jsb]
71 *
72 */
73 /*
74 * File: norma/xmm_obj.h
75 * Author: Joseph S. Barrera III
76 * Date: 1991
77 *
78 * Common definitions for xmm system.
79 */
80
81 #ifndef _NORMA_XMM_OBJ_H_
82 #define _NORMA_XMM_OBJ_H_
83
84 #ifdef KERNEL
85 #include <mach/std_types.h> /* For pointer_t */
86 #include <mach/mach_types.h>
87 #include <mach/kern_return.h>
88 #include <mach/boolean.h>
89 #include <mach/vm_prot.h>
90 #include <mach/message.h>
91 #include <kern/zalloc.h>
92 #include <kern/assert.h>
93 #else KERNEL
94 #include <mach.h>
95 #include <xmm_hash.h>
96 #endif KERNEL
97
98 typedef kern_return_t (*kern_routine_t)();
99 typedef void (*void_routine_t)();
100
101 typedef struct xmm_class *xmm_class_t;
102 typedef struct xmm_obj *xmm_obj_t;
103 typedef struct xmm_reply *xmm_reply_t;
104
105 #define XMM_CLASS_NULL ((xmm_class_t) 0)
106 #define XMM_OBJ_NULL ((xmm_obj_t) 0)
107 #define XMM_REPLY_NULL ((xmm_reply_t) 0)
108
109 #define MOBJ ((struct mobj *) mobj)
110 #define KOBJ ((struct kobj *) kobj)
111
112 struct xmm_class {
113 kern_routine_t m_init;
114 kern_routine_t m_terminate;
115 void_routine_t m_deallocate;
116 kern_routine_t m_copy;
117 kern_routine_t m_data_request;
118 kern_routine_t m_data_unlock;
119 kern_routine_t m_data_write;
120 kern_routine_t m_lock_completed;
121 kern_routine_t m_supply_completed;
122 kern_routine_t m_data_return;
123 kern_routine_t m_change_completed;
124
125 kern_routine_t k_data_unavailable;
126 kern_routine_t k_get_attributes;
127 kern_routine_t k_lock_request;
128 kern_routine_t k_data_error;
129 kern_routine_t k_set_ready;
130 kern_routine_t k_destroy;
131 kern_routine_t k_data_supply;
132
133 char * c_name;
134 int c_size;
135 zone_t c_zone;
136 };
137
138 #if __STDC__
139
140 #define xmm_decl(class, name, size) \
141 extern kern_return_t m_ ## class ## _init(); \
142 extern kern_return_t m_ ## class ## _terminate(); \
143 extern void m_ ## class ## _deallocate(); \
144 extern kern_return_t m_ ## class ## _copy(); \
145 extern kern_return_t m_ ## class ## _data_request(); \
146 extern kern_return_t m_ ## class ## _data_unlock(); \
147 extern kern_return_t m_ ## class ## _data_write(); \
148 extern kern_return_t m_ ## class ## _lock_completed(); \
149 extern kern_return_t m_ ## class ## _supply_completed(); \
150 extern kern_return_t m_ ## class ## _data_return(); \
151 extern kern_return_t m_ ## class ## _change_completed(); \
152 extern kern_return_t k_ ## class ## _data_unavailable(); \
153 extern kern_return_t k_ ## class ## _get_attributes(); \
154 extern kern_return_t k_ ## class ## _lock_request(); \
155 extern kern_return_t k_ ## class ## _data_error(); \
156 extern kern_return_t k_ ## class ## _set_ready(); \
157 extern kern_return_t k_ ## class ## _destroy(); \
158 extern kern_return_t k_ ## class ## _data_supply(); \
159 \
160 struct xmm_class class ## _class = { \
161 m_ ## class ## _init, \
162 m_ ## class ## _terminate, \
163 m_ ## class ## _deallocate, \
164 m_ ## class ## _copy, \
165 m_ ## class ## _data_request, \
166 m_ ## class ## _data_unlock, \
167 m_ ## class ## _data_write, \
168 m_ ## class ## _lock_completed, \
169 m_ ## class ## _supply_completed, \
170 m_ ## class ## _data_return, \
171 m_ ## class ## _change_completed, \
172 \
173 k_ ## class ## _data_unavailable, \
174 k_ ## class ## _get_attributes, \
175 k_ ## class ## _lock_request, \
176 k_ ## class ## _data_error, \
177 k_ ## class ## _set_ready, \
178 k_ ## class ## _destroy, \
179 k_ ## class ## _data_supply, \
180 \
181 name, \
182 size, \
183 ZONE_NULL, \
184 }
185
186 #else __STDC__
187
188 #define xmm_decl(class, name, size) \
189 extern kern_return_t m_/**/class/**/_init(); \
190 extern kern_return_t m_/**/class/**/_terminate(); \
191 extern void m_/**/class/**/_deallocate(); \
192 extern kern_return_t m_/**/class/**/_copy(); \
193 extern kern_return_t m_/**/class/**/_data_request(); \
194 extern kern_return_t m_/**/class/**/_data_unlock(); \
195 extern kern_return_t m_/**/class/**/_data_write(); \
196 extern kern_return_t m_/**/class/**/_lock_completed(); \
197 extern kern_return_t m_/**/class/**/_supply_completed(); \
198 extern kern_return_t m_/**/class/**/_data_return(); \
199 extern kern_return_t m_/**/class/**/_change_completed(); \
200 extern kern_return_t k_/**/class/**/_data_unavailable(); \
201 extern kern_return_t k_/**/class/**/_get_attributes(); \
202 extern kern_return_t k_/**/class/**/_lock_request(); \
203 extern kern_return_t k_/**/class/**/_data_error(); \
204 extern kern_return_t k_/**/class/**/_set_ready(); \
205 extern kern_return_t k_/**/class/**/_destroy(); \
206 extern kern_return_t k_/**/class/**/_data_supply(); \
207 \
208 struct xmm_class class/**/_class = { \
209 m_/**/class/**/_init, \
210 m_/**/class/**/_terminate, \
211 m_/**/class/**/_deallocate, \
212 m_/**/class/**/_copy, \
213 m_/**/class/**/_data_request, \
214 m_/**/class/**/_data_unlock, \
215 m_/**/class/**/_data_write, \
216 m_/**/class/**/_lock_completed, \
217 m_/**/class/**/_supply_completed, \
218 m_/**/class/**/_data_return, \
219 m_/**/class/**/_change_completed, \
220 \
221 k_/**/class/**/_data_unavailable, \
222 k_/**/class/**/_get_attributes, \
223 k_/**/class/**/_lock_request, \
224 k_/**/class/**/_data_error, \
225 k_/**/class/**/_set_ready, \
226 k_/**/class/**/_destroy, \
227 k_/**/class/**/_data_supply, \
228 \
229 name, \
230 size, \
231 ZONE_NULL, \
232 }
233
234 #endif __STDC__
235
236 struct xmm_obj {
237 int refcount;
238 xmm_class_t class;
239 xmm_obj_t m_mobj;
240 xmm_obj_t m_kobj;
241 xmm_obj_t k_mobj;
242 xmm_obj_t k_kobj;
243 };
244
245 struct xmm_reply {
246 ipc_port_t reply_to;
247 mach_msg_type_name_t
248 reply_to_type;
249 xmm_obj_t kobj;
250 xmm_obj_t kobj_held;
251 ipc_port_t reply_proxy;
252 };
253
254 xmm_reply_t xmm_k_reply();
255 xmm_class_t xmm_m_reply();
256
257 kern_return_t m_interpose_init();
258 kern_return_t m_interpose_terminate();
259 kern_return_t m_interpose_copy();
260 kern_return_t m_interpose_data_request();
261 kern_return_t m_interpose_data_unlock();
262 kern_return_t m_interpose_data_write();
263 kern_return_t m_interpose_lock_completed();
264 kern_return_t m_interpose_supply_completed();
265 kern_return_t m_interpose_data_return();
266 kern_return_t m_interpose_change_completed();
267 kern_return_t k_interpose_data_unavailable();
268 kern_return_t k_interpose_get_attributes();
269 kern_return_t k_interpose_lock_request();
270 kern_return_t k_interpose_data_error();
271 kern_return_t k_interpose_set_ready();
272 kern_return_t k_interpose_destroy();
273 kern_return_t k_interpose_data_supply();
274
275 kern_return_t m_invalid_init();
276 kern_return_t m_invalid_terminate();
277 kern_return_t m_invalid_copy();
278 kern_return_t m_invalid_data_request();
279 kern_return_t m_invalid_data_unlock();
280 kern_return_t m_invalid_data_write();
281 kern_return_t m_invalid_lock_completed();
282 kern_return_t m_invalid_supply_completed();
283 kern_return_t m_invalid_data_return();
284 kern_return_t m_invalid_change_completed();
285 kern_return_t k_invalid_data_unavailable();
286 kern_return_t k_invalid_get_attributes();
287 kern_return_t k_invalid_lock_request();
288 kern_return_t k_invalid_data_error();
289 kern_return_t k_invalid_set_ready();
290 kern_return_t k_invalid_destroy();
291 kern_return_t k_invalid_data_supply();
292
293 kern_return_t xmm_obj_allocate();
294 kern_return_t xmm_reply_allocate();
295 xmm_reply_t convert_port_to_reply();
296
297 extern ipc_port_t remote_host_priv();
298
299 /*
300 * Central repository of magic reply_to_types uses for non-port reply_tos.
301 */
302 #define XMM_SVM_REPLY (MACH_MSG_TYPE_LAST + 1)
303 #define XMM_SPLIT_REPLY (MACH_MSG_TYPE_LAST + 2)
304 #define XMM_BUFFER_REPLY (MACH_MSG_TYPE_LAST + 3)
305
306 #define xmm_reply_allocate_send_once(kobj, reply_to, replyp)\
307 xmm_reply_allocate((kobj), (reply_to), MACH_MSG_TYPE_PORT_SEND_ONCE, (replyp))
308
309 /*
310 * More meaningful parameter constants for memory_object calls.
311 */
312 #define OBJECT_READY_FALSE FALSE
313 #define MAY_CACHE_FALSE FALSE
314 #define USE_OLD_PAGEOUT_FALSE FALSE
315 #define PRECIOUS_FALSE FALSE
316
317 #define OBJECT_READY_TRUE TRUE
318 #define MAY_CACHE_TRUE TRUE
319 #define USE_OLD_PAGEOUT_TRUE TRUE
320 #define PRECIOUS_TRUE TRUE
321
322 #ifndef KERNEL
323 char *malloc();
324 int free();
325
326 /*
327 * XXX should find or define vm_page_shift
328 */
329 #define atop(addr) ((addr) / vm_page_size)
330 #define ptoa(page) ((page) * vm_page_size)
331 #endif KERNEL
332
333 #define XMM_USE_MACROS 0
334
335 #ifdef lint
336 #undef XMM_USE_MACROS
337 #define XMM_USE_MACROS 0
338 #endif
339
340 #if XMM_USE_MACROS
341
342 @@@_need_to_rewrite_macros_before_this_option_can_be_enabled_@@@;
343
344 #else XMM_USE_MACROS
345
346 #endif XMM_USE_MACROS
347
348 #endif _NORMA_XMM_OBJ_H_
Cache object: cee87e7646a2a89c7f35adacbc79bc0b
|