11693644dSAndrew Jones #ifndef _ASMARM_THREAD_INFO_H_ 21693644dSAndrew Jones #define _ASMARM_THREAD_INFO_H_ 31693644dSAndrew Jones /* 41693644dSAndrew Jones * Adapted from arch/arm64/include/asm/thread_info.h 51693644dSAndrew Jones * 61693644dSAndrew Jones * Copyright (C) 2015, Red Hat Inc, Andrew Jones <drjones@redhat.com> 71693644dSAndrew Jones * 81693644dSAndrew Jones * This work is licensed under the terms of the GNU LGPL, version 2. 91693644dSAndrew Jones */ 101693644dSAndrew Jones 111693644dSAndrew Jones #define THREAD_SIZE 16384 121693644dSAndrew Jones #define THREAD_START_SP (THREAD_SIZE - 16) 131693644dSAndrew Jones 14*f6d10793SAndrew Jones #define TIF_USER_MODE (1U << 0) 15*f6d10793SAndrew Jones 161693644dSAndrew Jones struct thread_info { 171693644dSAndrew Jones int cpu; 18*f6d10793SAndrew Jones unsigned int flags; 191693644dSAndrew Jones char ext[0]; /* allow unit tests to add extended info */ 201693644dSAndrew Jones }; 211693644dSAndrew Jones 22*f6d10793SAndrew Jones static inline struct thread_info *thread_info_sp(unsigned long sp) 23*f6d10793SAndrew Jones { 24*f6d10793SAndrew Jones return (struct thread_info *)(sp & ~(THREAD_SIZE - 1)); 25*f6d10793SAndrew Jones } 26*f6d10793SAndrew Jones 271693644dSAndrew Jones register unsigned long current_stack_pointer asm("sp"); 281693644dSAndrew Jones 291693644dSAndrew Jones static inline struct thread_info *current_thread_info(void) 301693644dSAndrew Jones { 31*f6d10793SAndrew Jones return thread_info_sp(current_stack_pointer); 321693644dSAndrew Jones } 331693644dSAndrew Jones 34*f6d10793SAndrew Jones extern void thread_info_init(struct thread_info *ti, unsigned int flags); 35*f6d10793SAndrew Jones 361693644dSAndrew Jones #endif /* _ASMARM_THREAD_INFO_H_ */ 37