1/* 2 * File: include/asm-blackfin/thread_info.h 3 * Based on: include/asm-m68knommu/thread_info.h 4 * Author: LG Soft India 5 * Copyright (C) 2004-2005 Analog Devices Inc. 6 * Created: Tue Sep 21 2004 7 * Description: Blackfin low-level thread information 8 * Modified: 9 * Bugs: Enter bugs at http://blackfin.uclinux.org/ 10 * 11 * This program is free software; you can redistribute it and/or modify 12 * it under the terms of the GNU General Public License as published by 13 * the Free Software Foundation; either version 2, or (at your option) 14 * any later version. 15 * 16 * This program is distributed in the hope that it will be useful, 17 * but WITHOUT ANY WARRANTY; without even the implied warranty of 18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 19 * GNU General Public License for more details. 20 * 21 * You should have received a copy of the GNU General Public License 22 * along with this program; see the file COPYING. 23 * If not, write to the Free Software Foundation, 24 * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 25 */ 26 27#ifndef _ASM_THREAD_INFO_H 28#define _ASM_THREAD_INFO_H 29 30#include <asm/page.h> 31#include <asm/entry.h> 32#include <asm/l1layout.h> 33#include <linux/compiler.h> 34 35#ifdef __KERNEL__ 36 37/* Thread Align Mask to reach to the top of the stack 38 * for any process 39 */ 40#define ALIGN_PAGE_MASK 0xffffe000 41 42#ifndef __ASSEMBLY__ 43 44typedef unsigned long mm_segment_t; 45 46/* 47 * low level task data. 48 * If you change this, change the TI_* offsets below to match. 49 */ 50 51struct thread_info { 52 struct task_struct *task; /* main task structure */ 53 struct exec_domain *exec_domain; /* execution domain */ 54 unsigned long flags; /* low level flags */ 55 int cpu; /* cpu we're on */ 56 int preempt_count; /* 0 => preemptable, <0 => BUG */ 57 mm_segment_t addr_limit; /* address limit */ 58 struct restart_block restart_block; 59 struct l1_scratch_task_info l1_task_info; 60}; 61 62/* 63 * macros/functions for gaining access to the thread information structure 64 */ 65#define INIT_THREAD_INFO(tsk) \ 66{ \ 67 .task = &tsk, \ 68 .exec_domain = &default_exec_domain, \ 69 .flags = 0, \ 70 .cpu = 0, \ 71 .preempt_count = 1, \ 72 .restart_block = { \ 73 .fn = do_no_restart_syscall, \ 74 }, \ 75} 76#define init_thread_info (init_thread_union.thread_info) 77#define init_stack (init_thread_union.stack) 78 79/* 80 * Size of kernel stack for each process. This must be a power of 2... 81 */ 82#define THREAD_SIZE 8192 /* 2 pages */ 83 84/* How to get the thread information struct from C */ 85 86static inline struct thread_info *current_thread_info(void) 87 __attribute__ ((__const__)); 88 89/* Given a task stack pointer, you can find it's task structure 90 * just by masking it to the 8K boundary. 91 */ 92static inline struct thread_info *current_thread_info(void) 93{ 94 struct thread_info *ti; 95 __asm__("%0 = sp;": "=&d"(ti): 96 ); 97 return (struct thread_info *)((long)ti & ~8191UL); 98} 99 100/* thread information allocation */ 101#define alloc_thread_info(tsk) ((struct thread_info *) \ 102 __get_free_pages(GFP_KERNEL, 1)) 103#define free_thread_info(ti) free_pages((unsigned long) (ti), 1) 104#endif /* __ASSEMBLY__ */ 105 106/* 107 * Offsets in thread_info structure, used in assembly code 108 */ 109#define TI_TASK 0 110#define TI_EXECDOMAIN 4 111#define TI_FLAGS 8 112#define TI_CPU 12 113#define TI_PREEMPT 16 114 115#define PREEMPT_ACTIVE 0x4000000 116 117/* 118 * thread information flag bit numbers 119 */ 120#define TIF_SYSCALL_TRACE 0 /* syscall trace active */ 121#define TIF_NOTIFY_RESUME 1 /* resumption notification requested */ 122#define TIF_SIGPENDING 2 /* signal pending */ 123#define TIF_NEED_RESCHED 3 /* rescheduling necessary */ 124#define TIF_POLLING_NRFLAG 4 /* true if poll_idle() is polling 125 TIF_NEED_RESCHED */ 126#define TIF_MEMDIE 5 127#define TIF_RESTORE_SIGMASK 6 /* restore signal mask in do_signal() */ 128#define TIF_FREEZE 7 /* is freezing for suspend */ 129 130/* as above, but as bit values */ 131#define _TIF_SYSCALL_TRACE (1<<TIF_SYSCALL_TRACE) 132#define _TIF_NOTIFY_RESUME (1<<TIF_NOTIFY_RESUME) 133#define _TIF_SIGPENDING (1<<TIF_SIGPENDING) 134#define _TIF_NEED_RESCHED (1<<TIF_NEED_RESCHED) 135#define _TIF_POLLING_NRFLAG (1<<TIF_POLLING_NRFLAG) 136#define _TIF_RESTORE_SIGMASK (1<<TIF_RESTORE_SIGMASK) 137#define _TIF_FREEZE (1<<TIF_FREEZE) 138 139#define _TIF_WORK_MASK 0x0000FFFE /* work to do on interrupt/exception return */ 140 141#endif /* __KERNEL__ */ 142 143#endif /* _ASM_THREAD_INFO_H */ 144