2 * Copyright (c) 2019 Apple Computer, Inc. All rights reserved.
4 * @APPLE_OSREFERENCE_LICENSE_HEADER_START@
6 * This file contains Original Code and/or Modifications of Original Code
7 * as defined in and that are subject to the Apple Public Source License
8 * Version 2.0 (the 'License'). You may not use this file except in
9 * compliance with the License. The rights granted to you under the License
10 * may not be used to create, or enable the creation or redistribution of,
11 * unlawful or unlicensed copies of an Apple operating system, or to
12 * circumvent, violate, or enable the circumvention or violation of, any
13 * terms of an Apple operating system software license agreement.
15 * Please obtain a copy of the License at
16 * http://www.opensource.apple.com/apsl/ and read it before using this file.
18 * The Original Code and all software distributed under the License are
19 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
20 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
21 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
22 * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
23 * Please see the License for the specific language governing rights and
24 * limitations under the License.
26 * @APPLE_OSREFERENCE_LICENSE_HEADER_END@
29 #include <mach/boolean.h>
30 #include <mach/message.h>
31 #include <mach/kern_return.h>
32 #include <mach/mach_traps.h>
33 #include <mach/mach_types.h>
34 #include <mach/clock_types.h>
35 #include <mach/mach_eventlink_types.h>
38 * __mach_eventlink* calls are bsd syscalls instead of mach traps because
39 * they need to return a 64 bit value in register and mach traps currently
40 * does not allow 64 bit return values.
43 __mach_eventlink_signal(
44 mach_port_t eventlink_port
,
45 uint64_t signal_count
);
48 __mach_eventlink_wait_until(
49 mach_port_t eventlink_port
,
50 uint64_t wait_signal_count
,
52 kern_clock_id_t clock_id
,
53 mach_eventlink_signal_wait_option_t option
);
56 __mach_eventlink_signal_wait_until(
57 mach_port_t eventlink_port
,
59 uint64_t signal_count
,
61 kern_clock_id_t clock_id
,
62 mach_eventlink_signal_wait_option_t option
);
65 mach_eventlink_signal(
66 mach_port_t eventlink_port
,
67 uint64_t signal_count
)
69 uint64_t retval
= __mach_eventlink_signal(eventlink_port
, signal_count
);
71 return decode_eventlink_error_from_retval(retval
);
75 mach_eventlink_wait_until(
76 mach_port_t eventlink_port
,
77 uint64_t *wait_count_ptr
,
78 mach_eventlink_signal_wait_option_t option
,
79 kern_clock_id_t clock_id
,
84 retval
= __mach_eventlink_wait_until(eventlink_port
, *wait_count_ptr
,
85 deadline
, clock_id
, option
);
87 *wait_count_ptr
= decode_eventlink_count_from_retval(retval
);
88 return decode_eventlink_error_from_retval(retval
);
92 mach_eventlink_signal_wait_until(
93 mach_port_t eventlink_port
,
94 uint64_t *wait_count_ptr
,
95 uint64_t signal_count
,
96 mach_eventlink_signal_wait_option_t option
,
97 kern_clock_id_t clock_id
,
101 retval
= __mach_eventlink_signal_wait_until(eventlink_port
, *wait_count_ptr
,
102 signal_count
, deadline
, clock_id
, option
);
103 *wait_count_ptr
= decode_eventlink_count_from_retval(retval
);
104 return decode_eventlink_error_from_retval(retval
);