home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2010 May / Mac Life Ubuntu.iso / casper / filesystem.squashfs / usr / src / linux-headers-2.6.28-15 / arch / sh / include / asm / thread_info.h < prev    next >
Encoding:
C/C++ Source or Header  |  2008-12-24  |  4.7 KB  |  159 lines

  1. #ifndef __ASM_SH_THREAD_INFO_H
  2. #define __ASM_SH_THREAD_INFO_H
  3.  
  4. /* SuperH version
  5.  * Copyright (C) 2002  Niibe Yutaka
  6.  *
  7.  * The copyright of original i386 version is:
  8.  *
  9.  *  Copyright (C) 2002  David Howells (dhowells@redhat.com)
  10.  *  - Incorporating suggestions made by Linus Torvalds and Dave Miller
  11.  */
  12. #ifdef __KERNEL__
  13. #include <asm/page.h>
  14.  
  15. #ifndef __ASSEMBLY__
  16. #include <asm/processor.h>
  17.  
  18. struct thread_info {
  19.     struct task_struct    *task;        /* main task structure */
  20.     struct exec_domain    *exec_domain;    /* execution domain */
  21.     unsigned long        flags;        /* low level flags */
  22.     __u32            cpu;
  23.     int            preempt_count; /* 0 => preemptable, <0 => BUG */
  24.     mm_segment_t        addr_limit;    /* thread address space */
  25.     struct restart_block    restart_block;
  26.     unsigned long        previous_sp;    /* sp of previous stack in case
  27.                            of nested IRQ stacks */
  28.     __u8            supervisor_stack[0];
  29. };
  30.  
  31. #endif
  32.  
  33. #define PREEMPT_ACTIVE        0x10000000
  34.  
  35. #if defined(CONFIG_4KSTACKS)
  36. #define THREAD_SHIFT    12
  37. #else
  38. #define THREAD_SHIFT    13
  39. #endif
  40.  
  41. #define THREAD_SIZE    (1 << THREAD_SHIFT)
  42. #define STACK_WARN    (THREAD_SIZE >> 3)
  43.  
  44. /*
  45.  * macros/functions for gaining access to the thread information structure
  46.  */
  47. #ifndef __ASSEMBLY__
  48. #define INIT_THREAD_INFO(tsk)            \
  49. {                        \
  50.     .task        = &tsk,            \
  51.     .exec_domain    = &default_exec_domain,    \
  52.     .flags        = 0,            \
  53.     .cpu        = 0,            \
  54.     .preempt_count    = 1,            \
  55.     .addr_limit    = KERNEL_DS,        \
  56.     .restart_block    = {            \
  57.         .fn = do_no_restart_syscall,    \
  58.     },                    \
  59. }
  60.  
  61. #define init_thread_info    (init_thread_union.thread_info)
  62. #define init_stack        (init_thread_union.stack)
  63.  
  64. /* how to get the current stack pointer from C */
  65. register unsigned long current_stack_pointer asm("r15") __used;
  66.  
  67. /* how to get the thread information struct from C */
  68. static inline struct thread_info *current_thread_info(void)
  69. {
  70.     struct thread_info *ti;
  71. #if defined(CONFIG_SUPERH64)
  72.     __asm__ __volatile__ ("getcon    cr17, %0" : "=r" (ti));
  73. #elif defined(CONFIG_CPU_HAS_SR_RB)
  74.     __asm__ __volatile__ ("stc    r7_bank, %0" : "=r" (ti));
  75. #else
  76.     unsigned long __dummy;
  77.  
  78.     __asm__ __volatile__ (
  79.         "mov    r15, %0\n\t"
  80.         "and    %1, %0\n\t"
  81.         : "=&r" (ti), "=r" (__dummy)
  82.         : "1" (~(THREAD_SIZE - 1))
  83.         : "memory");
  84. #endif
  85.  
  86.     return ti;
  87. }
  88.  
  89. /* thread information allocation */
  90. #if THREAD_SHIFT >= PAGE_SHIFT
  91.  
  92. #define THREAD_SIZE_ORDER    (THREAD_SHIFT - PAGE_SHIFT)
  93.  
  94. #else /* THREAD_SHIFT < PAGE_SHIFT */
  95.  
  96. #define __HAVE_ARCH_THREAD_INFO_ALLOCATOR
  97.  
  98. extern struct thread_info *alloc_thread_info(struct task_struct *tsk);
  99. extern void free_thread_info(struct thread_info *ti);
  100.  
  101. #endif /* THREAD_SHIFT < PAGE_SHIFT */
  102.  
  103. #endif /* __ASSEMBLY__ */
  104.  
  105. /*
  106.  * thread information flags
  107.  * - these are process state flags that various assembly files may need to access
  108.  * - pending work-to-be-done flags are in LSW
  109.  * - other flags in MSW
  110.  */
  111. #define TIF_SYSCALL_TRACE    0    /* syscall trace active */
  112. #define TIF_SIGPENDING        1    /* signal pending */
  113. #define TIF_NEED_RESCHED    2    /* rescheduling necessary */
  114. #define TIF_RESTORE_SIGMASK    3    /* restore signal mask in do_signal() */
  115. #define TIF_SINGLESTEP        4    /* singlestepping active */
  116. #define TIF_SYSCALL_AUDIT    5    /* syscall auditing active */
  117. #define TIF_SECCOMP        6    /* secure computing */
  118. #define TIF_NOTIFY_RESUME    7    /* callback before returning to user */
  119. #define TIF_USEDFPU        16    /* FPU was used by this task this quantum (SMP) */
  120. #define TIF_POLLING_NRFLAG    17    /* true if poll_idle() is polling TIF_NEED_RESCHED */
  121. #define TIF_MEMDIE        18
  122. #define TIF_FREEZE        19    /* Freezing for suspend */
  123.  
  124. #define _TIF_SYSCALL_TRACE    (1 << TIF_SYSCALL_TRACE)
  125. #define _TIF_SIGPENDING        (1 << TIF_SIGPENDING)
  126. #define _TIF_NEED_RESCHED    (1 << TIF_NEED_RESCHED)
  127. #define _TIF_RESTORE_SIGMASK    (1 << TIF_RESTORE_SIGMASK)
  128. #define _TIF_SINGLESTEP        (1 << TIF_SINGLESTEP)
  129. #define _TIF_SYSCALL_AUDIT    (1 << TIF_SYSCALL_AUDIT)
  130. #define _TIF_SECCOMP        (1 << TIF_SECCOMP)
  131. #define _TIF_NOTIFY_RESUME    (1 << TIF_NOTIFY_RESUME)
  132. #define _TIF_USEDFPU        (1 << TIF_USEDFPU)
  133. #define _TIF_POLLING_NRFLAG    (1 << TIF_POLLING_NRFLAG)
  134. #define _TIF_FREEZE        (1 << TIF_FREEZE)
  135.  
  136. /*
  137.  * _TIF_ALLWORK_MASK and _TIF_WORK_MASK need to fit within a byte, or we
  138.  * blow the tst immediate size constraints and need to fix up
  139.  * arch/sh/kernel/entry-common.S.
  140.  */
  141.  
  142. /* work to do in syscall trace */
  143. #define _TIF_WORK_SYSCALL_MASK    (_TIF_SYSCALL_TRACE | _TIF_SINGLESTEP | \
  144.                  _TIF_SYSCALL_AUDIT | _TIF_SECCOMP)
  145.  
  146. /* work to do on any return to u-space */
  147. #define _TIF_ALLWORK_MASK    (_TIF_SYSCALL_TRACE | _TIF_SIGPENDING      | \
  148.                  _TIF_NEED_RESCHED  | _TIF_SYSCALL_AUDIT   | \
  149.                  _TIF_SINGLESTEP    | _TIF_RESTORE_SIGMASK | \
  150.                  _TIF_NOTIFY_RESUME)
  151.  
  152. /* work to do on interrupt/exception return */
  153. #define _TIF_WORK_MASK        (_TIF_ALLWORK_MASK & ~(_TIF_SYSCALL_TRACE | \
  154.                  _TIF_SYSCALL_AUDIT | _TIF_SINGLESTEP))
  155.  
  156. #endif /* __KERNEL__ */
  157.  
  158. #endif /* __ASM_SH_THREAD_INFO_H */
  159.