1*b819cea2SGordon Ross /*
2*b819cea2SGordon Ross  * CDDL HEADER START
3*b819cea2SGordon Ross  *
4*b819cea2SGordon Ross  * The contents of this file are subject to the terms of the
5*b819cea2SGordon Ross  * Common Development and Distribution License, Version 1.0 only
6*b819cea2SGordon Ross  * (the "License").  You may not use this file except in compliance
7*b819cea2SGordon Ross  * with the License.
8*b819cea2SGordon Ross  *
9*b819cea2SGordon Ross  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
10*b819cea2SGordon Ross  * or http://www.opensolaris.org/os/licensing.
11*b819cea2SGordon Ross  * See the License for the specific language governing permissions
12*b819cea2SGordon Ross  * and limitations under the License.
13*b819cea2SGordon Ross  *
14*b819cea2SGordon Ross  * When distributing Covered Code, include this CDDL HEADER in each
15*b819cea2SGordon Ross  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
16*b819cea2SGordon Ross  * If applicable, add the following below this CDDL HEADER, with the
17*b819cea2SGordon Ross  * fields enclosed by brackets "[]" replaced with your own identifying
18*b819cea2SGordon Ross  * information: Portions Copyright [yyyy] [name of copyright owner]
19*b819cea2SGordon Ross  *
20*b819cea2SGordon Ross  * CDDL HEADER END
21*b819cea2SGordon Ross  */
22*b819cea2SGordon Ross /*
23*b819cea2SGordon Ross  * Copyright (c) 1993-1998 by Sun Microsystems, Inc.
24*b819cea2SGordon Ross  * All rights reserved.
25*b819cea2SGordon Ross  *
26*b819cea2SGordon Ross  * Copyright 2013 Nexenta Systems, Inc.  All rights reserved.
27*b819cea2SGordon Ross  */
28*b819cea2SGordon Ross 
29*b819cea2SGordon Ross #ifndef _SYS_SEMAPHORE_H
30*b819cea2SGordon Ross #define	_SYS_SEMAPHORE_H
31*b819cea2SGordon Ross 
32*b819cea2SGordon Ross /*
33*b819cea2SGordon Ross  * Public interface to semaphores.  See semaphore(9F) for details.
34*b819cea2SGordon Ross  */
35*b819cea2SGordon Ross 
36*b819cea2SGordon Ross #include <sys/synch.h>	/* lwp_sema_t */
37*b819cea2SGordon Ross 
38*b819cea2SGordon Ross #ifdef	__cplusplus
39*b819cea2SGordon Ross extern "C" {
40*b819cea2SGordon Ross #endif
41*b819cea2SGordon Ross 
42*b819cea2SGordon Ross typedef enum {
43*b819cea2SGordon Ross 	SEMA_DEFAULT,
44*b819cea2SGordon Ross 	SEMA_DRIVER
45*b819cea2SGordon Ross } ksema_type_t;
46*b819cea2SGordon Ross 
47*b819cea2SGordon Ross typedef lwp_sema_t ksema_t;
48*b819cea2SGordon Ross 
49*b819cea2SGordon Ross #define	SEMA_HELD(x)		(sema_held((x)))
50*b819cea2SGordon Ross 
51*b819cea2SGordon Ross /*
52*b819cea2SGordon Ross  * We're simulating the kernel mutex API here, and the
53*b819cea2SGordon Ross  * user-level has a different signature, so rename.
54*b819cea2SGordon Ross  */
55*b819cea2SGordon Ross 
56*b819cea2SGordon Ross #define	sema_init	ksema_init
57*b819cea2SGordon Ross #define	sema_destroy	ksema_destroy
58*b819cea2SGordon Ross 
59*b819cea2SGordon Ross extern	void	ksema_init(ksema_t *, uint32_t, char *, ksema_type_t, void *);
60*b819cea2SGordon Ross extern	void	ksema_destroy(ksema_t *);
61*b819cea2SGordon Ross 
62*b819cea2SGordon Ross extern	void	sema_p(ksema_t *);
63*b819cea2SGordon Ross extern	int	sema_p_sig(ksema_t *);
64*b819cea2SGordon Ross extern	void	sema_v(ksema_t *);
65*b819cea2SGordon Ross extern	int	sema_tryp(ksema_t *);
66*b819cea2SGordon Ross extern	int	sema_held(ksema_t *);
67*b819cea2SGordon Ross 
68*b819cea2SGordon Ross #ifdef	__cplusplus
69*b819cea2SGordon Ross }
70*b819cea2SGordon Ross #endif
71*b819cea2SGordon Ross 
72*b819cea2SGordon Ross #endif	/* _SYS_SEMAPHORE_H */