diff options
author | David Leonard <d@cvs.openbsd.org> | 1998-09-05 07:40:49 +0000 |
---|---|---|
committer | David Leonard <d@cvs.openbsd.org> | 1998-09-05 07:40:49 +0000 |
commit | d58a024513614202bc6448cd18096a33fefab632 (patch) | |
tree | 20ddbf54cc002f0b6519263c61ff525afbedd6fb | |
parent | a015b24948d7784a60fd2088998cd612658301c3 (diff) |
missed these too. sigh
-rw-r--r-- | lib/libc_r/include/Makefile.inc | 12 | ||||
-rw-r--r-- | lib/libc_r/include/pthread.h | 317 | ||||
-rw-r--r-- | lib/libc_r/include/pthread_np.h | 51 | ||||
-rw-r--r-- | lib/libc_r/include/sched.h | 73 | ||||
-rw-r--r-- | lib/libpthread/include/Makefile.inc | 12 | ||||
-rw-r--r-- | lib/libpthread/include/pthread.h | 317 | ||||
-rw-r--r-- | lib/libpthread/include/pthread_np.h | 51 | ||||
-rw-r--r-- | lib/libpthread/include/sched.h | 73 |
8 files changed, 906 insertions, 0 deletions
diff --git a/lib/libc_r/include/Makefile.inc b/lib/libc_r/include/Makefile.inc new file mode 100644 index 00000000000..389952b97f1 --- /dev/null +++ b/lib/libc_r/include/Makefile.inc @@ -0,0 +1,12 @@ +# $OpenBSD: Makefile.inc,v 1.1 1998/09/05 07:40:47 d Exp $ + +includes: + @cd ${.CURDIR}/include; \ + for h in pthread.h pthread_np.h sched.h; do \ + cmp -s $$h ${DESTDIR}/usr/include/$$h > /dev/null 2>&1 || \ + (echo ${INSTALL} ${INSTALL_COPY} -o ${BINOWN} -g ${BINGRP} \ + -m 444 $$h ${DESTDIR}/usr/include; \ + ${INSTALL} ${INSTALL_COPY} -o ${BINOWN} -g ${BINGRP} -m 444 \ + $$h ${DESTDIR}/usr/include) || exit 1; \ + done + diff --git a/lib/libc_r/include/pthread.h b/lib/libc_r/include/pthread.h new file mode 100644 index 00000000000..aabf39fb335 --- /dev/null +++ b/lib/libc_r/include/pthread.h @@ -0,0 +1,317 @@ +/* + * Copyright (c) 1993, 1994 by Chris Provenzano, proven@mit.edu + * Copyright (c) 1995-1998 by John Birrell <jb@cimlogic.com.au> + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * This product includes software developed by Chris Provenzano. + * 4. The name of Chris Provenzano may not be used to endorse or promote + * products derived from this software without specific prior written + * permission. + * + * THIS SOFTWARE IS PROVIDED BY CHRIS PROVENZANO ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL CHRIS PROVENZANO BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * $OpenBSD: pthread.h,v 1.1 1998/09/05 07:40:47 d Exp $ + * + */ +#ifndef _PTHREAD_H_ +#define _PTHREAD_H_ + +#ifdef _POSIX_THREADS + +/* + * Header files. + */ +#include <sys/cdefs.h> +#include <sys/types.h> +#include <sys/time.h> +#include <sys/signal.h> +#include <limits.h> +#include <sched.h> /* SUSV2 */ + +/* + * Run-time invariant values: + */ +#define PTHREAD_DESTRUCTOR_ITERATIONS 4 +#define PTHREAD_KEYS_MAX 256 +#define PTHREAD_STACK_MIN 1024 +#define PTHREAD_THREADS_MAX ULONG_MAX + +/* + * Compile time symbolic constants for portability specifications: + * + * Note that those commented out are not currently supported by the + * implementation. + */ + +#define _POSIX_THREAD_ATTR_STACKADDR +#define _POSIX_THREAD_ATTR_STACKSIZE +/* #define _POSIX_THREAD_PRIORITY_SCHEDULING */ +/* #define _POSIX_THREAD_PRIO_INHERIT */ +/* #define _POSIX_THREAD_PRIO_PROTECT */ +/* #define _POSIX_THREAD_PROCESS_SHARED */ +#define _POSIX_THREAD_SAFE_FUNCTIONS + +/* + * Flags for threads and thread attributes. + */ +#define PTHREAD_DETACHED 0x1 +#define PTHREAD_SCOPE_SYSTEM 0x2 +#define PTHREAD_INHERIT_SCHED 0x4 +#define PTHREAD_NOFLOAT 0x8 + +#define PTHREAD_CREATE_DETACHED PTHREAD_DETACHED +#define PTHREAD_CREATE_JOINABLE 0 +#define PTHREAD_SCOPE_PROCESS 0 +#define PTHREAD_EXPLICIT_SCHED 0 + +/* + * Forward structure definitions. + * + * These are mostly opaque to the user. + */ +struct pthread; +struct pthread_attr; +struct pthread_cond; +struct pthread_cond_attr; +struct pthread_mutex; +struct pthread_mutex_attr; +struct pthread_once; +struct sched_param; + +/* + * Primitive system data type definitions required by P1003.1c. + * + * Note that P1003.1c specifies that there are no defined comparison + * or assignment operators for the types pthread_attr_t, pthread_cond_t, + * pthread_condattr_t, pthread_mutex_t, pthread_mutexattr_t. + */ +typedef struct pthread *pthread_t; +typedef struct pthread_attr *pthread_attr_t; +typedef struct pthread_mutex *pthread_mutex_t; +typedef struct pthread_mutex_attr *pthread_mutexattr_t; +typedef struct pthread_cond *pthread_cond_t; +typedef struct pthread_cond_attr *pthread_condattr_t; +typedef int pthread_key_t; +typedef struct pthread_once pthread_once_t; + +/* + * Additional type definitions: + * + * Note that P1003.1c reserves the prefixes pthread_ and PTHREAD_ for + * use in header symbols. + */ +typedef void *pthread_addr_t; +typedef void *(*pthread_startroutine_t) __P((void *)); + +/* + * Once definitions. + */ +struct pthread_once { + int state; + pthread_mutex_t mutex; +}; + +/* + * Flags for once initialization. + */ +#define PTHREAD_NEEDS_INIT 0 +#define PTHREAD_DONE_INIT 1 + +/* + * Static once initialization values. + */ +#define PTHREAD_ONCE_INIT { PTHREAD_NEEDS_INIT, NULL } + +/* + * Static initialization values. + */ +#define PTHREAD_MUTEX_INITIALIZER NULL +#define PTHREAD_COND_INITIALIZER NULL + +/* + * Default attribute arguments (draft 4, deprecated). + */ +#ifndef PTHREAD_KERNEL +#define pthread_condattr_default NULL +#define pthread_mutexattr_default NULL +#define pthread_attr_default NULL +#endif + +enum pthread_mutextype { + MUTEX_TYPE_FAST = 1, + MUTEX_TYPE_COUNTING_FAST = 2, /* Recursive */ + MUTEX_TYPE_MAX +}; + +/* + * Thread function prototype definitions: + */ +__BEGIN_DECLS +int pthread_attr_destroy __P((pthread_attr_t *)); +int pthread_attr_getinheritsched __P((pthread_attr_t *, int *)); +int pthread_attr_getschedparam __P((pthread_attr_t *, + struct sched_param *)); +int pthread_attr_getschedpolicy __P((pthread_attr_t *, int *)); +int pthread_attr_getscope __P((pthread_attr_t *, int *)); +int pthread_attr_getstacksize __P((pthread_attr_t *, size_t *)); +int pthread_attr_getstackaddr __P((pthread_attr_t *, void **)); +int pthread_attr_getdetachstate __P((pthread_attr_t *, int *)); +int pthread_attr_init __P((pthread_attr_t *)); +int pthread_attr_setinheritsched __P((pthread_attr_t *, int)); +int pthread_attr_setschedparam __P((pthread_attr_t *, + struct sched_param *)); +int pthread_attr_setschedpolicy __P((pthread_attr_t *, int)); +int pthread_attr_setscope __P((pthread_attr_t *, int)); +int pthread_attr_setstacksize __P((pthread_attr_t *, size_t)); +int pthread_attr_setstackaddr __P((pthread_attr_t *, void *)); +int pthread_attr_setdetachstate __P((pthread_attr_t *, int)); +void pthread_cleanup_pop __P((int execute)); +void pthread_cleanup_push __P((void (*routine) (void *), + void *routine_arg)); +int pthread_condattr_destroy __P((pthread_condattr_t *attr)); +int pthread_condattr_init __P((pthread_condattr_t *attr)); +int pthread_condattr_getpshared __P((pthread_condattr_t *attr, + int *pshared)); +int pthread_condattr_setpshared __P((pthread_condattr_t *attr, + int pshared)); +int pthread_cond_broadcast __P((pthread_cond_t *)); +int pthread_cond_destroy __P((pthread_cond_t *)); +int pthread_cond_init __P((pthread_cond_t *, + const pthread_condattr_t *)); +int pthread_cond_signal __P((pthread_cond_t *)); +int pthread_cond_timedwait __P((pthread_cond_t *, + pthread_mutex_t *, const struct timespec * abstime)); +int pthread_cond_wait __P((pthread_cond_t *, pthread_mutex_t *)); +int pthread_create __P((pthread_t *, const pthread_attr_t *, + void *(*start_routine) (void *), void *)); +int pthread_detach __P((pthread_t)); +int pthread_equal __P((pthread_t, pthread_t)); +__dead void pthread_exit __P((void *)) __attribute__((noreturn)); +void *pthread_getspecific __P((pthread_key_t)); +int pthread_join __P((pthread_t, void **)); +int pthread_key_create __P((pthread_key_t *, + void (*routine) (void *))); +int pthread_key_delete __P((pthread_key_t)); +int pthread_kill __P((struct pthread *, int)); +int pthread_mutexattr_destroy __P((pthread_mutexattr_t *)); +int pthread_mutexattr_getprioceiling __P((pthread_mutexattr_t *, + int *prioceiling)); +int pthread_mutexattr_getprotocol __P((pthread_mutexattr_t *, + int *protocol)); +int pthread_mutexattr_getpshared __P((pthread_mutexattr_t *, + int *pshared)); +int pthread_mutexattr_init __P((pthread_mutexattr_t *)); +int pthread_mutexattr_setprioceiling __P((pthread_mutexattr_t *, + int prioceiling)); +int pthread_mutexattr_setprotocol __P((pthread_mutexattr_t *, + int protocol)); +int pthread_mutexattr_setpshared __P((pthread_mutexattr_t *, + int pshared)); +int pthread_mutex_destroy __P((pthread_mutex_t *)); +int pthread_mutex_getprioceiling __P((pthread_mutex_t *)); +int pthread_mutex_init __P((pthread_mutex_t *, + const pthread_mutexattr_t *)); +int pthread_mutex_lock __P((pthread_mutex_t *)); +int pthread_mutex_setprioceiling __P((pthread_mutex_t *)); +int pthread_mutex_trylock __P((pthread_mutex_t *)); +int pthread_mutex_unlock __P((pthread_mutex_t *)); +int pthread_once __P((pthread_once_t *, + void (*init_routine) (void))); +pthread_t pthread_self __P((void)); +int pthread_setcancelstate __P((int, int *)); +int pthread_setcanceltype __P((int, int *)); +int pthread_setspecific __P((pthread_key_t, const void *)); +int pthread_sigmask __P((int, const sigset_t *, sigset_t *)); +int pthread_testcancel __P((void)); + + +int pthread_getprio __P((pthread_t)); +int pthread_setprio __P((pthread_t, int)); +void pthread_yield __P((void)); +int pthread_setschedparam __P((pthread_t pthread, int policy, + struct sched_param * param)); +int pthread_getschedparam __P((pthread_t pthread, int *policy, + struct sched_param * param)); +int pthread_attr_setfloatstate __P((pthread_attr_t *, int)); +int pthread_attr_getfloatstate __P((pthread_attr_t *, int *)); +int pthread_attr_setcleanup __P((pthread_attr_t *, + void (*routine) (void *), void *)); + + +#if 0 +/* + * Single Unix Specification v2 wants these: + */ +#define PTHREAD_CANCEL_ASYNCHRONOUS +#define PTHREAD_CANCEL_ENABLE +#define PTHREAD_CANCEL_DEFERRED +#define PTHREAD_CANCEL_DISABLE +#define PTHREAD_CANCELED +#define PTHREAD_MUTEX_DEFAULT +#define PTHREAD_MUTEX_ERRORCHECK +#define PTHREAD_MUTEX_NORMAL +#define PTHREAD_MUTEX_INITIALIZER +#define PTHREAD_MUTEX_RECURSIVE +#define PTHREAD_PRIO_INHERIT +#define PTHREAD_PRIO_NONE +#define PTHREAD_PRIO_PROTECT +#define PTHREAD_PROCESS_SHARED +#define PTHREAD_PROCESS_PRIVATE +#define PTHREAD_RWLOCK_INITIALIZER + +typedef void *pthread_rwlock_t; +typedef void *pthread_rwlockattr_t; + +int pthread_attr_getguardsize __P((const pthread_attr_t *, + size_t *)); +int pthread_attr_setguardsize __P((const pthread_attr_t *, + size_t)); +int pthread_getconcurrency __P((void)); +int pthread_mutexattr_gettype __P((const pthread_mutexattr_t *, + int *)); +int pthread_mutexattr_settype __P((const pthread_mutexattr_t *, + int)); +int pthread_rwlock_destroy __P((pthread_rwlock_t *)); +int pthread_rwlock_init __P((pthread_rwlock_t *, + const pthread_rwlockattr_t *)); +int pthread_rwlock_rdlock __P((pthread_rwlock_t *)); +int pthread_rwlock_tryrdlock __P((pthread_rwlock_t *)); +int pthread_rwlock_trywrlock __P((pthread_rwlock_t *)); +int pthread_rwlock_unlock __P((pthread_rwlock_t *)); +int pthread_rwlock_wrlock __P((pthread_rwlock_t *)); +int pthread_rwlockattr_destroy __P((pthread_rwlockattr_t *)); +int pthread_rwlockattr_getpshared __P((const pthread_rwlockattr_t *, + int *)); +int pthread_rwlockattr_init __P((pthread_rwlockattr_t *)); +int pthread_rwlockattr_setpshared __P((pthread_rwlockattr_t *, + int)); +int pthread_setconcurrency __P((int)); + +#endif /* susv2 */ + +__END_DECLS + +#else +#warning "included <pthread.h> without -pthread compiler option" +#endif _POSIX_THREADS +#endif diff --git a/lib/libc_r/include/pthread_np.h b/lib/libc_r/include/pthread_np.h new file mode 100644 index 00000000000..51cc4e23ee1 --- /dev/null +++ b/lib/libc_r/include/pthread_np.h @@ -0,0 +1,51 @@ +/* + * Copyright (c) 1996-98 John Birrell <jb@cimlogic.com.au>. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * This product includes software developed by John Birrell. + * 4. Neither the name of the author nor the names of any co-contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY JOHN BIRRELL AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * $OpenBSD: pthread_np.h,v 1.1 1998/09/05 07:40:47 d Exp $ + */ +#ifndef _PTHREAD_NP_H_ +#define _PTHREAD_NP_H_ + +/* + * Non-POSIX thread function prototype definitions: + */ +__BEGIN_DECLS +int pthread_attr_setcreatesuspend_np __P((pthread_attr_t *)); +int pthread_multi_np __P((void)); +int pthread_resume_np __P((pthread_t)); +int pthread_single_np __P((void)); +int pthread_suspend_np __P((pthread_t)); +int pthread_mutexattr_getkind_np __P((pthread_mutexattr_t attr)); +int pthread_mutexattr_setkind_np __P((pthread_mutexattr_t *attr, int kind)); +void pthread_set_name_np __P((pthread_t, char *)); +__END_DECLS + +#endif diff --git a/lib/libc_r/include/sched.h b/lib/libc_r/include/sched.h new file mode 100644 index 00000000000..cc95188f90b --- /dev/null +++ b/lib/libc_r/include/sched.h @@ -0,0 +1,73 @@ +#ifndef _SCHED_H_ +#define _SCHED_H_ + +/* sched.h: POSIX 1003.1b Process Scheduling header */ + +/*- + * Copyright (c) 1996, 1997 + * HD Associates, Inc. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * This product includes software developed by HD Associates, Inc + * and Jukka Antero Ukkonen. + * 4. Neither the name of the author nor the names of any co-contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY HD ASSOCIATES AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL HD ASSOCIATES OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + */ + +#include <sys/types.h> /* For pid_t */ + +/* Scheduling policies + */ +#define SCHED_FIFO 1 +#define SCHED_OTHER 2 +#define SCHED_RR 3 + +struct sched_param +{ + int sched_priority; +}; + +#ifndef KERNEL +#include <sys/cdefs.h> +#include <time.h> /* Per P1003.4 */ +#include <sys/time.h> + +__BEGIN_DECLS +int sched_setparam __P((pid_t, const struct sched_param *)); +int sched_getparam __P((pid_t, struct sched_param *)); + +int sched_setscheduler __P((pid_t, int, const struct sched_param *)); +int sched_getscheduler __P((pid_t)); + +int sched_yield __P((void)); +int sched_get_priority_max __P((int)); +int sched_get_priority_min __P((int)); +int sched_rr_get_interval __P((pid_t, struct timespec *)); +__END_DECLS + +#endif /* KERNEL */ + +#endif /* _SCHED_H_ */ diff --git a/lib/libpthread/include/Makefile.inc b/lib/libpthread/include/Makefile.inc new file mode 100644 index 00000000000..389952b97f1 --- /dev/null +++ b/lib/libpthread/include/Makefile.inc @@ -0,0 +1,12 @@ +# $OpenBSD: Makefile.inc,v 1.1 1998/09/05 07:40:47 d Exp $ + +includes: + @cd ${.CURDIR}/include; \ + for h in pthread.h pthread_np.h sched.h; do \ + cmp -s $$h ${DESTDIR}/usr/include/$$h > /dev/null 2>&1 || \ + (echo ${INSTALL} ${INSTALL_COPY} -o ${BINOWN} -g ${BINGRP} \ + -m 444 $$h ${DESTDIR}/usr/include; \ + ${INSTALL} ${INSTALL_COPY} -o ${BINOWN} -g ${BINGRP} -m 444 \ + $$h ${DESTDIR}/usr/include) || exit 1; \ + done + diff --git a/lib/libpthread/include/pthread.h b/lib/libpthread/include/pthread.h new file mode 100644 index 00000000000..aabf39fb335 --- /dev/null +++ b/lib/libpthread/include/pthread.h @@ -0,0 +1,317 @@ +/* + * Copyright (c) 1993, 1994 by Chris Provenzano, proven@mit.edu + * Copyright (c) 1995-1998 by John Birrell <jb@cimlogic.com.au> + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * This product includes software developed by Chris Provenzano. + * 4. The name of Chris Provenzano may not be used to endorse or promote + * products derived from this software without specific prior written + * permission. + * + * THIS SOFTWARE IS PROVIDED BY CHRIS PROVENZANO ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL CHRIS PROVENZANO BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * $OpenBSD: pthread.h,v 1.1 1998/09/05 07:40:47 d Exp $ + * + */ +#ifndef _PTHREAD_H_ +#define _PTHREAD_H_ + +#ifdef _POSIX_THREADS + +/* + * Header files. + */ +#include <sys/cdefs.h> +#include <sys/types.h> +#include <sys/time.h> +#include <sys/signal.h> +#include <limits.h> +#include <sched.h> /* SUSV2 */ + +/* + * Run-time invariant values: + */ +#define PTHREAD_DESTRUCTOR_ITERATIONS 4 +#define PTHREAD_KEYS_MAX 256 +#define PTHREAD_STACK_MIN 1024 +#define PTHREAD_THREADS_MAX ULONG_MAX + +/* + * Compile time symbolic constants for portability specifications: + * + * Note that those commented out are not currently supported by the + * implementation. + */ + +#define _POSIX_THREAD_ATTR_STACKADDR +#define _POSIX_THREAD_ATTR_STACKSIZE +/* #define _POSIX_THREAD_PRIORITY_SCHEDULING */ +/* #define _POSIX_THREAD_PRIO_INHERIT */ +/* #define _POSIX_THREAD_PRIO_PROTECT */ +/* #define _POSIX_THREAD_PROCESS_SHARED */ +#define _POSIX_THREAD_SAFE_FUNCTIONS + +/* + * Flags for threads and thread attributes. + */ +#define PTHREAD_DETACHED 0x1 +#define PTHREAD_SCOPE_SYSTEM 0x2 +#define PTHREAD_INHERIT_SCHED 0x4 +#define PTHREAD_NOFLOAT 0x8 + +#define PTHREAD_CREATE_DETACHED PTHREAD_DETACHED +#define PTHREAD_CREATE_JOINABLE 0 +#define PTHREAD_SCOPE_PROCESS 0 +#define PTHREAD_EXPLICIT_SCHED 0 + +/* + * Forward structure definitions. + * + * These are mostly opaque to the user. + */ +struct pthread; +struct pthread_attr; +struct pthread_cond; +struct pthread_cond_attr; +struct pthread_mutex; +struct pthread_mutex_attr; +struct pthread_once; +struct sched_param; + +/* + * Primitive system data type definitions required by P1003.1c. + * + * Note that P1003.1c specifies that there are no defined comparison + * or assignment operators for the types pthread_attr_t, pthread_cond_t, + * pthread_condattr_t, pthread_mutex_t, pthread_mutexattr_t. + */ +typedef struct pthread *pthread_t; +typedef struct pthread_attr *pthread_attr_t; +typedef struct pthread_mutex *pthread_mutex_t; +typedef struct pthread_mutex_attr *pthread_mutexattr_t; +typedef struct pthread_cond *pthread_cond_t; +typedef struct pthread_cond_attr *pthread_condattr_t; +typedef int pthread_key_t; +typedef struct pthread_once pthread_once_t; + +/* + * Additional type definitions: + * + * Note that P1003.1c reserves the prefixes pthread_ and PTHREAD_ for + * use in header symbols. + */ +typedef void *pthread_addr_t; +typedef void *(*pthread_startroutine_t) __P((void *)); + +/* + * Once definitions. + */ +struct pthread_once { + int state; + pthread_mutex_t mutex; +}; + +/* + * Flags for once initialization. + */ +#define PTHREAD_NEEDS_INIT 0 +#define PTHREAD_DONE_INIT 1 + +/* + * Static once initialization values. + */ +#define PTHREAD_ONCE_INIT { PTHREAD_NEEDS_INIT, NULL } + +/* + * Static initialization values. + */ +#define PTHREAD_MUTEX_INITIALIZER NULL +#define PTHREAD_COND_INITIALIZER NULL + +/* + * Default attribute arguments (draft 4, deprecated). + */ +#ifndef PTHREAD_KERNEL +#define pthread_condattr_default NULL +#define pthread_mutexattr_default NULL +#define pthread_attr_default NULL +#endif + +enum pthread_mutextype { + MUTEX_TYPE_FAST = 1, + MUTEX_TYPE_COUNTING_FAST = 2, /* Recursive */ + MUTEX_TYPE_MAX +}; + +/* + * Thread function prototype definitions: + */ +__BEGIN_DECLS +int pthread_attr_destroy __P((pthread_attr_t *)); +int pthread_attr_getinheritsched __P((pthread_attr_t *, int *)); +int pthread_attr_getschedparam __P((pthread_attr_t *, + struct sched_param *)); +int pthread_attr_getschedpolicy __P((pthread_attr_t *, int *)); +int pthread_attr_getscope __P((pthread_attr_t *, int *)); +int pthread_attr_getstacksize __P((pthread_attr_t *, size_t *)); +int pthread_attr_getstackaddr __P((pthread_attr_t *, void **)); +int pthread_attr_getdetachstate __P((pthread_attr_t *, int *)); +int pthread_attr_init __P((pthread_attr_t *)); +int pthread_attr_setinheritsched __P((pthread_attr_t *, int)); +int pthread_attr_setschedparam __P((pthread_attr_t *, + struct sched_param *)); +int pthread_attr_setschedpolicy __P((pthread_attr_t *, int)); +int pthread_attr_setscope __P((pthread_attr_t *, int)); +int pthread_attr_setstacksize __P((pthread_attr_t *, size_t)); +int pthread_attr_setstackaddr __P((pthread_attr_t *, void *)); +int pthread_attr_setdetachstate __P((pthread_attr_t *, int)); +void pthread_cleanup_pop __P((int execute)); +void pthread_cleanup_push __P((void (*routine) (void *), + void *routine_arg)); +int pthread_condattr_destroy __P((pthread_condattr_t *attr)); +int pthread_condattr_init __P((pthread_condattr_t *attr)); +int pthread_condattr_getpshared __P((pthread_condattr_t *attr, + int *pshared)); +int pthread_condattr_setpshared __P((pthread_condattr_t *attr, + int pshared)); +int pthread_cond_broadcast __P((pthread_cond_t *)); +int pthread_cond_destroy __P((pthread_cond_t *)); +int pthread_cond_init __P((pthread_cond_t *, + const pthread_condattr_t *)); +int pthread_cond_signal __P((pthread_cond_t *)); +int pthread_cond_timedwait __P((pthread_cond_t *, + pthread_mutex_t *, const struct timespec * abstime)); +int pthread_cond_wait __P((pthread_cond_t *, pthread_mutex_t *)); +int pthread_create __P((pthread_t *, const pthread_attr_t *, + void *(*start_routine) (void *), void *)); +int pthread_detach __P((pthread_t)); +int pthread_equal __P((pthread_t, pthread_t)); +__dead void pthread_exit __P((void *)) __attribute__((noreturn)); +void *pthread_getspecific __P((pthread_key_t)); +int pthread_join __P((pthread_t, void **)); +int pthread_key_create __P((pthread_key_t *, + void (*routine) (void *))); +int pthread_key_delete __P((pthread_key_t)); +int pthread_kill __P((struct pthread *, int)); +int pthread_mutexattr_destroy __P((pthread_mutexattr_t *)); +int pthread_mutexattr_getprioceiling __P((pthread_mutexattr_t *, + int *prioceiling)); +int pthread_mutexattr_getprotocol __P((pthread_mutexattr_t *, + int *protocol)); +int pthread_mutexattr_getpshared __P((pthread_mutexattr_t *, + int *pshared)); +int pthread_mutexattr_init __P((pthread_mutexattr_t *)); +int pthread_mutexattr_setprioceiling __P((pthread_mutexattr_t *, + int prioceiling)); +int pthread_mutexattr_setprotocol __P((pthread_mutexattr_t *, + int protocol)); +int pthread_mutexattr_setpshared __P((pthread_mutexattr_t *, + int pshared)); +int pthread_mutex_destroy __P((pthread_mutex_t *)); +int pthread_mutex_getprioceiling __P((pthread_mutex_t *)); +int pthread_mutex_init __P((pthread_mutex_t *, + const pthread_mutexattr_t *)); +int pthread_mutex_lock __P((pthread_mutex_t *)); +int pthread_mutex_setprioceiling __P((pthread_mutex_t *)); +int pthread_mutex_trylock __P((pthread_mutex_t *)); +int pthread_mutex_unlock __P((pthread_mutex_t *)); +int pthread_once __P((pthread_once_t *, + void (*init_routine) (void))); +pthread_t pthread_self __P((void)); +int pthread_setcancelstate __P((int, int *)); +int pthread_setcanceltype __P((int, int *)); +int pthread_setspecific __P((pthread_key_t, const void *)); +int pthread_sigmask __P((int, const sigset_t *, sigset_t *)); +int pthread_testcancel __P((void)); + + +int pthread_getprio __P((pthread_t)); +int pthread_setprio __P((pthread_t, int)); +void pthread_yield __P((void)); +int pthread_setschedparam __P((pthread_t pthread, int policy, + struct sched_param * param)); +int pthread_getschedparam __P((pthread_t pthread, int *policy, + struct sched_param * param)); +int pthread_attr_setfloatstate __P((pthread_attr_t *, int)); +int pthread_attr_getfloatstate __P((pthread_attr_t *, int *)); +int pthread_attr_setcleanup __P((pthread_attr_t *, + void (*routine) (void *), void *)); + + +#if 0 +/* + * Single Unix Specification v2 wants these: + */ +#define PTHREAD_CANCEL_ASYNCHRONOUS +#define PTHREAD_CANCEL_ENABLE +#define PTHREAD_CANCEL_DEFERRED +#define PTHREAD_CANCEL_DISABLE +#define PTHREAD_CANCELED +#define PTHREAD_MUTEX_DEFAULT +#define PTHREAD_MUTEX_ERRORCHECK +#define PTHREAD_MUTEX_NORMAL +#define PTHREAD_MUTEX_INITIALIZER +#define PTHREAD_MUTEX_RECURSIVE +#define PTHREAD_PRIO_INHERIT +#define PTHREAD_PRIO_NONE +#define PTHREAD_PRIO_PROTECT +#define PTHREAD_PROCESS_SHARED +#define PTHREAD_PROCESS_PRIVATE +#define PTHREAD_RWLOCK_INITIALIZER + +typedef void *pthread_rwlock_t; +typedef void *pthread_rwlockattr_t; + +int pthread_attr_getguardsize __P((const pthread_attr_t *, + size_t *)); +int pthread_attr_setguardsize __P((const pthread_attr_t *, + size_t)); +int pthread_getconcurrency __P((void)); +int pthread_mutexattr_gettype __P((const pthread_mutexattr_t *, + int *)); +int pthread_mutexattr_settype __P((const pthread_mutexattr_t *, + int)); +int pthread_rwlock_destroy __P((pthread_rwlock_t *)); +int pthread_rwlock_init __P((pthread_rwlock_t *, + const pthread_rwlockattr_t *)); +int pthread_rwlock_rdlock __P((pthread_rwlock_t *)); +int pthread_rwlock_tryrdlock __P((pthread_rwlock_t *)); +int pthread_rwlock_trywrlock __P((pthread_rwlock_t *)); +int pthread_rwlock_unlock __P((pthread_rwlock_t *)); +int pthread_rwlock_wrlock __P((pthread_rwlock_t *)); +int pthread_rwlockattr_destroy __P((pthread_rwlockattr_t *)); +int pthread_rwlockattr_getpshared __P((const pthread_rwlockattr_t *, + int *)); +int pthread_rwlockattr_init __P((pthread_rwlockattr_t *)); +int pthread_rwlockattr_setpshared __P((pthread_rwlockattr_t *, + int)); +int pthread_setconcurrency __P((int)); + +#endif /* susv2 */ + +__END_DECLS + +#else +#warning "included <pthread.h> without -pthread compiler option" +#endif _POSIX_THREADS +#endif diff --git a/lib/libpthread/include/pthread_np.h b/lib/libpthread/include/pthread_np.h new file mode 100644 index 00000000000..51cc4e23ee1 --- /dev/null +++ b/lib/libpthread/include/pthread_np.h @@ -0,0 +1,51 @@ +/* + * Copyright (c) 1996-98 John Birrell <jb@cimlogic.com.au>. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * This product includes software developed by John Birrell. + * 4. Neither the name of the author nor the names of any co-contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY JOHN BIRRELL AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * $OpenBSD: pthread_np.h,v 1.1 1998/09/05 07:40:47 d Exp $ + */ +#ifndef _PTHREAD_NP_H_ +#define _PTHREAD_NP_H_ + +/* + * Non-POSIX thread function prototype definitions: + */ +__BEGIN_DECLS +int pthread_attr_setcreatesuspend_np __P((pthread_attr_t *)); +int pthread_multi_np __P((void)); +int pthread_resume_np __P((pthread_t)); +int pthread_single_np __P((void)); +int pthread_suspend_np __P((pthread_t)); +int pthread_mutexattr_getkind_np __P((pthread_mutexattr_t attr)); +int pthread_mutexattr_setkind_np __P((pthread_mutexattr_t *attr, int kind)); +void pthread_set_name_np __P((pthread_t, char *)); +__END_DECLS + +#endif diff --git a/lib/libpthread/include/sched.h b/lib/libpthread/include/sched.h new file mode 100644 index 00000000000..cc95188f90b --- /dev/null +++ b/lib/libpthread/include/sched.h @@ -0,0 +1,73 @@ +#ifndef _SCHED_H_ +#define _SCHED_H_ + +/* sched.h: POSIX 1003.1b Process Scheduling header */ + +/*- + * Copyright (c) 1996, 1997 + * HD Associates, Inc. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * This product includes software developed by HD Associates, Inc + * and Jukka Antero Ukkonen. + * 4. Neither the name of the author nor the names of any co-contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY HD ASSOCIATES AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL HD ASSOCIATES OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + */ + +#include <sys/types.h> /* For pid_t */ + +/* Scheduling policies + */ +#define SCHED_FIFO 1 +#define SCHED_OTHER 2 +#define SCHED_RR 3 + +struct sched_param +{ + int sched_priority; +}; + +#ifndef KERNEL +#include <sys/cdefs.h> +#include <time.h> /* Per P1003.4 */ +#include <sys/time.h> + +__BEGIN_DECLS +int sched_setparam __P((pid_t, const struct sched_param *)); +int sched_getparam __P((pid_t, struct sched_param *)); + +int sched_setscheduler __P((pid_t, int, const struct sched_param *)); +int sched_getscheduler __P((pid_t)); + +int sched_yield __P((void)); +int sched_get_priority_max __P((int)); +int sched_get_priority_min __P((int)); +int sched_rr_get_interval __P((pid_t, struct timespec *)); +__END_DECLS + +#endif /* KERNEL */ + +#endif /* _SCHED_H_ */ |