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

Commit 12e0ac06 authored by Mohammed Javid's avatar Mohammed Javid
Browse files

msm: ipa: QMI update for firwall config



QMI struct update to support firewall
config.

Change-Id: I55f80d24670ec3062bd8d83834f2b302177119c5
Signed-off-by: default avatarMohammed Javid <mjavid@codeaurora.org>
parent db92782e
Loading
Loading
Loading
Loading
+15 −3
Original line number Diff line number Diff line
@@ -1324,13 +1324,25 @@ int ipa3_qmi_filter_notify_send(
		return -EINVAL;
	}

	if (req->rule_id_ex_len == 0) {
		IPAWANDBG(" delete UL filter rule for pipe %d\n",
		req->source_pipe_index);
	} else if (req->rule_id_ex_len > QMI_IPA_MAX_FILTERS_EX2_V01) {
		IPAWANERR(" UL filter rule for pipe %d exceed max (%u)\n",
		req->source_pipe_index,
		req->rule_id_ex_len);
		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);
	} else if ((req->rule_id_valid != 1) &&
		(req->rule_id_ex_valid != 1)) {
		IPAWANERR(" UL filter rule for pipe %d rule_id_valid = %d/%d\n",
			req->source_pipe_index, req->rule_id_valid,
			req->rule_id_ex_valid);
		return -EINVAL;
	} else if (req->source_pipe_index >= ipa3_ctx->ipa_num_pipes) {
		IPAWANDBG(
+3 −0
Original line number Diff line number Diff line
@@ -109,6 +109,9 @@ struct ipa3_qmi_context {
	int num_ipa_offload_connection;
	struct ipa_offload_connection_val
		ipa_offload_cache[QMI_IPA_MAX_FILTERS_V01];
	uint8_t ul_firewall_indices_list_valid;
	uint32_t ul_firewall_indices_list_len;
	uint32_t ul_firewall_indices_list[QMI_IPA_MAX_FILTERS_V01];
};

struct ipa3_rmnet_mux_val {
+1 −1
Original line number Diff line number Diff line
@@ -2306,7 +2306,7 @@ struct qmi_elem_info ipa3_fltr_installed_notif_req_msg_data_v01_ei[] = {
	{
		.data_type	= QMI_DATA_LEN,
		.elem_len	= 1,
		.elem_size	= sizeof(uint8_t),
		.elem_size	= sizeof(uint32_t),
		.array_type	= NO_ARRAY,
		.tlv_type	= 0x19,
		.offset		= offsetof(
+35 −0
Original line number Diff line number Diff line
@@ -679,6 +679,41 @@ int ipa3_copy_ul_filter_rule_to_ipa(struct ipa_install_fltr_rule_req_msg_v01
			}
		}
	}

	if (rule_req->ul_firewall_indices_list_valid) {
		IPAWANDBG("Receive ul_firewall_indices_list_len = (%d)",
			rule_req->ul_firewall_indices_list_len);

		if (rule_req->ul_firewall_indices_list_len >
			rmnet_ipa3_ctx->num_q6_rules) {
			IPAWANERR("UL rule indices are not valid: (%d/%d)\n",
					rule_req->xlat_filter_indices_list_len,
					rmnet_ipa3_ctx->num_q6_rules);
			goto failure;
		}

		ipa3_qmi_ctx->ul_firewall_indices_list_valid = 1;
		ipa3_qmi_ctx->ul_firewall_indices_list_len =
			rule_req->ul_firewall_indices_list_len;

		for (i = 0; i < rule_req->ul_firewall_indices_list_len; i++) {
			ipa3_qmi_ctx->ul_firewall_indices_list[i] =
				rule_req->ul_firewall_indices_list[i];
		}

		for (i = 0; i < rule_req->ul_firewall_indices_list_len; i++) {
			if (rule_req->ul_firewall_indices_list[i]
				>= rmnet_ipa3_ctx->num_q6_rules) {
				IPAWANERR("UL rule idx is wrong: %d\n",
					rule_req->ul_firewall_indices_list[i]);
				goto failure;
			} else {
				ipa3_qmi_ctx->q6_ul_filter_rule
				[rule_req->ul_firewall_indices_list[i]]
				.replicate_needed = 1;
			}
		}
	}
	goto success;

failure:
+2 −0
Original line number Diff line number Diff line
@@ -1988,6 +1988,8 @@ struct ipa_ioc_ext_intf_prop {
	uint8_t is_xlat_rule;
	uint32_t rule_id;
	uint8_t is_rule_hashable;
#define IPA_V6_UL_WL_FIREWALL_HANDLE
	uint8_t replicate_needed;
};

/**