1 
2 /*
3  * Licensed Materials - Property of IBM
4  *
5  * trousers - An open source TCG Software Stack
6  *
7  * (C) Copyright International Business Machines Corp. 2006
8  *
9  */
10 
11 #ifndef __THREADS_H__
12 #define __THREADS_H__
13 
14 #ifdef HAVE_PTHREAD_H
15 
16 #include <pthread.h>
17 
18 /* mutex abstractions */
19 #define MUTEX_INIT(m)		pthread_mutex_init(&m, NULL)
20 #define MUTEX_LOCK(m)		pthread_mutex_lock(&m)
21 #define MUTEX_UNLOCK(m)		pthread_mutex_unlock(&m)
22 #define MUTEX_DECLARE(m)	pthread_mutex_t m
23 #define MUTEX_DECLARE_INIT(m)	pthread_mutex_t m = PTHREAD_MUTEX_INITIALIZER
24 #define MUTEX_DECLARE_EXTERN(m)	extern pthread_mutex_t m
25 
26 /* condition variable abstractions */
27 #define COND_DECLARE(c)		pthread_cond_t c
28 #define COND_INIT(c)		pthread_cond_init(&c, NULL)
29 #define COND_VAR		pthread_cond_t
30 #define COND_WAIT(c,m)		pthread_cond_wait(c,m)
31 #define COND_SIGNAL(c)		pthread_cond_signal(c)
32 
33 /* thread abstractions */
34 #define THREAD_ID			((THREAD_TYPE)pthread_self())
35 #define THREAD_TYPE			pthread_t
36 #define THREAD_JOIN			pthread_join
37 #define THREAD_DETACH			pthread_detach
38 #define THREAD_ATTR_DECLARE(a)		pthread_attr_t a
39 #define THREAD_ATTR_INIT(a)		pthread_attr_init(&a)
40 #define THREAD_ATTR_SETJOINABLE(a)	pthread_attr_setdetachstate(&a, PTHREAD_CREATE_JOINABLE)
41 #define THREAD_EXIT			pthread_exit
42 #define THREAD_CREATE(a,b,c,d)		pthread_create(a,b,c,d)
43 #define THREAD_SET_SIGNAL_MASK		pthread_sigmask
44 #define THREAD_NULL			(THREAD_TYPE *)0
45 
46 #else
47 
48 #error No threading library defined! (Cannot find pthread.h)
49 
50 #endif
51 
52 #endif
53