Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e415ce16 authored by qctecmdr Service's avatar qctecmdr Service Committed by Gerrit - the friendly Code Review server
Browse files

Merge "msm: ipa4: Use new QMI filter length if new filter rule is valid"

parents 45d10552 79b9d1f8
Loading
Loading
Loading
Loading
+30 −7
Original line number Original line Diff line number Diff line
@@ -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)
@@ -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)
{
{
@@ -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);
@@ -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) {