home *** CD-ROM | disk | FTP | other *** search
/ PC Welt 2006 November (DVD) / PCWELT_11_2006.ISO / casper / filesystem.squashfs / usr / src / linux-headers-2.6.17-6 / include / asm-um / processor-i386.h < prev    next >
Encoding:
C/C++ Source or Header  |  2006-08-11  |  1.9 KB  |  80 lines

  1. /*
  2.  * Copyright (C) 2002 Jeff Dike (jdike@karaya.com)
  3.  * Licensed under the GPL
  4.  */
  5.  
  6. #ifndef __UM_PROCESSOR_I386_H
  7. #define __UM_PROCESSOR_I386_H
  8.  
  9. #include "linux/string.h"
  10. #include "asm/host_ldt.h"
  11. #include "asm/segment.h"
  12.  
  13. extern int host_has_xmm;
  14. extern int host_has_cmov;
  15.  
  16. /* include faultinfo structure */
  17. #include "sysdep/faultinfo.h"
  18.  
  19. struct uml_tls_struct {
  20.     struct user_desc tls;
  21.     unsigned flushed:1;
  22.     unsigned present:1;
  23. };
  24.  
  25. struct arch_thread {
  26.     struct uml_tls_struct tls_array[GDT_ENTRY_TLS_ENTRIES];
  27.     unsigned long debugregs[8];
  28.     int debugregs_seq;
  29.     struct faultinfo faultinfo;
  30. };
  31.  
  32. #define INIT_ARCH_THREAD { \
  33.     .tls_array          = { [ 0 ... GDT_ENTRY_TLS_ENTRIES - 1 ] = \
  34.                     { .present = 0, .flushed = 0 } }, \
  35.     .debugregs          = { [ 0 ... 7 ] = 0 }, \
  36.     .debugregs_seq        = 0, \
  37.     .faultinfo        = { 0, 0, 0 } \
  38. }
  39.  
  40. static inline void arch_flush_thread(struct arch_thread *thread)
  41. {
  42.     /* Clear any TLS still hanging */
  43.     memset(&thread->tls_array, 0, sizeof(thread->tls_array));
  44. }
  45.  
  46. static inline void arch_copy_thread(struct arch_thread *from,
  47.                                     struct arch_thread *to)
  48. {
  49.         memcpy(&to->tls_array, &from->tls_array, sizeof(from->tls_array));
  50. }
  51.  
  52. #include "asm/arch/user.h"
  53.  
  54. /* REP NOP (PAUSE) is a good thing to insert into busy-wait loops. */
  55. static inline void rep_nop(void)
  56. {
  57.     __asm__ __volatile__("rep;nop": : :"memory");
  58. }
  59.  
  60. #define cpu_relax()    rep_nop()
  61.  
  62. /*
  63.  * Default implementation of macro that returns current
  64.  * instruction pointer ("program counter"). Stolen
  65.  * from asm-i386/processor.h
  66.  */
  67. #define current_text_addr() \
  68.     ({ void *pc; __asm__("movl $1f,%0\n1:":"=g" (pc)); pc; })
  69.  
  70. #define ARCH_IS_STACKGROW(address) \
  71.        (address + 32 >= UPT_SP(¤t->thread.regs.regs))
  72.  
  73. #define KSTK_EIP(tsk) KSTK_REG(tsk, EIP)
  74. #define KSTK_ESP(tsk) KSTK_REG(tsk, UESP)
  75. #define KSTK_EBP(tsk) KSTK_REG(tsk, EBP)
  76.  
  77. #include "asm/processor-generic.h"
  78.  
  79. #endif
  80.