• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2022 Huawei Technologies Co., Ltd.
3  *
4  * This software is licensed under the terms of the GNU General Public
5  * License version 2, as published by the Free Software Foundation, and
6  * may be copied, distributed, and modified under those terms.
7  *
8  * This program is distributed in the hope that it will be useful,
9  * but WITHOUT ANY WARRANTY; without even the implied warranty of
10  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11  * GNU General Public License for more details.
12  */
13 
14 #ifndef TUI_H
15 #define TUI_H
16 
17 #include "teek_ns_client.h"
18 #include "teek_client_type.h"
19 
20 #define TEE_TUI_AGENT_ID 0x54554944 /* TUID */
21 
22 /* tui states */
23 #define TUI_STATE_UNUSED	0
24 #define TUI_STATE_CONFIG	1
25 #define TUI_STATE_RUNNING   2
26 #define TUI_STATE_ERROR	    3
27 
28 #define TUI_PID_CLEAR       0
29 #define TUI_PID_CONFIG		1
30 /* command from secure os */
31 #define TUI_CMD_ENABLE	    1
32 #define TUI_CMD_DISABLE	    2
33 #define TUI_CMD_POLL		3
34 #define TUI_CMD_SET_STATE   4
35 #define TUI_CMD_PAUSE	    5
36 #define TUI_CMD_DO_SYNC	    6
37 #define TUI_CMD_START_DELAY_WORK	7
38 #define TUI_CMD_CANCEL_DELAY_WORK   8
39 #define TUI_CMD_LOAD_TTF	        9
40 #define TUI_CMD_FREE_TTF_MEM		11
41 #define TUI_CMD_EXIT		        12
42 
43 #define TUI_DRV_NAME_MAX	        32
44 
45 /* poll event type from normal to secure */
46 enum tui_poll_type {
47 	TUI_POLL_CFG_OK,
48 	TUI_POLL_CFG_FAIL,
49 	TUI_POLL_TP,
50 	TUI_POLL_TICK,
51 	TUI_POLL_DELAYED_WORK,
52 	TUI_POLL_TIMEOUT,
53 	TUI_POLL_RESUME_TUI,
54 /* For some reasons, we need a method to terminate TUI from no secure
55  * OS, for example the TUI CA maybe killed.
56  */
57 	TUI_POLL_CANCEL,
58 	TUI_POLL_HANDLE_TUI,  /* for tui to handle event */
59 	TUI_POLL_NAVI_H_TO_S, /* for navigator hide and show */
60 	TUI_POLL_NAVI_S_TO_H,
61 	TUI_POLL_SHS_0_TO_1,  /* for single hand mode switch */
62 	TUI_POLL_SHS_0_TO_2,
63 	TUI_POLL_SHS_1_TO_0,
64 	TUI_POLL_SHS_2_TO_0,
65 	TUI_POLL_ROTATION_0,  /* for retation switch */
66 	TUI_POLL_ROTATION_90,
67 	TUI_POLL_ROTATION_180,
68 	TUI_POLL_ROTATION_270,
69 	TUI_POLL_KEYBOARDTYPE_0,
70 	TUI_POLL_KEYBOARDTYPE_3,
71 	TUI_POLL_SEMITRANS,
72 	TUI_POLL_CURSOR,
73 	TUI_POLL_GETFP,
74 	TUI_POLL_NOTCH,	      /* for tui to get notch height */
75 	TUI_POLL_DIALOGTIMEOUT,
76 	TUI_POLL_FOLD,	      /* for tui to get fold_screen */
77 	TUI_POLL_MAX		  /* Do Not add type behind this one */
78 };
79 
80 /* tui max should be bigger than TUI_POLL_MAX in tui.h */
81 static const char *const poll_event_type_name[] = {
82 	"config-ok",
83 	"config-fail",
84 	"tp",
85 	"tui-tick",
86 	"tui-delaywork",
87 	"tui-pause",
88 	"tui-resume",
89 	"tui-terminate",
90 	"tui-handle",
91 	"tui-hs",
92 	"tui-sh",
93 	"tui-01",
94 	"tui-02",
95 	"tui-10",
96 	"tui-20",
97 	"tui-0",
98 	"tui-90",
99 	"tui-180",
100 	"tui-270",
101 	"tui_key_board_type0",
102 	"tui_key_board_type3",
103 	"tui-SEMI",
104 	"tui-cursor",
105 	"tui-gettp",
106 	"tui-notch",
107 	"tui-dialogtimeout",
108 	"tui-fold",
109 	"tui-max"
110 };
111 
112 static const char *const state_name[] = {
113 	"unused",
114 	"config",
115 	"running",
116 	"error"
117 };
118 
119 struct tui_ctl_shm {
120 	struct {
121 		int command;
122 		int value;
123 		int ret;
124 	} s2n;
125 	struct {
126 		int event_type;
127 		int value;
128 		unsigned int addr;
129 		unsigned int addr_h;
130 		int tp_info;
131 		int tp_info_h_addr;
132 		int status;
133 		int x;
134 		int y;
135 		uint32_t npages;
136 		uint64_t info_length;
137 		uint32_t phy_size;
138 	} n2s;
139 };
140 
141 struct tui_msg_node {
142 	int type;
143 	int val;
144 	void *data;
145 	struct list_head list;
146 };
147 
148 typedef int (*tui_drv_init) (void *pdata, int secure);
149 
150 struct tui_drv_node {
151 	tui_drv_init init_func;
152 	void *pdata;
153 	char name[TUI_DRV_NAME_MAX];
154 	int state;
155 	int priority;
156 	struct list_head list;
157 };
158 
159 /* tui need memory is calculated dynamically according to the screen resolution */
160 struct tui_mem {
161 	unsigned int tui_addr_size;
162 	unsigned int tui_addr;
163 	unsigned int tui_addr_h;
164 	struct device *tui_dev;
165 	char *tui_virt;
166 };
167 
168 struct ttf_mem {
169 	unsigned int ttf_addr_h;
170 	unsigned int ttf_addr_l;
171 	char *ttf_buff_virt;
172 	unsigned int ttf_file_size;
173 };
174 
175 typedef struct tui_memory {
176 	phys_addr_t tui_ion_phys_addr;
177 	void *tui_ion_virt_addr;
178 	size_t len;
179 	uint32_t size;
180 	uint32_t configid;
181 	struct sg_table *tui_sg_table;
182 	phys_addr_t fb_phys_addr;
183 	uint32_t npages;
184 	uint64_t info_length;
185 } tui_ion_mem;
186 
187 #ifdef CONFIG_TEE_TUI
188 extern int ts_tui_report_input(void *finger_data);
189 extern int tui_fp_notify(void);
190 int __init init_tui(const struct device *dev);
191 void free_tui(void);
192 int tui_send_event(int event, struct teec_tui_parameter *tui_param);
193 int register_tui_driver(tui_drv_init fun, const char *name,
194 						void *pdata);
195 void unregister_tui_driver(const char *name);
196 /*
197  * TUI has different state that can recieve given types of message,
198  * there are 3 APIs to send message.
199  * send_tui_msg_config:send message to TUI in config state only.
200  */
201 int send_tui_msg_config(int type, int val, void *data);
202 void tui_poweroff_work_start(void);
203 
204 void set_tui_caller_info(unsigned int devid, int pid);
205 void free_tui_caller_info(void);
206 
207 unsigned int tui_attach_device(void);
208 void do_ns_tui_release(void);
209 int is_tui_in_use(int pid_value);
210 int tc_ns_tui_event(struct tc_ns_dev_file *dev_file, const void *argp);
211 bool is_tui_agent(unsigned int agent_id);
212 #else
is_tui_agent(unsigned int agent_id)213 static inline bool is_tui_agent(unsigned int agent_id)
214 {
215 	(void)agent_id;
216 	return false;
217 }
218 
init_tui(const struct device * dev)219 static inline int init_tui(const struct device *dev)
220 {
221 	(void)dev;
222 	return 0;
223 }
224 
free_tui(void)225 static inline void free_tui(void)
226 {
227 }
228 
unregister_tui_driver(const char * name)229 static inline void unregister_tui_driver(const char *name)
230 {
231 	(void)name;
232 }
233 
send_tui_msg_config(int type,int val,const void * data)234 static inline int send_tui_msg_config(int type, int val, const void *data)
235 {
236 	(void)type;
237 	(void)val;
238 	(void)data;
239 	return 0;
240 }
241 
set_tui_caller_info(unsigned int devid,int pid)242 static inline void set_tui_caller_info(unsigned int devid, int pid)
243 {
244 	(void)devid;
245 	(void)pid;
246 }
247 
free_tui_caller_info(void)248 static inline void free_tui_caller_info(void)
249 {
250 }
251 
tui_attach_device(void)252 static inline unsigned int tui_attach_device(void)
253 {
254 	return 0;
255 }
256 
is_tui_in_use(int pid_value)257 static inline int is_tui_in_use(int pid_value)
258 {
259 	(void)pid_value;
260 	return 0;
261 }
262 
do_ns_tui_release(void)263 static inline void do_ns_tui_release(void)
264 {
265 }
266 
tc_ns_tui_event(struct tc_ns_dev_file * dev_file,const void * argp)267 static inline int tc_ns_tui_event(struct tc_ns_dev_file *dev_file, const void *argp)
268 {
269 	(void)dev_file;
270 	(void)argp;
271 	return 0;
272 }
273 #endif
274 
275 #endif