wifi: ath12k: add support of station average signal strength
PATCH v3 1/1 wifi: ath12k: add support of station average signal strength
This adds support for reporting to the kernel the average rssi. This is done the same way as it was done in ath11k. A simple ewma (with the same parameters) is updated with each rssi update.
Tested-on: QCN9274 hw2.0 PCI WLAN.WBE.1.3.1-00173-QCAHKSWPL_SILICONZ-1
---
v3:
- rebased on ToT
- now also handles db2dbm
v2: https://lore.kernel.org/ath12k/[email protected]/
- removed spurious exta new line at the beggining of core.h
v1: https://lore.kernel.org/ath12k/[email protected]/
- initial version
--- drivers/net/wireless/ath/ath12k/core.h | 4 ++++ drivers/net/wireless/ath/ath12k/dp_mon.c | 2 ++ drivers/net/wireless/ath/ath12k/mac.c | 8 ++++++++ 3 files changed, 14 insertions(+)
drivers/net/wireless/ath/ath12k/core.h +4 -0
@@ -15,6 +15,7 @@#include <linux/ctype.h> #include <linux/firmware.h> #include <linux/panic_notifier.h> +#include <linux/average.h> #include "qmi.h" #include "htc.h" #include "wmi.h"
@@ -480,6 +481,8 @@ struct ath12k_wbm_tx_stats {u64 wbm_tx_comp_stats[HAL_WBM_REL_HTT_TX_COMP_STATUS_MAX ]; }; +DECLARE_EWMA(avg_rssi, 10, 8) +struct ath12k_link_sta {struct ath12k_link_vif *arvif;struct ath12k_sta *ahsta;
@@ -499,6 +502,7 @@ struct ath12k_link_sta {u64 rx_duration;u64 tx_duration;u8 rssi_comb; +struct ewma_avg_rssi avg_rssi;u8 link_id;struct ath12k_rx_peer_stats *rx_stats;struct ath12k_wbm_tx_stats *wbm_tx_stats;
drivers/net/wireless/ath/ath12k/dp_mon.c +2 -0
@@ -2002,6 +2002,7 @@ static void ath12k_dp_mon_rx_update_peer_su_stats(struct ath12k *ar,return ; arsta->rssi_comb = ppdu_info->rssi_comb; +ewma_avg_rssi_add (&arsta->avg_rssi, ppdu_info->rssi_comb); num_msdu = ppdu_info->tcp_msdu_count + ppdu_info->tcp_ack_msdu_count + ppdu_info->udp_msdu_count + ppdu_info->other_msdu_count;
@@ -2174,6 +2175,7 @@ ath12k_dp_mon_rx_update_user_stats(struct ath12k *ar,return ; arsta->rssi_comb = ppdu_info->rssi_comb; +ewma_avg_rssi_add (&arsta->avg_rssi, ppdu_info->rssi_comb); num_msdu = user_stats->tcp_msdu_count + user_stats->tcp_ack_msdu_count + user_stats->udp_msdu_count + user_stats->other_msdu_count;
drivers/net/wireless/ath/ath12k/mac.c +8 -0
@@ -5484,6 +5484,7 @@ static int ath12k_mac_station_add(struct ath12k *ar, } } +ewma_avg_rssi_init (&arsta->avg_rssi);return 0 ; free_peer:
@@ -10200,6 +10201,13 @@ static void ath12k_mac_op_sta_statistics(struct ieee80211_hw *hw, sinfo->signal = db2dbm ? signal : signal +ATH12K_DEFAULT_NOISE_FLOOR ; sinfo->filled |=BIT_ULL (NL80211_STA_INFO_SIGNAL ); } + + sinfo->signal_avg =ewma_avg_rssi_read (&arsta->avg_rssi); + +if (!db2dbm) + sinfo->signal_avg +=ATH12K_DEFAULT_NOISE_FLOOR ; + + sinfo->filled |=BIT_ULL (NL80211_STA_INFO_SIGNAL_AVG ); } static int ath12k_mac_op_cancel_remain_on_channel(struct ieee80211_hw *hw,
Signature · 1 line
2.48.1
Quoted 8 lines · Nicolas Escande
This adds support for reporting to the kernel the average rssi. This is done the same way as it was done in ath11k. A simple ewma (with the same parameters) is updated with each rssi update.
Tested-on: QCN9274 hw2.0 PCI WLAN.WBE.1.3.1-00173-QCAHKSWPL_SILICONZ-1
Signed-off-by Nicolas Escande <[email protected]>---
Signature · 1 line
Aditya
Jeff Johnson
AppliedQuoted 8 lines · Nicolas Escande
This adds support for reporting to the kernel the average rssi. This is done the same way as it was done in ath11k. A simple ewma (with the same parameters) is updated with each rssi update.
Tested-on: QCN9274 hw2.0 PCI WLAN.WBE.1.3.1-00173-QCAHKSWPL_SILICONZ-1
[...]
Applied, thanks!
[1/1] wifi: ath12k: add support of station average signal strength
commit: cb53a6785ea5b0a14e7e5af4322bee3df266e949
Best regards,
Signature · 1 line
Jeff Johnson <[email protected]>