source: trunk/libs/newlib/src/newlib/libc/include/sys/_pthreadtypes.h @ 444

Last change on this file since 444 was 444, checked in by satin@…, 6 years ago

add newlib,libalmos-mkh, restructure shared_syscalls.h and mini-libc

File size: 7.3 KB
Line 
1/*
2 *  Written by Joel Sherrill <joel.sherrill@OARcorp.com>.
3 *
4 *  COPYRIGHT (c) 1989-2013, 2015.
5 *  On-Line Applications Research Corporation (OAR).
6 *
7 *  Permission to use, copy, modify, and distribute this software for any
8 *  purpose without fee is hereby granted, provided that this entire notice
9 *  is included in all copies of any software which is or includes a copy
10 *  or modification of this software.
11 *
12 *  THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED
13 *  WARRANTY.  IN PARTICULAR,  THE AUTHOR MAKES NO REPRESENTATION
14 *  OR WARRANTY OF ANY KIND CONCERNING THE MERCHANTABILITY OF THIS
15 *  SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE.
16 */
17
18#ifndef _SYS__PTHREADTYPES_H_
19#define _SYS__PTHREADTYPES_H_
20
21#if defined(_POSIX_THREADS) || __POSIX_VISIBLE >= 199506
22
23#include <sys/sched.h>
24
25/*
26 *  2.5 Primitive System Data Types,  P1003.1c/D10, p. 19.
27 */
28
29#if defined(__XMK__)
30typedef unsigned int pthread_t;          /* identify a thread */
31#else
32typedef __uint32_t pthread_t;            /* identify a thread */
33#endif
34
35/* P1003.1c/D10, p. 118-119 */
36#define PTHREAD_SCOPE_PROCESS 0
37#define PTHREAD_SCOPE_SYSTEM  1
38
39/* P1003.1c/D10, p. 111 */
40#define PTHREAD_INHERIT_SCHED  1      /* scheduling policy and associated */
41                                      /*   attributes are inherited from */
42                                      /*   the calling thread. */
43#define PTHREAD_EXPLICIT_SCHED 2      /* set from provided attribute object */
44
45/* P1003.1c/D10, p. 141 */
46#define PTHREAD_CREATE_DETACHED 0
47#define PTHREAD_CREATE_JOINABLE  1
48
49#if defined(__XMK__)
50typedef struct pthread_attr_s {
51  int contentionscope;
52  struct sched_param schedparam;
53  int  detachstate;
54  void *stackaddr;
55  size_t stacksize;
56} pthread_attr_t;
57
58#define PTHREAD_STACK_MIN       200
59
60#else /* !defined(__XMK__) */
61typedef struct {
62  int is_initialized;
63  void *stackaddr;
64  int stacksize;
65  int contentionscope;
66  int inheritsched;
67  int schedpolicy;
68  struct sched_param schedparam;
69
70  /* P1003.4b/D8, p. 54 adds cputime_clock_allowed attribute.  */
71#if defined(_POSIX_THREAD_CPUTIME)
72  int  cputime_clock_allowed;  /* see time.h */
73#endif
74  int  detachstate;
75} pthread_attr_t;
76
77#endif /* !defined(__XMK__) */
78
79#if defined(_POSIX_THREAD_PROCESS_SHARED)
80/* NOTE: P1003.1c/D10, p. 81 defines following values for process_shared.  */
81
82#define PTHREAD_PROCESS_PRIVATE 0 /* visible within only the creating process */
83#define PTHREAD_PROCESS_SHARED  1 /* visible too all processes with access to */
84                                  /*   the memory where the resource is */
85                                  /*   located */
86#endif
87
88#if defined(_POSIX_THREAD_PRIO_PROTECT)
89/* Mutexes */
90
91/* Values for blocking protocol. */
92
93#define PTHREAD_PRIO_NONE    0
94#define PTHREAD_PRIO_INHERIT 1
95#define PTHREAD_PRIO_PROTECT 2
96#endif
97
98#if defined(_UNIX98_THREAD_MUTEX_ATTRIBUTES)
99
100/* Values for mutex type */
101
102/* The following defines are part of the X/Open System Interface (XSI). */
103
104/*
105 * This type of mutex does not detect deadlock. A thread attempting to
106 * relock this mutex without first unlocking it shall deadlock. Attempting
107 * to unlock a mutex locked by a different thread results in undefined
108 * behavior.  Attempting to unlock an unlocked mutex results in undefined
109 * behavior.
110 */
111#define PTHREAD_MUTEX_NORMAL     0
112
113/*
114 * A thread attempting to relock this mutex without first unlocking
115 * it shall succeed in locking the mutex.  The relocking deadlock which
116 * can occur with mutexes of type PTHREAD_MUTEX_NORMAL cannot occur with
117 * this type of mutex.  Multiple locks of this mutex shall require the
118 * same number of unlocks to release the mutex before another thread can
119 * acquire the mutex. A thread attempting to unlock a mutex which another
120 * thread has locked shall return with an error.  A thread attempting to
121 * unlock an unlocked mutex shall return with an error.
122 */
123#define PTHREAD_MUTEX_RECURSIVE  1
124
125/*
126 * This type of mutex provides error checking. A thread attempting
127 * to relock this mutex without first unlocking it shall return with an
128 * error. A thread attempting to unlock a mutex which another thread has
129 * locked shall return with an error. A thread attempting to unlock an
130 * unlocked mutex shall return with an error.
131 */
132#define PTHREAD_MUTEX_ERRORCHECK 2
133
134/*
135 * Attempting to recursively lock a mutex of this type results
136 * in undefined behavior. Attempting to unlock a mutex of this type
137 * which was not locked by the calling thread results in undefined
138 * behavior. Attempting to unlock a mutex of this type which is not locked
139 * results in undefined behavior. An implementation may map this mutex to
140 * one of the other mutex types.
141 */
142#define PTHREAD_MUTEX_DEFAULT    3
143
144#endif /* !defined(_UNIX98_THREAD_MUTEX_ATTRIBUTES) */
145
146#if defined(__XMK__)
147typedef unsigned int pthread_mutex_t;    /* identify a mutex */
148
149typedef struct {
150  int type;
151} pthread_mutexattr_t;
152
153#else /* !defined(__XMK__) */
154typedef __uint32_t pthread_mutex_t;      /* identify a mutex */
155
156typedef struct {
157  int   is_initialized;
158#if defined(_POSIX_THREAD_PROCESS_SHARED)
159  int   process_shared;  /* allow mutex to be shared amongst processes */
160#endif
161#if defined(_POSIX_THREAD_PRIO_PROTECT)
162  int   prio_ceiling;
163  int   protocol;
164#endif
165#if defined(_UNIX98_THREAD_MUTEX_ATTRIBUTES)
166  int type;
167#endif
168  int   recursive;
169} pthread_mutexattr_t;
170#endif /* !defined(__XMK__) */
171
172#define _PTHREAD_MUTEX_INITIALIZER ((pthread_mutex_t) 0xFFFFFFFF)
173
174/* Condition Variables */
175
176typedef __uint32_t pthread_cond_t;       /* identify a condition variable */
177
178#define _PTHREAD_COND_INITIALIZER ((pthread_cond_t) 0xFFFFFFFF)
179
180typedef struct {
181  int      is_initialized;
182  clock_t  clock;             /* specifiy clock for timeouts */
183#if defined(_POSIX_THREAD_PROCESS_SHARED)
184  int      process_shared;    /* allow this to be shared amongst processes */
185#endif
186} pthread_condattr_t;         /* a condition attribute object */
187
188/* Keys */
189
190typedef __uint32_t pthread_key_t;        /* thread-specific data keys */
191
192typedef struct {
193  int   is_initialized;  /* is this structure initialized? */
194  int   init_executed;   /* has the initialization routine been run? */
195} pthread_once_t;       /* dynamic package initialization */
196
197#define _PTHREAD_ONCE_INIT  { 1, 0 }  /* is initialized and not run */
198#endif /* defined(_POSIX_THREADS) || __POSIX_VISIBLE >= 199506 */
199
200/* POSIX Barrier Types */
201
202#if defined(_POSIX_BARRIERS)
203typedef __uint32_t pthread_barrier_t;        /* POSIX Barrier Object */
204typedef struct {
205  int   is_initialized;  /* is this structure initialized? */
206#if defined(_POSIX_THREAD_PROCESS_SHARED)
207  int   process_shared;       /* allow this to be shared amongst processes */
208#endif
209} pthread_barrierattr_t;
210#endif /* defined(_POSIX_BARRIERS) */
211
212/* POSIX Spin Lock Types */
213
214#if defined(_POSIX_SPIN_LOCKS)
215typedef __uint32_t pthread_spinlock_t;        /* POSIX Spin Lock Object */
216#endif /* defined(_POSIX_SPIN_LOCKS) */
217
218/* POSIX Reader/Writer Lock Types */
219
220#if defined(_POSIX_READER_WRITER_LOCKS)
221typedef __uint32_t pthread_rwlock_t;         /* POSIX RWLock Object */
222
223#define _PTHREAD_RWLOCK_INITIALIZER ((pthread_rwlock_t) 0xFFFFFFFF)
224
225typedef struct {
226  int   is_initialized;       /* is this structure initialized? */
227#if defined(_POSIX_THREAD_PROCESS_SHARED)
228  int   process_shared;       /* allow this to be shared amongst processes */
229#endif
230} pthread_rwlockattr_t;
231#endif /* defined(_POSIX_READER_WRITER_LOCKS) */
232
233#endif /* ! _SYS__PTHREADTYPES_H_ */
Note: See TracBrowser for help on using the repository browser.