Loading drivers/platform/msm/ipa/ipa_v2/ipa_debugfs.c +2 −0 Original line number Diff line number Diff line Loading @@ -80,6 +80,8 @@ const char *ipa_event_name[] = { __stringify(ECM_DISCONNECT), __stringify(IPA_TETHERING_STATS_UPDATE_STATS), __stringify(IPA_TETHERING_STATS_UPDATE_NETWORK_STATS), __stringify(IPA_PER_CLIENT_STATS_CONNECT_EVENT), __stringify(IPA_PER_CLIENT_STATS_DISCONNECT_EVENT), }; const char *ipa_hdr_l2_type_name[] = { Loading drivers/platform/msm/ipa/ipa_v3/ipa.c +43 −0 Original line number Diff line number Diff line Loading @@ -837,6 +837,49 @@ static long ipa3_ioctl(struct file *filp, unsigned int cmd, unsigned long arg) break; } break; case IPA_IOC_ADD_RT_RULE_EXT: if (copy_from_user(header, (u8 *)arg, sizeof(struct ipa_ioc_add_rt_rule_ext))) { retval = -EFAULT; break; } pre_entry = ((struct ipa_ioc_add_rt_rule_ext *)header)->num_rules; pyld_sz = sizeof(struct ipa_ioc_add_rt_rule_ext) + pre_entry * sizeof(struct ipa_rt_rule_add_ext); param = kzalloc(pyld_sz, GFP_KERNEL); if (!param) { retval = -ENOMEM; break; } if (copy_from_user(param, (u8 *)arg, pyld_sz)) { retval = -EFAULT; break; } /* add check in case user-space module compromised */ if (unlikely( ((struct ipa_ioc_add_rt_rule_ext *)param)->num_rules != pre_entry)) { IPAERR(" prevent memory corruption(%d not match %d)\n", ((struct ipa_ioc_add_rt_rule_ext *)param)-> num_rules, pre_entry); retval = -EINVAL; break; } if (ipa3_add_rt_rule_ext( (struct ipa_ioc_add_rt_rule_ext *)param)) { retval = -EFAULT; break; } if (copy_to_user((u8 *)arg, param, pyld_sz)) { retval = -EFAULT; break; } break; case IPA_IOC_ADD_RT_RULE_AFTER: if (copy_from_user(header, (u8 *)arg, sizeof(struct ipa_ioc_add_rt_rule_after))) { Loading drivers/platform/msm/ipa/ipa_v3/ipa_debugfs.c +2 −0 Original line number Diff line number Diff line Loading @@ -61,6 +61,8 @@ const char *ipa3_event_name[] = { __stringify(ECM_DISCONNECT), __stringify(IPA_TETHERING_STATS_UPDATE_STATS), __stringify(IPA_TETHERING_STATS_UPDATE_NETWORK_STATS), __stringify(IPA_PER_CLIENT_STATS_CONNECT_EVENT), __stringify(IPA_PER_CLIENT_STATS_DISCONNECT_EVENT), }; const char *ipa3_hdr_l2_type_name[] = { Loading drivers/platform/msm/ipa/ipa_v3/ipa_i.h +3 −0 Original line number Diff line number Diff line Loading @@ -454,6 +454,7 @@ struct ipa3_rt_entry { int id; u16 prio; u16 rule_id; u16 rule_id_valid; }; /** Loading Loading @@ -1570,6 +1571,8 @@ int ipa3_del_hdr_proc_ctx_by_user(struct ipa_ioc_del_hdr_proc_ctx *hdls, */ int ipa3_add_rt_rule(struct ipa_ioc_add_rt_rule *rules); int ipa3_add_rt_rule_ext(struct ipa_ioc_add_rt_rule_ext *rules); int ipa3_add_rt_rule_after(struct ipa_ioc_add_rt_rule_after *rules); int ipa3_del_rt_rule(struct ipa_ioc_del_rt_rule *hdls); Loading drivers/platform/msm/ipa/ipa_v3/ipa_qmi_service.c +68 −0 Original line number Diff line number Diff line Loading @@ -1425,6 +1425,74 @@ int ipa3_qmi_stop_data_qouta(void) resp.resp.error, "ipa_stop_data_usage_quota_req_msg_v01"); } int ipa3_qmi_enable_per_client_stats( struct ipa_enable_per_client_stats_req_msg_v01 *req, struct ipa_enable_per_client_stats_resp_msg_v01 *resp) { struct msg_desc req_desc, resp_desc; int rc; req_desc.max_msg_len = QMI_IPA_ENABLE_PER_CLIENT_STATS_REQ_MAX_MSG_LEN_V01; req_desc.msg_id = QMI_IPA_ENABLE_PER_CLIENT_STATS_REQ_V01; req_desc.ei_array = ipa3_enable_per_client_stats_req_msg_data_v01_ei; resp_desc.max_msg_len = QMI_IPA_ENABLE_PER_CLIENT_STATS_RESP_MAX_MSG_LEN_V01; resp_desc.msg_id = QMI_IPA_ENABLE_PER_CLIENT_STATS_RESP_V01; resp_desc.ei_array = ipa3_enable_per_client_stats_resp_msg_data_v01_ei; IPAWANDBG("Sending QMI_IPA_ENABLE_PER_CLIENT_STATS_REQ_V01\n"); rc = qmi_send_req_wait(ipa_q6_clnt, &req_desc, req, sizeof(struct ipa_enable_per_client_stats_req_msg_v01), &resp_desc, resp, sizeof(struct ipa_enable_per_client_stats_resp_msg_v01), QMI_SEND_STATS_REQ_TIMEOUT_MS); IPAWANDBG("QMI_IPA_ENABLE_PER_CLIENT_STATS_RESP_V01 received\n"); return ipa3_check_qmi_response(rc, QMI_IPA_ENABLE_PER_CLIENT_STATS_REQ_V01, resp->resp.result, resp->resp.error, "ipa3_qmi_enable_per_client_stats"); } int ipa3_qmi_get_per_client_packet_stats( struct ipa_get_stats_per_client_req_msg_v01 *req, struct ipa_get_stats_per_client_resp_msg_v01 *resp) { struct msg_desc req_desc, resp_desc; int rc; req_desc.max_msg_len = QMI_IPA_GET_STATS_PER_CLIENT_REQ_MAX_MSG_LEN_V01; req_desc.msg_id = QMI_IPA_GET_STATS_PER_CLIENT_REQ_V01; req_desc.ei_array = ipa3_get_stats_per_client_req_msg_data_v01_ei; resp_desc.max_msg_len = QMI_IPA_GET_STATS_PER_CLIENT_RESP_MAX_MSG_LEN_V01; resp_desc.msg_id = QMI_IPA_GET_STATS_PER_CLIENT_RESP_V01; resp_desc.ei_array = ipa3_get_stats_per_client_resp_msg_data_v01_ei; IPAWANDBG("Sending QMI_IPA_GET_STATS_PER_CLIENT_REQ_V01\n"); rc = qmi_send_req_wait(ipa_q6_clnt, &req_desc, req, sizeof(struct ipa_get_stats_per_client_req_msg_v01), &resp_desc, resp, sizeof(struct ipa_get_stats_per_client_resp_msg_v01), QMI_SEND_STATS_REQ_TIMEOUT_MS); IPAWANDBG("QMI_IPA_GET_STATS_PER_CLIENT_RESP_V01 received\n"); return ipa3_check_qmi_response(rc, QMI_IPA_GET_STATS_PER_CLIENT_REQ_V01, resp->resp.result, resp->resp.error, "struct ipa_get_stats_per_client_req_msg_v01"); } void ipa3_qmi_init(void) { mutex_init(&ipa3_qmi_lock); Loading Loading
drivers/platform/msm/ipa/ipa_v2/ipa_debugfs.c +2 −0 Original line number Diff line number Diff line Loading @@ -80,6 +80,8 @@ const char *ipa_event_name[] = { __stringify(ECM_DISCONNECT), __stringify(IPA_TETHERING_STATS_UPDATE_STATS), __stringify(IPA_TETHERING_STATS_UPDATE_NETWORK_STATS), __stringify(IPA_PER_CLIENT_STATS_CONNECT_EVENT), __stringify(IPA_PER_CLIENT_STATS_DISCONNECT_EVENT), }; const char *ipa_hdr_l2_type_name[] = { Loading
drivers/platform/msm/ipa/ipa_v3/ipa.c +43 −0 Original line number Diff line number Diff line Loading @@ -837,6 +837,49 @@ static long ipa3_ioctl(struct file *filp, unsigned int cmd, unsigned long arg) break; } break; case IPA_IOC_ADD_RT_RULE_EXT: if (copy_from_user(header, (u8 *)arg, sizeof(struct ipa_ioc_add_rt_rule_ext))) { retval = -EFAULT; break; } pre_entry = ((struct ipa_ioc_add_rt_rule_ext *)header)->num_rules; pyld_sz = sizeof(struct ipa_ioc_add_rt_rule_ext) + pre_entry * sizeof(struct ipa_rt_rule_add_ext); param = kzalloc(pyld_sz, GFP_KERNEL); if (!param) { retval = -ENOMEM; break; } if (copy_from_user(param, (u8 *)arg, pyld_sz)) { retval = -EFAULT; break; } /* add check in case user-space module compromised */ if (unlikely( ((struct ipa_ioc_add_rt_rule_ext *)param)->num_rules != pre_entry)) { IPAERR(" prevent memory corruption(%d not match %d)\n", ((struct ipa_ioc_add_rt_rule_ext *)param)-> num_rules, pre_entry); retval = -EINVAL; break; } if (ipa3_add_rt_rule_ext( (struct ipa_ioc_add_rt_rule_ext *)param)) { retval = -EFAULT; break; } if (copy_to_user((u8 *)arg, param, pyld_sz)) { retval = -EFAULT; break; } break; case IPA_IOC_ADD_RT_RULE_AFTER: if (copy_from_user(header, (u8 *)arg, sizeof(struct ipa_ioc_add_rt_rule_after))) { Loading
drivers/platform/msm/ipa/ipa_v3/ipa_debugfs.c +2 −0 Original line number Diff line number Diff line Loading @@ -61,6 +61,8 @@ const char *ipa3_event_name[] = { __stringify(ECM_DISCONNECT), __stringify(IPA_TETHERING_STATS_UPDATE_STATS), __stringify(IPA_TETHERING_STATS_UPDATE_NETWORK_STATS), __stringify(IPA_PER_CLIENT_STATS_CONNECT_EVENT), __stringify(IPA_PER_CLIENT_STATS_DISCONNECT_EVENT), }; const char *ipa3_hdr_l2_type_name[] = { Loading
drivers/platform/msm/ipa/ipa_v3/ipa_i.h +3 −0 Original line number Diff line number Diff line Loading @@ -454,6 +454,7 @@ struct ipa3_rt_entry { int id; u16 prio; u16 rule_id; u16 rule_id_valid; }; /** Loading Loading @@ -1570,6 +1571,8 @@ int ipa3_del_hdr_proc_ctx_by_user(struct ipa_ioc_del_hdr_proc_ctx *hdls, */ int ipa3_add_rt_rule(struct ipa_ioc_add_rt_rule *rules); int ipa3_add_rt_rule_ext(struct ipa_ioc_add_rt_rule_ext *rules); int ipa3_add_rt_rule_after(struct ipa_ioc_add_rt_rule_after *rules); int ipa3_del_rt_rule(struct ipa_ioc_del_rt_rule *hdls); Loading
drivers/platform/msm/ipa/ipa_v3/ipa_qmi_service.c +68 −0 Original line number Diff line number Diff line Loading @@ -1425,6 +1425,74 @@ int ipa3_qmi_stop_data_qouta(void) resp.resp.error, "ipa_stop_data_usage_quota_req_msg_v01"); } int ipa3_qmi_enable_per_client_stats( struct ipa_enable_per_client_stats_req_msg_v01 *req, struct ipa_enable_per_client_stats_resp_msg_v01 *resp) { struct msg_desc req_desc, resp_desc; int rc; req_desc.max_msg_len = QMI_IPA_ENABLE_PER_CLIENT_STATS_REQ_MAX_MSG_LEN_V01; req_desc.msg_id = QMI_IPA_ENABLE_PER_CLIENT_STATS_REQ_V01; req_desc.ei_array = ipa3_enable_per_client_stats_req_msg_data_v01_ei; resp_desc.max_msg_len = QMI_IPA_ENABLE_PER_CLIENT_STATS_RESP_MAX_MSG_LEN_V01; resp_desc.msg_id = QMI_IPA_ENABLE_PER_CLIENT_STATS_RESP_V01; resp_desc.ei_array = ipa3_enable_per_client_stats_resp_msg_data_v01_ei; IPAWANDBG("Sending QMI_IPA_ENABLE_PER_CLIENT_STATS_REQ_V01\n"); rc = qmi_send_req_wait(ipa_q6_clnt, &req_desc, req, sizeof(struct ipa_enable_per_client_stats_req_msg_v01), &resp_desc, resp, sizeof(struct ipa_enable_per_client_stats_resp_msg_v01), QMI_SEND_STATS_REQ_TIMEOUT_MS); IPAWANDBG("QMI_IPA_ENABLE_PER_CLIENT_STATS_RESP_V01 received\n"); return ipa3_check_qmi_response(rc, QMI_IPA_ENABLE_PER_CLIENT_STATS_REQ_V01, resp->resp.result, resp->resp.error, "ipa3_qmi_enable_per_client_stats"); } int ipa3_qmi_get_per_client_packet_stats( struct ipa_get_stats_per_client_req_msg_v01 *req, struct ipa_get_stats_per_client_resp_msg_v01 *resp) { struct msg_desc req_desc, resp_desc; int rc; req_desc.max_msg_len = QMI_IPA_GET_STATS_PER_CLIENT_REQ_MAX_MSG_LEN_V01; req_desc.msg_id = QMI_IPA_GET_STATS_PER_CLIENT_REQ_V01; req_desc.ei_array = ipa3_get_stats_per_client_req_msg_data_v01_ei; resp_desc.max_msg_len = QMI_IPA_GET_STATS_PER_CLIENT_RESP_MAX_MSG_LEN_V01; resp_desc.msg_id = QMI_IPA_GET_STATS_PER_CLIENT_RESP_V01; resp_desc.ei_array = ipa3_get_stats_per_client_resp_msg_data_v01_ei; IPAWANDBG("Sending QMI_IPA_GET_STATS_PER_CLIENT_REQ_V01\n"); rc = qmi_send_req_wait(ipa_q6_clnt, &req_desc, req, sizeof(struct ipa_get_stats_per_client_req_msg_v01), &resp_desc, resp, sizeof(struct ipa_get_stats_per_client_resp_msg_v01), QMI_SEND_STATS_REQ_TIMEOUT_MS); IPAWANDBG("QMI_IPA_GET_STATS_PER_CLIENT_RESP_V01 received\n"); return ipa3_check_qmi_response(rc, QMI_IPA_GET_STATS_PER_CLIENT_REQ_V01, resp->resp.result, resp->resp.error, "struct ipa_get_stats_per_client_req_msg_v01"); } void ipa3_qmi_init(void) { mutex_init(&ipa3_qmi_lock); Loading