qcacld-3.0: Enhance congestion report

Enhance congestion report by pdev extend stats.

Change-Id: Ica61112f95e6264db5b46db807e1f5df04b26c98
CRs-Fixed: 3234080
This commit is contained in:
Paul Zhang
2021-06-24 15:48:53 +08:00
committed by Madan Koyyalamudi
parent 45cfd4b5fc
commit 25e3dfc1ee
6 changed files with 153 additions and 38 deletions

View File

@@ -340,6 +340,8 @@ static void target_if_cp_stats_free_stats_event(struct stats_event *ev)
{
qdf_mem_free(ev->pdev_stats);
ev->pdev_stats = NULL;
qdf_mem_free(ev->pdev_extd_stats);
ev->pdev_extd_stats = NULL;
qdf_mem_free(ev->peer_stats);
ev->peer_stats = NULL;
qdf_mem_free(ev->peer_adv_stats);
@@ -402,16 +404,7 @@ static QDF_STATUS target_if_cp_stats_extract_pdev_stats(
*/
ev->pdev_stats[i].max_pwr = pdev_stats->chan_tx_pwr >> 1;
/*
* if pdev_stats->pdev_id is 0, then the event contains all
* pdev info, else only contains 1 pdev with pdev id set.
* minus 1: align fw pdev_id and driver
*/
if (pdev_stats->pdev_id)
ev->pdev_stats[i].pdev_id = pdev_stats->pdev_id - 1;
else
ev->pdev_stats[i].pdev_id = i;
ev->pdev_stats[i].pdev_id = pdev_stats->pdev_id;
ev->pdev_stats[i].rx_clear_count = pdev_stats->rx_clear_count;
ev->pdev_stats[i].tx_frame_count = pdev_stats->tx_frame_count;
ev->pdev_stats[i].cycle_count = pdev_stats->cycle_count;
@@ -456,6 +449,55 @@ static QDF_STATUS target_if_cp_stats_extract_pmf_bcn_protect_stats(
return QDF_STATUS_SUCCESS;
}
static QDF_STATUS
target_if_cp_stats_extract_pdev_extd_stats(struct wmi_unified *wmi_hdl,
wmi_host_stats_event *stats_param,
struct stats_event *ev,
uint8_t *data)
{
uint32_t i;
QDF_STATUS status;
wmi_host_pdev_ext_stats *pdev_extd_stats;
if (!(stats_param->stats_id & WMI_REQUEST_PDEV_EXTD_STAT))
return QDF_STATUS_SUCCESS;
ev->pdev_extd_stats = qdf_mem_malloc(sizeof(*ev->pdev_extd_stats) *
WLAN_UMAC_MAX_RP_PID);
if (!ev->pdev_extd_stats)
return QDF_STATUS_E_NOMEM;
pdev_extd_stats = qdf_mem_malloc(sizeof(*pdev_extd_stats));
if (!pdev_extd_stats)
return QDF_STATUS_E_NOMEM;
ev->num_pdev_extd_stats = 0;
for (i = 0; i < stats_param->num_pdev_ext_stats; i++) {
qdf_mem_set(pdev_extd_stats, sizeof(*pdev_extd_stats), 0);
status = wmi_extract_pdev_ext_stats(wmi_hdl, data, i,
pdev_extd_stats);
if (QDF_IS_STATUS_ERROR(status)) {
qdf_mem_free(pdev_extd_stats);
cp_stats_err("wmi_extract_pdev_ext_stats failed");
return status;
}
ev->num_pdev_extd_stats++;
ev->pdev_extd_stats[i].pdev_id =
pdev_extd_stats->pdev_id;
ev->pdev_extd_stats[i].my_rx_count =
pdev_extd_stats->my_rx_count;
ev->pdev_extd_stats[i].rx_matched_11ax_msdu_cnt =
pdev_extd_stats->rx_matched_11ax_msdu_cnt;
ev->pdev_extd_stats[i].rx_other_11ax_msdu_cnt =
pdev_extd_stats->rx_other_11ax_msdu_cnt;
}
qdf_mem_free(pdev_extd_stats);
return QDF_STATUS_SUCCESS;
}
static void target_if_cp_stats_extract_peer_extd_stats(
struct wmi_unified *wmi_hdl,
wmi_host_stats_event *stats_param,
@@ -858,6 +900,13 @@ static QDF_STATUS target_if_cp_stats_extract_event(struct wmi_unified *wmi_hdl,
status = target_if_cp_stats_extract_pmf_bcn_protect_stats(wmi_hdl,
&stats_param,
ev, data);
if (QDF_IS_STATUS_ERROR(status))
return status;
status = target_if_cp_stats_extract_pdev_extd_stats(wmi_hdl,
&stats_param,
ev, data);
return status;
}
@@ -1428,8 +1477,9 @@ static uint32_t get_stats_id(enum stats_req_type type)
default:
break;
case TYPE_CONNECTION_TX_POWER:
case TYPE_CONGESTION_STATS:
return WMI_REQUEST_PDEV_STAT;
case TYPE_CONGESTION_STATS:
return WMI_REQUEST_PDEV_STAT | WMI_REQUEST_PDEV_EXTD_STAT;
case TYPE_PEER_STATS:
return WMI_REQUEST_PEER_STAT | WMI_REQUEST_PEER_EXTD_STAT;
case TYPE_STATION_STATS: