1/*
2 * Copyright 2008-2011, Ingo Weinhold, ingo_weinhold@gmx.de.
3 * Distributed under the terms of the MIT License.
4 */
5#ifndef _SYSTEM_THREAD_DEFS_H
6#define _SYSTEM_THREAD_DEFS_H
7
8
9#include <pthread.h>
10
11#include <OS.h>
12
13
14/** Size of the stack given to teams in user space */
15#define USER_STACK_GUARD_SIZE		(4 * B_PAGE_SIZE)		// 16 kB
16#define MIN_USER_STACK_SIZE			(2 * B_PAGE_SIZE)		// 8 kB
17#define MAX_USER_STACK_SIZE			(4096 * B_PAGE_SIZE)	// 16 MB
18#define USER_MAIN_THREAD_STACK_SIZE	MAX_USER_STACK_SIZE
19#define USER_STACK_SIZE				(64 * B_PAGE_SIZE)		// 256 kB
20
21
22// The type of object a thread blocks on (thread::wait::type, set by
23// thread_prepare_to_block()).
24enum {
25	THREAD_BLOCK_TYPE_SEMAPHORE				= 0,
26	THREAD_BLOCK_TYPE_CONDITION_VARIABLE	= 1,
27	THREAD_BLOCK_TYPE_SNOOZE				= 2,
28	THREAD_BLOCK_TYPE_SIGNAL				= 3,
29	THREAD_BLOCK_TYPE_MUTEX					= 4,
30	THREAD_BLOCK_TYPE_RW_LOCK				= 5,
31	THREAD_BLOCK_TYPE_USER					= 6,
32
33	THREAD_BLOCK_TYPE_OTHER_OBJECT			= 9998,
34	THREAD_BLOCK_TYPE_OTHER					= 9999,
35};
36
37
38#define THREAD_CREATION_FLAG_DEFER_SIGNALS	0x01
39	// create the thread with signals deferred, i.e. with
40	// user_thread::defer_signals set to 1
41
42
43struct thread_creation_attributes {
44	int32		(*entry)(void*, void*);
45	const char*	name;
46	int32		priority;
47	void*		args1;
48	void*		args2;
49	void*		stack_address;
50	size_t		stack_size;
51	size_t		guard_size;
52	pthread_t	pthread;
53	uint32		flags;
54};
55
56#endif	/* _SYSTEM_THREAD_DEFS_H */
57