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