diff options
-rw-r--r-- | include/net/mac80211.h | 15 | ||||
-rw-r--r-- | net/mac80211/agg-rx.c | 22 |
2 files changed, 36 insertions, 1 deletions
diff --git a/include/net/mac80211.h b/include/net/mac80211.h index b2b5419467cc..f8149ca192b4 100644 --- a/include/net/mac80211.h +++ b/include/net/mac80211.h | |||
@@ -5499,6 +5499,21 @@ static inline void ieee80211_stop_rx_ba_session_offl(struct ieee80211_vif *vif, | |||
5499 | ieee80211_manage_rx_ba_offl(vif, addr, tid + IEEE80211_NUM_TIDS); | 5499 | ieee80211_manage_rx_ba_offl(vif, addr, tid + IEEE80211_NUM_TIDS); |
5500 | } | 5500 | } |
5501 | 5501 | ||
5502 | /** | ||
5503 | * ieee80211_rx_ba_timer_expired - stop a Rx BA session due to timeout | ||
5504 | * | ||
5505 | * Some device drivers do not offload AddBa/DelBa negotiation, but handle rx | ||
5506 | * buffer reording internally, and therefore also handle the session timer. | ||
5507 | * | ||
5508 | * Trigger the timeout flow, which sends a DelBa. | ||
5509 | * | ||
5510 | * @vif: &struct ieee80211_vif pointer from the add_interface callback | ||
5511 | * @addr: station mac address | ||
5512 | * @tid: the rx tid | ||
5513 | */ | ||
5514 | void ieee80211_rx_ba_timer_expired(struct ieee80211_vif *vif, | ||
5515 | const u8 *addr, unsigned int tid); | ||
5516 | |||
5502 | /* Rate control API */ | 5517 | /* Rate control API */ |
5503 | 5518 | ||
5504 | /** | 5519 | /** |
diff --git a/net/mac80211/agg-rx.c b/net/mac80211/agg-rx.c index 8708cbe8af5b..2b36eff5d97e 100644 --- a/net/mac80211/agg-rx.c +++ b/net/mac80211/agg-rx.c | |||
@@ -7,7 +7,7 @@ | |||
7 | * Copyright 2006-2007 Jiri Benc <jbenc@suse.cz> | 7 | * Copyright 2006-2007 Jiri Benc <jbenc@suse.cz> |
8 | * Copyright 2007, Michael Wu <flamingice@sourmilk.net> | 8 | * Copyright 2007, Michael Wu <flamingice@sourmilk.net> |
9 | * Copyright 2007-2010, Intel Corporation | 9 | * Copyright 2007-2010, Intel Corporation |
10 | * Copyright(c) 2015 Intel Deutschland GmbH | 10 | * Copyright(c) 2015-2017 Intel Deutschland GmbH |
11 | * | 11 | * |
12 | * This program is free software; you can redistribute it and/or modify | 12 | * This program is free software; you can redistribute it and/or modify |
13 | * it under the terms of the GNU General Public License version 2 as | 13 | * it under the terms of the GNU General Public License version 2 as |
@@ -466,3 +466,23 @@ void ieee80211_manage_rx_ba_offl(struct ieee80211_vif *vif, | |||
466 | rcu_read_unlock(); | 466 | rcu_read_unlock(); |
467 | } | 467 | } |
468 | EXPORT_SYMBOL(ieee80211_manage_rx_ba_offl); | 468 | EXPORT_SYMBOL(ieee80211_manage_rx_ba_offl); |
469 | |||
470 | void ieee80211_rx_ba_timer_expired(struct ieee80211_vif *vif, | ||
471 | const u8 *addr, unsigned int tid) | ||
472 | { | ||
473 | struct ieee80211_sub_if_data *sdata = vif_to_sdata(vif); | ||
474 | struct ieee80211_local *local = sdata->local; | ||
475 | struct sta_info *sta; | ||
476 | |||
477 | rcu_read_lock(); | ||
478 | sta = sta_info_get_bss(sdata, addr); | ||
479 | if (!sta) | ||
480 | goto unlock; | ||
481 | |||
482 | set_bit(tid, sta->ampdu_mlme.tid_rx_timer_expired); | ||
483 | ieee80211_queue_work(&local->hw, &sta->ampdu_mlme.work); | ||
484 | |||
485 | unlock: | ||
486 | rcu_read_unlock(); | ||
487 | } | ||
488 | EXPORT_SYMBOL(ieee80211_rx_ba_timer_expired); | ||