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

Commit 5f85cd84 authored by Linux Build Service Account's avatar Linux Build Service Account Committed by Gerrit - the friendly Code Review server
Browse files

Merge "msm: ipa3: increase modem rt table"

parents 33a50508 2b63563c
Loading
Loading
Loading
Loading
+17 −9
Original line number Diff line number Diff line
@@ -603,7 +603,7 @@ static int wwan_add_ul_flt_rule_to_ipa(void)
	int num_v4_rule = 0, num_v6_rule = 0;
	struct ipa_ioc_add_flt_rule *param;
	struct ipa_flt_rule_add flt_rule_entry;
	struct ipa_fltr_installed_notif_req_msg_v01 req;
	struct ipa_fltr_installed_notif_req_msg_v01 *req;

	pyld_sz = sizeof(struct ipa_ioc_add_flt_rule) +
	   sizeof(struct ipa_flt_rule_add);
@@ -611,6 +611,14 @@ static int wwan_add_ul_flt_rule_to_ipa(void)
	if (!param)
		return -ENOMEM;

	req = (struct ipa_fltr_installed_notif_req_msg_v01 *)
		kzalloc(sizeof(struct ipa_fltr_installed_notif_req_msg_v01),
			GFP_KERNEL);
	if (!req) {
		kfree(param);
		return -ENOMEM;
	}

	param->commit = 1;
	param->ep = IPA_CLIENT_APPS_LAN_WAN_PROD;
	param->global = false;
@@ -646,23 +654,22 @@ static int wwan_add_ul_flt_rule_to_ipa(void)
	}

	/* send ipa_fltr_installed_notif_req_msg_v01 to Q6*/
	memset(&req, 0, sizeof(struct ipa_fltr_installed_notif_req_msg_v01));
	req.source_pipe_index =
	req->source_pipe_index =
		ipa2_get_ep_mapping(IPA_CLIENT_APPS_LAN_WAN_PROD);
	req.install_status = QMI_RESULT_SUCCESS_V01;
	req.filter_index_list_len = num_q6_rule;
	req->install_status = QMI_RESULT_SUCCESS_V01;
	req->filter_index_list_len = num_q6_rule;
	for (i = 0; i < num_q6_rule; i++) {
		if (ipa_qmi_ctx->q6_ul_filter_rule[i].ip == IPA_IP_v4) {
			req.filter_index_list[i].filter_index = num_v4_rule;
			req->filter_index_list[i].filter_index = num_v4_rule;
			num_v4_rule++;
		} else {
			req.filter_index_list[i].filter_index = num_v6_rule;
			req->filter_index_list[i].filter_index = num_v6_rule;
			num_v6_rule++;
		}
		req.filter_index_list[i].filter_handle =
		req->filter_index_list[i].filter_handle =
			ipa_qmi_ctx->q6_ul_filter_rule[i].filter_hdl;
	}
	if (qmi_filter_notify_send(&req)) {
	if (qmi_filter_notify_send(req)) {
		IPAWANDBG("add filter rule index on A7-RX failed\n");
		retval = -EFAULT;
	}
@@ -670,6 +677,7 @@ static int wwan_add_ul_flt_rule_to_ipa(void)
	IPAWANDBG("add (%d) filter rule index on A7-RX\n",
			old_num_q6_rule);
	kfree(param);
	kfree(req);
	return retval;
}

+77 −29
Original line number Diff line number Diff line
@@ -51,6 +51,7 @@ static bool is_load_uc;
static uint32_t ipa_wan_platform;
struct ipa3_qmi_context *ipa3_qmi_ctx;
static bool workqueues_stopped;
static bool ipa3_modem_init_cmplt;

/* QMI A5 service */

