diff --git a/package/kernel/mac80211/Makefile b/package/kernel/mac80211/Makefile index aec88b692b..9014ce85e5 100644 --- a/package/kernel/mac80211/Makefile +++ b/package/kernel/mac80211/Makefile @@ -10,13 +10,13 @@ include $(INCLUDE_DIR)/kernel.mk PKG_NAME:=mac80211 -PKG_VERSION:=6.18.26 +PKG_VERSION:=6.18.39 PKG_RELEASE:=1 PKG_LICENSE:=GPL-2.0-only PKG_LICENSE_FILES:=COPYING PKG_SOURCE_URL:=https://github.com/openwrt/backports/releases/download/backports-v$(PKG_VERSION) -PKG_HASH:=2ad578c6cae22f192fefd44e1449725228d4109ee781998b41dcbae872554968 +PKG_HASH:=8951c1e270d7c311432377bd50951cd1d5dee2b5fedf33d30db41aa8e428aeb0 PKG_SOURCE:=backports-$(PKG_VERSION).tar.zst PKG_BUILD_DIR:=$(KERNEL_BUILD_DIR)/$(if $(BUILD_VARIANT),$(PKG_NAME)-$(BUILD_VARIANT)/)backports-$(PKG_VERSION) diff --git a/package/kernel/mac80211/patches/ath11k/949-wifi-ath11k-fix-monitor-rx-pktlen.patch b/package/kernel/mac80211/patches/ath11k/949-wifi-ath11k-fix-monitor-rx-pktlen.patch index f174d60749..33f71d28c3 100644 --- a/package/kernel/mac80211/patches/ath11k/949-wifi-ath11k-fix-monitor-rx-pktlen.patch +++ b/package/kernel/mac80211/patches/ath11k/949-wifi-ath11k-fix-monitor-rx-pktlen.patch @@ -24,7 +24,7 @@ to the monitor RX delivery path. --- a/drivers/net/wireless/ath/ath11k/dp_rx.c +++ b/drivers/net/wireless/ath/ath11k/dp_rx.c -@@ -4930,8 +4930,13 @@ ath11k_dp_rx_mon_merg_msdus(struct ath11 +@@ -4929,8 +4929,13 @@ ath11k_dp_rx_mon_merg_msdus(struct ath11 } prev_buf->next = NULL; @@ -39,7 +39,7 @@ to the monitor RX delivery path. } else if (decap_format == DP_RX_DECAP_TYPE_NATIVE_WIFI) { u8 qos_pkt = 0; -@@ -4957,10 +4962,13 @@ ath11k_dp_rx_mon_merg_msdus(struct ath11 +@@ -4956,10 +4961,13 @@ ath11k_dp_rx_mon_merg_msdus(struct ath11 prev_buf = msdu; msdu = msdu->next; } @@ -57,7 +57,7 @@ to the monitor RX delivery path. ath11k_dbg(ab, ATH11K_DBG_DATA, "mpdu_buf %p mpdu_buf->len %u", prev_buf, prev_buf->len); -@@ -5085,12 +5093,27 @@ static int ath11k_dp_rx_mon_deliver(stru +@@ -5084,12 +5092,27 @@ static int ath11k_dp_rx_mon_deliver(stru header = mon_skb; diff --git a/package/kernel/mac80211/patches/ath12k/700-ath12k-read-calibration-variant-from-dt.patch b/package/kernel/mac80211/patches/ath12k/700-ath12k-read-calibration-variant-from-dt.patch index e7dc7467da..9f857301de 100644 --- a/package/kernel/mac80211/patches/ath12k/700-ath12k-read-calibration-variant-from-dt.patch +++ b/package/kernel/mac80211/patches/ath12k/700-ath12k-read-calibration-variant-from-dt.patch @@ -32,7 +32,7 @@ Changes in v2: --- a/drivers/net/wireless/ath/ath12k/core.c +++ b/drivers/net/wireless/ath/ath12k/core.c -@@ -812,6 +812,28 @@ int ath12k_core_check_smbios(struct ath12k_base *ab) +@@ -806,6 +806,28 @@ int ath12k_core_check_smbios(struct ath1 return 0; } @@ -63,7 +63,7 @@ Changes in v2: int ret; --- a/drivers/net/wireless/ath/ath12k/qmi.c +++ b/drivers/net/wireless/ath/ath12k/qmi.c -@@ -2945,6 +2945,10 @@ int ath12k_qmi_request_target_cap(struct ath12k_base *ab) +@@ -2903,6 +2903,10 @@ int ath12k_qmi_request_target_cap(struct if (r) ath12k_dbg(ab, ATH12K_DBG_QMI, "SMBIOS bdf variant name not set.\n"); diff --git a/package/kernel/mac80211/patches/ath5k/411-ath5k_allow_adhoc_and_ap.patch b/package/kernel/mac80211/patches/ath5k/411-ath5k_allow_adhoc_and_ap.patch index 1df4aab57e..6c416ae980 100644 --- a/package/kernel/mac80211/patches/ath5k/411-ath5k_allow_adhoc_and_ap.patch +++ b/package/kernel/mac80211/patches/ath5k/411-ath5k_allow_adhoc_and_ap.patch @@ -18,7 +18,7 @@ goto end; --- a/drivers/net/wireless/ath/ath5k/base.c +++ b/drivers/net/wireless/ath/ath5k/base.c -@@ -2009,7 +2009,7 @@ ath5k_beacon_send(struct ath5k_hw *ah) +@@ -2010,7 +2010,7 @@ ath5k_beacon_send(struct ath5k_hw *ah) } if ((ah->opmode == NL80211_IFTYPE_AP && ah->num_ap_vifs + @@ -27,7 +27,7 @@ ah->opmode == NL80211_IFTYPE_MESH_POINT) { u64 tsf = ath5k_hw_get_tsf64(ah); u32 tsftu = TSF_TO_TU(tsf); -@@ -2095,7 +2095,7 @@ ath5k_beacon_update_timers(struct ath5k_ +@@ -2096,7 +2096,7 @@ ath5k_beacon_update_timers(struct ath5k_ intval = ah->bintval & AR5K_BEACON_PERIOD; if (ah->opmode == NL80211_IFTYPE_AP && ah->num_ap_vifs @@ -36,7 +36,7 @@ intval /= ATH_BCBUF; /* staggered multi-bss beacons */ if (intval < 15) ATH5K_WARN(ah, "intval %u is too low, min 15\n", -@@ -2561,6 +2561,7 @@ static const struct ieee80211_iface_limi +@@ -2562,6 +2562,7 @@ static const struct ieee80211_iface_limi BIT(NL80211_IFTYPE_MESH_POINT) | #endif BIT(NL80211_IFTYPE_AP) }, diff --git a/package/kernel/mac80211/patches/brcm/870-04-rpi-6.12-brcmfmac-non-upstream-support-DS1-exit-firmware-re-download.patch b/package/kernel/mac80211/patches/brcm/870-04-rpi-6.12-brcmfmac-non-upstream-support-DS1-exit-firmware-re-download.patch index bbeb4d3744..8f6076e4a3 100644 --- a/package/kernel/mac80211/patches/brcm/870-04-rpi-6.12-brcmfmac-non-upstream-support-DS1-exit-firmware-re-download.patch +++ b/package/kernel/mac80211/patches/brcm/870-04-rpi-6.12-brcmfmac-non-upstream-support-DS1-exit-firmware-re-download.patch @@ -266,7 +266,7 @@ JIRA: SWWLAN-136577 return intstatus; } -@@ -2581,6 +2596,182 @@ static int brcmf_sdio_intr_rstatus(struc +@@ -2582,6 +2597,182 @@ static int brcmf_sdio_intr_rstatus(struc return ret; } @@ -449,7 +449,7 @@ JIRA: SWWLAN-136577 static void brcmf_sdio_dpc(struct brcmf_sdio *bus) { struct brcmf_sdio_dev *sdiod = bus->sdiodev; -@@ -2652,8 +2843,11 @@ static void brcmf_sdio_dpc(struct brcmf_ +@@ -2653,8 +2844,11 @@ static void brcmf_sdio_dpc(struct brcmf_ /* Handle host mailbox indication */ if (intstatus & I_HMB_HOST_INT) { @@ -462,7 +462,7 @@ JIRA: SWWLAN-136577 } sdio_release_host(bus->sdiodev->func1); -@@ -2698,7 +2892,7 @@ static void brcmf_sdio_dpc(struct brcmf_ +@@ -2699,7 +2893,7 @@ static void brcmf_sdio_dpc(struct brcmf_ brcmf_sdio_clrintr(bus); if (bus->ctrl_frame_stat && (bus->clkstate == CLK_AVAIL) && @@ -471,7 +471,7 @@ JIRA: SWWLAN-136577 sdio_claim_host(bus->sdiodev->func1); if (bus->ctrl_frame_stat) { err = brcmf_sdio_tx_ctrlframe(bus, bus->ctrl_frame_buf, -@@ -3569,6 +3763,10 @@ static int brcmf_sdio_bus_preinit(struct +@@ -3570,6 +3764,10 @@ static int brcmf_sdio_bus_preinit(struct if (err < 0) goto done; @@ -482,7 +482,7 @@ JIRA: SWWLAN-136577 bus->tx_hdrlen = SDPCM_HWHDR_LEN + SDPCM_SWHDR_LEN; if (sdiodev->sg_support) { bus->txglom = false; -@@ -4219,7 +4417,7 @@ static void brcmf_sdio_firmware_callback +@@ -4220,7 +4418,7 @@ static void brcmf_sdio_firmware_callback u8 saveclk, bpreq; u8 devctl; @@ -491,7 +491,7 @@ JIRA: SWWLAN-136577 if (err) goto fail; -@@ -4397,12 +4595,25 @@ static void brcmf_sdio_firmware_callback +@@ -4398,12 +4596,25 @@ static void brcmf_sdio_firmware_callback } /* Attach to the common layer, reserve hdr space */ @@ -518,7 +518,7 @@ JIRA: SWWLAN-136577 /* ready */ return; -@@ -4650,3 +4861,40 @@ int brcmf_sdio_sleep(struct brcmf_sdio * +@@ -4652,3 +4863,40 @@ int brcmf_sdio_sleep(struct brcmf_sdio * return ret; } diff --git a/package/kernel/mac80211/patches/build/240-realtek-rtw88-BH-workqueue.patch b/package/kernel/mac80211/patches/build/240-realtek-rtw88-BH-workqueue.patch index 53631859f0..f7665af06e 100644 --- a/package/kernel/mac80211/patches/build/240-realtek-rtw88-BH-workqueue.patch +++ b/package/kernel/mac80211/patches/build/240-realtek-rtw88-BH-workqueue.patch @@ -1,6 +1,6 @@ --- a/drivers/net/wireless/realtek/rtw88/usb.c +++ b/drivers/net/wireless/realtek/rtw88/usb.c -@@ -965,7 +965,11 @@ static int rtw_usb_init_rx(struct rtw_de +@@ -974,7 +974,11 @@ static int rtw_usb_init_rx(struct rtw_de struct sk_buff *rx_skb; int i; 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 c0820ea23e..34c86a7aff 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 --- a/net/mac80211/tx.c +++ b/net/mac80211/tx.c -@@ -4088,7 +4088,7 @@ struct ieee80211_txq *ieee80211_next_txq +@@ -4090,7 +4090,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 if (deficit < 0 || !aql_check) { list_move_tail(&txqi->schedule_order, -@@ -4233,7 +4233,8 @@ bool ieee80211_txq_may_transmit(struct i +@@ -4235,7 +4235,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 list_move_tail(&iter->schedule_order, &local->active_txqs[ac]); } -@@ -4241,7 +4242,7 @@ bool ieee80211_txq_may_transmit(struct i +@@ -4243,7 +4244,7 @@ bool ieee80211_txq_may_transmit(struct i if (sta->airtime[ac].deficit >= 0) goto out; diff --git a/package/kernel/mac80211/patches/subsys/310-cfg80211-allow-grace-period-for-DFS-available-after-.patch b/package/kernel/mac80211/patches/subsys/310-cfg80211-allow-grace-period-for-DFS-available-after-.patch index 5ada929cc7..33715a7eb5 100644 --- a/package/kernel/mac80211/patches/subsys/310-cfg80211-allow-grace-period-for-DFS-available-after-.patch +++ b/package/kernel/mac80211/patches/subsys/310-cfg80211-allow-grace-period-for-DFS-available-after-.patch @@ -148,7 +148,7 @@ Signed-off-by: Felix Fietkau c->dfs_state_entered = jiffies; --- a/net/wireless/nl80211.c +++ b/net/wireless/nl80211.c -@@ -20967,6 +20967,9 @@ void cfg80211_ch_switch_notify(struct ne +@@ -20970,6 +20970,9 @@ void cfg80211_ch_switch_notify(struct ne break; case NL80211_IFTYPE_AP: case NL80211_IFTYPE_P2P_GO: diff --git a/package/kernel/mac80211/patches/subsys/311-cfg80211-allow-concurrent-AP-operation-on-DFS-channe.patch b/package/kernel/mac80211/patches/subsys/311-cfg80211-allow-concurrent-AP-operation-on-DFS-channe.patch index 92ab297a2c..b75aab21fe 100644 --- a/package/kernel/mac80211/patches/subsys/311-cfg80211-allow-concurrent-AP-operation-on-DFS-channe.patch +++ b/package/kernel/mac80211/patches/subsys/311-cfg80211-allow-concurrent-AP-operation-on-DFS-channe.patch @@ -88,7 +88,7 @@ Signed-off-by: Felix Fietkau void cfg80211_update_last_available(struct wiphy *wiphy, --- a/net/wireless/nl80211.c +++ b/net/wireless/nl80211.c -@@ -6741,6 +6741,8 @@ static int nl80211_start_ap(struct sk_bu +@@ -6744,6 +6744,8 @@ static int nl80211_start_ap(struct sk_bu goto out; } diff --git a/package/kernel/mac80211/patches/subsys/320-mac80211-add-AQL-support-for-broadcast-packets.patch b/package/kernel/mac80211/patches/subsys/320-mac80211-add-AQL-support-for-broadcast-packets.patch index d1e9c0deb0..a24c5ecfbf 100644 --- a/package/kernel/mac80211/patches/subsys/320-mac80211-add-AQL-support-for-broadcast-packets.patch +++ b/package/kernel/mac80211/patches/subsys/320-mac80211-add-AQL-support-for-broadcast-packets.patch @@ -127,7 +127,7 @@ Signed-off-by: Felix Fietkau atomic_add(tx_airtime, --- a/net/mac80211/tx.c +++ b/net/mac80211/tx.c -@@ -2558,7 +2558,7 @@ static u16 ieee80211_store_ack_skb(struc +@@ -2560,7 +2560,7 @@ static u16 ieee80211_store_ack_skb(struc spin_lock_irqsave(&local->ack_status_lock, flags); id = idr_alloc(&local->ack_status_frames, ack_skb, @@ -136,7 +136,7 @@ Signed-off-by: Felix Fietkau spin_unlock_irqrestore(&local->ack_status_lock, flags); if (id >= 0) { -@@ -3989,20 +3989,20 @@ begin: +@@ -3991,20 +3991,20 @@ begin: encap_out: info->control.vif = vif; @@ -167,7 +167,7 @@ Signed-off-by: Felix Fietkau } return skb; -@@ -4054,6 +4054,7 @@ struct ieee80211_txq *ieee80211_next_txq +@@ -4056,6 +4056,7 @@ struct ieee80211_txq *ieee80211_next_txq struct ieee80211_txq *ret = NULL; struct txq_info *txqi = NULL, *head = NULL; bool found_eligible_txq = false; @@ -175,7 +175,7 @@ Signed-off-by: Felix Fietkau spin_lock_bh(&local->active_txq_lock[ac]); -@@ -4077,26 +4078,26 @@ struct ieee80211_txq *ieee80211_next_txq +@@ -4079,26 +4080,26 @@ struct ieee80211_txq *ieee80211_next_txq if (!head) head = txqi; @@ -214,7 +214,7 @@ Signed-off-by: Felix Fietkau if (txqi->schedule_round == local->schedule_round[ac]) goto out; -@@ -4163,7 +4164,8 @@ bool ieee80211_txq_airtime_check(struct +@@ -4165,7 +4166,8 @@ bool ieee80211_txq_airtime_check(struct return true; if (!txq->sta) @@ -224,7 +224,7 @@ Signed-off-by: Felix Fietkau if (unlikely(txq->tid == IEEE80211_NUM_TIDS)) return true; -@@ -4212,15 +4214,15 @@ bool ieee80211_txq_may_transmit(struct i +@@ -4214,15 +4216,15 @@ bool ieee80211_txq_may_transmit(struct i spin_lock_bh(&local->active_txq_lock[ac]); 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 index 91facb3c93..ad7beeaeee 100644 --- 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 @@ -32,7 +32,7 @@ Signed-off-by: Felix Fietkau * @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 +@@ -4187,6 +4187,24 @@ bool ieee80211_txq_airtime_check(struct } EXPORT_SYMBOL(ieee80211_txq_airtime_check); diff --git a/package/kernel/mac80211/patches/subsys/371-wifi-mac80211-Add-eMLSR-eMLMR-action-frame-parsing-s.patch b/package/kernel/mac80211/patches/subsys/371-wifi-mac80211-Add-eMLSR-eMLMR-action-frame-parsing-s.patch index 3d1e17cec9..9b578a5f0c 100644 --- a/package/kernel/mac80211/patches/subsys/371-wifi-mac80211-Add-eMLSR-eMLMR-action-frame-parsing-s.patch +++ b/package/kernel/mac80211/patches/subsys/371-wifi-mac80211-Add-eMLSR-eMLMR-action-frame-parsing-s.patch @@ -1,6 +1,7 @@ +From 0d95280a2d54ebd3d38adc4ff67808009798978c Mon Sep 17 00:00:00 2001 From: Lorenzo Bianconi Date: Thu, 29 Jan 2026 14:15:46 +0100 -Subject: [PATCH] wifi: mac80211: Add eMLSR/eMLMR action frame parsing support +Subject: wifi: mac80211: Add eMLSR/eMLMR action frame parsing support Introduce support in AP mode for parsing of the Operating Mode Notification frame sent by the client to enable/disable MLO eMLSR or eMLMR if supported @@ -13,25 +14,22 @@ Signed-off-by: Lorenzo Bianconi Link: https://patch.msgid.link/20260129-mac80211-emlsr-v4-1-14bdadf57380@kernel.org Signed-off-by: Johannes Berg --- + include/linux/ieee80211-eht.h | 11 +++ + include/linux/ieee80211.h | 6 ++ + include/net/mac80211.h | 32 +++++++ + net/mac80211/driver-ops.h | 21 ++++ + net/mac80211/eht.c | 175 ++++++++++++++++++++++++++++++++++ + net/mac80211/ieee80211_i.h | 2 + + net/mac80211/iface.c | 10 +- + net/mac80211/rx.c | 8 ++ + net/mac80211/trace.h | 32 +++++++ + 9 files changed, 296 insertions(+), 1 deletion(-) ---- a/include/linux/ieee80211.h -+++ b/include/linux/ieee80211.h -@@ -1612,6 +1612,12 @@ struct ieee80211_mgmt { - u8 action_code; - u8 variable[]; - } __packed epcs; -+ struct { -+ u8 action_code; -+ u8 dialog_token; -+ u8 control; -+ u8 variable[]; -+ } __packed eml_omn; - } u; - } __packed action; - DECLARE_FLEX_ARRAY(u8, body); /* Generic frame body */ -@@ -5462,6 +5468,17 @@ struct ieee80211_mle_tdls_common_info { +--- a/include/linux/ieee80211-eht.h ++++ b/include/linux/ieee80211-eht.h +@@ -558,6 +558,17 @@ struct ieee80211_mle_tdls_common_info { - /* no fixed fields in PRIO_ACCESS */ + #define IEEE80211_MLC_PRIO_ACCESS_PRES_AP_MLD_MAC_ADDR 0x0010 +#define IEEE80211_EML_CTRL_EMLSR_MODE BIT(0) +#define IEEE80211_EML_CTRL_EMLMR_MODE BIT(1) @@ -44,9 +42,24 @@ Signed-off-by: Johannes Berg +#define IEEE80211_EML_EMLMR_RX_MCS_MAP 0xf0 +#define IEEE80211_EML_EMLMR_TX_MCS_MAP 0x0f + + /* no fixed fields in PRIO_ACCESS */ + /** - * ieee80211_mle_common_size - check multi-link element common size - * @data: multi-link element, must already be checked for size using +--- a/include/linux/ieee80211.h ++++ b/include/linux/ieee80211.h +@@ -1367,6 +1367,12 @@ struct ieee80211_mgmt { + u8 action_code; + u8 variable[]; + } __packed epcs; ++ struct { ++ u8 action_code; ++ u8 dialog_token; ++ u8 control; ++ u8 variable[]; ++ } __packed eml_omn; + } u; + } __packed action; + DECLARE_FLEX_ARRAY(u8, body); /* Generic frame body */ --- a/include/net/mac80211.h +++ b/include/net/mac80211.h @@ -1901,6 +1901,31 @@ enum ieee80211_offload_flags { @@ -406,7 +419,3 @@ Signed-off-by: Johannes Berg #endif /* !__MAC80211_DRIVER_TRACE || TRACE_HEADER_MULTI_READ */ #undef TRACE_INCLUDE_PATH ---- /dev/null -+++ b/include/linux/ieee80211-eht.h -@@ -0,0 +1 @@ -+#include