/*
* @OSF_FREE_FREE_COPYRIGHT@
*
*/
/*
* HISTORY
* $Log: server_thread.h,v $
* Revision 1.1.2.4 1997/03/27 18:29:41 barbou
* Added "activation_ready" field to server_thread_priv_data structure
* to avoid using a new activation before it has been fully initialized.
* [97/03/27 barbou]
*
* Revision 1.1.2.3 1997/01/28 13:27:43 barbou
* Moved definitions of server_thread_blocking/unblocking to uniproc.h.
* [1997/01/28 13:15:12 barbou]
*
* Revision 1.1.2.2 1996/12/03 08:25:50 stephen
* Add prototype for cpu_type, cpu_subtype
* [1996/12/03 08:25:36 stephen]
*
* Revision 1.1.2.1 1996/09/09 16:58:40 barbou
* Added prototype for server_thread_bootstrap.
* [96/09/06 barbou]
*
* Added prototype for lauch_new_ux_server_loop.
* [96/09/02 barbou]
*
* Added definition of BASEPRI_MINPRI.
* [96/08/26 barbou]
*
* Created.
* [1996/08/21 15:53:35 barbou]
*
* $EndLog$
*/
#ifndef _OSFMACH3_SERVER_THREAD_H_
#define _OSFMACH3_SERVER_THREAD_H_
#include <linux/autoconf.h>
#include <mach/message.h>
#include <mach/kern_return.h>
#include <mach/host_info.h>
#include <osfmach3/assert.h>
#include <osfmach3/setjmp.h>
#include <linux/sched.h>
#define CTHREADS_MULTIPLEXING 0
extern cpu_type_t cpu_type;
extern cpu_subtype_t cpu_subtype;
extern host_priority_info_data_t host_pri_info;
#define BASEPRI_SERVER host_pri_info.server_priority
#define BASEPRI_USER host_pri_info.user_priority
#define BASEPRI_MINPRI host_pri_info.minimum_priority
extern kern_return_t server_thread_start(void *(*func)(void *),
void *arg);
extern kern_return_t server_thread_priorities(int base_pri,
int max_pri);
extern void *server_thread_bootstrap(void *dummy);
extern void server_thread_yield(mach_msg_timeout_t time);
struct server_thread_priv_data {
boolean_t activation_ready; /* act. fully initialized */
boolean_t preemptive; /* preemptive thread */
struct task_struct *current_task; /* client user task */
mach_port_t reply_port; /* for cleanup on exit() */
osfmach3_jmp_buf *jmp_buf; /* for threads recycling */
};
static __inline__ struct server_thread_priv_data *
server_thread_get_priv_data(
cthread_t cthread)
{
struct server_thread_priv_data *data;
data = (struct server_thread_priv_data *) cthread_data(cthread);
ASSERT(data != (struct server_thread_priv_data *) 0);
return data;
}
static __inline__ void
server_thread_set_priv_data(
cthread_t cthread,
struct server_thread_priv_data *data)
{
data->activation_ready = TRUE;
data->preemptive = FALSE;
data->current_task = FIRST_TASK;
data->reply_port = MACH_PORT_NULL;
data->jmp_buf = (osfmach3_jmp_buf *) 0;
cthread_set_data(cthread, (void *) data);
}
extern void launch_new_ux_server_loop(struct task_struct *new_task);
#endif /* _OSFMACH3_SERVER_THREAD_H_ */