diff options
-rw-r--r-- | drivers/net/wireless/ath/ath9k/htc_drv_txrx.c | 2 | ||||
-rw-r--r-- | drivers/net/wireless/ath/ath9k/rc.c | 2 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-agn-rs.c | 2 | ||||
-rw-r--r-- | drivers/net/wireless/rtlwifi/rc.c | 2 | ||||
-rw-r--r-- | include/net/mac80211.h | 4 | ||||
-rw-r--r-- | net/mac80211/agg-tx.c | 7 | ||||
-rw-r--r-- | net/mac80211/debugfs_sta.c | 2 | ||||
-rw-r--r-- | net/mac80211/rc80211_minstrel_ht.c | 2 | ||||
-rw-r--r-- | net/mac80211/sta_info.h | 2 |
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 | */ |
2445 | int ieee80211_start_tx_ba_session(struct ieee80211_sta *sta, u16 tid); | 2446 | int 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 | ||
348 | int ieee80211_start_tx_ba_session(struct ieee80211_sta *pubsta, u16 tid) | 348 | int 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 | ||
380 | static void | 380 | static 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; |