1 /* $OpenBSD: mutex.h,v 1.4 2007/05/15 15:23:36 art Exp $ */
2
3 /*
4 * Copyright (c) 2004 Artur Grabowski <art@openbsd.org>
5 * All rights reserved.
6 *
7 * Redistribution and use in source and binary forms, with or without
8 * modification, are permitted provided that the following conditions
9 * are met:
10 *
11 * 1. Redistributions of source code must retain the above copyright
12 * notice, this list of conditions and the following disclaimer.
13 * 2. The name of the author may not be used to endorse or promote products
14 * derived from this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
17 * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
18 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
19 * THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
20 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
21 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
22 * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
23 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
24 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
25 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27
28 #ifndef _SYS_MUTEX_H_
29 #define _SYS_MUTEX_H_
30
31 /*
32 * A mutex is:
33 * - owned by a cpu.
34 * - non-recursive.
35 * - spinning.
36 * - not providing mutual exclusion between processes, only cpus.
37 * - providing interrupt blocking when necessary.
38 *
39 * Different mutexes can be nested, but not interleaved. This is ok:
40 * "mtx_enter(foo); mtx_enter(bar); mtx_leave(bar); mtx_leave(foo);"
41 * This is _not_ ok:
42 * "mtx_enter(foo); mtx_enter(bar); mtx_leave(foo); mtx_leave(bar);"
43 */
44
45 #include <machine/mutex.h>
46
47 /*
48 * Some architectures need to do magic for the ipl, so they need a macro.
49 */
50 #ifndef mtx_init
51 void mtx_init(struct mutex *, int);
52 #endif
53 void mtx_enter(struct mutex *);
54 void mtx_leave(struct mutex *);
55
56 #endif