aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/net/wireless/ath/ath9k/htc_drv_txrx.c2
-rw-r--r--drivers/net/wireless/ath/ath9k/rc.c2
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-agn-rs.c2
-rw-r--r--drivers/net/wireless/rtlwifi/rc.c2
-rw-r--r--include/net/mac80211.h4
-rw-r--r--net/mac80211/agg-tx.c7
-rw-r--r--net/mac80211/debugfs_sta.c2
-rw-r--r--net/mac80211/rc80211_minstrel_ht.c2
-rw-r--r--net/mac80211/sta_info.h2
9 files changed, 16 insertions, 9 deletions
diff --git a/drivers/net/wireless/ath/ath9k/htc_drv_txrx.c b/drivers/net/wireless/ath/ath9k/htc_drv_txrx.c
index 31fad82239b3..33f36029fa4f 100644
--- a/drivers/net/wireless/ath/ath9k/htc_drv_txrx.c
+++ b/drivers/net/wireless/ath/ath9k/htc_drv_txrx.c
@@ -251,7 +251,7 @@ void ath9k_tx_tasklet(unsigned long data)
251 ista = (struct ath9k_htc_sta *)sta->drv_priv; 251 ista = (struct ath9k_htc_sta *)sta->drv_priv;
252 252
253 if (ath9k_htc_check_tx_aggr(priv, ista, tid)) { 253 if (ath9k_htc_check_tx_aggr(priv, ista, tid)) {
254 ieee80211_start_tx_ba_session(sta, tid); 254 ieee80211_start_tx_ba_session(sta, tid, 0);
255 spin_lock_bh(&priv->tx_lock); 255 spin_lock_bh(&priv->tx_lock);
256 ista->tid_state[tid] = AGGR_PROGRESS; 256 ista->tid_state[tid] = AGGR_PROGRESS;
257 spin_unlock_bh(&priv->tx_lock); 257 spin_unlock_bh(&priv->tx_lock);
diff --git a/drivers/net/wireless/ath/ath9k/rc.c b/drivers/net/wireless/ath/ath9k/rc.c
index 2061a755a026..896d12986b1e 100644
--- a/drivers/net/wireless/ath/ath9k/rc.c
+++ b/drivers/net/wireless/ath/ath9k/rc.c
@@ -1373,7 +1373,7 @@ static void ath_tx_status(void *priv, struct ieee80211_supported_band *sband,
1373 an = (struct ath_node *)sta->drv_priv; 1373 an = (struct ath_node *)sta->drv_priv;
1374 1374
1375 if(ath_tx_aggr_check(sc, an, tid)) 1375 if(ath_tx_aggr_check(sc, an, tid))
1376 ieee80211_start_tx_ba_session(sta, tid); 1376 ieee80211_start_tx_ba_session(sta, tid, 0);
1377 } 1377 }
1378 } 1378 }
1379 1379
diff --git a/drivers/net/wireless/iwlwifi/iwl-agn-rs.c b/drivers/net/wireless/iwlwifi/iwl-agn-rs.c
index ee123482e1d5..5083dba122ca 100644
--- a/drivers/net/wireless/iwlwifi/iwl-agn-rs.c
+++ b/drivers/net/wireless/iwlwifi/iwl-agn-rs.c
@@ -387,7 +387,7 @@ static int rs_tl_turn_on_agg_for_tid(struct iwl_priv *priv,
387 if (load > IWL_AGG_LOAD_THRESHOLD) { 387 if (load > IWL_AGG_LOAD_THRESHOLD) {
388 IWL_DEBUG_HT(priv, "Starting Tx agg: STA: %pM tid: %d\n", 388 IWL_DEBUG_HT(priv, "Starting Tx agg: STA: %pM tid: %d\n",
389 sta->addr, tid); 389 sta->addr, tid);
390 ret = ieee80211_start_tx_ba_session(sta, tid); 390 ret = ieee80211_start_tx_ba_session(sta, tid, 5000);
391 if (ret == -EAGAIN) { 391 if (ret == -EAGAIN) {
392 /* 392 /*
393 * driver and mac80211 is out of sync 393 * driver and mac80211 is out of sync
diff --git a/drivers/net/wireless/rtlwifi/rc.c b/drivers/net/wireless/rtlwifi/rc.c
index 904b8fd01f6d..91634107434a 100644
--- a/drivers/net/wireless/rtlwifi/rc.c
+++ b/drivers/net/wireless/rtlwifi/rc.c
@@ -169,7 +169,7 @@ static void rtl_tx_status(void *ppriv,
169 tid = qc[0] & 0xf; 169 tid = qc[0] & 0xf;
170 170
171 if (_rtl_tx_aggr_check(rtlpriv, tid)) 171 if (_rtl_tx_aggr_check(rtlpriv, tid))
172 ieee80211_start_tx_ba_session(sta, tid); 172 ieee80211_start_tx_ba_session(sta, tid, 5000);
173 } 173 }
174 } 174 }
175} 175}
diff --git a/include/net/mac80211.h b/include/net/mac80211.h
index e411cf87fb41..69ded1ee49ce 100644
--- a/include/net/mac80211.h
+++ b/include/net/mac80211.h
@@ -2435,6 +2435,7 @@ void ieee80211_queue_delayed_work(struct ieee80211_hw *hw,
2435 * ieee80211_start_tx_ba_session - Start a tx Block Ack session. 2435 * ieee80211_start_tx_ba_session - Start a tx Block Ack session.
2436 * @sta: the station for which to start a BA session 2436 * @sta: the station for which to start a BA session
2437 * @tid: the TID to BA on. 2437 * @tid: the TID to BA on.
2438 * @timeout: session timeout value (in TUs)
2438 * 2439 *
2439 * Return: success if addBA request was sent, failure otherwise 2440 * Return: success if addBA request was sent, failure otherwise
2440 * 2441 *
@@ -2442,7 +2443,8 @@ void ieee80211_queue_delayed_work(struct ieee80211_hw *hw,
2442 * the need to start aggregation on a certain RA/TID, the session level 2443 * the need to start aggregation on a certain RA/TID, the session level
2443 * will be managed by the mac80211. 2444 * will be managed by the mac80211.
2444 */ 2445 */
2445int ieee80211_start_tx_ba_session(struct ieee80211_sta *sta, u16 tid); 2446int ieee80211_start_tx_ba_session(struct ieee80211_sta *sta, u16 tid,
2447 u16 timeout);
2446 2448
2447/** 2449/**
2448 * ieee80211_start_tx_ba_cb_irqsafe - low level driver ready to aggregate. 2450 * ieee80211_start_tx_ba_cb_irqsafe - low level driver ready to aggregate.
diff --git a/net/mac80211/agg-tx.c b/net/mac80211/agg-tx.c
index d4679b265ba8..9cc472c6a6a5 100644
--- a/net/mac80211/agg-tx.c
+++ b/net/mac80211/agg-tx.c
@@ -342,10 +342,11 @@ void ieee80211_tx_ba_session_handle_start(struct sta_info *sta, int tid)
342 /* send AddBA request */ 342 /* send AddBA request */
343 ieee80211_send_addba_request(sdata, sta->sta.addr, tid, 343 ieee80211_send_addba_request(sdata, sta->sta.addr, tid,
344 tid_tx->dialog_token, start_seq_num, 344 tid_tx->dialog_token, start_seq_num,
345 0x40, 5000); 345 0x40, tid_tx->timeout);
346} 346}
347 347
348int ieee80211_start_tx_ba_session(struct ieee80211_sta *pubsta, u16 tid) 348int ieee80211_start_tx_ba_session(struct ieee80211_sta *pubsta, u16 tid,
349 u16 timeout)
349{ 350{
350 struct sta_info *sta = container_of(pubsta, struct sta_info, sta); 351 struct sta_info *sta = container_of(pubsta, struct sta_info, sta);
351 struct ieee80211_sub_if_data *sdata = sta->sdata; 352 struct ieee80211_sub_if_data *sdata = sta->sdata;
@@ -420,6 +421,8 @@ int ieee80211_start_tx_ba_session(struct ieee80211_sta *pubsta, u16 tid)
420 skb_queue_head_init(&tid_tx->pending); 421 skb_queue_head_init(&tid_tx->pending);
421 __set_bit(HT_AGG_STATE_WANT_START, &tid_tx->state); 422 __set_bit(HT_AGG_STATE_WANT_START, &tid_tx->state);
422 423
424 tid_tx->timeout = timeout;
425
423 /* Tx timer */ 426 /* Tx timer */
424 tid_tx->addba_resp_timer.function = sta_addba_resp_timer_expired; 427 tid_tx->addba_resp_timer.function = sta_addba_resp_timer_expired;
425 tid_tx->addba_resp_timer.data = (unsigned long)&sta->timer_to_tid[tid]; 428 tid_tx->addba_resp_timer.data = (unsigned long)&sta->timer_to_tid[tid];
diff --git a/net/mac80211/debugfs_sta.c b/net/mac80211/debugfs_sta.c
index 8bb5af85f469..c04a1396cf8d 100644
--- a/net/mac80211/debugfs_sta.c
+++ b/net/mac80211/debugfs_sta.c
@@ -189,7 +189,7 @@ static ssize_t sta_agg_status_write(struct file *file, const char __user *userbu
189 189
190 if (tx) { 190 if (tx) {
191 if (start) 191 if (start)
192 ret = ieee80211_start_tx_ba_session(&sta->sta, tid); 192 ret = ieee80211_start_tx_ba_session(&sta->sta, tid, 5000);
193 else 193 else
194 ret = ieee80211_stop_tx_ba_session(&sta->sta, tid); 194 ret = ieee80211_stop_tx_ba_session(&sta->sta, tid);
195 } else { 195 } else {
diff --git a/net/mac80211/rc80211_minstrel_ht.c b/net/mac80211/rc80211_minstrel_ht.c
index 4ad7a362fcc1..165a4518bb48 100644
--- a/net/mac80211/rc80211_minstrel_ht.c
+++ b/net/mac80211/rc80211_minstrel_ht.c
@@ -374,7 +374,7 @@ minstrel_aggr_check(struct minstrel_priv *mp, struct ieee80211_sta *pubsta, stru
374 if (skb_get_queue_mapping(skb) == IEEE80211_AC_VO) 374 if (skb_get_queue_mapping(skb) == IEEE80211_AC_VO)
375 return; 375 return;
376 376
377 ieee80211_start_tx_ba_session(pubsta, tid); 377 ieee80211_start_tx_ba_session(pubsta, tid, 5000);
378} 378}
379 379
380static void 380static void
diff --git a/net/mac80211/sta_info.h b/net/mac80211/sta_info.h
index fdca52cf88de..bbdd2a86a94b 100644
--- a/net/mac80211/sta_info.h
+++ b/net/mac80211/sta_info.h
@@ -78,6 +78,7 @@ enum ieee80211_sta_info_flags {
78 * @addba_resp_timer: timer for peer's response to addba request 78 * @addba_resp_timer: timer for peer's response to addba request
79 * @pending: pending frames queue -- use sta's spinlock to protect 79 * @pending: pending frames queue -- use sta's spinlock to protect
80 * @dialog_token: dialog token for aggregation session 80 * @dialog_token: dialog token for aggregation session
81 * @timeout: session timeout value to be filled in ADDBA requests
81 * @state: session state (see above) 82 * @state: session state (see above)
82 * @stop_initiator: initiator of a session stop 83 * @stop_initiator: initiator of a session stop
83 * @tx_stop: TX DelBA frame when stopping 84 * @tx_stop: TX DelBA frame when stopping
@@ -96,6 +97,7 @@ struct tid_ampdu_tx {
96 struct timer_list addba_resp_timer; 97 struct timer_list addba_resp_timer;
97 struct sk_buff_head pending; 98 struct sk_buff_head pending;
98 unsigned long state; 99 unsigned long state;
100 u16 timeout;
99 u8 dialog_token; 101 u8 dialog_token;
100 u8 stop_initiator; 102 u8 stop_initiator;
101 bool tx_stop; 103 bool tx_stop;