linux/arch/avr32/include/asm/thread_info.h
<<
>>
Prefs
   1/*
   2 * Copyright (C) 2004-2006 Atmel Corporation
   3 *
   4 * This program is free software; you can redistribute it and/or modify
   5 * it under the terms of the GNU General Public License version 2 as
   6 * published by the Free Software Foundation.
   7 */
   8#ifndef __ASM_AVR32_THREAD_INFO_H
   9#define __ASM_AVR32_THREAD_INFO_H
  10
  11#include <asm/page.h>
  12
  13#define THREAD_SIZE_ORDER       1
  14#define THREAD_SIZE             (PAGE_SIZE << THREAD_SIZE_ORDER)
  15
  16#ifndef __ASSEMBLY__
  17#include <asm/types.h>
  18
  19struct task_struct;
  20struct exec_domain;
  21
  22struct thread_info {
  23        struct task_struct      *task;          /* main task structure */
  24        struct exec_domain      *exec_domain;   /* execution domain */
  25        unsigned long           flags;          /* low level flags */
  26        __u32                   cpu;
  27        __s32                   preempt_count;  /* 0 => preemptable, <0 => BUG */
  28        __u32                   rar_saved;      /* return address... */
  29        __u32                   rsr_saved;      /* ...and status register
  30                                                   saved by debug handler
  31                                                   when setting up
  32                                                   trampoline */
  33        struct restart_block    restart_block;
  34        __u8                    supervisor_stack[0];
  35};
  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  = INIT_PREEMPT_COUNT,                           \
  44        .restart_block  = {                                             \
  45                .fn     = do_no_restart_syscall                         \
  46        }                                                               \
  47}
  48
  49#define init_thread_info        (init_thread_union.thread_info)
  50#define init_stack              (init_thread_union.stack)
  51
  52/*
  53 * Get the thread information struct from C.
  54 * We do the usual trick and use the lower end of the stack for this
  55 */
  56static inline struct thread_info *current_thread_info(void)
  57{
  58        unsigned long addr = ~(THREAD_SIZE - 1);
  59
  60        asm("and %0, sp" : "=r"(addr) : "0"(addr));
  61        return (struct thread_info *)addr;
  62}
  63
  64#define get_thread_info(ti) get_task_struct((ti)->task)
  65#define put_thread_info(ti) put_task_struct((ti)->task)
  66
  67#endif /* !__ASSEMBLY__ */
  68
  69#define PREEMPT_ACTIVE          0x40000000
  70
  71/*
  72 * Thread information flags
  73 * - these are process state flags that various assembly files may need to access
  74 * - pending work-to-be-done flags are in LSW
  75 * - other flags in MSW
  76 */
  77#define TIF_SYSCALL_TRACE       0       /* syscall trace active */
  78#define TIF_SIGPENDING          1       /* signal pending */
  79#define TIF_NEED_RESCHED        2       /* rescheduling necessary */
  80#define TIF_POLLING_NRFLAG      3       /* true if poll_idle() is polling
  81                                           TIF_NEED_RESCHED */
  82#define TIF_BREAKPOINT          4       /* enter monitor mode on return */
  83#define TIF_SINGLE_STEP         5       /* single step in progress */
  84#define TIF_MEMDIE              6
  85#define TIF_RESTORE_SIGMASK     7       /* restore signal mask in do_signal */
  86#define TIF_CPU_GOING_TO_SLEEP  8       /* CPU is entering sleep 0 mode */
  87#define TIF_NOTIFY_RESUME       9       /* callback before returning to user */
  88#define TIF_FREEZE              29
  89#define TIF_DEBUG               30      /* debugging enabled */
  90#define TIF_USERSPACE           31      /* true if FS sets userspace */
  91
  92#define _TIF_SYSCALL_TRACE      (1 << TIF_SYSCALL_TRACE)
  93#define _TIF_SIGPENDING         (1 << TIF_SIGPENDING)
  94#define _TIF_NEED_RESCHED       (1 << TIF_NEED_RESCHED)
  95#define _TIF_POLLING_NRFLAG     (1 << TIF_POLLING_NRFLAG)
  96#define _TIF_SINGLE_STEP        (1 << TIF_SINGLE_STEP)
  97#define _TIF_MEMDIE             (1 << TIF_MEMDIE)
  98#define _TIF_RESTORE_SIGMASK    (1 << TIF_RESTORE_SIGMASK)
  99#define _TIF_CPU_GOING_TO_SLEEP (1 << TIF_CPU_GOING_TO_SLEEP)
 100#define _TIF_NOTIFY_RESUME      (1 << TIF_NOTIFY_RESUME)
 101#define _TIF_FREEZE             (1 << TIF_FREEZE)
 102
 103/* Note: The masks below must never span more than 16 bits! */
 104
 105/* work to do on interrupt/exception return */
 106#define _TIF_WORK_MASK                          \
 107        ((1 << TIF_SIGPENDING)                  \
 108         | _TIF_NOTIFY_RESUME                   \
 109         | (1 << TIF_NEED_RESCHED)              \
 110         | (1 << TIF_POLLING_NRFLAG)            \
 111         | (1 << TIF_BREAKPOINT)                \
 112         | (1 << TIF_RESTORE_SIGMASK))
 113
 114/* work to do on any return to userspace */
 115#define _TIF_ALLWORK_MASK       (_TIF_WORK_MASK | (1 << TIF_SYSCALL_TRACE) | \
 116                                 _TIF_NOTIFY_RESUME)
 117/* work to do on return from debug mode */
 118#define _TIF_DBGWORK_MASK       (_TIF_WORK_MASK & ~(1 << TIF_BREAKPOINT))
 119
 120#endif /* __ASM_AVR32_THREAD_INFO_H */
 121