Commit 5d22df200beccb1dea26fe4d8684ed93ae2f0aeb

Authored by John W. Linville

Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless

Conflicts:
	drivers/net/wireless/iwlwifi/iwl-agn.c

Showing 13 changed files Side-by-side Diff

drivers/net/wireless/ath/ath9k/main.c
... ... @@ -286,7 +286,7 @@
286 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 290 struct ath_hw_antcomb_conf div_ant_conf;
291 291 u8 lna_conf;
292 292  
drivers/net/wireless/ath/ath9k/rc.c
... ... @@ -1271,7 +1271,9 @@
1271 1271  
1272 1272 ath_rc_priv->max_valid_rate = k;
1273 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 1277 ath_rc_priv->rate_table = rate_table;
1276 1278  
1277 1279 ath_dbg(common, ATH_DBG_CONFIG,
drivers/net/wireless/iwlwifi/iwl-agn-rxon.c
... ... @@ -610,8 +610,8 @@
610 610 if (ctx->ht.enabled) {
611 611 /* if HT40 is used, it should not change
612 612 * after associated except channel switch */
613   - if (iwl_is_associated_ctx(ctx) &&
614   - !ctx->ht.is_40mhz)
  613 + if (!ctx->ht.is_40mhz ||
  614 + !iwl_is_associated_ctx(ctx))
615 615 iwlagn_config_ht40(conf, ctx);
616 616 } else
617 617 ctx->ht.is_40mhz = false;
drivers/net/wireless/iwlwifi/iwl-agn-tx.c
... ... @@ -91,7 +91,10 @@
91 91 tx_cmd->tid_tspec = qc[0] & 0xf;
92 92 tx_flags &= ~TX_CMD_FLG_SEQ_CTL_MSK;
93 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 100 iwlagn_tx_cmd_protection(priv, info, fc, &tx_flags);
drivers/net/wireless/iwlwifi/iwl-mac80211.c
... ... @@ -1048,6 +1048,9 @@
1048 1048 int ret;
1049 1049 u8 sta_id;
1050 1050  
  1051 + if (ctx->ctxid != IWL_RXON_CTX_PAN)
  1052 + return 0;
  1053 +
1051 1054 IWL_DEBUG_MAC80211(priv, "enter\n");
1052 1055 mutex_lock(&priv->shrd->mutex);
1053 1056  
... ... @@ -1096,6 +1099,9 @@
1096 1099 struct iwl_priv *priv = hw->priv;
1097 1100 struct iwl_vif_priv *vif_priv = (void *)vif->drv_priv;
1098 1101 struct iwl_rxon_context *ctx = vif_priv->ctx;
  1102 +
  1103 + if (ctx->ctxid != IWL_RXON_CTX_PAN)
  1104 + return;
1099 1105  
1100 1106 IWL_DEBUG_MAC80211(priv, "enter\n");
1101 1107 mutex_lock(&priv->shrd->mutex);
drivers/net/wireless/mwifiex/cmdevt.c
... ... @@ -939,7 +939,6 @@
939 939 {
940 940 struct cmd_ctrl_node *cmd_node = NULL, *tmp_node = NULL;
941 941 unsigned long cmd_flags;
942   - unsigned long cmd_pending_q_flags;
943 942 unsigned long scan_pending_q_flags;
944 943 uint16_t cancel_scan_cmd = false;
945 944  
946 945  
... ... @@ -949,12 +948,9 @@
949 948 cmd_node = adapter->curr_cmd;
950 949 cmd_node->wait_q_enabled = false;
951 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 951 mwifiex_insert_cmd_to_free_q(adapter, cmd_node);
  952 + mwifiex_complete_cmd(adapter, adapter->curr_cmd);
  953 + adapter->curr_cmd = NULL;
958 954 spin_unlock_irqrestore(&adapter->mwifiex_cmd_lock, cmd_flags);
959 955 }
960 956  
... ... @@ -981,7 +977,6 @@
981 977 spin_unlock_irqrestore(&adapter->mwifiex_cmd_lock, cmd_flags);
982 978 }
983 979 adapter->cmd_wait_q.status = -1;
984   - mwifiex_complete_cmd(adapter, adapter->curr_cmd);
985 980 }
986 981  
987 982 /*
drivers/net/wireless/rtlwifi/rtl8192ce/phy.c
... ... @@ -569,7 +569,7 @@
569 569 }
570 570 case ERFSLEEP:{
571 571 if (ppsc->rfpwr_state == ERFOFF)
572   - break;
  572 + return false;
573 573 for (queue_id = 0, i = 0;
574 574 queue_id < RTL_PCI_MAX_TX_QUEUE_COUNT;) {
575 575 ring = &pcipriv->dev.tx_ring[queue_id];
drivers/net/wireless/rtlwifi/rtl8192cu/phy.c
... ... @@ -548,7 +548,7 @@
548 548 break;
549 549 case ERFSLEEP:
550 550 if (ppsc->rfpwr_state == ERFOFF)
551   - break;
  551 + return false;
552 552 for (queue_id = 0, i = 0;
553 553 queue_id < RTL_PCI_MAX_TX_QUEUE_COUNT;) {
554 554 ring = &pcipriv->dev.tx_ring[queue_id];
drivers/net/wireless/rtlwifi/rtl8192de/phy.c
... ... @@ -3374,7 +3374,7 @@
3374 3374 break;
3375 3375 case ERFSLEEP:
3376 3376 if (ppsc->rfpwr_state == ERFOFF)
3377   - break;
  3377 + return false;
3378 3378  
3379 3379 for (queue_id = 0, i = 0;
3380 3380 queue_id < RTL_PCI_MAX_TX_QUEUE_COUNT;) {
drivers/net/wireless/rtlwifi/rtl8192se/phy.c
... ... @@ -602,7 +602,7 @@
602 602 }
603 603 case ERFSLEEP:
604 604 if (ppsc->rfpwr_state == ERFOFF)
605   - break;
  605 + return false;
606 606  
607 607 for (queue_id = 0, i = 0;
608 608 queue_id < RTL_PCI_MAX_TX_QUEUE_COUNT;) {
drivers/ssb/driver_pcicore.c
... ... @@ -517,10 +517,14 @@
517 517  
518 518 static 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;
521 522  
  523 + if (bus->bustype == SSB_BUSTYPE_PCI)
  524 + ssb_pcicore_fix_sprom_core_index(pc);
  525 +
522 526 /* Disable PCI interrupts. */
523   - ssb_write32(pc->dev, SSB_INTVEC, 0);
  527 + ssb_write32(pdev, SSB_INTVEC, 0);
