1#ifndef _memory_object_control_user_
2#define _memory_object_control_user_
3
4/* Module memory_object_control */
5
6#include <string.h>
7#include <mach/ndr.h>
8#include <mach/boolean.h>
9#include <mach/kern_return.h>
10#include <mach/notify.h>
11#include <mach/mach_types.h>
12#include <mach/message.h>
13#include <mach/mig_errors.h>
14#include <mach/port.h>
15
16/* BEGIN MIG_STRNCPY_ZEROFILL CODE */
17
18#if defined(__has_include)
19#if __has_include(<mach/mig_strncpy_zerofill_support.h>)
20#ifndef USING_MIG_STRNCPY_ZEROFILL
21#define USING_MIG_STRNCPY_ZEROFILL
22#endif
23#ifndef __MIG_STRNCPY_ZEROFILL_FORWARD_TYPE_DECLS__
24#define __MIG_STRNCPY_ZEROFILL_FORWARD_TYPE_DECLS__
25#ifdef __cplusplus
26extern "C" {
27#endif
28 extern int mig_strncpy_zerofill(char *dest, const char *src, int len) __attribute__((weak_import));
29#ifdef __cplusplus
30}
31#endif
32#endif /* __MIG_STRNCPY_ZEROFILL_FORWARD_TYPE_DECLS__ */
33#endif /* __has_include(<mach/mig_strncpy_zerofill_support.h>) */
34#endif /* __has_include */
35
36/* END MIG_STRNCPY_ZEROFILL CODE */
37
38#if (__MigKernelSpecificCode) || (_MIG_KERNEL_SPECIFIC_CODE_)
39#include <kern/ipc_mig.h>
40#endif /* __MigKernelSpecificCode */
41
42#ifdef AUTOTEST
43#ifndef FUNCTION_PTR_T
44#define FUNCTION_PTR_T
45typedef void (*function_ptr_t)(mach_port_t, char *, mach_msg_type_number_t);
46typedef struct {
47 char *name;
48 function_ptr_t function;
49} function_table_entry;
50typedef function_table_entry *function_table_t;
51#endif /* FUNCTION_PTR_T */
52#endif /* AUTOTEST */
53
54#ifndef memory_object_control_MSG_COUNT
55#define memory_object_control_MSG_COUNT 12
56#endif /* memory_object_control_MSG_COUNT */
57
58#include <mach/std_types.h>
59#include <mach/mig.h>
60#include <mach/mig.h>
61#include <mach/mach_types.h>
62
63#ifdef __BeforeMigUserHeader
64__BeforeMigUserHeader
65#endif /* __BeforeMigUserHeader */
66
67#include <sys/cdefs.h>
68__BEGIN_DECLS
69
70
71/* Routine memory_object_get_attributes */
72#ifdef mig_external
73mig_external
74#else
75extern
76#endif /* mig_external */
77kern_return_t memory_object_get_attributes
78(
79 memory_object_control_t memory_control,
80 memory_object_flavor_t flavor,
81 memory_object_info_t attributes,
82 mach_msg_type_number_t *attributesCnt
83);
84
85/* Routine memory_object_change_attributes */
86#ifdef mig_external
87mig_external
88#else
89extern
90#endif /* mig_external */
91kern_return_t memory_object_change_attributes
92(
93 memory_object_control_t memory_control,
94 memory_object_flavor_t flavor,
95 memory_object_info_t attributes,
96 mach_msg_type_number_t attributesCnt
97);
98
99/* Routine memory_object_synchronize_completed */
100#ifdef mig_external
101mig_external
102#else
103extern
104#endif /* mig_external */
105kern_return_t memory_object_synchronize_completed
106(
107 memory_object_control_t memory_control,
108 memory_object_offset_t offset,
109 memory_object_size_t length
110);
111
112/* Routine memory_object_lock_request */
113#ifdef mig_external
114mig_external
115#else
116extern
117#endif /* mig_external */
118kern_return_t memory_object_lock_request
119(
120 memory_object_control_t memory_control,
121 memory_object_offset_t offset,
122 memory_object_size_t size,
123 memory_object_offset_t *resid_offset,
124 integer_t *io_errno,
125 memory_object_return_t should_return,
126 integer_t flags,
127 vm_prot_t lock_value
128);
129
130/* Routine memory_object_destroy */
131#ifdef mig_external
132mig_external
133#else
134extern
135#endif /* mig_external */
136kern_return_t memory_object_destroy
137(
138 memory_object_control_t memory_control,
139 kern_return_t reason
140);
141
142/* Routine memory_object_upl_request */
143#ifdef mig_external
144mig_external
145#else
146extern
147#endif /* mig_external */
148kern_return_t memory_object_upl_request
149(
150 memory_object_control_t memory_control,
151 memory_object_offset_t offset,
152 upl_size_t size,
153 upl_t *upl,
154 upl_page_info_array_t page_list,
155 mach_msg_type_number_t *page_listCnt,
156 integer_t cntrl_flags,
157 integer_t tag
158);
159
160/* Routine memory_object_super_upl_request */
161#ifdef mig_external
162mig_external
163#else
164extern
165#endif /* mig_external */
166kern_return_t memory_object_super_upl_request
167(
168 memory_object_control_t memory_control,
169 memory_object_offset_t offset,
170 upl_size_t size,
171 upl_size_t super_size,
172 upl_t *upl,
173 upl_page_info_array_t page_list,
174 mach_msg_type_number_t *page_listCnt,
175 integer_t cntrl_flags,
176 integer_t tag
177);
178
179/* Routine memory_object_cluster_size */
180#ifdef mig_external
181mig_external
182#else
183extern
184#endif /* mig_external */
185kern_return_t memory_object_cluster_size
186(
187 memory_object_control_t control,
188 memory_object_offset_t *start,
189 vm_size_t *length,
190 uint32_t *io_streaming,
191 memory_object_fault_info_t fault_info
192);
193
194/* Routine memory_object_page_op */
195#ifdef mig_external
196mig_external
197#else
198extern
199#endif /* mig_external */
200kern_return_t memory_object_page_op
201(
202 memory_object_control_t memory_control,
203 memory_object_offset_t offset,
204 integer_t ops,
205 uint32_t *phys_entry,
206 integer_t *flags
207);
208
209/* Routine memory_object_recover_named */
210#ifdef mig_external
211mig_external
212#else
213extern
214#endif /* mig_external */
215kern_return_t memory_object_recover_named
216(
217 memory_object_control_t memory_control,
218 boolean_t wait_on_terminating
219);
220
221/* Routine memory_object_release_name */
222#ifdef mig_external
223mig_external
224#else
225extern
226#endif /* mig_external */
227kern_return_t memory_object_release_name
228(
229 memory_object_control_t memory_control,
230 integer_t flags
231);
232
233/* Routine memory_object_range_op */
234#ifdef mig_external
235mig_external
236#else
237extern
238#endif /* mig_external */
239kern_return_t memory_object_range_op
240(
241 memory_object_control_t memory_control,
242 memory_object_offset_t offset_beg,
243 memory_object_offset_t offset_end,
244 integer_t ops,
245 integer_t *range
246);
247
248__END_DECLS
249
250/********************** Caution **************************/
251/* The following data types should be used to calculate */
252/* maximum message sizes only. The actual message may be */
253/* smaller, and the position of the arguments within the */
254/* message layout may vary from what is presented here. */
255/* For example, if any of the arguments are variable- */
256/* sized, and less than the maximum is sent, the data */
257/* will be packed tight in the actual message to reduce */
258/* the presence of holes. */
259/********************** Caution **************************/
260
261/* typedefs for all requests */
262
263#ifndef __Request__memory_object_control_subsystem__defined
264#define __Request__memory_object_control_subsystem__defined
265
266#ifdef __MigPackStructs
267#pragma pack(4)
268#endif
269 typedef struct {
270 mach_msg_header_t Head;
271 NDR_record_t NDR;
272 memory_object_flavor_t flavor;
273 mach_msg_type_number_t attributesCnt;
274 } __Request__memory_object_get_attributes_t __attribute__((unused));
275#ifdef __MigPackStructs
276#pragma pack()
277#endif
278
279#ifdef __MigPackStructs
280#pragma pack(4)
281#endif
282 typedef struct {
283 mach_msg_header_t Head;
284 NDR_record_t NDR;
285 memory_object_flavor_t flavor;
286 mach_msg_type_number_t attributesCnt;
287 int attributes[6];
288 } __Request__memory_object_change_attributes_t __attribute__((unused));
289#ifdef __MigPackStructs
290#pragma pack()
291#endif
292
293#ifdef __MigPackStructs
294#pragma pack(4)
295#endif
296 typedef struct {
297 mach_msg_header_t Head;
298 NDR_record_t NDR;
299 memory_object_offset_t offset;
300 memory_object_size_t length;
301 } __Request__memory_object_synchronize_completed_t __attribute__((unused));
302#ifdef __MigPackStructs
303#pragma pack()
304#endif
305
306#ifdef __MigPackStructs
307#pragma pack(4)
308#endif
309 typedef struct {
310 mach_msg_header_t Head;
311 NDR_record_t NDR;
312 memory_object_offset_t offset;
313 memory_object_size_t size;
314 memory_object_return_t should_return;
315 integer_t flags;
316 vm_prot_t lock_value;
317 } __Request__memory_object_lock_request_t __attribute__((unused));
318#ifdef __MigPackStructs
319#pragma pack()
320#endif
321
322#ifdef __MigPackStructs
323#pragma pack(4)
324#endif
325 typedef struct {
326 mach_msg_header_t Head;
327 NDR_record_t NDR;
328 kern_return_t reason;
329 } __Request__memory_object_destroy_t __attribute__((unused));
330#ifdef __MigPackStructs
331#pragma pack()
332#endif
333
334#ifdef __MigPackStructs
335#pragma pack(4)
336#endif
337 typedef struct {
338 mach_msg_header_t Head;
339 NDR_record_t NDR;
340 memory_object_offset_t offset;
341 upl_size_t size;
342 mach_msg_type_number_t page_listCnt;
343 integer_t cntrl_flags;
344 integer_t tag;
345 } __Request__memory_object_upl_request_t __attribute__((unused));
346#ifdef __MigPackStructs
347#pragma pack()
348#endif
349
350#ifdef __MigPackStructs
351#pragma pack(4)
352#endif
353 typedef struct {
354 mach_msg_header_t Head;
355 NDR_record_t NDR;
356 memory_object_offset_t offset;
357 upl_size_t size;
358 upl_size_t super_size;
359 mach_msg_type_number_t page_listCnt;
360 integer_t cntrl_flags;
361 integer_t tag;
362 } __Request__memory_object_super_upl_request_t __attribute__((unused));
363#ifdef __MigPackStructs
364#pragma pack()
365#endif
366
367#ifdef __MigPackStructs
368#pragma pack(4)
369#endif
370 typedef struct {
371 mach_msg_header_t Head;
372 NDR_record_t NDR;
373 memory_object_fault_info_t fault_info;
374 } __Request__memory_object_cluster_size_t __attribute__((unused));
375#ifdef __MigPackStructs
376#pragma pack()
377#endif
378
379#ifdef __MigPackStructs
380#pragma pack(4)
381#endif
382 typedef struct {
383 mach_msg_header_t Head;
384 NDR_record_t NDR;
385 memory_object_offset_t offset;
386 integer_t ops;
387 } __Request__memory_object_page_op_t __attribute__((unused));
388#ifdef __MigPackStructs
389#pragma pack()
390#endif
391
392#ifdef __MigPackStructs
393#pragma pack(4)
394#endif
395 typedef struct {
396 mach_msg_header_t Head;
397 NDR_record_t NDR;
398 boolean_t wait_on_terminating;
399 } __Request__memory_object_recover_named_t __attribute__((unused));
400#ifdef __MigPackStructs
401#pragma pack()
402#endif
403
404#ifdef __MigPackStructs
405#pragma pack(4)
406#endif
407 typedef struct {
408 mach_msg_header_t Head;
409 NDR_record_t NDR;
410 integer_t flags;
411 } __Request__memory_object_release_name_t __attribute__((unused));
412#ifdef __MigPackStructs
413#pragma pack()
414#endif
415
416#ifdef __MigPackStructs
417#pragma pack(4)
418#endif
419 typedef struct {
420 mach_msg_header_t Head;
421 NDR_record_t NDR;
422 memory_object_offset_t offset_beg;
423 memory_object_offset_t offset_end;
424 integer_t ops;
425 } __Request__memory_object_range_op_t __attribute__((unused));
426#ifdef __MigPackStructs
427#pragma pack()
428#endif
429#endif /* !__Request__memory_object_control_subsystem__defined */
430
431/* union of all requests */
432
433#ifndef __RequestUnion__memory_object_control_subsystem__defined
434#define __RequestUnion__memory_object_control_subsystem__defined
435union __RequestUnion__memory_object_control_subsystem {
436 __Request__memory_object_get_attributes_t Request_memory_object_get_attributes;
437 __Request__memory_object_change_attributes_t Request_memory_object_change_attributes;
438 __Request__memory_object_synchronize_completed_t Request_memory_object_synchronize_completed;
439 __Request__memory_object_lock_request_t Request_memory_object_lock_request;
440 __Request__memory_object_destroy_t Request_memory_object_destroy;
441 __Request__memory_object_upl_request_t Request_memory_object_upl_request;
442 __Request__memory_object_super_upl_request_t Request_memory_object_super_upl_request;
443 __Request__memory_object_cluster_size_t Request_memory_object_cluster_size;
444 __Request__memory_object_page_op_t Request_memory_object_page_op;
445 __Request__memory_object_recover_named_t Request_memory_object_recover_named;
446 __Request__memory_object_release_name_t Request_memory_object_release_name;
447 __Request__memory_object_range_op_t Request_memory_object_range_op;
448};
449#endif /* !__RequestUnion__memory_object_control_subsystem__defined */
450/* typedefs for all replies */
451
452#ifndef __Reply__memory_object_control_subsystem__defined
453#define __Reply__memory_object_control_subsystem__defined
454
455#ifdef __MigPackStructs
456#pragma pack(4)
457#endif
458 typedef struct {
459 mach_msg_header_t Head;
460 NDR_record_t NDR;
461 kern_return_t RetCode;
462 mach_msg_type_number_t attributesCnt;
463 int attributes[6];
464 } __Reply__memory_object_get_attributes_t __attribute__((unused));
465#ifdef __MigPackStructs
466#pragma pack()
467#endif
468
469#ifdef __MigPackStructs
470#pragma pack(4)
471#endif
472 typedef struct {
473 mach_msg_header_t Head;
474 NDR_record_t NDR;
475 kern_return_t RetCode;
476 } __Reply__memory_object_change_attributes_t __attribute__((unused));
477#ifdef __MigPackStructs
478#pragma pack()
479#endif
480
481#ifdef __MigPackStructs
482#pragma pack(4)
483#endif
484 typedef struct {
485 mach_msg_header_t Head;
486 NDR_record_t NDR;
487 kern_return_t RetCode;
488 } __Reply__memory_object_synchronize_completed_t __attribute__((unused));
489#ifdef __MigPackStructs
490#pragma pack()
491#endif
492
493#ifdef __MigPackStructs
494#pragma pack(4)
495#endif
496 typedef struct {
497 mach_msg_header_t Head;
498 NDR_record_t NDR;
499 kern_return_t RetCode;
500 memory_object_offset_t resid_offset;
501 integer_t io_errno;
502 } __Reply__memory_object_lock_request_t __attribute__((unused));
503#ifdef __MigPackStructs
504#pragma pack()
505#endif
506
507#ifdef __MigPackStructs
508#pragma pack(4)
509#endif
510 typedef struct {
511 mach_msg_header_t Head;
512 NDR_record_t NDR;
513 kern_return_t RetCode;
514 } __Reply__memory_object_destroy_t __attribute__((unused));
515#ifdef __MigPackStructs
516#pragma pack()
517#endif
518
519#ifdef __MigPackStructs
520#pragma pack(4)
521#endif
522 typedef struct {
523 mach_msg_header_t Head;
524 /* start of the kernel processed data */
525 mach_msg_body_t msgh_body;
526 mach_msg_port_descriptor_t upl;
527 /* end of the kernel processed data */
528 NDR_record_t NDR;
529 mach_msg_type_number_t page_listCnt;
530 upl_page_info_t page_list[256];
531 } __Reply__memory_object_upl_request_t __attribute__((unused));
532#ifdef __MigPackStructs
533#pragma pack()
534#endif
535
536#ifdef __MigPackStructs
537#pragma pack(4)
538#endif
539 typedef struct {
540 mach_msg_header_t Head;
541 /* start of the kernel processed data */
542 mach_msg_body_t msgh_body;
543 mach_msg_port_descriptor_t upl;
544 /* end of the kernel processed data */
545 NDR_record_t NDR;
546 mach_msg_type_number_t page_listCnt;
547 upl_page_info_t page_list[256];
548 } __Reply__memory_object_super_upl_request_t __attribute__((unused));
549#ifdef __MigPackStructs
550#pragma pack()
551#endif
552
553#ifdef __MigPackStructs
554#pragma pack(4)
555#endif
556 typedef struct {
557 mach_msg_header_t Head;
558 NDR_record_t NDR;
559 kern_return_t RetCode;
560 memory_object_offset_t start;
561 vm_size_t length;
562 uint32_t io_streaming;
563 } __Reply__memory_object_cluster_size_t __attribute__((unused));
564#ifdef __MigPackStructs
565#pragma pack()
566#endif
567
568#ifdef __MigPackStructs
569#pragma pack(4)
570#endif
571 typedef struct {
572 mach_msg_header_t Head;
573 NDR_record_t NDR;
574 kern_return_t RetCode;
575 uint32_t phys_entry;
576 integer_t flags;
577 } __Reply__memory_object_page_op_t __attribute__((unused));
578#ifdef __MigPackStructs
579#pragma pack()
580#endif
581
582#ifdef __MigPackStructs
583#pragma pack(4)
584#endif
585 typedef struct {
586 mach_msg_header_t Head;
587 NDR_record_t NDR;
588 kern_return_t RetCode;
589 } __Reply__memory_object_recover_named_t __attribute__((unused));
590#ifdef __MigPackStructs
591#pragma pack()
592#endif
593
594#ifdef __MigPackStructs
595#pragma pack(4)
596#endif
597 typedef struct {
598 mach_msg_header_t Head;
599 NDR_record_t NDR;
600 kern_return_t RetCode;
601 } __Reply__memory_object_release_name_t __attribute__((unused));
602#ifdef __MigPackStructs
603#pragma pack()
604#endif
605
606#ifdef __MigPackStructs
607#pragma pack(4)
608#endif
609 typedef struct {
610 mach_msg_header_t Head;
611 NDR_record_t NDR;
612 kern_return_t RetCode;
613 integer_t range;
614 } __Reply__memory_object_range_op_t __attribute__((unused));
615#ifdef __MigPackStructs
616#pragma pack()
617#endif
618#endif /* !__Reply__memory_object_control_subsystem__defined */
619
620/* union of all replies */
621
622#ifndef __ReplyUnion__memory_object_control_subsystem__defined
623#define __ReplyUnion__memory_object_control_subsystem__defined
624union __ReplyUnion__memory_object_control_subsystem {
625 __Reply__memory_object_get_attributes_t Reply_memory_object_get_attributes;
626 __Reply__memory_object_change_attributes_t Reply_memory_object_change_attributes;
627 __Reply__memory_object_synchronize_completed_t Reply_memory_object_synchronize_completed;
628 __Reply__memory_object_lock_request_t Reply_memory_object_lock_request;
629 __Reply__memory_object_destroy_t Reply_memory_object_destroy;
630 __Reply__memory_object_upl_request_t Reply_memory_object_upl_request;
631 __Reply__memory_object_super_upl_request_t Reply_memory_object_super_upl_request;
632 __Reply__memory_object_cluster_size_t Reply_memory_object_cluster_size;
633 __Reply__memory_object_page_op_t Reply_memory_object_page_op;
634 __Reply__memory_object_recover_named_t Reply_memory_object_recover_named;
635 __Reply__memory_object_release_name_t Reply_memory_object_release_name;
636 __Reply__memory_object_range_op_t Reply_memory_object_range_op;
637};
638#endif /* !__RequestUnion__memory_object_control_subsystem__defined */
639
640#ifndef subsystem_to_name_map_memory_object_control
641#define subsystem_to_name_map_memory_object_control \
642 { "memory_object_get_attributes", 2000 },\
643 { "memory_object_change_attributes", 2001 },\
644 { "memory_object_synchronize_completed", 2002 },\
645 { "memory_object_lock_request", 2003 },\
646 { "memory_object_destroy", 2004 },\
647 { "memory_object_upl_request", 2005 },\
648 { "memory_object_super_upl_request", 2006 },\
649 { "memory_object_cluster_size", 2007 },\
650 { "memory_object_page_op", 2008 },\
651 { "memory_object_recover_named", 2009 },\
652 { "memory_object_release_name", 2010 },\
653 { "memory_object_range_op", 2011 }
654#endif
655
656#ifdef __AfterMigUserHeader
657__AfterMigUserHeader
658#endif /* __AfterMigUserHeader */
659
660#endif /* _memory_object_control_user_ */
661