linux/arch/hexagon/include/asm/thread_info.h
<<
>>
Prefs
   1/*
   2 * Thread support for the Hexagon architecture
   3 *
   4 * Copyright (c) 2010-2011, The Linux Foundation. All rights reserved.
   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 and
   8 * only version 2 as published by the Free Software Foundation.
   9 *
  10 * This program is distributed in the hope that it will be useful,
  11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
  12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  13 * GNU General Public License for more details.
  14 *
  15 * You should have received a copy of the GNU General Public License
  16 * along with this program; if not, write to the Free Software
  17 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
  18 * 02110-1301, USA.
  19 */
  20
  21#ifndef _ASM_THREAD_INFO_H
  22#define _ASM_THREAD_INFO_H
  23
  24#ifdef __KERNEL__
  25
  26#ifndef __ASSEMBLY__
  27#include <asm/processor.h>
  28#include <asm/registers.h>
  29#include <asm/page.h>
  30#endif
  31
  32#define THREAD_SHIFT            12
  33#define THREAD_SIZE             (1<<THREAD_SHIFT)
  34#define THREAD_SIZE_ORDER       (THREAD_SHIFT - PAGE_SHIFT)
  35
  36#ifndef __ASSEMBLY__
  37
  38typedef struct {
  39        unsigned long seg;
  40} mm_segment_t;
  41
  42/*
  43 * This is union'd with the "bottom" of the kernel stack.
  44 * It keeps track of thread info which is handy for routines
  45 * to access quickly.
  46 */
  47
  48struct thread_info {
  49        struct task_struct      *task;          /* main task structure */
  50        unsigned long           flags;          /* low level flags */
  51        __u32                   cpu;            /* current cpu */
  52        int                     preempt_count;  /* 0=>preemptible,<0=>BUG */
  53        mm_segment_t            addr_limit;     /* segmentation sux */
  54        /*
  55         * used for syscalls somehow;
  56         * seems to have a function pointer and four arguments
  57         */
  58        /* Points to the current pt_regs frame  */
  59        struct pt_regs          *regs;
  60        /*
  61         * saved kernel sp at switch_to time;
  62         * not sure if this is used (it's not in the VM model it seems;
  63         * see thread_struct)
  64         */
  65        unsigned long           sp;
  66};
  67
  68#else /* !__ASSEMBLY__ */
  69
  70#include <asm/asm-offsets.h>
  71
  72#endif  /* __ASSEMBLY__  */
  73
  74#ifndef __ASSEMBLY__
  75
  76#define INIT_THREAD_INFO(tsk)                   \
  77{                                               \
  78        .task           = &tsk,                 \
  79        .flags          = 0,                    \
  80        .cpu            = 0,                    \
  81        .preempt_count  = 1,                    \
  82        .addr_limit     = KERNEL_DS,            \
  83        .sp = 0,                                \
  84        .regs = NULL,                   \
  85}
  86
  87#define init_thread_info        (init_thread_union.thread_info)
  88#define init_stack              (init_thread_union.stack)
  89
  90/* Tacky preprocessor trickery */
  91#define qqstr(s) qstr(s)
  92#define qstr(s) #s
  93#define QUOTED_THREADINFO_REG qqstr(THREADINFO_REG)
  94
  95register struct thread_info *__current_thread_info asm(QUOTED_THREADINFO_REG);
  96#define current_thread_info()  __current_thread_info
  97
  98#endif /* __ASSEMBLY__ */
  99
 100/*
 101 * thread information flags
 102 * - these are process state flags that various assembly files
 103 *   may need to access
 104 * - pending work-to-be-done flags are in LSW
 105 * - other flags in MSW
 106 */
 107
 108#define TIF_SYSCALL_TRACE       0       /* syscall trace active */
 109#define TIF_NOTIFY_RESUME       1       /* resumption notification requested */
 110#define TIF_SIGPENDING          2       /* signal pending */
 111#define TIF_NEED_RESCHED        3       /* rescheduling necessary */
 112#define TIF_SINGLESTEP          4       /* restore ss @ return to usr mode */
 113#define TIF_RESTORE_SIGMASK     6       /* restore sig mask in do_signal() */
 114/* true if poll_idle() is polling TIF_NEED_RESCHED */
 115#define TIF_MEMDIE              17      /* OOM killer killed process */
 116
 117#define _TIF_SYSCALL_TRACE      (1 << TIF_SYSCALL_TRACE)
 118#define _TIF_NOTIFY_RESUME      (1 << TIF_NOTIFY_RESUME)
 119#define _TIF_SIGPENDING         (1 << TIF_SIGPENDING)
 120#define _TIF_NEED_RESCHED       (1 << TIF_NEED_RESCHED)
 121#define _TIF_SINGLESTEP         (1 << TIF_SINGLESTEP)
 122
 123/* work to do on interrupt/exception return - All but TIF_SYSCALL_TRACE */
 124#define _TIF_WORK_MASK          (0x0000FFFF & ~_TIF_SYSCALL_TRACE)
 125
 126/* work to do on any return to u-space */
 127#define _TIF_ALLWORK_MASK       0x0000FFFF
 128
 129#endif /* __KERNEL__ */
 130
 131#endif
 132