mirror of
https://github.com/openwrt/openwrt.git
synced 2024-12-21 22:47:56 +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