diff --git a/package/kernel/mac80211/patches/subsys/321-wifi-mac80211-add-ieee80211_txq_aql_pending.patch b/package/kernel/mac80211/patches/subsys/321-wifi-mac80211-add-ieee80211_txq_aql_pending.patch new file mode 100644 index 0000000000..91facb3c93 --- /dev/null +++ b/package/kernel/mac80211/patches/subsys/321-wifi-mac80211-add-ieee80211_txq_aql_pending.patch @@ -0,0 +1,59 @@ +From: Felix Fietkau +Date: Mon, 23 Mar 2026 10:14:22 +0000 +Subject: [PATCH] wifi: mac80211: add ieee80211_txq_aql_pending() + +Add a function to allow drivers to query the pending AQL airtime +for a given txq, for both unicast and broadcast. +This will be used for mt76 to limit buffering in AP mode for power-save +stations. + +Signed-off-by: Felix Fietkau +--- + +--- a/include/net/mac80211.h ++++ b/include/net/mac80211.h +@@ -6603,6 +6603,17 @@ bool + ieee80211_txq_airtime_check(struct ieee80211_hw *hw, struct ieee80211_txq *txq); + + /** ++ * ieee80211_txq_aql_pending - get pending AQL airtime for a txq ++ * ++ * @hw: pointer obtained from ieee80211_alloc_hw() ++ * @txq: pointer obtained from station or virtual interface ++ * ++ * Return: pending airtime (in usec) for the given txq. ++ */ ++u32 ieee80211_txq_aql_pending(struct ieee80211_hw *hw, ++ struct ieee80211_txq *txq); ++ ++/** + * ieee80211_iter_keys - iterate keys programmed into the device + * @hw: pointer obtained from ieee80211_alloc_hw() + * @vif: virtual interface to iterate, may be %NULL for all +--- a/net/mac80211/tx.c ++++ b/net/mac80211/tx.c +@@ -4185,6 +4185,24 @@ bool ieee80211_txq_airtime_check(struct + } + EXPORT_SYMBOL(ieee80211_txq_airtime_check); + ++u32 ieee80211_txq_aql_pending(struct ieee80211_hw *hw, ++ struct ieee80211_txq *txq) ++{ ++ struct ieee80211_local *local = hw_to_local(hw); ++ struct sta_info *sta; ++ ++ if (!txq->sta) ++ return atomic_read(&local->aql_bc_pending_airtime); ++ ++ sta = container_of(txq->sta, struct sta_info, sta); ++ ++ if (unlikely(txq->tid == IEEE80211_NUM_TIDS)) ++ return 0; ++ ++ return atomic_read(&sta->airtime[txq->ac].aql_tx_pending); ++} ++EXPORT_SYMBOL(ieee80211_txq_aql_pending); ++ + static bool + ieee80211_txq_schedule_airtime_check(struct ieee80211_local *local, u8 ac) + {