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-sh64 / thread_info.h < prev    next >
Encoding:
C/C++ Source or Header  |  2006-08-11  |  2.1 KB  |  86 lines

  1. #ifndef __ASM_SH64_THREAD_INFO_H
  2. #define __ASM_SH64_THREAD_INFO_H
  3.  
  4. /*
  5.  * SuperH 5 version
  6.  * Copyright (C) 2003  Paul Mundt
  7.  */
  8.  
  9. #ifdef __KERNEL__
  10.  
  11. #ifndef __ASSEMBLY__
  12. #include <asm/registers.h>
  13.  
  14. /*
  15.  * low level task data that entry.S needs immediate access to
  16.  * - this struct should fit entirely inside of one cache line
  17.  * - this struct shares the supervisor stack pages
  18.  * - if the contents of this structure are changed, the assembly constants must also be changed
  19.  */
  20. struct thread_info {
  21.     struct task_struct    *task;        /* main task structure */
  22.     struct exec_domain    *exec_domain;    /* execution domain */
  23.     unsigned long        flags;        /* low level flags */
  24.     /* Put the 4 32-bit fields together to make asm offsetting easier. */
  25.     int            preempt_count;    /* 0 => preemptable, <0 => BUG */
  26.     __u16            cpu;
  27.  
  28.     mm_segment_t        addr_limit;
  29.     struct restart_block    restart_block;
  30.  
  31.     __u8            supervisor_stack[0];
  32. };
  33.  
  34. /*
  35.  * macros/functions for gaining access to the thread information structure
  36.  */
  37. #define INIT_THREAD_INFO(tsk)            \
  38. {                        \
  39.     .task        = &tsk,            \
  40.     .exec_domain    = &default_exec_domain,    \
  41.     .flags        = 0,            \
  42.     .cpu        = 0,            \
  43.     .preempt_count    = 1,            \
  44.     .addr_limit     = KERNEL_DS,            \
  45.     .restart_block    = {            \
  46.         .fn = do_no_restart_syscall,    \
  47.     },                    \
  48. }
  49.  
  50. #define init_thread_info    (init_thread_union.thread_info)
  51. #define init_stack        (init_thread_union.stack)
  52.  
  53. /* how to get the thread information struct from C */
  54. static inline struct thread_info *current_thread_info(void)
  55. {
  56.     struct thread_info *ti;
  57.  
  58.     __asm__ __volatile__ ("getcon " __KCR0 ", %0\n\t" : "=r" (ti));
  59.  
  60.     return ti;
  61. }
  62.  
  63. /* thread information allocation */
  64.  
  65.  
  66.  
  67. #define alloc_thread_info(ti) ((struct thread_info *) __get_free_pages(GFP_KERNEL,1))
  68. #define free_thread_info(ti) free_pages((unsigned long) (ti), 1)
  69.  
  70. #endif /* __ASSEMBLY__ */
  71.  
  72. #define THREAD_SIZE  8192
  73.  
  74. #define PREEMPT_ACTIVE        0x10000000
  75.  
  76. /* thread information flags */
  77. #define TIF_SYSCALL_TRACE    0    /* syscall trace active */
  78. #define TIF_SIGPENDING        2    /* signal pending */
  79. #define TIF_NEED_RESCHED    3    /* rescheduling necessary */
  80. #define TIF_MEMDIE        4
  81.  
  82.  
  83. #endif /* __KERNEL__ */
  84.  
  85. #endif /* __ASM_SH64_THREAD_INFO_H */
  86.