1/* SPDX-License-Identifier: GPL-2.0-only */ 2/* 3 * Port on Texas Instruments TMS320C6x architecture 4 * 5 * Copyright (C) 2004, 2009, 2010, 2011 Texas Instruments Incorporated 6 * Author: Aurelien Jacquiot (aurelien.jacquiot@jaluna.com) 7 * 8 * Updated for 2.6.3x: Mark Salter <msalter@redhat.com> 9 */ 10#ifndef _ASM_C6X_THREAD_INFO_H 11#define _ASM_C6X_THREAD_INFO_H 12 13#ifdef __KERNEL__ 14 15#include <asm/page.h> 16 17#ifdef CONFIG_4KSTACKS 18#define THREAD_SIZE 4096 19#define THREAD_SHIFT 12 20#define THREAD_SIZE_ORDER 0 21#else 22#define THREAD_SIZE 8192 23#define THREAD_SHIFT 13 24#define THREAD_SIZE_ORDER 1 25#endif 26 27#define THREAD_START_SP (THREAD_SIZE - 8) 28 29#ifndef __ASSEMBLY__ 30 31typedef struct { 32 unsigned long seg; 33} mm_segment_t; 34 35/* 36 * low level task data. 37 */ 38struct thread_info { 39 struct task_struct *task; /* main task structure */ 40 unsigned long flags; /* low level flags */ 41 int cpu; /* cpu we're on */ 42 int preempt_count; /* 0 = preemptable, <0 = BUG */ 43 mm_segment_t addr_limit; /* thread address space */ 44}; 45 46/* 47 * macros/functions for gaining access to the thread information structure 48 * 49 * preempt_count needs to be 1 initially, until the scheduler is functional. 50 */ 51#define INIT_THREAD_INFO(tsk) \ 52{ \ 53 .task = &tsk, \ 54 .flags = 0, \ 55 .cpu = 0, \ 56 .preempt_count = INIT_PREEMPT_COUNT, \ 57 .addr_limit = KERNEL_DS, \ 58} 59 60/* get the thread information struct of current task */ 61static inline __attribute__((const)) 62struct thread_info *current_thread_info(void) 63{ 64 struct thread_info *ti; 65 asm volatile (" clr .s2 B15,0,%1,%0\n" 66 : "=b" (ti) 67 : "Iu5" (THREAD_SHIFT - 1)); 68 return ti; 69} 70 71#define get_thread_info(ti) get_task_struct((ti)->task) 72#define put_thread_info(ti) put_task_struct((ti)->task) 73#endif /* __ASSEMBLY__ */ 74 75/* 76 * thread information flag bit numbers 77 * - pending work-to-be-done flags are in LSW 78 * - other flags in MSW 79 */ 80#define TIF_SYSCALL_TRACE 0 /* syscall trace active */ 81#define TIF_NOTIFY_RESUME 1 /* resumption notification requested */ 82#define TIF_SIGPENDING 2 /* signal pending */ 83#define TIF_NEED_RESCHED 3 /* rescheduling necessary */ 84#define TIF_RESTORE_SIGMASK 4 /* restore signal mask in do_signal() */ 85 86#define TIF_MEMDIE 17 /* OOM killer killed process */ 87 88#define TIF_WORK_MASK 0x00007FFE /* work on irq/exception return */ 89#define TIF_ALLWORK_MASK 0x00007FFF /* work on any return to u-space */ 90 91#endif /* __KERNEL__ */ 92 93#endif /* _ASM_C6X_THREAD_INFO_H */ 94