diff --git a/dp/wifi3.0/dp_internal.h b/dp/wifi3.0/dp_internal.h index 3bb881ca63..46729a99a2 100644 --- a/dp/wifi3.0/dp_internal.h +++ b/dp/wifi3.0/dp_internal.h @@ -23,6 +23,15 @@ #define RX_BUFFER_SIZE_PKTLOG_LITE 1024 + +#define DP_RSSI_AVG_WEIGHT 2 +/* + * Formula to derive avg_rssi is taken from wifi2.o firmware + */ +#define DP_GET_AVG_RSSI(avg_rssi, last_rssi) \ + (((avg_rssi) - (((uint8_t)(avg_rssi)) >> DP_RSSI_AVG_WEIGHT)) \ + + ((((uint8_t)(last_rssi)) >> DP_RSSI_AVG_WEIGHT))) + /* Macro For NYSM value received in VHT TLV */ #define VHT_SGI_NYSM 3 diff --git a/dp/wifi3.0/dp_rx_mon_status.c b/dp/wifi3.0/dp_rx_mon_status.c index 485a00bf40..2e871da09e 100644 --- a/dp/wifi3.0/dp_rx_mon_status.c +++ b/dp/wifi3.0/dp_rx_mon_status.c @@ -199,6 +199,11 @@ static void dp_rx_stats_update(struct dp_pdev *pdev, struct dp_peer *peer, return; DP_STATS_UPD(peer, rx.rssi, ppdu->rssi); + if (!peer->stats.rx.avg_rssi) + peer->stats.rx.avg_rssi = ppdu->rssi; + else + peer->stats.rx.avg_rssi = + DP_GET_AVG_RSSI(peer->stats.rx.avg_rssi, ppdu->rssi); if ((preamble == DOT11_A) || (preamble == DOT11_B)) ppdu->u.nss = 1;