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

Commit 7a72e53e authored by qctecmdr's avatar qctecmdr Committed by Gerrit - the friendly Code Review server
Browse files

Merge "msm: ipa: add IPA hw stats for PCIE modem"

parents faace3be d4e45e4a
Loading
Loading
Loading
Loading
+41 −16
Original line number Diff line number Diff line
@@ -39,6 +39,25 @@ int ipa_hw_stats_init(void)
		return -ENOMEM;
	}
	/* enable prod mask */
	if (ipa3_ctx->platform_type == IPA_PLAT_TYPE_APQ) {
		teth_stats_init->prod_mask = (
			IPA_CLIENT_BIT_32(IPA_CLIENT_MHI_PRIME_TETH_PROD) |
			IPA_CLIENT_BIT_32(IPA_CLIENT_USB_PROD) |
			IPA_CLIENT_BIT_32(IPA_CLIENT_WLAN1_PROD));

		if (IPA_CLIENT_BIT_32(IPA_CLIENT_MHI_PRIME_TETH_PROD)) {
			ep_index = ipa3_get_ep_mapping(
				IPA_CLIENT_MHI_PRIME_TETH_PROD);
			if (ep_index == -1) {
				IPAERR("Invalid client.\n");
				kfree(teth_stats_init);
				return -EINVAL;
			}
			teth_stats_init->dst_ep_mask[ep_index] =
				(IPA_CLIENT_BIT_32(IPA_CLIENT_WLAN1_CONS) |
				IPA_CLIENT_BIT_32(IPA_CLIENT_USB_CONS));
		}
	} else {
		teth_stats_init->prod_mask = (
			IPA_CLIENT_BIT_32(IPA_CLIENT_Q6_WAN_PROD) |
			IPA_CLIENT_BIT_32(IPA_CLIENT_USB_PROD) |
@@ -55,6 +74,7 @@ int ipa_hw_stats_init(void)
			(IPA_CLIENT_BIT_32(IPA_CLIENT_WLAN1_CONS) |
			IPA_CLIENT_BIT_32(IPA_CLIENT_USB_CONS));
		}
	}

	if (IPA_CLIENT_BIT_32(IPA_CLIENT_USB_PROD)) {
		ep_index = ipa3_get_ep_mapping(IPA_CLIENT_USB_PROD);
@@ -64,9 +84,12 @@ int ipa_hw_stats_init(void)
			return -EINVAL;
		}
		/* enable addtional pipe monitoring for pcie modem */
		if (ipa3_ctx->ipa_hw_type == IPA_HW_v4_1)
		if (ipa3_ctx->ipa_hw_type >= IPA_HW_v4_1)
			teth_stats_init->dst_ep_mask[ep_index] =
				(IPA_CLIENT_BIT_32(IPA_CLIENT_Q6_WAN_CONS) |
				(IPA_CLIENT_BIT_32(
					IPA_CLIENT_Q6_WAN_CONS) |
				IPA_CLIENT_BIT_32(
					IPA_CLIENT_MHI_PRIME_TETH_CONS) |
				IPA_CLIENT_BIT_32(
					IPA_CLIENT_Q6_LTE_WIFI_AGGR_CONS));
		else
@@ -82,9 +105,11 @@ int ipa_hw_stats_init(void)
			return -EINVAL;
		}
		/* enable addtional pipe monitoring for pcie modem*/
		if (ipa3_ctx->ipa_hw_type == IPA_HW_v4_1)
		if (ipa3_ctx->ipa_hw_type >= IPA_HW_v4_1)
			teth_stats_init->dst_ep_mask[ep_index] =
				(IPA_CLIENT_BIT_32(IPA_CLIENT_Q6_WAN_CONS) |
				IPA_CLIENT_BIT_32(
					IPA_CLIENT_MHI_PRIME_TETH_CONS) |
				IPA_CLIENT_BIT_32(
				IPA_CLIENT_Q6_LTE_WIFI_AGGR_CONS));
		else
