qcacld-3.0: Parse tx and rx packet per MCS from peer extd stats

Based on the new requirement, fw fills the tx packet counts per mcs
and rx packet count per mcs index in the peer extd stats event.
Add logic to parse tx packet count per mcs and rx packet count per mcs
from peer extd stats event.

Change-Id: I4cd8c1ed5dd6942022d9f930f8de0bcbcb679eb5
CRs-Fixed: 3289683
This commit is contained in:
Ashish Kumar Dhanotiya
2022-09-02 22:58:35 +05:30
committed by Madan Koyyalamudi
parent 8d24d5cc65
commit c8d57a7023
7 changed files with 292 additions and 8 deletions

View File

@@ -1,5 +1,6 @@
/*
* Copyright (c) 2016-2021, The Linux Foundation. All rights reserved.
* Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved.
*
* Permission to use, copy, modify, and/or distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
@@ -79,6 +80,30 @@ wmi_extract_peer_stats_param(wmi_unified_t wmi_handle, void *evt_buf,
return QDF_STATUS_E_FAILURE;
}
QDF_STATUS
wmi_extract_peer_tx_pkt_per_mcs(wmi_unified_t wmi_handle, void *evt_buf,
uint32_t index,
wmi_host_peer_stats_info *peer_stats_info)
{
if (wmi_handle->ops->extract_peer_tx_pkt_per_mcs)
return wmi_handle->ops->extract_peer_tx_pkt_per_mcs(wmi_handle,
evt_buf, index, peer_stats_info);
return QDF_STATUS_E_FAILURE;
}
QDF_STATUS
wmi_extract_peer_rx_pkt_per_mcs(wmi_unified_t wmi_handle, void *evt_buf,
uint32_t index,
wmi_host_peer_stats_info *peer_stats_info)
{
if (wmi_handle->ops->extract_peer_rx_pkt_per_mcs)
return wmi_handle->ops->extract_peer_rx_pkt_per_mcs(wmi_handle,
evt_buf, index, peer_stats_info);
return QDF_STATUS_E_FAILURE;
}
QDF_STATUS
wmi_extract_peer_stats_info(wmi_unified_t wmi_handle, void *evt_buf,
uint32_t index,

View File

@@ -1,5 +1,6 @@
/*
* Copyright (c) 2013-2021, The Linux Foundation. All rights reserved.
* Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved.
*
* Permission to use, copy, modify, and/or distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
@@ -370,6 +371,94 @@ static void dump_peer_stats_info(wmi_peer_stats_info *stats)
wmi_debug("chain%d_rssi %d", i, stats->peer_rssi_per_chain[i]);
}
/**
* extract_peer_tx_pkt_per_mcs_tlv() - extract peer tx packets per MCS
* from event
* @wmi_handle: wmi handle
* @evt_buf: pointer to event buffer
* @index: Index into vdev stats
* @peer_stats_info: Pointer to hold peer stats info
*
* Return: QDF_STATUS_SUCCESS for success or error code
*/
static QDF_STATUS
extract_peer_tx_pkt_per_mcs_tlv(wmi_unified_t wmi_handle, void *evt_buf,
uint32_t index,
wmi_host_peer_stats_info *peer_stats_info)
{
WMI_PEER_STATS_INFO_EVENTID_param_tlvs *param_buf;
int i, j;
param_buf = (WMI_PEER_STATS_INFO_EVENTID_param_tlvs *)evt_buf;
if (index + peer_stats_info->num_tx_rate_counts <=
param_buf->num_tx_rate_counts) {
peer_stats_info->tx_pkt_per_mcs =
qdf_mem_malloc(
peer_stats_info->num_tx_rate_counts * sizeof(uint32_t));
if (!peer_stats_info->tx_pkt_per_mcs)
return QDF_STATUS_E_NOMEM;
wmi_debug("Tx rate counts");
for (j = 0, i = index; j < peer_stats_info->num_tx_rate_counts;
j++, i++) {
peer_stats_info->tx_pkt_per_mcs[j] =
param_buf->tx_rate_counts[i];
wmi_nofl_debug("MCS [%d] %d", j,
peer_stats_info->tx_pkt_per_mcs[j]);
}
} else {
wmi_err("invalid idx %d curr peer tx_rate_counts %d total tx_rate_count %d",
index, peer_stats_info->num_tx_rate_counts,
param_buf->num_tx_rate_counts);
}
return QDF_STATUS_SUCCESS;
}
/**
* extract_peer_rx_pkt_per_mcs_tlv() - extract peer rx rpackets per MCS
* from event
* @wmi_handle: wmi handle
* @evt_buf: pointer to event buffer
* @index: Index into vdev stats
* @peer_stats_info: Pointer to hold peer stats info
*
* Return: QDF_STATUS_SUCCESS for success or error code
*/
static QDF_STATUS
extract_peer_rx_pkt_per_mcs_tlv(wmi_unified_t wmi_handle, void *evt_buf,
uint32_t index,
wmi_host_peer_stats_info *peer_stats_info)
{
WMI_PEER_STATS_INFO_EVENTID_param_tlvs *param_buf;
int i, j;
param_buf = (WMI_PEER_STATS_INFO_EVENTID_param_tlvs *)evt_buf;
if (index + peer_stats_info->num_rx_rate_counts <=
param_buf->num_rx_rate_counts) {
peer_stats_info->rx_pkt_per_mcs =
qdf_mem_malloc(
peer_stats_info->num_rx_rate_counts * sizeof(uint32_t));
if (!peer_stats_info->rx_pkt_per_mcs)
return QDF_STATUS_E_NOMEM;
wmi_debug("Rx rate counts");
for (j = 0, i = index; j < peer_stats_info->num_rx_rate_counts;
j++, i++) {
peer_stats_info->rx_pkt_per_mcs[j] =
param_buf->rx_rate_counts[i];
wmi_nofl_debug("MCS [%d] %d", j,
peer_stats_info->rx_pkt_per_mcs[j]);
}
} else {
wmi_err("invalid idx %d curr peer rx_rate_counts %d total rx_rate_count %d",
index, peer_stats_info->num_rx_rate_counts,
param_buf->num_rx_rate_counts);
}
return QDF_STATUS_SUCCESS;
}
/**
* extract_peer_stats_info_tlv() - extract peer stats info from event
* @wmi_handle: wmi handle
@@ -419,6 +508,8 @@ extract_peer_stats_info_tlv(wmi_unified_t wmi_handle, void *evt_buf,
for (i = 0; i < WMI_MAX_CHAINS; i++)
peer_stats_info->peer_rssi_per_chain[i] =
ev->peer_rssi_per_chain[i];
peer_stats_info->num_tx_rate_counts = ev->num_tx_rate_counts;
peer_stats_info->num_rx_rate_counts = ev->num_rx_rate_counts;
}
return QDF_STATUS_SUCCESS;
@@ -497,5 +588,9 @@ void wmi_mc_cp_stats_attach_tlv(wmi_unified_t wmi_handle)
send_request_peer_stats_info_cmd_tlv;
ops->extract_peer_stats_count = extract_peer_stats_count_tlv;
ops->extract_peer_stats_info = extract_peer_stats_info_tlv;
wmi_handle->ops->extract_peer_tx_pkt_per_mcs =
extract_peer_tx_pkt_per_mcs_tlv;
wmi_handle->ops->extract_peer_rx_pkt_per_mcs =
extract_peer_rx_pkt_per_mcs_tlv;
wmi_attach_big_data_stats_handler(ops);
}