1/*
2 * IDENTIFICATION:
3 * stub generated by bootstrap_cmds-133
4 * OPTIONS:
5 * KernelServer
6 */
7
8/* Module mach_eventlink */
9
10#define __MIG_check__Request__mach_eventlink_subsystem__ 1
11
12#include "mach_eventlink_server.h"
13
14#ifndef mig_internal
15#define mig_internal static __inline__
16#endif /* mig_internal */
17
18#ifndef mig_external
19#define mig_external
20#endif /* mig_external */
21
22#if !defined(__MigTypeCheck) && defined(TypeCheck)
23#define __MigTypeCheck TypeCheck /* Legacy setting */
24#endif /* !defined(__MigTypeCheck) */
25
26#if !defined(__MigKernelSpecificCode) && defined(_MIG_KERNEL_SPECIFIC_CODE_)
27#define __MigKernelSpecificCode _MIG_KERNEL_SPECIFIC_CODE_ /* Legacy setting */
28#endif /* !defined(__MigKernelSpecificCode) */
29
30#ifndef LimitCheck
31#define LimitCheck 0
32#endif /* LimitCheck */
33
34#ifndef min
35#define min(a,b) ( ((a) < (b))? (a): (b) )
36#endif /* min */
37
38#if !defined(_WALIGN_)
39#define _WALIGN_(x) (((x) + 3) & ~3)
40#endif /* !defined(_WALIGN_) */
41
42#if !defined(_WALIGNSZ_)
43#define _WALIGNSZ_(x) _WALIGN_(sizeof(x))
44#endif /* !defined(_WALIGNSZ_) */
45
46#ifndef UseStaticTemplates
47#define UseStaticTemplates 0
48#endif /* UseStaticTemplates */
49
50#ifndef MIG_SERVER_ROUTINE
51#define MIG_SERVER_ROUTINE
52#endif
53
54#ifndef __DeclareRcvRpc
55#define __DeclareRcvRpc(_NUM_, _NAME_)
56#endif /* __DeclareRcvRpc */
57
58#ifndef __BeforeRcvRpc
59#define __BeforeRcvRpc(_NUM_, _NAME_)
60#endif /* __BeforeRcvRpc */
61
62#ifndef __AfterRcvRpc
63#define __AfterRcvRpc(_NUM_, _NAME_)
64#endif /* __AfterRcvRpc */
65
66#ifndef __DeclareRcvSimple
67#define __DeclareRcvSimple(_NUM_, _NAME_)
68#endif /* __DeclareRcvSimple */
69
70#ifndef __BeforeRcvSimple
71#define __BeforeRcvSimple(_NUM_, _NAME_)
72#endif /* __BeforeRcvSimple */
73
74#ifndef __AfterRcvSimple
75#define __AfterRcvSimple(_NUM_, _NAME_)
76#endif /* __AfterRcvSimple */
77
78#define novalue void
79
80#if __MigKernelSpecificCode
81#define msgh_request_port msgh_remote_port
82#define MACH_MSGH_BITS_REQUEST(bits) MACH_MSGH_BITS_REMOTE(bits)
83#define msgh_reply_port msgh_local_port
84#define MACH_MSGH_BITS_REPLY(bits) MACH_MSGH_BITS_LOCAL(bits)
85#else
86#define msgh_request_port msgh_local_port
87#define MACH_MSGH_BITS_REQUEST(bits) MACH_MSGH_BITS_LOCAL(bits)
88#define msgh_reply_port msgh_remote_port
89#define MACH_MSGH_BITS_REPLY(bits) MACH_MSGH_BITS_REMOTE(bits)
90#endif /* __MigKernelSpecificCode */
91
92#define MIG_RETURN_ERROR(X, code) {\
93 ((mig_reply_error_t *)X)->RetCode = code;\
94 ((mig_reply_error_t *)X)->NDR = NDR_record;\
95 return;\
96 }
97
98/* Forward Declarations */
99
100
101mig_internal novalue _Xmach_eventlink_create
102 (mach_msg_header_t *InHeadP, void *InDataP, mach_msg_max_trailer_t *InTrailerP, mach_msg_header_t *OutHeadP, void *OutDataP);
103
104mig_internal novalue _Xmach_eventlink_destroy
105 (mach_msg_header_t *InHeadP, void *InDataP, mach_msg_max_trailer_t *InTrailerP, mach_msg_header_t *OutHeadP, void *OutDataP);
106
107mig_internal novalue _Xmach_eventlink_associate
108 (mach_msg_header_t *InHeadP, void *InDataP, mach_msg_max_trailer_t *InTrailerP, mach_msg_header_t *OutHeadP, void *OutDataP);
109
110mig_internal novalue _Xmach_eventlink_disassociate
111 (mach_msg_header_t *InHeadP, void *InDataP, mach_msg_max_trailer_t *InTrailerP, mach_msg_header_t *OutHeadP, void *OutDataP);
112
113
114#if ( __MigTypeCheck )
115#if __MIG_check__Request__mach_eventlink_subsystem__
116#if !defined(__MIG_check__Request__mach_eventlink_create_t__defined)
117#define __MIG_check__Request__mach_eventlink_create_t__defined
118
119mig_internal kern_return_t __MIG_check__Request__mach_eventlink_create_t(
120 __attribute__((__unused__)) __RequestKData__mach_eventlink_create_t *InKP,
121 __attribute__((__unused__)) __RequestUData__mach_eventlink_create_t *In0UP,
122 __attribute__((__unused__)) mach_msg_max_trailer_t *InTrailerP)
123{
124
125 typedef __Request__mach_eventlink_create_t __Request;
126 typedef __RequestUData__mach_eventlink_create_t __RequestU __attribute__((unused));
127#if __MigTypeCheck
128 if ((InKP->Head.msgh_bits & MACH_MSGH_BITS_COMPLEX) ||
129 (InKP->Head.msgh_size != (mach_msg_size_t)sizeof(__Request)))
130 return MIG_BAD_ARGUMENTS;
131#endif /* __MigTypeCheck */
132
133 return MACH_MSG_SUCCESS;
134}
135#endif /* !defined(__MIG_check__Request__mach_eventlink_create_t__defined) */
136#endif /* __MIG_check__Request__mach_eventlink_subsystem__ */
137#endif /* ( __MigTypeCheck ) */
138
139
140/* Routine mach_eventlink_create */
141mig_internal novalue _Xmach_eventlink_create
142 (mach_msg_header_t *InHeadP, __attribute__((__unused__)) void *InDataP,
143 __attribute__((__unused__)) mach_msg_max_trailer_t *InTrailerP,
144 mach_msg_header_t *OutHeadP, __attribute__((__unused__)) void *OutDataP)
145{
146
147#ifdef __MigPackStructs
148#pragma pack(push, 4)
149#endif
150 typedef struct {
151 NDR_record_t NDR;
152 mach_eventlink_create_option_t option;
153 mach_msg_trailer_t trailer;
154 char padding[0]; /* Avoid generating empty UData structs */
155 } RequestU __attribute__((unused));
156#ifdef __MigPackStructs
157#pragma pack(pop)
158#endif
159 typedef __RequestKData__mach_eventlink_create_t RequestK;
160 typedef __RequestUData__mach_eventlink_create_t __RequestU;
161 typedef __ReplyKData__mach_eventlink_create_t ReplyK __attribute__((unused));
162 typedef __ReplyUData__mach_eventlink_create_t ReplyU __attribute__((unused));
163 typedef __Reply__mach_eventlink_create_t Reply __attribute__((unused));
164 typedef __Request__mach_eventlink_create_t __Request __attribute__((unused));
165
166 /*
167 * typedef struct {
168 * mach_msg_header_t Head;
169 * NDR_record_t NDR;
170 * kern_return_t RetCode;
171 * } mig_reply_error_t;
172 */
173
174 RequestK *InKP = (RequestK *) InHeadP;
175 RequestU *In0UP = (RequestU *) InDataP;
176 ReplyK *OutKP = (ReplyK *) OutHeadP;
177 ReplyU *OutUP = (ReplyU *) OutDataP;
178 (void)OutUP;
179#ifdef __MIG_check__Request__mach_eventlink_create_t__defined
180 kern_return_t check_result;
181#endif /* __MIG_check__Request__mach_eventlink_create_t__defined */
182
183#if __MigKernelSpecificCode
184#if UseStaticTemplates
185 const static mach_msg_port_descriptor_t eventlink_pairTemplate = {
186 /* name = */ MACH_PORT_NULL,
187 /* pad1 = */ 0,
188 /* pad2 = */ 0,
189 /* disp = */ 17,
190 /* type = */ MACH_MSG_PORT_DESCRIPTOR,
191 };
192#endif /* UseStaticTemplates */
193
194#else
195#if UseStaticTemplates
196 const static mach_msg_port_descriptor_t eventlink_pairTemplate = {
197 /* name = */ MACH_PORT_NULL,
198 /* pad1 = */ 0,
199 /* pad2 = */ 0,
200 /* disp = */ 19,
201 /* type = */ MACH_MSG_PORT_DESCRIPTOR,
202 };
203#endif /* UseStaticTemplates */
204
205#endif /* __MigKernelSpecificCode */
206 kern_return_t RetCode;
207 task_t task;
208 mach_port_t eventlink_pair[2];
209
210 __DeclareRcvRpc(716200, "mach_eventlink_create")
211 __BeforeRcvRpc(716200, "mach_eventlink_create")
212
213#if defined(__MIG_check__Request__mach_eventlink_create_t__defined)
214 check_result = __MIG_check__Request__mach_eventlink_create_t(InKP: (RequestK *)InKP, In0UP: (__RequestU *)In0UP, InTrailerP);
215 if (check_result != MACH_MSG_SUCCESS)
216 { MIG_RETURN_ERROR(OutKP, check_result); }
217#endif /* defined(__MIG_check__Request__mach_eventlink_create_t__defined) */
218
219 {
220 mach_msg_port_descriptor_t *ptr;
221 int i;
222
223 ptr = &OutKP->eventlink_pair[0];
224 for (i = 0; i < 2; ptr++, i++) {
225#if UseStaticTemplates
226 *ptr = eventlink_pairTemplate;
227#else /* UseStaticTemplates */
228#if __MigKernelSpecificCode
229 ptr->disposition = 17;
230#else
231 ptr->disposition = 19;
232#endif /* __MigKernelSpecificCode */
233#if !(defined(KERNEL) && defined(__LP64__))
234 ptr->pad1 = 0;
235#endif
236 ptr->pad2 = 0;
237 ptr->type = MACH_MSG_PORT_DESCRIPTOR;
238#if defined(KERNEL)
239 ptr->pad_end = 0;
240#endif
241#endif /* UseStaticTemplates */
242 }
243 }
244
245
246 task = convert_port_to_task_mig(port: InKP->Head.msgh_request_port);
247
248 RetCode = mach_eventlink_create(task, option: In0UP->option, eventlink_pair);
249 task_deallocate_mig(task);
250 if (RetCode != KERN_SUCCESS) {
251 MIG_RETURN_ERROR(OutKP, RetCode);
252 }
253#if __MigKernelSpecificCode
254#endif /* __MigKernelSpecificCode */
255 {
256 mach_msg_port_descriptor_t *ptr;
257 int i;
258
259 ptr = &OutKP->eventlink_pair[0];
260 for (i = 0; i < 2; ptr++, i++) {
261 ptr->name = eventlink_pair[i];
262 }
263 }
264
265
266 OutKP->Head.msgh_bits |= MACH_MSGH_BITS_COMPLEX;
267 OutKP->Head.msgh_size = (mach_msg_size_t)(sizeof(Reply));
268 OutKP->msgh_body.msgh_descriptor_count = 2;
269 __AfterRcvRpc(716200, "mach_eventlink_create")
270}
271
272#if ( __MigTypeCheck )
273#if __MIG_check__Request__mach_eventlink_subsystem__
274#if !defined(__MIG_check__Request__mach_eventlink_destroy_t__defined)
275#define __MIG_check__Request__mach_eventlink_destroy_t__defined
276
277mig_internal kern_return_t __MIG_check__Request__mach_eventlink_destroy_t(
278 __attribute__((__unused__)) __RequestKData__mach_eventlink_destroy_t *InKP,
279 __attribute__((__unused__)) __RequestUData__mach_eventlink_destroy_t *In0UP,
280 __attribute__((__unused__)) mach_msg_max_trailer_t *InTrailerP)
281{
282
283 typedef __Request__mach_eventlink_destroy_t __Request;
284 typedef __RequestUData__mach_eventlink_destroy_t __RequestU __attribute__((unused));
285#if __MigTypeCheck
286 if ((InKP->Head.msgh_bits & MACH_MSGH_BITS_COMPLEX) ||
287 (InKP->Head.msgh_size != (mach_msg_size_t)sizeof(__Request)))
288 return MIG_BAD_ARGUMENTS;
289#endif /* __MigTypeCheck */
290
291 return MACH_MSG_SUCCESS;
292}
293#endif /* !defined(__MIG_check__Request__mach_eventlink_destroy_t__defined) */
294#endif /* __MIG_check__Request__mach_eventlink_subsystem__ */
295#endif /* ( __MigTypeCheck ) */
296
297
298/* Routine mach_eventlink_destroy */
299mig_internal novalue _Xmach_eventlink_destroy
300 (mach_msg_header_t *InHeadP, __attribute__((__unused__)) void *InDataP,
301 __attribute__((__unused__)) mach_msg_max_trailer_t *InTrailerP,
302 mach_msg_header_t *OutHeadP, __attribute__((__unused__)) void *OutDataP)
303{
304
305#ifdef __MigPackStructs
306#pragma pack(push, 4)
307#endif
308 typedef struct {
309 mach_msg_trailer_t trailer;
310 char padding[0]; /* Avoid generating empty UData structs */
311 } RequestU __attribute__((unused));
312#ifdef __MigPackStructs
313#pragma pack(pop)
314#endif
315 typedef __RequestKData__mach_eventlink_destroy_t RequestK;
316 typedef __RequestUData__mach_eventlink_destroy_t __RequestU;
317 typedef __ReplyKData__mach_eventlink_destroy_t ReplyK __attribute__((unused));
318 typedef __ReplyUData__mach_eventlink_destroy_t ReplyU __attribute__((unused));
319 typedef __Reply__mach_eventlink_destroy_t Reply __attribute__((unused));
320 typedef __Request__mach_eventlink_destroy_t __Request __attribute__((unused));
321
322 /*
323 * typedef struct {
324 * mach_msg_header_t Head;
325 * NDR_record_t NDR;
326 * kern_return_t RetCode;
327 * } mig_reply_error_t;
328 */
329
330 RequestK *InKP = (RequestK *) InHeadP;
331 RequestU *In0UP = (RequestU *) InDataP;
332 ReplyK *OutKP = (ReplyK *) OutHeadP;
333 ReplyU *OutUP = (ReplyU *) OutDataP;
334 (void)OutUP;
335#ifdef __MIG_check__Request__mach_eventlink_destroy_t__defined
336 kern_return_t check_result;
337#endif /* __MIG_check__Request__mach_eventlink_destroy_t__defined */
338
339#if __MigKernelSpecificCode
340#else
341#endif /* __MigKernelSpecificCode */
342 ipc_eventlink_t eventlink;
343
344 __DeclareRcvRpc(716201, "mach_eventlink_destroy")
345 __BeforeRcvRpc(716201, "mach_eventlink_destroy")
346
347#if defined(__MIG_check__Request__mach_eventlink_destroy_t__defined)
348 check_result = __MIG_check__Request__mach_eventlink_destroy_t(InKP: (RequestK *)InKP, In0UP: (__RequestU *)In0UP, InTrailerP);
349 if (check_result != MACH_MSG_SUCCESS)
350 { MIG_RETURN_ERROR(OutKP, check_result); }
351#endif /* defined(__MIG_check__Request__mach_eventlink_destroy_t__defined) */
352
353 eventlink = convert_port_to_eventlink(port: InKP->Head.msgh_request_port);
354
355 OutUP->RetCode = mach_eventlink_destroy(eventlink);
356 ipc_eventlink_deallocate(ipc_eventlink: eventlink);
357#if __MigKernelSpecificCode
358#endif /* __MigKernelSpecificCode */
359
360 OutUP->NDR = NDR_record;
361
362
363 __AfterRcvRpc(716201, "mach_eventlink_destroy")
364}
365
366#if ( __MigTypeCheck )
367#if __MIG_check__Request__mach_eventlink_subsystem__
368#if !defined(__MIG_check__Request__mach_eventlink_associate_t__defined)
369#define __MIG_check__Request__mach_eventlink_associate_t__defined
370
371mig_internal kern_return_t __MIG_check__Request__mach_eventlink_associate_t(
372 __attribute__((__unused__)) __RequestKData__mach_eventlink_associate_t *InKP,
373 __attribute__((__unused__)) __RequestUData__mach_eventlink_associate_t *In0UP,
374 __attribute__((__unused__)) mach_msg_max_trailer_t *InTrailerP)
375{
376
377 typedef __Request__mach_eventlink_associate_t __Request;
378 typedef __RequestUData__mach_eventlink_associate_t __RequestU __attribute__((unused));
379#if __MigTypeCheck
380 if (!(InKP->Head.msgh_bits & MACH_MSGH_BITS_COMPLEX) ||
381 (InKP->msgh_body.msgh_descriptor_count != 1) ||
382 (InKP->Head.msgh_size != (mach_msg_size_t)sizeof(__Request)))
383 return MIG_BAD_ARGUMENTS;
384#endif /* __MigTypeCheck */
385
386#if __MigTypeCheck
387 if (InKP->thread.type != MACH_MSG_PORT_DESCRIPTOR ||
388 InKP->thread.disposition != 17)
389 return MIG_TYPE_ERROR;
390#endif /* __MigTypeCheck */
391
392 return MACH_MSG_SUCCESS;
393}
394#endif /* !defined(__MIG_check__Request__mach_eventlink_associate_t__defined) */
395#endif /* __MIG_check__Request__mach_eventlink_subsystem__ */
396#endif /* ( __MigTypeCheck ) */
397
398
399/* Routine mach_eventlink_associate */
400mig_internal novalue _Xmach_eventlink_associate
401 (mach_msg_header_t *InHeadP, __attribute__((__unused__)) void *InDataP,
402 __attribute__((__unused__)) mach_msg_max_trailer_t *InTrailerP,
403 mach_msg_header_t *OutHeadP, __attribute__((__unused__)) void *OutDataP)
404{
405
406#ifdef __MigPackStructs
407#pragma pack(push, 4)
408#endif
409 typedef struct {
410 NDR_record_t NDR;
411 mach_vm_address_t copyin_addr_wait;
412 uint64_t copyin_mask_wait;
413 mach_vm_address_t copyin_addr_signal;
414 uint64_t copyin_mask_signal;
415 mach_eventlink_associate_option_t option;
416 mach_msg_trailer_t trailer;
417 char padding[0]; /* Avoid generating empty UData structs */
418 } RequestU __attribute__((unused));
419#ifdef __MigPackStructs
420#pragma pack(pop)
421#endif
422 typedef __RequestKData__mach_eventlink_associate_t RequestK;
423 typedef __RequestUData__mach_eventlink_associate_t __RequestU;
424 typedef __ReplyKData__mach_eventlink_associate_t ReplyK __attribute__((unused));
425 typedef __ReplyUData__mach_eventlink_associate_t ReplyU __attribute__((unused));
426 typedef __Reply__mach_eventlink_associate_t Reply __attribute__((unused));
427 typedef __Request__mach_eventlink_associate_t __Request __attribute__((unused));
428
429 /*
430 * typedef struct {
431 * mach_msg_header_t Head;
432 * NDR_record_t NDR;
433 * kern_return_t RetCode;
434 * } mig_reply_error_t;
435 */
436
437 RequestK *InKP = (RequestK *) InHeadP;
438 RequestU *In0UP = (RequestU *) InDataP;
439 ReplyK *OutKP = (ReplyK *) OutHeadP;
440 ReplyU *OutUP = (ReplyU *) OutDataP;
441 (void)OutUP;
442#ifdef __MIG_check__Request__mach_eventlink_associate_t__defined
443 kern_return_t check_result;
444#endif /* __MIG_check__Request__mach_eventlink_associate_t__defined */
445
446#if __MigKernelSpecificCode
447#else
448#endif /* __MigKernelSpecificCode */
449 ipc_eventlink_t eventlink;
450 thread_t thread;
451
452 __DeclareRcvRpc(716202, "mach_eventlink_associate")
453 __BeforeRcvRpc(716202, "mach_eventlink_associate")
454
455#if defined(__MIG_check__Request__mach_eventlink_associate_t__defined)
456 check_result = __MIG_check__Request__mach_eventlink_associate_t(InKP: (RequestK *)InKP, In0UP: (__RequestU *)In0UP, InTrailerP);
457 if (check_result != MACH_MSG_SUCCESS)
458 { MIG_RETURN_ERROR(OutKP, check_result); }
459#endif /* defined(__MIG_check__Request__mach_eventlink_associate_t__defined) */
460
461 eventlink = convert_port_to_eventlink(port: InKP->Head.msgh_request_port);
462
463 thread = convert_port_to_thread(port: InKP->thread.name);
464
465 OutUP->RetCode = mach_eventlink_associate(eventlink, thread, copyin_addr_wait: In0UP->copyin_addr_wait, copyin_mask_wait: In0UP->copyin_mask_wait, copyin_addr_signal: In0UP->copyin_addr_signal, copyin_mask_signal: In0UP->copyin_mask_signal, option: In0UP->option);
466 thread_deallocate(thread);
467 ipc_eventlink_deallocate(ipc_eventlink: eventlink);
468#if __MigKernelSpecificCode
469 if (OutUP->RetCode != KERN_SUCCESS) {
470 MIG_RETURN_ERROR(OutKP, OutUP->RetCode);
471 }
472 ipc_port_release_send(port: (ipc_port_t)InKP->thread.name);
473#endif /* __MigKernelSpecificCode */
474
475 OutUP->NDR = NDR_record;
476
477
478 __AfterRcvRpc(716202, "mach_eventlink_associate")
479}
480
481#if ( __MigTypeCheck )
482#if __MIG_check__Request__mach_eventlink_subsystem__
483#if !defined(__MIG_check__Request__mach_eventlink_disassociate_t__defined)
484#define __MIG_check__Request__mach_eventlink_disassociate_t__defined
485
486mig_internal kern_return_t __MIG_check__Request__mach_eventlink_disassociate_t(
487 __attribute__((__unused__)) __RequestKData__mach_eventlink_disassociate_t *InKP,
488 __attribute__((__unused__)) __RequestUData__mach_eventlink_disassociate_t *In0UP,
489 __attribute__((__unused__)) mach_msg_max_trailer_t *InTrailerP)
490{
491
492 typedef __Request__mach_eventlink_disassociate_t __Request;
493 typedef __RequestUData__mach_eventlink_disassociate_t __RequestU __attribute__((unused));
494#if __MigTypeCheck
495 if ((InKP->Head.msgh_bits & MACH_MSGH_BITS_COMPLEX) ||
496 (InKP->Head.msgh_size != (mach_msg_size_t)sizeof(__Request)))
497 return MIG_BAD_ARGUMENTS;
498#endif /* __MigTypeCheck */
499
500 return MACH_MSG_SUCCESS;
501}
502#endif /* !defined(__MIG_check__Request__mach_eventlink_disassociate_t__defined) */
503#endif /* __MIG_check__Request__mach_eventlink_subsystem__ */
504#endif /* ( __MigTypeCheck ) */
505
506
507/* Routine mach_eventlink_disassociate */
508mig_internal novalue _Xmach_eventlink_disassociate
509 (mach_msg_header_t *InHeadP, __attribute__((__unused__)) void *InDataP,
510 __attribute__((__unused__)) mach_msg_max_trailer_t *InTrailerP,
511 mach_msg_header_t *OutHeadP, __attribute__((__unused__)) void *OutDataP)
512{
513
514#ifdef __MigPackStructs
515#pragma pack(push, 4)
516#endif
517 typedef struct {
518 NDR_record_t NDR;
519 mach_eventlink_disassociate_option_t option;
520 mach_msg_trailer_t trailer;
521 char padding[0]; /* Avoid generating empty UData structs */
522 } RequestU __attribute__((unused));
523#ifdef __MigPackStructs
524#pragma pack(pop)
525#endif
526 typedef __RequestKData__mach_eventlink_disassociate_t RequestK;
527 typedef __RequestUData__mach_eventlink_disassociate_t __RequestU;
528 typedef __ReplyKData__mach_eventlink_disassociate_t ReplyK __attribute__((unused));
529 typedef __ReplyUData__mach_eventlink_disassociate_t ReplyU __attribute__((unused));
530 typedef __Reply__mach_eventlink_disassociate_t Reply __attribute__((unused));
531 typedef __Request__mach_eventlink_disassociate_t __Request __attribute__((unused));
532
533 /*
534 * typedef struct {
535 * mach_msg_header_t Head;
536 * NDR_record_t NDR;
537 * kern_return_t RetCode;
538 * } mig_reply_error_t;
539 */
540
541 RequestK *InKP = (RequestK *) InHeadP;
542 RequestU *In0UP = (RequestU *) InDataP;
543 ReplyK *OutKP = (ReplyK *) OutHeadP;
544 ReplyU *OutUP = (ReplyU *) OutDataP;
545 (void)OutUP;
546#ifdef __MIG_check__Request__mach_eventlink_disassociate_t__defined
547 kern_return_t check_result;
548#endif /* __MIG_check__Request__mach_eventlink_disassociate_t__defined */
549
550#if __MigKernelSpecificCode
551#else
552#endif /* __MigKernelSpecificCode */
553 ipc_eventlink_t eventlink;
554
555 __DeclareRcvRpc(716203, "mach_eventlink_disassociate")
556 __BeforeRcvRpc(716203, "mach_eventlink_disassociate")
557
558#if defined(__MIG_check__Request__mach_eventlink_disassociate_t__defined)
559 check_result = __MIG_check__Request__mach_eventlink_disassociate_t(InKP: (RequestK *)InKP, In0UP: (__RequestU *)In0UP, InTrailerP);
560 if (check_result != MACH_MSG_SUCCESS)
561 { MIG_RETURN_ERROR(OutKP, check_result); }
562#endif /* defined(__MIG_check__Request__mach_eventlink_disassociate_t__defined) */
563
564 eventlink = convert_port_to_eventlink(port: InKP->Head.msgh_request_port);
565
566 OutUP->RetCode = mach_eventlink_disassociate(eventlink, option: In0UP->option);
567 ipc_eventlink_deallocate(ipc_eventlink: eventlink);
568#if __MigKernelSpecificCode
569#endif /* __MigKernelSpecificCode */
570
571 OutUP->NDR = NDR_record;
572
573
574 __AfterRcvRpc(716203, "mach_eventlink_disassociate")
575}
576
577
578
579/* Description of this kernel subsystem, for use in direct RPC */
580const struct mach_eventlink_subsystem mach_eventlink_subsystem = {
581 mach_eventlink_server_routine,
582 716200,
583 716204,
584 (mach_msg_size_t)sizeof(union __ReplyUnion__mach_eventlink_subsystem),
585 (vm_address_t)0,
586 {
587 { (mig_impl_routine_t) 0,
588 (mig_stub_kern_routine_t) _Xmach_eventlink_create, 3, 0, 2, (mach_msg_size_t)sizeof(__Reply__mach_eventlink_create_t)},
589 { .impl_routine: (mig_impl_routine_t) 0,
590 .kstub_routine: (mig_stub_kern_routine_t) _Xmach_eventlink_destroy, .argc: 1, .descr_count: 0, .reply_descr_count: 0, .max_reply_msg: (mach_msg_size_t)sizeof(__Reply__mach_eventlink_destroy_t)},
591 { .impl_routine: (mig_impl_routine_t) 0,
592 .kstub_routine: (mig_stub_kern_routine_t) _Xmach_eventlink_associate, .argc: 11, .descr_count: 0, .reply_descr_count: 0, .max_reply_msg: (mach_msg_size_t)sizeof(__Reply__mach_eventlink_associate_t)},
593 { .impl_routine: (mig_impl_routine_t) 0,
594 .kstub_routine: (mig_stub_kern_routine_t) _Xmach_eventlink_disassociate, .argc: 2, .descr_count: 0, .reply_descr_count: 0, .max_reply_msg: (mach_msg_size_t)sizeof(__Reply__mach_eventlink_disassociate_t)},
595 }
596};
597
598mig_external boolean_t mach_eventlink_server
599 (mach_msg_header_t *InHeadP, void *InDataP, mach_msg_max_trailer_t *InTrailerP, mach_msg_header_t *OutHeadP, void *OutDataP)
600{
601 /*
602 * typedef struct {
603 * mach_msg_header_t Head;
604 * NDR_record_t NDR;
605 * kern_return_t RetCode;
606 * } mig_reply_error_t;
607 */
608
609 mig_kern_routine_t routine;
610
611 OutHeadP->msgh_bits = MACH_MSGH_BITS(MACH_MSGH_BITS_REPLY(InHeadP->msgh_bits), 0);
612 OutHeadP->msgh_remote_port = InHeadP->msgh_reply_port;
613 /* Minimal size: routine() will update it if different */
614 OutHeadP->msgh_size = (mach_msg_size_t)sizeof(mig_reply_error_t);
615 OutHeadP->msgh_local_port = MACH_PORT_NULL;
616 OutHeadP->msgh_id = InHeadP->msgh_id + 100;
617 OutHeadP->msgh_reserved = 0;
618
619 if ((InHeadP->msgh_id > 716203) || (InHeadP->msgh_id < 716200) ||
620 ((routine = mach_eventlink_subsystem.kroutine[InHeadP->msgh_id - 716200].kstub_routine) == 0)) {
621 ((mig_reply_error_t *)OutHeadP)->NDR = NDR_record;
622 ((mig_reply_error_t *)OutHeadP)->RetCode = MIG_BAD_ID;
623 return FALSE;
624 }
625 (*routine) (InHeadP, InDataP, InTrailerP, OutHeadP, OutDataP);
626 return TRUE;
627}
628
629mig_external mig_kern_routine_t mach_eventlink_server_routine
630 (mach_msg_header_t *InHeadP)
631{
632 int msgh_id;
633
634 msgh_id = InHeadP->msgh_id - 716200;
635
636 if ((msgh_id > 3) || (msgh_id < 0))
637 return 0;
638
639 return mach_eventlink_subsystem.kroutine[msgh_id].kstub_routine;
640}
641