Loading drivers/platform/msm/ipa/ipa_v2/ipa_flt.c +4 −4 Original line number Diff line number Diff line Loading @@ -23,10 +23,10 @@ static int ipa_generate_hw_rule_from_eq( const struct ipa_ipfltri_rule_eq *attrib, u8 **buf) { int num_offset_meq_32 = attrib->num_offset_meq_32; int num_ihl_offset_range_16 = attrib->num_ihl_offset_range_16; int num_ihl_offset_meq_32 = attrib->num_ihl_offset_meq_32; int num_offset_meq_128 = attrib->num_offset_meq_128; uint8_t num_offset_meq_32 = attrib->num_offset_meq_32; uint8_t num_ihl_offset_range_16 = attrib->num_ihl_offset_range_16; uint8_t num_ihl_offset_meq_32 = attrib->num_ihl_offset_meq_32; uint8_t num_offset_meq_128 = attrib->num_offset_meq_128; int i; if (attrib->tos_eq_present) { Loading drivers/platform/msm/ipa/ipa_v2/ipa_qmi_service.c +54 −0 Original line number Diff line number Diff line Loading @@ -512,6 +512,7 @@ int qmi_filter_request_send(struct ipa_install_fltr_rule_req_msg_v01 *req) struct ipa_install_fltr_rule_resp_msg_v01 resp; struct msg_desc req_desc, resp_desc; int rc; int i; /* check if the filter rules from IPACM is valid */ if (req->filter_spec_list_len == 0) { Loading @@ -521,6 +522,38 @@ int qmi_filter_request_send(struct ipa_install_fltr_rule_req_msg_v01 *req) req->filter_spec_list_len); } if (req->filter_spec_list_len >= QMI_IPA_MAX_FILTERS_V01) { IPAWANDBG( "IPACM passes the number of filtering rules exceed limit\n"); return -EINVAL; } else if (req->source_pipe_index_valid != 0) { IPAWANDBG( "IPACM passes source_pipe_index_valid not zero 0 != %d\n", req->source_pipe_index_valid); return -EINVAL; } else if (req->source_pipe_index >= ipa_ctx->ipa_num_pipes) { IPAWANDBG( "IPACM passes source pipe index not valid ID = %d\n", req->source_pipe_index); return -EINVAL; } for (i = 0; i < req->filter_spec_list_len; i++) { if ((req->filter_spec_list[i].ip_type != QMI_IPA_IP_TYPE_V4_V01) && (req->filter_spec_list[i].ip_type != QMI_IPA_IP_TYPE_V6_V01)) return -EINVAL; if (req->filter_spec_list[i].is_mux_id_valid == false) return -EINVAL; if (req->filter_spec_list[i].is_routing_table_index_valid == false) return -EINVAL; if ((req->filter_spec_list[i].filter_action <= QMI_IPA_FILTER_ACTION_INVALID_V01) && (req->filter_spec_list[i].filter_action > QMI_IPA_FILTER_ACTION_EXCEPTION_V01)) return -EINVAL; } mutex_lock(&ipa_qmi_lock); if (ipa_qmi_ctx != NULL) { /* cache the qmi_filter_request */ Loading Loading @@ -675,6 +708,27 @@ int qmi_filter_notify_send(struct ipa_fltr_installed_notif_req_msg_v01 *req) return -EINVAL; } if (req->install_status != IPA_QMI_RESULT_SUCCESS_V01) { IPAWANERR(" UL filter rule for pipe %d install_status = %d\n", req->source_pipe_index, req->install_status); return -EINVAL; } else if (req->source_pipe_index >= ipa_ctx->ipa_num_pipes) { IPAWANERR("IPACM passes source pipe index not valid ID = %d\n", req->source_pipe_index); return -EINVAL; } else if (((req->embedded_pipe_index_valid != true) || (req->embedded_call_mux_id_valid != true)) && ((req->embedded_pipe_index_valid != false) || (req->embedded_call_mux_id_valid != false))) { IPAWANERR( "IPACM passes embedded pipe and mux valid not valid\n"); return -EINVAL; } else if (req->embedded_pipe_index >= ipa_ctx->ipa_num_pipes) { IPAWANERR("IPACM passes source pipe index not valid ID = %d\n", req->source_pipe_index); return -EINVAL; } mutex_lock(&ipa_qmi_lock); if (ipa_qmi_ctx != NULL) { /* cache the qmi_filter_request */ Loading drivers/platform/msm/ipa/ipa_v2/rmnet_ipa.c +5 −2 Original line number Diff line number Diff line Loading @@ -649,6 +649,8 @@ static int wwan_add_ul_flt_rule_to_ipa(void) return -ENOMEM; } memset(req, 0, sizeof(struct ipa_fltr_installed_notif_req_msg_v01)); param->commit = 1; param->ep = IPA_CLIENT_APPS_LAN_WAN_PROD; param->global = false; Loading Loading @@ -1517,8 +1519,8 @@ static int ipa_wwan_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) /* Get driver name */ case RMNET_IOCTL_GET_DRIVER_NAME: memcpy(&extend_ioctl_data.u.if_name, ipa_netdevs[0]->name, sizeof(IFNAMSIZ)); ipa_netdevs[0]->name, IFNAMSIZ); extend_ioctl_data.u.if_name[IFNAMSIZ - 1] = '\0'; if (copy_to_user((u8 *)ifr->ifr_ifru.ifru_data, &extend_ioctl_data, sizeof(struct rmnet_ioctl_extended_s))) Loading Loading @@ -1664,6 +1666,7 @@ static int ipa_wwan_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) sizeof(wan_msg->upstream_ifname); strlcpy(wan_msg->upstream_ifname, extend_ioctl_data.u.if_name, len); wan_msg->upstream_ifname[len - 1] = '\0'; memset(&msg_meta, 0, sizeof(struct ipa_msg_meta)); msg_meta.msg_type = WAN_XLAT_CONNECT; msg_meta.msg_len = sizeof(struct ipa_wan_msg); Loading drivers/platform/msm/ipa/ipa_v3/ipa.c +3 −0 Original line number Diff line number Diff line Loading @@ -4236,6 +4236,9 @@ static ssize_t ipa3_write(struct file *file, const char __user *buf, return -EFAULT; } if (count > 0) dbg_buff[count - 1] = '\0'; /* Prevent consequent calls from trying to load the FW again. */ if (ipa3_is_ready()) return count; Loading drivers/platform/msm/ipa/ipa_v3/ipa_qmi_service.c +90 −1 Original line number Diff line number Diff line Loading @@ -603,15 +603,49 @@ int ipa3_qmi_filter_request_send(struct ipa_install_fltr_rule_req_msg_v01 *req) struct ipa_install_fltr_rule_resp_msg_v01 resp; struct msg_desc req_desc, resp_desc; int rc; int i; /* check if the filter rules from IPACM is valid */ if (req->filter_spec_ex_list_len == 0) { if (req->filter_spec_list_len == 0) { IPAWANDBG("IPACM pass zero rules to Q6\n"); } else { IPAWANDBG("IPACM pass %u rules to Q6\n", req->filter_spec_ex_list_len); } if (req->filter_spec_list_len >= QMI_IPA_MAX_FILTERS_V01) { IPAWANDBG( "IPACM passes the number of filtering rules exceed limit\n"); return -EINVAL; } else if (req->source_pipe_index_valid != 0) { IPAWANDBG( "IPACM passes source_pipe_index_valid not zero 0 != %d\n", req->source_pipe_index_valid); return -EINVAL; } else if (req->source_pipe_index >= ipa3_ctx->ipa_num_pipes) { IPAWANDBG( "IPACM passes source pipe index not valid ID = %d\n", req->source_pipe_index); return -EINVAL; } for (i = 0; i < req->filter_spec_list_len; i++) { if ((req->filter_spec_list[i].ip_type != QMI_IPA_IP_TYPE_V4_V01) && (req->filter_spec_list[i].ip_type != QMI_IPA_IP_TYPE_V6_V01)) return -EINVAL; if (req->filter_spec_list[i].is_mux_id_valid == false) return -EINVAL; if (req->filter_spec_list[i].is_routing_table_index_valid == false) return -EINVAL; if ((req->filter_spec_list[i].filter_action <= QMI_IPA_FILTER_ACTION_INVALID_V01) && (req->filter_spec_list[i].filter_action > QMI_IPA_FILTER_ACTION_EXCEPTION_V01)) return -EINVAL; } mutex_lock(&ipa3_qmi_lock); if (ipa3_qmi_ctx != NULL) { /* cache the qmi_filter_request */ Loading Loading @@ -653,6 +687,7 @@ int ipa3_qmi_filter_request_ex_send( struct ipa_install_fltr_rule_resp_ex_msg_v01 resp; struct msg_desc req_desc, resp_desc; int rc; int i; /* check if the filter rules from IPACM is valid */ if (req->filter_spec_ex_list_len == 0) { Loading @@ -662,6 +697,34 @@ int ipa3_qmi_filter_request_ex_send( req->filter_spec_ex_list_len); } if (req->filter_spec_ex_list_len >= QMI_IPA_MAX_FILTERS_EX_V01) { IPAWANDBG( "IPACM pass the number of filtering rules exceed limit\n"); return -EINVAL; } else if (req->source_pipe_index_valid != 0) { IPAWANDBG( "IPACM passes source_pipe_index_valid not zero 0 != %d\n", req->source_pipe_index_valid); return -EINVAL; } for (i = 0; i < req->filter_spec_ex_list_len-1; i++) { if ((req->filter_spec_ex_list[i].ip_type != QMI_IPA_IP_TYPE_V4_V01) && (req->filter_spec_ex_list[i].ip_type != QMI_IPA_IP_TYPE_V6_V01)) return -EINVAL; if (req->filter_spec_ex_list[i].is_mux_id_valid == false) return -EINVAL; if (req->filter_spec_ex_list[i].is_routing_table_index_valid == false) return -EINVAL; if ((req->filter_spec_ex_list[i].filter_action <= QMI_IPA_FILTER_ACTION_INVALID_V01) && (req->filter_spec_ex_list[i].filter_action > QMI_IPA_FILTER_ACTION_EXCEPTION_V01)) return -EINVAL; } mutex_lock(&ipa3_qmi_lock); if (ipa3_qmi_ctx != NULL) { /* cache the qmi_filter_request */ Loading Loading @@ -807,6 +870,32 @@ int ipa3_qmi_filter_notify_send( return -EINVAL; } if (req->install_status != IPA_QMI_RESULT_SUCCESS_V01) { IPAWANERR(" UL filter rule for pipe %d install_status = %d\n", req->source_pipe_index, req->install_status); return -EINVAL; } else if (req->rule_id_valid != 1) { IPAWANERR(" UL filter rule for pipe %d rule_id_valid = %d\n", req->source_pipe_index, req->rule_id_valid); return -EINVAL; } else if (req->source_pipe_index >= ipa3_ctx->ipa_num_pipes) { IPAWANDBG( "IPACM passes source pipe index not valid ID = %d\n", req->source_pipe_index); return -EINVAL; } else if (((req->embedded_pipe_index_valid != true) || (req->embedded_call_mux_id_valid != true)) && ((req->embedded_pipe_index_valid != false) || (req->embedded_call_mux_id_valid != false))) { IPAWANERR( "IPACM passes embedded pipe and mux valid not valid\n"); return -EINVAL; } else if (req->embedded_pipe_index >= ipa3_ctx->ipa_num_pipes) { IPAWANERR("IPACM passes source pipe index not valid ID = %d\n", req->source_pipe_index); return -EINVAL; } if (req->source_pipe_index == -1) { IPAWANERR("Source pipe index invalid\n"); return -EINVAL; Loading Loading
drivers/platform/msm/ipa/ipa_v2/ipa_flt.c +4 −4 Original line number Diff line number Diff line Loading @@ -23,10 +23,10 @@ static int ipa_generate_hw_rule_from_eq( const struct ipa_ipfltri_rule_eq *attrib, u8 **buf) { int num_offset_meq_32 = attrib->num_offset_meq_32; int num_ihl_offset_range_16 = attrib->num_ihl_offset_range_16; int num_ihl_offset_meq_32 = attrib->num_ihl_offset_meq_32; int num_offset_meq_128 = attrib->num_offset_meq_128; uint8_t num_offset_meq_32 = attrib->num_offset_meq_32; uint8_t num_ihl_offset_range_16 = attrib->num_ihl_offset_range_16; uint8_t num_ihl_offset_meq_32 = attrib->num_ihl_offset_meq_32; uint8_t num_offset_meq_128 = attrib->num_offset_meq_128; int i; if (attrib->tos_eq_present) { Loading
drivers/platform/msm/ipa/ipa_v2/ipa_qmi_service.c +54 −0 Original line number Diff line number Diff line Loading @@ -512,6 +512,7 @@ int qmi_filter_request_send(struct ipa_install_fltr_rule_req_msg_v01 *req) struct ipa_install_fltr_rule_resp_msg_v01 resp; struct msg_desc req_desc, resp_desc; int rc; int i; /* check if the filter rules from IPACM is valid */ if (req->filter_spec_list_len == 0) { Loading @@ -521,6 +522,38 @@ int qmi_filter_request_send(struct ipa_install_fltr_rule_req_msg_v01 *req) req->filter_spec_list_len); } if (req->filter_spec_list_len >= QMI_IPA_MAX_FILTERS_V01) { IPAWANDBG( "IPACM passes the number of filtering rules exceed limit\n"); return -EINVAL; } else if (req->source_pipe_index_valid != 0) { IPAWANDBG( "IPACM passes source_pipe_index_valid not zero 0 != %d\n", req->source_pipe_index_valid); return -EINVAL; } else if (req->source_pipe_index >= ipa_ctx->ipa_num_pipes) { IPAWANDBG( "IPACM passes source pipe index not valid ID = %d\n", req->source_pipe_index); return -EINVAL; } for (i = 0; i < req->filter_spec_list_len; i++) { if ((req->filter_spec_list[i].ip_type != QMI_IPA_IP_TYPE_V4_V01) && (req->filter_spec_list[i].ip_type != QMI_IPA_IP_TYPE_V6_V01)) return -EINVAL; if (req->filter_spec_list[i].is_mux_id_valid == false) return -EINVAL; if (req->filter_spec_list[i].is_routing_table_index_valid == false) return -EINVAL; if ((req->filter_spec_list[i].filter_action <= QMI_IPA_FILTER_ACTION_INVALID_V01) && (req->filter_spec_list[i].filter_action > QMI_IPA_FILTER_ACTION_EXCEPTION_V01)) return -EINVAL; } mutex_lock(&ipa_qmi_lock); if (ipa_qmi_ctx != NULL) { /* cache the qmi_filter_request */ Loading Loading @@ -675,6 +708,27 @@ int qmi_filter_notify_send(struct ipa_fltr_installed_notif_req_msg_v01 *req) return -EINVAL; } if (req->install_status != IPA_QMI_RESULT_SUCCESS_V01) { IPAWANERR(" UL filter rule for pipe %d install_status = %d\n", req->source_pipe_index, req->install_status); return -EINVAL; } else if (req->source_pipe_index >= ipa_ctx->ipa_num_pipes) { IPAWANERR("IPACM passes source pipe index not valid ID = %d\n", req->source_pipe_index); return -EINVAL; } else if (((req->embedded_pipe_index_valid != true) || (req->embedded_call_mux_id_valid != true)) && ((req->embedded_pipe_index_valid != false) || (req->embedded_call_mux_id_valid != false))) { IPAWANERR( "IPACM passes embedded pipe and mux valid not valid\n"); return -EINVAL; } else if (req->embedded_pipe_index >= ipa_ctx->ipa_num_pipes) { IPAWANERR("IPACM passes source pipe index not valid ID = %d\n", req->source_pipe_index); return -EINVAL; } mutex_lock(&ipa_qmi_lock); if (ipa_qmi_ctx != NULL) { /* cache the qmi_filter_request */ Loading
drivers/platform/msm/ipa/ipa_v2/rmnet_ipa.c +5 −2 Original line number Diff line number Diff line Loading @@ -649,6 +649,8 @@ static int wwan_add_ul_flt_rule_to_ipa(void) return -ENOMEM; } memset(req, 0, sizeof(struct ipa_fltr_installed_notif_req_msg_v01)); param->commit = 1; param->ep = IPA_CLIENT_APPS_LAN_WAN_PROD; param->global = false; Loading Loading @@ -1517,8 +1519,8 @@ static int ipa_wwan_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) /* Get driver name */ case RMNET_IOCTL_GET_DRIVER_NAME: memcpy(&extend_ioctl_data.u.if_name, ipa_netdevs[0]->name, sizeof(IFNAMSIZ)); ipa_netdevs[0]->name, IFNAMSIZ); extend_ioctl_data.u.if_name[IFNAMSIZ - 1] = '\0'; if (copy_to_user((u8 *)ifr->ifr_ifru.ifru_data, &extend_ioctl_data, sizeof(struct rmnet_ioctl_extended_s))) Loading Loading @@ -1664,6 +1666,7 @@ static int ipa_wwan_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) sizeof(wan_msg->upstream_ifname); strlcpy(wan_msg->upstream_ifname, extend_ioctl_data.u.if_name, len); wan_msg->upstream_ifname[len - 1] = '\0'; memset(&msg_meta, 0, sizeof(struct ipa_msg_meta)); msg_meta.msg_type = WAN_XLAT_CONNECT; msg_meta.msg_len = sizeof(struct ipa_wan_msg); Loading
drivers/platform/msm/ipa/ipa_v3/ipa.c +3 −0 Original line number Diff line number Diff line Loading @@ -4236,6 +4236,9 @@ static ssize_t ipa3_write(struct file *file, const char __user *buf, return -EFAULT; } if (count > 0) dbg_buff[count - 1] = '\0'; /* Prevent consequent calls from trying to load the FW again. */ if (ipa3_is_ready()) return count; Loading
drivers/platform/msm/ipa/ipa_v3/ipa_qmi_service.c +90 −1 Original line number Diff line number Diff line Loading @@ -603,15 +603,49 @@ int ipa3_qmi_filter_request_send(struct ipa_install_fltr_rule_req_msg_v01 *req) struct ipa_install_fltr_rule_resp_msg_v01 resp; struct msg_desc req_desc, resp_desc; int rc; int i; /* check if the filter rules from IPACM is valid */ if (req->filter_spec_ex_list_len == 0) { if (req->filter_spec_list_len == 0) { IPAWANDBG("IPACM pass zero rules to Q6\n"); } else { IPAWANDBG("IPACM pass %u rules to Q6\n", req->filter_spec_ex_list_len); } if (req->filter_spec_list_len >= QMI_IPA_MAX_FILTERS_V01) { IPAWANDBG( "IPACM passes the number of filtering rules exceed limit\n"); return -EINVAL; } else if (req->source_pipe_index_valid != 0) { IPAWANDBG( "IPACM passes source_pipe_index_valid not zero 0 != %d\n", req->source_pipe_index_valid); return -EINVAL; } else if (req->source_pipe_index >= ipa3_ctx->ipa_num_pipes) { IPAWANDBG( "IPACM passes source pipe index not valid ID = %d\n", req->source_pipe_index); return -EINVAL; } for (i = 0; i < req->filter_spec_list_len; i++) { if ((req->filter_spec_list[i].ip_type != QMI_IPA_IP_TYPE_V4_V01) && (req->filter_spec_list[i].ip_type != QMI_IPA_IP_TYPE_V6_V01)) return -EINVAL; if (req->filter_spec_list[i].is_mux_id_valid == false) return -EINVAL; if (req->filter_spec_list[i].is_routing_table_index_valid == false) return -EINVAL; if ((req->filter_spec_list[i].filter_action <= QMI_IPA_FILTER_ACTION_INVALID_V01) && (req->filter_spec_list[i].filter_action > QMI_IPA_FILTER_ACTION_EXCEPTION_V01)) return -EINVAL; } mutex_lock(&ipa3_qmi_lock); if (ipa3_qmi_ctx != NULL) { /* cache the qmi_filter_request */ Loading Loading @@ -653,6 +687,7 @@ int ipa3_qmi_filter_request_ex_send( struct ipa_install_fltr_rule_resp_ex_msg_v01 resp; struct msg_desc req_desc, resp_desc; int rc; int i; /* check if the filter rules from IPACM is valid */ if (req->filter_spec_ex_list_len == 0) { Loading @@ -662,6 +697,34 @@ int ipa3_qmi_filter_request_ex_send( req->filter_spec_ex_list_len); } if (req->filter_spec_ex_list_len >= QMI_IPA_MAX_FILTERS_EX_V01) { IPAWANDBG( "IPACM pass the number of filtering rules exceed limit\n"); return -EINVAL; } else if (req->source_pipe_index_valid != 0) { IPAWANDBG( "IPACM passes source_pipe_index_valid not zero 0 != %d\n", req->source_pipe_index_valid); return -EINVAL; } for (i = 0; i < req->filter_spec_ex_list_len-1; i++) { if ((req->filter_spec_ex_list[i].ip_type != QMI_IPA_IP_TYPE_V4_V01) && (req->filter_spec_ex_list[i].ip_type != QMI_IPA_IP_TYPE_V6_V01)) return -EINVAL; if (req->filter_spec_ex_list[i].is_mux_id_valid == false) return -EINVAL; if (req->filter_spec_ex_list[i].is_routing_table_index_valid == false) return -EINVAL; if ((req->filter_spec_ex_list[i].filter_action <= QMI_IPA_FILTER_ACTION_INVALID_V01) && (req->filter_spec_ex_list[i].filter_action > QMI_IPA_FILTER_ACTION_EXCEPTION_V01)) return -EINVAL; } mutex_lock(&ipa3_qmi_lock); if (ipa3_qmi_ctx != NULL) { /* cache the qmi_filter_request */ Loading Loading @@ -807,6 +870,32 @@ int ipa3_qmi_filter_notify_send( return -EINVAL; } if (req->install_status != IPA_QMI_RESULT_SUCCESS_V01) { IPAWANERR(" UL filter rule for pipe %d install_status = %d\n", req->source_pipe_index, req->install_status); return -EINVAL; } else if (req->rule_id_valid != 1) { IPAWANERR(" UL filter rule for pipe %d rule_id_valid = %d\n", req->source_pipe_index, req->rule_id_valid); return -EINVAL; } else if (req->source_pipe_index >= ipa3_ctx->ipa_num_pipes) { IPAWANDBG( "IPACM passes source pipe index not valid ID = %d\n", req->source_pipe_index); return -EINVAL; } else if (((req->embedded_pipe_index_valid != true) || (req->embedded_call_mux_id_valid != true)) && ((req->embedded_pipe_index_valid != false) || (req->embedded_call_mux_id_valid != false))) { IPAWANERR( "IPACM passes embedded pipe and mux valid not valid\n"); return -EINVAL; } else if (req->embedded_pipe_index >= ipa3_ctx->ipa_num_pipes) { IPAWANERR("IPACM passes source pipe index not valid ID = %d\n", req->source_pipe_index); return -EINVAL; } if (req->source_pipe_index == -1) { IPAWANERR("Source pipe index invalid\n"); return -EINVAL; Loading