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>
This commit is contained in:
Коммит
45ce829dd0
|
@ -51,7 +51,6 @@ config IWLWIFI_LEDS
|
|||
|
||||
config IWLDVM
|
||||
tristate "Intel Wireless WiFi DVM Firmware support"
|
||||
depends on m
|
||||
default IWLWIFI
|
||||
help
|
||||
This is the driver that supports the DVM firmware which is
|
||||
|
@ -60,7 +59,6 @@ config IWLDVM
|
|||
|
||||
config IWLMVM
|
||||
tristate "Intel Wireless WiFi MVM Firmware support"
|
||||
depends on m
|
||||
help
|
||||
This is the driver that supports the MVM firmware which is
|
||||
currently only available for 7260 and 3160 devices.
|
||||
|
|
|
@ -1068,6 +1068,13 @@ int iwlagn_commit_rxon(struct iwl_priv *priv, struct iwl_rxon_context *ctx)
|
|||
/* recalculate basic rates */
|
||||
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) ||
|
||||
!(ctx->staging.flags & RXON_FLG_BAND_24G_MSK))
|
||||
ctx->staging.flags |= RXON_FLG_SHORT_SLOT_MSK;
|
||||
|
@ -1473,6 +1480,11 @@ void iwlagn_bss_info_changed(struct ieee80211_hw *hw,
|
|||
else
|
||||
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);
|
||||
|
||||
if (vif->type == NL80211_IFTYPE_AP ||
|
||||
|
|
|
@ -67,8 +67,8 @@
|
|||
#include "iwl-agn-hw.h"
|
||||
|
||||
/* 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 */
|
||||
#define IWL7260_UCODE_API_OK 9
|
||||
|
|
|
@ -67,7 +67,7 @@
|
|||
#include "iwl-agn-hw.h"
|
||||
|
||||
/* Highest firmware API version supported */
|
||||
#define IWL8000_UCODE_API_MAX 9
|
||||
#define IWL8000_UCODE_API_MAX 10
|
||||
|
||||
/* Oldest version we won't warn about */
|
||||
#define IWL8000_UCODE_API_OK 8
|
||||
|
|
|
@ -167,7 +167,7 @@ struct ieee80211_reg_rule {
|
|||
struct ieee80211_regdomain {
|
||||
struct rcu_head rcu_head;
|
||||
u32 n_reg_rules;
|
||||
char alpha2[2];
|
||||
char alpha2[3];
|
||||
enum nl80211_dfs_regions dfs_region;
|
||||
struct ieee80211_reg_rule reg_rules[];
|
||||
};
|
||||
|
|
|
@ -541,6 +541,8 @@ static void ieee80211_recalc_chanctx_chantype(struct ieee80211_local *local,
|
|||
continue;
|
||||
if (rcu_access_pointer(sdata->vif.chanctx_conf) != conf)
|
||||
continue;
|
||||
if (sdata->vif.type == NL80211_IFTYPE_AP_VLAN)
|
||||
continue;
|
||||
|
||||
if (!compat)
|
||||
compat = &sdata->vif.bss_conf.chandef;
|
||||
|
|
|
@ -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",
|
||||
sta->ampdu_mlme.dialog_token_allocator + 1);
|
||||
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++) {
|
||||
tid_rx = rcu_dereference(sta->ampdu_mlme.tid_rx[i]);
|
||||
|
|
|
@ -1175,8 +1175,8 @@ static void ieee80211_iface_work(struct work_struct *work)
|
|||
if (sta) {
|
||||
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,
|
||||
0, 0,
|
||||
|
|
|
@ -959,7 +959,8 @@ mesh_plink_get_event(struct ieee80211_sub_if_data *sdata,
|
|||
if (!matches_local)
|
||||
event = CNF_RJCT;
|
||||
if (!mesh_plink_free_count(sdata) ||
|
||||
(sta->llid != llid || sta->plid != plid))
|
||||
sta->llid != llid ||
|
||||
(sta->plid && sta->plid != plid))
|
||||
event = CNF_IGNR;
|
||||
else
|
||||
event = CNF_ACPT;
|
||||
|
@ -1080,6 +1081,10 @@ mesh_process_plink_frame(struct ieee80211_sub_if_data *sdata,
|
|||
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);
|
||||
|
||||
unlock_rcu:
|
||||
|
|
|
@ -4376,8 +4376,7 @@ int ieee80211_mgd_assoc(struct ieee80211_sub_if_data *sdata,
|
|||
rcu_read_unlock();
|
||||
|
||||
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;
|
||||
ifmgd->flags |= IEEE80211_STA_UAPSD_ENABLED;
|
||||
} else {
|
||||
|
|
|
@ -1094,8 +1094,11 @@ void ieee80211_sta_ps_deliver_wakeup(struct sta_info *sta)
|
|||
unsigned long flags;
|
||||
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;
|
||||
else if (ieee80211_vif_is_mesh(&sdata->vif))
|
||||
ps = &sdata->u.mesh.ps;
|
||||
|
|
Загрузка…
Ссылка в новой задаче