Search Linux Wireless

[PATCH] mac80211: don't always advertise remain-on-channel

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



From: Johannes Berg <johannes.berg@xxxxxxxxx>

Not all devices are really capable of implementing
remain-on-channel, even if it is implemented in SW,
as they can't necessarily deal with channel changes
while associated.

Remove the WIPHY_FLAG_HAS_REMAIN_ON_CHANNEL and add
it only if either the driver has remain_on_channel
implemented in the driver/device.

Also add it to all drivers that advertise P2P right
now since those definitely have to have it working.

Signed-off-by: Johannes Berg <johannes.berg@xxxxxxxxx>
---
I think e.g. wl1251 would completely get fucked up by this .. let's not
go there. Also iwlegacy wouldn't like offchannel much, and doesn't need
it since it'll never have P2P anyway.

Since we don't need offchannel any more for "real" operation (auth/assoc
used to use it) we should clean this up too.

 drivers/net/wireless/ath/ath9k/htc_drv_init.c |    3 ++-
 drivers/net/wireless/ath/ath9k/init.c         |    1 +
 drivers/net/wireless/ath/carl9170/fw.c        |    2 ++
 drivers/net/wireless/mac80211_hwsim.c         |    3 ++-
 drivers/net/wireless/wl12xx/main.c            |    3 ++-
 net/mac80211/main.c                           |    6 ++++--
 6 files changed, 13 insertions(+), 5 deletions(-)

--- a/net/mac80211/main.c	2012-03-26 18:41:42.000000000 +0200
+++ b/net/mac80211/main.c	2012-03-26 18:41:43.000000000 +0200
@@ -560,8 +560,10 @@ struct ieee80211_hw *ieee80211_alloc_hw(
 			WIPHY_FLAG_4ADDR_AP |
 			WIPHY_FLAG_4ADDR_STATION |
 			WIPHY_FLAG_REPORTS_OBSS |
-			WIPHY_FLAG_OFFCHAN_TX |
-			WIPHY_FLAG_HAS_REMAIN_ON_CHANNEL;
+			WIPHY_FLAG_OFFCHAN_TX;
+
+	if (ops->remain_on_channel)
+		wiphy->flags |= WIPHY_FLAG_HAS_REMAIN_ON_CHANNEL;
 
 	wiphy->features = NL80211_FEATURE_SK_TX_STATUS |
 			  NL80211_FEATURE_HT_IBSS;
--- a/drivers/net/wireless/ath/ath9k/htc_drv_init.c	2012-03-26 18:41:42.000000000 +0200
+++ b/drivers/net/wireless/ath/ath9k/htc_drv_init.c	2012-03-26 18:41:43.000000000 +0200
@@ -711,7 +711,8 @@ static void ath9k_set_hw_capab(struct at
 
 	hw->wiphy->flags &= ~WIPHY_FLAG_PS_ON_BY_DEFAULT;
 
-	hw->wiphy->flags |= WIPHY_FLAG_IBSS_RSN;
+	hw->wiphy->flags |= WIPHY_FLAG_IBSS_RSN |
+			    WIPHY_FLAG_HAS_REMAIN_ON_CHANNEL;
 
 	hw->queues = 4;
 	hw->channel_change_time = 5000;
--- a/drivers/net/wireless/ath/ath9k/init.c	2012-03-26 18:41:42.000000000 +0200
+++ b/drivers/net/wireless/ath/ath9k/init.c	2012-03-26 18:41:43.000000000 +0200
@@ -676,6 +676,7 @@ void ath9k_set_hw_capab(struct ath_softc
 
 	hw->wiphy->flags |= WIPHY_FLAG_IBSS_RSN;
 	hw->wiphy->flags |= WIPHY_FLAG_SUPPORTS_TDLS;
+	hw->wiphy->flags |= WIPHY_FLAG_HAS_REMAIN_ON_CHANNEL;
 
 	hw->queues = 4;
 	hw->max_rates = 4;
--- a/drivers/net/wireless/ath/carl9170/fw.c	2012-03-26 18:41:42.000000000 +0200
+++ b/drivers/net/wireless/ath/carl9170/fw.c	2012-03-26 18:41:43.000000000 +0200
@@ -355,6 +355,8 @@ static int carl9170_fw(struct ar9170 *ar
 
 	ar->hw->wiphy->interface_modes |= if_comb_types;
 
+	ar->hw->wiphy->flags |= WIPHY_FLAG_HAS_REMAIN_ON_CHANNEL;
+
 #undef SUPPORTED
 	return carl9170_fw_tx_sequence(ar);
 }
--- a/drivers/net/wireless/wl12xx/main.c	2012-03-26 18:41:42.000000000 +0200
+++ b/drivers/net/wireless/wl12xx/main.c	2012-03-26 18:41:43.000000000 +0200
@@ -5242,7 +5242,8 @@ static int wl1271_init_ieee80211(struct
 	wl->hw->wiphy->max_sched_scan_ie_len = WL1271_CMD_TEMPL_MAX_SIZE -
 		sizeof(struct ieee80211_header);
 
-	wl->hw->wiphy->flags |= WIPHY_FLAG_AP_UAPSD;
+	wl->hw->wiphy->flags |= WIPHY_FLAG_AP_UAPSD |
+				WIPHY_FLAG_HAS_REMAIN_ON_CHANNEL;
 
 	/* make sure all our channels fit in the scanned_ch bitmask */
 	BUILD_BUG_ON(ARRAY_SIZE(wl1271_channels) +
--- a/drivers/net/wireless/mac80211_hwsim.c	2012-03-26 18:41:42.000000000 +0200
+++ b/drivers/net/wireless/mac80211_hwsim.c	2012-03-26 18:41:43.000000000 +0200
@@ -1791,7 +1791,8 @@ static int __init init_mac80211_hwsim(vo
 			    IEEE80211_HW_SUPPORTS_DYNAMIC_SMPS |
 			    IEEE80211_HW_AMPDU_AGGREGATION;
 
-		hw->wiphy->flags |= WIPHY_FLAG_SUPPORTS_TDLS;
+		hw->wiphy->flags |= WIPHY_FLAG_SUPPORTS_TDLS |
+				    WIPHY_FLAG_HAS_REMAIN_ON_CHANNEL;
 
 		/* ask mac80211 to reserve space for magic */
 		hw->vif_data_size = sizeof(struct hwsim_vif_priv);


--
To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux Host AP]     [ATH6KL]     [Linux Wireless Personal Area Network]     [Linux Bluetooth]     [Linux Netdev]     [Kernel Newbies]     [Linux Kernel]     [IDE]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite Hiking]     [MIPS Linux]     [ARM Linux]     [Linux RAID]

  Powered by Linux