xref: /haiku/headers/private/kernel/arch/x86/arch_thread.h (revision 23d878482ed22e55dad6d1fca1df7bea42eb157c)
1 /*
2  * Copyright 2002-2011, The Haiku Team. All rights reserved.
3  * Distributed under the terms of the MIT License.
4  *
5  * Copyright 2002, Travis Geiselbrecht. All rights reserved.
6  * Distributed under the terms of the NewOS License.
7  */
8 #ifndef _KERNEL_ARCH_x86_THREAD_H
9 #define _KERNEL_ARCH_x86_THREAD_H
10 
11 
12 #include <arch/cpu.h>
13 
14 
15 #ifdef __cplusplus
16 extern "C" {
17 #endif
18 
19 struct iframe *i386_get_user_iframe(void);
20 struct iframe *i386_get_current_iframe(void);
21 struct iframe *i386_get_thread_user_iframe(Thread *thread);
22 
23 uint32 x86_next_page_directory(Thread *from, Thread *to);
24 
25 void x86_restart_syscall(struct iframe *frame);
26 
27 void x86_set_tls_context(Thread *thread);
28 
29 // override empty macro
30 #undef arch_syscall_64_bit_return_value
31 void arch_syscall_64_bit_return_value(void);
32 
33 
34 static
35 inline Thread *
36 arch_thread_get_current_thread(void)
37 {
38 	Thread *t;
39 	read_dr3(t);
40 	return t;
41 }
42 
43 static inline void
44 arch_thread_set_current_thread(Thread *t)
45 {
46 	write_dr3(t);
47 }
48 
49 #ifdef __cplusplus
50 }
51 #endif
52 
53 #endif /* _KERNEL_ARCH_x86_THREAD_H */
54 
55