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 / arm / include / asm / thread_info.h < prev    next >
Encoding:
C/C++ Source or Header  |  2008-12-24  |  4.3 KB  |  154 lines

  1. /*
  2.  *  arch/arm/include/asm/thread_info.h
  3.  *
  4.  *  Copyright (C) 2002 Russell King.
  5.  *
  6.  * This program is free software; you can redistribute it and/or modify
  7.  * it under the terms of the GNU General Public License version 2 as
  8.  * published by the Free Software Foundation.
  9.  */
  10. #ifndef __ASM_ARM_THREAD_INFO_H
  11. #define __ASM_ARM_THREAD_INFO_H
  12.  
  13. #ifdef __KERNEL__
  14.  
  15. #include <linux/compiler.h>
  16. #include <asm/fpstate.h>
  17.  
  18. #define THREAD_SIZE_ORDER    1
  19. #define THREAD_SIZE        8192
  20. #define THREAD_START_SP        (THREAD_SIZE - 8)
  21.  
  22. #ifndef __ASSEMBLY__
  23.  
  24. struct task_struct;
  25. struct exec_domain;
  26.  
  27. #include <asm/types.h>
  28. #include <asm/domain.h>
  29.  
  30. typedef unsigned long mm_segment_t;
  31.  
  32. struct cpu_context_save {
  33.     __u32    r4;
  34.     __u32    r5;
  35.     __u32    r6;
  36.     __u32    r7;
  37.     __u32    r8;
  38.     __u32    r9;
  39.     __u32    sl;
  40.     __u32    fp;
  41.     __u32    sp;
  42.     __u32    pc;
  43.     __u32    extra[2];        /* Xscale 'acc' register, etc */
  44. };
  45.  
  46. /*
  47.  * low level task data that entry.S needs immediate access to.
  48.  * __switch_to() assumes cpu_context follows immediately after cpu_domain.
  49.  */
  50. struct thread_info {
  51.     unsigned long        flags;        /* low level flags */
  52.     int            preempt_count;    /* 0 => preemptable, <0 => bug */
  53.     mm_segment_t        addr_limit;    /* address limit */
  54.     struct task_struct    *task;        /* main task structure */
  55.     struct exec_domain    *exec_domain;    /* execution domain */
  56.     __u32            cpu;        /* cpu */
  57.     __u32            cpu_domain;    /* cpu domain */
  58.     struct cpu_context_save    cpu_context;    /* cpu context */
  59.     __u32            syscall;    /* syscall number */
  60.     __u8            used_cp[16];    /* thread used copro */
  61.     unsigned long        tp_value;
  62.     struct crunch_state    crunchstate;
  63.     union fp_state        fpstate __attribute__((aligned(8)));
  64.     union vfp_state        vfpstate;
  65. #ifdef CONFIG_ARM_THUMBEE
  66.     unsigned long        thumbee_state;    /* ThumbEE Handler Base register */
  67. #endif
  68.     struct restart_block    restart_block;
  69. };
  70.  
  71. #define INIT_THREAD_INFO(tsk)                        \
  72. {                                    \
  73.     .task        = &tsk,                        \
  74.     .exec_domain    = &default_exec_domain,                \
  75.     .flags        = 0,                        \
  76.     .preempt_count    = 1,                        \
  77.     .addr_limit    = KERNEL_DS,                    \
  78.     .cpu_domain    = domain_val(DOMAIN_USER, DOMAIN_MANAGER) |    \
  79.               domain_val(DOMAIN_KERNEL, DOMAIN_MANAGER) |    \
  80.               domain_val(DOMAIN_IO, DOMAIN_CLIENT),        \
  81.     .restart_block    = {                        \
  82.         .fn    = do_no_restart_syscall,            \
  83.     },                                \
  84. }
  85.  
  86. #define init_thread_info    (init_thread_union.thread_info)
  87. #define init_stack        (init_thread_union.stack)
  88.  
  89. /*
  90.  * how to get the thread information struct from C
  91.  */
  92. static inline struct thread_info *current_thread_info(void) __attribute_const__;
  93.  
  94. static inline struct thread_info *current_thread_info(void)
  95. {
  96.     register unsigned long sp asm ("sp");
  97.     return (struct thread_info *)(sp & ~(THREAD_SIZE - 1));
  98. }
  99.  
  100. #define thread_saved_pc(tsk)    \
  101.     ((unsigned long)(task_thread_info(tsk)->cpu_context.pc))
  102. #define thread_saved_fp(tsk)    \
  103.     ((unsigned long)(task_thread_info(tsk)->cpu_context.fp))
  104.  
  105. extern void crunch_task_disable(struct thread_info *);
  106. extern void crunch_task_copy(struct thread_info *, void *);
  107. extern void crunch_task_restore(struct thread_info *, void *);
  108. extern void crunch_task_release(struct thread_info *);
  109.  
  110. extern void iwmmxt_task_disable(struct thread_info *);
  111. extern void iwmmxt_task_copy(struct thread_info *, void *);
  112. extern void iwmmxt_task_restore(struct thread_info *, void *);
  113. extern void iwmmxt_task_release(struct thread_info *);
  114. extern void iwmmxt_task_switch(struct thread_info *);
  115.  
  116. #endif
  117.  
  118. /*
  119.  * We use bit 30 of the preempt_count to indicate that kernel
  120.  * preemption is occurring.  See <asm/hardirq.h>.
  121.  */
  122. #define PREEMPT_ACTIVE    0x40000000
  123.  
  124. /*
  125.  * thread information flags:
  126.  *  TIF_SYSCALL_TRACE    - syscall trace active
  127.  *  TIF_SIGPENDING    - signal pending
  128.  *  TIF_NEED_RESCHED    - rescheduling necessary
  129.  *  TIF_USEDFPU        - FPU was used by this task this quantum (SMP)
  130.  *  TIF_POLLING_NRFLAG    - true if poll_idle() is polling TIF_NEED_RESCHED
  131.  */
  132. #define TIF_SIGPENDING        0
  133. #define TIF_NEED_RESCHED    1
  134. #define TIF_SYSCALL_TRACE    8
  135. #define TIF_POLLING_NRFLAG    16
  136. #define TIF_USING_IWMMXT    17
  137. #define TIF_MEMDIE        18
  138. #define TIF_FREEZE        19
  139.  
  140. #define _TIF_SIGPENDING        (1 << TIF_SIGPENDING)
  141. #define _TIF_NEED_RESCHED    (1 << TIF_NEED_RESCHED)
  142. #define _TIF_SYSCALL_TRACE    (1 << TIF_SYSCALL_TRACE)
  143. #define _TIF_POLLING_NRFLAG    (1 << TIF_POLLING_NRFLAG)
  144. #define _TIF_USING_IWMMXT    (1 << TIF_USING_IWMMXT)
  145. #define _TIF_FREEZE        (1 << TIF_FREEZE)
  146.  
  147. /*
  148.  * Change these and you break ASM code in entry-common.S
  149.  */
  150. #define _TIF_WORK_MASK        0x000000ff
  151.  
  152. #endif /* __KERNEL__ */
  153. #endif /* __ASM_ARM_THREAD_INFO_H */
  154.