aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/net/wireless/ath/ath9k/main.c2
-rw-r--r--drivers/net/wireless/ath/ath9k/rc.c4
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-agn-rxon.c4
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-agn-tx.c5
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-mac80211.c6
-rw-r--r--drivers/net/wireless/mwifiex/cmdevt.c9
-rw-r--r--drivers/net/wireless/rtlwifi/rtl8192ce/phy.c2
-rw-r--r--drivers/net/wireless/rtlwifi/rtl8192cu/phy.c2
-rw-r--r--drivers/net/wireless/rtlwifi/rtl8192de/phy.c2
-rw-r--r--drivers/net/wireless/rtlwifi/rtl8192se/phy.c2
-rw-r--r--drivers/ssb/driver_pcicore.c8
-rw-r--r--net/mac80211/agg-tx.c86
-rw-r--r--net/nfc/nci/core.c2
13 files changed, 70 insertions, 64 deletions
diff --git a/drivers/net/wireless/ath/ath9k/main.c b/drivers/net/wireless/ath/ath9k/main.c
index 5007297c9447..7d920044d031 100644
--- a/drivers/net/wireless/ath/ath9k/main.c
+++ b/drivers/net/wireless/ath/ath9k/main.c
@@ -286,7 +286,7 @@ static bool ath_complete_reset(struct ath_softc *sc, bool start)
286 ath_start_ani(common); 286 ath_start_ani(common);
287 } 287 }
288 288
289 if (ath9k_hw_ops(ah)->antdiv_comb_conf_get && sc->ant_rx != 3) { 289 if ((ah->caps.hw_caps & ATH9K_HW_CAP_ANT_DIV_COMB) && sc->ant_rx != 3) {
290 struct ath_hw_antcomb_conf div_ant_conf; 290 struct ath_hw_antcomb_conf div_ant_conf;
291 u8 lna_conf; 291 u8 lna_conf;
292 292
diff --git a/drivers/net/wireless/ath/ath9k/rc.c b/drivers/net/wireless/ath/ath9k/rc.c
index 888abc2be3a5..528d5f3e868c 100644
--- a/drivers/net/wireless/ath/ath9k/rc.c
+++ b/drivers/net/wireless/ath/ath9k/rc.c
@@ -1271,7 +1271,9 @@ static void ath_rc_init(struct ath_softc *sc,
1271 1271
1272 ath_rc_priv->max_valid_rate = k; 1272 ath_rc_priv->max_valid_rate = k;
1273 ath_rc_sort_validrates(rate_table, ath_rc_priv); 1273 ath_rc_sort_validrates(rate_table, ath_rc_priv);
1274 ath_rc_priv->rate_max_phy = ath_rc_priv->valid_rate_index[k-4]; 1274 ath_rc_priv->rate_max_phy = (k > 4) ?
1275 ath_rc_priv->valid_rate_index[k-4] :
1276 ath_rc_priv->valid_rate_index[k-1];
1275 ath_rc_priv->rate_table = rate_table; 1277 ath_rc_priv->rate_table = rate_table;
1276 1278
1277 ath_dbg(common, ATH_DBG_CONFIG, 1279 ath_dbg(common, ATH_DBG_CONFIG,
diff --git a/drivers/net/wireless/iwlwifi/iwl-agn-rxon.c b/drivers/net/wireless/iwlwifi/iwl-agn-rxon.c
index 466e4ab544f7..d21f535a3b4f 100644
--- a/drivers/net/wireless/iwlwifi/iwl-agn-rxon.c
+++ b/drivers/net/wireless/iwlwifi/iwl-agn-rxon.c
@@ -610,8 +610,8 @@ int iwlagn_mac_config(struct ieee80211_hw *hw, u32 changed)
610 if (ctx->ht.enabled) { 610 if (ctx->ht.enabled) {
611 /* if HT40 is used, it should not change 611 /* if HT40 is used, it should not change
612 * after associated except channel switch */ 612 * after associated except channel switch */
613 if (iwl_is_associated_ctx(ctx) && 613 if (!ctx->ht.is_40mhz ||
614 !ctx->ht.is_40mhz) 614 !iwl_is_associated_ctx(ctx))
615 iwlagn_config_ht40(conf, ctx); 615 iwlagn_config_ht40(conf, ctx);
616 } else 616 } else
617 ctx->ht.is_40mhz = false; 617 ctx->ht.is_40mhz = false;
diff --git a/drivers/net/wireless/iwlwifi/iwl-agn-tx.c b/drivers/net/wireless/iwlwifi/iwl-agn-tx.c
index 2fab2e31bf36..81754cddba73 100644
--- a/drivers/net/wireless/iwlwifi/iwl-agn-tx.c
+++ b/drivers/net/wireless/iwlwifi/iwl-agn-tx.c
@@ -91,7 +91,10 @@ static void iwlagn_tx_cmd_build_basic(struct iwl_priv *priv,
91 tx_cmd->tid_tspec = qc[0] & 0xf; 91 tx_cmd->tid_tspec = qc[0] & 0xf;
92 tx_flags &= ~TX_CMD_FLG_SEQ_CTL_MSK; 92 tx_flags &= ~TX_CMD_FLG_SEQ_CTL_MSK;
93 } else { 93 } else {
94 tx_flags |= TX_CMD_FLG_SEQ_CTL_MSK; 94 if (info->flags & IEEE80211_TX_CTL_ASSIGN_SEQ)
95 tx_flags |= TX_CMD_FLG_SEQ_CTL_MSK;
96 else
97 tx_flags &= ~TX_CMD_FLG_SEQ_CTL_MSK;
95 } 98 }
96 99
97 iwlagn_tx_cmd_protection(priv, info, fc, &tx_flags); 100 iwlagn_tx_cmd_protection(priv, info, fc, &tx_flags);
diff --git a/drivers/net/wireless/iwlwifi/iwl-mac80211.c b/drivers/net/wireless/iwlwifi/iwl-mac80211.c
index b3886d20c272..e3944f4e4fd6 100644
--- a/drivers/net/wireless/iwlwifi/iwl-mac80211.c
+++ b/drivers/net/wireless/iwlwifi/iwl-mac80211.c
@@ -1048,6 +1048,9 @@ static int iwlagn_mac_tx_sync(struct ieee80211_hw *hw,
1048 int ret; 1048 int ret;
1049 u8 sta_id; 1049 u8 sta_id;
1050 1050
1051 if (ctx->ctxid != IWL_RXON_CTX_PAN)
1052 return 0;
1053
1051 IWL_DEBUG_MAC80211(priv, "enter\n"); 1054 IWL_DEBUG_MAC80211(priv, "enter\n");
1052 mutex_lock(&priv->shrd->mutex); 1055 mutex_lock(&priv->shrd->mutex);
1053 1056
@@ -1097,6 +1100,9 @@ static void iwlagn_mac_finish_tx_sync(struct ieee80211_hw *hw,
1097 struct iwl_vif_priv *vif_priv = (void *)vif->drv_priv; 1100 struct iwl_vif_priv *vif_priv = (void *)vif->drv_priv;
1098 struct iwl_rxon_context *ctx = vif_priv->ctx; 1101 struct iwl_rxon_context *ctx = vif_priv->ctx;
1099 1102
1103 if (ctx->ctxid != IWL_RXON_CTX_PAN)
1104 return;
1105
1100 IWL_DEBUG_MAC80211(priv, "enter\n"); 1106 IWL_DEBUG_MAC80211(priv, "enter\n");
1101 mutex_lock(&priv->shrd->mutex); 1107 mutex_lock(&priv->shrd->mutex);
1102 1108
diff --git a/drivers/net/wireless/mwifiex/cmdevt.c b/drivers/net/wireless/mwifiex/cmdevt.c
index ac278156d390..6e0a3eaecf70 100644
--- a/drivers/net/wireless/mwifiex/cmdevt.c
+++ b/drivers/net/wireless/mwifiex/cmdevt.c
@@ -939,7 +939,6 @@ mwifiex_cancel_pending_ioctl(struct mwifiex_adapter *adapter)
939{ 939{
940 struct cmd_ctrl_node *cmd_node = NULL, *tmp_node = NULL; 940 struct cmd_ctrl_node *cmd_node = NULL, *tmp_node = NULL;
941 unsigned long cmd_flags; 941 unsigned long cmd_flags;
942 unsigned long cmd_pending_q_flags;
943 unsigned long scan_pending_q_flags; 942 unsigned long scan_pending_q_flags;
944 uint16_t cancel_scan_cmd = false; 943 uint16_t cancel_scan_cmd = false;
945 944
@@ -949,12 +948,9 @@ mwifiex_cancel_pending_ioctl(struct mwifiex_adapter *adapter)
949 cmd_node = adapter->curr_cmd; 948 cmd_node = adapter->curr_cmd;
950 cmd_node->wait_q_enabled = false; 949 cmd_node->wait_q_enabled = false;
951 cmd_node->cmd_flag |= CMD_F_CANCELED; 950 cmd_node->cmd_flag |= CMD_F_CANCELED;
952 spin_lock_irqsave(&adapter->cmd_pending_q_lock,
953 cmd_pending_q_flags);
954 list_del(&cmd_node->list);
955 spin_unlock_irqrestore(&adapter->cmd_pending_q_lock,
956 cmd_pending_q_flags);
957 mwifiex_insert_cmd_to_free_q(adapter, cmd_node); 951 mwifiex_insert_cmd_to_free_q(adapter, cmd_node);
952 mwifiex_complete_cmd(adapter, adapter->curr_cmd);
953 adapter->curr_cmd = NULL;
958 spin_unlock_irqrestore(&adapter->mwifiex_cmd_lock, cmd_flags); 954 spin_unlock_irqrestore(&adapter->mwifiex_cmd_lock, cmd_flags);
959 } 955 }
960 956
@@ -981,7 +977,6 @@ mwifiex_cancel_pending_ioctl(struct mwifiex_adapter *adapter)
981 spin_unlock_irqrestore(&adapter->mwifiex_cmd_lock, cmd_flags); 977 spin_unlock_irqrestore(&adapter->mwifiex_cmd_lock, cmd_flags);
982 } 978 }
983 adapter->cmd_wait_q.status = -1; 979 adapter->cmd_wait_q.status = -1;
984 mwifiex_complete_cmd(adapter, adapter->curr_cmd);
985} 980}
986 981
987/* 982/*
diff --git a/drivers/net/wireless/rtlwifi/rtl8192ce/phy.c b/drivers/net/wireless/rtlwifi/rtl8192ce/phy.c
index 592a10ac5929..3b585aadabfc 100644
--- a/drivers/net/wireless/rtlwifi/rtl8192ce/phy.c
+++ b/drivers/net/wireless/rtlwifi/rtl8192ce/phy.c
@@ -569,7 +569,7 @@ static bool _rtl92ce_phy_set_rf_power_state(struct ieee80211_hw *hw,
569 } 569 }
570 case ERFSLEEP:{ 570 case ERFSLEEP:{
571 if (ppsc->rfpwr_state == ERFOFF) 571 if (ppsc->rfpwr_state == ERFOFF)
572 break; 572 return false;
573 for (queue_id = 0, i = 0; 573 for (queue_id = 0, i = 0;
574 queue_id < RTL_PCI_MAX_TX_QUEUE_COUNT;) { 574 queue_id < RTL_PCI_MAX_TX_QUEUE_COUNT;) {
575 ring = &pcipriv->dev.tx_ring[queue_id]; 575 ring = &pcipriv->dev.tx_ring[queue_id];
diff --git a/drivers/net/wireless/rtlwifi/rtl8192cu/phy.c b/drivers/net/wireless/rtlwifi/rtl8192cu/phy.c
index 72852900df84..e49cf2244c75 100644
--- a/drivers/net/wireless/rtlwifi/rtl8192cu/phy.c
+++ b/drivers/net/wireless/rtlwifi/rtl8192cu/phy.c
@@ -548,7 +548,7 @@ static bool _rtl92cu_phy_set_rf_power_state(struct ieee80211_hw *hw,
548 break; 548 break;
549 case ERFSLEEP: 549 case ERFSLEEP:
550 if (ppsc->rfpwr_state == ERFOFF) 550 if (ppsc->rfpwr_state == ERFOFF)
551 break; 551 return false;
552 for (queue_id = 0, i = 0; 552 for (queue_id = 0, i = 0;
553 queue_id < RTL_PCI_MAX_TX_QUEUE_COUNT;) { 553 queue_id < RTL_PCI_MAX_TX_QUEUE_COUNT;) {
554 ring = &pcipriv->dev.tx_ring[queue_id]; 554 ring = &pcipriv->dev.tx_ring[queue_id];
diff --git a/drivers/net/wireless/rtlwifi/rtl8192de/phy.c b/drivers/net/wireless/rtlwifi/rtl8192de/phy.c
index 3ac7af1c5509..0883349e1c83 100644
--- a/drivers/net/wireless/rtlwifi/rtl8192de/phy.c
+++ b/drivers/net/wireless/rtlwifi/rtl8192de/phy.c
@@ -3374,7 +3374,7 @@ bool rtl92d_phy_set_rf_power_state(struct ieee80211_hw *hw,
3374 break; 3374 break;
3375 case ERFSLEEP: 3375 case ERFSLEEP:
3376 if (ppsc->rfpwr_state == ERFOFF) 3376 if (ppsc->rfpwr_state == ERFOFF)
3377 break; 3377 return false;
3378 3378
3379 for (queue_id = 0, i = 0; 3379 for (queue_id = 0, i = 0;
3380 queue_id < RTL_PCI_MAX_TX_QUEUE_COUNT;) { 3380 queue_id < RTL_PCI_MAX_TX_QUEUE_COUNT;) {
diff --git a/drivers/net/wireless/rtlwifi/rtl8192se/phy.c b/drivers/net/wireless/rtlwifi/rtl8192se/phy.c
index f27171af979c..f10ac1ad9087 100644
--- a/drivers/net/wireless/rtlwifi/rtl8192se/phy.c
+++ b/drivers/net/wireless/rtlwifi/rtl8192se/phy.c
@@ -602,7 +602,7 @@ bool rtl92s_phy_set_rf_power_state(struct ieee80211_hw *hw,
602 } 602 }
603 case ERFSLEEP: 603 case ERFSLEEP:
604 if (ppsc->rfpwr_state == ERFOFF) 604 if (ppsc->rfpwr_state == ERFOFF)
605 break; 605 return false;
606 606
607 for (queue_id = 0, i = 0; 607 for (queue_id = 0, i = 0;
608 queue_id < RTL_PCI_MAX_TX_QUEUE_COUNT;) { 608 queue_id < RTL_PCI_MAX_TX_QUEUE_COUNT;) {
diff --git a/drivers/ssb/driver_pcicore.c b/drivers/ssb/driver_pcicore.c
index 84c934c0a545..520e8286db28 100644
--- a/drivers/ssb/driver_pcicore.c
+++ b/drivers/ssb/driver_pcicore.c
@@ -517,10 +517,14 @@ static void ssb_pcicore_pcie_setup_workarounds(struct ssb_pcicore *pc)
517 517
518static void __devinit ssb_pcicore_init_clientmode(struct ssb_pcicore *pc) 518static void __devinit ssb_pcicore_init_clientmode(struct ssb_pcicore *pc)
519{ 519{
520 ssb_pcicore_fix_sprom_core_index(pc); 520 struct ssb_device *pdev = pc->dev;
521 struct ssb_bus *bus = pdev->bus;
522
523 if (bus->bustype == SSB_BUSTYPE_PCI)
524 ssb_pcicore_fix_sprom_core_index(pc);
521 525
522 /* Disable PCI interrupts. */ 526 /* Disable PCI interrupts. */
523 ssb_write32(pc->dev, SSB_INTVEC, 0); 527 ssb_write32(pdev, SSB_INTVEC, 0);
524 528
525 /* Additional PCIe always once-executed workarounds */ 529 /* Additional PCIe always once-executed workarounds */
526 if (pc->dev->id.coreid == SSB_DEV_PCIE) { 530 if (pc->dev->id.coreid == SSB_DEV_PCIE) {
diff --git a/net/mac80211/agg-tx.c b/net/mac80211/agg-tx.c
index 5c7f0c3c74cb..88754c067f1e 100644
--- a/net/mac80211/agg-tx.c
+++ b/net/mac80211/agg-tx.c
@@ -309,6 +309,38 @@ ieee80211_wake_queue_agg(struct ieee80211_local *local, int tid)
309 __release(agg_queue); 309 __release(agg_queue);
310} 310}
311 311
312/*
313 * splice packets from the STA's pending to the local pending,
314 * requires a call to ieee80211_agg_splice_finish later
315 */
316static void __acquires(agg_queue)
317ieee80211_agg_splice_packets(struct ieee80211_local *local,
318 struct tid_ampdu_tx *tid_tx, u16 tid)
319{
320 int queue = ieee80211_ac_from_tid(tid);
321 unsigned long flags;
322
323 ieee80211_stop_queue_agg(local, tid);
324
325 if (WARN(!tid_tx, "TID %d gone but expected when splicing aggregates"
326 " from the pending queue\n", tid))
327 return;
328
329 if (!skb_queue_empty(&tid_tx->pending)) {
330 spin_lock_irqsave(&local->queue_stop_reason_lock, flags);
331 /* copy over remaining packets */
332 skb_queue_splice_tail_init(&tid_tx->pending,
333 &local->pending[queue]);
334 spin_unlock_irqrestore(&local->queue_stop_reason_lock, flags);
335 }
336}
337
338static void __releases(agg_queue)
339ieee80211_agg_splice_finish(struct ieee80211_local *local, u16 tid)
340{
341 ieee80211_wake_queue_agg(local, tid);
342}
343
312void ieee80211_tx_ba_session_handle_start(struct sta_info *sta, int tid) 344void ieee80211_tx_ba_session_handle_start(struct sta_info *sta, int tid)
313{ 345{
314 struct tid_ampdu_tx *tid_tx; 346 struct tid_ampdu_tx *tid_tx;
@@ -320,19 +352,17 @@ void ieee80211_tx_ba_session_handle_start(struct sta_info *sta, int tid)
320 tid_tx = rcu_dereference_protected_tid_tx(sta, tid); 352 tid_tx = rcu_dereference_protected_tid_tx(sta, tid);
321 353
322 /* 354 /*
323 * While we're asking the driver about the aggregation, 355 * Start queuing up packets for this aggregation session.
324 * stop the AC queue so that we don't have to worry 356 * We're going to release them once the driver is OK with
325 * about frames that came in while we were doing that, 357 * that.
326 * which would require us to put them to the AC pending
327 * afterwards which just makes the code more complex.
328 */ 358 */
329 ieee80211_stop_queue_agg(local, tid);
330
331 clear_bit(HT_AGG_STATE_WANT_START, &tid_tx->state); 359 clear_bit(HT_AGG_STATE_WANT_START, &tid_tx->state);
332 360
333 /* 361 /*
334 * make sure no packets are being processed to get 362 * Make sure no packets are being processed. This ensures that
335 * valid starting sequence number 363 * we have a valid starting sequence number and that in-flight
364 * packets have been flushed out and no packets for this TID
365 * will go into the driver during the ampdu_action call.
336 */ 366 */
337 synchronize_net(); 367 synchronize_net();
338 368
@@ -346,17 +376,15 @@ void ieee80211_tx_ba_session_handle_start(struct sta_info *sta, int tid)
346 " tid %d\n", tid); 376 " tid %d\n", tid);
347#endif 377#endif
348 spin_lock_bh(&sta->lock); 378 spin_lock_bh(&sta->lock);
379 ieee80211_agg_splice_packets(local, tid_tx, tid);
349 ieee80211_assign_tid_tx(sta, tid, NULL); 380 ieee80211_assign_tid_tx(sta, tid, NULL);
381 ieee80211_agg_splice_finish(local, tid);
350 spin_unlock_bh(&sta->lock); 382 spin_unlock_bh(&sta->lock);
351 383
352 ieee80211_wake_queue_agg(local, tid);
353 kfree_rcu(tid_tx, rcu_head); 384 kfree_rcu(tid_tx, rcu_head);
354 return; 385 return;
355 } 386 }
356 387
357 /* we can take packets again now */
358 ieee80211_wake_queue_agg(local, tid);
359
360 /* activate the timer for the recipient's addBA response */ 388 /* activate the timer for the recipient's addBA response */
361 mod_timer(&tid_tx->addba_resp_timer, jiffies + ADDBA_RESP_INTERVAL); 389 mod_timer(&tid_tx->addba_resp_timer, jiffies + ADDBA_RESP_INTERVAL);
362#ifdef CONFIG_MAC80211_HT_DEBUG 390#ifdef CONFIG_MAC80211_HT_DEBUG
@@ -516,38 +544,6 @@ int ieee80211_start_tx_ba_session(struct ieee80211_sta *pubsta, u16 tid,
516} 544}
517EXPORT_SYMBOL(ieee80211_start_tx_ba_session); 545EXPORT_SYMBOL(ieee80211_start_tx_ba_session);
518 546
519/*
520 * splice packets from the STA's pending to the local pending,
521 * requires a call to ieee80211_agg_splice_finish later
522 */
523static void __acquires(agg_queue)
524ieee80211_agg_splice_packets(struct ieee80211_local *local,
525 struct tid_ampdu_tx *tid_tx, u16 tid)
526{
527 int queue = ieee80211_ac_from_tid(tid);
528 unsigned long flags;
529
530 ieee80211_stop_queue_agg(local, tid);
531
532 if (WARN(!tid_tx, "TID %d gone but expected when splicing aggregates"
533 " from the pending queue\n", tid))
534 return;
535
536 if (!skb_queue_empty(&tid_tx->pending)) {
537 spin_lock_irqsave(&local->queue_stop_reason_lock, flags);
538 /* copy over remaining packets */
539 skb_queue_splice_tail_init(&tid_tx->pending,
540 &local->pending[queue]);
541 spin_unlock_irqrestore(&local->queue_stop_reason_lock, flags);
542 }
543}
544
545static void __releases(agg_queue)
546ieee80211_agg_splice_finish(struct ieee80211_local *local, u16 tid)
547{
548 ieee80211_wake_queue_agg(local, tid);
549}
550
551static void ieee80211_agg_tx_operational(struct ieee80211_local *local, 547static void ieee80211_agg_tx_operational(struct ieee80211_local *local,
552 struct sta_info *sta, u16 tid) 548 struct sta_info *sta, u16 tid)
553{ 549{
diff --git a/net/nfc/nci/core.c b/net/nfc/nci/core.c
index 37de28e97330..c55f233a5e2c 100644
--- a/net/nfc/nci/core.c
+++ b/net/nfc/nci/core.c
@@ -71,7 +71,7 @@ static int __nci_request(struct nci_dev *ndev,
71 __u32 timeout) 71 __u32 timeout)
72{ 72{
73 int rc = 0; 73 int rc = 0;
74 unsigned long completion_rc; 74 long completion_rc;
75 75
76 ndev->req_status = NCI_REQ_PEND; 76 ndev->req_status = NCI_REQ_PEND;
77 77