Bläddra i källkod

Merge tag 'master-2014-09-04' of git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless

John W. Linville says:

====================
pull request: wireless 2014-09-05

Please pull this batch of fixes intended for the 3.17 stream...

For the mac80211 bits, Johannes says:

"Here are a few fixes for mac80211. One has been discussed for a while
and adds a terminating NUL-byte to the alpha2 sent to userspace, which
shouldn't be necessary but since many places treat it as a string we
couldn't move to just sending two bytes.

In addition to that, we have two VLAN fixes from Felix, a mesh fix, a
fix for the recently introduced RX aggregation offload, a revert for
a broken patch (that luckily didn't really cause any harm) and a small
fix for alignment in debugfs."

For the iwlwifi bits, Emmanuel says:

"I revert a patch that disabled CTS to self in dvm because users
reported issues. The revert is CCed to stable since the offending
patch was sent to stable too. I also bump the firmware API versions
since a new firmware is coming up. On top of that, Marcel fixes a
bug I introduced while fixing a bug in our Kconfig file."

Please let me know if there are problems!
====================

Signed-off-by: David S. Miller <davem@davemloft.net>
David S. Miller 11 år sedan
förälder
incheckning
45ce829dd0

+ 0 - 2
drivers/net/wireless/iwlwifi/Kconfig

@@ -51,7 +51,6 @@ config IWLWIFI_LEDS
 
 
 config IWLDVM
 config IWLDVM
 	tristate "Intel Wireless WiFi DVM Firmware support"
 	tristate "Intel Wireless WiFi DVM Firmware support"
-	depends on m
 	default IWLWIFI
 	default IWLWIFI
 	help
 	help
 	  This is the driver that supports the DVM firmware which is
 	  This is the driver that supports the DVM firmware which is
@@ -60,7 +59,6 @@ config IWLDVM
 
 
 config IWLMVM
 config IWLMVM
 	tristate "Intel Wireless WiFi MVM Firmware support"
 	tristate "Intel Wireless WiFi MVM Firmware support"
-	depends on m
 	help
 	help
 	  This is the driver that supports the MVM firmware which is
 	  This is the driver that supports the MVM firmware which is
 	  currently only available for 7260 and 3160 devices.
 	  currently only available for 7260 and 3160 devices.

+ 12 - 0
drivers/net/wireless/iwlwifi/dvm/rxon.c

@@ -1068,6 +1068,13 @@ int iwlagn_commit_rxon(struct iwl_priv *priv, struct iwl_rxon_context *ctx)
 	/* recalculate basic rates */
 	/* recalculate basic rates */
 	iwl_calc_basic_rates(priv, ctx);
 	iwl_calc_basic_rates(priv, ctx);
 
 
+	/*
+	 * force CTS-to-self frames protection if RTS-CTS is not preferred
+	 * one aggregation protection method
+	 */
+	if (!priv->hw_params.use_rts_for_aggregation)
+		ctx->staging.flags |= RXON_FLG_SELF_CTS_EN;
+
 	if ((ctx->vif && ctx->vif->bss_conf.use_short_slot) ||
 	if ((ctx->vif && ctx->vif->bss_conf.use_short_slot) ||
 	    !(ctx->staging.flags & RXON_FLG_BAND_24G_MSK))
 	    !(ctx->staging.flags & RXON_FLG_BAND_24G_MSK))
 		ctx->staging.flags |= RXON_FLG_SHORT_SLOT_MSK;
 		ctx->staging.flags |= RXON_FLG_SHORT_SLOT_MSK;
@@ -1473,6 +1480,11 @@ void iwlagn_bss_info_changed(struct ieee80211_hw *hw,
 	else
 	else
 		ctx->staging.flags &= ~RXON_FLG_TGG_PROTECT_MSK;
 		ctx->staging.flags &= ~RXON_FLG_TGG_PROTECT_MSK;
 
 
+	if (bss_conf->use_cts_prot)
+		ctx->staging.flags |= RXON_FLG_SELF_CTS_EN;
+	else
+		ctx->staging.flags &= ~RXON_FLG_SELF_CTS_EN;
+
 	memcpy(ctx->staging.bssid_addr, bss_conf->bssid, ETH_ALEN);
 	memcpy(ctx->staging.bssid_addr, bss_conf->bssid, ETH_ALEN);
 
 
 	if (vif->type == NL80211_IFTYPE_AP ||
 	if (vif->type == NL80211_IFTYPE_AP ||

+ 2 - 2
drivers/net/wireless/iwlwifi/iwl-7000.c

@@ -67,8 +67,8 @@
 #include "iwl-agn-hw.h"
 #include "iwl-agn-hw.h"
 
 
 /* Highest firmware API version supported */
 /* Highest firmware API version supported */
-#define IWL7260_UCODE_API_MAX	9
-#define IWL3160_UCODE_API_MAX	9
+#define IWL7260_UCODE_API_MAX	10
+#define IWL3160_UCODE_API_MAX	10
 
 
 /* Oldest version we won't warn about */
 /* Oldest version we won't warn about */
 #define IWL7260_UCODE_API_OK	9
 #define IWL7260_UCODE_API_OK	9

+ 1 - 1
drivers/net/wireless/iwlwifi/iwl-8000.c

@@ -67,7 +67,7 @@
 #include "iwl-agn-hw.h"
 #include "iwl-agn-hw.h"
 
 
 /* Highest firmware API version supported */
 /* Highest firmware API version supported */
-#define IWL8000_UCODE_API_MAX	9
+#define IWL8000_UCODE_API_MAX	10
 
 
 /* Oldest version we won't warn about */
 /* Oldest version we won't warn about */
 #define IWL8000_UCODE_API_OK	8
 #define IWL8000_UCODE_API_OK	8

+ 1 - 1
include/net/regulatory.h

@@ -167,7 +167,7 @@ struct ieee80211_reg_rule {
 struct ieee80211_regdomain {
 struct ieee80211_regdomain {
 	struct rcu_head rcu_head;
 	struct rcu_head rcu_head;
 	u32 n_reg_rules;
 	u32 n_reg_rules;
-	char alpha2[2];
+	char alpha2[3];
 	enum nl80211_dfs_regions dfs_region;
 	enum nl80211_dfs_regions dfs_region;
 	struct ieee80211_reg_rule reg_rules[];
 	struct ieee80211_reg_rule reg_rules[];
 };
 };

+ 2 - 0
net/mac80211/chan.c

@@ -541,6 +541,8 @@ static void ieee80211_recalc_chanctx_chantype(struct ieee80211_local *local,
 			continue;
 			continue;
 		if (rcu_access_pointer(sdata->vif.chanctx_conf) != conf)
 		if (rcu_access_pointer(sdata->vif.chanctx_conf) != conf)
 			continue;
 			continue;
+		if (sdata->vif.type == NL80211_IFTYPE_AP_VLAN)
+			continue;
 
 
 		if (!compat)
 		if (!compat)
 			compat = &sdata->vif.bss_conf.chandef;
 			compat = &sdata->vif.bss_conf.chandef;

+ 1 - 1
net/mac80211/debugfs_sta.c

@@ -167,7 +167,7 @@ static ssize_t sta_agg_status_read(struct file *file, char __user *userbuf,
 	p += scnprintf(p, sizeof(buf) + buf - p, "next dialog_token: %#02x\n",
 	p += scnprintf(p, sizeof(buf) + buf - p, "next dialog_token: %#02x\n",
 			sta->ampdu_mlme.dialog_token_allocator + 1);
 			sta->ampdu_mlme.dialog_token_allocator + 1);
 	p += scnprintf(p, sizeof(buf) + buf - p,
 	p += scnprintf(p, sizeof(buf) + buf - p,
-		       "TID\t\tRX active\tDTKN\tSSN\t\tTX\tDTKN\tpending\n");
+		       "TID\t\tRX\tDTKN\tSSN\t\tTX\tDTKN\tpending\n");
 
 
 	for (i = 0; i < IEEE80211_NUM_TIDS; i++) {
 	for (i = 0; i < IEEE80211_NUM_TIDS; i++) {
 		tid_rx = rcu_dereference(sta->ampdu_mlme.tid_rx[i]);
 		tid_rx = rcu_dereference(sta->ampdu_mlme.tid_rx[i]);

+ 2 - 2
net/mac80211/iface.c

@@ -1175,8 +1175,8 @@ static void ieee80211_iface_work(struct work_struct *work)
 			if (sta) {
 			if (sta) {
 				u16 last_seq;
 				u16 last_seq;
 
 
-				last_seq = le16_to_cpu(
-					sta->last_seq_ctrl[rx_agg->tid]);
+				last_seq = IEEE80211_SEQ_TO_SN(le16_to_cpu(
+					sta->last_seq_ctrl[rx_agg->tid]));
 
 
 				__ieee80211_start_rx_ba_session(sta,
 				__ieee80211_start_rx_ba_session(sta,
 						0, 0,
 						0, 0,

+ 6 - 1
net/mac80211/mesh_plink.c

@@ -959,7 +959,8 @@ mesh_plink_get_event(struct ieee80211_sub_if_data *sdata,
 		if (!matches_local)
 		if (!matches_local)
 			event = CNF_RJCT;
 			event = CNF_RJCT;
 		if (!mesh_plink_free_count(sdata) ||
 		if (!mesh_plink_free_count(sdata) ||
-		    (sta->llid != llid || sta->plid != plid))
+		    sta->llid != llid ||
+		    (sta->plid && sta->plid != plid))
 			event = CNF_IGNR;
 			event = CNF_IGNR;
 		else
 		else
 			event = CNF_ACPT;
 			event = CNF_ACPT;
@@ -1080,6 +1081,10 @@ mesh_process_plink_frame(struct ieee80211_sub_if_data *sdata,
 		goto unlock_rcu;
 		goto unlock_rcu;
 	}
 	}
 
 
+	/* 802.11-2012 13.3.7.2 - update plid on CNF if not set */
+	if (!sta->plid && event == CNF_ACPT)
+		sta->plid = plid;
+
 	changed |= mesh_plink_fsm(sdata, sta, event);
 	changed |= mesh_plink_fsm(sdata, sta, event);
 
 
 unlock_rcu:
 unlock_rcu:

+ 1 - 2
net/mac80211/mlme.c

@@ -4376,8 +4376,7 @@ int ieee80211_mgd_assoc(struct ieee80211_sub_if_data *sdata,
 	rcu_read_unlock();
 	rcu_read_unlock();
 
 
 	if (bss->wmm_used && bss->uapsd_supported &&
 	if (bss->wmm_used && bss->uapsd_supported &&
-	    (sdata->local->hw.flags & IEEE80211_HW_SUPPORTS_UAPSD) &&
-	    sdata->wmm_acm != 0xff) {
+	    (sdata->local->hw.flags & IEEE80211_HW_SUPPORTS_UAPSD)) {
 		assoc_data->uapsd = true;
 		assoc_data->uapsd = true;
 		ifmgd->flags |= IEEE80211_STA_UAPSD_ENABLED;
 		ifmgd->flags |= IEEE80211_STA_UAPSD_ENABLED;
 	} else {
 	} else {

+ 5 - 2
net/mac80211/sta_info.c

@@ -1094,8 +1094,11 @@ void ieee80211_sta_ps_deliver_wakeup(struct sta_info *sta)
 	unsigned long flags;
 	unsigned long flags;
 	struct ps_data *ps;
 	struct ps_data *ps;
 
 
-	if (sdata->vif.type == NL80211_IFTYPE_AP ||
-	    sdata->vif.type == NL80211_IFTYPE_AP_VLAN)
+	if (sdata->vif.type == NL80211_IFTYPE_AP_VLAN)
+		sdata = container_of(sdata->bss, struct ieee80211_sub_if_data,
+				     u.ap);
+
+	if (sdata->vif.type == NL80211_IFTYPE_AP)
 		ps = &sdata->bss->ps;
 		ps = &sdata->bss->ps;
 	else if (ieee80211_vif_is_mesh(&sdata->vif))
 	else if (ieee80211_vif_is_mesh(&sdata->vif))
 		ps = &sdata->u.mesh.ps;
 		ps = &sdata->u.mesh.ps;