xref: /kvm-unit-tests/lib/arm/asm/thread_info.h (revision 1693644d49d196ef1a22c868a16d2aa92fc2dfbf)
1*1693644dSAndrew Jones #ifndef _ASMARM_THREAD_INFO_H_
2*1693644dSAndrew Jones #define _ASMARM_THREAD_INFO_H_
3*1693644dSAndrew Jones /*
4*1693644dSAndrew Jones  * Adapted from arch/arm64/include/asm/thread_info.h
5*1693644dSAndrew Jones  *
6*1693644dSAndrew Jones  * Copyright (C) 2015, Red Hat Inc, Andrew Jones <drjones@redhat.com>
7*1693644dSAndrew Jones  *
8*1693644dSAndrew Jones  * This work is licensed under the terms of the GNU LGPL, version 2.
9*1693644dSAndrew Jones  */
10*1693644dSAndrew Jones 
11*1693644dSAndrew Jones #define THREAD_SIZE		16384
12*1693644dSAndrew Jones #define THREAD_START_SP		(THREAD_SIZE - 16)
13*1693644dSAndrew Jones 
14*1693644dSAndrew Jones struct thread_info {
15*1693644dSAndrew Jones 	int cpu;
16*1693644dSAndrew Jones 	char ext[0];		/* allow unit tests to add extended info */
17*1693644dSAndrew Jones };
18*1693644dSAndrew Jones 
19*1693644dSAndrew Jones register unsigned long current_stack_pointer asm("sp");
20*1693644dSAndrew Jones 
21*1693644dSAndrew Jones static inline struct thread_info *current_thread_info(void)
22*1693644dSAndrew Jones {
23*1693644dSAndrew Jones 	return (struct thread_info *)
24*1693644dSAndrew Jones 		(current_stack_pointer & ~(THREAD_SIZE - 1));
25*1693644dSAndrew Jones }
26*1693644dSAndrew Jones 
27*1693644dSAndrew Jones #endif /* _ASMARM_THREAD_INFO_H_ */
28