Loading drivers/platform/msm/ipa/ipa_v2/rmnet_ipa.c +17 −9 Original line number Diff line number Diff line Loading @@ -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); Loading @@ -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; Loading Loading @@ -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; } Loading @@ -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; } Loading drivers/platform/msm/ipa/ipa_v3/ipa_qmi_service.c +77 −29 Original line number Diff line number Diff line Loading @@ -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 */ Loading @@ -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, }; Loading @@ -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; Loading Loading @@ -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, Loading Loading @@ -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) { Loading Loading @@ -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; Loading Loading @@ -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; Loading Loading @@ -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; Loading Loading @@ -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; Loading @@ -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; Loading @@ -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, Loading Loading @@ -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; Loading @@ -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; Loading @@ -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, Loading drivers/platform/msm/ipa/ipa_v3/ipa_qmi_service.h +10 −8 Original line number Diff line number Diff line Loading @@ -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; }; Loading Loading @@ -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 Loading @@ -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*/ Loading @@ -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); Loading Loading @@ -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; } Loading @@ -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; } Loading drivers/platform/msm/ipa/ipa_v3/ipa_qmi_service_v01.c +432 −71 File changed.Preview size limit exceeded, changes collapsed. Show changes drivers/platform/msm/ipa/ipa_v3/ipa_ram_mmap.h +2 −2 Original line number Diff line number Diff line Loading @@ -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 \ Loading Loading @@ -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 Loading
drivers/platform/msm/ipa/ipa_v2/rmnet_ipa.c +17 −9 Original line number Diff line number Diff line Loading @@ -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); Loading @@ -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; Loading Loading @@ -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; } Loading @@ -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; } Loading
drivers/platform/msm/ipa/ipa_v3/ipa_qmi_service.c +77 −29 Original line number Diff line number Diff line Loading @@ -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 */ Loading @@ -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, }; Loading @@ -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; Loading Loading @@ -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, Loading Loading @@ -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) { Loading Loading @@ -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; Loading Loading @@ -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; Loading Loading @@ -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; Loading Loading @@ -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; Loading @@ -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; Loading @@ -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, Loading Loading @@ -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; Loading @@ -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; Loading @@ -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, Loading
drivers/platform/msm/ipa/ipa_v3/ipa_qmi_service.h +10 −8 Original line number Diff line number Diff line Loading @@ -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; }; Loading Loading @@ -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 Loading @@ -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*/ Loading @@ -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); Loading Loading @@ -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; } Loading @@ -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; } Loading
drivers/platform/msm/ipa/ipa_v3/ipa_qmi_service_v01.c +432 −71 File changed.Preview size limit exceeded, changes collapsed. Show changes
drivers/platform/msm/ipa/ipa_v3/ipa_ram_mmap.h +2 −2 Original line number Diff line number Diff line Loading @@ -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 \ Loading Loading @@ -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