aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/iwlwifi
diff options
context:
space:
mode:
authorEmmanuel Grumbach <emmanuel.grumbach@intel.com>2011-08-26 02:11:22 -0400
committerJohn W. Linville <linville@tuxdriver.com>2011-08-29 15:30:31 -0400
commitba562f71198a2cb03bb8d20640ffdf996275c3f0 (patch)
tree290875852ea56b90190e92db0a77017b01ca4d6a /drivers/net/wireless/iwlwifi
parent2c452297ff3eaafad41d24fa03d54a169ced8de1 (diff)
iwlagn: set tx_fifo for ampdu in transport layer
the mapping tx_queue -> fifo is really transport related. The upper layer should be involved in such things. Note that upon agg_disable, the queue is always mapped to fifo 0, but this doesn't matter since when the queue will be setup again for a new BA session, it will be configured to the good fifo anyway. Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com> Signed-off-by: Wey-Yi Guy <wey-yi.w.guy@intel.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net/wireless/iwlwifi')
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-agn-tx.c65
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-agn.c5
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-dev.h7
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-shared.h46
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-trans-int-pcie.h8
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-trans-tx-pcie.c32
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-trans.h22
7 files changed, 89 insertions, 96 deletions
diff --git a/drivers/net/wireless/iwlwifi/iwl-agn-tx.c b/drivers/net/wireless/iwlwifi/iwl-agn-tx.c
index 60ba4f84285..9787f0f2a4f 100644
--- a/drivers/net/wireless/iwlwifi/iwl-agn-tx.c
+++ b/drivers/net/wireless/iwlwifi/iwl-agn-tx.c
@@ -42,43 +42,6 @@
42#include "iwl-agn.h" 42#include "iwl-agn.h"
43#include "iwl-trans.h" 43#include "iwl-trans.h"
44 44
45/*
46 * mac80211 queues, ACs, hardware queues, FIFOs.
47 *
48 * Cf. http://wireless.kernel.org/en/developers/Documentation/mac80211/queues
49 *
50 * Mac80211 uses the following numbers, which we get as from it
51 * by way of skb_get_queue_mapping(skb):
52 *
53 * VO 0
54 * VI 1
55 * BE 2
56 * BK 3
57 *
58 *
59 * Regular (not A-MPDU) frames are put into hardware queues corresponding
60 * to the FIFOs, see comments in iwl-prph.h. Aggregated frames get their
61 * own queue per aggregation session (RA/TID combination), such queues are
62 * set up to map into FIFOs too, for which we need an AC->FIFO mapping. In
63 * order to map frames to the right queue, we also need an AC->hw queue
64 * mapping. This is implemented here.
65 *
66 * Due to the way hw queues are set up (by the hw specific modules like
67 * iwl-4965.c, iwl-5000.c etc.), the AC->hw queue mapping is the identity
68 * mapping.
69 */
70
71static const u8 tid_to_ac[] = {
72 IEEE80211_AC_BE,
73 IEEE80211_AC_BK,
74 IEEE80211_AC_BK,
75 IEEE80211_AC_BE,
76 IEEE80211_AC_VI,
77 IEEE80211_AC_VI,
78 IEEE80211_AC_VO,
79 IEEE80211_AC_VO
80};
81
82static inline int get_ac_from_tid(u16 tid) 45static inline int get_ac_from_tid(u16 tid)
83{ 46{
84 if (likely(tid < ARRAY_SIZE(tid_to_ac))) 47 if (likely(tid < ARRAY_SIZE(tid_to_ac)))
@@ -88,15 +51,6 @@ static inline int get_ac_from_tid(u16 tid)
88 return -EINVAL; 51 return -EINVAL;
89} 52}
90 53
91static inline int get_fifo_from_tid(struct iwl_rxon_context *ctx, u16 tid)
92{
93 if (likely(tid < ARRAY_SIZE(tid_to_ac)))
94 return ctx->ac_to_fifo[tid_to_ac[tid]];
95
96 /* no support for TIDs 8-15 yet */
97 return -EINVAL;
98}
99
100static int iwlagn_txq_agg_enable(struct iwl_priv *priv, int txq_id, int sta_id, 54static int iwlagn_txq_agg_enable(struct iwl_priv *priv, int txq_id, int sta_id,
101 int tid) 55 int tid)
102{ 56{
@@ -508,16 +462,11 @@ int iwlagn_tx_agg_start(struct iwl_priv *priv, struct ieee80211_vif *vif,
508 struct ieee80211_sta *sta, u16 tid, u16 *ssn) 462 struct ieee80211_sta *sta, u16 tid, u16 *ssn)
509{ 463{
510 int sta_id; 464 int sta_id;
511 int tx_fifo;
512 int txq_id; 465 int txq_id;
513 int ret; 466 int ret;
514 unsigned long flags; 467 unsigned long flags;
515 struct iwl_tid_data *tid_data; 468 struct iwl_tid_data *tid_data;
516 469
517 tx_fifo = get_fifo_from_tid(iwl_rxon_ctx_from_vif(vif), tid);
518 if (unlikely(tx_fifo < 0))
519 return tx_fifo;
520
521 IWL_DEBUG_HT(priv, "TX AGG request on ra = %pM tid = %d\n", 470 IWL_DEBUG_HT(priv, "TX AGG request on ra = %pM tid = %d\n",
522 sta->addr, tid); 471 sta->addr, tid);
523 472
@@ -544,7 +493,6 @@ int iwlagn_tx_agg_start(struct iwl_priv *priv, struct ieee80211_vif *vif,
544 tid_data = &priv->shrd->tid_data[sta_id][tid]; 493 tid_data = &priv->shrd->tid_data[sta_id][tid];
545 *ssn = SEQ_TO_SN(tid_data->seq_number); 494 *ssn = SEQ_TO_SN(tid_data->seq_number);
546 tid_data->agg.txq_id = txq_id; 495 tid_data->agg.txq_id = txq_id;
547 tid_data->agg.tx_fifo = tx_fifo;
548 iwl_set_swq_id(&priv->txq[txq_id], get_ac_from_tid(tid), txq_id); 496 iwl_set_swq_id(&priv->txq[txq_id], get_ac_from_tid(tid), txq_id);
549 spin_unlock_irqrestore(&priv->shrd->sta_lock, flags); 497 spin_unlock_irqrestore(&priv->shrd->sta_lock, flags);
550 498
@@ -570,15 +518,11 @@ int iwlagn_tx_agg_start(struct iwl_priv *priv, struct ieee80211_vif *vif,
570int iwlagn_tx_agg_stop(struct iwl_priv *priv, struct ieee80211_vif *vif, 518int iwlagn_tx_agg_stop(struct iwl_priv *priv, struct ieee80211_vif *vif,
571 struct ieee80211_sta *sta, u16 tid) 519 struct ieee80211_sta *sta, u16 tid)
572{ 520{
573 int tx_fifo_id, txq_id, sta_id, ssn; 521 int txq_id, sta_id, ssn;
574 struct iwl_tid_data *tid_data; 522 struct iwl_tid_data *tid_data;
575 int write_ptr, read_ptr; 523 int write_ptr, read_ptr;
576 unsigned long flags; 524 unsigned long flags;
577 525
578 tx_fifo_id = get_fifo_from_tid(iwl_rxon_ctx_from_vif(vif), tid);
579 if (unlikely(tx_fifo_id < 0))
580 return tx_fifo_id;
581
582 sta_id = iwl_sta_id(sta); 526 sta_id = iwl_sta_id(sta);
583 527
584 if (sta_id == IWL_INVALID_STATION) { 528 if (sta_id == IWL_INVALID_STATION) {
@@ -635,7 +579,7 @@ int iwlagn_tx_agg_stop(struct iwl_priv *priv, struct ieee80211_vif *vif,
635 * to deactivate the uCode queue, just return "success" to allow 579 * to deactivate the uCode queue, just return "success" to allow
636 * mac80211 to clean up it own data. 580 * mac80211 to clean up it own data.
637 */ 581 */
638 iwl_trans_txq_agg_disable(trans(priv), txq_id, ssn, tx_fifo_id); 582 iwl_trans_txq_agg_disable(trans(priv), txq_id);
639 spin_unlock_irqrestore(&priv->shrd->lock, flags); 583 spin_unlock_irqrestore(&priv->shrd->lock, flags);
640 584
641 ieee80211_stop_tx_ba_cb_irqsafe(vif, sta->addr, tid); 585 ieee80211_stop_tx_ba_cb_irqsafe(vif, sta->addr, tid);
@@ -661,11 +605,8 @@ static int iwlagn_txq_check_empty(struct iwl_priv *priv,
661 /* aggregated HW queue */ 605 /* aggregated HW queue */
662 if ((txq_id == tid_data->agg.txq_id) && 606 if ((txq_id == tid_data->agg.txq_id) &&
663 (q->read_ptr == q->write_ptr)) { 607 (q->read_ptr == q->write_ptr)) {
664 u16 ssn = SEQ_TO_SN(tid_data->seq_number);
665 int tx_fifo = get_fifo_from_tid(ctx, tid);
666 IWL_DEBUG_HT(priv, "HW queue empty: continue DELBA flow\n"); 608 IWL_DEBUG_HT(priv, "HW queue empty: continue DELBA flow\n");
667 iwl_trans_txq_agg_disable(trans(priv), txq_id, 609 iwl_trans_txq_agg_disable(trans(priv), txq_id);
668 ssn, tx_fifo);
669 tid_data->agg.state = IWL_AGG_OFF; 610 tid_data->agg.state = IWL_AGG_OFF;
670 ieee80211_stop_tx_ba_cb_irqsafe(ctx->vif, addr, tid); 611 ieee80211_stop_tx_ba_cb_irqsafe(ctx->vif, addr, tid);
671 } 612 }
diff --git a/drivers/net/wireless/iwlwifi/iwl-agn.c b/drivers/net/wireless/iwlwifi/iwl-agn.c
index e19ff11c8dc..d3e103c1b1c 100644
--- a/drivers/net/wireless/iwlwifi/iwl-agn.c
+++ b/drivers/net/wireless/iwlwifi/iwl-agn.c
@@ -2534,6 +2534,7 @@ static int iwlagn_mac_ampdu_action(struct ieee80211_hw *hw,
2534 struct iwl_priv *priv = hw->priv; 2534 struct iwl_priv *priv = hw->priv;
2535 int ret = -EINVAL; 2535 int ret = -EINVAL;
2536 struct iwl_station_priv *sta_priv = (void *) sta->drv_priv; 2536 struct iwl_station_priv *sta_priv = (void *) sta->drv_priv;
2537 struct iwl_rxon_context *ctx = iwl_rxon_ctx_from_vif(vif);
2537 2538
2538 IWL_DEBUG_HT(priv, "A-MPDU action on addr %pM tid %d\n", 2539 IWL_DEBUG_HT(priv, "A-MPDU action on addr %pM tid %d\n",
2539 sta->addr, tid); 2540 sta->addr, tid);
@@ -2587,8 +2588,8 @@ static int iwlagn_mac_ampdu_action(struct ieee80211_hw *hw,
2587 case IEEE80211_AMPDU_TX_OPERATIONAL: 2588 case IEEE80211_AMPDU_TX_OPERATIONAL:
2588 buf_size = min_t(int, buf_size, LINK_QUAL_AGG_FRAME_LIMIT_DEF); 2589 buf_size = min_t(int, buf_size, LINK_QUAL_AGG_FRAME_LIMIT_DEF);
2589 2590
2590 iwl_trans_txq_agg_setup(trans(priv), iwl_sta_id(sta), tid, 2591 iwl_trans_txq_agg_setup(trans(priv), ctx->ctxid, iwl_sta_id(sta),
2591 buf_size); 2592 tid, buf_size);
2592 2593
2593 /* 2594 /*
2594 * If the limit is 0, then it wasn't initialised yet, 2595 * If the limit is 0, then it wasn't initialised yet,
diff --git a/drivers/net/wireless/iwlwifi/iwl-dev.h b/drivers/net/wireless/iwlwifi/iwl-dev.h
index aa56736aebb..5e79c140ac1 100644
--- a/drivers/net/wireless/iwlwifi/iwl-dev.h
+++ b/drivers/net/wireless/iwlwifi/iwl-dev.h
@@ -961,13 +961,6 @@ struct iwl_notification_wait {
961 bool triggered, aborted; 961 bool triggered, aborted;
962}; 962};
963 963
964enum iwl_rxon_context_id {
965 IWL_RXON_CTX_BSS,
966 IWL_RXON_CTX_PAN,
967
968 NUM_IWL_RXON_CTX
969};
970
971struct iwl_rxon_context { 964struct iwl_rxon_context {
972 struct ieee80211_vif *vif; 965 struct ieee80211_vif *vif;
973 966
diff --git a/drivers/net/wireless/iwlwifi/iwl-shared.h b/drivers/net/wireless/iwlwifi/iwl-shared.h
index db606a6857c..4cfa31e2529 100644
--- a/drivers/net/wireless/iwlwifi/iwl-shared.h
+++ b/drivers/net/wireless/iwlwifi/iwl-shared.h
@@ -67,6 +67,7 @@
67#include <linux/spinlock.h> 67#include <linux/spinlock.h>
68#include <linux/mutex.h> 68#include <linux/mutex.h>
69#include <linux/gfp.h> 69#include <linux/gfp.h>
70#include <net/mac80211.h>
70 71
71#include "iwl-commands.h" 72#include "iwl-commands.h"
72 73
@@ -192,7 +193,6 @@ struct iwl_ht_agg {
192#define IWL_EMPTYING_HW_QUEUE_ADDBA 2 193#define IWL_EMPTYING_HW_QUEUE_ADDBA 2
193#define IWL_EMPTYING_HW_QUEUE_DELBA 3 194#define IWL_EMPTYING_HW_QUEUE_DELBA 3
194 u8 state; 195 u8 state;
195 u8 tx_fifo;
196}; 196};
197 197
198struct iwl_tid_data { 198struct iwl_tid_data {
@@ -284,6 +284,50 @@ struct iwl_rx_mem_buffer {
284 284
285#define rxb_addr(r) page_address(r->page) 285#define rxb_addr(r) page_address(r->page)
286 286
287/*
288 * mac80211 queues, ACs, hardware queues, FIFOs.
289 *
290 * Cf. http://wireless.kernel.org/en/developers/Documentation/mac80211/queues
291 *
292 * Mac80211 uses the following numbers, which we get as from it
293 * by way of skb_get_queue_mapping(skb):
294 *
295 * VO 0
296 * VI 1
297 * BE 2
298 * BK 3
299 *
300 *
301 * Regular (not A-MPDU) frames are put into hardware queues corresponding
302 * to the FIFOs, see comments in iwl-prph.h. Aggregated frames get their
303 * own queue per aggregation session (RA/TID combination), such queues are
304 * set up to map into FIFOs too, for which we need an AC->FIFO mapping. In
305 * order to map frames to the right queue, we also need an AC->hw queue
306 * mapping. This is implemented here.
307 *
308 * Due to the way hw queues are set up (by the hw specific modules like
309 * iwl-4965.c, iwl-5000.c etc.), the AC->hw queue mapping is the identity
310 * mapping.
311 */
312
313static const u8 tid_to_ac[] = {
314 IEEE80211_AC_BE,
315 IEEE80211_AC_BK,
316 IEEE80211_AC_BK,
317 IEEE80211_AC_BE,
318 IEEE80211_AC_VI,
319 IEEE80211_AC_VI,
320 IEEE80211_AC_VO,
321 IEEE80211_AC_VO
322};
323
324enum iwl_rxon_context_id {
325 IWL_RXON_CTX_BSS,
326 IWL_RXON_CTX_PAN,
327
328 NUM_IWL_RXON_CTX
329};
330
287#ifdef CONFIG_PM 331#ifdef CONFIG_PM
288int iwl_suspend(struct iwl_priv *priv); 332int iwl_suspend(struct iwl_priv *priv);
289int iwl_resume(struct iwl_priv *priv); 333int iwl_resume(struct iwl_priv *priv);
diff --git a/drivers/net/wireless/iwlwifi/iwl-trans-int-pcie.h b/drivers/net/wireless/iwlwifi/iwl-trans-int-pcie.h
index 269d9e3188b..f443c106291 100644
--- a/drivers/net/wireless/iwlwifi/iwl-trans-int-pcie.h
+++ b/drivers/net/wireless/iwlwifi/iwl-trans-int-pcie.h
@@ -175,14 +175,14 @@ void iwl_tx_cmd_complete(struct iwl_priv *priv, struct iwl_rx_mem_buffer *rxb);
175void iwl_trans_txq_update_byte_cnt_tbl(struct iwl_trans *trans, 175void iwl_trans_txq_update_byte_cnt_tbl(struct iwl_trans *trans,
176 struct iwl_tx_queue *txq, 176 struct iwl_tx_queue *txq,
177 u16 byte_cnt); 177 u16 byte_cnt);
178int iwl_trans_pcie_txq_agg_disable(struct iwl_priv *priv, u16 txq_id, 178int iwl_trans_pcie_txq_agg_disable(struct iwl_priv *priv, u16 txq_id);
179 u16 ssn_idx, u8 tx_fifo);
180void iwl_trans_set_wr_ptrs(struct iwl_trans *trans, int txq_id, u32 index); 179void iwl_trans_set_wr_ptrs(struct iwl_trans *trans, int txq_id, u32 index);
181void iwl_trans_tx_queue_set_status(struct iwl_priv *priv, 180void iwl_trans_tx_queue_set_status(struct iwl_priv *priv,
182 struct iwl_tx_queue *txq, 181 struct iwl_tx_queue *txq,
183 int tx_fifo_id, int scd_retry); 182 int tx_fifo_id, int scd_retry);
184void iwl_trans_pcie_txq_agg_setup(struct iwl_priv *priv, int sta_id, int tid, 183void iwl_trans_pcie_txq_agg_setup(struct iwl_priv *priv,
185 int frame_limit); 184 enum iwl_rxon_context_id ctx,
185 int sta_id, int tid, int frame_limit);
186void iwlagn_txq_free_tfd(struct iwl_trans *trans, struct iwl_tx_queue *txq, 186void iwlagn_txq_free_tfd(struct iwl_trans *trans, struct iwl_tx_queue *txq,
187 int index); 187 int index);
188void iwl_tx_queue_reclaim(struct iwl_trans *trans, int txq_id, int index, 188void iwl_tx_queue_reclaim(struct iwl_trans *trans, int txq_id, int index,
diff --git a/drivers/net/wireless/iwlwifi/iwl-trans-tx-pcie.c b/drivers/net/wireless/iwlwifi/iwl-trans-tx-pcie.c
index cc518afd39e..96ad0afd185 100644
--- a/drivers/net/wireless/iwlwifi/iwl-trans-tx-pcie.c
+++ b/drivers/net/wireless/iwlwifi/iwl-trans-tx-pcie.c
@@ -424,8 +424,18 @@ void iwl_trans_tx_queue_set_status(struct iwl_priv *priv,
424 scd_retry ? "BA" : "AC/CMD", txq_id, tx_fifo_id); 424 scd_retry ? "BA" : "AC/CMD", txq_id, tx_fifo_id);
425} 425}
426 426
427void iwl_trans_pcie_txq_agg_setup(struct iwl_priv *priv, int sta_id, int tid, 427static inline int get_fifo_from_tid(struct iwl_rxon_context *ctx, u16 tid)
428 int frame_limit) 428{
429 if (likely(tid < ARRAY_SIZE(tid_to_ac)))
430 return ctx->ac_to_fifo[tid_to_ac[tid]];
431
432 /* no support for TIDs 8-15 yet */
433 return -EINVAL;
434}
435
436void iwl_trans_pcie_txq_agg_setup(struct iwl_priv *priv,
437 enum iwl_rxon_context_id ctx, int sta_id,
438 int tid, int frame_limit)
429{ 439{
430 int tx_fifo, txq_id, ssn_idx; 440 int tx_fifo, txq_id, ssn_idx;
431 u16 ra_tid; 441 u16 ra_tid;
@@ -441,11 +451,16 @@ void iwl_trans_pcie_txq_agg_setup(struct iwl_priv *priv, int sta_id, int tid,
441 if (WARN_ON(tid >= IWL_MAX_TID_COUNT)) 451 if (WARN_ON(tid >= IWL_MAX_TID_COUNT))
442 return; 452 return;
443 453
454 tx_fifo = get_fifo_from_tid(&priv->contexts[ctx], tid);
455 if (WARN_ON(tx_fifo < 0)) {
456 IWL_ERR(trans, "txq_agg_setup, bad fifo: %d\n", tx_fifo);
457 return;
458 }
459
444 spin_lock_irqsave(&priv->shrd->sta_lock, flags); 460 spin_lock_irqsave(&priv->shrd->sta_lock, flags);
445 tid_data = &priv->shrd->tid_data[sta_id][tid]; 461 tid_data = &priv->shrd->tid_data[sta_id][tid];
446 ssn_idx = SEQ_TO_SN(tid_data->seq_number); 462 ssn_idx = SEQ_TO_SN(tid_data->seq_number);
447 txq_id = tid_data->agg.txq_id; 463 txq_id = tid_data->agg.txq_id;
448 tx_fifo = tid_data->agg.tx_fifo;
449 spin_unlock_irqrestore(&priv->shrd->sta_lock, flags); 464 spin_unlock_irqrestore(&priv->shrd->sta_lock, flags);
450 465
451 ra_tid = BUILD_RAxTID(sta_id, tid); 466 ra_tid = BUILD_RAxTID(sta_id, tid);
@@ -492,8 +507,7 @@ void iwl_trans_pcie_txq_agg_setup(struct iwl_priv *priv, int sta_id, int tid,
492 spin_unlock_irqrestore(&priv->shrd->lock, flags); 507 spin_unlock_irqrestore(&priv->shrd->lock, flags);
493} 508}
494 509
495int iwl_trans_pcie_txq_agg_disable(struct iwl_priv *priv, u16 txq_id, 510int iwl_trans_pcie_txq_agg_disable(struct iwl_priv *priv, u16 txq_id)
496 u16 ssn_idx, u8 tx_fifo)
497{ 511{
498 struct iwl_trans *trans = trans(priv); 512 struct iwl_trans *trans = trans(priv);
499 if ((IWLAGN_FIRST_AMPDU_QUEUE > txq_id) || 513 if ((IWLAGN_FIRST_AMPDU_QUEUE > txq_id) ||
@@ -511,14 +525,14 @@ int iwl_trans_pcie_txq_agg_disable(struct iwl_priv *priv, u16 txq_id,
511 525
512 iwl_clear_bits_prph(bus(priv), SCD_AGGR_SEL, (1 << txq_id)); 526 iwl_clear_bits_prph(bus(priv), SCD_AGGR_SEL, (1 << txq_id));
513 527
514 priv->txq[txq_id].q.read_ptr = (ssn_idx & 0xff); 528 priv->txq[txq_id].q.read_ptr = 0;
515 priv->txq[txq_id].q.write_ptr = (ssn_idx & 0xff); 529 priv->txq[txq_id].q.write_ptr = 0;
516 /* supposes that ssn_idx is valid (!= 0xFFF) */ 530 /* supposes that ssn_idx is valid (!= 0xFFF) */
517 iwl_trans_set_wr_ptrs(trans, txq_id, ssn_idx); 531 iwl_trans_set_wr_ptrs(trans, txq_id, 0);
518 532
519 iwl_clear_bits_prph(bus(priv), SCD_INTERRUPT_MASK, (1 << txq_id)); 533 iwl_clear_bits_prph(bus(priv), SCD_INTERRUPT_MASK, (1 << txq_id));
520 iwl_txq_ctx_deactivate(priv, txq_id); 534 iwl_txq_ctx_deactivate(priv, txq_id);
521 iwl_trans_tx_queue_set_status(priv, &priv->txq[txq_id], tx_fifo, 0); 535 iwl_trans_tx_queue_set_status(priv, &priv->txq[txq_id], 0, 0);
522 536
523 return 0; 537 return 0;
524} 538}
diff --git a/drivers/net/wireless/iwlwifi/iwl-trans.h b/drivers/net/wireless/iwlwifi/iwl-trans.h
index 2385de267bb..011c8244456 100644
--- a/drivers/net/wireless/iwlwifi/iwl-trans.h
+++ b/drivers/net/wireless/iwlwifi/iwl-trans.h
@@ -123,10 +123,10 @@ struct iwl_trans_ops {
123 void (*reclaim)(struct iwl_trans *trans, int txq_id, int ssn, 123 void (*reclaim)(struct iwl_trans *trans, int txq_id, int ssn,
124 u32 status, struct sk_buff_head *skbs); 124 u32 status, struct sk_buff_head *skbs);
125 125
126 int (*txq_agg_disable)(struct iwl_priv *priv, u16 txq_id, 126 int (*txq_agg_disable)(struct iwl_priv *priv, u16 txq_id);
127 u16 ssn_idx, u8 tx_fifo); 127 void (*txq_agg_setup)(struct iwl_priv *priv,
128 void (*txq_agg_setup)(struct iwl_priv *priv, int sta_id, int tid, 128 enum iwl_rxon_context_id ctx, int sta_id,
129 int frame_limit); 129 int tid, int frame_limit);
130 130
131 void (*kick_nic)(struct iwl_trans *trans); 131 void (*kick_nic)(struct iwl_trans *trans);
132 132
@@ -209,17 +209,17 @@ static inline void iwl_trans_reclaim(struct iwl_trans *trans, int txq_id,
209 trans->ops->reclaim(trans, txq_id, ssn, status, skbs); 209 trans->ops->reclaim(trans, txq_id, ssn, status, skbs);
210} 210}
211 211
212static inline int iwl_trans_txq_agg_disable(struct iwl_trans *trans, u16 txq_id, 212static inline int iwl_trans_txq_agg_disable(struct iwl_trans *trans, u16 txq_id)
213 u16 ssn_idx, u8 tx_fifo)
214{ 213{
215 return trans->ops->txq_agg_disable(priv(trans), txq_id, 214 return trans->ops->txq_agg_disable(priv(trans), txq_id);
216 ssn_idx, tx_fifo);
217} 215}
218 216
219static inline void iwl_trans_txq_agg_setup(struct iwl_trans *trans, int sta_id, 217static inline void iwl_trans_txq_agg_setup(struct iwl_trans *trans,
220 int tid, int frame_limit) 218 enum iwl_rxon_context_id ctx,
219 int sta_id, int tid,
220 int frame_limit)
221{ 221{
222 trans->ops->txq_agg_setup(priv(trans), sta_id, tid, frame_limit); 222 trans->ops->txq_agg_setup(priv(trans), ctx, sta_id, tid, frame_limit);
223} 223}
224 224
225static inline void iwl_trans_kick_nic(struct iwl_trans *trans) 225static inline void iwl_trans_kick_nic(struct iwl_trans *trans)