/* Process the data read from the smd control channel */ int diag_process_smd_cntl_read_data(struct diag_smd_info *smd_info, void *buf, int total_recd) { int read_len = 0; int header_len = sizeof(struct diag_ctrl_pkt_header_t); uint8_t *ptr = buf; struct diag_ctrl_pkt_header_t *ctrl_pkt = NULL; #ifdef CONFIG_LGE_USB_DIAG_LOCK_SPR struct diag_ctrl_cmd_reg *reg = NULL; #endif if (!smd_info || !buf || total_recd <= 0) return -EIO; while (read_len + header_len < total_recd) { ctrl_pkt = (struct diag_ctrl_pkt_header_t *)ptr; switch (ctrl_pkt->pkt_id) { #ifdef CONFIG_LGE_USB_DIAG_LOCK_SPR case DIAG_CTRL_MSG_LGE_DIAG_ENABLE: reg = (struct diag_ctrl_cmd_reg *)ptr; pr_info("diag: In %s, synchronize diag status : %d\n",__func__, reg->cmd_code); set_diag_enable(reg->cmd_code); break; #endif case DIAG_CTRL_MSG_REG: process_command_registration(ptr, ctrl_pkt->len, smd_info); break; case DIAG_CTRL_MSG_FEATURE: process_incoming_feature_mask(ptr, ctrl_pkt->len, smd_info); break; case DIAG_CTRL_MSG_LAST_EVENT_REPORT: process_last_event_report(ptr, ctrl_pkt->len, smd_info); break; case DIAG_CTRL_MSG_LOG_RANGE_REPORT: process_log_range_report(ptr, ctrl_pkt->len, smd_info); break; case DIAG_CTRL_MSG_SSID_RANGE_REPORT: process_ssid_range_report(ptr, ctrl_pkt->len, smd_info); break; case DIAG_CTRL_MSG_BUILD_MASK_REPORT: process_build_mask_report(ptr, ctrl_pkt->len, smd_info); break; default: pr_debug("diag: Control packet %d not supported\n", ctrl_pkt->pkt_id); } ptr += header_len + ctrl_pkt->len; read_len += header_len + ctrl_pkt->len; } return 0; }
/* Process the data read from the smd control channel */ int diag_process_smd_cntl_read_data(struct diag_smd_info *smd_info, void *buf, int total_recd) { int read_len = 0; int header_len = sizeof(struct diag_ctrl_pkt_header_t); uint8_t *ptr = buf; struct diag_ctrl_pkt_header_t *ctrl_pkt = NULL; if (!smd_info || !buf || total_recd <= 0) return -EIO; while (read_len + header_len < total_recd) { ctrl_pkt = (struct diag_ctrl_pkt_header_t *)ptr; switch (ctrl_pkt->pkt_id) { case DIAG_CTRL_MSG_REG: process_command_registration(ptr, ctrl_pkt->len, smd_info); break; case DIAG_CTRL_MSG_FEATURE: process_incoming_feature_mask(ptr, ctrl_pkt->len, smd_info); break; case DIAG_CTRL_MSG_LAST_EVENT_REPORT: process_last_event_report(ptr, ctrl_pkt->len, smd_info); break; case DIAG_CTRL_MSG_LOG_RANGE_REPORT: process_log_range_report(ptr, ctrl_pkt->len, smd_info); break; case DIAG_CTRL_MSG_SSID_RANGE_REPORT: process_ssid_range_report(ptr, ctrl_pkt->len, smd_info); break; case DIAG_CTRL_MSG_BUILD_MASK_REPORT: process_build_mask_report(ptr, ctrl_pkt->len, smd_info); break; default: pr_debug("diag: Control packet %d not supported\n", ctrl_pkt->pkt_id); } ptr += header_len + ctrl_pkt->len; read_len += header_len + ctrl_pkt->len; } return 0; }
void diag_cntl_process_read_data(struct diagfwd_info *p_info, void *buf, int len) { int read_len = 0; int header_len = sizeof(struct diag_ctrl_pkt_header_t); uint8_t *ptr = buf; struct diag_ctrl_pkt_header_t *ctrl_pkt = NULL; if (!buf || len <= 0 || !p_info) return; if (reg_dirty & PERIPHERAL_MASK(p_info->peripheral)) { pr_err_ratelimited("diag: dropping command registration from peripheral %d\n", p_info->peripheral); return; } while (read_len + header_len < len) { ctrl_pkt = (struct diag_ctrl_pkt_header_t *)ptr; switch (ctrl_pkt->pkt_id) { case DIAG_CTRL_MSG_REG: process_command_registration(ptr, ctrl_pkt->len, p_info->peripheral); break; case DIAG_CTRL_MSG_DEREG: process_command_deregistration(ptr, ctrl_pkt->len, p_info->peripheral); break; case DIAG_CTRL_MSG_FEATURE: process_incoming_feature_mask(ptr, ctrl_pkt->len, p_info->peripheral); break; case DIAG_CTRL_MSG_LAST_EVENT_REPORT: process_last_event_report(ptr, ctrl_pkt->len, p_info->peripheral); break; case DIAG_CTRL_MSG_LOG_RANGE_REPORT: process_log_range_report(ptr, ctrl_pkt->len, p_info->peripheral); break; case DIAG_CTRL_MSG_SSID_RANGE_REPORT: process_ssid_range_report(ptr, ctrl_pkt->len, p_info->peripheral); break; case DIAG_CTRL_MSG_BUILD_MASK_REPORT: process_build_mask_report(ptr, ctrl_pkt->len, p_info->peripheral); break; case DIAG_CTRL_MSG_PD_STATUS: process_pd_status(ptr, ctrl_pkt->len, p_info->peripheral); break; default: DIAGFWD_DBUG("diag: Control packet %d not supported\n", ctrl_pkt->pkt_id); } ptr += header_len + ctrl_pkt->len; read_len += header_len + ctrl_pkt->len; } return; }