mirror of
https://github.com/openwrt/openwrt.git
synced 2024-12-22 06:57:57 +00:00
mac80211: add patch for allowing the driver to refresh aggregation sessions
Required by a mt76 update Signed-off-by: Felix Fietkau <nbd@nbd.name>
This commit is contained in:
parent
ee9d706c20
commit
97a060dce2
@ -0,0 +1,60 @@
|
|||||||
|
From: Ryder Lee <ryder.lee@mediatek.com>
|
||||||
|
Date: Sat, 18 Feb 2023 01:50:05 +0800
|
||||||
|
Subject: [PATCH] wifi: mac80211: introduce
|
||||||
|
ieee80211_refresh_tx_agg_session_timer()
|
||||||
|
|
||||||
|
This allows low level drivers to refresh the tx agg session timer, based on
|
||||||
|
querying stats from the firmware usually. Especially for some mt76 devices
|
||||||
|
support .net_fill_forward_path would bypass mac80211, which leads to tx BA
|
||||||
|
session timeout for certain clients.
|
||||||
|
|
||||||
|
Signed-off-by: Ryder Lee <ryder.lee@mediatek.com>
|
||||||
|
---
|
||||||
|
|
||||||
|
--- a/include/net/mac80211.h
|
||||||
|
+++ b/include/net/mac80211.h
|
||||||
|
@@ -5970,6 +5970,18 @@ void ieee80211_queue_delayed_work(struct
|
||||||
|
unsigned long delay);
|
||||||
|
|
||||||
|
/**
|
||||||
|
+ * ieee80211_refresh_tx_agg_session_timer - Refresh a tx agg session timer.
|
||||||
|
+ * @sta: the station for which to start a BA session
|
||||||
|
+ * @tid: the TID to BA on.
|
||||||
|
+ *
|
||||||
|
+ * This function allows low level driver to refresh tx agg session timer
|
||||||
|
+ * to maintain BA session, the session level will still be managed by the
|
||||||
|
+ * mac80211.
|
||||||
|
+ */
|
||||||
|
+void ieee80211_refresh_tx_agg_session_timer(struct ieee80211_sta *sta,
|
||||||
|
+ u16 tid);
|
||||||
|
+
|
||||||
|
+/**
|
||||||
|
* ieee80211_start_tx_ba_session - Start a tx Block Ack session.
|
||||||
|
* @sta: the station for which to start a BA session
|
||||||
|
* @tid: the TID to BA on.
|
||||||
|
--- a/net/mac80211/agg-tx.c
|
||||||
|
+++ b/net/mac80211/agg-tx.c
|
||||||
|
@@ -552,6 +552,23 @@ void ieee80211_tx_ba_session_handle_star
|
||||||
|
ieee80211_send_addba_with_timeout(sta, tid_tx);
|
||||||
|
}
|
||||||
|
|
||||||
|
+void ieee80211_refresh_tx_agg_session_timer(struct ieee80211_sta *pubsta,
|
||||||
|
+ u16 tid)
|
||||||
|
+{
|
||||||
|
+ struct sta_info *sta = container_of(pubsta, struct sta_info, sta);
|
||||||
|
+ struct tid_ampdu_tx *tid_tx;
|
||||||
|
+
|
||||||
|
+ if (WARN_ON_ONCE(tid >= IEEE80211_NUM_TIDS))
|
||||||
|
+ return;
|
||||||
|
+
|
||||||
|
+ tid_tx = rcu_dereference(sta->ampdu_mlme.tid_tx[tid]);
|
||||||
|
+ if (!tid_tx)
|
||||||
|
+ return;
|
||||||
|
+
|
||||||
|
+ tid_tx->last_tx = jiffies;
|
||||||
|
+}
|
||||||
|
+EXPORT_SYMBOL(ieee80211_refresh_tx_agg_session_timer);
|
||||||
|
+
|
||||||
|
/*
|
||||||
|
* After accepting the AddBA Response we activated a timer,
|
||||||
|
* resetting it after each frame that we send.
|
Loading…
Reference in New Issue
Block a user