+48 −26
Original line number Diff line number Diff line
@@ -3625,7 +3625,7 @@ static int rmnet_ipa3_query_tethering_stats_modem(
static int rmnet_ipa3_query_tethering_stats_hw(
	struct wan_ioctl_query_tether_stats *data, bool reset)
{
	int rc = 0;
	int rc = 0, index = 0;
	struct ipa_quota_stats_all *con_stats;
	struct ipa_quota_stats  *client;

@@ -3643,12 +3643,24 @@ static int rmnet_ipa3_query_tethering_stats_hw(
		IPAWANERR("no memory\n");
		return -ENOMEM;
	}
	rc = ipa_query_teth_stats(IPA_CLIENT_Q6_WAN_PROD, con_stats, reset);

	if (rmnet_ipa3_ctx->ipa_config_is_apq) {
		rc = ipa_query_teth_stats(IPA_CLIENT_MHI_PRIME_TETH_PROD,
			con_stats, reset);
		if (rc) {
			IPAERR("MHI_PRIME_TETH_PROD query failed %d,\n", rc);
			kfree(con_stats);
			return rc;
		}
	} else {
		rc = ipa_query_teth_stats(IPA_CLIENT_Q6_WAN_PROD,
			con_stats, reset);
		if (rc) {
			IPAERR("IPA_CLIENT_Q6_WAN_PROD query failed %d,\n", rc);
			kfree(con_stats);
			return rc;
		}
	}
	IPAWANDBG("wlan: v4_rx_p(%d) b(%lld) v6_rx_p(%d) b(%lld)\n",
	con_stats->client[IPA_CLIENT_WLAN1_CONS].num_ipv4_pkts,
	con_stats->client[IPA_CLIENT_WLAN1_CONS].num_ipv4_bytes,
@@ -3690,21 +3702,26 @@ static int rmnet_ipa3_query_tethering_stats_hw(
		return rc;
	}

	if (rmnet_ipa3_ctx->ipa_config_is_apq)
		index = IPA_CLIENT_MHI_PRIME_TETH_CONS;
	else
		index = IPA_CLIENT_Q6_WAN_CONS;

	IPAWANDBG("usb: v4_tx_p(%d) b(%lld) v6_tx_p(%d) b(%lld)\n",
	con_stats->client[IPA_CLIENT_Q6_WAN_CONS].num_ipv4_pkts,
	con_stats->client[IPA_CLIENT_Q6_WAN_CONS].num_ipv4_bytes,
	con_stats->client[IPA_CLIENT_Q6_WAN_CONS].num_ipv6_pkts,
	con_stats->client[IPA_CLIENT_Q6_WAN_CONS].num_ipv6_bytes);
	con_stats->client[index].num_ipv4_pkts,
	con_stats->client[index].num_ipv4_bytes,
	con_stats->client[index].num_ipv6_pkts,
	con_stats->client[index].num_ipv6_bytes);

	/* update the USB UL stats */
	data->ipv4_tx_packets =
		con_stats->client[IPA_CLIENT_Q6_WAN_CONS].num_ipv4_pkts;
		con_stats->client[index].num_ipv4_pkts;
	data->ipv6_tx_packets =
		con_stats->client[IPA_CLIENT_Q6_WAN_CONS].num_ipv6_pkts;
		con_stats->client[index].num_ipv6_pkts;
	data->ipv4_tx_bytes =
		con_stats->client[IPA_CLIENT_Q6_WAN_CONS].num_ipv4_bytes;
		con_stats->client[index].num_ipv4_bytes;
	data->ipv6_tx_bytes =
		con_stats->client[IPA_CLIENT_Q6_WAN_CONS].num_ipv6_bytes;
		con_stats->client[index].num_ipv6_bytes;

	/* usb UL stats on cv2 */
	client = &con_stats->client[IPA_CLIENT_Q6_LTE_WIFI_AGGR_CONS];
@@ -3733,21 +3750,26 @@ static int rmnet_ipa3_query_tethering_stats_hw(
		return rc;
	}

	if (rmnet_ipa3_ctx->ipa_config_is_apq)
		index = IPA_CLIENT_MHI_PRIME_TETH_CONS;
	else
		index = IPA_CLIENT_Q6_WAN_CONS;

	IPAWANDBG("wlan: v4_tx_p(%d) b(%lld) v6_tx_p(%d) b(%lld)\n",
	con_stats->client[IPA_CLIENT_Q6_WAN_CONS].num_ipv4_pkts,
	con_stats->client[IPA_CLIENT_Q6_WAN_CONS].num_ipv4_bytes,
	con_stats->client[IPA_CLIENT_Q6_WAN_CONS].num_ipv6_pkts,
	con_stats->client[IPA_CLIENT_Q6_WAN_CONS].num_ipv6_bytes);
	con_stats->client[index].num_ipv4_pkts,
	con_stats->client[index].num_ipv4_bytes,
	con_stats->client[index].num_ipv6_pkts,
	con_stats->client[index].num_ipv6_bytes);

	/* update the wlan UL stats */
	data->ipv4_tx_packets +=
		con_stats->client[IPA_CLIENT_Q6_WAN_CONS].num_ipv4_pkts;
	data->ipv6_tx_packets +=
		con_stats->client[IPA_CLIENT_Q6_WAN_CONS].num_ipv6_pkts;
	data->ipv4_tx_bytes +=
		con_stats->client[IPA_CLIENT_Q6_WAN_CONS].num_ipv4_bytes;
	data->ipv6_tx_bytes +=
		con_stats->client[IPA_CLIENT_Q6_WAN_CONS].num_ipv6_bytes;
	data->ipv4_tx_packets =
		con_stats->client[index].num_ipv4_pkts;
	data->ipv6_tx_packets =
		con_stats->client[index].num_ipv6_pkts;
	data->ipv4_tx_bytes =
		con_stats->client[index].num_ipv4_bytes;
	data->ipv6_tx_bytes =
		con_stats->client[index].num_ipv6_bytes;

	/* wlan UL stats on cv2 */
	IPAWANDBG("wlan (cv2): v4_tx_p(%d) b(%lld) v6_tx_p(%d) b(%lld)\n",