aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid S. Miller <davem@davemloft.net>2013-02-19 22:24:50 -0500
committerDavid S. Miller <davem@davemloft.net>2013-02-19 22:24:50 -0500
commitc6b538079723efd21b5fd7e3091dc47dbd0436c4 (patch)
tree778a14480d95c1d118c188ab69ebc482f9d8f357
parent4aa896c4baaab2b4f499c7434f85457f9f3d9fe4 (diff)
parent0b7164458fc184455239ea3676af1b362df1ce1d (diff)
Merge branch 'for-davem' of git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-next
John W. Linville says: ==================== One last batch of stragglers intended for 3.9... For the iwlwifi pull, Johannes says: "I hadn't expected to ask you to pull iwlwifi-next again, but I have a number of fixes most of which I'd also send in after rc1, so here it is. The first commit is a merge error between mac80211-next and iwlwifi-next; in addition I have fixes for P2P scanning and MVM driver MAC (virtual interface) management from Ilan, a CT-kill (critical temperature) fix from Eytan, and myself fixed three different little but annoying bugs in the MVM driver. The only ones I might not send for -rc1 are Emmanuel's debug patch, but OTOH it should help greatly if there are any issues, and my own time event debugging patch that I used to find the race condition but we decided to keep it for the future." For the mac80211 pull, Johannes says: "Like iwlwifi-next, this would almost be suitable for rc1. I have a fix for station management on non-TDLS drivers, a CAB queue crash fix for mesh, a fix for an annoying (but harmless) warning, a tracing fix and a documentation fix. Other than that, only a few mesh cleanups." Along with that is a fix for memory corruption in rtlwifi, an orinoco_usb fix to avoid allocating a DMA buffer on the stack, an a hostap fix to return -ENOMEM instead of -1 after a memory allocation failure. The remaining bits implement 802.11ac support for the mwifiex driver -- I think that is still worth getting into 3.9. Please let me know if there are problems! ==================== Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r--Documentation/DocBook/80211.tmpl4
-rw-r--r--drivers/net/wireless/hostap/hostap_ap.c2
-rw-r--r--drivers/net/wireless/iwlwifi/dvm/commands.h1
-rw-r--r--drivers/net/wireless/iwlwifi/dvm/tt.c2
-rw-r--r--drivers/net/wireless/iwlwifi/dvm/tx.c51
-rw-r--r--drivers/net/wireless/iwlwifi/mvm/mac-ctxt.c47
-rw-r--r--drivers/net/wireless/iwlwifi/mvm/mac80211.c10
-rw-r--r--drivers/net/wireless/iwlwifi/mvm/rx.c1
-rw-r--r--drivers/net/wireless/iwlwifi/mvm/scan.c7
-rw-r--r--drivers/net/wireless/iwlwifi/mvm/sta.c14
-rw-r--r--drivers/net/wireless/iwlwifi/mvm/sta.h6
-rw-r--r--drivers/net/wireless/iwlwifi/mvm/time-event.c10
-rw-r--r--drivers/net/wireless/mwifiex/11ac.c261
-rw-r--r--drivers/net/wireless/mwifiex/11ac.h26
-rw-r--r--drivers/net/wireless/mwifiex/11n.c7
-rw-r--r--drivers/net/wireless/mwifiex/11n.h4
-rw-r--r--drivers/net/wireless/mwifiex/Makefile1
-rw-r--r--drivers/net/wireless/mwifiex/cfg80211.c177
-rw-r--r--drivers/net/wireless/mwifiex/cfp.c159
-rw-r--r--drivers/net/wireless/mwifiex/cmdevt.c19
-rw-r--r--drivers/net/wireless/mwifiex/fw.h127
-rw-r--r--drivers/net/wireless/mwifiex/ioctl.h4
-rw-r--r--drivers/net/wireless/mwifiex/join.c8
-rw-r--r--drivers/net/wireless/mwifiex/main.h23
-rw-r--r--drivers/net/wireless/mwifiex/pcie.c5
-rw-r--r--drivers/net/wireless/mwifiex/scan.c63
-rw-r--r--drivers/net/wireless/mwifiex/sta_cmd.c2
-rw-r--r--drivers/net/wireless/mwifiex/sta_cmdresp.c1
-rw-r--r--drivers/net/wireless/mwifiex/sta_ioctl.c5
-rw-r--r--drivers/net/wireless/orinoco/orinoco_usb.c11
-rw-r--r--drivers/net/wireless/rtlwifi/usb.c44
-rw-r--r--net/mac80211/cfg.c14
-rw-r--r--net/mac80211/iface.c8
-rw-r--r--net/mac80211/main.c3
-rw-r--r--net/mac80211/mesh.c116
-rw-r--r--net/mac80211/mesh.h105
-rw-r--r--net/mac80211/mesh_hwmp.c68
-rw-r--r--net/mac80211/mesh_pathtbl.c89
-rw-r--r--net/mac80211/mesh_plink.c134
-rw-r--r--net/mac80211/mesh_sync.c47
-rw-r--r--net/mac80211/rx.c12
-rw-r--r--net/mac80211/sta_info.h2
-rw-r--r--net/mac80211/trace.h6
-rw-r--r--net/mac80211/tx.c26
-rw-r--r--net/wireless/nl80211.c9
45 files changed, 1297 insertions, 444 deletions
diff --git a/Documentation/DocBook/80211.tmpl b/Documentation/DocBook/80211.tmpl
index 42e7f030cb16..284ced7a228f 100644
--- a/Documentation/DocBook/80211.tmpl
+++ b/Documentation/DocBook/80211.tmpl
@@ -107,8 +107,8 @@
107!Finclude/net/cfg80211.h key_params 107!Finclude/net/cfg80211.h key_params
108!Finclude/net/cfg80211.h survey_info_flags 108!Finclude/net/cfg80211.h survey_info_flags
109!Finclude/net/cfg80211.h survey_info 109!Finclude/net/cfg80211.h survey_info
110!Finclude/net/cfg80211.h beacon_parameters 110!Finclude/net/cfg80211.h cfg80211_beacon_data
111!Finclude/net/cfg80211.h plink_actions 111!Finclude/net/cfg80211.h cfg80211_ap_settings
112!Finclude/net/cfg80211.h station_parameters 112!Finclude/net/cfg80211.h station_parameters
113!Finclude/net/cfg80211.h station_info_flags 113!Finclude/net/cfg80211.h station_info_flags
114!Finclude/net/cfg80211.h rate_info_flags 114!Finclude/net/cfg80211.h rate_info_flags
diff --git a/drivers/net/wireless/hostap/hostap_ap.c b/drivers/net/wireless/hostap/hostap_ap.c
index c6ea995750db..dd9a18f8dbca 100644
--- a/drivers/net/wireless/hostap/hostap_ap.c
+++ b/drivers/net/wireless/hostap/hostap_ap.c
@@ -376,7 +376,7 @@ int ap_control_add_mac(struct mac_restrictions *mac_restrictions, u8 *mac)
376 376
377 entry = kmalloc(sizeof(struct mac_entry), GFP_KERNEL); 377 entry = kmalloc(sizeof(struct mac_entry), GFP_KERNEL);
378 if (entry == NULL) 378 if (entry == NULL)
379 return -1; 379 return -ENOMEM;
380 380
381 memcpy(entry->addr, mac, ETH_ALEN); 381 memcpy(entry->addr, mac, ETH_ALEN);
382 382
diff --git a/drivers/net/wireless/iwlwifi/dvm/commands.h b/drivers/net/wireless/iwlwifi/dvm/commands.h
index 02c9ebb3b340..84e2c0fcfef6 100644
--- a/drivers/net/wireless/iwlwifi/dvm/commands.h
+++ b/drivers/net/wireless/iwlwifi/dvm/commands.h
@@ -1403,6 +1403,7 @@ enum {
1403 1403
1404#define AGG_TX_STATUS_MSK 0x00000fff /* bits 0:11 */ 1404#define AGG_TX_STATUS_MSK 0x00000fff /* bits 0:11 */
1405#define AGG_TX_TRY_MSK 0x0000f000 /* bits 12:15 */ 1405#define AGG_TX_TRY_MSK 0x0000f000 /* bits 12:15 */
1406#define AGG_TX_TRY_POS 12
1406 1407
1407#define AGG_TX_STATE_LAST_SENT_MSK (AGG_TX_STATE_LAST_SENT_TTL_MSK | \ 1408#define AGG_TX_STATE_LAST_SENT_MSK (AGG_TX_STATE_LAST_SENT_TTL_MSK | \
1408 AGG_TX_STATE_LAST_SENT_TRY_CNT_MSK | \ 1409 AGG_TX_STATE_LAST_SENT_TRY_CNT_MSK | \
diff --git a/drivers/net/wireless/iwlwifi/dvm/tt.c b/drivers/net/wireless/iwlwifi/dvm/tt.c
index 67e2e1321b40..03f9bc01c0cc 100644
--- a/drivers/net/wireless/iwlwifi/dvm/tt.c
+++ b/drivers/net/wireless/iwlwifi/dvm/tt.c
@@ -471,8 +471,8 @@ static void iwl_advance_tt_handler(struct iwl_priv *priv, s32 temp, bool force)
471 set_bit(STATUS_CT_KILL, &priv->status); 471 set_bit(STATUS_CT_KILL, &priv->status);
472 iwl_perform_ct_kill_task(priv, true); 472 iwl_perform_ct_kill_task(priv, true);
473 } else { 473 } else {
474 iwl_prepare_ct_kill_task(priv);
475 tt->state = old_state; 474 tt->state = old_state;
475 iwl_prepare_ct_kill_task(priv);
476 } 476 }
477 } else if (old_state == IWL_TI_CT_KILL && 477 } else if (old_state == IWL_TI_CT_KILL &&
478 tt->state != IWL_TI_CT_KILL) { 478 tt->state != IWL_TI_CT_KILL) {
diff --git a/drivers/net/wireless/iwlwifi/dvm/tx.c b/drivers/net/wireless/iwlwifi/dvm/tx.c
index d1dccb361391..6aec2df3bb27 100644
--- a/drivers/net/wireless/iwlwifi/dvm/tx.c
+++ b/drivers/net/wireless/iwlwifi/dvm/tx.c
@@ -908,6 +908,12 @@ static void iwlagn_count_agg_tx_err_status(struct iwl_priv *priv, u16 status)
908 } 908 }
909} 909}
910 910
911static inline u32 iwlagn_get_scd_ssn(struct iwlagn_tx_resp *tx_resp)
912{
913 return le32_to_cpup((__le32 *)&tx_resp->status +
914 tx_resp->frame_count) & MAX_SN;
915}
916
911static void iwl_rx_reply_tx_agg(struct iwl_priv *priv, 917static void iwl_rx_reply_tx_agg(struct iwl_priv *priv,
912 struct iwlagn_tx_resp *tx_resp) 918 struct iwlagn_tx_resp *tx_resp)
913{ 919{
@@ -942,9 +948,15 @@ static void iwl_rx_reply_tx_agg(struct iwl_priv *priv,
942 if (tx_resp->frame_count == 1) 948 if (tx_resp->frame_count == 1)
943 return; 949 return;
944 950
951 IWL_DEBUG_TX_REPLY(priv, "TXQ %d initial_rate 0x%x ssn %d frm_cnt %d\n",
952 agg->txq_id,
953 le32_to_cpu(tx_resp->rate_n_flags),
954 iwlagn_get_scd_ssn(tx_resp), tx_resp->frame_count);
955
945 /* Construct bit-map of pending frames within Tx window */ 956 /* Construct bit-map of pending frames within Tx window */
946 for (i = 0; i < tx_resp->frame_count; i++) { 957 for (i = 0; i < tx_resp->frame_count; i++) {
947 u16 fstatus = le16_to_cpu(frame_status[i].status); 958 u16 fstatus = le16_to_cpu(frame_status[i].status);
959 u8 retry_cnt = (fstatus & AGG_TX_TRY_MSK) >> AGG_TX_TRY_POS;
948 960
949 if (status & AGG_TX_STATUS_MSK) 961 if (status & AGG_TX_STATUS_MSK)
950 iwlagn_count_agg_tx_err_status(priv, fstatus); 962 iwlagn_count_agg_tx_err_status(priv, fstatus);
@@ -952,6 +964,14 @@ static void iwl_rx_reply_tx_agg(struct iwl_priv *priv,
952 if (status & (AGG_TX_STATE_FEW_BYTES_MSK | 964 if (status & (AGG_TX_STATE_FEW_BYTES_MSK |
953 AGG_TX_STATE_ABORT_MSK)) 965 AGG_TX_STATE_ABORT_MSK))
954 continue; 966 continue;
967
968 if (status & AGG_TX_STATUS_MSK || retry_cnt > 1)
969 IWL_DEBUG_TX_REPLY(priv,
970 "%d: status %s (0x%04x), try-count (0x%01x)\n",
971 i,
972 iwl_get_agg_tx_fail_reason(fstatus),