xref: /xnu-10063.121.3/osfmk/mach/semaphore.h (revision 2c2f96dc2b9a4408a43d3150ae9c105355ca3daa)
1 /*
2  * Copyright (c) 2000-2008 Apple Inc. All rights reserved.
3  *
4  * @APPLE_OSREFERENCE_LICENSE_HEADER_START@
5  *
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.
14  *
15  * Please obtain a copy of the License at
16  * http://www.opensource.apple.com/apsl/ and read it before using this file.
17  *
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.
25  *
26  * @APPLE_OSREFERENCE_LICENSE_HEADER_END@
27  */
28 
29 #ifndef _MACH_SEMAPHORE_H_
30 #define _MACH_SEMAPHORE_H_
31 
32 #include <mach/port.h>
33 #include <mach/mach_types.h>
34 #include <mach/kern_return.h>
35 #include <mach/sync_policy.h>
36 
37 /*
38  *	Forward Declarations
39  *
40  *	The semaphore creation and deallocation routines are
41  *	defined with the Mach task APIs in <mach/task.h>.
42  *
43  *      kern_return_t	semaphore_create(task_t task,
44  *                                       semaphore_t *new_semaphore,
45  *					 sync_policy_t policy,
46  *					 int value);
47  *
48  *	kern_return_t	semaphore_destroy(task_t task,
49  *					  semaphore_t semaphore);
50  */
51 
52 #include <sys/cdefs.h>
53 __BEGIN_DECLS
54 
55 extern  kern_return_t   semaphore_signal(semaphore_t semaphore);
56 extern  kern_return_t   semaphore_signal_all(semaphore_t semaphore);
57 
58 extern  kern_return_t   semaphore_wait(semaphore_t semaphore);
59 
60 #ifdef  KERNEL
61 
62 #ifdef  __LP64__
63 
64 #ifdef  KERNEL_PRIVATE
65 
66 extern  kern_return_t   semaphore_timedwait(semaphore_t semaphore,
67     mach_timespec_t wait_time);
68 
69 #endif  /* KERNEL_PRIVATE */
70 
71 #else   /* __LP64__ */
72 
73 extern  kern_return_t   semaphore_timedwait(semaphore_t semaphore,
74     mach_timespec_t wait_time);
75 
76 #endif  /* __LP64__ */
77 
78 extern  kern_return_t   semaphore_wait_deadline(semaphore_t semaphore,
79     uint64_t deadline);
80 extern  kern_return_t   semaphore_wait_noblock(semaphore_t semaphore);
81 
82 #ifdef  XNU_KERNEL_PRIVATE
83 
84 extern  kern_return_t   semaphore_wait_signal(semaphore_t wait_semaphore,
85     semaphore_t signal_semaphore);
86 
87 extern  kern_return_t   semaphore_timedwait_signal(semaphore_t wait_semaphore,
88     semaphore_t signal_semaphore,
89     mach_timespec_t wait_time);
90 
91 extern  kern_return_t   semaphore_signal_thread(semaphore_t semaphore,
92     thread_t thread);
93 
94 #endif  /* XNU_KERNEL_PRIVATE */
95 
96 #else   /* KERNEL */
97 
98 extern  kern_return_t   semaphore_timedwait(semaphore_t semaphore,
99     mach_timespec_t wait_time);
100 
101 extern  kern_return_t   semaphore_timedwait_signal(semaphore_t wait_semaphore,
102     semaphore_t signal_semaphore,
103     mach_timespec_t wait_time);
104 
105 extern  kern_return_t   semaphore_wait_signal(semaphore_t wait_semaphore,
106     semaphore_t signal_semaphore);
107 
108 extern  kern_return_t   semaphore_signal_thread(semaphore_t semaphore,
109     thread_t thread);
110 
111 #endif  /* KERNEL */
112 
113 __END_DECLS
114 
115 #ifdef  PRIVATE
116 
117 #define SEMAPHORE_OPTION_NONE           0x00000000
118 
119 #define SEMAPHORE_SIGNAL                0x00000001
120 #define SEMAPHORE_WAIT                  0x00000002
121 #define SEMAPHORE_WAIT_ON_SIGNAL        0x00000008
122 
123 #define SEMAPHORE_SIGNAL_TIMEOUT        0x00000010
124 #define SEMAPHORE_SIGNAL_ALL            0x00000020
125 #define SEMAPHORE_SIGNAL_INTERRUPT      0x00000040      /* libmach implements */
126 #define SEMAPHORE_SIGNAL_PREPOST        0x00000080
127 
128 #define SEMAPHORE_WAIT_TIMEOUT          0x00000100
129 #define SEMAPHORE_WAIT_INTERRUPT        0x00000400      /* libmach implements */
130 
131 #define SEMAPHORE_TIMEOUT_NOBLOCK       0x00100000
132 #define SEMAPHORE_TIMEOUT_RELATIVE      0x00200000
133 
134 #define SEMAPHORE_USE_SAVED_RESULT      0x01000000      /* internal use only */
135 #define SEMAPHORE_SIGNAL_RELEASE        0x02000000      /* internal use only */
136 #define SEMAPHORE_THREAD_HANDOFF        0x04000000
137 
138 #endif  /* PRIVATE */
139 
140 #endif  /* _MACH_SEMAPHORE_H_ */
141