6db4831e98
Android 14
462 lines
12 KiB
C
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;
|
|
//---------------------------------------------------------
|