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