Loading drivers/platform/msm/ipa/ipa_api.c +1 −1 Original line number Diff line number Diff line Loading @@ -408,7 +408,7 @@ int ipa_cfg_ep_holb_by_client(enum ipa_client_type client, EXPORT_SYMBOL(ipa_cfg_ep_holb_by_client); /** * ipa_cfg_ep_hdr() - IPA end-point Control configuration * ipa_cfg_ep_ctrl() - IPA end-point Control configuration * @clnt_hdl: [in] opaque client handle assigned by IPA to client * @ipa_ep_cfg_ctrl: [in] IPA end-point configuration params * Loading drivers/platform/msm/ipa/ipa_v2/rmnet_ipa.c +4 −2 Original line number Diff line number Diff line Loading @@ -1413,7 +1413,8 @@ static int ipa_wwan_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) RMNET_IOCTL_EGRESS_FORMAT_CHECKSUM) { apps_to_ipa_ep_cfg.ipa_ep_cfg.hdr.hdr_len = 8; apps_to_ipa_ep_cfg.ipa_ep_cfg.cfg. cs_offload_en = 1; cs_offload_en = IPA_ENABLE_CS_OFFLOAD_UL; apps_to_ipa_ep_cfg.ipa_ep_cfg.cfg. cs_metadata_hdr_offset = 1; } else { Loading Loading @@ -1471,7 +1472,8 @@ static int ipa_wwan_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) if ((extend_ioctl_data.u.data) & RMNET_IOCTL_INGRESS_FORMAT_CHECKSUM) ipa_to_apps_ep_cfg.ipa_ep_cfg.cfg. cs_offload_en = 2; cs_offload_en = IPA_ENABLE_CS_OFFLOAD_DL; if ((extend_ioctl_data.u.data) & RMNET_IOCTL_INGRESS_FORMAT_AGG_DATA) { Loading drivers/platform/msm/ipa/ipa_v3/Makefile +2 −0 Original line number Diff line number Diff line obj-$(CONFIG_IPA3) += ipahal/ obj-$(CONFIG_IPA3) += ipat.o ipat-y := ipa.o ipa_debugfs.o ipa_hdr.o ipa_flt.o ipa_rt.o ipa_dp.o ipa_client.o \ ipa_utils.o ipa_nat.o ipa_intf.o teth_bridge.o ipa_interrupts.o odu_bridge.o \ Loading drivers/platform/msm/ipa/ipa_v3/ipa.c +351 −212 File changed.Preview size limit exceeded, changes collapsed. Show changes drivers/platform/msm/ipa/ipa_v3/ipa_client.c +18 −27 Original line number Diff line number Diff line /* Copyright (c) 2012-2015, The Linux Foundation. All rights reserved. /* Copyright (c) 2012-2016, The Linux Foundation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 and Loading Loading @@ -44,8 +44,7 @@ int ipa3_enable_data_path(u32 clnt_hdl) struct ipa_ep_cfg_holb holb_cfg; struct ipa_ep_cfg_ctrl ep_cfg_ctrl; int res = 0; u32 reg_val = 0; int ep_grp; struct ipahal_reg_endp_init_rsrc_grp rsrc_grp; IPADBG("Enabling data path\n"); if (IPA_CLIENT_IS_CONS(ep->client)) { Loading @@ -66,20 +65,18 @@ int ipa3_enable_data_path(u32 clnt_hdl) } /* Assign the resource group for pipe */ ep_grp = ipa_get_ep_group(ep->client); if (ep_grp == -1) { memset(&rsrc_grp, 0, sizeof(rsrc_grp)); rsrc_grp.rsrc_grp = ipa_get_ep_group(ep->client); if (rsrc_grp.rsrc_grp == -1) { IPAERR("invalid group for client %d\n", ep->client); WARN_ON(1); return -EFAULT; } IPADBG("Setting group %d for pipe %d\n", ep_grp, clnt_hdl); IPA_SETFIELD_IN_REG(reg_val, ep_grp, IPA_ENDP_INIT_RSRC_GRP_n_RSRC_GRP_SHFT, IPA_ENDP_INIT_RSRC_GRP_n_RSRC_GRP_BMSK); ipa_write_reg(ipa3_ctx->mmio, IPA_ENDP_INIT_RSRC_GRP_n(clnt_hdl), reg_val); rsrc_grp.rsrc_grp, clnt_hdl); ipahal_write_reg_n_fields(IPA_ENDP_INIT_RSRC_GRP_n, clnt_hdl, &rsrc_grp); return res; } Loading @@ -89,7 +86,7 @@ int ipa3_disable_data_path(u32 clnt_hdl) struct ipa3_ep_context *ep = &ipa3_ctx->ep[clnt_hdl]; struct ipa_ep_cfg_holb holb_cfg; struct ipa_ep_cfg_ctrl ep_cfg_ctrl; u32 aggr_init; struct ipa_ep_cfg_aggr ep_aggr; int res = 0; IPADBG("Disabling data path\n"); Loading @@ -108,10 +105,8 @@ int ipa3_disable_data_path(u32 clnt_hdl) } udelay(IPA_PKT_FLUSH_TO_US); aggr_init = ipa_read_reg(ipa3_ctx->mmio, IPA_ENDP_INIT_AGGR_N_OFST_v3_0(clnt_hdl)); if (((aggr_init & IPA_ENDP_INIT_AGGR_N_AGGR_EN_BMSK) >> IPA_ENDP_INIT_AGGR_N_AGGR_EN_SHFT) == IPA_ENABLE_AGGR) { ipahal_read_reg_n_fields(IPA_ENDP_INIT_AGGR_n, clnt_hdl, &ep_aggr); if (ep_aggr.aggr_en) { res = ipa3_tag_aggr_force_close(clnt_hdl); if (res) { IPAERR("tag process timeout, client:%d err:%d\n", Loading Loading @@ -286,7 +281,7 @@ int ipa3_connect(const struct ipa_connect_params *in, int ipa_ep_idx; int result = -EFAULT; struct ipa3_ep_context *ep; struct ipa3_ep_cfg_status ep_status; struct ipahal_reg_ep_cfg_status ep_status; unsigned long base; struct iommu_domain *smmu_domain; Loading Loading @@ -850,8 +845,7 @@ static int ipa3_reset_with_open_aggr_frame_wa(u32 clnt_hdl, int aggr_active_bitmap = 0; IPADBG("Applying reset channel with open aggregation frame WA\n"); ipa_write_reg(ipa3_ctx->mmio, IPA_AGGR_FORCE_CLOSE_OFST, (1 << clnt_hdl)); ipahal_write_reg(IPA_AGGR_FORCE_CLOSE, (1 << clnt_hdl)); /* Reset channel */ gsi_res = gsi_reset_channel(ep->gsi_chan_hdl); Loading Loading @@ -900,8 +894,7 @@ static int ipa3_reset_with_open_aggr_frame_wa(u32 clnt_hdl, /* Wait for aggregation frame to be closed and stop channel*/ for (i = 0; i < IPA_POLL_AGGR_STATE_RETRIES_NUM; i++) { aggr_active_bitmap = ipa_read_reg(ipa3_ctx->mmio, IPA_STATE_AGGR_ACTIVE_OFST); aggr_active_bitmap = ipahal_read_reg(IPA_STATE_AGGR_ACTIVE); if (!(aggr_active_bitmap & (1 << clnt_hdl))) break; msleep(IPA_POLL_AGGR_STATE_SLEEP_MSEC); Loading Loading @@ -980,8 +973,7 @@ int ipa3_reset_gsi_channel(u32 clnt_hdl) * reset with open aggregation frame WA */ if (IPA_CLIENT_IS_CONS(ep->client)) { aggr_active_bitmap = ipa_read_reg(ipa3_ctx->mmio, IPA_STATE_AGGR_ACTIVE_OFST); aggr_active_bitmap = ipahal_read_reg(IPA_STATE_AGGR_ACTIVE); if (aggr_active_bitmap & (1 << clnt_hdl)) { result = ipa3_reset_with_open_aggr_frame_wa(clnt_hdl, ep); Loading Loading @@ -1067,7 +1059,7 @@ int ipa3_request_gsi_channel(struct ipa_request_gsi_channel_params *params, int ipa_ep_idx; int result = -EFAULT; struct ipa3_ep_context *ep; struct ipa3_ep_cfg_status ep_status; struct ipahal_reg_ep_cfg_status ep_status; unsigned long gsi_dev_hdl; enum gsi_status gsi_res; struct ipa_gsi_ep_config gsi_ep_cfg; Loading Loading @@ -1714,8 +1706,7 @@ int ipa3_xdci_suspend(u32 ul_clnt_hdl, u32 dl_clnt_hdl, } if (!dl_data_pending) { aggr_active_bitmap = ipa_read_reg(ipa3_ctx->mmio, IPA_STATE_AGGR_ACTIVE_OFST); aggr_active_bitmap = ipahal_read_reg(IPA_STATE_AGGR_ACTIVE); if (aggr_active_bitmap & (1 << dl_clnt_hdl)) { IPADBG("DL/DPL data pending due to open aggr. frame\n"); dl_data_pending = true; Loading Loading
drivers/platform/msm/ipa/ipa_api.c +1 −1 Original line number Diff line number Diff line Loading @@ -408,7 +408,7 @@ int ipa_cfg_ep_holb_by_client(enum ipa_client_type client, EXPORT_SYMBOL(ipa_cfg_ep_holb_by_client); /** * ipa_cfg_ep_hdr() - IPA end-point Control configuration * ipa_cfg_ep_ctrl() - IPA end-point Control configuration * @clnt_hdl: [in] opaque client handle assigned by IPA to client * @ipa_ep_cfg_ctrl: [in] IPA end-point configuration params * Loading
drivers/platform/msm/ipa/ipa_v2/rmnet_ipa.c +4 −2 Original line number Diff line number Diff line Loading @@ -1413,7 +1413,8 @@ static int ipa_wwan_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) RMNET_IOCTL_EGRESS_FORMAT_CHECKSUM) { apps_to_ipa_ep_cfg.ipa_ep_cfg.hdr.hdr_len = 8; apps_to_ipa_ep_cfg.ipa_ep_cfg.cfg. cs_offload_en = 1; cs_offload_en = IPA_ENABLE_CS_OFFLOAD_UL; apps_to_ipa_ep_cfg.ipa_ep_cfg.cfg. cs_metadata_hdr_offset = 1; } else { Loading Loading @@ -1471,7 +1472,8 @@ static int ipa_wwan_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) if ((extend_ioctl_data.u.data) & RMNET_IOCTL_INGRESS_FORMAT_CHECKSUM) ipa_to_apps_ep_cfg.ipa_ep_cfg.cfg. cs_offload_en = 2; cs_offload_en = IPA_ENABLE_CS_OFFLOAD_DL; if ((extend_ioctl_data.u.data) & RMNET_IOCTL_INGRESS_FORMAT_AGG_DATA) { Loading
drivers/platform/msm/ipa/ipa_v3/Makefile +2 −0 Original line number Diff line number Diff line obj-$(CONFIG_IPA3) += ipahal/ obj-$(CONFIG_IPA3) += ipat.o ipat-y := ipa.o ipa_debugfs.o ipa_hdr.o ipa_flt.o ipa_rt.o ipa_dp.o ipa_client.o \ ipa_utils.o ipa_nat.o ipa_intf.o teth_bridge.o ipa_interrupts.o odu_bridge.o \ Loading
drivers/platform/msm/ipa/ipa_v3/ipa.c +351 −212 File changed.Preview size limit exceeded, changes collapsed. Show changes
drivers/platform/msm/ipa/ipa_v3/ipa_client.c +18 −27 Original line number Diff line number Diff line /* Copyright (c) 2012-2015, The Linux Foundation. All rights reserved. /* Copyright (c) 2012-2016, The Linux Foundation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 and Loading Loading @@ -44,8 +44,7 @@ int ipa3_enable_data_path(u32 clnt_hdl) struct ipa_ep_cfg_holb holb_cfg; struct ipa_ep_cfg_ctrl ep_cfg_ctrl; int res = 0; u32 reg_val = 0; int ep_grp; struct ipahal_reg_endp_init_rsrc_grp rsrc_grp; IPADBG("Enabling data path\n"); if (IPA_CLIENT_IS_CONS(ep->client)) { Loading @@ -66,20 +65,18 @@ int ipa3_enable_data_path(u32 clnt_hdl) } /* Assign the resource group for pipe */ ep_grp = ipa_get_ep_group(ep->client); if (ep_grp == -1) { memset(&rsrc_grp, 0, sizeof(rsrc_grp)); rsrc_grp.rsrc_grp = ipa_get_ep_group(ep->client); if (rsrc_grp.rsrc_grp == -1) { IPAERR("invalid group for client %d\n", ep->client); WARN_ON(1); return -EFAULT; } IPADBG("Setting group %d for pipe %d\n", ep_grp, clnt_hdl); IPA_SETFIELD_IN_REG(reg_val, ep_grp, IPA_ENDP_INIT_RSRC_GRP_n_RSRC_GRP_SHFT, IPA_ENDP_INIT_RSRC_GRP_n_RSRC_GRP_BMSK); ipa_write_reg(ipa3_ctx->mmio, IPA_ENDP_INIT_RSRC_GRP_n(clnt_hdl), reg_val); rsrc_grp.rsrc_grp, clnt_hdl); ipahal_write_reg_n_fields(IPA_ENDP_INIT_RSRC_GRP_n, clnt_hdl, &rsrc_grp); return res; } Loading @@ -89,7 +86,7 @@ int ipa3_disable_data_path(u32 clnt_hdl) struct ipa3_ep_context *ep = &ipa3_ctx->ep[clnt_hdl]; struct ipa_ep_cfg_holb holb_cfg; struct ipa_ep_cfg_ctrl ep_cfg_ctrl; u32 aggr_init; struct ipa_ep_cfg_aggr ep_aggr; int res = 0; IPADBG("Disabling data path\n"); Loading @@ -108,10 +105,8 @@ int ipa3_disable_data_path(u32 clnt_hdl) } udelay(IPA_PKT_FLUSH_TO_US); aggr_init = ipa_read_reg(ipa3_ctx->mmio, IPA_ENDP_INIT_AGGR_N_OFST_v3_0(clnt_hdl)); if (((aggr_init & IPA_ENDP_INIT_AGGR_N_AGGR_EN_BMSK) >> IPA_ENDP_INIT_AGGR_N_AGGR_EN_SHFT) == IPA_ENABLE_AGGR) { ipahal_read_reg_n_fields(IPA_ENDP_INIT_AGGR_n, clnt_hdl, &ep_aggr); if (ep_aggr.aggr_en) { res = ipa3_tag_aggr_force_close(clnt_hdl); if (res) { IPAERR("tag process timeout, client:%d err:%d\n", Loading Loading @@ -286,7 +281,7 @@ int ipa3_connect(const struct ipa_connect_params *in, int ipa_ep_idx; int result = -EFAULT; struct ipa3_ep_context *ep; struct ipa3_ep_cfg_status ep_status; struct ipahal_reg_ep_cfg_status ep_status; unsigned long base; struct iommu_domain *smmu_domain; Loading Loading @@ -850,8 +845,7 @@ static int ipa3_reset_with_open_aggr_frame_wa(u32 clnt_hdl, int aggr_active_bitmap = 0; IPADBG("Applying reset channel with open aggregation frame WA\n"); ipa_write_reg(ipa3_ctx->mmio, IPA_AGGR_FORCE_CLOSE_OFST, (1 << clnt_hdl)); ipahal_write_reg(IPA_AGGR_FORCE_CLOSE, (1 << clnt_hdl)); /* Reset channel */ gsi_res = gsi_reset_channel(ep->gsi_chan_hdl); Loading Loading @@ -900,8 +894,7 @@ static int ipa3_reset_with_open_aggr_frame_wa(u32 clnt_hdl, /* Wait for aggregation frame to be closed and stop channel*/ for (i = 0; i < IPA_POLL_AGGR_STATE_RETRIES_NUM; i++) { aggr_active_bitmap = ipa_read_reg(ipa3_ctx->mmio, IPA_STATE_AGGR_ACTIVE_OFST); aggr_active_bitmap = ipahal_read_reg(IPA_STATE_AGGR_ACTIVE); if (!(aggr_active_bitmap & (1 << clnt_hdl))) break; msleep(IPA_POLL_AGGR_STATE_SLEEP_MSEC); Loading Loading @@ -980,8 +973,7 @@ int ipa3_reset_gsi_channel(u32 clnt_hdl) * reset with open aggregation frame WA */ if (IPA_CLIENT_IS_CONS(ep->client)) { aggr_active_bitmap = ipa_read_reg(ipa3_ctx->mmio, IPA_STATE_AGGR_ACTIVE_OFST); aggr_active_bitmap = ipahal_read_reg(IPA_STATE_AGGR_ACTIVE); if (aggr_active_bitmap & (1 << clnt_hdl)) { result = ipa3_reset_with_open_aggr_frame_wa(clnt_hdl, ep); Loading Loading @@ -1067,7 +1059,7 @@ int ipa3_request_gsi_channel(struct ipa_request_gsi_channel_params *params, int ipa_ep_idx; int result = -EFAULT; struct ipa3_ep_context *ep; struct ipa3_ep_cfg_status ep_status; struct ipahal_reg_ep_cfg_status ep_status; unsigned long gsi_dev_hdl; enum gsi_status gsi_res; struct ipa_gsi_ep_config gsi_ep_cfg; Loading Loading @@ -1714,8 +1706,7 @@ int ipa3_xdci_suspend(u32 ul_clnt_hdl, u32 dl_clnt_hdl, } if (!dl_data_pending) { aggr_active_bitmap = ipa_read_reg(ipa3_ctx->mmio, IPA_STATE_AGGR_ACTIVE_OFST); aggr_active_bitmap = ipahal_read_reg(IPA_STATE_AGGR_ACTIVE); if (aggr_active_bitmap & (1 << dl_clnt_hdl)) { IPADBG("DL/DPL data pending due to open aggr. frame\n"); dl_data_pending = true; Loading