@@ -70,17 +71,17 @@ static struct msg_desc ipa3_master_driver_complete_indication_desc = {
	.ei_array = ipa3_master_driver_init_complt_ind_msg_data_v01_ei,
};
static struct msg_desc ipa3_install_fltr_rule_req_desc = {
	.max_msg_len = QMI3_IPA_INSTALL_FILTER_RULE_REQ_MAX_MSG_LEN_V01,
	.max_msg_len = QMI_IPA_INSTALL_FILTER_RULE_REQ_MAX_MSG_LEN_V01,
	.msg_id = QMI_IPA_INSTALL_FILTER_RULE_REQ_V01,
	.ei_array = ipa3_install_fltr_rule_req_msg_data_v01_ei,
};
static struct msg_desc ipa3_install_fltr_rule_resp_desc = {
	.max_msg_len = QMI3_IPA_INSTALL_FILTER_RULE_RESP_MAX_MSG_LEN_V01,
	.max_msg_len = QMI_IPA_INSTALL_FILTER_RULE_RESP_MAX_MSG_LEN_V01,
	.msg_id = QMI_IPA_INSTALL_FILTER_RULE_RESP_V01,
	.ei_array = ipa3_install_fltr_rule_resp_msg_data_v01_ei,
};
static struct msg_desc ipa3_filter_installed_notif_req_desc = {
	.max_msg_len = QMI3_IPA_FILTER_INSTALLED_NOTIF_REQ_MAX_MSG_LEN_V01,
	.max_msg_len = QMI_IPA_FILTER_INSTALLED_NOTIF_REQ_MAX_MSG_LEN_V01,
	.msg_id = QMI_IPA_FILTER_INSTALLED_NOTIF_REQ_V01,
	.ei_array = ipa3_fltr_installed_notif_req_msg_data_v01_ei,
};
@@ -100,6 +101,18 @@ static struct msg_desc ipa3_config_resp_desc = {
	.ei_array = ipa3_config_resp_msg_data_v01_ei,
};

static struct msg_desc ipa3_init_modem_driver_cmplt_req_desc = {
	.max_msg_len = QMI_IPA_INIT_MODEM_DRIVER_CMPLT_REQ_MAX_MSG_LEN_V01,
	.msg_id = QMI_IPA_INIT_MODEM_DRIVER_CMPLT_REQ_V01,
	.ei_array = ipa3_init_modem_driver_cmplt_req_msg_data_v01_ei,
};

static struct msg_desc ipa3_init_modem_driver_cmplt_resp_desc = {
	.max_msg_len = QMI_IPA_INIT_MODEM_DRIVER_CMPLT_RESP_MAX_MSG_LEN_V01,
	.msg_id = QMI_IPA_INIT_MODEM_DRIVER_CMPLT_RESP_V01,
	.ei_array = ipa3_init_modem_driver_cmplt_resp_msg_data_v01_ei,
};

