1#ifndef _memory_object_control_server_
2#define _memory_object_control_server_
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 <ipc/ipc_voucher.h>
58#include <kern/ipc_kobject.h>
59#include <kern/ipc_tt.h>
60#include <kern/ipc_host.h>
61#include <kern/ipc_sync.h>
62#include <kern/ledger.h>
63#include <kern/processor.h>
64#include <kern/sync_lock.h>
65#include <kern/sync_sema.h>
66#include <vm/memory_object.h>
67#include <vm/vm_map.h>
68#include <kern/ipc_mig.h>
69#include <mach/mig.h>
70#include <mach/mach_types.h>
71
72#ifdef __BeforeMigServerHeader
73__BeforeMigServerHeader
74#endif /* __BeforeMigServerHeader */
75
76
77/* Routine memory_object_get_attributes */
78#ifdef mig_external
79mig_external
80#else
81extern
82#endif /* mig_external */
83kern_return_t memory_object_get_attributes
84(
85 memory_object_control_t memory_control,
86 memory_object_flavor_t flavor,
87 memory_object_info_t attributes,
88 mach_msg_type_number_t *attributesCnt
89);
90
91/* Routine memory_object_change_attributes */
92#ifdef mig_external
93mig_external
94#else
95extern
96#endif /* mig_external */
97kern_return_t memory_object_change_attributes
98(
99 memory_object_control_t memory_control,
100 memory_object_flavor_t flavor,
101 memory_object_info_t attributes,
102 mach_msg_type_number_t attributesCnt
103);
104
105/* Routine memory_object_synchronize_completed */
106#ifdef mig_external
107mig_external
108#else
109extern
110#endif /* mig_external */
111kern_return_t memory_object_synchronize_completed
112(
113 memory_object_control_t memory_control,
114 memory_object_offset_t offset,
115 memory_object_size_t length
116);
117
118/* Routine memory_object_lock_request */
119#ifdef mig_external
120mig_external
121#else
122extern
123#endif /* mig_external */
124kern_return_t memory_object_lock_request
125(
126 memory_object_control_t memory_control,
127 memory_object_offset_t offset,
128 memory_object_size_t size,
129 memory_object_offset_t *resid_offset,
130 integer_t *io_errno,
131 memory_object_return_t should_return,
132 integer_t flags,
133 vm_prot_t lock_value
134);
135
136/* Routine memory_object_destroy */
137#ifdef mig_external
138mig_external
139#else
140extern
141#endif /* mig_external */
142kern_return_t memory_object_destroy
143(
144 memory_object_control_t memory_control,
145 kern_return_t reason
146);
147
148/* Routine memory_object_upl_request */
149#ifdef mig_external
150mig_external
151#else
152extern
153#endif /* mig_external */
154kern_return_t memory_object_upl_request
155(
156 memory_object_control_t memory_control,
157 memory_object_offset_t offset,
158 upl_size_t size,
159 upl_t *upl,
160 upl_page_info_array_t page_list,
161 mach_msg_type_number_t *page_listCnt,
162 integer_t cntrl_flags,
163 integer_t tag
164);
165
166/* Routine memory_object_super_upl_request */
167#ifdef mig_external
168mig_external
169#else
170extern
171#endif /* mig_external */
172kern_return_t memory_object_super_upl_request
173(
174 memory_object_control_t memory_control,
175 memory_object_offset_t offset,
176 upl_size_t size,
177 upl_size_t super_size,
178 upl_t *upl,
179 upl_page_info_array_t page_list,
180 mach_msg_type_number_t *page_listCnt,
181 integer_t cntrl_flags,
182 integer_t tag
183);
184
185/* Routine memory_object_cluster_size */
186#ifdef mig_external
187mig_external
188#else
189extern
190#endif /* mig_external */
191kern_return_t memory_object_cluster_size
192(
193 memory_object_control_t control,
194 memory_object_offset_t *start,
195 vm_size_t *length,
196 uint32_t *io_streaming,
197 memory_object_fault_info_t fault_info
198);
199
200/* Routine memory_object_page_op */
201#ifdef mig_external
202mig_external
203#else
204extern
205#endif /* mig_external */
206kern_return_t memory_object_page_op
207(
208 memory_object_control_t memory_control,
209 memory_object_offset_t offset,
210 integer_t ops,
211 uint32_t *phys_entry,
212 integer_t *flags
213);
214
215/* Routine memory_object_recover_named */
216#ifdef mig_external
217mig_external
218#else
219extern
220#endif /* mig_external */
221kern_return_t memory_object_recover_named
222(
223 memory_object_control_t memory_control,
224 boolean_t wait_on_terminating
225);
226
227/* Routine memory_object_release_name */
228#ifdef mig_external
229mig_external
230#else
231extern
232#endif /* mig_external */
233kern_return_t memory_object_release_name
234(
235 memory_object_control_t memory_control,
236 integer_t flags
237);
238
239/* Routine memory_object_range_op */
240#ifdef mig_external
241mig_external
242#else
243extern
244#endif /* mig_external */
245kern_return_t memory_object_range_op
246(
247 memory_object_control_t memory_control,
248 memory_object_offset_t offset_beg,
249 memory_object_offset_t offset_end,
250 integer_t ops,
251 integer_t *range
252);
253
254#ifdef mig_external
255mig_external
256#else
257extern
258#endif /* mig_external */
259boolean_t memory_object_control_server(
260 mach_msg_header_t *InHeadP,
261 mach_msg_header_t *OutHeadP);
262
263#ifdef mig_external
264mig_external
265#else
266extern
267#endif /* mig_external */
268mig_routine_t memory_object_control_server_routine(
269 mach_msg_header_t *InHeadP);
270
271
272/* Description of this subsystem, for use in direct RPC */
273extern const struct memory_object_control_subsystem {
274 mig_server_routine_t server; /* Server routine */
275 mach_msg_id_t start; /* Min routine number */
276 mach_msg_id_t end; /* Max routine number + 1 */
277 unsigned int maxsize; /* Max msg size */
278 vm_address_t reserved; /* Reserved */
279 struct routine_descriptor /*Array of routine descriptors */
280 routine[12];
281} memory_object_control_subsystem;
282
283/* typedefs for all requests */
284
285#ifndef __Request__memory_object_control_subsystem__defined
286#define __Request__memory_object_control_subsystem__defined
287
288#ifdef __MigPackStructs
289#pragma pack(4)
290#endif
291 typedef struct {
292 mach_msg_header_t Head;
293 NDR_record_t NDR;
294 memory_object_flavor_t flavor;
295 mach_msg_type_number_t attributesCnt;
296 } __Request__memory_object_get_attributes_t __attribute__((unused));
297#ifdef __MigPackStructs
298#pragma pack()
299#endif
300
301#ifdef __MigPackStructs
302#pragma pack(4)
303#endif
304 typedef struct {
305 mach_msg_header_t Head;
306 NDR_record_t NDR;
307 memory_object_flavor_t flavor;
308 mach_msg_type_number_t attributesCnt;
309 int attributes[6];
310 } __Request__memory_object_change_attributes_t __attribute__((unused));
311#ifdef __MigPackStructs
312#pragma pack()
313#endif
314
315#ifdef __MigPackStructs
316#pragma pack(4)
317#endif
318 typedef struct {
319 mach_msg_header_t Head;
320 NDR_record_t NDR;
321 memory_object_offset_t offset;
322 memory_object_size_t length;
323 } __Request__memory_object_synchronize_completed_t __attribute__((unused));
324#ifdef __MigPackStructs
325#pragma pack()
326#endif
327
328#ifdef __MigPackStructs
329#pragma pack(4)
330#endif
331 typedef struct {
332 mach_msg_header_t Head;
333 NDR_record_t NDR;
334 memory_object_offset_t offset;
335 memory_object_size_t size;
336 memory_object_return_t should_return;
337 integer_t flags;
338 vm_prot_t lock_value;
339 } __Request__memory_object_lock_request_t __attribute__((unused));
340#ifdef __MigPackStructs
341#pragma pack()
342#endif
343
344#ifdef __MigPackStructs
345#pragma pack(4)
346#endif
347 typedef struct {
348 mach_msg_header_t Head;
349 NDR_record_t NDR;
350 kern_return_t reason;
351 } __Request__memory_object_destroy_t __attribute__((unused));
352#ifdef __MigPackStructs
353#pragma pack()
354#endif
355
356#ifdef __MigPackStructs
357#pragma pack(4)
358#endif
359 typedef struct {
360 mach_msg_header_t Head;
361 NDR_record_t NDR;
362 memory_object_offset_t offset;
363 upl_size_t size;
364 mach_msg_type_number_t page_listCnt;
365 integer_t cntrl_flags;
366 integer_t tag;
367 } __Request__memory_object_upl_request_t __attribute__((unused));
368#ifdef __MigPackStructs
369#pragma pack()
370#endif
371
372#ifdef __MigPackStructs
373#pragma pack(4)
374#endif
375 typedef struct {
376 mach_msg_header_t Head;
377 NDR_record_t NDR;
378 memory_object_offset_t offset;
379 upl_size_t size;
380 upl_size_t super_size;
381 mach_msg_type_number_t page_listCnt;
382 integer_t cntrl_flags;
383 integer_t tag;
384 } __Request__memory_object_super_upl_request_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 memory_object_fault_info_t fault_info;
396 } __Request__memory_object_cluster_size_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 memory_object_offset_t offset;
408 integer_t ops;
409 } __Request__memory_object_page_op_t __attribute__((unused));
410#ifdef __MigPackStructs
411#pragma pack()
412#endif
413
414#ifdef __MigPackStructs
415#pragma pack(4)
416#endif
417 typedef struct {
418 mach_msg_header_t Head;
419 NDR_record_t NDR;
420 boolean_t wait_on_terminating;
421 } __Request__memory_object_recover_named_t __attribute__((unused));
422#ifdef __MigPackStructs
423#pragma pack()
424#endif
425
426#ifdef __MigPackStructs
427#pragma pack(4)
428#endif
429 typedef struct {
430 mach_msg_header_t Head;
431 NDR_record_t NDR;
432 integer_t flags;
433 } __Request__memory_object_release_name_t __attribute__((unused));
434#ifdef __MigPackStructs
435#pragma pack()
436#endif
437
438#ifdef __MigPackStructs
439#pragma pack(4)
440#endif
441 typedef struct {
442 mach_msg_header_t Head;
443 NDR_record_t NDR;
444 memory_object_offset_t offset_beg;
445 memory_object_offset_t offset_end;
446 integer_t ops;
447 } __Request__memory_object_range_op_t __attribute__((unused));
448#ifdef __MigPackStructs
449#pragma pack()
450#endif
451#endif /* !__Request__memory_object_control_subsystem__defined */
452
453
454/* union of all requests */
455
456#ifndef __RequestUnion__memory_object_control_subsystem__defined
457#define __RequestUnion__memory_object_control_subsystem__defined
458union __RequestUnion__memory_object_control_subsystem {
459 __Request__memory_object_get_attributes_t Request_memory_object_get_attributes;
460 __Request__memory_object_change_attributes_t Request_memory_object_change_attributes;
461 __Request__memory_object_synchronize_completed_t Request_memory_object_synchronize_completed;
462 __Request__memory_object_lock_request_t Request_memory_object_lock_request;
463 __Request__memory_object_destroy_t Request_memory_object_destroy;
464 __Request__memory_object_upl_request_t Request_memory_object_upl_request;
465 __Request__memory_object_super_upl_request_t Request_memory_object_super_upl_request;
466 __Request__memory_object_cluster_size_t Request_memory_object_cluster_size;
467 __Request__memory_object_page_op_t Request_memory_object_page_op;
468 __Request__memory_object_recover_named_t Request_memory_object_recover_named;
469 __Request__memory_object_release_name_t Request_memory_object_release_name;
470 __Request__memory_object_range_op_t Request_memory_object_range_op;
471};
472#endif /* __RequestUnion__memory_object_control_subsystem__defined */
473/* typedefs for all replies */
474
475#ifndef __Reply__memory_object_control_subsystem__defined
476#define __Reply__memory_object_control_subsystem__defined
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 mach_msg_type_number_t attributesCnt;
486 int attributes[6];
487 } __Reply__memory_object_get_attributes_t __attribute__((unused));
488#ifdef __MigPackStructs
489#pragma pack()
490#endif
491
492#ifdef __MigPackStructs
493#pragma pack(4)
494#endif
495 typedef struct {
496 mach_msg_header_t Head;
497 NDR_record_t NDR;
498 kern_return_t RetCode;
499 } __Reply__memory_object_change_attributes_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_synchronize_completed_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 NDR_record_t NDR;
522 kern_return_t RetCode;
523 memory_object_offset_t resid_offset;
524 integer_t io_errno;
525 } __Reply__memory_object_lock_request_t __attribute__((unused));
526#ifdef __MigPackStructs
527#pragma pack()
528#endif
529
530#ifdef __MigPackStructs
531#pragma pack(4)
532#endif
533 typedef struct {
534 mach_msg_header_t Head;
535 NDR_record_t NDR;
536 kern_return_t RetCode;
537 } __Reply__memory_object_destroy_t __attribute__((unused));
538#ifdef __MigPackStructs
539#pragma pack()
540#endif
541
542#ifdef __MigPackStructs
543#pragma pack(4)
544#endif
545 typedef struct {
546 mach_msg_header_t Head;
547 /* start of the kernel processed data */
548 mach_msg_body_t msgh_body;
549 mach_msg_port_descriptor_t upl;
550 /* end of the kernel processed data */
551 NDR_record_t NDR;
552 mach_msg_type_number_t page_listCnt;
553 upl_page_info_t page_list[256];
554 } __Reply__memory_object_upl_request_t __attribute__((unused));
555#ifdef __MigPackStructs
556#pragma pack()
557#endif
558
559#ifdef __MigPackStructs
560#pragma pack(4)
561#endif
562 typedef struct {
563 mach_msg_header_t Head;
564 /* start of the kernel processed data */
565 mach_msg_body_t msgh_body;
566 mach_msg_port_descriptor_t upl;
567 /* end of the kernel processed data */
568 NDR_record_t NDR;
569 mach_msg_type_number_t page_listCnt;
570 upl_page_info_t page_list[256];
571 } __Reply__memory_object_super_upl_request_t __attribute__((unused));
572#ifdef __MigPackStructs
573#pragma pack()
574#endif
575
576#ifdef __MigPackStructs
577#pragma pack(4)
578#endif
579 typedef struct {
580 mach_msg_header_t Head;
581 NDR_record_t NDR;
582 kern_return_t RetCode;
583 memory_object_offset_t start;
584 vm_size_t length;
585 uint32_t io_streaming;
586 } __Reply__memory_object_cluster_size_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 uint32_t phys_entry;
599 integer_t flags;
600 } __Reply__memory_object_page_op_t __attribute__((unused));
601#ifdef __MigPackStructs
602#pragma pack()
603#endif
604
605#ifdef __MigPackStructs
606#pragma pack(4)
607#endif
608 typedef struct {
609 mach_msg_header_t Head;
610 NDR_record_t NDR;
611 kern_return_t RetCode;
612 } __Reply__memory_object_recover_named_t __attribute__((unused));
613#ifdef __MigPackStructs
614#pragma pack()
615#endif
616
617#ifdef __MigPackStructs
618#pragma pack(4)
619#endif
620 typedef struct {
621 mach_msg_header_t Head;
622 NDR_record_t NDR;
623 kern_return_t RetCode;
624 } __Reply__memory_object_release_name_t __attribute__((unused));
625#ifdef __MigPackStructs
626#pragma pack()
627#endif
628
629#ifdef __MigPackStructs
630#pragma pack(4)
631#endif
632 typedef struct {
633 mach_msg_header_t Head;
634 NDR_record_t NDR;
635 kern_return_t RetCode;
636 integer_t range;
637 } __Reply__memory_object_range_op_t __attribute__((unused));
638#ifdef __MigPackStructs
639#pragma pack()
640#endif
641#endif /* !__Reply__memory_object_control_subsystem__defined */
642
643
644/* union of all replies */
645
646#ifndef __ReplyUnion__memory_object_control_subsystem__defined
647#define __ReplyUnion__memory_object_control_subsystem__defined
648union __ReplyUnion__memory_object_control_subsystem {
649 __Reply__memory_object_get_attributes_t Reply_memory_object_get_attributes;
650 __Reply__memory_object_change_attributes_t Reply_memory_object_change_attributes;
651 __Reply__memory_object_synchronize_completed_t Reply_memory_object_synchronize_completed;
652 __Reply__memory_object_lock_request_t Reply_memory_object_lock_request;
653 __Reply__memory_object_destroy_t Reply_memory_object_destroy;
654 __Reply__memory_object_upl_request_t Reply_memory_object_upl_request;
655 __Reply__memory_object_super_upl_request_t Reply_memory_object_super_upl_request;
656 __Reply__memory_object_cluster_size_t Reply_memory_object_cluster_size;
657 __Reply__memory_object_page_op_t Reply_memory_object_page_op;
658 __Reply__memory_object_recover_named_t Reply_memory_object_recover_named;
659 __Reply__memory_object_release_name_t Reply_memory_object_release_name;
660 __Reply__memory_object_range_op_t Reply_memory_object_range_op;
661};
662#endif /* __RequestUnion__memory_object_control_subsystem__defined */
663
664#ifndef subsystem_to_name_map_memory_object_control
665#define subsystem_to_name_map_memory_object_control \
666 { "memory_object_get_attributes", 2000 },\
667 { "memory_object_change_attributes", 2001 },\
668 { "memory_object_synchronize_completed", 2002 },\
669 { "memory_object_lock_request", 2003 },\
670 { "memory_object_destroy", 2004 },\
671 { "memory_object_upl_request", 2005 },\
672 { "memory_object_super_upl_request", 2006 },\
673 { "memory_object_cluster_size", 2007 },\
674 { "memory_object_page_op", 2008 },\
675 { "memory_object_recover_named", 2009 },\
676 { "memory_object_release_name", 2010 },\
677 { "memory_object_range_op", 2011 }
678#endif
679
680#ifdef __AfterMigServerHeader
681__AfterMigServerHeader
682#endif /* __AfterMigServerHeader */
683
684#endif /* _memory_object_control_server_ */
685