static void process_incoming_feature_mask(uint8_t *buf, uint32_t len, struct diag_smd_info *smd_info) { int i; int header_len = sizeof(struct diag_ctrl_feature_mask); int read_len = 0; struct diag_ctrl_feature_mask *header = NULL; uint32_t feature_mask_len = 0; uint32_t feature_mask = 0; uint8_t *ptr = buf; if (!buf || !smd_info || len == 0) return; header = (struct diag_ctrl_feature_mask *)ptr; ptr += header_len; feature_mask_len = header->feature_mask_len; if (feature_mask_len == 0) { pr_debug("diag: In %s, received invalid feature mask from peripheral %d\n", __func__, smd_info->peripheral); return; } if (feature_mask_len > FEATURE_MASK_LEN) { pr_alert("diag: Receiving feature mask length more than Apps support\n"); feature_mask_len = FEATURE_MASK_LEN; } driver->rcvd_feature_mask[smd_info->peripheral] = 1; for (i = 0; i < feature_mask_len && read_len < len; i++) { feature_mask = *(uint8_t *)ptr; driver->peripheral_feature[smd_info->peripheral][i] = feature_mask; ptr += sizeof(uint8_t); read_len += sizeof(uint8_t); if (FEATURE_SUPPORTED(F_DIAG_LOG_ON_DEMAND_APPS)) driver->log_on_demand_support = 1; if (FEATURE_SUPPORTED(F_DIAG_REQ_RSP_SUPPORT)) driver->separate_cmdrsp[smd_info->peripheral] = 1; if (FEATURE_SUPPORTED(F_DIAG_APPS_HDLC_ENCODE)) process_hdlc_encoding_feature(smd_info); if (FEATURE_SUPPORTED(F_DIAG_STM)) enable_stm_feature(smd_info); if (FEATURE_SUPPORTED(F_DIAG_MASK_CENTRALIZATION)) driver->mask_centralization[smd_info->peripheral] = 1; } }
static void process_incoming_feature_mask(uint8_t *buf, uint32_t len, uint8_t peripheral) { int i; int header_len = sizeof(struct diag_ctrl_feature_mask); int read_len = 0; struct diag_ctrl_feature_mask *header = NULL; uint32_t feature_mask_len = 0; uint32_t feature_mask = 0; uint8_t *ptr = buf; if (!buf || peripheral >= NUM_PERIPHERALS || len == 0) return; header = (struct diag_ctrl_feature_mask *)ptr; ptr += header_len; feature_mask_len = header->feature_mask_len; if (feature_mask_len == 0) { DIAGFWD_DBUG("diag: In %s, received invalid feature mask from peripheral %d\n", __func__, peripheral); return; } if (feature_mask_len > FEATURE_MASK_LEN) { pr_alert("diag: Receiving feature mask length more than Apps support\n"); feature_mask_len = FEATURE_MASK_LEN; } driver->feature[peripheral].rcvd_feature_mask = 1; for (i = 0; i < feature_mask_len && read_len < len; i++) { feature_mask = *(uint8_t *)ptr; driver->feature[peripheral].feature_mask[i] = feature_mask; ptr += sizeof(uint8_t); read_len += sizeof(uint8_t); if (FEATURE_SUPPORTED(F_DIAG_LOG_ON_DEMAND_APPS)) driver->feature[peripheral].log_on_demand = 1; if (FEATURE_SUPPORTED(F_DIAG_REQ_RSP_SUPPORT)) driver->feature[peripheral].separate_cmd_rsp = 1; if (FEATURE_SUPPORTED(F_DIAG_APPS_HDLC_ENCODE)) process_hdlc_encoding_feature(peripheral); if (FEATURE_SUPPORTED(F_DIAG_STM)) enable_stm_feature(peripheral); if (FEATURE_SUPPORTED(F_DIAG_MASK_CENTRALIZATION)) driver->feature[peripheral].mask_centralization = 1; if (FEATURE_SUPPORTED(F_DIAG_PERIPHERAL_BUFFERING)) driver->feature[peripheral].peripheral_buffering = 1; if (FEATURE_SUPPORTED(F_DIAG_SOCKETS_ENABLED)) enable_socket_feature(peripheral); } process_socket_feature(peripheral); process_log_on_demand_feature(peripheral); }