static int ipa3_handle_indication_req(void *req_h, void *req)
{
	struct ipa_indication_reg_req_msg_v01 *indication_req;
@@ -136,41 +149,43 @@ static int ipa3_handle_indication_req(void *req_h, void *req)

static int ipa3_handle_install_filter_rule_req(void *req_h, void *req)
{
	struct ipa3_install_fltr_rule_req_msg_v01 *rule_req;
	struct ipa3_install_fltr_rule_resp_msg_v01 resp;
	struct ipa_install_fltr_rule_req_msg_v01 *rule_req;
	struct ipa_install_fltr_rule_resp_msg_v01 resp;
	uint32_t rule_hdl[MAX_NUM_Q6_RULE];
	int rc = 0, i;

	rule_req = (struct ipa3_install_fltr_rule_req_msg_v01 *)req;
	rule_req = (struct ipa_install_fltr_rule_req_msg_v01 *)req;
	memset(rule_hdl, 0, sizeof(rule_hdl));
	memset(&resp, 0, sizeof(struct ipa3_install_fltr_rule_resp_msg_v01));
	memset(&resp, 0, sizeof(struct ipa_install_fltr_rule_resp_msg_v01));
	IPAWANDBG("Received install filter Request\n");

	rc = ipa3_copy_ul_filter_rule_to_ipa((struct
		ipa3_install_fltr_rule_req_msg_v01*)req);
		ipa_install_fltr_rule_req_msg_v01*)req);
	if (rc)
		IPAWANERR("copy UL rules from modem is failed\n");

	resp.resp.result = IPA_QMI_RESULT_SUCCESS_V01;
	if (rule_req->filter_spec_list_valid == true) {
		if (rule_req->filter_spec_list_len > MAX_NUM_Q6_RULE) {
	if (rule_req->filter_spec_ex_list_valid == true) {
		resp.rule_id_valid = 1;
		if (rule_req->filter_spec_ex_list_len > MAX_NUM_Q6_RULE) {
			resp.rule_id_len = MAX_NUM_Q6_RULE;
			IPAWANERR("installed (%d) max Q6-UL rules ",
			MAX_NUM_Q6_RULE);
			IPAWANERR("but modem gives total (%d)\n",
			rule_req->filter_spec_list_len);
			rule_req->filter_spec_ex_list_len);
		} else {
			resp.rule_id_len =
				rule_req->filter_spec_list_len;
				rule_req->filter_spec_ex_list_len;
		}
	} else {
		resp.rule_id_valid = 0;
		resp.rule_id_len = 0;
	}

	/* construct UL filter rules response to Modem*/
	for (i = 0; i < resp.rule_id_len; i++) {
		resp.rule_id[i] =
			rule_req->filter_spec_list[i].rule_id;
			rule_req->filter_spec_ex_list[i].rule_id;
	}

	rc = qmi_send_resp_from_cb(ipa3_svc_handle, curr_conn, req_h,
@@ -218,6 +233,32 @@ static int handle_ipa_config_req(void *req_h, void *req)
	return rc;
}

static int ipa3_handle_modem_init_cmplt_req(void *req_h, void *req)
{
	struct ipa_init_modem_driver_cmplt_req_msg_v01 *cmplt_req;
	struct ipa_init_modem_driver_cmplt_resp_msg_v01 resp;
	int rc;

	IPAWANDBG("Received QMI_IPA_INIT_MODEM_DRIVER_CMPLT_REQ_V01\n");
	BUG_ON(ipa3_qmi_modem_init_fin == false);
	cmplt_req = (struct ipa_init_modem_driver_cmplt_req_msg_v01 *)req;

	if (ipa3_modem_init_cmplt == false) {
		ipa3_modem_init_cmplt = true;
		ipa3_uc_load_notify();
	}

	memset(&resp, 0, sizeof(resp));
	resp.resp.result = IPA_QMI_RESULT_SUCCESS_V01;

	rc = qmi_send_resp_from_cb(ipa3_svc_handle, curr_conn, req_h,
			&ipa3_init_modem_driver_cmplt_resp_desc,
			&resp, sizeof(resp));

	IPAWANDBG("Sent QMI_IPA_INIT_MODEM_DRIVER_CMPLT_RESP_V01\n");
	return rc;
}

static int ipa3_a5_svc_connect_cb(struct qmi_handle *handle,
			       void *conn_h)
{
@@ -255,16 +296,20 @@ static int ipa3_a5_svc_req_desc_cb(unsigned int msg_id,

	case QMI_IPA_INSTALL_FILTER_RULE_REQ_V01:
		*req_desc = &ipa3_install_fltr_rule_req_desc;
		rc = sizeof(struct ipa3_install_fltr_rule_req_msg_v01);
		rc = sizeof(struct ipa_install_fltr_rule_req_msg_v01);
		break;
	case QMI_IPA_FILTER_INSTALLED_NOTIF_REQ_V01:
		*req_desc = &ipa3_filter_installed_notif_req_desc;
		rc = sizeof(struct ipa3_fltr_installed_notif_req_msg_v01);
		rc = sizeof(struct ipa_fltr_installed_notif_req_msg_v01);
		break;
	case QMI_IPA_CONFIG_REQ_V01:
		*req_desc = &ipa3_config_req_desc;
		rc = sizeof(struct ipa_config_req_msg_v01);
		break;
	case QMI_IPA_INIT_MODEM_DRIVER_CMPLT_REQ_V01:
		*req_desc = &ipa3_init_modem_driver_cmplt_req_desc;
		rc = sizeof(struct ipa_init_modem_driver_cmplt_req_msg_v01);
		break;
	default:
		rc = -ENOTSUPP;
		break;
@@ -294,6 +339,9 @@ static int ipa3_a5_svc_req_cb(struct qmi_handle *handle, void *conn_h,
	case QMI_IPA_CONFIG_REQ_V01:
		rc = handle_ipa_config_req(req_h, req);
		break;
	case QMI_IPA_INIT_MODEM_DRIVER_CMPLT_REQ_V01:
		rc = ipa3_handle_modem_init_cmplt_req(req_h, req);
		break;
	default:
		rc = -ENOTSUPP;
		break;
@@ -386,13 +434,13 @@ static int ipa3_check_qmi_response(int rc,

static int ipa3_qmi_init_modem_send_sync_msg(void)
{
	struct ipa3_init_modem_driver_req_msg_v01 req;
	struct ipa_init_modem_driver_req_msg_v01 req;
	struct ipa_init_modem_driver_resp_msg_v01 resp;
	struct msg_desc req_desc, resp_desc;
	int rc;
	u16 smem_restr_bytes = ipa3_get_smem_restr_bytes();

	memset(&req, 0, sizeof(struct ipa3_init_modem_driver_req_msg_v01));
	memset(&req, 0, sizeof(struct ipa_init_modem_driver_req_msg_v01));
	memset(&resp, 0, sizeof(struct ipa_init_modem_driver_resp_msg_v01));

	req.platform_type_valid = true;
@@ -514,7 +562,7 @@ static int ipa3_qmi_init_modem_send_sync_msg(void)
	IPAWANDBG("v6_hash_filter_tbl_start_addr %d\n",
		req.v6_hash_filter_tbl_start_addr);

	req_desc.max_msg_len = QMI3_IPA_INIT_MODEM_DRIVER_REQ_MAX_MSG_LEN_V01;
	req_desc.max_msg_len = QMI_IPA_INIT_MODEM_DRIVER_REQ_MAX_MSG_LEN_V01;
	req_desc.msg_id = QMI_IPA_INIT_MODEM_DRIVER_REQ_V01;
	req_desc.ei_array = ipa3_init_modem_driver_req_msg_data_v01_ei;

@@ -533,9 +581,9 @@ static int ipa3_qmi_init_modem_send_sync_msg(void)
}

/* sending filter-install-request to modem*/
int ipa3_qmi_filter_request_send(struct ipa3_install_fltr_rule_req_msg_v01 *req)
int ipa3_qmi_filter_request_send(struct ipa_install_fltr_rule_req_msg_v01 *req)
{
	struct ipa3_install_fltr_rule_resp_msg_v01 resp;
	struct ipa_install_fltr_rule_resp_msg_v01 resp;
	struct msg_desc req_desc, resp_desc;
	int rc;

@@ -550,23 +598,23 @@ int ipa3_qmi_filter_request_send(struct ipa3_install_fltr_rule_req_msg_v01 *req)
	/* cache the qmi_filter_request */
	memcpy(&(ipa3_qmi_ctx->ipa_install_fltr_rule_req_msg_cache[
		ipa3_qmi_ctx->num_ipa_install_fltr_rule_req_msg]),
			req, sizeof(struct ipa3_install_fltr_rule_req_msg_v01));
			req, sizeof(struct ipa_install_fltr_rule_req_msg_v01));
	ipa3_qmi_ctx->num_ipa_install_fltr_rule_req_msg++;
	ipa3_qmi_ctx->num_ipa_install_fltr_rule_req_msg %= 10;

	req_desc.max_msg_len = QMI3_IPA_INSTALL_FILTER_RULE_REQ_MAX_MSG_LEN_V01;
	req_desc.max_msg_len = QMI_IPA_INSTALL_FILTER_RULE_REQ_MAX_MSG_LEN_V01;
	req_desc.msg_id = QMI_IPA_INSTALL_FILTER_RULE_REQ_V01;
	req_desc.ei_array = ipa3_install_fltr_rule_req_msg_data_v01_ei;

	memset(&resp, 0, sizeof(struct ipa3_install_fltr_rule_resp_msg_v01));
	memset(&resp, 0, sizeof(struct ipa_install_fltr_rule_resp_msg_v01));
	resp_desc.max_msg_len =
		QMI3_IPA_INSTALL_FILTER_RULE_RESP_MAX_MSG_LEN_V01;
		QMI_IPA_INSTALL_FILTER_RULE_RESP_MAX_MSG_LEN_V01;
	resp_desc.msg_id = QMI_IPA_INSTALL_FILTER_RULE_RESP_V01;
	resp_desc.ei_array = ipa3_install_fltr_rule_resp_msg_data_v01_ei;

	rc = qmi_send_req_wait(ipa_q6_clnt, &req_desc,
			req,
			sizeof(struct ipa3_install_fltr_rule_req_msg_v01),
			sizeof(struct ipa_install_fltr_rule_req_msg_v01),
			&resp_desc, &resp, sizeof(resp),
			QMI_SEND_REQ_TIMEOUT_MS);
	return ipa3_check_qmi_response(rc,
@@ -665,7 +713,7 @@ int ipa3_qmi_disable_force_clear_datapath_send(

/* sending filter-installed-notify-request to modem*/
int ipa3_qmi_filter_notify_send(
		struct ipa3_fltr_installed_notif_req_msg_v01 *req)
		struct ipa_fltr_installed_notif_req_msg_v01 *req)
{
	struct ipa_fltr_installed_notif_resp_msg_v01 resp;
	struct msg_desc req_desc, resp_desc;
@@ -681,12 +729,12 @@ int ipa3_qmi_filter_notify_send(
	/* cache the qmi_filter_request */
	memcpy(&(ipa3_qmi_ctx->ipa_fltr_installed_notif_req_msg_cache[
		ipa3_qmi_ctx->num_ipa_fltr_installed_notif_req_msg]),
		req, sizeof(struct ipa3_fltr_installed_notif_req_msg_v01));
		req, sizeof(struct ipa_fltr_installed_notif_req_msg_v01));
	ipa3_qmi_ctx->num_ipa_fltr_installed_notif_req_msg++;
	ipa3_qmi_ctx->num_ipa_fltr_installed_notif_req_msg %= 10;

	req_desc.max_msg_len =
	QMI3_IPA_FILTER_INSTALLED_NOTIF_REQ_MAX_MSG_LEN_V01;
	QMI_IPA_FILTER_INSTALLED_NOTIF_REQ_MAX_MSG_LEN_V01;
	req_desc.msg_id = QMI_IPA_FILTER_INSTALLED_NOTIF_REQ_V01;
	req_desc.ei_array = ipa3_fltr_installed_notif_req_msg_data_v01_ei;

@@ -699,7 +747,7 @@ int ipa3_qmi_filter_notify_send(
	rc = qmi_send_req_wait(ipa_q6_clnt,
			&req_desc,
			req,
			sizeof(struct ipa3_fltr_installed_notif_req_msg_v01),
			sizeof(struct ipa_fltr_installed_notif_req_msg_v01),
			&resp_desc, &resp, sizeof(resp),
			QMI_SEND_REQ_TIMEOUT_MS);
	return ipa3_check_qmi_response(rc,
+10 −8
Original line number Diff line number Diff line
@@ -41,10 +41,10 @@ struct ipa3_qmi_context {
struct ipa_ioc_ext_intf_prop q6_ul_filter_rule[MAX_NUM_Q6_RULE];
u32 q6_ul_filter_rule_hdl[MAX_NUM_Q6_RULE];
int num_ipa_install_fltr_rule_req_msg;
struct ipa3_install_fltr_rule_req_msg_v01
struct ipa_install_fltr_rule_req_msg_v01
		ipa_install_fltr_rule_req_msg_cache[MAX_NUM_QMI_RULE_CACHE];
int num_ipa_fltr_installed_notif_req_msg;
struct ipa3_fltr_installed_notif_req_msg_v01
struct ipa_fltr_installed_notif_req_msg_v01
		ipa_fltr_installed_notif_req_msg_cache[MAX_NUM_QMI_RULE_CACHE];
bool modem_cfg_emb_pipe_flt;
};
@@ -83,6 +83,8 @@ extern struct elem_info ipa3_set_data_usage_quota_resp_msg_data_v01_ei[];
extern struct elem_info ipa3_data_usage_quota_reached_ind_msg_data_v01_ei[];
extern struct elem_info ipa3_stop_data_usage_quota_req_msg_data_v01_ei[];
extern struct elem_info ipa3_stop_data_usage_quota_resp_msg_data_v01_ei[];
extern struct elem_info ipa3_init_modem_driver_cmplt_req_msg_data_v01_ei[];
extern struct elem_info ipa3_init_modem_driver_cmplt_resp_msg_data_v01_ei[];

/**
 * struct ipa3_rmnet_context - IPA rmnet context
@@ -106,10 +108,10 @@ void ipa3_qmi_service_exit(void);

/* sending filter-install-request to modem*/
int ipa3_qmi_filter_request_send(
	struct ipa3_install_fltr_rule_req_msg_v01 *req);
	struct ipa_install_fltr_rule_req_msg_v01 *req);

/* sending filter-installed-notify-request to modem*/
int ipa3_qmi_filter_notify_send(struct ipa3_fltr_installed_notif_req_msg_v01
int ipa3_qmi_filter_notify_send(struct ipa_fltr_installed_notif_req_msg_v01
		*req);

/* voting for bus BW to ipa_rm*/
@@ -121,7 +123,7 @@ int ipa3_qmi_enable_force_clear_datapath_send(
int ipa3_qmi_disable_force_clear_datapath_send(
	struct ipa_disable_force_clear_datapath_req_msg_v01 *req);

int ipa3_copy_ul_filter_rule_to_ipa(struct ipa3_install_fltr_rule_req_msg_v01
int ipa3_copy_ul_filter_rule_to_ipa(struct ipa_install_fltr_rule_req_msg_v01
	*rule_req);

int ipa3_wwan_update_mux_channel_prop(void);
@@ -173,14 +175,14 @@ static inline void ipa3_qmi_service_exit(void) { }

/* sending filter-install-request to modem*/
static inline int ipa3_qmi_filter_request_send(
	struct ipa3_install_fltr_rule_req_msg_v01 *req)
	struct ipa_install_fltr_rule_req_msg_v01 *req)
{
	return -EPERM;
}

/* sending filter-installed-notify-request to modem*/
static inline int ipa3_qmi_filter_notify_send(
	struct ipa3_fltr_installed_notif_req_msg_v01 *req)
	struct ipa_fltr_installed_notif_req_msg_v01 *req)
{
	return -EPERM;
}
@@ -198,7 +200,7 @@ static inline int ipa3_qmi_disable_force_clear_datapath_send(
}

static inline int ipa3_copy_ul_filter_rule_to_ipa(
	struct ipa3_install_fltr_rule_req_msg_v01 *rule_req)
	struct ipa_install_fltr_rule_req_msg_v01 *rule_req)
{
	return -EPERM;
}
+432 −71

File changed.

Preview size limit exceeded, changes collapsed.

+2 −2
Original line number Diff line number Diff line
@@ -167,7 +167,7 @@

#define IPA_MEM_v3_0_RAM_V4_RT_NUM_INDEX 15
#define IPA_MEM_v3_0_V4_MODEM_RT_INDEX_LO 0
#define IPA_MEM_v3_0_V4_MODEM_RT_INDEX_HI 5
#define IPA_MEM_v3_0_V4_MODEM_RT_INDEX_HI 7
#define IPA_MEM_v3_0_V4_APPS_RT_INDEX_LO \
	(IPA_MEM_v3_0_V4_MODEM_RT_INDEX_HI + 1)
#define IPA_MEM_v3_0_V4_APPS_RT_INDEX_HI \
@@ -197,7 +197,7 @@

#define IPA_MEM_v3_0_RAM_V6_RT_NUM_INDEX 15
#define IPA_MEM_v3_0_V6_MODEM_RT_INDEX_LO 0
#define IPA_MEM_v3_0_V6_MODEM_RT_INDEX_HI 5
#define IPA_MEM_v3_0_V6_MODEM_RT_INDEX_HI 7
#define IPA_MEM_v3_0_V6_APPS_RT_INDEX_LO \
	(IPA_MEM_v3_0_V6_MODEM_RT_INDEX_HI + 1)
#define IPA_MEM_v3_0_V6_APPS_RT_INDEX_HI \
Loading