Commit 5ec69129 authored by Po-Hao Huang's avatar Po-Hao Huang Committed by Kalle Valo
Browse files

wifi: rtw88: disallow PS during AP mode



Firmware can't support PS mode during AP mode, so disallow this case.

Signed-off-by: default avatarPo-Hao Huang <phhuang@realtek.com>
Signed-off-by: default avatarPing-Ke Shih <pkshih@realtek.com>
Signed-off-by: default avatarKalle Valo <kvalo@kernel.org>
Link: https://lore.kernel.org/r/20230414121135.17828-5-pkshih@realtek.com
parent ffa71c54
Loading
Loading
Loading
Loading
+13 −0
Original line number Diff line number Diff line
@@ -449,12 +449,24 @@ static int rtw_ops_start_ap(struct ieee80211_hw *hw,
	const struct rtw_chip_info *chip = rtwdev->chip;

	mutex_lock(&rtwdev->mutex);
	rtwdev->ap_active = true;
	chip->ops->phy_calibration(rtwdev);
	mutex_unlock(&rtwdev->mutex);

	return 0;
}

static void rtw_ops_stop_ap(struct ieee80211_hw *hw,
			    struct ieee80211_vif *vif,
			    struct ieee80211_bss_conf *link_conf)
{
	struct rtw_dev *rtwdev = hw->priv;

	mutex_lock(&rtwdev->mutex);
	rtwdev->ap_active = false;
	mutex_unlock(&rtwdev->mutex);
}

static int rtw_ops_conf_tx(struct ieee80211_hw *hw,
			   struct ieee80211_vif *vif,
			   unsigned int link_id, u16 ac,
@@ -916,6 +928,7 @@ const struct ieee80211_ops rtw_ops = {
	.configure_filter	= rtw_ops_configure_filter,
	.bss_info_changed	= rtw_ops_bss_info_changed,
	.start_ap		= rtw_ops_start_ap,
	.stop_ap		= rtw_ops_stop_ap,
	.conf_tx		= rtw_ops_conf_tx,
	.sta_add		= rtw_ops_sta_add,
	.sta_remove		= rtw_ops_sta_remove,
+1 −1
Original line number Diff line number Diff line
@@ -257,7 +257,7 @@ static void rtw_watch_dog_work(struct work_struct *work)
	 * threshold.
	 */
	if (rtwdev->ps_enabled && data.rtwvif && !ps_active &&
	    !rtwdev->beacon_loss)
	    !rtwdev->beacon_loss && !rtwdev->ap_active)
		rtw_enter_lps(rtwdev, data.rtwvif->port);

	rtwdev->watch_dog_cnt++;
+1 −0
Original line number Diff line number Diff line
@@ -2058,6 +2058,7 @@ struct rtw_dev {

	bool need_rfk;
	struct completion fw_scan_density;
	bool ap_active;

	/* hci related data, must be last */
	u8 priv[] __aligned(sizeof(void *));