#ifndef _SEC_CMD_H_ #define _SEC_CMD_H_ #include #include #include #include #include #include #include #include #include #ifdef CONFIG_DRV_SAMSUNG #include #endif #include #ifndef CONFIG_SEC_FACTORY #define USE_SEC_CMD_QUEUE #include #endif #ifndef CONFIG_DRV_SAMSUNG extern struct class *sec_class; #endif #define SEC_CLASS_DEVT_TSP 10 #define SEC_CLASS_DEVT_TKEY 11 #define SEC_CLASS_DEVT_WACOM 12 #define SEC_CLASS_DEV_NAME_TSP "tsp" #define SEC_CLASS_DEV_NAME_TKEY "sec_touchkey" #define SEC_CLASS_DEV_NAME_WACOM "sec_epen" #define SEC_CMD(name, func) .cmd_name = name, .cmd_func = func #define SEC_CMD_H(name, func) .cmd_name = name, .cmd_func = func, .cmd_log = 1 #define SEC_CMD_BUF_SIZE (4096 - 1) #define SEC_CMD_STR_LEN 256 #define SEC_CMD_RESULT_STR_LEN (4096 - 1) #define SEC_CMD_RESULT_STR_LEN_EXPAND SEC_CMD_RESULT_STR_LEN * 3 #define SEC_CMD_PARAM_NUM 8 struct sec_cmd { struct list_head list; const char *cmd_name; void (*cmd_func)(void *device_data); int cmd_log; }; enum SEC_CMD_STATUS { SEC_CMD_STATUS_WAITING = 0, SEC_CMD_STATUS_RUNNING, // = 1 SEC_CMD_STATUS_OK, // = 2 SEC_CMD_STATUS_FAIL, // = 3 SEC_CMD_STATUS_NOT_APPLICABLE, // = 4 SEC_CMD_STATUS_EXPAND }; #ifdef USE_SEC_CMD_QUEUE #define SEC_CMD_MAX_QUEUE 10 struct command { char cmd[SEC_CMD_STR_LEN]; }; #endif struct sec_cmd_data { struct device *fac_dev; struct list_head cmd_list_head; u8 cmd_state; char cmd[SEC_CMD_STR_LEN]; int cmd_param[SEC_CMD_PARAM_NUM]; char *cmd_result; int cmd_result_expand; int cmd_result_expand_count; int cmd_buffer_size; bool cmd_is_running; struct mutex cmd_lock; #ifdef USE_SEC_CMD_QUEUE struct kfifo cmd_queue; struct mutex fifo_lock; struct delayed_work cmd_work; #endif int item_count; char cmd_result_all[SEC_CMD_RESULT_STR_LEN]; u8 cmd_all_factory_state; }; extern void sec_cmd_set_cmd_exit(struct sec_cmd_data *data); extern void sec_cmd_set_default_result(struct sec_cmd_data *data); extern void sec_cmd_set_cmd_result(struct sec_cmd_data *data, char *buff, int len); extern void sec_cmd_set_cmd_result_all(struct sec_cmd_data *data, char *buff, int len, char *item); extern int sec_cmd_init(struct sec_cmd_data *data, struct sec_cmd *cmds, int len, int devt); extern void sec_cmd_exit(struct sec_cmd_data *data, int devt); extern void sec_cmd_send_event_to_user(struct sec_cmd_data *data, char *test, char *result); #endif /* _SEC_CMD_H_ */