mirror of
https://github.com/openwrt/openwrt.git
synced 2025-01-19 19:27:27 +00:00
323e249ce8
This updates mac80211 to version 6.1.97-1. This code is based on Linux 6.1.97 and contains all fixes included in the upstream wireless subsystem from that kernel version. This includes many bugfixes and also some security fixes. The removed patches are already integrated in upstream Linux 6.1.97 or in backports. The following patches were integrated in upstream Linux: ath11k/0013-wifi-ath11k-synchronize-ath11k_mac_he_gi_to_nl80211_.patch ath11k/0035-wifi-ath11k-Use-platform_get_irq-to-get-the-interrup.patch ath11k/0036-wifi-ath11k-fix-SAC-bug-on-peer-addition-with-sta-ba.patch ath11k/0047-wifi-ath11k-fix-deinitialization-of-firmware-resourc.patch ath11k/0053-wifi-ath11k-fix-writing-to-unintended-memory-region.patch ath11k/0060-wifi-ath11k-Ignore-frags-from-uninitialized-peer-in-.patch ath11k/0065-wifi-ath11k-fix-tx-status-reporting-in-encap-offload.patch ath11k/0067-wifi-ath11k-Fix-SKB-corruption-in-REO-destination-ri.patch ath11k/0069-wifi-ath11k-fix-registration-of-6Ghz-only-phy-withou.patch ath11k/0080-wifi-ath11k-add-support-default-regdb-while-searchin.patch ath11k/0085-wifi-ath11k-fix-memory-leak-in-WMI-firmware-stats.patch ath11k/0086-wifi-ath11k-Add-missing-check-for-ioremap.patch ath11k/0096-wifi-ath11k-fix-boot-failure-with-one-MSI-vector.patch subsys/337-wifi-mac80211-fix-race-condition-on-enabling-fast-xm.patch The following patches were integrated in upstream backports: ath11k/901-wifi-ath11k-pci-fix-compilation-in-5.16-and-older.patch build/080-resv_start_op.patch build/110-backport_napi_build_skb.patch The following files are missing in backports, we do not have to remove them any more. Some were already missing before some were removed in this update: include/linux/cordic.h include/linux/crc8.h include/linux/eeprom_93cx6.h include/linux/wl12xx.h include/net/ieee80211.h backport-include/linux/bcm47xx_nvram.h include/linux/ath9k_platform.h include/net/bluetooth/ backports ships a dummy Mediatek wed header for older kernel versions. We backported the feature in our kernel, remove the dummy header: backport-include/linux/soc/mediatek/mtk_wed.h Remove header files for subsystems used form the mainline kernel: include/trace/events/qrtr.h include/net/rsi_91x.h backport-include/linux/platform_data/brcmnand.h Link: https://github.com/openwrt/openwrt/pull/15827 Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
157 lines
5.0 KiB
Diff
157 lines
5.0 KiB
Diff
From 87bd401138161008fdb82fbca6e213af117bfeb9 Mon Sep 17 00:00:00 2001
|
|
From: Aloka Dixit <quic_alokad@quicinc.com>
|
|
Date: Fri, 5 May 2023 16:11:28 +0300
|
|
Subject: [PATCH 77/77] wifi: ath11k: EMA beacon support
|
|
|
|
Add new function ath11k_mac_setup_bcn_tmpl_ema() which invokes the new
|
|
API provided by MAC80211 to retrieve EMA beacons.
|
|
|
|
Tested-on: IPQ8074 hw2.0 AHB WLAN.HK.2.7.0.1-01744-QCAHKSWPL_SILICONZ-1
|
|
|
|
Signed-off-by: Aloka Dixit <quic_alokad@quicinc.com>
|
|
Co-developed-by: John Crispin <john@phrozen.org>
|
|
Signed-off-by: John Crispin <john@phrozen.org>
|
|
Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
|
|
Link: https://lore.kernel.org/r/20230405221648.17950-8-quic_alokad@quicinc.com
|
|
---
|
|
drivers/net/wireless/ath/ath11k/mac.c | 59 ++++++++++++++++++++++++++-
|
|
drivers/net/wireless/ath/ath11k/wmi.c | 3 +-
|
|
drivers/net/wireless/ath/ath11k/wmi.h | 11 ++++-
|
|
3 files changed, 70 insertions(+), 3 deletions(-)
|
|
|
|
--- a/drivers/net/wireless/ath/ath11k/mac.c
|
|
+++ b/drivers/net/wireless/ath/ath11k/mac.c
|
|
@@ -1445,6 +1445,60 @@ static void ath11k_mac_set_vif_params(st
|
|
arvif->wpaie_present = false;
|
|
}
|
|
|
|
+static int ath11k_mac_setup_bcn_tmpl_ema(struct ath11k_vif *arvif)
|
|
+{
|
|
+ struct ath11k_vif *tx_arvif;
|
|
+ struct ieee80211_ema_beacons *beacons;
|
|
+ int ret = 0;
|
|
+ bool nontx_vif_params_set = false;
|
|
+ u32 params = 0;
|
|
+ u8 i = 0;
|
|
+
|
|
+ tx_arvif = (void *)arvif->vif->mbssid_tx_vif->drv_priv;
|
|
+
|
|
+ beacons = ieee80211_beacon_get_template_ema_list(tx_arvif->ar->hw,
|
|
+ tx_arvif->vif, 0);
|
|
+ if (!beacons || !beacons->cnt) {
|
|
+ ath11k_warn(arvif->ar->ab,
|
|
+ "failed to get ema beacon templates from mac80211\n");
|
|
+ return -EPERM;
|
|
+ }
|
|
+
|
|
+ if (tx_arvif == arvif)
|
|
+ ath11k_mac_set_vif_params(tx_arvif, beacons->bcn[0].skb);
|
|
+ else
|
|
+ arvif->wpaie_present = tx_arvif->wpaie_present;
|
|
+
|
|
+ for (i = 0; i < beacons->cnt; i++) {
|
|
+ if (tx_arvif != arvif && !nontx_vif_params_set)
|
|
+ nontx_vif_params_set =
|
|
+ ath11k_mac_set_nontx_vif_params(tx_arvif, arvif,
|
|
+ beacons->bcn[i].skb);
|
|
+
|
|
+ params = beacons->cnt;
|
|
+ params |= (i << WMI_EMA_TMPL_IDX_SHIFT);
|
|
+ params |= ((!i ? 1 : 0) << WMI_EMA_FIRST_TMPL_SHIFT);
|
|
+ params |= ((i + 1 == beacons->cnt ? 1 : 0) << WMI_EMA_LAST_TMPL_SHIFT);
|
|
+
|
|
+ ret = ath11k_wmi_bcn_tmpl(tx_arvif->ar, tx_arvif->vdev_id,
|
|
+ &beacons->bcn[i].offs,
|
|
+ beacons->bcn[i].skb, params);
|
|
+ if (ret) {
|
|
+ ath11k_warn(tx_arvif->ar->ab,
|
|
+ "failed to set ema beacon template id %i error %d\n",
|
|
+ i, ret);
|
|
+ break;
|
|
+ }
|
|
+ }
|
|
+
|
|
+ ieee80211_beacon_free_ema_list(beacons);
|
|
+
|
|
+ if (tx_arvif != arvif && !nontx_vif_params_set)
|
|
+ return -EINVAL; /* Profile not found in the beacons */
|
|
+
|
|
+ return ret;
|
|
+}
|
|
+
|
|
static int ath11k_mac_setup_bcn_tmpl_mbssid(struct ath11k_vif *arvif)
|
|
{
|
|
struct ath11k *ar = arvif->ar;
|
|
@@ -1477,7 +1531,7 @@ static int ath11k_mac_setup_bcn_tmpl_mbs
|
|
else if (!ath11k_mac_set_nontx_vif_params(tx_arvif, arvif, bcn))
|
|
return -EINVAL;
|
|
|
|
- ret = ath11k_wmi_bcn_tmpl(ar, arvif->vdev_id, &offs, bcn);
|
|
+ ret = ath11k_wmi_bcn_tmpl(ar, arvif->vdev_id, &offs, bcn, 0);
|
|
kfree_skb(bcn);
|
|
|
|
if (ret)
|
|
@@ -1501,6 +1555,9 @@ static int ath11k_mac_setup_bcn_tmpl(str
|
|
arvif != (void *)vif->mbssid_tx_vif->drv_priv && arvif->is_up)
|
|
return 0;
|
|
|
|
+ if (vif->bss_conf.ema_ap && vif->mbssid_tx_vif)
|
|
+ return ath11k_mac_setup_bcn_tmpl_ema(arvif);
|
|
+
|
|
return ath11k_mac_setup_bcn_tmpl_mbssid(arvif);
|
|
}
|
|
|
|
--- a/drivers/net/wireless/ath/ath11k/wmi.c
|
|
+++ b/drivers/net/wireless/ath/ath11k/wmi.c
|
|
@@ -1699,7 +1699,7 @@ int ath11k_wmi_send_bcn_offload_control_
|
|
|
|
int ath11k_wmi_bcn_tmpl(struct ath11k *ar, u32 vdev_id,
|
|
struct ieee80211_mutable_offsets *offs,
|
|
- struct sk_buff *bcn)
|
|
+ struct sk_buff *bcn, u32 ema_params)
|
|
{
|
|
struct ath11k_pdev_wmi *wmi = ar->wmi;
|
|
struct wmi_bcn_tmpl_cmd *cmd;
|
|
@@ -1738,6 +1738,7 @@ int ath11k_wmi_bcn_tmpl(struct ath11k *a
|
|
|
|
cmd->buf_len = bcn->len;
|
|
cmd->mbssid_ie_offset = offs->mbssid_off;
|
|
+ cmd->ema_params = ema_params;
|
|
|
|
ptr = skb->data + sizeof(*cmd);
|
|
|
|
--- a/drivers/net/wireless/ath/ath11k/wmi.h
|
|
+++ b/drivers/net/wireless/ath/ath11k/wmi.h
|
|
@@ -3566,6 +3566,10 @@ struct wmi_get_pdev_temperature_cmd {
|
|
|
|
#define WMI_BEACON_TX_BUFFER_SIZE 512
|
|
|
|
+#define WMI_EMA_TMPL_IDX_SHIFT 8
|
|
+#define WMI_EMA_FIRST_TMPL_SHIFT 16
|
|
+#define WMI_EMA_LAST_TMPL_SHIFT 24
|
|
+
|
|
struct wmi_bcn_tmpl_cmd {
|
|
u32 tlv_header;
|
|
u32 vdev_id;
|
|
@@ -3576,6 +3580,11 @@ struct wmi_bcn_tmpl_cmd {
|
|
u32 csa_event_bitmap;
|
|
u32 mbssid_ie_offset;
|
|
u32 esp_ie_offset;
|
|
+ u32 csc_switch_count_offset;
|
|
+ u32 csc_event_bitmap;
|
|
+ u32 mu_edca_ie_offset;
|
|
+ u32 feature_enable_bitmap;
|
|
+ u32 ema_params;
|
|
} __packed;
|
|
|
|
struct wmi_key_seq_counter {
|
|
@@ -6298,7 +6307,7 @@ int ath11k_wmi_mgmt_send(struct ath11k *
|
|
struct sk_buff *frame);
|
|
int ath11k_wmi_bcn_tmpl(struct ath11k *ar, u32 vdev_id,
|
|
struct ieee80211_mutable_offsets *offs,
|
|
- struct sk_buff *bcn);
|
|
+ struct sk_buff *bcn, u32 ema_param);
|
|
int ath11k_wmi_vdev_down(struct ath11k *ar, u8 vdev_id);
|
|
int ath11k_wmi_vdev_up(struct ath11k *ar, u32 vdev_id, u32 aid,
|
|
const u8 *bssid, u8 *tx_bssid, u32 nontx_profile_idx,
|