From 517a871bbbe7d9eb4a732a3439b4835f70514be9 Mon Sep 17 00:00:00 2001 From: Sivashankari Madhavan Date: Wed, 7 Sep 2022 15:02:06 +0530 Subject: [PATCH] ath11k: Add the green AP enabling set command support Enable/Disable the Green AP based on SUPPORTS_AP_PS bit set under the supports_ap_ps hw param. In ath11k this hw param is not supported. Now added supports_ap_ps hw_param under ipq9574 for support iw set command for enable Green AP in ath11k. root@OpenWrt:/# iw wlan0 set ap_ps 0 EXTMSG [0x00000000 00000000] SSID[4528] wlan_dev.c Line[0496]: GreenAP Curr Chainmask: 15/15, Phy_mode: 21, bw[20/40/80/160]: 0 EXTMSG [0x00000000 00000000] SSID[4528] wlan_dev.c Line[0498]: GreenAP saved tx/rx chainmask: 15/15, phymode: 21, freq1: 2462, 0 root@OpenWrt:/# iw wlan0 set ap_ps 1 EXTMSG [0x00000000 00000000] SSID[4528] wlan_dev.c Line[0496]: GreenAP Curr Chainmask: 1/1, Phy_mode: 1, bw[20/40/80/160]: 0 EXTMSG [0x00000000 00000000] SSID[4528] wlan_dev.c Line[0498]: GreenAP saved tx/rx chainmask: 15/15, phymode: 21, freq1: 2462, 9 Signed-off-by: Sivashankari Madhavan --- drivers/net/wireless/ath/ath11k/core.c | 1 + drivers/net/wireless/ath/ath11k/hw.h | 1 + drivers/net/wireless/ath/ath11k/mac.c | 8 ++++++++ 3 files changed, 10 insertions(+) diff --git a/drivers/net/wireless/ath/ath11k/core.c b/drivers/net/wireless/ath/ath11k/core.c index 22225b2..d093004 100644 --- a/drivers/net/wireless/ath/ath11k/core.c +++ b/drivers/net/wireless/ath/ath11k/core.c @@ -768,6 +768,7 @@ static const struct ath11k_hw_params ath11k_hw_params[] = { .wakeup_mhi = false, .reo_status_poll = false, .num_vdevs_peers = ath11k_vdevs_peers, + .supports_ap_ps = true, }, }; diff --git a/drivers/net/wireless/ath/ath11k/hw.h b/drivers/net/wireless/ath/ath11k/hw.h index 8bd2ac4..af1b70b 100644 --- a/drivers/net/wireless/ath/ath11k/hw.h +++ b/drivers/net/wireless/ath/ath11k/hw.h @@ -218,6 +218,7 @@ struct ath11k_hw_params { u32 hal_desc_sz; bool supports_regdb; bool fix_l1ss; + bool supports_ap_ps; bool credit_flow; u8 max_tx_ring; const struct ath11k_hw_hal_params *hal_params; diff --git a/drivers/net/wireless/ath/ath11k/mac.c b/drivers/net/wireless/ath/ath11k/mac.c index 38b82be..3f31373 100644 --- a/drivers/net/wireless/ath/ath11k/mac.c +++ b/drivers/net/wireless/ath/ath11k/mac.c @@ -4050,6 +4050,11 @@ static void ath11k_mac_op_bss_info_changed(struct ieee80211_hw *hw, if (changed & BSS_CHANGED_FILS_DISCOVERY || changed & BSS_CHANGED_UNSOL_BCAST_PROBE_RESP) ath11k_mac_fils_discovery(arvif, info); + + if ((changed & BSS_CHANGED_PS) && vif->type == NL80211_IFTYPE_AP) { + ar->ap_ps_enabled = info->ap_ps_enable; + ath11k_mac_ap_ps_recalc(ar); + } mutex_unlock(&ar->conf_mutex); } @@ -12151,6 +12156,9 @@ static int __ath11k_mac_register(struct ath11k *ar) if (ab->hw_params.single_pdev_only && ar->supports_6ghz) ieee80211_hw_set(ar->hw, SINGLE_SCAN_ON_ALL_BANDS); + + if (ab->hw_params.supports_ap_ps) + ieee80211_hw_set(ar->hw, SUPPORTS_AP_PS); ieee80211_hw_set(ar->hw, SIGNAL_DBM); ieee80211_hw_set(ar->hw, SUPPORTS_PS); -- 2.17.1