diff options
author | Felix Fietkau <nbd@nbd.name> | 2023-04-17 17:17:16 +0200 |
---|---|---|
committer | Felix Fietkau <nbd@nbd.name> | 2023-04-18 10:43:06 +0200 |
commit | e722b667c5a59bbd5aff787002f7f5457d0bf721 (patch) | |
tree | 2d623c4af6b5e3f375ecf5f24d167a5b40a201d9 /package/kernel/mac80211/patches/subsys | |
parent | e11d00d44c66b1534fbc399fda55951cd0a2168a (diff) | |
download | upstream-e722b667c5a59bbd5aff787002f7f5457d0bf721.tar.gz upstream-e722b667c5a59bbd5aff787002f7f5457d0bf721.tar.bz2 upstream-e722b667c5a59bbd5aff787002f7f5457d0bf721.zip |
mac80211: update to v6.1.24
Drop patches accepted upstream
Signed-off-by: Felix Fietkau <nbd@nbd.name>
Diffstat (limited to 'package/kernel/mac80211/patches/subsys')
23 files changed, 198 insertions, 612 deletions
diff --git a/package/kernel/mac80211/patches/subsys/110-mac80211_keep_keys_on_stop_ap.patch b/package/kernel/mac80211/patches/subsys/110-mac80211_keep_keys_on_stop_ap.patch index 4dd26da2ec..4d4a2a8f5e 100644 --- a/package/kernel/mac80211/patches/subsys/110-mac80211_keep_keys_on_stop_ap.patch +++ b/package/kernel/mac80211/patches/subsys/110-mac80211_keep_keys_on_stop_ap.patch @@ -9,8 +9,8 @@ Used for AP+STA support in OpenWrt - preserve AP mode keys across STA reconnect --- a/net/mac80211/cfg.c +++ b/net/mac80211/cfg.c -@@ -1512,7 +1512,6 @@ static int ieee80211_stop_ap(struct wiph - link_conf->ftmr_params = NULL; +@@ -1519,7 +1519,6 @@ static int ieee80211_stop_ap(struct wiph + link_conf->bssid_indicator = 0; __sta_info_flush(sdata, true); - ieee80211_free_keys(sdata, true); diff --git a/package/kernel/mac80211/patches/subsys/210-ap_scan.patch b/package/kernel/mac80211/patches/subsys/210-ap_scan.patch index bfbb28c55c..10b842d9af 100644 --- a/package/kernel/mac80211/patches/subsys/210-ap_scan.patch +++ b/package/kernel/mac80211/patches/subsys/210-ap_scan.patch @@ -8,7 +8,7 @@ Subject: [PATCH] mac80211: allow scans in access point mode (for site survey) --- a/net/mac80211/cfg.c +++ b/net/mac80211/cfg.c -@@ -2720,6 +2720,8 @@ static int ieee80211_scan(struct wiphy * +@@ -2727,6 +2727,8 @@ static int ieee80211_scan(struct wiphy * */ fallthrough; case NL80211_IFTYPE_AP: diff --git a/package/kernel/mac80211/patches/subsys/305-mac80211-increase-quantum-for-airtime-scheduler.patch b/package/kernel/mac80211/patches/subsys/305-mac80211-increase-quantum-for-airtime-scheduler.patch index d541b621fd..0ac972955f 100644 --- a/package/kernel/mac80211/patches/subsys/305-mac80211-increase-quantum-for-airtime-scheduler.patch +++ b/package/kernel/mac80211/patches/subsys/305-mac80211-increase-quantum-for-airtime-scheduler.patch @@ -23,7 +23,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> --- a/net/mac80211/tx.c +++ b/net/mac80211/tx.c -@@ -3976,7 +3976,7 @@ struct ieee80211_txq *ieee80211_next_txq +@@ -3984,7 +3984,7 @@ struct ieee80211_txq *ieee80211_next_txq if (deficit < 0) sta->airtime[txqi->txq.ac].deficit += @@ -32,7 +32,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> if (deficit < 0 || !aql_check) { list_move_tail(&txqi->schedule_order, -@@ -4119,7 +4119,8 @@ bool ieee80211_txq_may_transmit(struct i +@@ -4127,7 +4127,8 @@ bool ieee80211_txq_may_transmit(struct i } sta = container_of(iter->txq.sta, struct sta_info, sta); if (ieee80211_sta_deficit(sta, ac) < 0) @@ -42,7 +42,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> list_move_tail(&iter->schedule_order, &local->active_txqs[ac]); } -@@ -4127,7 +4128,7 @@ bool ieee80211_txq_may_transmit(struct i +@@ -4135,7 +4136,7 @@ bool ieee80211_txq_may_transmit(struct i if (sta->airtime[ac].deficit >= 0) goto out; diff --git a/package/kernel/mac80211/patches/subsys/306-01-v6.2-wifi-mac80211-add-internal-handler-for-wake_tx_queue.patch b/package/kernel/mac80211/patches/subsys/306-01-v6.2-wifi-mac80211-add-internal-handler-for-wake_tx_queue.patch index 76869830ce..d14ba05e69 100644 --- a/package/kernel/mac80211/patches/subsys/306-01-v6.2-wifi-mac80211-add-internal-handler-for-wake_tx_queue.patch +++ b/package/kernel/mac80211/patches/subsys/306-01-v6.2-wifi-mac80211-add-internal-handler-for-wake_tx_queue.patch @@ -51,16 +51,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com> * * Drivers can optionally delegate responsibility for scheduling queues to * mac80211, to take advantage of airtime fairness accounting. In this case, to -@@ -1826,7 +1827,7 @@ struct ieee80211_vif_cfg { - * for this interface. - * @drv_priv: data area for driver use, will always be aligned to - * sizeof(void \*). -- * @txq: the multicast data TX queue (if driver uses the TXQ abstraction) -+ * @txq: the multicast data TX queue - * @txqs_stopped: per AC flag to indicate that intermediate TXQs are stopped, - * protected by fq->lock. - * @offload_flags: 802.3 -> 802.11 enapsulation offload flags, see -@@ -2252,8 +2253,8 @@ struct ieee80211_link_sta { +@@ -2248,8 +2249,8 @@ struct ieee80211_link_sta { * For non MLO STA it will point to the deflink data. For MLO STA * ieee80211_sta_recalc_aggregates() must be called to update it. * @support_p2p_ps: indicates whether the STA supports P2P PS mechanism or not. @@ -71,7 +62,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com> * @deflink: This holds the default link STA information, for non MLO STA all link * specific STA information is accessed through @deflink or through * link[0] which points to address of @deflink. For MLO Link STA -@@ -5691,7 +5692,7 @@ void ieee80211_key_replay(struct ieee802 +@@ -5687,7 +5688,7 @@ void ieee80211_key_replay(struct ieee802 * @hw: pointer as obtained from ieee80211_alloc_hw(). * @queue: queue number (counted from zero). * @@ -80,7 +71,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com> */ void ieee80211_wake_queue(struct ieee80211_hw *hw, int queue); -@@ -5700,7 +5701,7 @@ void ieee80211_wake_queue(struct ieee802 +@@ -5696,7 +5697,7 @@ void ieee80211_wake_queue(struct ieee802 * @hw: pointer as obtained from ieee80211_alloc_hw(). * @queue: queue number (counted from zero). * @@ -89,7 +80,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com> */ void ieee80211_stop_queue(struct ieee80211_hw *hw, int queue); -@@ -5709,7 +5710,7 @@ void ieee80211_stop_queue(struct ieee802 +@@ -5705,7 +5706,7 @@ void ieee80211_stop_queue(struct ieee802 * @hw: pointer as obtained from ieee80211_alloc_hw(). * @queue: queue number (counted from zero). * @@ -98,7 +89,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com> * * Return: %true if the queue is stopped. %false otherwise. */ -@@ -5720,7 +5721,7 @@ int ieee80211_queue_stopped(struct ieee8 +@@ -5716,7 +5717,7 @@ int ieee80211_queue_stopped(struct ieee8 * ieee80211_stop_queues - stop all queues * @hw: pointer as obtained from ieee80211_alloc_hw(). * @@ -107,7 +98,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com> */ void ieee80211_stop_queues(struct ieee80211_hw *hw); -@@ -5728,7 +5729,7 @@ void ieee80211_stop_queues(struct ieee80 +@@ -5724,7 +5725,7 @@ void ieee80211_stop_queues(struct ieee80 * ieee80211_wake_queues - wake all queues * @hw: pointer as obtained from ieee80211_alloc_hw(). * @@ -116,7 +107,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com> */ void ieee80211_wake_queues(struct ieee80211_hw *hw); -@@ -6950,6 +6951,18 @@ static inline struct sk_buff *ieee80211_ +@@ -6946,6 +6947,18 @@ static inline struct sk_buff *ieee80211_ } /** diff --git a/package/kernel/mac80211/patches/subsys/306-02-v6.2-wifi-mac80211-add-wake_tx_queue-callback-to-drivers.patch b/package/kernel/mac80211/patches/subsys/306-02-v6.2-wifi-mac80211-add-wake_tx_queue-callback-to-drivers.patch index 8e2c205059..fee038d90c 100644 --- a/package/kernel/mac80211/patches/subsys/306-02-v6.2-wifi-mac80211-add-wake_tx_queue-callback-to-drivers.patch +++ b/package/kernel/mac80211/patches/subsys/306-02-v6.2-wifi-mac80211-add-wake_tx_queue-callback-to-drivers.patch @@ -26,7 +26,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com> .add_interface = adm8211_add_interface, --- a/drivers/net/wireless/ath/ar5523/ar5523.c +++ b/drivers/net/wireless/ath/ar5523/ar5523.c -@@ -1355,6 +1355,7 @@ static const struct ieee80211_ops ar5523 +@@ -1361,6 +1361,7 @@ static const struct ieee80211_ops ar5523 .start = ar5523_start, .stop = ar5523_stop, .tx = ar5523_tx, @@ -36,7 +36,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com> .remove_interface = ar5523_remove_interface, --- a/drivers/net/wireless/ath/ath11k/mac.c +++ b/drivers/net/wireless/ath/ath11k/mac.c -@@ -8539,6 +8539,7 @@ err_fallback: +@@ -8587,6 +8587,7 @@ err_fallback: static const struct ieee80211_ops ath11k_ops = { .tx = ath11k_mac_op_tx, @@ -126,7 +126,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com> .add_interface = brcms_ops_add_interface, --- a/drivers/net/wireless/intel/iwlegacy/3945-mac.c +++ b/drivers/net/wireless/intel/iwlegacy/3945-mac.c -@@ -3435,6 +3435,7 @@ static const struct attribute_group il39 +@@ -3439,6 +3439,7 @@ static const struct attribute_group il39 static struct ieee80211_ops il3945_mac_ops __ro_after_init = { .tx = il3945_mac_tx, @@ -136,7 +136,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com> .add_interface = il_mac_add_interface, --- a/drivers/net/wireless/intel/iwlegacy/4965-mac.c +++ b/drivers/net/wireless/intel/iwlegacy/4965-mac.c -@@ -6304,6 +6304,7 @@ il4965_tx_queue_set_status(struct il_pri +@@ -6308,6 +6308,7 @@ il4965_tx_queue_set_status(struct il_pri static const struct ieee80211_ops il4965_mac_ops = { .tx = il4965_mac_tx, @@ -306,7 +306,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com> .add_interface = rtl8187_add_interface, --- a/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_core.c +++ b/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_core.c -@@ -6561,6 +6561,7 @@ static void rtl8xxxu_stop(struct ieee802 +@@ -6548,6 +6548,7 @@ static void rtl8xxxu_stop(struct ieee802 static const struct ieee80211_ops rtl8xxxu_ops = { .tx = rtl8xxxu_tx, diff --git a/package/kernel/mac80211/patches/subsys/306-03-v6.2-wifi-mac80211-Drop-support-for-TX-push-path.patch b/package/kernel/mac80211/patches/subsys/306-03-v6.2-wifi-mac80211-Drop-support-for-TX-push-path.patch index 9d58345555..f9f9977cee 100644 --- a/package/kernel/mac80211/patches/subsys/306-03-v6.2-wifi-mac80211-Drop-support-for-TX-push-path.patch +++ b/package/kernel/mac80211/patches/subsys/306-03-v6.2-wifi-mac80211-Drop-support-for-TX-push-path.patch @@ -11,7 +11,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com> --- a/net/mac80211/cfg.c +++ b/net/mac80211/cfg.c -@@ -4339,9 +4339,6 @@ static int ieee80211_get_txq_stats(struc +@@ -4346,9 +4346,6 @@ static int ieee80211_get_txq_stats(struc struct ieee80211_sub_if_data *sdata; int ret = 0; @@ -48,7 +48,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com> } --- a/net/mac80211/debugfs_sta.c +++ b/net/mac80211/debugfs_sta.c -@@ -1056,10 +1056,8 @@ void ieee80211_sta_debugfs_add(struct st +@@ -1057,10 +1057,8 @@ void ieee80211_sta_debugfs_add(struct st DEBUGFS_ADD_COUNTER(rx_fragments, deflink.rx_stats.fragments); DEBUGFS_ADD_COUNTER(tx_filtered, deflink.status_stats.filtered); @@ -63,7 +63,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com> NL80211_EXT_FEATURE_AQL)) --- a/net/mac80211/ieee80211_i.h +++ b/net/mac80211/ieee80211_i.h -@@ -2290,7 +2290,6 @@ void ieee80211_wake_queue_by_reason(stru +@@ -2294,7 +2294,6 @@ void ieee80211_wake_queue_by_reason(stru void ieee80211_stop_queue_by_reason(struct ieee80211_hw *hw, int queue, enum queue_stop_reason reason, bool refcounted); @@ -73,7 +73,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com> void ieee80211_add_pending_skbs(struct ieee80211_local *local, --- a/net/mac80211/iface.c +++ b/net/mac80211/iface.c -@@ -458,12 +458,6 @@ static void ieee80211_do_stop(struct iee +@@ -460,12 +460,6 @@ static void ieee80211_do_stop(struct iee if (cancel_scan) ieee80211_scan_cancel(local); @@ -86,7 +86,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com> ieee80211_roc_purge(local, sdata); switch (sdata->vif.type) { -@@ -811,13 +805,6 @@ static void ieee80211_uninit(struct net_ +@@ -813,13 +807,6 @@ static void ieee80211_uninit(struct net_ ieee80211_teardown_sdata(IEEE80211_DEV_TO_SUB_IF(dev)); } @@ -100,7 +100,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com> static void ieee80211_get_stats64(struct net_device *dev, struct rtnl_link_stats64 *stats) { -@@ -831,7 +818,6 @@ static const struct net_device_ops ieee8 +@@ -833,7 +820,6 @@ static const struct net_device_ops ieee8 .ndo_start_xmit = ieee80211_subif_start_xmit, .ndo_set_rx_mode = ieee80211_set_multicast_list, .ndo_set_mac_address = ieee80211_change_mac, @@ -108,7 +108,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com> .ndo_get_stats64 = ieee80211_get_stats64, }; -@@ -939,7 +925,6 @@ static const struct net_device_ops ieee8 +@@ -941,7 +927,6 @@ static const struct net_device_ops ieee8 .ndo_start_xmit = ieee80211_subif_start_xmit_8023, .ndo_set_rx_mode = ieee80211_set_multicast_list, .ndo_set_mac_address = ieee80211_change_mac, @@ -116,7 +116,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com> .ndo_get_stats64 = ieee80211_get_stats64, .ndo_fill_forward_path = ieee80211_netdev_fill_forward_path, }; -@@ -1441,35 +1426,6 @@ int ieee80211_do_open(struct wireless_de +@@ -1443,35 +1428,6 @@ int ieee80211_do_open(struct wireless_de ieee80211_recalc_ps(local); @@ -152,7 +152,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com> set_bit(SDATA_STATE_RUNNING, &sdata->state); return 0; -@@ -1499,17 +1455,12 @@ static void ieee80211_if_setup(struct ne +@@ -1501,17 +1457,12 @@ static void ieee80211_if_setup(struct ne { ether_setup(dev); dev->priv_flags &= ~IFF_TX_SKB_SHARING; @@ -171,7 +171,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com> static void ieee80211_iface_process_skb(struct ieee80211_local *local, struct ieee80211_sub_if_data *sdata, struct sk_buff *skb) -@@ -2094,9 +2045,7 @@ int ieee80211_if_add(struct ieee80211_lo +@@ -2096,9 +2047,7 @@ int ieee80211_if_add(struct ieee80211_lo struct net_device *ndev = NULL; struct ieee80211_sub_if_data *sdata = NULL; struct txq_info *txqi; @@ -181,7 +181,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com> ASSERT_RTNL(); -@@ -2119,30 +2068,18 @@ int ieee80211_if_add(struct ieee80211_lo +@@ -2121,30 +2070,18 @@ int ieee80211_if_add(struct ieee80211_lo sizeof(void *)); int txq_size = 0; @@ -346,7 +346,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com> free: sta_info_free_link(&sta->deflink); #ifdef CPTCFG_MAC80211_MESH -@@ -1959,9 +1954,6 @@ ieee80211_sta_ps_deliver_response(struct +@@ -1960,9 +1955,6 @@ ieee80211_sta_ps_deliver_response(struct * TIM recalculation. */ @@ -356,7 +356,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com> for (tid = 0; tid < ARRAY_SIZE(sta->sta.txq); tid++) { if (!sta->sta.txq[tid] || !(driver_release_tids & BIT(tid)) || -@@ -2446,7 +2438,7 @@ static void sta_set_tidstats(struct sta_ +@@ -2447,7 +2439,7 @@ static void sta_set_tidstats(struct sta_ tidstats->tx_msdu_failed = sta->deflink.status_stats.msdu_failed[tid]; } @@ -365,7 +365,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com> spin_lock_bh(&local->fq.lock); rcu_read_lock(); -@@ -2774,9 +2766,6 @@ unsigned long ieee80211_sta_last_active( +@@ -2775,9 +2767,6 @@ unsigned long ieee80211_sta_last_active( static void sta_update_codel_params(struct sta_info *sta, u32 thr) { @@ -387,7 +387,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com> * Set the WLAN_TDLS_TEARDOWN flag to indicate a teardown in progress. --- a/net/mac80211/tx.c +++ b/net/mac80211/tx.c -@@ -1599,9 +1599,6 @@ int ieee80211_txq_setup_flows(struct iee +@@ -1600,9 +1600,6 @@ int ieee80211_txq_setup_flows(struct iee bool supp_vht = false; enum nl80211_band band; @@ -397,7 +397,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com> ret = fq_init(fq, 4096); if (ret) return ret; -@@ -1649,9 +1646,6 @@ void ieee80211_txq_teardown_flows(struct +@@ -1650,9 +1647,6 @@ void ieee80211_txq_teardown_flows(struct { struct fq *fq = &local->fq; @@ -407,7 +407,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com> kfree(local->cvars); local->cvars = NULL; -@@ -1668,8 +1662,7 @@ static bool ieee80211_queue_skb(struct i +@@ -1669,8 +1663,7 @@ static bool ieee80211_queue_skb(struct i struct ieee80211_vif *vif; struct txq_info *txqi; @@ -417,7 +417,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com> return false; if (sdata->vif.type == NL80211_IFTYPE_AP_VLAN) -@@ -4185,12 +4178,7 @@ void __ieee80211_subif_start_xmit(struct +@@ -4193,12 +4186,7 @@ void __ieee80211_subif_start_xmit(struct if (IS_ERR(sta)) sta = NULL; @@ -431,7 +431,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com> ieee80211_aggr_check(sdata, sta, skb); sk_pacing_shift_update(skb->sk, sdata->local->hw.tx_sk_pacing_shift); -@@ -4501,11 +4489,7 @@ static void ieee80211_8023_xmit(struct i +@@ -4509,11 +4497,7 @@ static void ieee80211_8023_xmit(struct i struct tid_ampdu_tx *tid_tx; u8 tid; @@ -444,7 +444,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com> if (unlikely(test_bit(SCAN_SW_SCANNING, &local->scanning)) && test_bit(SDATA_STATE_OFFCHANNEL, &sdata->state)) -@@ -4759,9 +4743,6 @@ void ieee80211_tx_pending(struct tasklet +@@ -4767,9 +4751,6 @@ void ieee80211_tx_pending(struct tasklet if (!txok) break; } @@ -454,7 +454,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com> } spin_unlock_irqrestore(&local->queue_stop_reason_lock, flags); -@@ -5954,10 +5935,9 @@ int ieee80211_tx_control_port(struct wip +@@ -5962,10 +5943,9 @@ int ieee80211_tx_control_port(struct wip } if (!IS_ERR(sta)) { @@ -468,7 +468,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com> * for MLO STA, the SA should be the AP MLD address, but --- a/net/mac80211/util.c +++ b/net/mac80211/util.c -@@ -446,39 +446,6 @@ void ieee80211_wake_txqs(struct tasklet_ +@@ -444,39 +444,6 @@ void ieee80211_wake_txqs(struct tasklet_ spin_unlock_irqrestore(&local->queue_stop_reason_lock, flags); } @@ -508,7 +508,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com> static void __ieee80211_wake_queue(struct ieee80211_hw *hw, int queue, enum queue_stop_reason reason, bool refcounted, -@@ -509,11 +476,7 @@ static void __ieee80211_wake_queue(struc +@@ -507,11 +474,7 @@ static void __ieee80211_wake_queue(struc /* someone still has this queue stopped */ return; @@ -521,7 +521,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com> tasklet_schedule(&local->tx_pending_tasklet); /* -@@ -523,12 +486,10 @@ static void __ieee80211_wake_queue(struc +@@ -521,12 +484,10 @@ static void __ieee80211_wake_queue(struc * release someone's lock, but it is fine because all the callers of * __ieee80211_wake_queue call it right before releasing the lock. */ @@ -538,17 +538,44 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com> } void ieee80211_wake_queue_by_reason(struct ieee80211_hw *hw, int queue, -@@ -585,10 +546,6 @@ static void __ieee80211_stop_queue(struc - for (ac = 0; ac < n_acs; ac++) { - if (sdata->vif.hw_queue[ac] == queue || - sdata->vif.cab_queue == queue) { -- if (!local->ops->wake_tx_queue) { -- netif_stop_subqueue(sdata->dev, ac); -- continue; -- } - spin_lock(&local->fq.lock); - sdata->vif.txqs_stopped[ac] = true; - spin_unlock(&local->fq.lock); +@@ -554,8 +515,6 @@ static void __ieee80211_stop_queue(struc + bool refcounted) + { + struct ieee80211_local *local = hw_to_local(hw); +- struct ieee80211_sub_if_data *sdata; +- int n_acs = IEEE80211_NUM_ACS; + + trace_stop_queue(local, queue, reason); + +@@ -567,27 +526,7 @@ static void __ieee80211_stop_queue(struc + else + local->q_stop_reasons[queue][reason]++; + +- if (__test_and_set_bit(reason, &local->queue_stop_reasons[queue])) +- return; +- +- if (local->hw.queues < IEEE80211_NUM_ACS) +- n_acs = 1; +- +- rcu_read_lock(); +- list_for_each_entry_rcu(sdata, &local->interfaces, list) { +- int ac; +- +- if (!sdata->dev) +- continue; +- +- for (ac = 0; ac < n_acs; ac++) { +- if (!local->ops->wake_tx_queue && +- (sdata->vif.hw_queue[ac] == queue || +- sdata->vif.cab_queue == queue)) +- netif_stop_subqueue(sdata->dev, ac); +- } +- } +- rcu_read_unlock(); ++ set_bit(reason, &local->queue_stop_reasons[queue]); + } + + void ieee80211_stop_queue_by_reason(struct ieee80211_hw *hw, int queue, --- a/net/mac80211/wme.c +++ b/net/mac80211/wme.c @@ -122,6 +122,9 @@ u16 ieee80211_select_queue_80211(struct @@ -561,7 +588,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com> if ((info->control.flags & IEEE80211_TX_CTRL_DONT_REORDER) || local->hw.queues < IEEE80211_NUM_ACS) return 0; -@@ -141,12 +144,15 @@ u16 ieee80211_select_queue_80211(struct +@@ -141,13 +144,16 @@ u16 ieee80211_select_queue_80211(struct return ieee80211_downgrade_queue(sdata, NULL, skb); } @@ -570,6 +597,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com> +u16 ieee80211_select_queue(struct ieee80211_sub_if_data *sdata, + struct sta_info *sta, struct sk_buff *skb) { + const struct ethhdr *eth = (void *)skb->data; struct mac80211_qos_map *qos_map; bool qos; @@ -577,9 +605,9 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com> + skb_get_hash(skb); + /* all mesh/ocb stations are required to support WME */ - if (sta && (sdata->vif.type == NL80211_IFTYPE_MESH_POINT || - sdata->vif.type == NL80211_IFTYPE_OCB)) -@@ -176,59 +182,6 @@ u16 __ieee80211_select_queue(struct ieee + if ((sdata->vif.type == NL80211_IFTYPE_MESH_POINT && + !is_multicast_ether_addr(eth->h_dest)) || +@@ -178,59 +184,6 @@ u16 __ieee80211_select_queue(struct ieee return ieee80211_downgrade_queue(sdata, sta, skb); } diff --git a/package/kernel/mac80211/patches/subsys/307-v6.2-wifi-mac80211-fix-initialization-of-rx-link-and-rx-l.patch b/package/kernel/mac80211/patches/subsys/307-v6.2-wifi-mac80211-fix-initialization-of-rx-link-and-rx-l.patch deleted file mode 100644 index 0201eeadb1..0000000000 --- a/package/kernel/mac80211/patches/subsys/307-v6.2-wifi-mac80211-fix-initialization-of-rx-link-and-rx-l.patch +++ /dev/null @@ -1,410 +0,0 @@ -From: Felix Fietkau <nbd@nbd.name> -Date: Tue, 13 Dec 2022 21:03:19 +0100 -Subject: [PATCH] wifi: mac80211: fix initialization of rx->link and - rx->link_sta - -There are some codepaths that do not initialize rx->link_sta properly. This -causes a crash in places which assume that rx->link_sta is valid if rx->sta -is valid. -One known instance is triggered by __ieee80211_rx_h_amsdu being called from -fast-rx. - -Since the initialization of rx->link and rx->link_sta is rather convoluted -and duplicated in many places, clean it up by using a helper function to -set it. - -Fixes: ccdde7c74ffd ("wifi: mac80211: properly implement MLO key handling") -Fixes: b320d6c456ff ("wifi: mac80211: use correct rx link_sta instead of default") -Signed-off-by: Felix Fietkau <nbd@nbd.name> ---- - ---- a/net/mac80211/rx.c -+++ b/net/mac80211/rx.c -@@ -4067,6 +4067,58 @@ static void ieee80211_invoke_rx_handlers - #undef CALL_RXH - } - -+static bool -+ieee80211_rx_is_valid_sta_link_id(struct ieee80211_sta *sta, u8 link_id) -+{ -+ if (!sta->mlo) -+ return false; -+ -+ return !!(sta->valid_links & BIT(link_id)); -+} -+ -+static bool ieee80211_rx_data_set_link(struct ieee80211_rx_data *rx, -+ u8 link_id) -+{ -+ rx->link_id = link_id; -+ rx->link = rcu_dereference(rx->sdata->link[link_id]); -+ -+ if (!rx->sta || !rx->sta->sta.mlo) -+ return rx->link; -+ -+ if (!ieee80211_rx_is_valid_sta_link_id(&rx->sta->sta, link_id)) -+ return false; -+ -+ rx->link_sta = rcu_dereference(rx->sta->link[link_id]); -+ -+ return rx->link && rx->link_sta; -+} -+ -+static bool ieee80211_rx_data_set_sta(struct ieee80211_rx_data *rx, -+ struct ieee80211_sta *pubsta, -+ int link_id) -+{ -+ struct sta_info *sta; -+ -+ sta = container_of(pubsta, struct sta_info, sta); -+ -+ rx->link_id = link_id; -+ rx->sta = sta; -+ -+ if (sta) { -+ rx->local = sta->sdata->local; -+ if (!rx->sdata) -+ rx->sdata = sta->sdata; -+ rx->link_sta = &sta->deflink; -+ } -+ -+ if (link_id < 0) -+ rx->link = &rx->sdata->deflink; -+ else if (!ieee80211_rx_data_set_link(rx, link_id)) -+ return false; -+ -+ return true; -+} -+ - /* - * This function makes calls into the RX path, therefore - * it has to be invoked under RCU read lock. -@@ -4075,16 +4127,19 @@ void ieee80211_release_reorder_timeout(s - { - struct sk_buff_head frames; - struct ieee80211_rx_data rx = { -- .sta = sta, -- .sdata = sta->sdata, -- .local = sta->local, - /* This is OK -- must be QoS data frame */ - .security_idx = tid, - .seqno_idx = tid, -- .link_id = -1, - }; - struct tid_ampdu_rx *tid_agg_rx; -- u8 link_id; -+ int link_id = -1; -+ -+ /* FIXME: statistics won't be right with this */ -+ if (sta->sta.valid_links) -+ link_id = ffs(sta->sta.valid_links) - 1; -+ -+ if (!ieee80211_rx_data_set_sta(&rx, &sta->sta, link_id)) -+ return; - - tid_agg_rx = rcu_dereference(sta->ampdu_mlme.tid_rx[tid]); - if (!tid_agg_rx) -@@ -4104,10 +4159,6 @@ void ieee80211_release_reorder_timeout(s - }; - drv_event_callback(rx.local, rx.sdata, &event); - } -- /* FIXME: statistics won't be right with this */ -- link_id = sta->sta.valid_links ? ffs(sta->sta.valid_links) - 1 : 0; -- rx.link = rcu_dereference(sta->sdata->link[link_id]); -- rx.link_sta = rcu_dereference(sta->link[link_id]); - - ieee80211_rx_handlers(&rx, &frames); - } -@@ -4123,7 +4174,6 @@ void ieee80211_mark_rx_ba_filtered_frame - /* This is OK -- must be QoS data frame */ - .security_idx = tid, - .seqno_idx = tid, -- .link_id = -1, - }; - int i, diff; - -@@ -4134,10 +4184,8 @@ void ieee80211_mark_rx_ba_filtered_frame - - sta = container_of(pubsta, struct sta_info, sta); - -- rx.sta = sta; -- rx.sdata = sta->sdata; -- rx.link = &rx.sdata->deflink; -- rx.local = sta->local; -+ if (!ieee80211_rx_data_set_sta(&rx, pubsta, -1)) -+ return; - - rcu_read_lock(); - tid_agg_rx = rcu_dereference(sta->ampdu_mlme.tid_rx[tid]); -@@ -4524,15 +4572,6 @@ void ieee80211_check_fast_rx_iface(struc - mutex_unlock(&local->sta_mtx); - } - --static bool --ieee80211_rx_is_valid_sta_link_id(struct ieee80211_sta *sta, u8 link_id) --{ -- if (!sta->mlo) -- return false; -- -- return !!(sta->valid_links & BIT(link_id)); --} -- - static void ieee80211_rx_8023(struct ieee80211_rx_data *rx, - struct ieee80211_fast_rx *fast_rx, - int orig_len) -@@ -4643,7 +4682,6 @@ static bool ieee80211_invoke_fast_rx(str - struct sk_buff *skb = rx->skb; - struct ieee80211_hdr *hdr = (void *)skb->data; - struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(skb); -- struct sta_info *sta = rx->sta; - int orig_len = skb->len; - int hdrlen = ieee80211_hdrlen(hdr->frame_control); - int snap_offs = hdrlen; -@@ -4655,7 +4693,6 @@ static bool ieee80211_invoke_fast_rx(str - u8 da[ETH_ALEN]; - u8 sa[ETH_ALEN]; - } addrs __aligned(2); -- struct link_sta_info *link_sta; - struct ieee80211_sta_rx_stats *stats; - - /* for parallel-rx, we need to have DUP_VALIDATED, otherwise we write -@@ -4758,18 +4795,10 @@ static bool ieee80211_invoke_fast_rx(str - drop: - dev_kfree_skb(skb); - -- if (rx->link_id >= 0) { -- link_sta = rcu_dereference(sta->link[rx->link_id]); -- if (!link_sta) -- return true; -- } else { -- link_sta = &sta->deflink; -- } -- - if (fast_rx->uses_rss) -- stats = this_cpu_ptr(link_sta->pcpu_rx_stats); -+ stats = this_cpu_ptr(rx->link_sta->pcpu_rx_stats); - else -- stats = &link_sta->rx_stats; -+ stats = &rx->link_sta->rx_stats; - - stats->dropped++; - return true; -@@ -4787,8 +4816,8 @@ static bool ieee80211_prepare_and_rx_han - struct ieee80211_local *local = rx->local; - struct ieee80211_sub_if_data *sdata = rx->sdata; - struct ieee80211_hdr *hdr = (void *)skb->data; -- struct link_sta_info *link_sta = NULL; -- struct ieee80211_link_data *link; -+ struct link_sta_info *link_sta = rx->link_sta; -+ struct ieee80211_link_data *link = rx->link; - - rx->skb = skb; - -@@ -4810,35 +4839,6 @@ static bool ieee80211_prepare_and_rx_han - if (!ieee80211_accept_frame(rx)) - return false; - -- if (rx->link_id >= 0) { -- link = rcu_dereference(rx->sdata->link[rx->link_id]); -- -- /* we might race link removal */ -- if (!link) -- return true; -- rx->link = link; -- -- if (rx->sta) { -- rx->link_sta = -- rcu_dereference(rx->sta->link[rx->link_id]); -- if (!rx->link_sta) -- return true; -- } -- } else { -- if (rx->sta) -- rx->link_sta = &rx->sta->deflink; -- -- rx->link = &sdata->deflink; -- } -- -- if (unlikely(!is_multicast_ether_addr(hdr->addr1) && -- rx->link_id >= 0 && rx->sta && rx->sta->sta.mlo)) { -- link_sta = rcu_dereference(rx->sta->link[rx->link_id]); -- -- if (WARN_ON_ONCE(!link_sta)) -- return true; -- } -- - if (!consume) { - struct skb_shared_hwtstamps *shwt; - -@@ -4858,7 +4858,7 @@ static bool ieee80211_prepare_and_rx_han - shwt->hwtstamp = skb_hwtstamps(skb)->hwtstamp; - } - -- if (unlikely(link_sta)) { -+ if (unlikely(rx->sta && rx->sta->sta.mlo)) { - /* translate to MLD addresses */ - if (ether_addr_equal(link->conf->addr, hdr->addr1)) - ether_addr_copy(hdr->addr1, rx->sdata->vif.addr); -@@ -4888,6 +4888,7 @@ static void __ieee80211_rx_handle_8023(s - struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(skb); - struct ieee80211_fast_rx *fast_rx; - struct ieee80211_rx_data rx; -+ int link_id = -1; - - memset(&rx, 0, sizeof(rx)); - rx.skb = skb; -@@ -4904,12 +4905,8 @@ static void __ieee80211_rx_handle_8023(s - if (!pubsta) - goto drop; - -- rx.sta = container_of(pubsta, struct sta_info, sta); -- rx.sdata = rx.sta->sdata; -- -- if (status->link_valid && -- !ieee80211_rx_is_valid_sta_link_id(pubsta, status->link_id)) -- goto drop; -+ if (status->link_valid) -+ link_id = status->link_id; - - /* - * TODO: Should the frame be dropped if the right link_id is not -@@ -4918,19 +4915,8 @@ static void __ieee80211_rx_handle_8023(s - * link_id is used only for stats purpose and updating the stats on - * the deflink is fine? - */ -- if (status->link_valid) -- rx.link_id = status->link_id; -- -- if (rx.link_id >= 0) { -- struct ieee80211_link_data *link; -- -- link = rcu_dereference(rx.sdata->link[rx.link_id]); -- if (!link) -- goto drop; -- rx.link = link; -- } else { -- rx.link = &rx.sdata->deflink; -- } -+ if (!ieee80211_rx_data_set_sta(&rx, pubsta, link_id)) -+ goto drop; - - fast_rx = rcu_dereference(rx.sta->fast_rx); - if (!fast_rx) -@@ -4948,6 +4934,8 @@ static bool ieee80211_rx_for_interface(s - { - struct link_sta_info *link_sta; - struct ieee80211_hdr *hdr = (void *)skb->data; -+ struct sta_info *sta; -+ int link_id = -1; - - /* - * Look up link station first, in case there's a -@@ -4957,24 +4945,19 @@ static bool ieee80211_rx_for_interface(s - */ - link_sta = link_sta_info_get_bss(rx->sdata, hdr->addr2); - if (link_sta) { -- rx->sta = link_sta->sta; -- rx->link_id = link_sta->link_id; -+ sta = link_sta->sta; -+ link_id = link_sta->link_id; - } else { - struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(skb); - -- rx->sta = sta_info_get_bss(rx->sdata, hdr->addr2); -- if (rx->sta) { -- if (status->link_valid && -- !ieee80211_rx_is_valid_sta_link_id(&rx->sta->sta, -- status->link_id)) -- return false; -- -- rx->link_id = status->link_valid ? status->link_id : -1; -- } else { -- rx->link_id = -1; -- } -+ sta = sta_info_get_bss(rx->sdata, hdr->addr2); -+ if (status->link_valid) -+ link_id = status->link_id; - } - -+ if (!ieee80211_rx_data_set_sta(rx, &sta->sta, link_id)) -+ return false; -+ - return ieee80211_prepare_and_rx_handle(rx, skb, consume); - } - -@@ -5033,19 +5016,15 @@ static void __ieee80211_rx_handle_packet - - if (ieee80211_is_data(fc)) { - struct sta_info *sta, *prev_sta; -- u8 link_id = status->link_id; -+ int link_id = -1; - -- if (pubsta) { -- rx.sta = container_of(pubsta, struct sta_info, sta); -- rx.sdata = rx.sta->sdata; -+ if (status->link_valid) -+ link_id = status->link_id; - -- if (status->link_valid && -- !ieee80211_rx_is_valid_sta_link_id(pubsta, link_id)) -+ if (pubsta) { -+ if (!ieee80211_rx_data_set_sta(&rx, pubsta, link_id)) - goto out; - -- if (status->link_valid) -- rx.link_id = status->link_id; -- - /* - * In MLO connection, fetch the link_id using addr2 - * when the driver does not pass link_id in status. -@@ -5063,7 +5042,7 @@ static void __ieee80211_rx_handle_packet - if (!link_sta) - goto out; - -- rx.link_id = link_sta->link_id; -+ ieee80211_rx_data_set_link(&rx, link_sta->link_id); - } - - if (ieee80211_prepare_and_rx_handle(&rx, skb, true)) -@@ -5079,30 +5058,27 @@ static void __ieee80211_rx_handle_packet - continue; - } - -- if ((status->link_valid && -- !ieee80211_rx_is_valid_sta_link_id(&prev_sta->sta, -- link_id)) || -- (!status->link_valid && prev_sta->sta.mlo)) -+ rx.sdata = prev_sta->sdata; -+ if (!ieee80211_rx_data_set_sta(&rx, &prev_sta->sta, -+ link_id)) -+ goto out; -+ -+ if (!status->link_valid && prev_sta->sta.mlo) - continue; - -- rx.link_id = status->link_valid ? link_id : -1; -- rx.sta = prev_sta; -- rx.sdata = prev_sta->sdata; - ieee80211_prepare_and_rx_handle(&rx, skb, false); - - prev_sta = sta; - } - - if (prev_sta) { -- if ((status->link_valid && -- !ieee80211_rx_is_valid_sta_link_id(&prev_sta->sta, -- link_id)) || -- (!status->link_valid && prev_sta->sta.mlo)) -+ rx.sdata = prev_sta->sdata; -+ if (!ieee80211_rx_data_set_sta(&rx, &prev_sta->sta, -+ link_id)) - goto out; - -- rx.link_id = status->link_valid ? link_id : -1; -- rx.sta = prev_sta; -- rx.sdata = prev_sta->sdata; -+ if (!status->link_valid && prev_sta->sta.mlo) -+ goto out; - - if (ieee80211_prepare_and_rx_handle(&rx, skb, true)) - return; diff --git a/package/kernel/mac80211/patches/subsys/308-v6.2-wifi-mac80211-fix-MLO-AP_VLAN-check.patch b/package/kernel/mac80211/patches/subsys/308-v6.2-wifi-mac80211-fix-MLO-AP_VLAN-check.patch deleted file mode 100644 index 2d181e3a68..0000000000 --- a/package/kernel/mac80211/patches/subsys/308-v6.2-wifi-mac80211-fix-MLO-AP_VLAN-check.patch +++ /dev/null @@ -1,25 +0,0 @@ -From: Felix Fietkau <nbd@nbd.name> -Date: Wed, 14 Dec 2022 13:46:38 +0100 -Subject: [PATCH] wifi: mac80211: fix MLO + AP_VLAN check - -Instead of preventing adding AP_VLAN to MLO enabled APs, this check was -preventing adding more than one 4-addr AP_VLAN regardless of the MLO status. -Fix this by adding missing extra checks. - -Fixes: ae960ee90bb1 ("wifi: mac80211: prevent VLANs on MLDs") -Signed-off-by: Felix Fietkau <nbd@nbd.name> ---- - ---- a/net/mac80211/iface.c -+++ b/net/mac80211/iface.c -@@ -364,7 +364,9 @@ static int ieee80211_check_concurrent_if - - /* No support for VLAN with MLO yet */ - if (iftype == NL80211_IFTYPE_AP_VLAN && -- nsdata->wdev.use_4addr) -+ sdata->wdev.use_4addr && -+ nsdata->vif.type == NL80211_IFTYPE_AP && -+ nsdata->vif.valid_links) - return -EOPNOTSUPP; - - /* diff --git a/package/kernel/mac80211/patches/subsys/310-v6.2-mac80211-add-support-for-restricting-netdev-features.patch b/package/kernel/mac80211/patches/subsys/310-v6.2-mac80211-add-support-for-restricting-netdev-features.patch index 3d286d080d..812b12189c 100644 --- a/package/kernel/mac80211/patches/subsys/310-v6.2-mac80211-add-support-for-restricting-netdev-features.patch +++ b/package/kernel/mac80211/patches/subsys/310-v6.2-mac80211-add-support-for-restricting-netdev-features.patch @@ -70,7 +70,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> * @driver_flags: flags/capabilities the driver has for this interface, * these need to be set (or cleared) when the interface is added * or, if supported by the driver, the interface type is changed -@@ -1848,6 +1852,7 @@ struct ieee80211_vif { +@@ -1846,6 +1850,7 @@ struct ieee80211_vif { struct ieee80211_txq *txq; @@ -90,7 +90,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> --- a/net/mac80211/tx.c +++ b/net/mac80211/tx.c -@@ -1355,7 +1355,11 @@ static struct txq_info *ieee80211_get_tx +@@ -1356,7 +1356,11 @@ static struct txq_info *ieee80211_get_tx static void ieee80211_set_skb_enqueue_time(struct sk_buff *skb) { @@ -103,7 +103,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> } static u32 codel_skb_len_func(const struct sk_buff *skb) -@@ -3578,55 +3582,79 @@ ieee80211_xmit_fast_finish(struct ieee80 +@@ -3579,55 +3583,79 @@ ieee80211_xmit_fast_finish(struct ieee80 return TX_CONTINUE; } @@ -219,7 +219,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> /* will not be crypto-handled beyond what we do here, so use false * as the may-encrypt argument for the resize to not account for -@@ -3635,10 +3663,8 @@ static bool ieee80211_xmit_fast(struct i +@@ -3636,10 +3664,8 @@ static bool ieee80211_xmit_fast(struct i if (unlikely(ieee80211_skb_resize(sdata, skb, max_t(int, extra_head + hw_headroom - skb_headroom(skb), 0), @@ -232,7 +232,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> memcpy(ð, skb->data, ETH_HLEN - 2); hdr = skb_push(skb, extra_head); -@@ -3652,7 +3678,7 @@ static bool ieee80211_xmit_fast(struct i +@@ -3653,7 +3679,7 @@ static bool ieee80211_xmit_fast(struct i info->control.vif = &sdata->vif; info->flags = IEEE80211_TX_CTL_FIRST_FRAGMENT | IEEE80211_TX_CTL_DONTFRAG | @@ -241,7 +241,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> info->control.flags = IEEE80211_TX_CTRL_FAST_XMIT | u32_encode_bits(IEEE80211_LINK_UNSPECIFIED, IEEE80211_TX_CTRL_MLO_LINK); -@@ -3676,16 +3702,14 @@ static bool ieee80211_xmit_fast(struct i +@@ -3677,16 +3703,14 @@ static bool ieee80211_xmit_fast(struct i tx.key = fast_tx->key; if (ieee80211_queue_skb(local, sdata, sta, skb)) @@ -261,7 +261,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> if (sdata->vif.type == NL80211_IFTYPE_AP_VLAN) sdata = container_of(sdata->bss, -@@ -3693,6 +3717,56 @@ static bool ieee80211_xmit_fast(struct i +@@ -3694,6 +3718,56 @@ static bool ieee80211_xmit_fast(struct i __skb_queue_tail(&tx.skbs, skb); ieee80211_tx_frags(local, &sdata->vif, sta, &tx.skbs, false); @@ -318,7 +318,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> return true; } -@@ -4193,31 +4267,14 @@ void __ieee80211_subif_start_xmit(struct +@@ -4201,31 +4275,14 @@ void __ieee80211_subif_start_xmit(struct goto out; } @@ -358,7 +358,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> } skb_list_walk_safe(skb, skb, next) { -@@ -4435,9 +4492,11 @@ normal: +@@ -4443,9 +4500,11 @@ normal: return NETDEV_TX_OK; } @@ -373,7 +373,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> { struct ieee80211_local *local = sdata->local; struct ieee80211_tx_control control = {}; -@@ -4446,14 +4505,6 @@ static bool ieee80211_tx_8023(struct iee +@@ -4454,14 +4513,6 @@ static bool ieee80211_tx_8023(struct iee unsigned long flags; int q = info->hw_queue; @@ -388,7 +388,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> spin_lock_irqsave(&local->queue_stop_reason_lock, flags); if (local->queue_stop_reasons[q] || -@@ -4480,6 +4531,26 @@ static bool ieee80211_tx_8023(struct iee +@@ -4488,6 +4539,26 @@ static bool ieee80211_tx_8023(struct iee return true; } @@ -415,7 +415,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> static void ieee80211_8023_xmit(struct ieee80211_sub_if_data *sdata, struct net_device *dev, struct sta_info *sta, struct ieee80211_key *key, struct sk_buff *skb) -@@ -4487,9 +4558,13 @@ static void ieee80211_8023_xmit(struct i +@@ -4495,9 +4566,13 @@ static void ieee80211_8023_xmit(struct i struct ieee80211_tx_info *info; struct ieee80211_local *local = sdata->local; struct tid_ampdu_tx *tid_tx; @@ -430,7 +430,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> if (unlikely(test_bit(SCAN_SW_SCANNING, &local->scanning)) && test_bit(SDATA_STATE_OFFCHANNEL, &sdata->state)) -@@ -4499,9 +4574,6 @@ static void ieee80211_8023_xmit(struct i +@@ -4507,9 +4582,6 @@ static void ieee80211_8023_xmit(struct i if (unlikely(!skb)) return; @@ -440,7 +440,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> ieee80211_aggr_check(sdata, sta, skb); tid = skb->priority & IEEE80211_QOS_CTL_TAG1D_MASK; -@@ -4515,22 +4587,20 @@ static void ieee80211_8023_xmit(struct i +@@ -4523,22 +4595,20 @@ static void ieee80211_8023_xmit(struct i return; } @@ -471,7 +471,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> if (sdata->vif.type == NL80211_IFTYPE_AP_VLAN) sdata = container_of(sdata->bss, -@@ -4542,6 +4612,24 @@ static void ieee80211_8023_xmit(struct i +@@ -4550,6 +4620,24 @@ static void ieee80211_8023_xmit(struct i if (key) info->control.hw_key = &key->conf; @@ -496,7 +496,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> ieee80211_tx_8023(sdata, skb, sta, false); return; -@@ -4583,6 +4671,7 @@ netdev_tx_t ieee80211_subif_start_xmit_8 +@@ -4591,6 +4679,7 @@ netdev_tx_t ieee80211_subif_start_xmit_8 key->conf.cipher == WLAN_CIPHER_SUITE_TKIP)) goto skip_offload; diff --git a/package/kernel/mac80211/patches/subsys/317-wifi-mac80211-fix-qos-on-mesh-interfaces.patch b/package/kernel/mac80211/patches/subsys/317-wifi-mac80211-fix-qos-on-mesh-interfaces.patch deleted file mode 100644 index c60a88d2a6..0000000000 --- a/package/kernel/mac80211/patches/subsys/317-wifi-mac80211-fix-qos-on-mesh-interfaces.patch +++ /dev/null @@ -1,35 +0,0 @@ -From: Felix Fietkau <nbd@nbd.name> -Date: Wed, 15 Feb 2023 15:11:54 +0100 -Subject: [PATCH] wifi: mac80211: fix qos on mesh interfaces - -When ieee80211_select_queue is called for mesh, the sta pointer is usually -NULL, since the nexthop is looked up much later in the tx path. -Explicitly check for unicast address in that case in order to make qos work -again. - -Fixes: 50e2ab392919 ("wifi: mac80211: fix queue selection for mesh/OCB interfaces") -Signed-off-by: Felix Fietkau <nbd@nbd.name> ---- - ---- a/net/mac80211/wme.c -+++ b/net/mac80211/wme.c -@@ -147,6 +147,7 @@ u16 ieee80211_select_queue_80211(struct - u16 ieee80211_select_queue(struct ieee80211_sub_if_data *sdata, - struct sta_info *sta, struct sk_buff *skb) - { -+ const struct ethhdr *eth = (void *)skb->data; - struct mac80211_qos_map *qos_map; - bool qos; - -@@ -154,8 +155,9 @@ u16 ieee80211_select_queue(struct ieee80 - skb_get_hash(skb); - - /* all mesh/ocb stations are required to support WME */ -- if (sta && (sdata->vif.type == NL80211_IFTYPE_MESH_POINT || -- sdata->vif.type == NL80211_IFTYPE_OCB)) -+ if ((sdata->vif.type == NL80211_IFTYPE_MESH_POINT && -+ !is_multicast_ether_addr(eth->h_dest)) || -+ (sdata->vif.type == NL80211_IFTYPE_OCB && sta)) - qos = true; - else if (sta) - qos = sta->sta.wme; diff --git a/package/kernel/mac80211/patches/subsys/318-wifi-mac80211-fix-race-in-mesh-sequence-number-assig.patch b/package/kernel/mac80211/patches/subsys/318-wifi-mac80211-fix-race-in-mesh-sequence-number-assig.patch index 05e368cd2e..7d01ffdfff 100644 --- a/package/kernel/mac80211/patches/subsys/318-wifi-mac80211-fix-race-in-mesh-sequence-number-assig.patch +++ b/package/kernel/mac80211/patches/subsys/318-wifi-mac80211-fix-race-in-mesh-sequence-number-assig.patch @@ -11,7 +11,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> --- a/net/mac80211/ieee80211_i.h +++ b/net/mac80211/ieee80211_i.h -@@ -695,7 +695,7 @@ struct ieee80211_if_mesh { +@@ -696,7 +696,7 @@ struct ieee80211_if_mesh { struct mesh_stats mshstats; struct mesh_config mshcfg; atomic_t estab_plinks; diff --git a/package/kernel/mac80211/patches/subsys/319-wifi-mac80211-mesh-fast-xmit-support.patch b/package/kernel/mac80211/patches/subsys/319-wifi-mac80211-mesh-fast-xmit-support.patch index 12e9cf5744..968d2885f2 100644 --- a/package/kernel/mac80211/patches/subsys/319-wifi-mac80211-mesh-fast-xmit-support.patch +++ b/package/kernel/mac80211/patches/subsys/319-wifi-mac80211-mesh-fast-xmit-support.patch @@ -40,7 +40,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> /* Maximum number of broadcast/multicast frames to buffer when some of the * associated stations are using power saving. */ -@@ -655,6 +656,19 @@ struct mesh_table { +@@ -656,6 +657,19 @@ struct mesh_table { atomic_t entries; /* Up to MAX_MESH_NEIGHBOURS */ }; @@ -60,7 +60,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> struct ieee80211_if_mesh { struct timer_list housekeeping_timer; struct timer_list mesh_path_timer; -@@ -733,6 +747,7 @@ struct ieee80211_if_mesh { +@@ -734,6 +748,7 @@ struct ieee80211_if_mesh { struct mesh_table mpp_paths; /* Store paths for MPP&MAP */ int mesh_paths_generation; int mpp_paths_generation; @@ -68,7 +68,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> }; #ifdef CPTCFG_MAC80211_MESH -@@ -1998,6 +2013,11 @@ int ieee80211_tx_control_port(struct wip +@@ -2002,6 +2017,11 @@ int ieee80211_tx_control_port(struct wip int link_id, u64 *cookie); int ieee80211_probe_mesh_link(struct wiphy *wiphy, struct net_device *dev, const u8 *buf, size_t len); @@ -728,7 +728,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> --- a/net/mac80211/tx.c +++ b/net/mac80211/tx.c -@@ -3021,6 +3021,9 @@ void ieee80211_check_fast_xmit(struct st +@@ -3022,6 +3022,9 @@ void ieee80211_check_fast_xmit(struct st if (!ieee80211_hw_check(&local->hw, SUPPORT_FAST_XMIT)) return; @@ -738,7 +738,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> /* Locking here protects both the pointer itself, and against concurrent * invocations winning data access races to, e.g., the key pointer that * is used. -@@ -3402,6 +3405,9 @@ static bool ieee80211_amsdu_aggregate(st +@@ -3403,6 +3406,9 @@ static bool ieee80211_amsdu_aggregate(st if (sdata->vif.offload_flags & IEEE80211_OFFLOAD_ENCAP_ENABLED) return false; @@ -748,7 +748,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> if (skb_is_gso(skb)) return false; -@@ -3634,10 +3640,11 @@ free: +@@ -3635,10 +3641,11 @@ free: return NULL; } @@ -764,7 +764,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> { struct ieee80211_local *local = sdata->local; struct ieee80211_hdr *hdr = (void *)fast_tx->hdr; -@@ -3646,7 +3653,6 @@ static void __ieee80211_xmit_fast(struct +@@ -3647,7 +3654,6 @@ static void __ieee80211_xmit_fast(struct ieee80211_tx_result r; int hw_headroom = sdata->local->hw.extra_tx_headroom; int extra_head = fast_tx->hdr_len - (ETH_HLEN - 2); @@ -772,7 +772,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> skb = skb_share_check(skb, GFP_ATOMIC); if (unlikely(!skb)) -@@ -3666,11 +3672,10 @@ static void __ieee80211_xmit_fast(struct +@@ -3667,11 +3673,10 @@ static void __ieee80211_xmit_fast(struct ENCRYPT_NO))) goto free; @@ -786,7 +786,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> info = IEEE80211_SKB_CB(skb); memset(info, 0, sizeof(*info)); -@@ -3689,7 +3694,8 @@ static void __ieee80211_xmit_fast(struct +@@ -3690,7 +3695,8 @@ static void __ieee80211_xmit_fast(struct #endif if (hdr->frame_control & cpu_to_le16(IEEE80211_STYPE_QOS_DATA)) { @@ -796,7 +796,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> *ieee80211_get_qos_ctl(hdr) = tid; } -@@ -3732,6 +3738,7 @@ static bool ieee80211_xmit_fast(struct i +@@ -3733,6 +3739,7 @@ static bool ieee80211_xmit_fast(struct i struct ieee80211_hdr *hdr = (void *)fast_tx->hdr; struct tid_ampdu_tx *tid_tx = NULL; struct sk_buff *next; @@ -804,7 +804,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> u8 tid = IEEE80211_NUM_TIDS; /* control port protocol needs a lot of special handling */ -@@ -3757,6 +3764,8 @@ static bool ieee80211_xmit_fast(struct i +@@ -3758,6 +3765,8 @@ static bool ieee80211_xmit_fast(struct i } } @@ -813,7 +813,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> /* after this point (skb is modified) we cannot return false */ skb = ieee80211_tx_skb_fixup(skb, ieee80211_sdata_netdev_features(sdata)); if (!skb) -@@ -3764,7 +3773,8 @@ static bool ieee80211_xmit_fast(struct i +@@ -3765,7 +3774,8 @@ static bool ieee80211_xmit_fast(struct i skb_list_walk_safe(skb, skb, next) { skb_mark_not_on_list(skb); @@ -823,7 +823,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> } return true; -@@ -4244,8 +4254,15 @@ void __ieee80211_subif_start_xmit(struct +@@ -4252,8 +4262,15 @@ void __ieee80211_subif_start_xmit(struct return; } @@ -839,7 +839,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> if (ieee80211_lookup_ra_sta(sdata, skb, &sta)) goto out_free; -@@ -4255,8 +4272,6 @@ void __ieee80211_subif_start_xmit(struct +@@ -4263,8 +4280,6 @@ void __ieee80211_subif_start_xmit(struct skb_set_queue_mapping(skb, ieee80211_select_queue(sdata, sta, skb)); ieee80211_aggr_check(sdata, sta, skb); diff --git a/package/kernel/mac80211/patches/subsys/320-wifi-mac80211-use-mesh-header-cache-to-speed-up-mesh.patch b/package/kernel/mac80211/patches/subsys/320-wifi-mac80211-use-mesh-header-cache-to-speed-up-mesh.patch index 7ec8f3db1a..28b1ff1106 100644 --- a/package/kernel/mac80211/patches/subsys/320-wifi-mac80211-use-mesh-header-cache-to-speed-up-mesh.patch +++ b/package/kernel/mac80211/patches/subsys/320-wifi-mac80211-use-mesh-header-cache-to-speed-up-mesh.patch @@ -106,7 +106,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> rx_accept: --- a/net/mac80211/ieee80211_i.h +++ b/net/mac80211/ieee80211_i.h -@@ -2018,6 +2018,8 @@ void __ieee80211_xmit_fast(struct ieee80 +@@ -2022,6 +2022,8 @@ void __ieee80211_xmit_fast(struct ieee80 struct ieee80211_fast_tx *fast_tx, struct sk_buff *skb, bool ampdu, const u8 *da, const u8 *sa); diff --git a/package/kernel/mac80211/patches/subsys/323-v6.3-wifi-mac80211-Add-VHT-MU-MIMO-related-flags-in-ieee8.patch b/package/kernel/mac80211/patches/subsys/323-v6.3-wifi-mac80211-Add-VHT-MU-MIMO-related-flags-in-ieee8.patch index 2310593635..e23dc4d226 100644 --- a/package/kernel/mac80211/patches/subsys/323-v6.3-wifi-mac80211-Add-VHT-MU-MIMO-related-flags-in-ieee8.patch +++ b/package/kernel/mac80211/patches/subsys/323-v6.3-wifi-mac80211-Add-VHT-MU-MIMO-related-flags-in-ieee8.patch @@ -44,7 +44,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com> /** --- a/net/mac80211/cfg.c +++ b/net/mac80211/cfg.c -@@ -1251,6 +1251,21 @@ static int ieee80211_start_ap(struct wip +@@ -1252,6 +1252,21 @@ static int ieee80211_start_ap(struct wip prev_beacon_int = link_conf->beacon_int; link_conf->beacon_int = params->beacon_interval; diff --git a/package/kernel/mac80211/patches/subsys/324-v6.3-wifi-mac80211-Add-HE-MU-MIMO-related-flags-in-ieee80.patch b/package/kernel/mac80211/patches/subsys/324-v6.3-wifi-mac80211-Add-HE-MU-MIMO-related-flags-in-ieee80.patch index a3c44531bd..f843dba123 100644 --- a/package/kernel/mac80211/patches/subsys/324-v6.3-wifi-mac80211-Add-HE-MU-MIMO-related-flags-in-ieee80.patch +++ b/package/kernel/mac80211/patches/subsys/324-v6.3-wifi-mac80211-Add-HE-MU-MIMO-related-flags-in-ieee80.patch @@ -44,7 +44,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com> /** --- a/net/mac80211/cfg.c +++ b/net/mac80211/cfg.c -@@ -1280,6 +1280,21 @@ static int ieee80211_start_ap(struct wip +@@ -1281,6 +1281,21 @@ static int ieee80211_start_ap(struct wip changed |= BSS_CHANGED_HE_BSS_COLOR; } diff --git a/package/kernel/mac80211/patches/subsys/325-wifi-mac80211-introduce-ieee80211_refresh_tx_agg_ses.patch b/package/kernel/mac80211/patches/subsys/325-wifi-mac80211-introduce-ieee80211_refresh_tx_agg_ses.patch index f6d3d78d7c..1be5fcfbfa 100644 --- a/package/kernel/mac80211/patches/subsys/325-wifi-mac80211-introduce-ieee80211_refresh_tx_agg_ses.patch +++ b/package/kernel/mac80211/patches/subsys/325-wifi-mac80211-introduce-ieee80211_refresh_tx_agg_ses.patch @@ -13,7 +13,7 @@ Signed-off-by: Ryder Lee <ryder.lee@mediatek.com> --- a/include/net/mac80211.h +++ b/include/net/mac80211.h -@@ -5968,6 +5968,18 @@ void ieee80211_queue_delayed_work(struct +@@ -5964,6 +5964,18 @@ void ieee80211_queue_delayed_work(struct unsigned long delay); /** @@ -34,7 +34,7 @@ Signed-off-by: Ryder Lee <ryder.lee@mediatek.com> * @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 +@@ -554,6 +554,23 @@ void ieee80211_tx_ba_session_handle_star ieee80211_send_addba_with_timeout(sta, tid_tx); } diff --git a/package/kernel/mac80211/patches/subsys/326-wifi-mac80211-add-mesh-fast-rx-support.patch b/package/kernel/mac80211/patches/subsys/326-wifi-mac80211-add-mesh-fast-rx-support.patch index b2b94d026b..11f39c2d10 100644 --- a/package/kernel/mac80211/patches/subsys/326-wifi-mac80211-add-mesh-fast-rx-support.patch +++ b/package/kernel/mac80211/patches/subsys/326-wifi-mac80211-add-mesh-fast-rx-support.patch @@ -10,7 +10,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> --- a/net/mac80211/rx.c +++ b/net/mac80211/rx.c -@@ -4572,6 +4572,12 @@ void ieee80211_check_fast_rx(struct sta_ +@@ -4564,6 +4564,12 @@ void ieee80211_check_fast_rx(struct sta_ } break; @@ -23,7 +23,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> default: goto clear; } -@@ -4780,6 +4786,7 @@ static bool ieee80211_invoke_fast_rx(str +@@ -4772,6 +4778,7 @@ static bool ieee80211_invoke_fast_rx(str struct sk_buff *skb = rx->skb; struct ieee80211_hdr *hdr = (void *)skb->data; struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(skb); @@ -31,7 +31,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> int orig_len = skb->len; int hdrlen = ieee80211_hdrlen(hdr->frame_control); int snap_offs = hdrlen; -@@ -4841,7 +4848,8 @@ static bool ieee80211_invoke_fast_rx(str +@@ -4833,7 +4840,8 @@ static bool ieee80211_invoke_fast_rx(str snap_offs += IEEE80211_CCMP_HDR_LEN; } @@ -41,7 +41,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> if (!pskb_may_pull(skb, snap_offs + sizeof(*payload))) return false; -@@ -4880,13 +4888,29 @@ static bool ieee80211_invoke_fast_rx(str +@@ -4872,13 +4880,29 @@ static bool ieee80211_invoke_fast_rx(str /* do the header conversion - first grab the addresses */ ether_addr_copy(addrs.da, skb->data + fast_rx->da_offs); ether_addr_copy(addrs.sa, skb->data + fast_rx->sa_offs); diff --git a/package/kernel/mac80211/patches/subsys/327-wifi-mac80211-add-support-for-letting-drivers-regist.patch b/package/kernel/mac80211/patches/subsys/327-wifi-mac80211-add-support-for-letting-drivers-regist.patch index f1807bdc8a..ac290b5360 100644 --- a/package/kernel/mac80211/patches/subsys/327-wifi-mac80211-add-support-for-letting-drivers-regist.patch +++ b/package/kernel/mac80211/patches/subsys/327-wifi-mac80211-add-support-for-letting-drivers-regist.patch @@ -12,7 +12,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> --- a/include/net/mac80211.h +++ b/include/net/mac80211.h -@@ -4196,6 +4196,10 @@ struct ieee80211_prep_tx_info { +@@ -4192,6 +4192,10 @@ struct ieee80211_prep_tx_info { * Note that a sta can also be inserted or removed with valid links, * i.e. passed to @sta_add/@sta_state with sta->valid_links not zero. * In fact, cannot change from having valid_links and not having them. @@ -23,7 +23,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> */ struct ieee80211_ops { void (*tx)(struct ieee80211_hw *hw, -@@ -4551,6 +4555,11 @@ struct ieee80211_ops { +@@ -4547,6 +4551,11 @@ struct ieee80211_ops { struct ieee80211_vif *vif, struct ieee80211_sta *sta, u16 old_links, u16 new_links); @@ -63,7 +63,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> u16 old_links, u16 new_links, --- a/net/mac80211/ieee80211_i.h +++ b/net/mac80211/ieee80211_i.h -@@ -1935,7 +1935,8 @@ void ieee80211_color_change_finalize_wor +@@ -1939,7 +1939,8 @@ void ieee80211_color_collision_detection /* interface handling */ #define MAC80211_SUPPORTED_FEATURES_TX (NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM | \ NETIF_F_HW_CSUM | NETIF_F_SG | \ diff --git a/package/kernel/mac80211/patches/subsys/328-wifi-mac80211-fix-invalid-drv_sta_pre_rcu_remove-cal.patch b/package/kernel/mac80211/patches/subsys/328-wifi-mac80211-fix-invalid-drv_sta_pre_rcu_remove-cal.patch deleted file mode 100644 index 289906c88c..0000000000 --- a/package/kernel/mac80211/patches/subsys/328-wifi-mac80211-fix-invalid-drv_sta_pre_rcu_remove-cal.patch +++ /dev/null @@ -1,25 +0,0 @@ -From: Felix Fietkau <nbd@nbd.name> -Date: Fri, 24 Mar 2023 13:04:17 +0100 -Subject: [PATCH] wifi: mac80211: fix invalid drv_sta_pre_rcu_remove calls for - non-uploaded sta - -Avoid potential data corruption issues caused by uninitialized driver -private data structures. - -Reported-by: Brian Coverstone <brian@mainsequence.net> -Fixes: 6a9d1b91f34d ("mac80211: add pre-RCU-sync sta removal driver operation") -Signed-off-by: Felix Fietkau <nbd@nbd.name> ---- - ---- a/net/mac80211/sta_info.c -+++ b/net/mac80211/sta_info.c -@@ -1241,7 +1241,8 @@ static int __must_check __sta_info_destr - list_del_rcu(&sta->list); - sta->removed = true; - -- drv_sta_pre_rcu_remove(local, sta->sdata, sta); -+ if (sta->uploaded) -+ drv_sta_pre_rcu_remove(local, sta->sdata, sta); - - if (sdata->vif.type == NL80211_IFTYPE_AP_VLAN && - rcu_access_pointer(sdata->u.vlan.sta) == sta) diff --git a/package/kernel/mac80211/patches/subsys/330-wifi-ieee80211-correctly-mark-FTM-frames-non-buffera.patch b/package/kernel/mac80211/patches/subsys/330-wifi-ieee80211-correctly-mark-FTM-frames-non-buffera.patch index 9c98d9e6d9..079dd2a868 100644 --- a/package/kernel/mac80211/patches/subsys/330-wifi-ieee80211-correctly-mark-FTM-frames-non-buffera.patch +++ b/package/kernel/mac80211/patches/subsys/330-wifi-ieee80211-correctly-mark-FTM-frames-non-buffera.patch @@ -123,7 +123,7 @@ Reviewed-by: Peer, Ilan <ilan.peer@intel.com> info->flags |= IEEE80211_TX_CTL_NO_PS_BUFFER; return TX_CONTINUE; } -@@ -1325,7 +1325,7 @@ static struct txq_info *ieee80211_get_tx +@@ -1326,7 +1326,7 @@ static struct txq_info *ieee80211_get_tx if (!(info->flags & IEEE80211_TX_CTL_HW_80211_ENCAP) && unlikely(!ieee80211_is_data_present(hdr->frame_control))) { if ((!ieee80211_is_mgmt(hdr->frame_control) || diff --git a/package/kernel/mac80211/patches/subsys/333-wifi-mac80211-add-flush_sta-method.patch b/package/kernel/mac80211/patches/subsys/333-wifi-mac80211-add-flush_sta-method.patch index 300a2b65c6..3bba0b7e66 100644 --- a/package/kernel/mac80211/patches/subsys/333-wifi-mac80211-add-flush_sta-method.patch +++ b/package/kernel/mac80211/patches/subsys/333-wifi-mac80211-add-flush_sta-method.patch @@ -12,7 +12,7 @@ Reviewed-by: Greenman, Gregory <gregory.greenman@intel.com> --- a/include/net/mac80211.h +++ b/include/net/mac80211.h -@@ -3922,6 +3922,10 @@ struct ieee80211_prep_tx_info { +@@ -3918,6 +3918,10 @@ struct ieee80211_prep_tx_info { * Note that vif can be NULL. * The callback can sleep. * @@ -23,7 +23,7 @@ Reviewed-by: Greenman, Gregory <gregory.greenman@intel.com> * @channel_switch: Drivers that need (or want) to offload the channel * switch operation for CSAs received from the AP may implement this * callback. They must then call ieee80211_chswitch_done() to indicate -@@ -4376,6 +4380,8 @@ struct ieee80211_ops { +@@ -4372,6 +4376,8 @@ struct ieee80211_ops { #endif void (*flush)(struct ieee80211_hw *hw, struct ieee80211_vif *vif, u32 queues, bool drop); diff --git a/package/kernel/mac80211/patches/subsys/335-wifi-mac80211-add-LDPC-related-flags-in-ieee80211_bs.patch b/package/kernel/mac80211/patches/subsys/335-wifi-mac80211-add-LDPC-related-flags-in-ieee80211_bs.patch new file mode 100644 index 0000000000..1b379b76ae --- /dev/null +++ b/package/kernel/mac80211/patches/subsys/335-wifi-mac80211-add-LDPC-related-flags-in-ieee80211_bs.patch @@ -0,0 +1,62 @@ +From: Ryder Lee <ryder.lee@mediatek.com> +Date: Sat, 18 Feb 2023 01:49:25 +0800 +Subject: [PATCH] wifi: mac80211: add LDPC related flags in ieee80211_bss_conf + +This is utilized to pass LDPC configurations from user space +(i.e. hostapd) to driver. + +Signed-off-by: Ryder Lee <ryder.lee@mediatek.com> +Link: https://lore.kernel.org/r/1de696aaa34efd77a926eb657b8c0fda05aaa177.1676628065.git.ryder.lee@mediatek.com +Signed-off-by: Johannes Berg <johannes.berg@intel.com> +--- + +--- a/include/net/mac80211.h ++++ b/include/net/mac80211.h +@@ -653,6 +653,9 @@ struct ieee80211_fils_discovery { + * write-protected by sdata_lock and local->mtx so holding either is fine + * for read access. + * @color_change_color: the bss color that will be used after the change. ++ * @ht_ldpc: in AP mode, indicates interface has HT LDPC capability. ++ * @vht_ldpc: in AP mode, indicates interface has VHT LDPC capability. ++ * @he_ldpc: in AP mode, indicates interface has HE LDPC capability. + * @vht_su_beamformer: in AP mode, does this BSS support operation as an VHT SU + * beamformer + * @vht_su_beamformee: in AP mode, does this BSS support operation as an VHT SU +@@ -744,6 +747,9 @@ struct ieee80211_bss_conf { + bool color_change_active; + u8 color_change_color; + ++ bool ht_ldpc; ++ bool vht_ldpc; ++ bool he_ldpc; + bool vht_su_beamformer; + bool vht_su_beamformee; + bool vht_mu_beamformer; +--- a/net/mac80211/cfg.c ++++ b/net/mac80211/cfg.c +@@ -1252,7 +1252,15 @@ static int ieee80211_start_ap(struct wip + prev_beacon_int = link_conf->beacon_int; + link_conf->beacon_int = params->beacon_interval; + ++ if (params->ht_cap) ++ link_conf->ht_ldpc = ++ params->ht_cap->cap_info & ++ cpu_to_le16(IEEE80211_HT_CAP_LDPC_CODING); ++ + if (params->vht_cap) { ++ link_conf->vht_ldpc = ++ params->vht_cap->vht_cap_info & ++ cpu_to_le32(IEEE80211_VHT_CAP_RXLDPC); + link_conf->vht_su_beamformer = + params->vht_cap->vht_cap_info & + cpu_to_le32(IEEE80211_VHT_CAP_SU_BEAMFORMER_CAPABLE); +@@ -1282,6 +1290,9 @@ static int ieee80211_start_ap(struct wip + } + + if (params->he_cap) { ++ link_conf->he_ldpc = ++ params->he_cap->phy_cap_info[1] & ++ IEEE80211_HE_PHY_CAP1_LDPC_CODING_IN_PAYLOAD; + link_conf->he_su_beamformer = + params->he_cap->phy_cap_info[3] & + IEEE80211_HE_PHY_CAP3_SU_BEAMFORMER; diff --git a/package/kernel/mac80211/patches/subsys/500-mac80211_configure_antenna_gain.patch b/package/kernel/mac80211/patches/subsys/500-mac80211_configure_antenna_gain.patch index d7ee33bebc..b1e84e2ef2 100644 --- a/package/kernel/mac80211/patches/subsys/500-mac80211_configure_antenna_gain.patch +++ b/package/kernel/mac80211/patches/subsys/500-mac80211_configure_antenna_gain.patch @@ -18,7 +18,7 @@ --- a/include/net/mac80211.h +++ b/include/net/mac80211.h -@@ -1671,6 +1671,7 @@ enum ieee80211_smps_mode { +@@ -1677,6 +1677,7 @@ enum ieee80211_smps_mode { * * @power_level: requested transmit power (in dBm), backward compatibility * value only that is set to the minimum of all interfaces @@ -26,7 +26,7 @@ * * @chandef: the channel definition to tune to * @radar_enabled: whether radar detection is enabled -@@ -1691,6 +1692,7 @@ enum ieee80211_smps_mode { +@@ -1697,6 +1698,7 @@ enum ieee80211_smps_mode { struct ieee80211_conf { u32 flags; int power_level, dynamic_ps_timeout; @@ -57,7 +57,7 @@ __NL80211_ATTR_AFTER_LAST, --- a/net/mac80211/cfg.c +++ b/net/mac80211/cfg.c -@@ -3028,6 +3028,19 @@ static int ieee80211_get_tx_power(struct +@@ -3046,6 +3046,19 @@ static int ieee80211_get_tx_power(struct return 0; } @@ -77,7 +77,7 @@ static void ieee80211_rfkill_poll(struct wiphy *wiphy) { struct ieee80211_local *local = wiphy_priv(wiphy); -@@ -4911,6 +4924,7 @@ const struct cfg80211_ops mac80211_confi +@@ -4953,6 +4966,7 @@ const struct cfg80211_ops mac80211_confi .set_wiphy_params = ieee80211_set_wiphy_params, .set_tx_power = ieee80211_set_tx_power, .get_tx_power = ieee80211_get_tx_power, @@ -87,7 +87,7 @@ CFG80211_TESTMODE_DUMP(ieee80211_testmode_dump) --- a/net/mac80211/ieee80211_i.h +++ b/net/mac80211/ieee80211_i.h -@@ -1535,6 +1535,7 @@ struct ieee80211_local { +@@ -1538,6 +1538,7 @@ struct ieee80211_local { int dynamic_ps_forced_timeout; int user_power_level; /* in dBm, for all interfaces */ |