#ifndef _MACH_SEMAPHORE_H_
#define _MACH_SEMAPHORE_H_
#include <mach/port.h>
#include <mach/mach_types.h>
#include <mach/kern_return.h>
#include <mach/sync_policy.h>
#include <sys/cdefs.h>
__BEGIN_DECLS
extern kern_return_t semaphore_signal(semaphore_t semaphore);
extern kern_return_t semaphore_signal_all(semaphore_t semaphore);
extern kern_return_t semaphore_wait(semaphore_t semaphore);
#ifdef KERNEL
#ifdef __LP64__
#ifdef KERNEL_PRIVATE
extern kern_return_t semaphore_timedwait(semaphore_t semaphore,
mach_timespec_t wait_time);
#endif
#else
extern kern_return_t semaphore_timedwait(semaphore_t semaphore,
mach_timespec_t wait_time);
#endif
extern kern_return_t semaphore_wait_deadline(semaphore_t semaphore,
uint64_t deadline);
extern kern_return_t semaphore_wait_noblock(semaphore_t semaphore);
#ifdef XNU_KERNEL_PRIVATE
extern kern_return_t semaphore_wait_signal(semaphore_t wait_semaphore,
semaphore_t signal_semaphore);
extern kern_return_t semaphore_timedwait_signal(semaphore_t wait_semaphore,
semaphore_t signal_semaphore,
mach_timespec_t wait_time);
extern kern_return_t semaphore_signal_thread(semaphore_t semaphore,
thread_t thread);
#endif
#else
extern kern_return_t semaphore_timedwait(semaphore_t semaphore,
mach_timespec_t wait_time);
extern kern_return_t semaphore_timedwait_signal(semaphore_t wait_semaphore,
semaphore_t signal_semaphore,
mach_timespec_t wait_time);
extern kern_return_t semaphore_wait_signal(semaphore_t wait_semaphore,
semaphore_t signal_semaphore);
extern kern_return_t semaphore_signal_thread(semaphore_t semaphore,
thread_t thread);
#endif
__END_DECLS
#ifdef PRIVATE
#define SEMAPHORE_OPTION_NONE 0x00000000
#define SEMAPHORE_SIGNAL 0x00000001
#define SEMAPHORE_WAIT 0x00000002
#define SEMAPHORE_WAIT_ON_SIGNAL 0x00000008
#define SEMAPHORE_SIGNAL_TIMEOUT 0x00000010
#define SEMAPHORE_SIGNAL_ALL 0x00000020
#define SEMAPHORE_SIGNAL_INTERRUPT 0x00000040
#define SEMAPHORE_SIGNAL_PREPOST 0x00000080
#define SEMAPHORE_WAIT_TIMEOUT 0x00000100
#define SEMAPHORE_WAIT_INTERRUPT 0x00000400
#define SEMAPHORE_TIMEOUT_NOBLOCK 0x00100000
#define SEMAPHORE_TIMEOUT_RELATIVE 0x00200000
#define SEMAPHORE_USE_SAVED_RESULT 0x01000000
#define SEMAPHORE_SIGNAL_RELEASE 0x02000000
#endif
#endif