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

  1. /*
  2.  *  linux/include/asm-arm/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/ptrace.h>
  28. #include <asm/types.h>
  29. #include <asm/domain.h>
  30.  
  31. typedef unsigned long mm_segment_t;
  32.  
  33. struct cpu_context_save {
  34.     __u32    r4;
  35.     __u32    r5;
  36.     __u32    r6;
  37.     __u32    r7;
  38.     __u32    r8;
  39.     __u32    r9;
  40.     __u32    sl;
  41.     __u32    fp;
  42.     __u32    sp;
  43.     __u32    pc;
  44.     __u32    extra[2];        /* Xscale 'acc' register, etc */
  45. };
  46.  
  47. /*
  48.  * low level task data that entry.S needs immediate access to.
  49.  * __switch_to() assumes cpu_context follows immediately after cpu_domain.
  50.  */
  51. struct thread_info {
  52.     unsigned long        flags;        /* low level flags */
  53.     int            preempt_count;    /* 0 => preemptable, <0 => bug */
  54.     mm_segment_t        addr_limit;    /* address limit */
  55.     struct task_struct    *task;        /* main task structure */
  56.     struct exec_domain    *exec_domain;    /* execution domain */
  57.     __u32            cpu;        /* cpu */
  58.     __u32            cpu_domain;    /* cpu domain */
  59.     struct cpu_context_save    cpu_context;    /* cpu context */
  60.     __u8            used_cp[16];    /* thread used copro */
  61.     unsigned long        tp_value;
  62.     union fp_state        fpstate __attribute__((aligned(8)));
  63.     union vfp_state        vfpstate;
  64.     struct restart_block    restart_block;
  65. };
  66.  
  67. #define INIT_THREAD_INFO(tsk)                        \
  68. {                                    \
  69.     .task        = &tsk,                        \
  70.     .exec_domain    = &default_exec_domain,                \
  71.     .flags        = 0,                        \
  72.     .preempt_count    = 1,                        \
  73.     .addr_limit    = KERNEL_DS,                    \
  74.     .cpu_domain    = domain_val(DOMAIN_USER, DOMAIN_MANAGER) |    \
  75.               domain_val(DOMAIN_KERNEL, DOMAIN_MANAGER) |    \
  76.               domain_val(DOMAIN_IO, DOMAIN_CLIENT),        \
  77.     .restart_block    = {                        \
  78.         .fn    = do_no_restart_syscall,            \
  79.     },                                \
  80. }
  81.  
  82. #define init_thread_info    (init_thread_union.thread_info)
  83. #define init_stack        (init_thread_union.stack)
  84.  
  85. /*
  86.  * how to get the thread information struct from C
  87.  */
  88. static inline struct thread_info *current_thread_info(void) __attribute_const__;
  89.  
  90. static inline struct thread_info *current_thread_info(void)
  91. {
  92.     register unsigned long sp asm ("sp");
  93.     return (struct thread_info *)(sp & ~(THREAD_SIZE - 1));
  94. }
  95.  
  96. extern struct thread_info *alloc_thread_info(struct task_struct *task);
  97. extern void free_thread_info(struct thread_info *);
  98.  
  99. #define thread_saved_pc(tsk)    \
  100.     ((unsigned long)(pc_pointer(task_thread_info(tsk)->cpu_context.pc)))
  101. #define thread_saved_fp(tsk)    \
  102.     ((unsigned long)(task_thread_info(tsk)->cpu_context.fp))
  103.  
  104. extern void iwmmxt_task_disable(struct thread_info *);
  105. extern void iwmmxt_task_copy(struct thread_info *, void *);
  106. extern void iwmmxt_task_restore(struct thread_info *, void *);
  107. extern void iwmmxt_task_release(struct thread_info *);
  108.  
  109. #endif
  110.  
  111. /*
  112.  * We use bit 30 of the preempt_count to indicate that kernel
  113.  * preemption is occuring.  See include/asm-arm/hardirq.h.
  114.  */
  115. #define PREEMPT_ACTIVE    0x40000000
  116.  
  117. /*
  118.  * thread information flags:
  119.  *  TIF_SYSCALL_TRACE    - syscall trace active
  120.  *  TIF_NOTIFY_RESUME    - resumption notification requested
  121.  *  TIF_SIGPENDING    - signal pending
  122.  *  TIF_NEED_RESCHED    - rescheduling necessary
  123.  *  TIF_USEDFPU        - FPU was used by this task this quantum (SMP)
  124.  *  TIF_POLLING_NRFLAG    - true if poll_idle() is polling TIF_NEED_RESCHED
  125.  */
  126. #define TIF_NOTIFY_RESUME    0
  127. #define TIF_SIGPENDING        1
  128. #define TIF_NEED_RESCHED    2
  129. #define TIF_SYSCALL_TRACE    8
  130. #define TIF_POLLING_NRFLAG    16
  131. #define TIF_USING_IWMMXT    17
  132. #define TIF_MEMDIE        18
  133.  
  134. #define _TIF_NOTIFY_RESUME    (1 << TIF_NOTIFY_RESUME)
  135. #define _TIF_SIGPENDING        (1 << TIF_SIGPENDING)
  136. #define _TIF_NEED_RESCHED    (1 << TIF_NEED_RESCHED)
  137. #define _TIF_SYSCALL_TRACE    (1 << TIF_SYSCALL_TRACE)
  138. #define _TIF_POLLING_NRFLAG    (1 << TIF_POLLING_NRFLAG)
  139. #define _TIF_USING_IWMMXT    (1 << TIF_USING_IWMMXT)
  140.  
  141. /*
  142.  * Change these and you break ASM code in entry-common.S
  143.  */
  144. #define _TIF_WORK_MASK        0x000000ff
  145.  
  146. #endif /* __KERNEL__ */
  147. #endif /* __ASM_ARM_THREAD_INFO_H */
  148.