1 /* SPDX-License-Identifier: BSD-2-Clause */
2 /*
3  * Copyright (c) 2019-2021, Linaro Limited
4  * Copyright (c) 2020-2023, Arm Limited
5  */
6 
7 #ifndef __KERNEL_USER_MODE_CTX_STRUCT_H
8 #define __KERNEL_USER_MODE_CTX_STRUCT_H
9 
10 #include <kernel/tee_ta_manager.h>
11 #include <kernel/thread.h>
12 #include <mm/tee_mmu_types.h>
13 
14 /*
15  * struct user_mode_ctx - user mode context
16  * @vm_info:		Virtual memory map of this context
17  * @regions:		Memory regions registered by pager
18  * @vfp:		State of VFP registers
19  * @keys:		Pointer authentication keys
20  * @ts_ctx:		Generic TS context
21  * @entry_func:		Entry address in TS
22  * @dump_entry_func:	Entry address in TS for dumping address mappings
23  *			and stack trace
24  * @ftrace_entry_func:	Entry address in ldelf for dumping ftrace data
25  * @dl_entry_func:	Entry address in ldelf for dynamic linking
26  * @ldelf_stack_ptr:	Stack pointer used for dumping address mappings and
27  *			stack trace
28  * @is_32bit:		True if 32-bit TS, false if 64-bit TS
29  * @stack_ptr:		Stack pointer
30  * @bbuf:		Bounce buffer for user buffers
31  * @bbuf_size:		Size of bounce buffer
32  * @bbuf_offs:		Offset to unused part of bounce buffer
33  */
34 struct user_mode_ctx {
35 	struct vm_info vm_info;
36 	struct vm_paged_region_head *regions;
37 	struct pgt_cache pgt_cache;
38 #if defined(CFG_WITH_VFP)
39 	struct thread_user_vfp_state vfp;
40 #endif
41 #if defined(CFG_TA_PAUTH)
42 	struct thread_pauth_keys keys;
43 #endif
44 	struct ts_ctx *ts_ctx;
45 	uaddr_t entry_func;
46 	uaddr_t load_addr;
47 	uaddr_t dump_entry_func;
48 #ifdef CFG_FTRACE_SUPPORT
49 	uaddr_t ftrace_entry_func;
50 #endif
51 	uaddr_t dl_entry_func;
52 	uaddr_t ldelf_stack_ptr;
53 	bool is_32bit;
54 	vaddr_t stack_ptr;
55 	uint8_t *bbuf;
56 	size_t bbuf_size;
57 	size_t bbuf_offs;
58 };
59 #endif /*__KERNEL_USER_MODE_CTX_STRUCT_H*/
60 
61