xref: /minix3/minix/lib/libddekit/src/thread.h (revision 433d6423c39e34ec4b79c950597bb2d236f886be)
1 #ifndef DDEKIT_SRC_THREAD_H
2 #define DDEKIT_SRC_THREAD_H 1
3 #include <ddekit/thread.h>
4 #include <ddekit/semaphore.h>
5 #include <ucontext.h>
6 
7 #define DDEKIT_THREAD_NAMELEN 32
8 #define DDEKIT_THREAD_PRIOS 3
9 #define DDEKIT_THREAD_STDPRIO 1
10 
11 #define DDEKIT_THREAD_STACKSIZE (4096*16)
12 
13 /* This threadlib makes following assumptions:
14  *  No Preemption,
15  *  No signals,
16  *  No blocking syscalls
17  *  Threads cooperate.
18  */
19 
20 struct ddekit_thread {
21 	int id;
22 	int prio;
23 	void (*fun)(void *);
24 	char *stack;
25 	void *arg;
26 	void *data;
27 	unsigned sleep_until;
28 	char name[DDEKIT_THREAD_NAMELEN];
29 	ucontext_t ctx;
30 	ddekit_sem_t *sleep_sem;
31 	struct ddekit_thread * next;
32 };
33 
34 
35 void _ddekit_thread_set_myprio(int prio);
36 void _ddekit_thread_enqueue(ddekit_thread_t *th);
37 void _ddekit_thread_dequeue(ddekit_thread_t *th);
38 void _ddekit_thread_schedule();
39 void _ddekit_thread_wakeup_sleeping();
40 void _ddekit_print_backtrace(ddekit_thread_t *th);
41 
42 
43 #endif
44