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