524 528  
525 529 /* Additional PCIe always once-executed workarounds */
526 530 if (pc->dev->id.coreid == SSB_DEV_PCIE) {
net/mac80211/agg-tx.c
... ... @@ -309,6 +309,38 @@
309 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 + */
  316 +static void __acquires(agg_queue)
  317 +ieee80211_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 +
  338 +static void __releases(agg_queue)
  339 +ieee80211_agg_splice_finish(struct ieee80211_local *local, u16 tid)
  340 +{
  341 + ieee80211_wake_queue_agg(local, tid);
  342 +}
  343 +
312 344 void ieee80211_tx_ba_session_handle_start(struct sta_info *sta, int tid)
313 345 {
314 346 struct tid_ampdu_tx *tid_tx;
315 347  
316 348  
... ... @@ -320,19 +352,17 @@
320 352 tid_tx = rcu_dereference_protected_tid_tx(sta, tid);
321 353  
322 354 /*
323   - * While we're asking the driver about the aggregation,
324   - * stop the AC queue so that we don't have to worry
325   - * about frames that came in while we were doing that,
326   - * which would require us to put them to the AC pending
327   - * afterwards which just makes the code more complex.
  355 + * Start queuing up packets for this aggregation session.
  356 + * We're going to release them once the driver is OK with
  357 + * that.
328 358 */
329   - ieee80211_stop_queue_agg(local, tid);
330   -
331 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
335   - * valid starting sequence number
  362 + * Make sure no packets are being processed. This ensures that
  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 367 synchronize_net();
338 368  
339 369  
340 370  
341 371  
... ... @@ -346,17 +376,15 @@
346 376 " tid %d\n", tid);
347 377 #endif
348 378 spin_lock_bh(&sta->lock);
  379 + ieee80211_agg_splice_packets(local, tid_tx, tid);
349 380 ieee80211_assign_tid_tx(sta, tid, NULL);
  381 + ieee80211_agg_splice_finish(local, tid);
350 382 spin_unlock_bh(&sta->lock);
351 383  
352   - ieee80211_wake_queue_agg(local, tid);
353 384 kfree_rcu(tid_tx, rcu_head);
354 385 return;
355 386 }
356 387  
357   - /* we can take packets again now */
358   - ieee80211_wake_queue_agg(local, tid);
359   -
360 388 /* activate the timer for the recipient's addBA response */
361 389 mod_timer(&tid_tx->addba_resp_timer, jiffies + ADDBA_RESP_INTERVAL);
362 390 #ifdef CONFIG_MAC80211_HT_DEBUG
... ... @@ -515,38 +543,6 @@
515 543 return ret;
516 544 }
517 545 EXPORT_SYMBOL(ieee80211_start_tx_ba_session);
518   -
519   -/*
520   - * splice packets from the STA's pending to the local pending,
521   - * requires a call to ieee80211_agg_splice_finish later
522   - */
523   -static void __acquires(agg_queue)
524   -ieee80211_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   -
545   -static void __releases(agg_queue)
546   -ieee80211_agg_splice_finish(struct ieee80211_local *local, u16 tid)
547   -{
548   - ieee80211_wake_queue_agg(local, tid);
549   -}
550 546  
551 547 static void ieee80211_agg_tx_operational(struct ieee80211_local *local,
552 548 struct sta_info *sta, u16 tid)
... ... @@ -71,7 +71,7 @@
71 71 __u32 timeout)
72 72 {
73 73 int rc = 0;
74   - unsigned long completion_rc;
  74 + long completion_rc;
75 75  
76 76 ndev->req_status = NCI_REQ_PEND;
77 77