kernel_samsung_a34x-permissive/drivers/misc/tui/tuill_defs.h
2024-04-28 15:51:13 +02:00

462 lines
12 KiB
C

/*
* Copyright (c) 2020 Samsung Electronics Co., Ltd All Rights Reserved
*
* TUI LL device driver definitions header
* This copy is for tuihwll driver
*
* There are two other copies of this file in
* /TuiService/tui_service_jni/jni/tuill_defs.h and
* /tzsl/src/tuill/common/tuill_defs.h
*/
#pragma once
#ifndef __USED_BY_TZSL__
#include <linux/types.h>
#else
#include <stdbool.h>
#include <stdint.h>
#endif
typedef void *void_ptr; /**< a pointer to anything. */
typedef void_ptr addr_t; /**< an address, can be physical or virtual */
#define containerof(ptr, type, member) \
((type *)((addr_t)(ptr) - offsetof(type, member)))
#define USEC_IN_MSEC 1000
#define MSEC_IN_SEC 1000
#define NSEC_IN_MSEC 1000000
#define OS_SWD_SOCKET_NAME "tuill_swd_server"
#define OS_IWD_SOCKET_NAME "tuill_iwd_server"
#define TOUCH_DRIVER_NAME "tuill_touchdrv"
#define DISPLAY_DRIVER_NAME "tuill_dispdrv"
#define OS_DRIVER_NAME "tuill_osdrv"
#define TUILLD_OSDRV_TA_NAME "/dev/"OS_DRIVER_NAME
#define TUILLD_DISPDRV_TA_NAME "/dev/"DISPLAY_DRIVER_NAME
#define TUILLD_TOUCHDRV_TA_NAME "/dev/"TOUCH_DRIVER_NAME
#define TUILL_SERVER_PREFIX "/service/"
#define TUILL_SERVER_TEMPLATE TUILL_SERVER_PREFIX "%s"
#define TUILL_API_VERSION 1
#define MAX_DISPLAY 1
//--- Internal TUI LL spec types definition ---------------------------------
//these three constants weren't defined in TUI LL spec
//and shouldn't be visible for user, but we need them
#define TEE_PERIPHERAL_DISPLAY 0xABABABAB
#define TEE_PERIPHERAL_SERVICE 0xABABABAC
#define TEE_PERIPHERAL_TUIHW 0xABABABAD
#define TUILL_INVALID_HANDLE_VALUE (-1)
#define TUILL_OPENED_HANDLE_VALUE 1
#define STUI_DISPLAY_INFO_SIZE 10
typedef uint32_t tuill_handle_t;
struct __TEE_EventQueueHandle {
tuill_handle_t hndl;
};
struct __TEE_EventSourceHandle {
tuill_handle_t hndl;
};
struct __TEE_PeripheralHandle {
tuill_handle_t hndl;
};
//--- Configuration enums definition ----------------------------------------
enum TUILL_IO_SOCKET {
TUILLDRV_SWD_SOCK,
TUILLDRV_IWD_SOCK,
TUILLDRV_SOCK_MAX
};
enum tuill_swd_components {
//enum order must be the same as in tuill_drivers
TUILL_TOUCH,
TUILL_DISPLAY,
TUILL_SWD_MAX,
};
enum tuill_iwd_components {
TUILL_TUIHW,
TUILL_SERVICE,
TUILL_IWD_MAX,
};
enum tuill_drivers {
//used as TEE_PeripheralId
TUILL_OS_DRV,
//enum order must be the same as in tuill_swd_components
TUILL_TOUCH_DRV,
TUILL_DISPLAY_DRV,
TUILL_DRV_MAX,
};
typedef struct tuilldrv_touch_data {
uint32_t display;
uint32_t action;
uint32_t finger;
uint32_t pressure;
uint32_t x;
uint32_t y;
} __attribute__((packed, aligned(4))) tuilldrv_touch_data_t;
typedef struct tuilldrv_tee_data {
uint32_t event;
} __attribute__((packed, aligned(4))) tuilldrv_tee_data_t;
typedef struct tuilldrv_send_event_data {
uint32_t periph_id;
uint32_t event_type;
uint32_t ret_code;
union {
tuilldrv_touch_data_t touch;
tuilldrv_tee_data_t tee;
} u;
} __attribute__((packed, aligned(4))) tuilldrv_send_event_data_t;
//--- Socket commands and structures definition -----------------------------
//must match enum TUIInternalCommand in TUICmdWrapper.java
enum tuill_internal_commands {
TUILL_ICMD_PING,
//peripheral API
TUILL_ICMD_GET_PERIPHERAL_LIST,
TUILL_ICMD_CLOSE_PERIPHERAL, //single and multiple
TUILL_ICMD_OPEN_PERIPHERAL, //single and multiple
//event API
TUILL_ICMD_ADD_SOURCES,
TUILL_ICMD_CANCEL_SOURCES,
TUILL_ICMD_CLOSE_CLIENT_QUEUE,
TUILL_ICMD_DROP_SOURCES,
TUILL_ICMD_LIST_SOURCES,
TUILL_ICMD_OPEN_CLIENT_QUEUE,
TUILL_ICMD_WAIT_EVENT,
//tui API
TUILL_ICMD_GET_DISPLAY_INFO,
TUILL_ICMD_TUI_INIT_SESSION_LOW,
TUILL_ICMD_TUI_CLOSE_SESSION,
TUILL_ICMD_BLIT_DISPLAY_SURFACE,
//internal API
TUILL_ICMD_SET_DRV_STATE,
TUILL_ICMD_TOUCH_EVENT,
TUILL_ICMD_OPEN_DRIVER,
TUILL_ICMD_CLOSE_DRIVER,
TUILL_ICMD_REBOOT_PHONE,
TUILL_ICMD_CANCEL_TUI,
TUILL_ICMD_DRIVER_CLOSED,
TUILL_ICMD_TIMER_CREATE,
#ifdef BUILD_TYPE_debug
//os_drv debug commands
TUILL_ICMD_SEND_EVENT,
TUILL_ICMD_REBOOT,
TUILL_ICMD_SEND_ERRDATA,
TUILL_ICMD_TEST_DRV_EVENT,
#endif //BUILD_TYPE_debug
TUILL_ICMD_MAX,
};
#define RESPONSE_FLAG 0x80000000
#define INJECT_ERR_FLAG 0x40000000 //for debugging, injects error code
#define MAKE_TIMEOUT_FLAG 0x20000000 //for debugging, makes timeout error
typedef struct FB_Data {
//we need to return this data in case if we opened display
uint32_t width;
uint32_t height;
uint64_t fb_physical;
uint64_t fb_virtual;
uint64_t fb_size;
uint64_t wb_physical;
uint64_t wb_virtual;
uint64_t wb_size;
uint64_t disp_physical;
uint64_t disp_size;
uint32_t touch_type;
uint64_t lcd_info[STUI_DISPLAY_INFO_SIZE];
uint32_t disp_if;
} __attribute__((packed, aligned(4))) FB_Data_t;
typedef struct OpenPeripheral_cmd {
uint32_t num;
uint32_t peripheral_id[TUILL_DRV_MAX];
uint32_t flags;
FB_Data_t FB;
} __attribute__((packed, aligned(4))) OpenPeripheral_cmd_t;
typedef struct OpenPeripheral_rsp {
FB_Data_t FB;
} __attribute__((packed, aligned(4))) OpenPeripheral_rsp_t;
typedef struct ClosePeripheral_cmd {
uint32_t num;
uint32_t peripheral_id[TUILL_DRV_MAX];
} __attribute__((packed, aligned(4))) ClosePeripheral_cmd_t;
typedef OpenPeripheral_cmd_t OpenDrivers_cmd_t;
typedef OpenPeripheral_rsp_t OpenDrivers_rsp_t;
typedef ClosePeripheral_cmd_t CloseDrivers_cmd_t;
#define TEE_MAX_EVENT_PAYLOAD_SIZE 32
#define TEE_MAX_EVENT_NUMBER 4
typedef struct {
uint32_t eventType;
uint64_t timestamp;
tuill_handle_t event_handle;
uint8_t payload[TEE_MAX_EVENT_PAYLOAD_SIZE];
} __TEE_Event_V1;
typedef struct {
uint32_t version;
uint32_t peripheral_id;
union {
__TEE_Event_V1 v1;
} u;
} __TEE_Event;
//event commands start
typedef struct AddSources_cmd {
tuill_handle_t queue_handle;
uint32_t num_sources;
tuill_handle_t sources[TUILL_DRV_MAX];
} __attribute__((packed, aligned(4))) AddSources_cmd_t;
typedef struct CancelSources_cmd {
tuill_handle_t queue_handle;
uint32_t num_sources;
tuill_handle_t sources[TUILL_DRV_MAX];
} __attribute__((packed, aligned(4))) CancelSources_cmd_t;
typedef struct CloseQueue_cmd {
tuill_handle_t queue_handle;
} __attribute__((packed, aligned(4))) CloseQueue_cmd_t;
typedef struct DropSources_cmd {
tuill_handle_t queue_handle;
uint32_t num_sources;
tuill_handle_t sources[TUILL_DRV_MAX];
} __attribute__((packed, aligned(4))) DropSources_cmd_t;
typedef struct ListSources_cmd {
tuill_handle_t queue_handle;
uint32_t num_sources;
} __attribute__((packed, aligned(4))) ListSources_cmd_t;
typedef struct ListSources_rsp {
uint32_t num_sources;
tuill_handle_t sources[TUILL_DRV_MAX];
} __attribute__((packed, aligned(4))) ListSources_rsp_t;
typedef struct OpenQueue_cmd {
uint32_t timeout_ms;
uint32_t num_sources;
tuill_handle_t sources[TUILL_DRV_MAX];
} __attribute__((packed, aligned(4))) OpenQueue_cmd_t;
typedef struct OpenQueue_rsp {
tuill_handle_t queue_handle;
} __attribute__((packed, aligned(4))) OpenQueue_rsp_t;
typedef struct WaitEvent_cmd {
tuill_handle_t queue_handle;
uint32_t num_events;
uint32_t timeout_ms;
} __attribute__((packed, aligned(4))) WaitEvent_cmd_t;
typedef struct WaitEvent_rsp {
uint32_t num_events;
uint32_t dropped;
__TEE_Event events[TEE_MAX_EVENT_NUMBER];
} __attribute__((packed, aligned(4))) WaitEvent_rsp_t;
typedef struct TouchEvent_cmd {
uint32_t display;
uint32_t action;
uint32_t finger;
uint32_t pressure;
uint32_t x;
uint32_t y;
} __attribute__((packed, aligned(4))) TouchEvent_cmd_t;
typedef struct OsEvent_cmd {
uint32_t periph_id;
uint32_t event_type;
uint32_t event;
} __attribute__((packed, aligned(4))) OsEvent_cmd_t;
//event commands end
typedef struct SetDrvInfo_cmd {
uint32_t drv_tui_mode;
uint32_t index; //from tuill_iwd_components
} __attribute__((packed, aligned(4))) SetDrvInfo_cmd_t;
typedef struct GetDisplayInfo_cmd {
uint32_t version;
uint32_t displayNumber;
} __attribute__((packed, aligned(4))) GetDisplayInfo_cmd_t;
typedef struct GetDisplayInfo_rsp {
uint32_t physical_width;
uint32_t physical_height;
uint32_t pixel_width;
uint32_t pixel_height;
uint32_t bit_depth;
uint32_t flags;
uint32_t num_periph;
uint32_t associatedPeripherals[TUILL_DRV_MAX];
uint64_t lcd_info[STUI_DISPLAY_INFO_SIZE];
uint32_t disp_if;
} __attribute__((packed, aligned(4))) GetDisplayInfo_rsp_t;
typedef struct peripheral_info {
uint32_t type;
uint32_t id;
} __attribute__((packed, aligned(4))) peripheral_info_t;
typedef struct GetPeripheralList_rsp {
uint32_t num;
peripheral_info_t list[TUILL_DRV_MAX];
} __attribute__((packed, aligned(4))) GetPeripheralList_rsp_t;
typedef struct InitTUISession_cmd {
uint32_t flags;
uint32_t timeout_ms;
uint32_t peripheral_id[TUILL_DRV_MAX];
uint32_t num;
} __attribute__((packed, aligned(4))) InitTUISession_cmd_t;
typedef struct CancelTUI_cmd {
uint32_t event;
} __attribute__((packed, aligned(4))) CancelTUI_cmd_t;
typedef struct tuill_internal_command {
uint32_t cmd;
uint32_t ret_code;
uint32_t version;
uint32_t task_state; //duplicates field in long_cmd_t
uint32_t task_id; //duplicates field in long_cmd_t
union {
//event commands start
AddSources_cmd_t AddSources_cmd;
CancelSources_cmd_t CancelSources_cmd;
CloseQueue_cmd_t CloseQueue_cmd;
DropSources_cmd_t DropSources_cmd;
ListSources_cmd_t ListSources_cmd;
ListSources_rsp_t ListSources_rsp;
OpenQueue_cmd_t OpenQueue_cmd;
OpenQueue_rsp_t OpenQueue_rsp;
WaitEvent_cmd_t WaitEvent_cmd;
WaitEvent_rsp_t WaitEvent_rsp;
TouchEvent_cmd_t TouchEvent_cmd;
OsEvent_cmd_t OsEvent_cmd;
//event commands end
//peripheral commands start
GetPeripheralList_rsp_t GetPeripheralList_rsp;
OpenPeripheral_cmd_t OpenPeripheral_cmd;
OpenPeripheral_rsp_t OpenPeripheral_rsp;
ClosePeripheral_cmd_t ClosePeripheral_cmd;
//peripheral commands end
//tui commands start
GetDisplayInfo_cmd_t GetDisplayInfo_cmd;
GetDisplayInfo_rsp_t GetDisplayInfo_rsp;
InitTUISession_cmd_t InitTUISession_cmd;
//tui commands end
//other commands start
SetDrvInfo_cmd_t SetDrvInfo_cmd;
OpenDrivers_cmd_t OpenDrivers_cmd;
OpenDrivers_rsp_t OpenDrivers_rsp;
CloseDrivers_cmd_t CloseDrivers_cmd;
CancelTUI_cmd_t CancelTUI_cmd;
//other commands end
};
} __attribute__((packed, aligned(4))) tuill_internal_command_t;
//--- Engine structures definition ------------------------------------------
typedef struct tuill_buffer {
int32_t data_len;
char data[sizeof(tuill_internal_command_t)];
} __attribute__((packed, aligned(4))) tuill_buffer_t;
typedef int32_t (*receive_t)(int32_t fd, tuill_buffer_t *data);
typedef void (*process_t)(int32_t fd);
typedef struct tuill_callback {
receive_t process_input;
process_t process_hangup;
process_t process_handhake;
} tuill_callback_t;
typedef enum TUILL_CLIENT_TYPE {
TUILLDRV_CLIENT_SWD_DRV,
TUILLDRV_CLIENT_SWD_CLIENT,
TUILLDRV_CLIENT_IWD_CLIENT,
} TUILL_CLIENT_TYPE_t;
//typedef struct tuill_socket_params {
// int32_t sfd; //socket fd
// int32_t efd; //epoll fd
//} tuill_socket_params_t;
//common drv information
typedef struct tuill_drv_ctx {
uint32_t index; //in drv_arr
uint32_t peripheral_type;//GP enum values
uint32_t peripheral_id; //internal enum values
uint32_t tuill_state; //TEE_PERIPHERAL_STATE_FLAGS
} tuill_drv_ctx_t;
//----- server side contexts for connected entities -------
typedef struct tuill_drv_entity_ctx {
tuill_drv_ctx_t drv_ctx;//shows that driver is connected to system
} tuill_drv_entity_ctx_t;
//used to indicate opened state for drivers
typedef struct tuill_opened {
bool tui; //opened by TEE_TUI_InitSessionLow
bool interrupted; //message about this driver interrupt was received
tuill_handle_t periph_hndl; //indicates session is opened
uint32_t peripheral_type;
uint32_t peripheral_id;
} tuill_opened_t;
enum task_type {
TASK_NONE,
TASK_OPEN,
TASK_CLOSE,
TASK_DISPLAYINFO,
TASK_CLOSE_NWD
};
enum task_cmd_state {
TASK_CMD_VOID,
TASK_CMD_NEEDED,
TASK_CMD_SENT,
TASK_CMD_DONE,
TASK_CMD_ERROR,
TASK_CMD_UNDO_SENT,
TASK_CMD_UNDONE,
};
enum task_state {
TASK_STATE_VOID,
TASK_STATE_DOING,
TASK_STATE_UNDOING,
};
typedef struct tuill_iwd_ctx {
uint32_t index; //from tuill_iwd_components
uint32_t tui_mode;
} tuill_iwd_entity_ctx_t;
//---------------------------------------------------------