Loading drivers/platform/msm/ipa/ipa_v3/rmnet_ipa.c +30 −7 Original line number Original line Diff line number Diff line Loading @@ -467,12 +467,19 @@ static void ipa3_del_dflt_wan_rt_tables(void) static void ipa3_copy_qmi_flt_rule_ex( static void ipa3_copy_qmi_flt_rule_ex( struct ipa_ioc_ext_intf_prop *q6_ul_flt_rule_ptr, struct ipa_ioc_ext_intf_prop *q6_ul_flt_rule_ptr, struct ipa_filter_spec_ex_type_v01 *flt_spec_ptr) void *flt_spec_ptr_void) { { int j; int j; struct ipa_filter_spec_ex_type_v01 *flt_spec_ptr; struct ipa_ipfltr_range_eq_16 *q6_ul_filter_nat_ptr; struct ipa_ipfltr_range_eq_16 *q6_ul_filter_nat_ptr; struct ipa_ipfltr_range_eq_16_type_v01 *filter_spec_nat_ptr; struct ipa_ipfltr_range_eq_16_type_v01 *filter_spec_nat_ptr; /* * pure_ack and tos has the same size and type and we will treat tos * field as pure_ack in ipa4.5 version */ flt_spec_ptr = (struct ipa_filter_spec_ex_type_v01 *) flt_spec_ptr_void; q6_ul_flt_rule_ptr->ip = flt_spec_ptr->ip_type; q6_ul_flt_rule_ptr->ip = flt_spec_ptr->ip_type; q6_ul_flt_rule_ptr->action = flt_spec_ptr->filter_action; q6_ul_flt_rule_ptr->action = flt_spec_ptr->filter_action; if (flt_spec_ptr->is_routing_table_index_valid == true) if (flt_spec_ptr->is_routing_table_index_valid == true) Loading Loading @@ -584,7 +591,6 @@ static void ipa3_copy_qmi_flt_rule_ex( flt_spec_ptr->filter_rule.ipv4_frag_eq_present; flt_spec_ptr->filter_rule.ipv4_frag_eq_present; } } int ipa3_copy_ul_filter_rule_to_ipa(struct ipa_install_fltr_rule_req_msg_v01 int ipa3_copy_ul_filter_rule_to_ipa(struct ipa_install_fltr_rule_req_msg_v01 *rule_req) *rule_req) { { Loading @@ -592,13 +598,24 @@ int ipa3_copy_ul_filter_rule_to_ipa(struct ipa_install_fltr_rule_req_msg_v01 /* prevent multi-threads accessing rmnet_ipa3_ctx->num_q6_rules */ /* prevent multi-threads accessing rmnet_ipa3_ctx->num_q6_rules */ mutex_lock(&rmnet_ipa3_ctx->add_mux_channel_lock); mutex_lock(&rmnet_ipa3_ctx->add_mux_channel_lock); if (rule_req->filter_spec_ex_list_valid == true) { if (rule_req->filter_spec_ex_list_valid == true && rule_req->filter_spec_ex2_list_valid == false) { rmnet_ipa3_ctx->num_q6_rules = rmnet_ipa3_ctx->num_q6_rules = rule_req->filter_spec_ex_list_len; rule_req->filter_spec_ex_list_len; IPAWANDBG("Received (%d) install_flt_req\n", IPAWANDBG("Received (%d) install_flt_req_ex_list\n", rmnet_ipa3_ctx->num_q6_rules); } else if (rule_req->filter_spec_ex2_list_valid == true && rule_req->filter_spec_ex_list_valid == false) { rmnet_ipa3_ctx->num_q6_rules = rule_req->filter_spec_ex2_list_len; IPAWANDBG("Received (%d) install_flt_req_ex2_list\n", rmnet_ipa3_ctx->num_q6_rules); rmnet_ipa3_ctx->num_q6_rules); } else { } else { rmnet_ipa3_ctx->num_q6_rules = 0; rmnet_ipa3_ctx->num_q6_rules = 0; if (rule_req->filter_spec_ex2_list_valid == true) IPAWANERR( "both ex and ex2 flt rules are set to valid\n"); else IPAWANERR("got no UL rules from modem\n"); IPAWANERR("got no UL rules from modem\n"); mutex_unlock( mutex_unlock( &rmnet_ipa3_ctx->add_mux_channel_lock); &rmnet_ipa3_ctx->add_mux_channel_lock); Loading @@ -615,8 +632,14 @@ int ipa3_copy_ul_filter_rule_to_ipa(struct ipa_install_fltr_rule_req_msg_v01 rmnet_ipa3_ctx->num_q6_rules); rmnet_ipa3_ctx->num_q6_rules); goto failure; goto failure; } } ipa3_copy_qmi_flt_rule_ex(&ipa3_qmi_ctx->q6_ul_filter_rule[i], if (rule_req->filter_spec_ex_list_valid == true) ipa3_copy_qmi_flt_rule_ex( &ipa3_qmi_ctx->q6_ul_filter_rule[i], &rule_req->filter_spec_ex_list[i]); &rule_req->filter_spec_ex_list[i]); else if (rule_req->filter_spec_ex2_list_valid == true) ipa3_copy_qmi_flt_rule_ex( &ipa3_qmi_ctx->q6_ul_filter_rule[i], &rule_req->filter_spec_ex2_list[i]); } } if (rule_req->xlat_filter_indices_list_valid) { if (rule_req->xlat_filter_indices_list_valid) { Loading Loading
drivers/platform/msm/ipa/ipa_v3/rmnet_ipa.c +30 −7 Original line number Original line Diff line number Diff line Loading @@ -467,12 +467,19 @@ static void ipa3_del_dflt_wan_rt_tables(void) static void ipa3_copy_qmi_flt_rule_ex( static void ipa3_copy_qmi_flt_rule_ex( struct ipa_ioc_ext_intf_prop *q6_ul_flt_rule_ptr, struct ipa_ioc_ext_intf_prop *q6_ul_flt_rule_ptr, struct ipa_filter_spec_ex_type_v01 *flt_spec_ptr) void *flt_spec_ptr_void) { { int j; int j; struct ipa_filter_spec_ex_type_v01 *flt_spec_ptr; struct ipa_ipfltr_range_eq_16 *q6_ul_filter_nat_ptr; struct ipa_ipfltr_range_eq_16 *q6_ul_filter_nat_ptr; struct ipa_ipfltr_range_eq_16_type_v01 *filter_spec_nat_ptr; struct ipa_ipfltr_range_eq_16_type_v01 *filter_spec_nat_ptr; /* * pure_ack and tos has the same size and type and we will treat tos * field as pure_ack in ipa4.5 version */ flt_spec_ptr = (struct ipa_filter_spec_ex_type_v01 *) flt_spec_ptr_void; q6_ul_flt_rule_ptr->ip = flt_spec_ptr->ip_type; q6_ul_flt_rule_ptr->ip = flt_spec_ptr->ip_type; q6_ul_flt_rule_ptr->action = flt_spec_ptr->filter_action; q6_ul_flt_rule_ptr->action = flt_spec_ptr->filter_action; if (flt_spec_ptr->is_routing_table_index_valid == true) if (flt_spec_ptr->is_routing_table_index_valid == true) Loading Loading @@ -584,7 +591,6 @@ static void ipa3_copy_qmi_flt_rule_ex( flt_spec_ptr->filter_rule.ipv4_frag_eq_present; flt_spec_ptr->filter_rule.ipv4_frag_eq_present; } } int ipa3_copy_ul_filter_rule_to_ipa(struct ipa_install_fltr_rule_req_msg_v01 int ipa3_copy_ul_filter_rule_to_ipa(struct ipa_install_fltr_rule_req_msg_v01 *rule_req) *rule_req) { { Loading @@ -592,13 +598,24 @@ int ipa3_copy_ul_filter_rule_to_ipa(struct ipa_install_fltr_rule_req_msg_v01 /* prevent multi-threads accessing rmnet_ipa3_ctx->num_q6_rules */ /* prevent multi-threads accessing rmnet_ipa3_ctx->num_q6_rules */ mutex_lock(&rmnet_ipa3_ctx->add_mux_channel_lock); mutex_lock(&rmnet_ipa3_ctx->add_mux_channel_lock); if (rule_req->filter_spec_ex_list_valid == true) { if (rule_req->filter_spec_ex_list_valid == true && rule_req->filter_spec_ex2_list_valid == false) { rmnet_ipa3_ctx->num_q6_rules = rmnet_ipa3_ctx->num_q6_rules = rule_req->filter_spec_ex_list_len; rule_req->filter_spec_ex_list_len; IPAWANDBG("Received (%d) install_flt_req\n", IPAWANDBG("Received (%d) install_flt_req_ex_list\n", rmnet_ipa3_ctx->num_q6_rules); } else if (rule_req->filter_spec_ex2_list_valid == true && rule_req->filter_spec_ex_list_valid == false) { rmnet_ipa3_ctx->num_q6_rules = rule_req->filter_spec_ex2_list_len; IPAWANDBG("Received (%d) install_flt_req_ex2_list\n", rmnet_ipa3_ctx->num_q6_rules); rmnet_ipa3_ctx->num_q6_rules); } else { } else { rmnet_ipa3_ctx->num_q6_rules = 0; rmnet_ipa3_ctx->num_q6_rules = 0; if (rule_req->filter_spec_ex2_list_valid == true) IPAWANERR( "both ex and ex2 flt rules are set to valid\n"); else IPAWANERR("got no UL rules from modem\n"); IPAWANERR("got no UL rules from modem\n"); mutex_unlock( mutex_unlock( &rmnet_ipa3_ctx->add_mux_channel_lock); &rmnet_ipa3_ctx->add_mux_channel_lock); Loading @@ -615,8 +632,14 @@ int ipa3_copy_ul_filter_rule_to_ipa(struct ipa_install_fltr_rule_req_msg_v01 rmnet_ipa3_ctx->num_q6_rules); rmnet_ipa3_ctx->num_q6_rules); goto failure; goto failure; } } ipa3_copy_qmi_flt_rule_ex(&ipa3_qmi_ctx->q6_ul_filter_rule[i], if (rule_req->filter_spec_ex_list_valid == true) ipa3_copy_qmi_flt_rule_ex( &ipa3_qmi_ctx->q6_ul_filter_rule[i], &rule_req->filter_spec_ex_list[i]); &rule_req->filter_spec_ex_list[i]); else if (rule_req->filter_spec_ex2_list_valid == true) ipa3_copy_qmi_flt_rule_ex( &ipa3_qmi_ctx->q6_ul_filter_rule[i], &rule_req->filter_spec_ex2_list[i]); } } if (rule_req->xlat_filter_indices_list_valid) { if (rule_req->xlat_filter_indices_list_valid) { Loading