|
|
1.1 root 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_FREE_COPYRIGHT@
24: */
25: /*
26: * Mach Operating System
27: * Copyright (c) 1991,1990,1989 Carnegie Mellon University
28: * All Rights Reserved.
29: *
30: * Permission to use, copy, modify and distribute this software and its
31: * documentation is hereby granted, provided that both the copyright
32: * notice and this permission notice appear in all copies of the
33: * software, derivative works or modified versions, and any portions
34: * thereof, and that both notices appear in supporting documentation.
35: *
36: * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
37: * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR
38: * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
39: *
40: * Carnegie Mellon requests users of this software to return to
41: *
42: * Software Distribution Coordinator or [email protected]
43: * School of Computer Science
44: * Carnegie Mellon University
45: * Pittsburgh PA 15213-3890
46: *
47: * any improvements or extensions that they make and grant Carnegie Mellon
48: * the rights to redistribute these changes.
49: */
50: /*
51: */
52: /*
53: * File: mach/mach_port.defs
54: * Author: Rich Draves
55: *
56: * Exported kernel calls.
57: */
58:
59: subsystem
60: #if KERNEL_SERVER
61: KernelServer
62: #endif KERNEL_SERVER
63: vm_task 3800;
64:
65: #include <mach/std_types.defs>
66: #include <mach/mach_types.defs>
67: #include <mach_debug/mach_debug_types.defs>
68:
69: /*
70: * Returns information about the contents of the virtual
71: * address space of the target task at the specified
72: * address. The returned protection, inheritance, sharing
73: * and memory object values apply to the entire range described
74: * by the address range returned; the memory object offset
75: * corresponds to the beginning of the address range.
76: * [If the specified address is not allocated, the next
77: * highest address range is described. If no addresses beyond
78: * the one specified are allocated, the call returns KERN_NO_SPACE.]
79: */
80: routine vm_region(
81: target_task : vm_map_t;
82: inout address : vm_address_t;
83: out size : vm_size_t;
84: flavor : vm_region_flavor_t;
85: out info : vm_region_info_t, CountInOut;
86: out object_name : memory_object_name_t =
87: MACH_MSG_TYPE_MOVE_SEND
88: ctype: mach_port_t);
89:
90: /*
91: * Allocate zero-filled memory in the address space
92: * of the target task, either at the specified address,
93: * or wherever space can be found (if anywhere is TRUE),
94: * of the specified size. The address at which the
95: * allocation actually took place is returned.
96: */
97: routine vm_allocate(
98: target_task : vm_task_entry_t;
99: inout address : vm_address_t;
100: size : vm_size_t;
101: flags : int);
102:
103: /*
104: * Deallocate the specified range from the virtual
105: * address space of the target task.
106: */
107: routine vm_deallocate(
108: target_task : vm_task_entry_t;
109: address : vm_address_t;
110: size : vm_size_t);
111:
112: /*
113: * Set the current or maximum protection attribute
114: * for the specified range of the virtual address
115: * space of the target task. The current protection
116: * limits the memory access rights of threads within
117: * the task; the maximum protection limits the accesses
118: * that may be given in the current protection.
119: * Protections are specified as a set of {read, write, execute}
120: * *permissions*.
121: */
122: routine vm_protect(
123: target_task : vm_task_entry_t;
124: address : vm_address_t;
125: size : vm_size_t;
126: set_maximum : boolean_t;
127: new_protection : vm_prot_t);
128:
129: /*
130: * Set the inheritance attribute for the specified range
131: * of the virtual address space of the target task.
132: * The inheritance value is one of {none, copy, share}, and
133: * specifies how the child address space should acquire
134: * this memory at the time of a task_create call.
135: */
136: routine vm_inherit(
137: target_task : vm_task_entry_t;
138: address : vm_address_t;
139: size : vm_size_t;
140: new_inheritance : vm_inherit_t);
141:
142: /*
143: * Returns the contents of the specified range of the
144: * virtual address space of the target task. [The
145: * range must be aligned on a virtual page boundary,
146: * and must be a multiple of pages in extent. The
147: * protection on the specified range must permit reading.]
148: */
149: routine vm_read(
150: target_task : vm_map_t;
151: address : vm_address_t;
152: size : vm_size_t;
153: out data : pointer_t);
154:
155: /*
156: * List corrollary to vm_read, returns mapped contents of specified
157: * ranges within target address space.
158: */
159: routine vm_read_list(
160: target_task : vm_map_t;
161: inout data_list : vm_read_entry_t;
162: count : natural_t);
163:
164: /*
165: * Writes the contents of the specified range of the
166: * virtual address space of the target task. [The
167: * range must be aligned on a virtual page boundary,
168: * and must be a multiple of pages in extent. The
169: * protection on the specified range must permit writing.]
170: */
171: routine vm_write(
172: target_task : vm_map_t;
173: address : vm_address_t;
174: data : pointer_t);
175:
176: /*
177: * Copy the contents of the source range of the virtual
178: * address space of the target task to the destination
179: * range in that same address space. [Both of the
180: * ranges must be aligned on a virtual page boundary,
181: * and must be multiples of pages in extent. The
182: * protection on the source range must permit reading,
183: * and the protection on the destination range must
184: * permit writing.]
185: */
186: routine vm_copy(
187: target_task : vm_map_t;
188: source_address : vm_address_t;
189: size : vm_size_t;
190: dest_address : vm_address_t);
191:
192: /*
193: * Returns the contents of the specified range of the
194: * virtual address space of the target task. [There
195: * are no alignment restrictions, and the results will
196: * overwrite the area pointed to by data - which must
197: * already exist. The protection on the specified range
198: * must permit reading.]
199: */
200: routine vm_read_overwrite(
201: target_task : vm_map_t;
202: address : vm_address_t;
203: size : vm_size_t;
204: data : vm_address_t;
205: out outsize : vm_size_t);
206:
207:
208: routine vm_msync(
209: target_task : vm_map_t;
210: address : vm_address_t;
211: size : vm_size_t;
212: sync_flags : vm_sync_t );
213:
214: /*
215: * Set the paging behavior attribute for the specified range
216: * of the virtual address space of the target task.
217: * The behavior value is one of {default, random, forward
218: * sequential, reverse sequential} and indicates the expected
219: * page reference pattern for the specified range.
220: */
221: routine vm_behavior_set(
222: target_task : vm_map_t;
223: address : vm_address_t;
224: size : vm_size_t;
225: new_behavior : vm_behavior_t);
226:
227:
228: /*
229: * Map a user-defined memory object into the virtual address
230: * space of the target task. If desired (anywhere is TRUE),
231: * the kernel will find a suitable address range of the
232: * specified size; else, the specific address will be allocated.
233: *
234: * The beginning address of the range will be aligned on a virtual
235: * page boundary, be at or beyond the address specified, and
236: * meet the mask requirements (bits turned on in the mask must not
237: * be turned on in the result); the size of the range, in bytes,
238: * will be rounded up to an integral number of virtual pages.
239: *
240: * The memory in the resulting range will be associated with the
241: * specified memory object, with the beginning of the memory range
242: * referring to the specified offset into the memory object.
243: *
244: * The mapping will take the current and maximum protections and
245: * the inheritance attributes specified; see the vm_protect and
246: * vm_inherit calls for a description of these attributes.
247: *
248: * If desired (copy is TRUE), the memory range will be filled
249: * with a copy of the data from the memory object; this copy will
250: * be private to this mapping in this target task. Otherwise,
251: * the memory in this mapping will be shared with other mappings
252: * of the same memory object at the same offset (in this task or
253: * in other tasks). [The Mach kernel only enforces shared memory
254: * consistency among mappings on one host with similar page alignments.
255: * The user-defined memory manager for this object is responsible
256: * for further consistency.]
257: */
258: routine vm_map(
259: target_task : vm_task_entry_t;
260: inout address : vm_address_t;
261: size : vm_size_t;
262: mask : vm_address_t;
263: flags : int;
264: memory_object : memory_object_t;
265: offset : vm_offset_t;
266: copy : boolean_t;
267: cur_protection : vm_prot_t;
268: max_protection : vm_prot_t;
269: inheritance : vm_inherit_t);
270:
271: /*
272: * Set/Get special properties of memory associated
273: * to some virtual address range, such as cachability,
274: * migrability, replicability. Machine-dependent.
275: */
276: routine vm_machine_attribute(
277: target_task : vm_map_t;
278: address : vm_address_t;
279: size : vm_size_t;
280: attribute : vm_machine_attribute_t;
281: inout value : vm_machine_attribute_val_t);
282:
283: /*
284: * Map portion of a task's address space.
285: */
286: routine vm_remap(
287: target_task : vm_map_t;
288: inout target_address : vm_address_t;
289: size : vm_size_t;
290: mask : vm_address_t;
291: anywhere : boolean_t;
292: src_task : vm_map_t;
293: src_address : vm_address_t;
294: copy : boolean_t;
295: out cur_protection : vm_prot_t;
296: out max_protection : vm_prot_t;
297: inheritance : vm_inherit_t);
298:
299: /*
300: * Require that all future virtual memory allocation
301: * allocates wired memory. Setting must_wire to FALSE
302: * disables the wired future feature.
303: */
304: routine task_wire(
305: target_task : vm_map_t;
306: must_wire : boolean_t);
307:
308:
309: /*
310: * Allow application level processes to create named entries which
311: * correspond to mapped portions of their address space. These named
312: * entries can then be manipulated, shared with other processes in
313: * other address spaces and ultimately mapped in ohter address spaces
314: */
315:
316: routine mach_make_memory_entry(
317: target_task :vm_map_t;
318: inout size :vm_size_t;
319: offset :vm_offset_t;
320: permission :vm_prot_t;
321: out object_handle :mach_port_move_send_t;
322: parent_entry :mem_entry_name_port_t);
323:
324: /*
325: * Give the caller information on the given location in a virtual
326: * address space. If a page is mapped return ref and dirty info.
327: */
328: routine vm_map_page_query(
329: target_map :vm_map_t;
330: offset :vm_offset_t;
331: out disposition :integer_t;
332: out ref_count :integer_t);
333:
334: /*
335: * Returns information about a region of memory.
336: * Includes info about the chain of objects rooted at that region.
337: * Only available in MACH_VM_DEBUG compiled kernels,
338: * otherwise returns KERN_FAILURE.
339: */
340: routine mach_vm_region_info(
341: task : vm_map_t;
342: address : vm_address_t;
343: out region : vm_info_region_t;
344: out objects : vm_info_object_array_t);
345:
346: routine vm_mapped_pages_info(
347: task : vm_map_t;
348: out pages : page_address_array_t);
349:
350: /*
351: * Allow application level processes to create named entries which
352: * are backed by sub-maps which describe regions of address space.
353: * These regions of space can have objects mapped into them and
354: * in turn, can be mapped into target address spaces
355: */
356:
357:
358: routine vm_region_object_create(
359: target_task :vm_map_t;
360: in size :vm_size_t;
361: out region_object :mach_port_move_send_t);
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.