xref: /kernel/linux/common_modules/tzdriver/tui/tui.h (revision 419b0af8)
1419b0af8Sopenharmony_ci/*
2419b0af8Sopenharmony_ci * Copyright (C) 2022 Huawei Technologies Co., Ltd.
3419b0af8Sopenharmony_ci *
4419b0af8Sopenharmony_ci * This software is licensed under the terms of the GNU General Public
5419b0af8Sopenharmony_ci * License version 2, as published by the Free Software Foundation, and
6419b0af8Sopenharmony_ci * may be copied, distributed, and modified under those terms.
7419b0af8Sopenharmony_ci *
8419b0af8Sopenharmony_ci * This program is distributed in the hope that it will be useful,
9419b0af8Sopenharmony_ci * but WITHOUT ANY WARRANTY; without even the implied warranty of
10419b0af8Sopenharmony_ci * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11419b0af8Sopenharmony_ci * GNU General Public License for more details.
12419b0af8Sopenharmony_ci */
13419b0af8Sopenharmony_ci
14419b0af8Sopenharmony_ci#ifndef TUI_H
15419b0af8Sopenharmony_ci#define TUI_H
16419b0af8Sopenharmony_ci
17419b0af8Sopenharmony_ci#include "teek_ns_client.h"
18419b0af8Sopenharmony_ci#include "teek_client_type.h"
19419b0af8Sopenharmony_ci
20419b0af8Sopenharmony_ci#define TEE_TUI_AGENT_ID 0x54554944 /* TUID */
21419b0af8Sopenharmony_ci
22419b0af8Sopenharmony_ci/* tui states */
23419b0af8Sopenharmony_ci#define TUI_STATE_UNUSED	0
24419b0af8Sopenharmony_ci#define TUI_STATE_CONFIG	1
25419b0af8Sopenharmony_ci#define TUI_STATE_RUNNING   2
26419b0af8Sopenharmony_ci#define TUI_STATE_ERROR	    3
27419b0af8Sopenharmony_ci
28419b0af8Sopenharmony_ci#define TUI_PID_CLEAR       0
29419b0af8Sopenharmony_ci#define TUI_PID_CONFIG		1
30419b0af8Sopenharmony_ci/* command from secure os */
31419b0af8Sopenharmony_ci#define TUI_CMD_ENABLE	    1
32419b0af8Sopenharmony_ci#define TUI_CMD_DISABLE	    2
33419b0af8Sopenharmony_ci#define TUI_CMD_POLL		3
34419b0af8Sopenharmony_ci#define TUI_CMD_SET_STATE   4
35419b0af8Sopenharmony_ci#define TUI_CMD_PAUSE	    5
36419b0af8Sopenharmony_ci#define TUI_CMD_DO_SYNC	    6
37419b0af8Sopenharmony_ci#define TUI_CMD_START_DELAY_WORK	7
38419b0af8Sopenharmony_ci#define TUI_CMD_CANCEL_DELAY_WORK   8
39419b0af8Sopenharmony_ci#define TUI_CMD_LOAD_TTF	        9
40419b0af8Sopenharmony_ci#define TUI_CMD_FREE_TTF_MEM		11
41419b0af8Sopenharmony_ci#define TUI_CMD_EXIT		        12
42419b0af8Sopenharmony_ci
43419b0af8Sopenharmony_ci#define TUI_DRV_NAME_MAX	        32
44419b0af8Sopenharmony_ci
45419b0af8Sopenharmony_ci/* poll event type from normal to secure */
46419b0af8Sopenharmony_cienum tui_poll_type {
47419b0af8Sopenharmony_ci	TUI_POLL_CFG_OK,
48419b0af8Sopenharmony_ci	TUI_POLL_CFG_FAIL,
49419b0af8Sopenharmony_ci	TUI_POLL_TP,
50419b0af8Sopenharmony_ci	TUI_POLL_TICK,
51419b0af8Sopenharmony_ci	TUI_POLL_DELAYED_WORK,
52419b0af8Sopenharmony_ci	TUI_POLL_TIMEOUT,
53419b0af8Sopenharmony_ci	TUI_POLL_RESUME_TUI,
54419b0af8Sopenharmony_ci/* For some reasons, we need a method to terminate TUI from no secure
55419b0af8Sopenharmony_ci * OS, for example the TUI CA maybe killed.
56419b0af8Sopenharmony_ci */
57419b0af8Sopenharmony_ci	TUI_POLL_CANCEL,
58419b0af8Sopenharmony_ci	TUI_POLL_HANDLE_TUI,  /* for tui to handle event */
59419b0af8Sopenharmony_ci	TUI_POLL_NAVI_H_TO_S, /* for navigator hide and show */
60419b0af8Sopenharmony_ci	TUI_POLL_NAVI_S_TO_H,
61419b0af8Sopenharmony_ci	TUI_POLL_SHS_0_TO_1,  /* for single hand mode switch */
62419b0af8Sopenharmony_ci	TUI_POLL_SHS_0_TO_2,
63419b0af8Sopenharmony_ci	TUI_POLL_SHS_1_TO_0,
64419b0af8Sopenharmony_ci	TUI_POLL_SHS_2_TO_0,
65419b0af8Sopenharmony_ci	TUI_POLL_ROTATION_0,  /* for retation switch */
66419b0af8Sopenharmony_ci	TUI_POLL_ROTATION_90,
67419b0af8Sopenharmony_ci	TUI_POLL_ROTATION_180,
68419b0af8Sopenharmony_ci	TUI_POLL_ROTATION_270,
69419b0af8Sopenharmony_ci	TUI_POLL_KEYBOARDTYPE_0,
70419b0af8Sopenharmony_ci	TUI_POLL_KEYBOARDTYPE_3,
71419b0af8Sopenharmony_ci	TUI_POLL_SEMITRANS,
72419b0af8Sopenharmony_ci	TUI_POLL_CURSOR,
73419b0af8Sopenharmony_ci	TUI_POLL_GETFP,
74419b0af8Sopenharmony_ci	TUI_POLL_NOTCH,	      /* for tui to get notch height */
75419b0af8Sopenharmony_ci	TUI_POLL_DIALOGTIMEOUT,
76419b0af8Sopenharmony_ci	TUI_POLL_FOLD,	      /* for tui to get fold_screen */
77419b0af8Sopenharmony_ci	TUI_POLL_MAX		  /* Do Not add type behind this one */
78419b0af8Sopenharmony_ci};
79419b0af8Sopenharmony_ci
80419b0af8Sopenharmony_ci/* tui max should be bigger than TUI_POLL_MAX in tui.h */
81419b0af8Sopenharmony_cistatic const char *const poll_event_type_name[] = {
82419b0af8Sopenharmony_ci	"config-ok",
83419b0af8Sopenharmony_ci	"config-fail",
84419b0af8Sopenharmony_ci	"tp",
85419b0af8Sopenharmony_ci	"tui-tick",
86419b0af8Sopenharmony_ci	"tui-delaywork",
87419b0af8Sopenharmony_ci	"tui-pause",
88419b0af8Sopenharmony_ci	"tui-resume",
89419b0af8Sopenharmony_ci	"tui-terminate",
90419b0af8Sopenharmony_ci	"tui-handle",
91419b0af8Sopenharmony_ci	"tui-hs",
92419b0af8Sopenharmony_ci	"tui-sh",
93419b0af8Sopenharmony_ci	"tui-01",
94419b0af8Sopenharmony_ci	"tui-02",
95419b0af8Sopenharmony_ci	"tui-10",
96419b0af8Sopenharmony_ci	"tui-20",
97419b0af8Sopenharmony_ci	"tui-0",
98419b0af8Sopenharmony_ci	"tui-90",
99419b0af8Sopenharmony_ci	"tui-180",
100419b0af8Sopenharmony_ci	"tui-270",
101419b0af8Sopenharmony_ci	"tui_key_board_type0",
102419b0af8Sopenharmony_ci	"tui_key_board_type3",
103419b0af8Sopenharmony_ci	"tui-SEMI",
104419b0af8Sopenharmony_ci	"tui-cursor",
105419b0af8Sopenharmony_ci	"tui-gettp",
106419b0af8Sopenharmony_ci	"tui-notch",
107419b0af8Sopenharmony_ci	"tui-dialogtimeout",
108419b0af8Sopenharmony_ci	"tui-fold",
109419b0af8Sopenharmony_ci	"tui-max"
110419b0af8Sopenharmony_ci};
111419b0af8Sopenharmony_ci
112419b0af8Sopenharmony_cistatic const char *const state_name[] = {
113419b0af8Sopenharmony_ci	"unused",
114419b0af8Sopenharmony_ci	"config",
115419b0af8Sopenharmony_ci	"running",
116419b0af8Sopenharmony_ci	"error"
117419b0af8Sopenharmony_ci};
118419b0af8Sopenharmony_ci
119419b0af8Sopenharmony_cistruct tui_ctl_shm {
120419b0af8Sopenharmony_ci	struct {
121419b0af8Sopenharmony_ci		int command;
122419b0af8Sopenharmony_ci		int value;
123419b0af8Sopenharmony_ci		int ret;
124419b0af8Sopenharmony_ci	} s2n;
125419b0af8Sopenharmony_ci	struct {
126419b0af8Sopenharmony_ci		int event_type;
127419b0af8Sopenharmony_ci		int value;
128419b0af8Sopenharmony_ci		unsigned int addr;
129419b0af8Sopenharmony_ci		unsigned int addr_h;
130419b0af8Sopenharmony_ci		int tp_info;
131419b0af8Sopenharmony_ci		int tp_info_h_addr;
132419b0af8Sopenharmony_ci		int status;
133419b0af8Sopenharmony_ci		int x;
134419b0af8Sopenharmony_ci		int y;
135419b0af8Sopenharmony_ci		uint32_t npages;
136419b0af8Sopenharmony_ci		uint64_t info_length;
137419b0af8Sopenharmony_ci		uint32_t phy_size;
138419b0af8Sopenharmony_ci	} n2s;
139419b0af8Sopenharmony_ci};
140419b0af8Sopenharmony_ci
141419b0af8Sopenharmony_cistruct tui_msg_node {
142419b0af8Sopenharmony_ci	int type;
143419b0af8Sopenharmony_ci	int val;
144419b0af8Sopenharmony_ci	void *data;
145419b0af8Sopenharmony_ci	struct list_head list;
146419b0af8Sopenharmony_ci};
147419b0af8Sopenharmony_ci
148419b0af8Sopenharmony_citypedef int (*tui_drv_init) (void *pdata, int secure);
149419b0af8Sopenharmony_ci
150419b0af8Sopenharmony_cistruct tui_drv_node {
151419b0af8Sopenharmony_ci	tui_drv_init init_func;
152419b0af8Sopenharmony_ci	void *pdata;
153419b0af8Sopenharmony_ci	char name[TUI_DRV_NAME_MAX];
154419b0af8Sopenharmony_ci	int state;
155419b0af8Sopenharmony_ci	int priority;
156419b0af8Sopenharmony_ci	struct list_head list;
157419b0af8Sopenharmony_ci};
158419b0af8Sopenharmony_ci
159419b0af8Sopenharmony_ci/* tui need memory is calculated dynamically according to the screen resolution */
160419b0af8Sopenharmony_cistruct tui_mem {
161419b0af8Sopenharmony_ci	unsigned int tui_addr_size;
162419b0af8Sopenharmony_ci	unsigned int tui_addr;
163419b0af8Sopenharmony_ci	unsigned int tui_addr_h;
164419b0af8Sopenharmony_ci	struct device *tui_dev;
165419b0af8Sopenharmony_ci	char *tui_virt;
166419b0af8Sopenharmony_ci};
167419b0af8Sopenharmony_ci
168419b0af8Sopenharmony_cistruct ttf_mem {
169419b0af8Sopenharmony_ci	unsigned int ttf_addr_h;
170419b0af8Sopenharmony_ci	unsigned int ttf_addr_l;
171419b0af8Sopenharmony_ci	char *ttf_buff_virt;
172419b0af8Sopenharmony_ci	unsigned int ttf_file_size;
173419b0af8Sopenharmony_ci};
174419b0af8Sopenharmony_ci
175419b0af8Sopenharmony_citypedef struct tui_memory {
176419b0af8Sopenharmony_ci	phys_addr_t tui_ion_phys_addr;
177419b0af8Sopenharmony_ci	void *tui_ion_virt_addr;
178419b0af8Sopenharmony_ci	size_t len;
179419b0af8Sopenharmony_ci	uint32_t size;
180419b0af8Sopenharmony_ci	uint32_t configid;
181419b0af8Sopenharmony_ci	struct sg_table *tui_sg_table;
182419b0af8Sopenharmony_ci	phys_addr_t fb_phys_addr;
183419b0af8Sopenharmony_ci	uint32_t npages;
184419b0af8Sopenharmony_ci	uint64_t info_length;
185419b0af8Sopenharmony_ci} tui_ion_mem;
186419b0af8Sopenharmony_ci
187419b0af8Sopenharmony_ci#ifdef CONFIG_TEE_TUI
188419b0af8Sopenharmony_ciextern int ts_tui_report_input(void *finger_data);
189419b0af8Sopenharmony_ciextern int tui_fp_notify(void);
190419b0af8Sopenharmony_ciint __init init_tui(const struct device *dev);
191419b0af8Sopenharmony_civoid free_tui(void);
192419b0af8Sopenharmony_ciint tui_send_event(int event, struct teec_tui_parameter *tui_param);
193419b0af8Sopenharmony_ciint register_tui_driver(tui_drv_init fun, const char *name,
194419b0af8Sopenharmony_ci						void *pdata);
195419b0af8Sopenharmony_civoid unregister_tui_driver(const char *name);
196419b0af8Sopenharmony_ci/*
197419b0af8Sopenharmony_ci * TUI has different state that can recieve given types of message,
198419b0af8Sopenharmony_ci * there are 3 APIs to send message.
199419b0af8Sopenharmony_ci * send_tui_msg_config:send message to TUI in config state only.
200419b0af8Sopenharmony_ci */
201419b0af8Sopenharmony_ciint send_tui_msg_config(int type, int val, void *data);
202419b0af8Sopenharmony_civoid tui_poweroff_work_start(void);
203419b0af8Sopenharmony_ci
204419b0af8Sopenharmony_civoid set_tui_caller_info(unsigned int devid, int pid);
205419b0af8Sopenharmony_civoid free_tui_caller_info(void);
206419b0af8Sopenharmony_ci
207419b0af8Sopenharmony_ciunsigned int tui_attach_device(void);
208419b0af8Sopenharmony_civoid do_ns_tui_release(void);
209419b0af8Sopenharmony_ciint is_tui_in_use(int pid_value);
210419b0af8Sopenharmony_ciint tc_ns_tui_event(struct tc_ns_dev_file *dev_file, const void *argp);
211419b0af8Sopenharmony_cibool is_tui_agent(unsigned int agent_id);
212419b0af8Sopenharmony_ci#else
213419b0af8Sopenharmony_cistatic inline bool is_tui_agent(unsigned int agent_id)
214419b0af8Sopenharmony_ci{
215419b0af8Sopenharmony_ci	(void)agent_id;
216419b0af8Sopenharmony_ci	return false;
217419b0af8Sopenharmony_ci}
218419b0af8Sopenharmony_ci
219419b0af8Sopenharmony_cistatic inline int init_tui(const struct device *dev)
220419b0af8Sopenharmony_ci{
221419b0af8Sopenharmony_ci	(void)dev;
222419b0af8Sopenharmony_ci	return 0;
223419b0af8Sopenharmony_ci}
224419b0af8Sopenharmony_ci
225419b0af8Sopenharmony_cistatic inline void free_tui(void)
226419b0af8Sopenharmony_ci{
227419b0af8Sopenharmony_ci}
228419b0af8Sopenharmony_ci
229419b0af8Sopenharmony_cistatic inline void unregister_tui_driver(const char *name)
230419b0af8Sopenharmony_ci{
231419b0af8Sopenharmony_ci	(void)name;
232419b0af8Sopenharmony_ci}
233419b0af8Sopenharmony_ci
234419b0af8Sopenharmony_cistatic inline int send_tui_msg_config(int type, int val, const void *data)
235419b0af8Sopenharmony_ci{
236419b0af8Sopenharmony_ci	(void)type;
237419b0af8Sopenharmony_ci	(void)val;
238419b0af8Sopenharmony_ci	(void)data;
239419b0af8Sopenharmony_ci	return 0;
240419b0af8Sopenharmony_ci}
241419b0af8Sopenharmony_ci
242419b0af8Sopenharmony_cistatic inline void set_tui_caller_info(unsigned int devid, int pid)
243419b0af8Sopenharmony_ci{
244419b0af8Sopenharmony_ci	(void)devid;
245419b0af8Sopenharmony_ci	(void)pid;
246419b0af8Sopenharmony_ci}
247419b0af8Sopenharmony_ci
248419b0af8Sopenharmony_cistatic inline void free_tui_caller_info(void)
249419b0af8Sopenharmony_ci{
250419b0af8Sopenharmony_ci}
251419b0af8Sopenharmony_ci
252419b0af8Sopenharmony_cistatic inline unsigned int tui_attach_device(void)
253419b0af8Sopenharmony_ci{
254419b0af8Sopenharmony_ci	return 0;
255419b0af8Sopenharmony_ci}
256419b0af8Sopenharmony_ci
257419b0af8Sopenharmony_cistatic inline int is_tui_in_use(int pid_value)
258419b0af8Sopenharmony_ci{
259419b0af8Sopenharmony_ci	(void)pid_value;
260419b0af8Sopenharmony_ci	return 0;
261419b0af8Sopenharmony_ci}
262419b0af8Sopenharmony_ci
263419b0af8Sopenharmony_cistatic inline void do_ns_tui_release(void)
264419b0af8Sopenharmony_ci{
265419b0af8Sopenharmony_ci}
266419b0af8Sopenharmony_ci
267419b0af8Sopenharmony_cistatic inline int tc_ns_tui_event(struct tc_ns_dev_file *dev_file, const void *argp)
268419b0af8Sopenharmony_ci{
269419b0af8Sopenharmony_ci	(void)dev_file;
270419b0af8Sopenharmony_ci	(void)argp;
271419b0af8Sopenharmony_ci	return 0;
272419b0af8Sopenharmony_ci}
273419b0af8Sopenharmony_ci#endif
274419b0af8Sopenharmony_ci
275419b0af8Sopenharmony_ci#endif