[Docs] Added Information about Secure Monitor
[3rdparty/ote_partner/tlk.git] / arch / arm / arm / include / arch / arch_thread.h
1 /*
2  * Copyright (c) 2008 Travis Geiselbrecht
3  * Copyright (c) 2012, NVIDIA CORPORATION. All rights reserved
4  *
5  * Permission is hereby granted, free of charge, to any person obtaining
6  * a copy of this software and associated documentation files
7  * (the "Software"), to deal in the Software without restriction,
8  * including without limitation the rights to use, copy, modify, merge,
9  * publish, distribute, sublicense, and/or sell copies of the Software,
10  * and to permit persons to whom the Software is furnished to do so,
11  * subject to the following conditions:
12  *
13  * The above copyright notice and this permission notice shall be
14  * included in all copies or substantial portions of the Software.
15  *
16  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
19  * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
20  * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
21  * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
22  * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
23  */
24 #ifndef __ARM_ARCH_THREAD_H
25 #define __ARM_ARCH_THREAD_H
26
27 /* offsets within thread_t */
28 #define THREAD_ARCH_KERN_STACK  0x34
29 #define THREAD_ARCH_TASK        0x38
30 #define THREAD_ARCH_FPCTX       0x3c
31
32 /* offset within fpctx_t */
33 #define FPCTX_FPEXC             0x0
34
35 #ifndef ASSEMBLY
36
37 static inline void arch_set_tls(u_int tp_value)
38 {
39         __asm volatile("mcr p15, 0, %0, c13, c0, 3" :: "r" (tp_value));
40 }
41
42 #include <kernel/task.h>
43
44 struct arch_fpctx {
45         uint32_t fpexc;
46         uint64_t dregs[32];
47         uint32_t fpscr;
48         bool valid;
49 };
50 typedef struct arch_fpctx fpctx_t;
51
52 struct arch_thread {
53         vaddr_t sp;
54         task_t *task;
55         fpctx_t *fpctx;
56         uint32_t tp_value;
57         bool initial;
58 };
59
60 extern fpctx_t *s_vfp_hw_context;
61 extern fpctx_t *ns_vfp_hw_context;
62
63 #endif
64 #endif
65