qcacmn: Add ini to control rate filter for rx avg

Adds ini field to control the filter for rx avg rate calculation.
	0     : Filter Disabled
	11000 : Max rate filter (in kbps) supported for filter

Change-Id: I6ae88b7af3d4c1fae033101e77b308949e5b3d1e
CRs-Fixed: 3628056
This commit is contained in:
Aman Mehta
2023-08-30 18:07:19 +05:30
committed by Ravindra Konda
parent f92a6676c0
commit 37e5a76c07
4 changed files with 54 additions and 4 deletions

View File

@@ -661,6 +661,33 @@ end:
dp_rx_populate_cfr_non_assoc_sta(pdev, ppdu_info, cdp_rx_ppdu);
}
/*
* dp_mon_eval_avg_rate_filter() - Evaluates rate value against filter
* @peer: dp peer
* @ratekbps: last packet rate in kbps
* @avg_rate: average rate for which new rate is to be evaluated
*
* Return: true when average need to be evaluated else false
*/
static inline bool
dp_mon_eval_avg_rate_filter(struct dp_peer *peer, uint32_t ratekbps,
uint32_t avg_rate) {
uint16_t filter_val = 0;
if (qdf_unlikely(!peer || !peer->vdev ||
!peer->vdev->pdev->soc->wlan_cfg_ctx)) {
return true;
}
filter_val =
peer->vdev->pdev->soc->wlan_cfg_ctx->avg_rate_stats_filter_val;
if (!filter_val || avg_rate < filter_val || ratekbps > filter_val) {
return true;
}
return false;
}
/**
* dp_rx_rate_stats_update() - Update per-peer rate statistics
* @peer: Datapath peer handle
@@ -736,8 +763,12 @@ static inline void dp_rx_rate_stats_update(struct dp_peer *peer,
ppdu->rix = rix;
ppdu_user->rix = rix;
DP_STATS_UPD(mon_peer, rx.last_rx_rate, ratekbps);
mon_peer->stats.rx.avg_rx_rate =
dp_ath_rate_lpf(mon_peer->stats.rx.avg_rx_rate, ratekbps);
if (qdf_unlikely(dp_mon_eval_avg_rate_filter(peer, ratekbps,
mon_peer->stats.rx.avg_rx_rate))) {
mon_peer->stats.rx.avg_rx_rate =
dp_ath_rate_lpf(mon_peer->stats.rx.avg_rx_rate,
ratekbps);
}
ppdu_rx_rate = dp_ath_rate_out(mon_peer->stats.rx.avg_rx_rate);
DP_STATS_UPD(mon_peer, rx.rnd_avg_rx_rate, ppdu_rx_rate);
ppdu->rx_ratekbps = ratekbps;