aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/ath/wcn36xx/main.c
diff options
context:
space:
mode:
authorBryan O'Donoghue <bryan.odonoghue@linaro.org>2021-06-05 02:11:31 +0100
committerKalle Valo <kvalo@codeaurora.org>2021-06-14 18:18:11 +0300
commit5478c41fce5dd6b751075856666a0f9a101c3dd2 (patch)
tree3bf3eeb4b474d880f581abea274a599b386f8a4b /drivers/net/wireless/ath/wcn36xx/main.c
parentwcn36xx: Run suspend for the first ieee80211_vif (diff)
downloadlinux-dev-5478c41fce5dd6b751075856666a0f9a101c3dd2.tar.xz
linux-dev-5478c41fce5dd6b751075856666a0f9a101c3dd2.zip
wcn36xx: Add ipv4 ARP offload support in suspend
Add ARP offload support. Firmware is capable of responding to ARP requests for a single ipv4 address only. Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org> Tested-by: Benjamin Li <benl@squareup.com> Signed-off-by: Kalle Valo <kvalo@codeaurora.org> Link: https://lore.kernel.org/r/20210605011140.2004643-4-bryan.odonoghue@linaro.org
Diffstat (limited to 'drivers/net/wireless/ath/wcn36xx/main.c')
-rw-r--r--drivers/net/wireless/ath/wcn36xx/main.c13
1 files changed, 10 insertions, 3 deletions
diff --git a/drivers/net/wireless/ath/wcn36xx/main.c b/drivers/net/wireless/ath/wcn36xx/main.c
index 9a97a288a96f..0da123660fa1 100644
--- a/drivers/net/wireless/ath/wcn36xx/main.c
+++ b/drivers/net/wireless/ath/wcn36xx/main.c
@@ -1112,11 +1112,16 @@ static int wcn36xx_suspend(struct ieee80211_hw *hw, struct cfg80211_wowlan *wow)
flush_workqueue(wcn->hal_ind_wq);
mutex_lock(&wcn->conf_mutex);
+
vif = wcn36xx_get_first_assoc_vif(wcn);
- if (vif)
+ if (vif) {
+ ret = wcn36xx_smd_arp_offload(wcn, vif, true);
+ if (ret)
+ goto out;
ret = wcn36xx_smd_set_power_params(wcn, true);
+ }
+out:
mutex_unlock(&wcn->conf_mutex);
-
return ret;
}
@@ -1130,8 +1135,10 @@ static int wcn36xx_resume(struct ieee80211_hw *hw)
flush_workqueue(wcn->hal_ind_wq);
mutex_lock(&wcn->conf_mutex);
vif = wcn36xx_get_first_assoc_vif(wcn);
- if (vif)
+ if (vif) {
wcn36xx_smd_set_power_params(wcn, false);
+ wcn36xx_smd_arp_offload(wcn, vif, false);
+ }
mutex_unlock(&wcn->conf_mutex);
return 0;