mirror of
https://github.com/openwrt/openwrt.git
synced 2025-01-18 10:46:41 +00:00
mac80211: Update to version 6.1.97-1
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>
This commit is contained in:
parent
e0837a1257
commit
323e249ce8
@ -10,11 +10,10 @@ include $(INCLUDE_DIR)/kernel.mk
|
|||||||
|
|
||||||
PKG_NAME:=mac80211
|
PKG_NAME:=mac80211
|
||||||
|
|
||||||
PKG_VERSION:=6.1.24
|
PKG_VERSION:=6.1.97-1
|
||||||
PKG_RELEASE:=4
|
PKG_RELEASE:=1
|
||||||
# PKG_SOURCE_URL:=@KERNEL/linux/kernel/projects/backports/stable/v5.15.58/
|
PKG_SOURCE_URL:=@KERNEL/linux/kernel/projects/backports/stable/v6.1.97/
|
||||||
PKG_SOURCE_URL:=http://mirror2.openwrt.org/sources/
|
PKG_HASH:=8e9ae2d02f373252dd61f5c6a81c88eec67ca773464d9ef3d844752dc6775540
|
||||||
PKG_HASH:=5d39aca7e34c33cb9b3e366117b2e86841b7bdd37933679d6b1e61be6b150648
|
|
||||||
|
|
||||||
PKG_SOURCE:=backports-$(PKG_VERSION).tar.xz
|
PKG_SOURCE:=backports-$(PKG_VERSION).tar.xz
|
||||||
PKG_BUILD_DIR:=$(KERNEL_BUILD_DIR)/backports-$(PKG_VERSION)
|
PKG_BUILD_DIR:=$(KERNEL_BUILD_DIR)/backports-$(PKG_VERSION)
|
||||||
@ -299,17 +298,14 @@ define Build/Prepare
|
|||||||
$(Build/Patch)
|
$(Build/Patch)
|
||||||
rm -rf \
|
rm -rf \
|
||||||
$(PKG_BUILD_DIR)/include/linux/ssb \
|
$(PKG_BUILD_DIR)/include/linux/ssb \
|
||||||
$(PKG_BUILD_DIR)/include/linux/bcma \
|
$(PKG_BUILD_DIR)/include/linux/bcma
|
||||||
$(PKG_BUILD_DIR)/include/net/bluetooth
|
|
||||||
|
|
||||||
rm -f \
|
rm -f \
|
||||||
$(PKG_BUILD_DIR)/include/linux/cordic.h \
|
|
||||||
$(PKG_BUILD_DIR)/include/linux/crc8.h \
|
|
||||||
$(PKG_BUILD_DIR)/include/linux/eeprom_93cx6.h \
|
|
||||||
$(PKG_BUILD_DIR)/include/linux/wl12xx.h \
|
|
||||||
$(PKG_BUILD_DIR)/include/linux/mhi.h \
|
$(PKG_BUILD_DIR)/include/linux/mhi.h \
|
||||||
$(PKG_BUILD_DIR)/include/net/ieee80211.h \
|
$(PKG_BUILD_DIR)/include/trace/events/qrtr.h \
|
||||||
$(PKG_BUILD_DIR)/backport-include/linux/bcm47xx_nvram.h
|
$(PKG_BUILD_DIR)/include/net/rsi_91x.h \
|
||||||
|
$(PKG_BUILD_DIR)/backport-include/linux/platform_data/brcmnand.h \
|
||||||
|
$(PKG_BUILD_DIR)/backport-include/linux/soc/mediatek/mtk_wed.h
|
||||||
|
|
||||||
echo 'compat-wireless-$(PKG_VERSION)-$(PKG_RELEASE)-$(REVISION)' > $(PKG_BUILD_DIR)/compat_version
|
echo 'compat-wireless-$(PKG_VERSION)-$(PKG_RELEASE)-$(REVISION)' > $(PKG_BUILD_DIR)/compat_version
|
||||||
endef
|
endef
|
||||||
@ -325,7 +321,6 @@ endif
|
|||||||
ifeq ($(strip $(CONFIG_EXTERNAL_KERNEL_TREE)),"")
|
ifeq ($(strip $(CONFIG_EXTERNAL_KERNEL_TREE)),"")
|
||||||
ifeq ($(strip $(CONFIG_KERNEL_GIT_CLONE_URI)),"")
|
ifeq ($(strip $(CONFIG_KERNEL_GIT_CLONE_URI)),"")
|
||||||
define Build/Configure
|
define Build/Configure
|
||||||
cmp $(PKG_BUILD_DIR)/include/linux/ath9k_platform.h $(LINUX_DIR)/include/linux/ath9k_platform.h
|
|
||||||
cmp $(PKG_BUILD_DIR)/include/linux/ath5k_platform.h $(LINUX_DIR)/include/linux/ath5k_platform.h
|
cmp $(PKG_BUILD_DIR)/include/linux/ath5k_platform.h $(LINUX_DIR)/include/linux/ath5k_platform.h
|
||||||
cmp $(PKG_BUILD_DIR)/include/linux/rt2x00_platform.h $(LINUX_DIR)/include/linux/rt2x00_platform.h
|
cmp $(PKG_BUILD_DIR)/include/linux/rt2x00_platform.h $(LINUX_DIR)/include/linux/rt2x00_platform.h
|
||||||
endef
|
endef
|
||||||
|
@ -14,7 +14,7 @@
|
|||||||
CFLAGS_trace.o := -I$(src)
|
CFLAGS_trace.o := -I$(src)
|
||||||
--- a/drivers/net/wireless/ath/ath.h
|
--- a/drivers/net/wireless/ath/ath.h
|
||||||
+++ b/drivers/net/wireless/ath/ath.h
|
+++ b/drivers/net/wireless/ath/ath.h
|
||||||
@@ -317,14 +317,7 @@ void _ath_dbg(struct ath_common *common,
|
@@ -321,14 +321,7 @@ void _ath_dbg(struct ath_common *common,
|
||||||
#endif /* CPTCFG_ATH_DEBUG */
|
#endif /* CPTCFG_ATH_DEBUG */
|
||||||
|
|
||||||
/** Returns string describing opmode, or NULL if unknown mode. */
|
/** Returns string describing opmode, or NULL if unknown mode. */
|
||||||
|
@ -82,7 +82,7 @@
|
|||||||
help
|
help
|
||||||
--- a/local-symbols
|
--- a/local-symbols
|
||||||
+++ b/local-symbols
|
+++ b/local-symbols
|
||||||
@@ -102,6 +102,7 @@ ADM8211=
|
@@ -94,6 +94,7 @@ ADM8211=
|
||||||
ATH_COMMON=
|
ATH_COMMON=
|
||||||
WLAN_VENDOR_ATH=
|
WLAN_VENDOR_ATH=
|
||||||
ATH_DEBUG=
|
ATH_DEBUG=
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
--- a/net/wireless/reg.c
|
--- a/net/wireless/reg.c
|
||||||
+++ b/net/wireless/reg.c
|
+++ b/net/wireless/reg.c
|
||||||
@@ -3370,6 +3370,8 @@ void regulatory_hint_country_ie(struct w
|
@@ -3373,6 +3373,8 @@ void regulatory_hint_country_ie(struct w
|
||||||
enum environment_cap env = ENVIRON_ANY;
|
enum environment_cap env = ENVIRON_ANY;
|
||||||
struct regulatory_request *request = NULL, *lr;
|
struct regulatory_request *request = NULL, *lr;
|
||||||
|
|
||||||
@ -9,7 +9,7 @@
|
|||||||
/* IE len must be evenly divisible by 2 */
|
/* IE len must be evenly divisible by 2 */
|
||||||
if (country_ie_len & 0x01)
|
if (country_ie_len & 0x01)
|
||||||
return;
|
return;
|
||||||
@@ -3621,6 +3623,7 @@ static bool is_wiphy_all_set_reg_flag(en
|
@@ -3624,6 +3626,7 @@ static bool is_wiphy_all_set_reg_flag(en
|
||||||
|
|
||||||
void regulatory_hint_disconnect(void)
|
void regulatory_hint_disconnect(void)
|
||||||
{
|
{
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
--- a/drivers/net/wireless/ath/ath10k/Kconfig
|
--- a/drivers/net/wireless/ath/ath10k/Kconfig
|
||||||
+++ b/drivers/net/wireless/ath/ath10k/Kconfig
|
+++ b/drivers/net/wireless/ath/ath10k/Kconfig
|
||||||
@@ -86,6 +86,12 @@ config ATH10K_TRACING
|
@@ -87,6 +87,12 @@ config ATH10K_TRACING
|
||||||
help
|
help
|
||||||
Select this to ath10k use tracing infrastructure.
|
Select this to ath10k use tracing infrastructure.
|
||||||
|
|
||||||
@ -37,7 +37,7 @@
|
|||||||
void ath10k_thermal_event_temperature(struct ath10k *ar, int temperature);
|
void ath10k_thermal_event_temperature(struct ath10k *ar, int temperature);
|
||||||
--- a/local-symbols
|
--- a/local-symbols
|
||||||
+++ b/local-symbols
|
+++ b/local-symbols
|
||||||
@@ -161,6 +161,7 @@ ATH10K_SNOC=
|
@@ -153,6 +153,7 @@ ATH10K_SNOC=
|
||||||
ATH10K_DEBUG=
|
ATH10K_DEBUG=
|
||||||
ATH10K_DEBUGFS=
|
ATH10K_DEBUGFS=
|
||||||
ATH10K_SPECTRAL=
|
ATH10K_SPECTRAL=
|
||||||
|
@ -14,7 +14,7 @@ Signed-off-by: Sven Eckelmann <sven@open-mesh.com>
|
|||||||
|
|
||||||
--- a/drivers/net/wireless/ath/ath10k/core.c
|
--- a/drivers/net/wireless/ath/ath10k/core.c
|
||||||
+++ b/drivers/net/wireless/ath/ath10k/core.c
|
+++ b/drivers/net/wireless/ath/ath10k/core.c
|
||||||
@@ -3516,6 +3516,16 @@ int ath10k_core_register(struct ath10k *
|
@@ -3510,6 +3510,16 @@ int ath10k_core_register(struct ath10k *
|
||||||
|
|
||||||
queue_work(ar->workqueue, &ar->register_work);
|
queue_work(ar->workqueue, &ar->register_work);
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
--- a/drivers/net/wireless/ath/ath10k/mac.c
|
--- a/drivers/net/wireless/ath/ath10k/mac.c
|
||||||
+++ b/drivers/net/wireless/ath/ath10k/mac.c
|
+++ b/drivers/net/wireless/ath/ath10k/mac.c
|
||||||
@@ -9909,6 +9909,21 @@ static int ath10k_mac_init_rd(struct ath
|
@@ -9918,6 +9918,21 @@ static int ath10k_mac_init_rd(struct ath
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -22,7 +22,7 @@
|
|||||||
int ath10k_mac_register(struct ath10k *ar)
|
int ath10k_mac_register(struct ath10k *ar)
|
||||||
{
|
{
|
||||||
static const u32 cipher_suites[] = {
|
static const u32 cipher_suites[] = {
|
||||||
@@ -10267,6 +10282,12 @@ int ath10k_mac_register(struct ath10k *a
|
@@ -10276,6 +10291,12 @@ int ath10k_mac_register(struct ath10k *a
|
||||||
|
|
||||||
ar->hw->weight_multiplier = ATH10K_AIRTIME_WEIGHT_MULTIPLIER;
|
ar->hw->weight_multiplier = ATH10K_AIRTIME_WEIGHT_MULTIPLIER;
|
||||||
|
|
||||||
|
@ -85,7 +85,7 @@ v13:
|
|||||||
create mode 100644 drivers/net/wireless/ath/ath10k/leds.h
|
create mode 100644 drivers/net/wireless/ath/ath10k/leds.h
|
||||||
--- a/drivers/net/wireless/ath/ath10k/Kconfig
|
--- a/drivers/net/wireless/ath/ath10k/Kconfig
|
||||||
+++ b/drivers/net/wireless/ath/ath10k/Kconfig
|
+++ b/drivers/net/wireless/ath/ath10k/Kconfig
|
||||||
@@ -71,6 +71,16 @@ config ATH10K_DEBUGFS
|
@@ -72,6 +72,16 @@ config ATH10K_DEBUGFS
|
||||||
|
|
||||||
If unsure, say Y to make it easier to debug problems.
|
If unsure, say Y to make it easier to debug problems.
|
||||||
|
|
||||||
@ -114,7 +114,7 @@ v13:
|
|||||||
ath10k_core-$(CONFIG_DEV_COREDUMP) += coredump.o
|
ath10k_core-$(CONFIG_DEV_COREDUMP) += coredump.o
|
||||||
--- a/local-symbols
|
--- a/local-symbols
|
||||||
+++ b/local-symbols
|
+++ b/local-symbols
|
||||||
@@ -162,6 +162,7 @@ ATH10K_DEBUG=
|
@@ -154,6 +154,7 @@ ATH10K_DEBUG=
|
||||||
ATH10K_DEBUGFS=
|
ATH10K_DEBUGFS=
|
||||||
ATH10K_SPECTRAL=
|
ATH10K_SPECTRAL=
|
||||||
ATH10K_THERMAL=
|
ATH10K_THERMAL=
|
||||||
@ -172,7 +172,7 @@ v13:
|
|||||||
.patch_load_addr = QCA9888_HW_2_0_PATCH_LOAD_ADDR,
|
.patch_load_addr = QCA9888_HW_2_0_PATCH_LOAD_ADDR,
|
||||||
.uart_pin = 7,
|
.uart_pin = 7,
|
||||||
.cc_wraparound_type = ATH10K_HW_CC_WRAP_SHIFTED_EACH,
|
.cc_wraparound_type = ATH10K_HW_CC_WRAP_SHIFTED_EACH,
|
||||||
@@ -3231,6 +3237,10 @@ int ath10k_core_start(struct ath10k *ar,
|
@@ -3225,6 +3231,10 @@ int ath10k_core_start(struct ath10k *ar,
|
||||||
goto err_hif_stop;
|
goto err_hif_stop;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -183,7 +183,7 @@ v13:
|
|||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
err_hif_stop:
|
err_hif_stop:
|
||||||
@@ -3489,9 +3499,18 @@ static void ath10k_core_register_work(st
|
@@ -3483,9 +3493,18 @@ static void ath10k_core_register_work(st
|
||||||
goto err_spectral_destroy;
|
goto err_spectral_destroy;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -202,7 +202,7 @@ v13:
|
|||||||
err_spectral_destroy:
|
err_spectral_destroy:
|
||||||
ath10k_spectral_destroy(ar);
|
ath10k_spectral_destroy(ar);
|
||||||
err_debug_destroy:
|
err_debug_destroy:
|
||||||
@@ -3537,6 +3556,8 @@ void ath10k_core_unregister(struct ath10
|
@@ -3531,6 +3550,8 @@ void ath10k_core_unregister(struct ath10
|
||||||
if (!test_bit(ATH10K_FLAG_CORE_REGISTERED, &ar->dev_flags))
|
if (!test_bit(ATH10K_FLAG_CORE_REGISTERED, &ar->dev_flags))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@ -221,7 +221,7 @@ v13:
|
|||||||
|
|
||||||
#include "htt.h"
|
#include "htt.h"
|
||||||
#include "htc.h"
|
#include "htc.h"
|
||||||
@@ -1253,6 +1254,13 @@ struct ath10k {
|
@@ -1256,6 +1257,13 @@ struct ath10k {
|
||||||
} testmode;
|
} testmode;
|
||||||
|
|
||||||
struct {
|
struct {
|
||||||
@ -237,7 +237,7 @@ v13:
|
|||||||
u32 fw_crash_counter;
|
u32 fw_crash_counter;
|
||||||
--- a/drivers/net/wireless/ath/ath10k/hw.h
|
--- a/drivers/net/wireless/ath/ath10k/hw.h
|
||||||
+++ b/drivers/net/wireless/ath/ath10k/hw.h
|
+++ b/drivers/net/wireless/ath/ath10k/hw.h
|
||||||
@@ -519,6 +519,7 @@ struct ath10k_hw_params {
|
@@ -520,6 +520,7 @@ struct ath10k_hw_params {
|
||||||
const char *name;
|
const char *name;
|
||||||
u32 patch_load_addr;
|
u32 patch_load_addr;
|
||||||
int uart_pin;
|
int uart_pin;
|
||||||
@ -456,7 +456,7 @@ v13:
|
|||||||
{
|
{
|
||||||
--- a/drivers/net/wireless/ath/ath10k/wmi-tlv.c
|
--- a/drivers/net/wireless/ath/ath10k/wmi-tlv.c
|
||||||
+++ b/drivers/net/wireless/ath/ath10k/wmi-tlv.c
|
+++ b/drivers/net/wireless/ath/ath10k/wmi-tlv.c
|
||||||
@@ -4594,6 +4594,8 @@ static const struct wmi_ops wmi_tlv_ops
|
@@ -4598,6 +4598,8 @@ static const struct wmi_ops wmi_tlv_ops
|
||||||
.gen_echo = ath10k_wmi_tlv_op_gen_echo,
|
.gen_echo = ath10k_wmi_tlv_op_gen_echo,
|
||||||
.gen_vdev_spectral_conf = ath10k_wmi_tlv_op_gen_vdev_spectral_conf,
|
.gen_vdev_spectral_conf = ath10k_wmi_tlv_op_gen_vdev_spectral_conf,
|
||||||
.gen_vdev_spectral_enable = ath10k_wmi_tlv_op_gen_vdev_spectral_enable,
|
.gen_vdev_spectral_enable = ath10k_wmi_tlv_op_gen_vdev_spectral_enable,
|
||||||
@ -467,7 +467,7 @@ v13:
|
|||||||
static const struct wmi_peer_flags_map wmi_tlv_peer_flags_map = {
|
static const struct wmi_peer_flags_map wmi_tlv_peer_flags_map = {
|
||||||
--- a/drivers/net/wireless/ath/ath10k/wmi.c
|
--- a/drivers/net/wireless/ath/ath10k/wmi.c
|
||||||
+++ b/drivers/net/wireless/ath/ath10k/wmi.c
|
+++ b/drivers/net/wireless/ath/ath10k/wmi.c
|
||||||
@@ -7472,6 +7472,49 @@ ath10k_wmi_op_gen_peer_set_param(struct
|
@@ -7492,6 +7492,49 @@ ath10k_wmi_op_gen_peer_set_param(struct
|
||||||
return skb;
|
return skb;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -517,7 +517,7 @@ v13:
|
|||||||
static struct sk_buff *
|
static struct sk_buff *
|
||||||
ath10k_wmi_op_gen_set_psmode(struct ath10k *ar, u32 vdev_id,
|
ath10k_wmi_op_gen_set_psmode(struct ath10k *ar, u32 vdev_id,
|
||||||
enum wmi_sta_ps_mode psmode)
|
enum wmi_sta_ps_mode psmode)
|
||||||
@@ -9160,6 +9203,9 @@ static const struct wmi_ops wmi_ops = {
|
@@ -9180,6 +9223,9 @@ static const struct wmi_ops wmi_ops = {
|
||||||
.fw_stats_fill = ath10k_wmi_main_op_fw_stats_fill,
|
.fw_stats_fill = ath10k_wmi_main_op_fw_stats_fill,
|
||||||
.get_vdev_subtype = ath10k_wmi_op_get_vdev_subtype,
|
.get_vdev_subtype = ath10k_wmi_op_get_vdev_subtype,
|
||||||
.gen_echo = ath10k_wmi_op_gen_echo,
|
.gen_echo = ath10k_wmi_op_gen_echo,
|
||||||
@ -527,7 +527,7 @@ v13:
|
|||||||
/* .gen_bcn_tmpl not implemented */
|
/* .gen_bcn_tmpl not implemented */
|
||||||
/* .gen_prb_tmpl not implemented */
|
/* .gen_prb_tmpl not implemented */
|
||||||
/* .gen_p2p_go_bcn_ie not implemented */
|
/* .gen_p2p_go_bcn_ie not implemented */
|
||||||
@@ -9230,6 +9276,8 @@ static const struct wmi_ops wmi_10_1_ops
|
@@ -9250,6 +9296,8 @@ static const struct wmi_ops wmi_10_1_ops
|
||||||
.fw_stats_fill = ath10k_wmi_10x_op_fw_stats_fill,
|
.fw_stats_fill = ath10k_wmi_10x_op_fw_stats_fill,
|
||||||
.get_vdev_subtype = ath10k_wmi_op_get_vdev_subtype,
|
.get_vdev_subtype = ath10k_wmi_op_get_vdev_subtype,
|
||||||
.gen_echo = ath10k_wmi_op_gen_echo,
|
.gen_echo = ath10k_wmi_op_gen_echo,
|
||||||
@ -536,7 +536,7 @@ v13:
|
|||||||
/* .gen_bcn_tmpl not implemented */
|
/* .gen_bcn_tmpl not implemented */
|
||||||
/* .gen_prb_tmpl not implemented */
|
/* .gen_prb_tmpl not implemented */
|
||||||
/* .gen_p2p_go_bcn_ie not implemented */
|
/* .gen_p2p_go_bcn_ie not implemented */
|
||||||
@@ -9302,6 +9350,8 @@ static const struct wmi_ops wmi_10_2_ops
|
@@ -9322,6 +9370,8 @@ static const struct wmi_ops wmi_10_2_ops
|
||||||
.gen_delba_send = ath10k_wmi_op_gen_delba_send,
|
.gen_delba_send = ath10k_wmi_op_gen_delba_send,
|
||||||
.fw_stats_fill = ath10k_wmi_10x_op_fw_stats_fill,
|
.fw_stats_fill = ath10k_wmi_10x_op_fw_stats_fill,
|
||||||
.get_vdev_subtype = ath10k_wmi_op_get_vdev_subtype,
|
.get_vdev_subtype = ath10k_wmi_op_get_vdev_subtype,
|
||||||
@ -545,7 +545,7 @@ v13:
|
|||||||
/* .gen_pdev_enable_adaptive_cca not implemented */
|
/* .gen_pdev_enable_adaptive_cca not implemented */
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -9373,6 +9423,8 @@ static const struct wmi_ops wmi_10_2_4_o
|
@@ -9393,6 +9443,8 @@ static const struct wmi_ops wmi_10_2_4_o
|
||||||
ath10k_wmi_op_gen_pdev_enable_adaptive_cca,
|
ath10k_wmi_op_gen_pdev_enable_adaptive_cca,
|
||||||
.get_vdev_subtype = ath10k_wmi_10_2_4_op_get_vdev_subtype,
|
.get_vdev_subtype = ath10k_wmi_10_2_4_op_get_vdev_subtype,
|
||||||
.gen_bb_timing = ath10k_wmi_10_2_4_op_gen_bb_timing,
|
.gen_bb_timing = ath10k_wmi_10_2_4_op_gen_bb_timing,
|
||||||
@ -554,7 +554,7 @@ v13:
|
|||||||
/* .gen_bcn_tmpl not implemented */
|
/* .gen_bcn_tmpl not implemented */
|
||||||
/* .gen_prb_tmpl not implemented */
|
/* .gen_prb_tmpl not implemented */
|
||||||
/* .gen_p2p_go_bcn_ie not implemented */
|
/* .gen_p2p_go_bcn_ie not implemented */
|
||||||
@@ -9454,6 +9506,8 @@ static const struct wmi_ops wmi_10_4_ops
|
@@ -9474,6 +9526,8 @@ static const struct wmi_ops wmi_10_4_ops
|
||||||
.gen_pdev_bss_chan_info_req = ath10k_wmi_10_2_op_gen_pdev_bss_chan_info,
|
.gen_pdev_bss_chan_info_req = ath10k_wmi_10_2_op_gen_pdev_bss_chan_info,
|
||||||
.gen_echo = ath10k_wmi_op_gen_echo,
|
.gen_echo = ath10k_wmi_op_gen_echo,
|
||||||
.gen_pdev_get_tpc_config = ath10k_wmi_10_2_4_op_gen_pdev_get_tpc_config,
|
.gen_pdev_get_tpc_config = ath10k_wmi_10_2_4_op_gen_pdev_get_tpc_config,
|
||||||
|
@ -16,7 +16,7 @@ Signed-off-by: Mathias Kresin <dev@kresin.me>
|
|||||||
|
|
||||||
--- a/drivers/net/wireless/ath/ath10k/core.h
|
--- a/drivers/net/wireless/ath/ath10k/core.h
|
||||||
+++ b/drivers/net/wireless/ath/ath10k/core.h
|
+++ b/drivers/net/wireless/ath/ath10k/core.h
|
||||||
@@ -1309,6 +1309,10 @@ struct ath10k {
|
@@ -1312,6 +1312,10 @@ struct ath10k {
|
||||||
s32 tx_power_2g_limit;
|
s32 tx_power_2g_limit;
|
||||||
s32 tx_power_5g_limit;
|
s32 tx_power_5g_limit;
|
||||||
|
|
||||||
@ -42,7 +42,7 @@ Signed-off-by: Mathias Kresin <dev@kresin.me>
|
|||||||
if (ret)
|
if (ret)
|
||||||
--- a/drivers/net/wireless/ath/ath10k/mac.c
|
--- a/drivers/net/wireless/ath/ath10k/mac.c
|
||||||
+++ b/drivers/net/wireless/ath/ath10k/mac.c
|
+++ b/drivers/net/wireless/ath/ath10k/mac.c
|
||||||
@@ -10284,7 +10284,7 @@ int ath10k_mac_register(struct ath10k *a
|
@@ -10293,7 +10293,7 @@ int ath10k_mac_register(struct ath10k *a
|
||||||
ar->hw->weight_multiplier = ATH10K_AIRTIME_WEIGHT_MULTIPLIER;
|
ar->hw->weight_multiplier = ATH10K_AIRTIME_WEIGHT_MULTIPLIER;
|
||||||
|
|
||||||
#ifdef CPTCFG_MAC80211_LEDS
|
#ifdef CPTCFG_MAC80211_LEDS
|
||||||
|
@ -26,7 +26,7 @@ Signed-off-by: Ansuel Smith <ansuelsmth@gmail.com>
|
|||||||
#include <linux/property.h>
|
#include <linux/property.h>
|
||||||
#include <linux/dmi.h>
|
#include <linux/dmi.h>
|
||||||
#include <linux/ctype.h>
|
#include <linux/ctype.h>
|
||||||
@@ -3407,6 +3408,8 @@ static int ath10k_core_probe_fw(struct a
|
@@ -3401,6 +3402,8 @@ static int ath10k_core_probe_fw(struct a
|
||||||
|
|
||||||
device_get_mac_address(ar->dev, ar->mac_addr);
|
device_get_mac_address(ar->dev, ar->mac_addr);
|
||||||
|
|
||||||
|
@ -18,7 +18,7 @@ Signed-off-by: David Bauer <mail@david-bauer.net>
|
|||||||
|
|
||||||
--- a/drivers/net/wireless/ath/ath10k/mac.c
|
--- a/drivers/net/wireless/ath/ath10k/mac.c
|
||||||
+++ b/drivers/net/wireless/ath/ath10k/mac.c
|
+++ b/drivers/net/wireless/ath/ath10k/mac.c
|
||||||
@@ -10080,7 +10080,6 @@ int ath10k_mac_register(struct ath10k *a
|
@@ -10089,7 +10089,6 @@ int ath10k_mac_register(struct ath10k *a
|
||||||
ieee80211_hw_set(ar->hw, CHANCTX_STA_CSA);
|
ieee80211_hw_set(ar->hw, CHANCTX_STA_CSA);
|
||||||
ieee80211_hw_set(ar->hw, QUEUE_CONTROL);
|
ieee80211_hw_set(ar->hw, QUEUE_CONTROL);
|
||||||
ieee80211_hw_set(ar->hw, SUPPORTS_TX_FRAG);
|
ieee80211_hw_set(ar->hw, SUPPORTS_TX_FRAG);
|
||||||
|
@ -35,7 +35,7 @@ Link: https://lore.kernel.org/r/20220923170235.18873-1-quic_adisi@quicinc.com
|
|||||||
|
|
||||||
--- a/drivers/net/wireless/ath/ath11k/core.c
|
--- a/drivers/net/wireless/ath/ath11k/core.c
|
||||||
+++ b/drivers/net/wireless/ath/ath11k/core.c
|
+++ b/drivers/net/wireless/ath/ath11k/core.c
|
||||||
@@ -1641,7 +1641,7 @@ static void ath11k_update_11d(struct wor
|
@@ -1668,7 +1668,7 @@ static void ath11k_update_11d(struct wor
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -44,7 +44,7 @@ Link: https://lore.kernel.org/r/20220923170235.18873-1-quic_adisi@quicinc.com
|
|||||||
{
|
{
|
||||||
struct ath11k *ar;
|
struct ath11k *ar;
|
||||||
struct ath11k_pdev *pdev;
|
struct ath11k_pdev *pdev;
|
||||||
@@ -1730,9 +1730,6 @@ static void ath11k_core_restart(struct w
|
@@ -1757,9 +1757,6 @@ static void ath11k_core_restart(struct w
|
||||||
struct ath11k_base *ab = container_of(work, struct ath11k_base, restart_work);
|
struct ath11k_base *ab = container_of(work, struct ath11k_base, restart_work);
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
@ -66,7 +66,7 @@ Link: https://lore.kernel.org/r/20220923170235.18873-1-quic_adisi@quicinc.com
|
|||||||
const char *filename);
|
const char *filename);
|
||||||
--- a/drivers/net/wireless/ath/ath11k/qmi.c
|
--- a/drivers/net/wireless/ath/ath11k/qmi.c
|
||||||
+++ b/drivers/net/wireless/ath/ath11k/qmi.c
|
+++ b/drivers/net/wireless/ath/ath11k/qmi.c
|
||||||
@@ -3164,6 +3164,9 @@ static void ath11k_qmi_driver_event_work
|
@@ -3169,6 +3169,9 @@ static void ath11k_qmi_driver_event_work
|
||||||
case ATH11K_QMI_EVENT_SERVER_EXIT:
|
case ATH11K_QMI_EVENT_SERVER_EXIT:
|
||||||
set_bit(ATH11K_FLAG_CRASH_FLUSH, &ab->dev_flags);
|
set_bit(ATH11K_FLAG_CRASH_FLUSH, &ab->dev_flags);
|
||||||
set_bit(ATH11K_FLAG_RECOVERY, &ab->dev_flags);
|
set_bit(ATH11K_FLAG_RECOVERY, &ab->dev_flags);
|
||||||
|
@ -20,7 +20,7 @@ Link: https://lore.kernel.org/r/20221006005842.8599-1-quic_periyasa@quicinc.com
|
|||||||
|
|
||||||
--- a/drivers/net/wireless/ath/ath11k/mac.c
|
--- a/drivers/net/wireless/ath/ath11k/mac.c
|
||||||
+++ b/drivers/net/wireless/ath/ath11k/mac.c
|
+++ b/drivers/net/wireless/ath/ath11k/mac.c
|
||||||
@@ -6421,18 +6421,16 @@ static int ath11k_mac_op_add_interface(s
|
@@ -6418,18 +6418,16 @@ static int ath11k_mac_op_add_interface(s
|
||||||
|
|
||||||
ath11k_dp_vdev_tx_attach(ar, arvif);
|
ath11k_dp_vdev_tx_attach(ar, arvif);
|
||||||
|
|
||||||
@ -42,7 +42,7 @@ Link: https://lore.kernel.org/r/20221006005842.8599-1-quic_periyasa@quicinc.com
|
|||||||
mutex_unlock(&ar->conf_mutex);
|
mutex_unlock(&ar->conf_mutex);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
@@ -6457,7 +6455,6 @@ err_vdev_del:
|
@@ -6454,7 +6452,6 @@ err_vdev_del:
|
||||||
spin_unlock_bh(&ar->data_lock);
|
spin_unlock_bh(&ar->data_lock);
|
||||||
|
|
||||||
err:
|
err:
|
||||||
|
@ -43,7 +43,7 @@ Link: https://lore.kernel.org/r/20221007051130.6067-1-quic_mpubbise@quicinc.com
|
|||||||
|
|
||||||
static const u32 ath11k_smps_map[] = {
|
static const u32 ath11k_smps_map[] = {
|
||||||
[WLAN_HT_CAP_SM_PS_STATIC] = WMI_PEER_SMPS_STATIC,
|
[WLAN_HT_CAP_SM_PS_STATIC] = WMI_PEER_SMPS_STATIC,
|
||||||
@@ -3612,6 +3615,7 @@ static int ath11k_mac_op_hw_scan(struct
|
@@ -3609,6 +3612,7 @@ static int ath11k_mac_op_hw_scan(struct
|
||||||
struct scan_req_params arg;
|
struct scan_req_params arg;
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
int i;
|
int i;
|
||||||
@ -51,7 +51,7 @@ Link: https://lore.kernel.org/r/20221007051130.6067-1-quic_mpubbise@quicinc.com
|
|||||||
|
|
||||||
mutex_lock(&ar->conf_mutex);
|
mutex_lock(&ar->conf_mutex);
|
||||||
|
|
||||||
@@ -3681,6 +3685,26 @@ static int ath11k_mac_op_hw_scan(struct
|
@@ -3678,6 +3682,26 @@ static int ath11k_mac_op_hw_scan(struct
|
||||||
ether_addr_copy(arg.mac_mask.addr, req->mac_addr_mask);
|
ether_addr_copy(arg.mac_mask.addr, req->mac_addr_mask);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -78,7 +78,7 @@ Link: https://lore.kernel.org/r/20221007051130.6067-1-quic_mpubbise@quicinc.com
|
|||||||
ret = ath11k_start_scan(ar, &arg);
|
ret = ath11k_start_scan(ar, &arg);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
ath11k_warn(ar->ab, "failed to start hw scan: %d\n", ret);
|
ath11k_warn(ar->ab, "failed to start hw scan: %d\n", ret);
|
||||||
@@ -3689,10 +3713,8 @@ static int ath11k_mac_op_hw_scan(struct
|
@@ -3686,10 +3710,8 @@ static int ath11k_mac_op_hw_scan(struct
|
||||||
spin_unlock_bh(&ar->data_lock);
|
spin_unlock_bh(&ar->data_lock);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -90,7 +90,7 @@ Link: https://lore.kernel.org/r/20221007051130.6067-1-quic_mpubbise@quicinc.com
|
|||||||
|
|
||||||
exit:
|
exit:
|
||||||
kfree(arg.chan_list);
|
kfree(arg.chan_list);
|
||||||
@@ -9060,6 +9082,9 @@ static int __ath11k_mac_register(struct
|
@@ -9065,6 +9087,9 @@ static int __ath11k_mac_register(struct
|
||||||
NL80211_EXT_FEATURE_UNSOL_BCAST_PROBE_RESP);
|
NL80211_EXT_FEATURE_UNSOL_BCAST_PROBE_RESP);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -21,7 +21,7 @@ Link: https://lore.kernel.org/r/20221011095346.3901-1-quic_ssreeela@quicinc.com
|
|||||||
|
|
||||||
--- a/drivers/net/wireless/ath/ath11k/mac.c
|
--- a/drivers/net/wireless/ath/ath11k/mac.c
|
||||||
+++ b/drivers/net/wireless/ath/ath11k/mac.c
|
+++ b/drivers/net/wireless/ath/ath11k/mac.c
|
||||||
@@ -6233,6 +6233,40 @@ void ath11k_mac_11d_scan_stop_all(struct
|
@@ -6230,6 +6230,40 @@ void ath11k_mac_11d_scan_stop_all(struct
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -62,7 +62,7 @@ Link: https://lore.kernel.org/r/20221011095346.3901-1-quic_ssreeela@quicinc.com
|
|||||||
static int ath11k_mac_op_add_interface(struct ieee80211_hw *hw,
|
static int ath11k_mac_op_add_interface(struct ieee80211_hw *hw,
|
||||||
struct ieee80211_vif *vif)
|
struct ieee80211_vif *vif)
|
||||||
{
|
{
|
||||||
@@ -6468,10 +6502,7 @@ err_peer_del:
|
@@ -6465,10 +6499,7 @@ err_peer_del:
|
||||||
}
|
}
|
||||||
|
|
||||||
err_vdev_del:
|
err_vdev_del:
|
||||||
@ -74,7 +74,7 @@ Link: https://lore.kernel.org/r/20221011095346.3901-1-quic_ssreeela@quicinc.com
|
|||||||
spin_lock_bh(&ar->data_lock);
|
spin_lock_bh(&ar->data_lock);
|
||||||
list_del(&arvif->list);
|
list_del(&arvif->list);
|
||||||
spin_unlock_bh(&ar->data_lock);
|
spin_unlock_bh(&ar->data_lock);
|
||||||
@@ -6499,7 +6530,6 @@ static void ath11k_mac_op_remove_interfa
|
@@ -6496,7 +6527,6 @@ static void ath11k_mac_op_remove_interfa
|
||||||
struct ath11k *ar = hw->priv;
|
struct ath11k *ar = hw->priv;
|
||||||
struct ath11k_vif *arvif = ath11k_vif_to_arvif(vif);
|
struct ath11k_vif *arvif = ath11k_vif_to_arvif(vif);
|
||||||
struct ath11k_base *ab = ar->ab;
|
struct ath11k_base *ab = ar->ab;
|
||||||
@ -82,7 +82,7 @@ Link: https://lore.kernel.org/r/20221011095346.3901-1-quic_ssreeela@quicinc.com
|
|||||||
int ret;
|
int ret;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
@@ -6520,29 +6550,13 @@ static void ath11k_mac_op_remove_interfa
|
@@ -6517,29 +6547,13 @@ static void ath11k_mac_op_remove_interfa
|
||||||
arvif->vdev_id, ret);
|
arvif->vdev_id, ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -27,7 +27,7 @@ Link: https://lore.kernel.org/r/20221014155054.11471-1-quic_nmaran@quicinc.com
|
|||||||
|
|
||||||
--- a/drivers/net/wireless/ath/ath11k/core.c
|
--- a/drivers/net/wireless/ath/ath11k/core.c
|
||||||
+++ b/drivers/net/wireless/ath/ath11k/core.c
|
+++ b/drivers/net/wireless/ath/ath11k/core.c
|
||||||
@@ -1677,6 +1677,10 @@ void ath11k_core_pre_reconfigure_recover
|
@@ -1704,6 +1704,10 @@ void ath11k_core_pre_reconfigure_recover
|
||||||
ath11k_mac_tx_mgmt_pending_free, ar);
|
ath11k_mac_tx_mgmt_pending_free, ar);
|
||||||
idr_destroy(&ar->txmgmt_idr);
|
idr_destroy(&ar->txmgmt_idr);
|
||||||
wake_up(&ar->txmgmt_empty_waitq);
|
wake_up(&ar->txmgmt_empty_waitq);
|
||||||
|
@ -1,42 +0,0 @@
|
|||||||
From dd1c2322694522f674c874f5fa02ac5ae39135dd Mon Sep 17 00:00:00 2001
|
|
||||||
From: "Jiri Slaby (SUSE)" <jirislaby@kernel.org>
|
|
||||||
Date: Mon, 31 Oct 2022 12:43:41 +0100
|
|
||||||
Subject: [PATCH] wifi: ath11k: synchronize
|
|
||||||
ath11k_mac_he_gi_to_nl80211_he_gi()'s return type
|
|
||||||
|
|
||||||
ath11k_mac_he_gi_to_nl80211_he_gi() generates a valid warning with gcc-13:
|
|
||||||
drivers/net/wireless/ath/ath11k/mac.c:321:20: error: conflicting types for 'ath11k_mac_he_gi_to_nl80211_he_gi' due to enum/integer mismatch; have 'enum nl80211_he_gi(u8)'
|
|
||||||
drivers/net/wireless/ath/ath11k/mac.h:166:5: note: previous declaration of 'ath11k_mac_he_gi_to_nl80211_he_gi' with type 'u32(u8)'
|
|
||||||
|
|
||||||
I.e. the type of the return value ath11k_mac_he_gi_to_nl80211_he_gi() in
|
|
||||||
the declaration is u32, while the definition spells enum nl80211_he_gi.
|
|
||||||
Synchronize them to the latter.
|
|
||||||
|
|
||||||
Cc: Martin Liska <mliska@suse.cz>
|
|
||||||
Cc: Kalle Valo <kvalo@kernel.org>
|
|
||||||
Cc: "David S. Miller" <davem@davemloft.net>
|
|
||||||
Cc: Eric Dumazet <edumazet@google.com>
|
|
||||||
Cc: Jakub Kicinski <kuba@kernel.org>
|
|
||||||
Cc: Paolo Abeni <pabeni@redhat.com>
|
|
||||||
Cc: ath11k@lists.infradead.org
|
|
||||||
Cc: linux-wireless@vger.kernel.org
|
|
||||||
Cc: netdev@vger.kernel.org
|
|
||||||
Signed-off-by: Jiri Slaby (SUSE) <jirislaby@kernel.org>
|
|
||||||
Reviewed-by: Jeff Johnson <quic_jjohnson@quicinc.com>
|
|
||||||
Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
|
|
||||||
Link: https://lore.kernel.org/r/20221031114341.10377-1-jirislaby@kernel.org
|
|
||||||
---
|
|
||||||
drivers/net/wireless/ath/ath11k/mac.h | 2 +-
|
|
||||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
|
||||||
|
|
||||||
--- a/drivers/net/wireless/ath/ath11k/mac.h
|
|
||||||
+++ b/drivers/net/wireless/ath/ath11k/mac.h
|
|
||||||
@@ -163,7 +163,7 @@ void ath11k_mac_drain_tx(struct ath11k *
|
|
||||||
void ath11k_mac_peer_cleanup_all(struct ath11k *ar);
|
|
||||||
int ath11k_mac_tx_mgmt_pending_free(int buf_id, void *skb, void *ctx);
|
|
||||||
u8 ath11k_mac_bw_to_mac80211_bw(u8 bw);
|
|
||||||
-u32 ath11k_mac_he_gi_to_nl80211_he_gi(u8 sgi);
|
|
||||||
+enum nl80211_he_gi ath11k_mac_he_gi_to_nl80211_he_gi(u8 sgi);
|
|
||||||
enum nl80211_he_ru_alloc ath11k_mac_phy_he_ru_to_nl80211_he_ru_alloc(u16 ru_phy);
|
|
||||||
enum nl80211_he_ru_alloc ath11k_mac_he_ru_tones_to_nl80211_he_ru_alloc(u16 ru_tones);
|
|
||||||
enum ath11k_supported_bw ath11k_mac_mac80211_bw_to_ath11k_bw(enum rate_info_bw bw);
|
|
@ -96,7 +96,7 @@ Link: https://lore.kernel.org/r/20221104085403.11025-1-quic_youghand@quicinc.com
|
|||||||
struct ath11k_hw_ops {
|
struct ath11k_hw_ops {
|
||||||
--- a/drivers/net/wireless/ath/ath11k/mac.c
|
--- a/drivers/net/wireless/ath/ath11k/mac.c
|
||||||
+++ b/drivers/net/wireless/ath/ath11k/mac.c
|
+++ b/drivers/net/wireless/ath/ath11k/mac.c
|
||||||
@@ -8010,6 +8010,7 @@ ath11k_mac_op_reconfig_complete(struct i
|
@@ -8007,6 +8007,7 @@ ath11k_mac_op_reconfig_complete(struct i
|
||||||
struct ath11k *ar = hw->priv;
|
struct ath11k *ar = hw->priv;
|
||||||
struct ath11k_base *ab = ar->ab;
|
struct ath11k_base *ab = ar->ab;
|
||||||
int recovery_count;
|
int recovery_count;
|
||||||
@ -104,7 +104,7 @@ Link: https://lore.kernel.org/r/20221104085403.11025-1-quic_youghand@quicinc.com
|
|||||||
|
|
||||||
if (reconfig_type != IEEE80211_RECONFIG_TYPE_RESTART)
|
if (reconfig_type != IEEE80211_RECONFIG_TYPE_RESTART)
|
||||||
return;
|
return;
|
||||||
@@ -8045,6 +8046,12 @@ ath11k_mac_op_reconfig_complete(struct i
|
@@ -8042,6 +8043,12 @@ ath11k_mac_op_reconfig_complete(struct i
|
||||||
ath11k_dbg(ab, ATH11K_DBG_BOOT, "reset success\n");
|
ath11k_dbg(ab, ATH11K_DBG_BOOT, "reset success\n");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -81,7 +81,7 @@ Link: https://lore.kernel.org/r/20221122132152.17771-5-quic_kathirve@quicinc.com
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1142,10 +1154,26 @@ static int ath11k_ahb_probe(struct platf
|
@@ -1148,10 +1160,26 @@ static int ath11k_ahb_probe(struct platf
|
||||||
goto err_core_free;
|
goto err_core_free;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -108,7 +108,7 @@ Link: https://lore.kernel.org/r/20221122132152.17771-5-quic_kathirve@quicinc.com
|
|||||||
ret = ath11k_ahb_setup_resources(ab);
|
ret = ath11k_ahb_setup_resources(ab);
|
||||||
if (ret)
|
if (ret)
|
||||||
goto err_core_free;
|
goto err_core_free;
|
||||||
@@ -1236,6 +1264,10 @@ static void ath11k_ahb_free_resources(st
|
@@ -1242,6 +1270,10 @@ static void ath11k_ahb_free_resources(st
|
||||||
ath11k_ahb_release_smp2p_handle(ab);
|
ath11k_ahb_release_smp2p_handle(ab);
|
||||||
ath11k_ahb_fw_resource_deinit(ab);
|
ath11k_ahb_fw_resource_deinit(ab);
|
||||||
ath11k_ce_free_pipes(ab);
|
ath11k_ce_free_pipes(ab);
|
||||||
@ -340,7 +340,7 @@ Link: https://lore.kernel.org/r/20221122132152.17771-5-quic_kathirve@quicinc.com
|
|||||||
extern const struct ath11k_hw_hal_params ath11k_hw_hal_params_wcn6750;
|
extern const struct ath11k_hw_hal_params ath11k_hw_hal_params_wcn6750;
|
||||||
--- a/drivers/net/wireless/ath/ath11k/pci.c
|
--- a/drivers/net/wireless/ath/ath11k/pci.c
|
||||||
+++ b/drivers/net/wireless/ath/ath11k/pci.c
|
+++ b/drivers/net/wireless/ath/ath11k/pci.c
|
||||||
@@ -543,6 +543,8 @@ static int ath11k_pci_claim(struct ath11
|
@@ -547,6 +547,8 @@ static int ath11k_pci_claim(struct ath11
|
||||||
goto clear_master;
|
goto clear_master;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -23,7 +23,7 @@ Link: https://lore.kernel.org/r/20221205192125.13533-1-quic_kathirve@quicinc.com
|
|||||||
|
|
||||||
--- a/drivers/net/wireless/ath/ath11k/mac.c
|
--- a/drivers/net/wireless/ath/ath11k/mac.c
|
||||||
+++ b/drivers/net/wireless/ath/ath11k/mac.c
|
+++ b/drivers/net/wireless/ath/ath11k/mac.c
|
||||||
@@ -3612,7 +3612,7 @@ static int ath11k_mac_op_hw_scan(struct
|
@@ -3609,7 +3609,7 @@ static int ath11k_mac_op_hw_scan(struct
|
||||||
struct ath11k *ar = hw->priv;
|
struct ath11k *ar = hw->priv;
|
||||||
struct ath11k_vif *arvif = ath11k_vif_to_arvif(vif);
|
struct ath11k_vif *arvif = ath11k_vif_to_arvif(vif);
|
||||||
struct cfg80211_scan_request *req = &hw_req->req;
|
struct cfg80211_scan_request *req = &hw_req->req;
|
||||||
@ -32,7 +32,7 @@ Link: https://lore.kernel.org/r/20221205192125.13533-1-quic_kathirve@quicinc.com
|
|||||||
int ret = 0;
|
int ret = 0;
|
||||||
int i;
|
int i;
|
||||||
u32 scan_timeout;
|
u32 scan_timeout;
|
||||||
@@ -3640,72 +3640,78 @@ static int ath11k_mac_op_hw_scan(struct
|
@@ -3637,72 +3637,78 @@ static int ath11k_mac_op_hw_scan(struct
|
||||||
if (ret)
|
if (ret)
|
||||||
goto exit;
|
goto exit;
|
||||||
|
|
||||||
@ -143,7 +143,7 @@ Link: https://lore.kernel.org/r/20221205192125.13533-1-quic_kathirve@quicinc.com
|
|||||||
if (ret) {
|
if (ret) {
|
||||||
ath11k_warn(ar->ab, "failed to start hw scan: %d\n", ret);
|
ath11k_warn(ar->ab, "failed to start hw scan: %d\n", ret);
|
||||||
spin_lock_bh(&ar->data_lock);
|
spin_lock_bh(&ar->data_lock);
|
||||||
@@ -3717,10 +3723,11 @@ static int ath11k_mac_op_hw_scan(struct
|
@@ -3714,10 +3720,11 @@ static int ath11k_mac_op_hw_scan(struct
|
||||||
msecs_to_jiffies(scan_timeout));
|
msecs_to_jiffies(scan_timeout));
|
||||||
|
|
||||||
exit:
|
exit:
|
||||||
|
@ -116,7 +116,7 @@ Link: https://lore.kernel.org/r/20221220044435.10506-1-quic_rajkbhag@quicinc.com
|
|||||||
struct ath11k_hw_ops {
|
struct ath11k_hw_ops {
|
||||||
--- a/drivers/net/wireless/ath/ath11k/mac.c
|
--- a/drivers/net/wireless/ath/ath11k/mac.c
|
||||||
+++ b/drivers/net/wireless/ath/ath11k/mac.c
|
+++ b/drivers/net/wireless/ath/ath11k/mac.c
|
||||||
@@ -3110,7 +3110,7 @@ static void ath11k_mac_op_bss_info_chang
|
@@ -3107,7 +3107,7 @@ static void ath11k_mac_op_bss_info_chang
|
||||||
u16 bitrate;
|
u16 bitrate;
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
u8 rateidx;
|
u8 rateidx;
|
||||||
@ -125,7 +125,7 @@ Link: https://lore.kernel.org/r/20221220044435.10506-1-quic_rajkbhag@quicinc.com
|
|||||||
u32 ipv4_cnt;
|
u32 ipv4_cnt;
|
||||||
|
|
||||||
mutex_lock(&ar->conf_mutex);
|
mutex_lock(&ar->conf_mutex);
|
||||||
@@ -3412,6 +3412,20 @@ static void ath11k_mac_op_bss_info_chang
|
@@ -3409,6 +3409,20 @@ static void ath11k_mac_op_bss_info_chang
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -146,7 +146,7 @@ Link: https://lore.kernel.org/r/20221220044435.10506-1-quic_rajkbhag@quicinc.com
|
|||||||
if (changed & BSS_CHANGED_FILS_DISCOVERY ||
|
if (changed & BSS_CHANGED_FILS_DISCOVERY ||
|
||||||
changed & BSS_CHANGED_UNSOL_BCAST_PROBE_RESP)
|
changed & BSS_CHANGED_UNSOL_BCAST_PROBE_RESP)
|
||||||
ath11k_mac_fils_discovery(arvif, info);
|
ath11k_mac_fils_discovery(arvif, info);
|
||||||
@@ -9113,6 +9127,10 @@ static int __ath11k_mac_register(struct
|
@@ -9118,6 +9132,10 @@ static int __ath11k_mac_register(struct
|
||||||
wiphy_ext_feature_set(ar->hw->wiphy,
|
wiphy_ext_feature_set(ar->hw->wiphy,
|
||||||
NL80211_EXT_FEATURE_SET_SCAN_DWELL);
|
NL80211_EXT_FEATURE_SET_SCAN_DWELL);
|
||||||
|
|
||||||
|
@ -82,7 +82,7 @@ Link: https://lore.kernel.org/r/20230113063209.7256-1-quic_rajkbhag@quicinc.com
|
|||||||
|
|
||||||
--- a/drivers/net/wireless/ath/ath11k/ahb.c
|
--- a/drivers/net/wireless/ath/ath11k/ahb.c
|
||||||
+++ b/drivers/net/wireless/ath/ath11k/ahb.c
|
+++ b/drivers/net/wireless/ath/ath11k/ahb.c
|
||||||
@@ -1157,12 +1157,16 @@ static int ath11k_ahb_probe(struct platf
|
@@ -1163,12 +1163,16 @@ static int ath11k_ahb_probe(struct platf
|
||||||
goto err_core_free;
|
goto err_core_free;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -101,7 +101,7 @@ Link: https://lore.kernel.org/r/20230113063209.7256-1-quic_rajkbhag@quicinc.com
|
|||||||
if (ab->hw_params.ce_remap) {
|
if (ab->hw_params.ce_remap) {
|
||||||
const struct ce_remap *ce_remap = ab->hw_params.ce_remap;
|
const struct ce_remap *ce_remap = ab->hw_params.ce_remap;
|
||||||
/* ce register space is moved out of wcss unlike ipq8074 or ipq6018
|
/* ce register space is moved out of wcss unlike ipq8074 or ipq6018
|
||||||
@@ -1177,10 +1181,6 @@ static int ath11k_ahb_probe(struct platf
|
@@ -1183,10 +1187,6 @@ static int ath11k_ahb_probe(struct platf
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -16,7 +16,7 @@ Link: https://lore.kernel.org/r/20230217030031.4021289-1-yangyingliang@huawei.co
|
|||||||
|
|
||||||
--- a/drivers/net/wireless/ath/ath11k/ahb.c
|
--- a/drivers/net/wireless/ath/ath11k/ahb.c
|
||||||
+++ b/drivers/net/wireless/ath/ath11k/ahb.c
|
+++ b/drivers/net/wireless/ath/ath11k/ahb.c
|
||||||
@@ -1174,7 +1174,7 @@ static int ath11k_ahb_probe(struct platf
|
@@ -1180,7 +1180,7 @@ static int ath11k_ahb_probe(struct platf
|
||||||
* to a new space for accessing them.
|
* to a new space for accessing them.
|
||||||
*/
|
*/
|
||||||
ab->mem_ce = ioremap(ce_remap->base, ce_remap->size);
|
ab->mem_ce = ioremap(ce_remap->base, ce_remap->size);
|
||||||
|
@ -1,50 +0,0 @@
|
|||||||
From f117276638b7600b981b3fe28550823cfbe1ef23 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Douglas Anderson <dianders@chromium.org>
|
|
||||||
Date: Wed, 1 Feb 2023 08:54:42 -0800
|
|
||||||
Subject: [PATCH] wifi: ath11k: Use platform_get_irq() to get the interrupt
|
|
||||||
|
|
||||||
As of commit a1a2b7125e10 ("of/platform: Drop static setup of IRQ
|
|
||||||
resource from DT core"), we need to use platform_get_irq() instead of
|
|
||||||
platform_get_resource() to get our IRQs because
|
|
||||||
platform_get_resource() simply won't get them anymore.
|
|
||||||
|
|
||||||
This was already fixed in several other Atheros WiFi drivers,
|
|
||||||
apparently in response to Zeal Robot reports. An example of another
|
|
||||||
fix is commit 9503a1fc123d ("ath9k: Use platform_get_irq() to get the
|
|
||||||
interrupt"). ath11k seems to have been missed in this effort, though.
|
|
||||||
|
|
||||||
Without this change, WiFi wasn't coming up on my Qualcomm sc7280-based
|
|
||||||
hardware. Specifically, "platform_get_resource(pdev, IORESOURCE_IRQ,
|
|
||||||
i)" was failing even for i=0.
|
|
||||||
|
|
||||||
Tested-on: WCN6750 hw1.0 AHB WLAN.MSL.1.0.1-00887-QCAMSLSWPLZ-1
|
|
||||||
|
|
||||||
Fixes: a1a2b7125e10 ("of/platform: Drop static setup of IRQ resource from DT core")
|
|
||||||
Fixes: 00402f49d26f ("ath11k: Add support for WCN6750 device")
|
|
||||||
Signed-off-by: Douglas Anderson <dianders@chromium.org>
|
|
||||||
Tested-by: Jun Yu <junyuu@chromium.org>
|
|
||||||
Reviewed-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
|
|
||||||
Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
|
|
||||||
Link: https://lore.kernel.org/r/20230201084131.v2.1.I69cf3d56c97098287fe3a70084ee515098390b70@changeid
|
|
||||||
---
|
|
||||||
drivers/net/wireless/ath/ath11k/ahb.c | 8 ++++----
|
|
||||||
1 file changed, 4 insertions(+), 4 deletions(-)
|
|
||||||
|
|
||||||
--- a/drivers/net/wireless/ath/ath11k/ahb.c
|
|
||||||
+++ b/drivers/net/wireless/ath/ath11k/ahb.c
|
|
||||||
@@ -874,11 +874,11 @@ static int ath11k_ahb_setup_msi_resource
|
|
||||||
ab->pci.msi.ep_base_data = int_prop + 32;
|
|
||||||
|
|
||||||
for (i = 0; i < ab->pci.msi.config->total_vectors; i++) {
|
|
||||||
- res = platform_get_resource(pdev, IORESOURCE_IRQ, i);
|
|
||||||
- if (!res)
|
|
||||||
- return -ENODEV;
|
|
||||||
+ ret = platform_get_irq(pdev, i);
|
|
||||||
+ if (ret < 0)
|
|
||||||
+ return ret;
|
|
||||||
|
|
||||||
- ab->pci.msi.irqs[i] = res->start;
|
|
||||||
+ ab->pci.msi.irqs[i] = ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
set_bit(ATH11K_FLAG_MULTI_MSI_VECTORS, &ab->dev_flags);
|
|
@ -1,53 +0,0 @@
|
|||||||
From 60b7d62ba8cdbd073997bff0f1cdae8d844002c0 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Christian Marangi <ansuelsmth@gmail.com>
|
|
||||||
Date: Thu, 9 Feb 2023 23:26:22 +0100
|
|
||||||
Subject: [PATCH] wifi: ath11k: fix SAC bug on peer addition with sta band
|
|
||||||
migration
|
|
||||||
|
|
||||||
Fix sleep in atomic context warning detected by Smatch static checker
|
|
||||||
analyzer.
|
|
||||||
|
|
||||||
Following the locking pattern for peer_rhash_add lock tbl_mtx_lock mutex
|
|
||||||
always even if sta is not transitioning to another band.
|
|
||||||
This is peer_add function and a more secure locking should not cause
|
|
||||||
performance regression.
|
|
||||||
|
|
||||||
Tested-on: IPQ8074 hw2.0 AHB WLAN.HK.2.5.0.1-01208-QCAHKSWPL_SILICONZ-1
|
|
||||||
|
|
||||||
Fixes: d673cb6fe6c0 ("wifi: ath11k: fix peer addition/deletion error on sta band migration")
|
|
||||||
Reported-by: Dan Carpenter <error27@gmail.com>
|
|
||||||
Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
|
|
||||||
Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
|
|
||||||
Link: https://lore.kernel.org/r/20230209222622.1751-1-ansuelsmth@gmail.com
|
|
||||||
---
|
|
||||||
drivers/net/wireless/ath/ath11k/peer.c | 5 +++--
|
|
||||||
1 file changed, 3 insertions(+), 2 deletions(-)
|
|
||||||
|
|
||||||
--- a/drivers/net/wireless/ath/ath11k/peer.c
|
|
||||||
+++ b/drivers/net/wireless/ath/ath11k/peer.c
|
|
||||||
@@ -382,22 +382,23 @@ int ath11k_peer_create(struct ath11k *ar
|
|
||||||
return -ENOBUFS;
|
|
||||||
}
|
|
||||||
|
|
||||||
+ mutex_lock(&ar->ab->tbl_mtx_lock);
|
|
||||||
spin_lock_bh(&ar->ab->base_lock);
|
|
||||||
peer = ath11k_peer_find_by_addr(ar->ab, param->peer_addr);
|
|
||||||
if (peer) {
|
|
||||||
if (peer->vdev_id == param->vdev_id) {
|
|
||||||
spin_unlock_bh(&ar->ab->base_lock);
|
|
||||||
+ mutex_unlock(&ar->ab->tbl_mtx_lock);
|
|
||||||
return -EINVAL;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Assume sta is transitioning to another band.
|
|
||||||
* Remove here the peer from rhash.
|
|
||||||
*/
|
|
||||||
- mutex_lock(&ar->ab->tbl_mtx_lock);
|
|
||||||
ath11k_peer_rhash_delete(ar->ab, peer);
|
|
||||||
- mutex_unlock(&ar->ab->tbl_mtx_lock);
|
|
||||||
}
|
|
||||||
spin_unlock_bh(&ar->ab->base_lock);
|
|
||||||
+ mutex_unlock(&ar->ab->tbl_mtx_lock);
|
|
||||||
|
|
||||||
ret = ath11k_wmi_send_peer_create_cmd(ar, param);
|
|
||||||
if (ret) {
|
|
@ -32,7 +32,7 @@ Link: https://lore.kernel.org/r/20230201183201.14431-1-len.brown@intel.com
|
|||||||
|
|
||||||
--- a/drivers/net/wireless/ath/ath11k/pci.c
|
--- a/drivers/net/wireless/ath/ath11k/pci.c
|
||||||
+++ b/drivers/net/wireless/ath/ath11k/pci.c
|
+++ b/drivers/net/wireless/ath/ath11k/pci.c
|
||||||
@@ -998,7 +998,7 @@ static __maybe_unused int ath11k_pci_pm_
|
@@ -1004,7 +1004,7 @@ static __maybe_unused int ath11k_pci_pm_
|
||||||
if (ret)
|
if (ret)
|
||||||
ath11k_warn(ab, "failed to resume core: %d\n", ret);
|
ath11k_warn(ab, "failed to resume core: %d\n", ret);
|
||||||
|
|
||||||
|
@ -21,7 +21,7 @@ Link: https://lore.kernel.org/r/1666128501-12364-3-git-send-email-quic_msinada@q
|
|||||||
|
|
||||||
--- a/drivers/net/wireless/ath/ath11k/mac.c
|
--- a/drivers/net/wireless/ath/ath11k/mac.c
|
||||||
+++ b/drivers/net/wireless/ath/ath11k/mac.c
|
+++ b/drivers/net/wireless/ath/ath11k/mac.c
|
||||||
@@ -2699,6 +2699,117 @@ static int ath11k_setup_peer_smps(struct
|
@@ -2696,6 +2696,117 @@ static int ath11k_setup_peer_smps(struct
|
||||||
ath11k_smps_map[smps]);
|
ath11k_smps_map[smps]);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -139,7 +139,7 @@ Link: https://lore.kernel.org/r/1666128501-12364-3-git-send-email-quic_msinada@q
|
|||||||
static void ath11k_bss_assoc(struct ieee80211_hw *hw,
|
static void ath11k_bss_assoc(struct ieee80211_hw *hw,
|
||||||
struct ieee80211_vif *vif,
|
struct ieee80211_vif *vif,
|
||||||
struct ieee80211_bss_conf *bss_conf)
|
struct ieee80211_bss_conf *bss_conf)
|
||||||
@@ -2709,6 +2820,7 @@ static void ath11k_bss_assoc(struct ieee
|
@@ -2706,6 +2817,7 @@ static void ath11k_bss_assoc(struct ieee
|
||||||
struct ieee80211_sta *ap_sta;
|
struct ieee80211_sta *ap_sta;
|
||||||
struct ath11k_peer *peer;
|
struct ath11k_peer *peer;
|
||||||
bool is_auth = false;
|
bool is_auth = false;
|
||||||
@ -147,7 +147,7 @@ Link: https://lore.kernel.org/r/1666128501-12364-3-git-send-email-quic_msinada@q
|
|||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
lockdep_assert_held(&ar->conf_mutex);
|
lockdep_assert_held(&ar->conf_mutex);
|
||||||
@@ -2726,6 +2838,9 @@ static void ath11k_bss_assoc(struct ieee
|
@@ -2723,6 +2835,9 @@ static void ath11k_bss_assoc(struct ieee
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -157,7 +157,7 @@ Link: https://lore.kernel.org/r/1666128501-12364-3-git-send-email-quic_msinada@q
|
|||||||
ath11k_peer_assoc_prepare(ar, vif, ap_sta, &peer_arg, false);
|
ath11k_peer_assoc_prepare(ar, vif, ap_sta, &peer_arg, false);
|
||||||
|
|
||||||
rcu_read_unlock();
|
rcu_read_unlock();
|
||||||
@@ -2753,6 +2868,12 @@ static void ath11k_bss_assoc(struct ieee
|
@@ -2750,6 +2865,12 @@ static void ath11k_bss_assoc(struct ieee
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -170,7 +170,7 @@ Link: https://lore.kernel.org/r/1666128501-12364-3-git-send-email-quic_msinada@q
|
|||||||
WARN_ON(arvif->is_up);
|
WARN_ON(arvif->is_up);
|
||||||
|
|
||||||
arvif->aid = vif->cfg.aid;
|
arvif->aid = vif->cfg.aid;
|
||||||
@@ -3202,6 +3323,8 @@ static void ath11k_mac_op_bss_info_chang
|
@@ -3199,6 +3320,8 @@ static void ath11k_mac_op_bss_info_chang
|
||||||
ether_addr_copy(arvif->bssid, info->bssid);
|
ether_addr_copy(arvif->bssid, info->bssid);
|
||||||
|
|
||||||
if (changed & BSS_CHANGED_BEACON_ENABLED) {
|
if (changed & BSS_CHANGED_BEACON_ENABLED) {
|
||||||
@ -179,7 +179,7 @@ Link: https://lore.kernel.org/r/1666128501-12364-3-git-send-email-quic_msinada@q
|
|||||||
ath11k_control_beaconing(arvif, info);
|
ath11k_control_beaconing(arvif, info);
|
||||||
|
|
||||||
if (arvif->is_up && vif->bss_conf.he_support &&
|
if (arvif->is_up && vif->bss_conf.he_support &&
|
||||||
@@ -5392,6 +5515,10 @@ static int ath11k_mac_copy_he_cap(struct
|
@@ -5389,6 +5512,10 @@ static int ath11k_mac_copy_he_cap(struct
|
||||||
|
|
||||||
he_cap_elem->mac_cap_info[1] &=
|
he_cap_elem->mac_cap_info[1] &=
|
||||||
IEEE80211_HE_MAC_CAP1_TF_MAC_PAD_DUR_MASK;
|
IEEE80211_HE_MAC_CAP1_TF_MAC_PAD_DUR_MASK;
|
||||||
@ -190,7 +190,7 @@ Link: https://lore.kernel.org/r/1666128501-12364-3-git-send-email-quic_msinada@q
|
|||||||
|
|
||||||
he_cap_elem->phy_cap_info[5] &=
|
he_cap_elem->phy_cap_info[5] &=
|
||||||
~IEEE80211_HE_PHY_CAP5_BEAMFORMEE_NUM_SND_DIM_UNDER_80MHZ_MASK;
|
~IEEE80211_HE_PHY_CAP5_BEAMFORMEE_NUM_SND_DIM_UNDER_80MHZ_MASK;
|
||||||
@@ -6026,69 +6153,6 @@ ath11k_mac_setup_vdev_create_params(stru
|
@@ -6023,69 +6150,6 @@ ath11k_mac_setup_vdev_create_params(stru
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -260,7 +260,7 @@ Link: https://lore.kernel.org/r/1666128501-12364-3-git-send-email-quic_msinada@q
|
|||||||
static void ath11k_mac_op_update_vif_offload(struct ieee80211_hw *hw,
|
static void ath11k_mac_op_update_vif_offload(struct ieee80211_hw *hw,
|
||||||
struct ieee80211_vif *vif)
|
struct ieee80211_vif *vif)
|
||||||
{
|
{
|
||||||
@@ -6757,7 +6821,6 @@ ath11k_mac_vdev_start_restart(struct ath
|
@@ -6754,7 +6818,6 @@ ath11k_mac_vdev_start_restart(struct ath
|
||||||
struct ath11k_base *ab = ar->ab;
|
struct ath11k_base *ab = ar->ab;
|
||||||
struct wmi_vdev_start_req_arg arg = {};
|
struct wmi_vdev_start_req_arg arg = {};
|
||||||
const struct cfg80211_chan_def *chandef = &ctx->def;
|
const struct cfg80211_chan_def *chandef = &ctx->def;
|
||||||
@ -268,7 +268,7 @@ Link: https://lore.kernel.org/r/1666128501-12364-3-git-send-email-quic_msinada@q
|
|||||||
int ret = 0;
|
int ret = 0;
|
||||||
|
|
||||||
lockdep_assert_held(&ar->conf_mutex);
|
lockdep_assert_held(&ar->conf_mutex);
|
||||||
@@ -6798,15 +6861,6 @@ ath11k_mac_vdev_start_restart(struct ath
|
@@ -6795,15 +6858,6 @@ ath11k_mac_vdev_start_restart(struct ath
|
||||||
spin_lock_bh(&ab->base_lock);
|
spin_lock_bh(&ab->base_lock);
|
||||||
arg.regdomain = ar->ab->dfs_region;
|
arg.regdomain = ar->ab->dfs_region;
|
||||||
spin_unlock_bh(&ab->base_lock);
|
spin_unlock_bh(&ab->base_lock);
|
||||||
|
@ -17,7 +17,7 @@ Link: https://lore.kernel.org/r/1666128501-12364-4-git-send-email-quic_msinada@q
|
|||||||
|
|
||||||
--- a/drivers/net/wireless/ath/ath11k/mac.c
|
--- a/drivers/net/wireless/ath/ath11k/mac.c
|
||||||
+++ b/drivers/net/wireless/ath/ath11k/mac.c
|
+++ b/drivers/net/wireless/ath/ath11k/mac.c
|
||||||
@@ -5483,6 +5483,27 @@ static __le16 ath11k_mac_setup_he_6ghz_c
|
@@ -5480,6 +5480,27 @@ static __le16 ath11k_mac_setup_he_6ghz_c
|
||||||
return cpu_to_le16(bcap->he_6ghz_capa);
|
return cpu_to_le16(bcap->he_6ghz_capa);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -45,7 +45,7 @@ Link: https://lore.kernel.org/r/1666128501-12364-4-git-send-email-quic_msinada@q
|
|||||||
static int ath11k_mac_copy_he_cap(struct ath11k *ar,
|
static int ath11k_mac_copy_he_cap(struct ath11k *ar,
|
||||||
struct ath11k_pdev_cap *cap,
|
struct ath11k_pdev_cap *cap,
|
||||||
struct ieee80211_sband_iftype_data *data,
|
struct ieee80211_sband_iftype_data *data,
|
||||||
@@ -5544,18 +5565,7 @@ static int ath11k_mac_copy_he_cap(struct
|
@@ -5541,18 +5562,7 @@ static int ath11k_mac_copy_he_cap(struct
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -18,7 +18,7 @@ Link: https://lore.kernel.org/r/1666128501-12364-5-git-send-email-quic_msinada@q
|
|||||||
|
|
||||||
--- a/drivers/net/wireless/ath/ath11k/mac.c
|
--- a/drivers/net/wireless/ath/ath11k/mac.c
|
||||||
+++ b/drivers/net/wireless/ath/ath11k/mac.c
|
+++ b/drivers/net/wireless/ath/ath11k/mac.c
|
||||||
@@ -5488,20 +5488,36 @@ static void ath11k_mac_set_hemcsmap(stru
|
@@ -5485,20 +5485,36 @@ static void ath11k_mac_set_hemcsmap(stru
|
||||||
struct ieee80211_sta_he_cap *he_cap,
|
struct ieee80211_sta_he_cap *he_cap,
|
||||||
int band)
|
int band)
|
||||||
{
|
{
|
||||||
|
@ -36,7 +36,7 @@ Link: https://lore.kernel.org/r/20221219053844.4084486-1-quic_mkenna@quicinc.com
|
|||||||
static int ath11k_hw_mac_id_to_pdev_id_ipq8074(struct ath11k_hw_params *hw,
|
static int ath11k_hw_mac_id_to_pdev_id_ipq8074(struct ath11k_hw_params *hw,
|
||||||
--- a/drivers/net/wireless/ath/ath11k/mac.c
|
--- a/drivers/net/wireless/ath/ath11k/mac.c
|
||||||
+++ b/drivers/net/wireless/ath/ath11k/mac.c
|
+++ b/drivers/net/wireless/ath/ath11k/mac.c
|
||||||
@@ -9174,6 +9174,11 @@ static int __ath11k_mac_register(struct
|
@@ -9179,6 +9179,11 @@ static int __ath11k_mac_register(struct
|
||||||
goto err_free_if_combs;
|
goto err_free_if_combs;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -568,7 +568,7 @@ Link: https://lore.kernel.org/r/20230110121024.14051-3-quic_adisi@quicinc.com
|
|||||||
kfree(reg_info);
|
kfree(reg_info);
|
||||||
}
|
}
|
||||||
return ret;
|
return ret;
|
||||||
@@ -8054,7 +8437,10 @@ static void ath11k_wmi_tlv_op_rx(struct
|
@@ -8070,7 +8453,10 @@ static void ath11k_wmi_tlv_op_rx(struct
|
||||||
ath11k_service_ready_ext2_event(ab, skb);
|
ath11k_service_ready_ext2_event(ab, skb);
|
||||||
break;
|
break;
|
||||||
case WMI_REG_CHAN_LIST_CC_EVENTID:
|
case WMI_REG_CHAN_LIST_CC_EVENTID:
|
||||||
|
@ -1,79 +0,0 @@
|
|||||||
From 5a78ac33e3cb8822da64dd1af196e83664b332b0 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Aditya Kumar Singh <quic_adisi@quicinc.com>
|
|
||||||
Date: Thu, 9 Mar 2023 15:23:08 +0530
|
|
||||||
Subject: [PATCH] wifi: ath11k: fix deinitialization of firmware resources
|
|
||||||
|
|
||||||
Currently, in ath11k_ahb_fw_resources_init(), iommu domain
|
|
||||||
mapping is done only for the chipsets having fixed firmware
|
|
||||||
memory. Also, for such chipsets, mapping is done only if it
|
|
||||||
does not have TrustZone support.
|
|
||||||
|
|
||||||
During deinitialization, only if TrustZone support is not there,
|
|
||||||
iommu is unmapped back. However, for non fixed firmware memory
|
|
||||||
chipsets, TrustZone support is not there and this makes the
|
|
||||||
condition check to true and it tries to unmap the memory which
|
|
||||||
was not mapped during initialization.
|
|
||||||
|
|
||||||
This leads to the following trace -
|
|
||||||
|
|
||||||
[ 83.198790] Unable to handle kernel NULL pointer dereference at virtual address 0000000000000008
|
|
||||||
[ 83.259537] Modules linked in: ath11k_ahb ath11k qmi_helpers
|
|
||||||
.. snip ..
|
|
||||||
[ 83.280286] pstate: 20000005 (nzCv daif -PAN -UAO -TCO -DIT -SSBS BTYPE=--)
|
|
||||||
[ 83.287228] pc : __iommu_unmap+0x30/0x140
|
|
||||||
[ 83.293907] lr : iommu_unmap+0x5c/0xa4
|
|
||||||
[ 83.298072] sp : ffff80000b3abad0
|
|
||||||
.. snip ..
|
|
||||||
[ 83.369175] Call trace:
|
|
||||||
[ 83.376282] __iommu_unmap+0x30/0x140
|
|
||||||
[ 83.378541] iommu_unmap+0x5c/0xa4
|
|
||||||
[ 83.382360] ath11k_ahb_fw_resource_deinit.part.12+0x2c/0xac [ath11k_ahb]
|
|
||||||
[ 83.385666] ath11k_ahb_free_resources+0x140/0x17c [ath11k_ahb]
|
|
||||||
[ 83.392521] ath11k_ahb_shutdown+0x34/0x40 [ath11k_ahb]
|
|
||||||
[ 83.398248] platform_shutdown+0x20/0x2c
|
|
||||||
[ 83.403455] device_shutdown+0x16c/0x1c4
|
|
||||||
[ 83.407621] kernel_restart_prepare+0x34/0x3c
|
|
||||||
[ 83.411529] kernel_restart+0x14/0x74
|
|
||||||
[ 83.415781] __do_sys_reboot+0x1c4/0x22c
|
|
||||||
[ 83.419427] __arm64_sys_reboot+0x1c/0x24
|
|
||||||
[ 83.423420] invoke_syscall+0x44/0xfc
|
|
||||||
[ 83.427326] el0_svc_common.constprop.3+0xac/0xe8
|
|
||||||
[ 83.430974] do_el0_svc+0xa0/0xa8
|
|
||||||
[ 83.435659] el0_svc+0x1c/0x44
|
|
||||||
[ 83.438957] el0t_64_sync_handler+0x60/0x144
|
|
||||||
[ 83.441910] el0t_64_sync+0x15c/0x160
|
|
||||||
[ 83.446343] Code: aa0103f4 f9400001 f90027a1 d2800001 (f94006a0)
|
|
||||||
[ 83.449903] ---[ end trace 0000000000000000 ]---
|
|
||||||
|
|
||||||
This can be reproduced by probing an AHB chipset which is not
|
|
||||||
having a fixed memory region. During reboot (or rmmod) trace
|
|
||||||
can be seen.
|
|
||||||
|
|
||||||
Fix this issue by adding a condition check on firmware fixed memory
|
|
||||||
hw_param as done in the counter initialization function.
|
|
||||||
|
|
||||||
Tested-on: IPQ8074 hw2.0 AHB WLAN.HK.2.7.0.1-01744-QCAHKSWPL_SILICONZ-1
|
|
||||||
|
|
||||||
Fixes: f9eec4947add ("ath11k: Add support for targets without trustzone")
|
|
||||||
Signed-off-by: Aditya Kumar Singh <quic_adisi@quicinc.com>
|
|
||||||
Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
|
|
||||||
Link: https://lore.kernel.org/r/20230309095308.24937-1-quic_adisi@quicinc.com
|
|
||||||
---
|
|
||||||
drivers/net/wireless/ath/ath11k/ahb.c | 6 ++++++
|
|
||||||
1 file changed, 6 insertions(+)
|
|
||||||
|
|
||||||
--- a/drivers/net/wireless/ath/ath11k/ahb.c
|
|
||||||
+++ b/drivers/net/wireless/ath/ath11k/ahb.c
|
|
||||||
@@ -1078,6 +1078,12 @@ static int ath11k_ahb_fw_resource_deinit
|
|
||||||
struct iommu_domain *iommu;
|
|
||||||
size_t unmapped_size;
|
|
||||||
|
|
||||||
+ /* Chipsets not requiring MSA would have not initialized
|
|
||||||
+ * MSA resources, return success in such cases.
|
|
||||||
+ */
|
|
||||||
+ if (!ab->hw_params.fixed_fw_mem)
|
|
||||||
+ return 0;
|
|
||||||
+
|
|
||||||
if (ab_ahb->fw.use_tz)
|
|
||||||
return 0;
|
|
||||||
|
|
@ -65,7 +65,7 @@ Link: https://lore.kernel.org/r/20230309164434.32660-1-quic_hprem@quicinc.com
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -3029,39 +3006,51 @@ static int ath11k_dp_rx_reap_mon_status_
|
@@ -3038,39 +3015,51 @@ static int ath11k_dp_rx_reap_mon_status_
|
||||||
|
|
||||||
spin_lock_bh(&rx_ring->idr_lock);
|
spin_lock_bh(&rx_ring->idr_lock);
|
||||||
skb = idr_find(&rx_ring->bufs_idr, buf_id);
|
skb = idr_find(&rx_ring->bufs_idr, buf_id);
|
||||||
|
@ -47,7 +47,7 @@ Link: https://lore.kernel.org/r/20230323060913.10097-1-quic_mpubbise@quicinc.com
|
|||||||
|
|
||||||
--- a/drivers/net/wireless/ath/ath11k/mac.c
|
--- a/drivers/net/wireless/ath/ath11k/mac.c
|
||||||
+++ b/drivers/net/wireless/ath/ath11k/mac.c
|
+++ b/drivers/net/wireless/ath/ath11k/mac.c
|
||||||
@@ -3819,8 +3819,29 @@ static int ath11k_mac_op_hw_scan(struct
|
@@ -3816,8 +3816,29 @@ static int ath11k_mac_op_hw_scan(struct
|
||||||
goto exit;
|
goto exit;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -97,7 +97,7 @@ Link: https://lore.kernel.org/r/20230317072034.8217-1-quic_gjothira@quicinc.com
|
|||||||
struct ath11k_hw_ops {
|
struct ath11k_hw_ops {
|
||||||
--- a/drivers/net/wireless/ath/ath11k/mac.c
|
--- a/drivers/net/wireless/ath/ath11k/mac.c
|
||||||
+++ b/drivers/net/wireless/ath/ath11k/mac.c
|
+++ b/drivers/net/wireless/ath/ath11k/mac.c
|
||||||
@@ -3538,7 +3538,7 @@ static void ath11k_mac_op_bss_info_chang
|
@@ -3535,7 +3535,7 @@ static void ath11k_mac_op_bss_info_chang
|
||||||
|
|
||||||
if (changed & BSS_CHANGED_FTM_RESPONDER &&
|
if (changed & BSS_CHANGED_FTM_RESPONDER &&
|
||||||
arvif->ftm_responder != info->ftm_responder &&
|
arvif->ftm_responder != info->ftm_responder &&
|
||||||
@ -106,7 +106,7 @@ Link: https://lore.kernel.org/r/20230317072034.8217-1-quic_gjothira@quicinc.com
|
|||||||
(vif->type == NL80211_IFTYPE_AP ||
|
(vif->type == NL80211_IFTYPE_AP ||
|
||||||
vif->type == NL80211_IFTYPE_MESH_POINT)) {
|
vif->type == NL80211_IFTYPE_MESH_POINT)) {
|
||||||
arvif->ftm_responder = info->ftm_responder;
|
arvif->ftm_responder = info->ftm_responder;
|
||||||
@@ -9234,7 +9234,7 @@ static int __ath11k_mac_register(struct
|
@@ -9239,7 +9239,7 @@ static int __ath11k_mac_register(struct
|
||||||
wiphy_ext_feature_set(ar->hw->wiphy,
|
wiphy_ext_feature_set(ar->hw->wiphy,
|
||||||
NL80211_EXT_FEATURE_SET_SCAN_DWELL);
|
NL80211_EXT_FEATURE_SET_SCAN_DWELL);
|
||||||
|
|
||||||
|
@ -1,43 +0,0 @@
|
|||||||
From 756a7f90878f0866fd2fe167ef37e90b47326b96 Mon Sep 17 00:00:00 2001
|
|
||||||
From: P Praneesh <quic_ppranees@quicinc.com>
|
|
||||||
Date: Fri, 24 Mar 2023 16:57:01 +0200
|
|
||||||
Subject: [PATCH] wifi: ath11k: fix writing to unintended memory region
|
|
||||||
|
|
||||||
While initializing spectral, the magic value is getting written to the
|
|
||||||
invalid memory address leading to random boot-up crash. This occurs
|
|
||||||
due to the incorrect index increment in ath11k_dbring_fill_magic_value
|
|
||||||
function. Fix it by replacing the existing logic with memset32 to ensure
|
|
||||||
there is no invalid memory access.
|
|
||||||
|
|
||||||
Tested-on: QCN9074 hw1.0 PCI WLAN.HK.2.4.0.1-01838-QCAHKSWPL_SILICONZ-1
|
|
||||||
|
|
||||||
Fixes: d3d358efc553 ("ath11k: add spectral/CFR buffer validation support")
|
|
||||||
Signed-off-by: P Praneesh <quic_ppranees@quicinc.com>
|
|
||||||
Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
|
|
||||||
Link: https://lore.kernel.org/r/20230321052900.16895-1-quic_ppranees@quicinc.com
|
|
||||||
---
|
|
||||||
drivers/net/wireless/ath/ath11k/dbring.c | 12 ++++++------
|
|
||||||
1 file changed, 6 insertions(+), 6 deletions(-)
|
|
||||||
|
|
||||||
--- a/drivers/net/wireless/ath/ath11k/dbring.c
|
|
||||||
+++ b/drivers/net/wireless/ath/ath11k/dbring.c
|
|
||||||
@@ -26,13 +26,13 @@ int ath11k_dbring_validate_buffer(struct
|
|
||||||
static void ath11k_dbring_fill_magic_value(struct ath11k *ar,
|
|
||||||
void *buffer, u32 size)
|
|
||||||
{
|
|
||||||
- u32 *temp;
|
|
||||||
- int idx;
|
|
||||||
+ /* memset32 function fills buffer payload with the ATH11K_DB_MAGIC_VALUE
|
|
||||||
+ * and the variable size is expected to be the number of u32 values
|
|
||||||
+ * to be stored, not the number of bytes.
|
|
||||||
+ */
|
|
||||||
+ size = size / sizeof(u32);
|
|
||||||
|
|
||||||
- size = size >> 2;
|
|
||||||
-
|
|
||||||
- for (idx = 0, temp = buffer; idx < size; idx++, temp++)
|
|
||||||
- *temp++ = ATH11K_DB_MAGIC_VALUE;
|
|
||||||
+ memset32(buffer, ATH11K_DB_MAGIC_VALUE, size);
|
|
||||||
}
|
|
||||||
|
|
||||||
static int ath11k_dbring_bufs_replenish(struct ath11k *ar,
|
|
@ -30,7 +30,7 @@ Link: https://lore.kernel.org/r/20230315161817.29627-1-quic_mpubbise@quicinc.com
|
|||||||
|
|
||||||
--- a/drivers/net/wireless/ath/ath11k/mac.c
|
--- a/drivers/net/wireless/ath/ath11k/mac.c
|
||||||
+++ b/drivers/net/wireless/ath/ath11k/mac.c
|
+++ b/drivers/net/wireless/ath/ath11k/mac.c
|
||||||
@@ -3755,6 +3755,18 @@ static int ath11k_mac_op_hw_scan(struct
|
@@ -3752,6 +3752,18 @@ static int ath11k_mac_op_hw_scan(struct
|
||||||
int i;
|
int i;
|
||||||
u32 scan_timeout;
|
u32 scan_timeout;
|
||||||
|
|
||||||
|
@ -30,7 +30,7 @@ Link: https://lore.kernel.org/r/20230323112613.7550-1-cai.huoqing@linux.dev
|
|||||||
|
|
||||||
--- a/drivers/net/wireless/ath/ath11k/pci.c
|
--- a/drivers/net/wireless/ath/ath11k/pci.c
|
||||||
+++ b/drivers/net/wireless/ath/ath11k/pci.c
|
+++ b/drivers/net/wireless/ath/ath11k/pci.c
|
||||||
@@ -540,7 +540,7 @@ static int ath11k_pci_claim(struct ath11
|
@@ -544,7 +544,7 @@ static int ath11k_pci_claim(struct ath11
|
||||||
if (!ab->mem) {
|
if (!ab->mem) {
|
||||||
ath11k_err(ab, "failed to map pci bar %d\n", ATH11K_PCI_BAR_NUM);
|
ath11k_err(ab, "failed to map pci bar %d\n", ATH11K_PCI_BAR_NUM);
|
||||||
ret = -EIO;
|
ret = -EIO;
|
||||||
@ -39,7 +39,7 @@ Link: https://lore.kernel.org/r/20230323112613.7550-1-cai.huoqing@linux.dev
|
|||||||
}
|
}
|
||||||
|
|
||||||
ab->mem_ce = ab->mem;
|
ab->mem_ce = ab->mem;
|
||||||
@@ -548,8 +548,6 @@ static int ath11k_pci_claim(struct ath11
|
@@ -552,8 +552,6 @@ static int ath11k_pci_claim(struct ath11
|
||||||
ath11k_dbg(ab, ATH11K_DBG_BOOT, "boot pci_mem 0x%pK\n", ab->mem);
|
ath11k_dbg(ab, ATH11K_DBG_BOOT, "boot pci_mem 0x%pK\n", ab->mem);
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
@ -48,7 +48,7 @@ Link: https://lore.kernel.org/r/20230323112613.7550-1-cai.huoqing@linux.dev
|
|||||||
release_region:
|
release_region:
|
||||||
pci_release_region(pdev, ATH11K_PCI_BAR_NUM);
|
pci_release_region(pdev, ATH11K_PCI_BAR_NUM);
|
||||||
disable_device:
|
disable_device:
|
||||||
@@ -565,7 +563,6 @@ static void ath11k_pci_free_region(struc
|
@@ -569,7 +567,6 @@ static void ath11k_pci_free_region(struc
|
||||||
|
|
||||||
pci_iounmap(pci_dev, ab->mem);
|
pci_iounmap(pci_dev, ab->mem);
|
||||||
ab->mem = NULL;
|
ab->mem = NULL;
|
||||||
|
@ -22,7 +22,7 @@ Link: https://lore.kernel.org/r/20230328071150.29645-1-quic_tamizhr@quicinc.com
|
|||||||
|
|
||||||
--- a/drivers/net/wireless/ath/ath11k/mac.c
|
--- a/drivers/net/wireless/ath/ath11k/mac.c
|
||||||
+++ b/drivers/net/wireless/ath/ath11k/mac.c
|
+++ b/drivers/net/wireless/ath/ath11k/mac.c
|
||||||
@@ -6685,6 +6685,11 @@ static void ath11k_mac_op_remove_interfa
|
@@ -6682,6 +6682,11 @@ static void ath11k_mac_op_remove_interfa
|
||||||
ath11k_dbg(ab, ATH11K_DBG_MAC, "mac remove interface (vdev %d)\n",
|
ath11k_dbg(ab, ATH11K_DBG_MAC, "mac remove interface (vdev %d)\n",
|
||||||
arvif->vdev_id);
|
arvif->vdev_id);
|
||||||
|
|
||||||
|
@ -21,7 +21,7 @@ Link: https://lore.kernel.org/r/20230330143718.19511-1-tiwai@suse.de
|
|||||||
|
|
||||||
--- a/drivers/net/wireless/ath/ath11k/pci.c
|
--- a/drivers/net/wireless/ath/ath11k/pci.c
|
||||||
+++ b/drivers/net/wireless/ath/ath11k/pci.c
|
+++ b/drivers/net/wireless/ath/ath11k/pci.c
|
||||||
@@ -1036,7 +1036,8 @@ module_exit(ath11k_pci_exit);
|
@@ -1042,7 +1042,8 @@ module_exit(ath11k_pci_exit);
|
||||||
MODULE_DESCRIPTION("Driver support for Qualcomm Technologies 802.11ax WLAN PCIe devices");
|
MODULE_DESCRIPTION("Driver support for Qualcomm Technologies 802.11ax WLAN PCIe devices");
|
||||||
MODULE_LICENSE("Dual BSD/GPL");
|
MODULE_LICENSE("Dual BSD/GPL");
|
||||||
|
|
||||||
|
@ -19,7 +19,7 @@ Link: https://lore.kernel.org/r/20230405090425.1351-1-kvalo@kernel.org
|
|||||||
|
|
||||||
--- a/drivers/net/wireless/ath/ath11k/dp_rx.c
|
--- a/drivers/net/wireless/ath/ath11k/dp_rx.c
|
||||||
+++ b/drivers/net/wireless/ath/ath11k/dp_rx.c
|
+++ b/drivers/net/wireless/ath/ath11k/dp_rx.c
|
||||||
@@ -3106,8 +3106,11 @@ int ath11k_peer_rx_frag_setup(struct ath
|
@@ -3115,8 +3115,11 @@ int ath11k_peer_rx_frag_setup(struct ath
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
tfm = crypto_alloc_shash("michael_mic", 0, 0);
|
tfm = crypto_alloc_shash("michael_mic", 0, 0);
|
||||||
|
@ -1,104 +0,0 @@
|
|||||||
From a06bfb3c9f69f303692cdae87bc0899d2ae8b2a6 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Harshitha Prem <quic_hprem@quicinc.com>
|
|
||||||
Date: Tue, 4 Apr 2023 00:11:54 +0530
|
|
||||||
Subject: [PATCH] wifi: ath11k: Ignore frags from uninitialized peer in dp.
|
|
||||||
|
|
||||||
When max virtual ap interfaces are configured in all the bands with
|
|
||||||
ACS and hostapd restart is done every 60s, a crash is observed at
|
|
||||||
random times.
|
|
||||||
In this certain scenario, a fragmented packet is received for
|
|
||||||
self peer, for which rx_tid and rx_frags are not initialized in
|
|
||||||
datapath. While handling this fragment, crash is observed as the
|
|
||||||
rx_frag list is uninitialised and when we walk in
|
|
||||||
ath11k_dp_rx_h_sort_frags, skb null leads to exception.
|
|
||||||
|
|
||||||
To address this, before processing received fragments we check
|
|
||||||
dp_setup_done flag is set to ensure that peer has completed its
|
|
||||||
dp peer setup for fragment queue, else ignore processing the
|
|
||||||
fragments.
|
|
||||||
|
|
||||||
Call trace:
|
|
||||||
ath11k_dp_process_rx_err+0x550/0x1084 [ath11k]
|
|
||||||
ath11k_dp_service_srng+0x70/0x370 [ath11k]
|
|
||||||
0xffffffc009693a04
|
|
||||||
__napi_poll+0x30/0xa4
|
|
||||||
net_rx_action+0x118/0x270
|
|
||||||
__do_softirq+0x10c/0x244
|
|
||||||
irq_exit+0x64/0xb4
|
|
||||||
__handle_domain_irq+0x88/0xac
|
|
||||||
gic_handle_irq+0x74/0xbc
|
|
||||||
el1_irq+0xf0/0x1c0
|
|
||||||
arch_cpu_idle+0x10/0x18
|
|
||||||
do_idle+0x104/0x248
|
|
||||||
cpu_startup_entry+0x20/0x64
|
|
||||||
rest_init+0xd0/0xdc
|
|
||||||
arch_call_rest_init+0xc/0x14
|
|
||||||
start_kernel+0x480/0x4b8
|
|
||||||
Code: f9400281 f94066a2 91405021 b94a0023 (f9406401)
|
|
||||||
|
|
||||||
Tested-on: IPQ8074 hw2.0 AHB WLAN.HK.2.7.0.1-01744-QCAHKSWPL_SILICONZ-1
|
|
||||||
|
|
||||||
Signed-off-by: Harshitha Prem <quic_hprem@quicinc.com>
|
|
||||||
Signed-off-by: Nagarajan Maran <quic_nmaran@quicinc.com>
|
|
||||||
Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
|
|
||||||
Link: https://lore.kernel.org/r/20230403184155.8670-2-quic_nmaran@quicinc.com
|
|
||||||
---
|
|
||||||
drivers/net/wireless/ath/ath11k/dp.c | 4 +++-
|
|
||||||
drivers/net/wireless/ath/ath11k/dp_rx.c | 8 ++++++++
|
|
||||||
drivers/net/wireless/ath/ath11k/peer.h | 1 +
|
|
||||||
3 files changed, 12 insertions(+), 1 deletion(-)
|
|
||||||
|
|
||||||
--- a/drivers/net/wireless/ath/ath11k/dp.c
|
|
||||||
+++ b/drivers/net/wireless/ath/ath11k/dp.c
|
|
||||||
@@ -36,6 +36,7 @@ void ath11k_dp_peer_cleanup(struct ath11
|
|
||||||
}
|
|
||||||
|
|
||||||
ath11k_peer_rx_tid_cleanup(ar, peer);
|
|
||||||
+ peer->dp_setup_done = false;
|
|
||||||
crypto_free_shash(peer->tfm_mmic);
|
|
||||||
spin_unlock_bh(&ab->base_lock);
|
|
||||||
}
|
|
||||||
@@ -72,7 +73,8 @@ int ath11k_dp_peer_setup(struct ath11k *
|
|
||||||
ret = ath11k_peer_rx_frag_setup(ar, addr, vdev_id);
|
|
||||||
if (ret) {
|
|
||||||
ath11k_warn(ab, "failed to setup rx defrag context\n");
|
|
||||||
- return ret;
|
|
||||||
+ tid--;
|
|
||||||
+ goto peer_clean;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* TODO: Setup other peer specific resource used in data path */
|
|
||||||
--- a/drivers/net/wireless/ath/ath11k/dp_rx.c
|
|
||||||
+++ b/drivers/net/wireless/ath/ath11k/dp_rx.c
|
|
||||||
@@ -3130,6 +3130,7 @@ int ath11k_peer_rx_frag_setup(struct ath
|
|
||||||
}
|
|
||||||
|
|
||||||
peer->tfm_mmic = tfm;
|
|
||||||
+ peer->dp_setup_done = true;
|
|
||||||
spin_unlock_bh(&ab->base_lock);
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
@@ -3575,6 +3576,13 @@ static int ath11k_dp_rx_frag_h_mpdu(stru
|
|
||||||
ret = -ENOENT;
|
|
||||||
goto out_unlock;
|
|
||||||
}
|
|
||||||
+ if (!peer->dp_setup_done) {
|
|
||||||
+ ath11k_warn(ab, "The peer %pM [%d] has uninitialized datapath\n",
|
|
||||||
+ peer->addr, peer_id);
|
|
||||||
+ ret = -ENOENT;
|
|
||||||
+ goto out_unlock;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
rx_tid = &peer->rx_tid[tid];
|
|
||||||
|
|
||||||
if ((!skb_queue_empty(&rx_tid->rx_frags) && seqno != rx_tid->cur_sn) ||
|
|
||||||
--- a/drivers/net/wireless/ath/ath11k/peer.h
|
|
||||||
+++ b/drivers/net/wireless/ath/ath11k/peer.h
|
|
||||||
@@ -35,6 +35,7 @@ struct ath11k_peer {
|
|
||||||
u16 sec_type;
|
|
||||||
u16 sec_type_grp;
|
|
||||||
bool is_authorized;
|
|
||||||
+ bool dp_setup_done;
|
|
||||||
};
|
|
||||||
|
|
||||||
void ath11k_peer_unmap_event(struct ath11k_base *ab, u16 peer_id);
|
|
@ -18,7 +18,7 @@ Link: https://lore.kernel.org/r/20230403184155.8670-3-quic_nmaran@quicinc.com
|
|||||||
|
|
||||||
--- a/drivers/net/wireless/ath/ath11k/dp_rx.c
|
--- a/drivers/net/wireless/ath/ath11k/dp_rx.c
|
||||||
+++ b/drivers/net/wireless/ath/ath11k/dp_rx.c
|
+++ b/drivers/net/wireless/ath/ath11k/dp_rx.c
|
||||||
@@ -3598,7 +3598,7 @@ static int ath11k_dp_rx_frag_h_mpdu(stru
|
@@ -3607,7 +3607,7 @@ static int ath11k_dp_rx_frag_h_mpdu(stru
|
||||||
goto out_unlock;
|
goto out_unlock;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,119 +0,0 @@
|
|||||||
From 6257c702264c44d74c6b71f0c62a7665da2dc356 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Pradeep Kumar Chitrapu <quic_pradeepc@quicinc.com>
|
|
||||||
Date: Mon, 17 Apr 2023 13:35:02 +0300
|
|
||||||
Subject: [PATCH] wifi: ath11k: fix tx status reporting in encap offload mode
|
|
||||||
|
|
||||||
ieee80211_tx_status() treats packets in 802.11 frame format and
|
|
||||||
tries to extract sta address from packet header. When tx encap
|
|
||||||
offload is enabled, this becomes invalid operation. Hence, switch
|
|
||||||
to using ieee80211_tx_status_ext() after filling in station
|
|
||||||
address for handling both 802.11 and 802.3 frames.
|
|
||||||
|
|
||||||
Tested-on: QCN9074 hw1.0 PCI WLAN.HK.2.7.0.1-01744-QCAHKSWPL_SILICONZ-1
|
|
||||||
|
|
||||||
Signed-off-by: Pradeep Kumar Chitrapu <quic_pradeepc@quicinc.com>
|
|
||||||
Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
|
|
||||||
Link: https://lore.kernel.org/r/20230403195738.25367-2-quic_pradeepc@quicinc.com
|
|
||||||
---
|
|
||||||
drivers/net/wireless/ath/ath11k/dp.h | 4 +++
|
|
||||||
drivers/net/wireless/ath/ath11k/dp_tx.c | 33 ++++++++++++++++++++++++-
|
|
||||||
drivers/net/wireless/ath/ath11k/dp_tx.h | 1 +
|
|
||||||
3 files changed, 37 insertions(+), 1 deletion(-)
|
|
||||||
|
|
||||||
--- a/drivers/net/wireless/ath/ath11k/dp.h
|
|
||||||
+++ b/drivers/net/wireless/ath/ath11k/dp.h
|
|
||||||
@@ -303,12 +303,16 @@ struct ath11k_dp {
|
|
||||||
|
|
||||||
#define HTT_TX_WBM_COMP_STATUS_OFFSET 8
|
|
||||||
|
|
||||||
+#define HTT_INVALID_PEER_ID 0xffff
|
|
||||||
+
|
|
||||||
/* HTT tx completion is overlaid in wbm_release_ring */
|
|
||||||
#define HTT_TX_WBM_COMP_INFO0_STATUS GENMASK(12, 9)
|
|
||||||
#define HTT_TX_WBM_COMP_INFO0_REINJECT_REASON GENMASK(16, 13)
|
|
||||||
#define HTT_TX_WBM_COMP_INFO0_REINJECT_REASON GENMASK(16, 13)
|
|
||||||
|
|
||||||
#define HTT_TX_WBM_COMP_INFO1_ACK_RSSI GENMASK(31, 24)
|
|
||||||
+#define HTT_TX_WBM_COMP_INFO2_SW_PEER_ID GENMASK(15, 0)
|
|
||||||
+#define HTT_TX_WBM_COMP_INFO2_VALID BIT(21)
|
|
||||||
|
|
||||||
struct htt_tx_wbm_completion {
|
|
||||||
u32 info0;
|
|
||||||
--- a/drivers/net/wireless/ath/ath11k/dp_tx.c
|
|
||||||
+++ b/drivers/net/wireless/ath/ath11k/dp_tx.c
|
|
||||||
@@ -316,10 +316,12 @@ ath11k_dp_tx_htt_tx_complete_buf(struct
|
|
||||||
struct dp_tx_ring *tx_ring,
|
|
||||||
struct ath11k_dp_htt_wbm_tx_status *ts)
|
|
||||||
{
|
|
||||||
+ struct ieee80211_tx_status status = { 0 };
|
|
||||||
struct sk_buff *msdu;
|
|
||||||
struct ieee80211_tx_info *info;
|
|
||||||
struct ath11k_skb_cb *skb_cb;
|
|
||||||
struct ath11k *ar;
|
|
||||||
+ struct ath11k_peer *peer;
|
|
||||||
|
|
||||||
spin_lock(&tx_ring->tx_idr_lock);
|
|
||||||
msdu = idr_remove(&tx_ring->txbuf_idr, ts->msdu_id);
|
|
||||||
@@ -341,6 +343,11 @@ ath11k_dp_tx_htt_tx_complete_buf(struct
|
|
||||||
|
|
||||||
dma_unmap_single(ab->dev, skb_cb->paddr, msdu->len, DMA_TO_DEVICE);
|
|
||||||
|
|
||||||
+ if (!skb_cb->vif) {
|
|
||||||
+ dev_kfree_skb_any(msdu);
|
|
||||||
+ return;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
memset(&info->status, 0, sizeof(info->status));
|
|
||||||
|
|
||||||
if (ts->acked) {
|
|
||||||
@@ -355,7 +362,23 @@ ath11k_dp_tx_htt_tx_complete_buf(struct
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
- ieee80211_tx_status(ar->hw, msdu);
|
|
||||||
+ spin_lock_bh(&ab->base_lock);
|
|
||||||
+ peer = ath11k_peer_find_by_id(ab, ts->peer_id);
|
|
||||||
+ if (!peer || !peer->sta) {
|
|
||||||
+ ath11k_dbg(ab, ATH11K_DBG_DATA,
|
|
||||||
+ "dp_tx: failed to find the peer with peer_id %d\n",
|
|
||||||
+ ts->peer_id);
|
|
||||||
+ spin_unlock_bh(&ab->base_lock);
|
|
||||||
+ dev_kfree_skb_any(msdu);
|
|
||||||
+ return;
|
|
||||||
+ }
|
|
||||||
+ spin_unlock_bh(&ab->base_lock);
|
|
||||||
+
|
|
||||||
+ status.sta = peer->sta;
|
|
||||||
+ status.info = info;
|
|
||||||
+ status.skb = msdu;
|
|
||||||
+
|
|
||||||
+ ieee80211_tx_status_ext(ar->hw, &status);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
@@ -379,7 +402,15 @@ ath11k_dp_tx_process_htt_tx_complete(str
|
|
||||||
ts.msdu_id = msdu_id;
|
|
||||||
ts.ack_rssi = FIELD_GET(HTT_TX_WBM_COMP_INFO1_ACK_RSSI,
|
|
||||||
status_desc->info1);
|
|
||||||
+
|
|
||||||
+ if (FIELD_GET(HTT_TX_WBM_COMP_INFO2_VALID, status_desc->info2))
|
|
||||||
+ ts.peer_id = FIELD_GET(HTT_TX_WBM_COMP_INFO2_SW_PEER_ID,
|
|
||||||
+ status_desc->info2);
|
|
||||||
+ else
|
|
||||||
+ ts.peer_id = HTT_INVALID_PEER_ID;
|
|
||||||
+
|
|
||||||
ath11k_dp_tx_htt_tx_complete_buf(ab, tx_ring, &ts);
|
|
||||||
+
|
|
||||||
break;
|
|
||||||
case HAL_WBM_REL_HTT_TX_COMP_STATUS_REINJ:
|
|
||||||
case HAL_WBM_REL_HTT_TX_COMP_STATUS_INSPECT:
|
|
||||||
--- a/drivers/net/wireless/ath/ath11k/dp_tx.h
|
|
||||||
+++ b/drivers/net/wireless/ath/ath11k/dp_tx.h
|
|
||||||
@@ -13,6 +13,7 @@ struct ath11k_dp_htt_wbm_tx_status {
|
|
||||||
u32 msdu_id;
|
|
||||||
bool acked;
|
|
||||||
int ack_rssi;
|
|
||||||
+ u16 peer_id;
|
|
||||||
};
|
|
||||||
|
|
||||||
void ath11k_dp_tx_update_txcompl(struct ath11k *ar, struct hal_tx_status *ts);
|
|
@ -1,70 +0,0 @@
|
|||||||
From f9fff67d2d7ca6fa8066132003a3deef654c55b1 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Nagarajan Maran <quic_nmaran@quicinc.com>
|
|
||||||
Date: Mon, 17 Apr 2023 13:35:02 +0300
|
|
||||||
Subject: [PATCH] wifi: ath11k: Fix SKB corruption in REO destination ring
|
|
||||||
|
|
||||||
While running traffics for a long time, randomly an RX descriptor
|
|
||||||
filled with value "0" from REO destination ring is received.
|
|
||||||
This descriptor which is invalid causes the wrong SKB (SKB stored in
|
|
||||||
the IDR lookup with buffer id "0") to be fetched which in turn
|
|
||||||
causes SKB memory corruption issue and the same leads to crash
|
|
||||||
after some time.
|
|
||||||
|
|
||||||
Changed the start id for idr allocation to "1" and the buffer id "0"
|
|
||||||
is reserved for error validation. Introduced Sanity check to validate
|
|
||||||
the descriptor, before processing the SKB.
|
|
||||||
|
|
||||||
Crash Signature :
|
|
||||||
|
|
||||||
Unable to handle kernel paging request at virtual address 3f004900
|
|
||||||
PC points to "b15_dma_inv_range+0x30/0x50"
|
|
||||||
LR points to "dma_cache_maint_page+0x8c/0x128".
|
|
||||||
The Backtrace obtained is as follows:
|
|
||||||
[<8031716c>] (b15_dma_inv_range) from [<80313a4c>] (dma_cache_maint_page+0x8c/0x128)
|
|
||||||
[<80313a4c>] (dma_cache_maint_page) from [<80313b90>] (__dma_page_dev_to_cpu+0x28/0xcc)
|
|
||||||
[<80313b90>] (__dma_page_dev_to_cpu) from [<7fb5dd68>] (ath11k_dp_process_rx+0x1e8/0x4a4 [ath11k])
|
|
||||||
[<7fb5dd68>] (ath11k_dp_process_rx [ath11k]) from [<7fb53c20>] (ath11k_dp_service_srng+0xb0/0x2ac [ath11k])
|
|
||||||
[<7fb53c20>] (ath11k_dp_service_srng [ath11k]) from [<7f67bba4>] (ath11k_pci_ext_grp_napi_poll+0x1c/0x78 [ath11k_pci])
|
|
||||||
[<7f67bba4>] (ath11k_pci_ext_grp_napi_poll [ath11k_pci]) from [<807d5cf4>] (__napi_poll+0x28/0xb8)
|
|
||||||
[<807d5cf4>] (__napi_poll) from [<807d5f28>] (net_rx_action+0xf0/0x280)
|
|
||||||
[<807d5f28>] (net_rx_action) from [<80302148>] (__do_softirq+0xd0/0x280)
|
|
||||||
[<80302148>] (__do_softirq) from [<80320408>] (irq_exit+0x74/0xd4)
|
|
||||||
[<80320408>] (irq_exit) from [<803638a4>] (__handle_domain_irq+0x90/0xb4)
|
|
||||||
[<803638a4>] (__handle_domain_irq) from [<805bedec>] (gic_handle_irq+0x58/0x90)
|
|
||||||
[<805bedec>] (gic_handle_irq) from [<80301a78>] (__irq_svc+0x58/0x8c)
|
|
||||||
|
|
||||||
Tested-on: IPQ8074 hw2.0 AHB WLAN.HK.2.7.0.1-01744-QCAHKSWPL_SILICONZ-1
|
|
||||||
|
|
||||||
Signed-off-by: Nagarajan Maran <quic_nmaran@quicinc.com>
|
|
||||||
Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
|
|
||||||
Link: https://lore.kernel.org/r/20230403191533.28114-1-quic_nmaran@quicinc.com
|
|
||||||
---
|
|
||||||
drivers/net/wireless/ath/ath11k/dp_rx.c | 9 ++++++---
|
|
||||||
1 file changed, 6 insertions(+), 3 deletions(-)
|
|
||||||
|
|
||||||
--- a/drivers/net/wireless/ath/ath11k/dp_rx.c
|
|
||||||
+++ b/drivers/net/wireless/ath/ath11k/dp_rx.c
|
|
||||||
@@ -389,10 +389,10 @@ int ath11k_dp_rxbufs_replenish(struct at
|
|
||||||
goto fail_free_skb;
|
|
||||||
|
|
||||||
spin_lock_bh(&rx_ring->idr_lock);
|
|
||||||
- buf_id = idr_alloc(&rx_ring->bufs_idr, skb, 0,
|
|
||||||
- rx_ring->bufs_max * 3, GFP_ATOMIC);
|
|
||||||
+ buf_id = idr_alloc(&rx_ring->bufs_idr, skb, 1,
|
|
||||||
+ (rx_ring->bufs_max * 3) + 1, GFP_ATOMIC);
|
|
||||||
spin_unlock_bh(&rx_ring->idr_lock);
|
|
||||||
- if (buf_id < 0)
|
|
||||||
+ if (buf_id <= 0)
|
|
||||||
goto fail_dma_unmap;
|
|
||||||
|
|
||||||
desc = ath11k_hal_srng_src_get_next_entry(ab, srng);
|
|
||||||
@@ -2665,6 +2665,9 @@ try_again:
|
|
||||||
cookie);
|
|
||||||
mac_id = FIELD_GET(DP_RXDMA_BUF_COOKIE_PDEV_ID, cookie);
|
|
||||||
|
|
||||||
+ if (unlikely(buf_id == 0))
|
|
||||||
+ continue;
|
|
||||||
+
|
|
||||||
ar = ab->pdevs[mac_id].ar;
|
|
||||||
rx_ring = &ar->dp.rx_refill_buf_ring;
|
|
||||||
spin_lock_bh(&rx_ring->idr_lock);
|
|
@ -24,7 +24,7 @@ Link: https://lore.kernel.org/r/1681762947-13882-1-git-send-email-quic_msinada@q
|
|||||||
|
|
||||||
--- a/drivers/net/wireless/ath/ath11k/mac.c
|
--- a/drivers/net/wireless/ath/ath11k/mac.c
|
||||||
+++ b/drivers/net/wireless/ath/ath11k/mac.c
|
+++ b/drivers/net/wireless/ath/ath11k/mac.c
|
||||||
@@ -5585,10 +5585,6 @@ static int ath11k_mac_copy_he_cap(struct
|
@@ -5582,10 +5582,6 @@ static int ath11k_mac_copy_he_cap(struct
|
||||||
|
|
||||||
he_cap_elem->mac_cap_info[1] &=
|
he_cap_elem->mac_cap_info[1] &=
|
||||||
IEEE80211_HE_MAC_CAP1_TF_MAC_PAD_DUR_MASK;
|
IEEE80211_HE_MAC_CAP1_TF_MAC_PAD_DUR_MASK;
|
||||||
|
@ -1,61 +0,0 @@
|
|||||||
From e2ceb1de2f83aafd8003f0b72dfd4b7441e97d14 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Maxime Bizon <mbizon@freebox.fr>
|
|
||||||
Date: Fri, 21 Apr 2023 16:54:45 +0200
|
|
||||||
Subject: [PATCH] wifi: ath11k: fix registration of 6Ghz-only phy without the
|
|
||||||
full channel range
|
|
||||||
|
|
||||||
Because of what seems to be a typo, a 6Ghz-only phy for which the BDF
|
|
||||||
does not allow the 7115Mhz channel will fail to register:
|
|
||||||
|
|
||||||
WARNING: CPU: 2 PID: 106 at net/wireless/core.c:907 wiphy_register+0x914/0x954
|
|
||||||
Modules linked in: ath11k_pci sbsa_gwdt
|
|
||||||
CPU: 2 PID: 106 Comm: kworker/u8:5 Not tainted 6.3.0-rc7-next-20230418-00549-g1e096a17625a-dirty #9
|
|
||||||
Hardware name: Freebox V7R Board (DT)
|
|
||||||
Workqueue: ath11k_qmi_driver_event ath11k_qmi_driver_event_work
|
|
||||||
pstate: 60000005 (nZCv daif -PAN -UAO -TCO -DIT -SSBS BTYPE=--)
|
|
||||||
pc : wiphy_register+0x914/0x954
|
|
||||||
lr : ieee80211_register_hw+0x67c/0xc10
|
|
||||||
sp : ffffff800b123aa0
|
|
||||||
x29: ffffff800b123aa0 x28: 0000000000000000 x27: 0000000000000000
|
|
||||||
x26: 0000000000000000 x25: 0000000000000006 x24: ffffffc008d51418
|
|
||||||
x23: ffffffc008cb0838 x22: ffffff80176c2460 x21: 0000000000000168
|
|
||||||
x20: ffffff80176c0000 x19: ffffff80176c03e0 x18: 0000000000000014
|
|
||||||
x17: 00000000cbef338c x16: 00000000d2a26f21 x15: 00000000ad6bb85f
|
|
||||||
x14: 0000000000000020 x13: 0000000000000020 x12: 00000000ffffffbd
|
|
||||||
x11: 0000000000000208 x10: 00000000fffffdf7 x9 : ffffffc009394718
|
|
||||||
x8 : ffffff80176c0528 x7 : 000000007fffffff x6 : 0000000000000006
|
|
||||||
x5 : 0000000000000005 x4 : ffffff800b304284 x3 : ffffff800b304284
|
|
||||||
x2 : ffffff800b304d98 x1 : 0000000000000000 x0 : 0000000000000000
|
|
||||||
Call trace:
|
|
||||||
wiphy_register+0x914/0x954
|
|
||||||
ieee80211_register_hw+0x67c/0xc10
|
|
||||||
ath11k_mac_register+0x7c4/0xe10
|
|
||||||
ath11k_core_qmi_firmware_ready+0x1f4/0x570
|
|
||||||
ath11k_qmi_driver_event_work+0x198/0x590
|
|
||||||
process_one_work+0x1b8/0x328
|
|
||||||
worker_thread+0x6c/0x414
|
|
||||||
kthread+0x100/0x104
|
|
||||||
ret_from_fork+0x10/0x20
|
|
||||||
---[ end trace 0000000000000000 ]---
|
|
||||||
ath11k_pci 0002:01:00.0: ieee80211 registration failed: -22
|
|
||||||
ath11k_pci 0002:01:00.0: failed register the radio with mac80211: -22
|
|
||||||
ath11k_pci 0002:01:00.0: failed to create pdev core: -22
|
|
||||||
|
|
||||||
Signed-off-by: Maxime Bizon <mbizon@freebox.fr>
|
|
||||||
Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
|
|
||||||
Link: https://lore.kernel.org/r/20230421145445.2612280-1-mbizon@freebox.fr
|
|
||||||
---
|
|
||||||
drivers/net/wireless/ath/ath11k/mac.c | 2 +-
|
|
||||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
|
||||||
|
|
||||||
--- a/drivers/net/wireless/ath/ath11k/mac.c
|
|
||||||
+++ b/drivers/net/wireless/ath/ath11k/mac.c
|
|
||||||
@@ -8892,7 +8892,7 @@ static int ath11k_mac_setup_channels_rat
|
|
||||||
}
|
|
||||||
|
|
||||||
if (supported_bands & WMI_HOST_WLAN_5G_CAP) {
|
|
||||||
- if (reg_cap->high_5ghz_chan >= ATH11K_MAX_6G_FREQ) {
|
|
||||||
+ if (reg_cap->high_5ghz_chan >= ATH11K_MIN_6G_FREQ) {
|
|
||||||
channels = kmemdup(ath11k_6ghz_channels,
|
|
||||||
sizeof(ath11k_6ghz_channels), GFP_KERNEL);
|
|
||||||
if (!channels) {
|
|
@ -55,7 +55,7 @@ Link: https://lore.kernel.org/r/20230417205447.1800912-1-arnd@kernel.org
|
|||||||
{
|
{
|
||||||
int nss;
|
int nss;
|
||||||
|
|
||||||
@@ -1658,7 +1658,7 @@ static void ath11k_peer_assoc_h_rates(st
|
@@ -1651,7 +1651,7 @@ static void ath11k_peer_assoc_h_rates(st
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool
|
static bool
|
||||||
@ -64,7 +64,7 @@ Link: https://lore.kernel.org/r/20230417205447.1800912-1-arnd@kernel.org
|
|||||||
{
|
{
|
||||||
int nss;
|
int nss;
|
||||||
|
|
||||||
@@ -1670,7 +1670,7 @@ ath11k_peer_assoc_h_ht_masked(const u8 h
|
@@ -1663,7 +1663,7 @@ ath11k_peer_assoc_h_ht_masked(const u8 h
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool
|
static bool
|
||||||
@ -73,7 +73,7 @@ Link: https://lore.kernel.org/r/20230417205447.1800912-1-arnd@kernel.org
|
|||||||
{
|
{
|
||||||
int nss;
|
int nss;
|
||||||
|
|
||||||
@@ -2065,7 +2065,7 @@ static u16 ath11k_peer_assoc_h_he_limit(
|
@@ -2058,7 +2058,7 @@ static u16 ath11k_peer_assoc_h_he_limit(
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool
|
static bool
|
||||||
|
@ -56,7 +56,7 @@ Link: https://lore.kernel.org/r/20230405221648.17950-2-quic_alokad@quicinc.com
|
|||||||
#define ATH11K_QUEUE_LEN 4096
|
#define ATH11K_QUEUE_LEN 4096
|
||||||
--- a/drivers/net/wireless/ath/ath11k/mac.c
|
--- a/drivers/net/wireless/ath/ath11k/mac.c
|
||||||
+++ b/drivers/net/wireless/ath/ath11k/mac.c
|
+++ b/drivers/net/wireless/ath/ath11k/mac.c
|
||||||
@@ -9001,19 +9001,23 @@ static int ath11k_mac_setup_iface_combin
|
@@ -9006,19 +9006,23 @@ static int ath11k_mac_setup_iface_combin
|
||||||
|
|
||||||
static const u8 ath11k_if_types_ext_capa[] = {
|
static const u8 ath11k_if_types_ext_capa[] = {
|
||||||
[0] = WLAN_EXT_CAPA1_EXT_CHANNEL_SWITCHING,
|
[0] = WLAN_EXT_CAPA1_EXT_CHANNEL_SWITCHING,
|
||||||
@ -80,7 +80,7 @@ Link: https://lore.kernel.org/r/20230405221648.17950-2-quic_alokad@quicinc.com
|
|||||||
};
|
};
|
||||||
|
|
||||||
static const struct wiphy_iftype_ext_capab ath11k_iftypes_ext_capa[] = {
|
static const struct wiphy_iftype_ext_capab ath11k_iftypes_ext_capa[] = {
|
||||||
@@ -9251,6 +9255,9 @@ static int __ath11k_mac_register(struct
|
@@ -9256,6 +9260,9 @@ static int __ath11k_mac_register(struct
|
||||||
wiphy_ext_feature_set(ar->hw->wiphy,
|
wiphy_ext_feature_set(ar->hw->wiphy,
|
||||||
NL80211_EXT_FEATURE_ENABLE_FTM_RESPONDER);
|
NL80211_EXT_FEATURE_ENABLE_FTM_RESPONDER);
|
||||||
|
|
||||||
|
@ -23,7 +23,7 @@ Link: https://lore.kernel.org/r/20230405221648.17950-3-quic_alokad@quicinc.com
|
|||||||
|
|
||||||
--- a/drivers/net/wireless/ath/ath11k/mac.c
|
--- a/drivers/net/wireless/ath/ath11k/mac.c
|
||||||
+++ b/drivers/net/wireless/ath/ath11k/mac.c
|
+++ b/drivers/net/wireless/ath/ath11k/mac.c
|
||||||
@@ -6181,17 +6181,62 @@ static void ath11k_mac_op_stop(struct ie
|
@@ -6178,17 +6178,62 @@ static void ath11k_mac_op_stop(struct ie
|
||||||
atomic_set(&ar->num_pending_mgmt_tx, 0);
|
atomic_set(&ar->num_pending_mgmt_tx, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -89,7 +89,7 @@ Link: https://lore.kernel.org/r/20230405221648.17950-3-quic_alokad@quicinc.com
|
|||||||
|
|
||||||
if (pdev->cap.supported_bands & WMI_HOST_WLAN_2G_CAP) {
|
if (pdev->cap.supported_bands & WMI_HOST_WLAN_2G_CAP) {
|
||||||
params->chains[NL80211_BAND_2GHZ].tx = ar->num_tx_chains;
|
params->chains[NL80211_BAND_2GHZ].tx = ar->num_tx_chains;
|
||||||
@@ -6206,6 +6251,7 @@ ath11k_mac_setup_vdev_create_params(stru
|
@@ -6203,6 +6248,7 @@ ath11k_mac_setup_vdev_create_params(stru
|
||||||
params->chains[NL80211_BAND_6GHZ].tx = ar->num_tx_chains;
|
params->chains[NL80211_BAND_6GHZ].tx = ar->num_tx_chains;
|
||||||
params->chains[NL80211_BAND_6GHZ].rx = ar->num_rx_chains;
|
params->chains[NL80211_BAND_6GHZ].rx = ar->num_rx_chains;
|
||||||
}
|
}
|
||||||
@ -97,7 +97,7 @@ Link: https://lore.kernel.org/r/20230405221648.17950-3-quic_alokad@quicinc.com
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void ath11k_mac_op_update_vif_offload(struct ieee80211_hw *hw,
|
static void ath11k_mac_op_update_vif_offload(struct ieee80211_hw *hw,
|
||||||
@@ -6500,7 +6546,12 @@ static int ath11k_mac_op_add_interface(s
|
@@ -6497,7 +6543,12 @@ static int ath11k_mac_op_add_interface(s
|
||||||
for (i = 0; i < ARRAY_SIZE(vif->hw_queue); i++)
|
for (i = 0; i < ARRAY_SIZE(vif->hw_queue); i++)
|
||||||
vif->hw_queue[i] = i % (ATH11K_HW_MAX_QUEUES - 1);
|
vif->hw_queue[i] = i % (ATH11K_HW_MAX_QUEUES - 1);
|
||||||
|
|
||||||
@ -111,7 +111,7 @@ Link: https://lore.kernel.org/r/20230405221648.17950-3-quic_alokad@quicinc.com
|
|||||||
|
|
||||||
ret = ath11k_wmi_vdev_create(ar, vif->addr, &vdev_param);
|
ret = ath11k_wmi_vdev_create(ar, vif->addr, &vdev_param);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
@@ -6905,6 +6956,17 @@ ath11k_mac_vdev_start_restart(struct ath
|
@@ -6902,6 +6953,17 @@ ath11k_mac_vdev_start_restart(struct ath
|
||||||
arg.pref_tx_streams = ar->num_tx_chains;
|
arg.pref_tx_streams = ar->num_tx_chains;
|
||||||
arg.pref_rx_streams = ar->num_rx_chains;
|
arg.pref_rx_streams = ar->num_rx_chains;
|
||||||
|
|
||||||
|
@ -29,7 +29,7 @@ Link: https://lore.kernel.org/r/20230405221648.17950-5-quic_alokad@quicinc.com
|
|||||||
if (ret) {
|
if (ret) {
|
||||||
ath11k_warn(ar->ab, "failed to put up monitor vdev %i: %d\n",
|
ath11k_warn(ar->ab, "failed to put up monitor vdev %i: %d\n",
|
||||||
vdev_id, ret);
|
vdev_id, ret);
|
||||||
@@ -1423,6 +1423,7 @@ static void ath11k_control_beaconing(str
|
@@ -1416,6 +1416,7 @@ static void ath11k_control_beaconing(str
|
||||||
struct ieee80211_bss_conf *info)
|
struct ieee80211_bss_conf *info)
|
||||||
{
|
{
|
||||||
struct ath11k *ar = arvif->ar;
|
struct ath11k *ar = arvif->ar;
|
||||||
@ -37,7 +37,7 @@ Link: https://lore.kernel.org/r/20230405221648.17950-5-quic_alokad@quicinc.com
|
|||||||
int ret = 0;
|
int ret = 0;
|
||||||
|
|
||||||
lockdep_assert_held(&arvif->ar->conf_mutex);
|
lockdep_assert_held(&arvif->ar->conf_mutex);
|
||||||
@@ -1451,8 +1452,14 @@ static void ath11k_control_beaconing(str
|
@@ -1444,8 +1445,14 @@ static void ath11k_control_beaconing(str
|
||||||
|
|
||||||
ether_addr_copy(arvif->bssid, info->bssid);
|
ether_addr_copy(arvif->bssid, info->bssid);
|
||||||
|
|
||||||
@ -53,7 +53,7 @@ Link: https://lore.kernel.org/r/20230405221648.17950-5-quic_alokad@quicinc.com
|
|||||||
if (ret) {
|
if (ret) {
|
||||||
ath11k_warn(ar->ab, "failed to bring up vdev %d: %i\n",
|
ath11k_warn(ar->ab, "failed to bring up vdev %d: %i\n",
|
||||||
arvif->vdev_id, ret);
|
arvif->vdev_id, ret);
|
||||||
@@ -2879,7 +2886,8 @@ static void ath11k_bss_assoc(struct ieee
|
@@ -2876,7 +2883,8 @@ static void ath11k_bss_assoc(struct ieee
|
||||||
arvif->aid = vif->cfg.aid;
|
arvif->aid = vif->cfg.aid;
|
||||||
ether_addr_copy(arvif->bssid, bss_conf->bssid);
|
ether_addr_copy(arvif->bssid, bss_conf->bssid);
|
||||||
|
|
||||||
@ -63,7 +63,7 @@ Link: https://lore.kernel.org/r/20230405221648.17950-5-quic_alokad@quicinc.com
|
|||||||
if (ret) {
|
if (ret) {
|
||||||
ath11k_warn(ar->ab, "failed to set vdev %d up: %d\n",
|
ath11k_warn(ar->ab, "failed to set vdev %d up: %d\n",
|
||||||
arvif->vdev_id, ret);
|
arvif->vdev_id, ret);
|
||||||
@@ -7133,7 +7141,8 @@ ath11k_mac_update_vif_chan(struct ath11k
|
@@ -7130,7 +7138,8 @@ ath11k_mac_update_vif_chan(struct ath11k
|
||||||
int n_vifs)
|
int n_vifs)
|
||||||
{
|
{
|
||||||
struct ath11k_base *ab = ar->ab;
|
struct ath11k_base *ab = ar->ab;
|
||||||
@ -73,7 +73,7 @@ Link: https://lore.kernel.org/r/20230405221648.17950-5-quic_alokad@quicinc.com
|
|||||||
int ret;
|
int ret;
|
||||||
int i;
|
int i;
|
||||||
bool monitor_vif = false;
|
bool monitor_vif = false;
|
||||||
@@ -7187,8 +7196,15 @@ ath11k_mac_update_vif_chan(struct ath11k
|
@@ -7184,8 +7193,15 @@ ath11k_mac_update_vif_chan(struct ath11k
|
||||||
ath11k_warn(ab, "failed to update bcn tmpl during csa: %d\n",
|
ath11k_warn(ab, "failed to update bcn tmpl during csa: %d\n",
|
||||||
ret);
|
ret);
|
||||||
|
|
||||||
@ -90,7 +90,7 @@ Link: https://lore.kernel.org/r/20230405221648.17950-5-quic_alokad@quicinc.com
|
|||||||
if (ret) {
|
if (ret) {
|
||||||
ath11k_warn(ab, "failed to bring vdev up %d: %d\n",
|
ath11k_warn(ab, "failed to bring vdev up %d: %d\n",
|
||||||
arvif->vdev_id, ret);
|
arvif->vdev_id, ret);
|
||||||
@@ -7306,7 +7322,8 @@ static int ath11k_start_vdev_delay(struc
|
@@ -7303,7 +7319,8 @@ static int ath11k_start_vdev_delay(struc
|
||||||
}
|
}
|
||||||
|
|
||||||
if (arvif->vdev_type == WMI_VDEV_TYPE_MONITOR) {
|
if (arvif->vdev_type == WMI_VDEV_TYPE_MONITOR) {
|
||||||
|
@ -23,7 +23,7 @@ Link: https://lore.kernel.org/r/20230405221648.17950-6-quic_alokad@quicinc.com
|
|||||||
|
|
||||||
--- a/drivers/net/wireless/ath/ath11k/mac.c
|
--- a/drivers/net/wireless/ath/ath11k/mac.c
|
||||||
+++ b/drivers/net/wireless/ath/ath11k/mac.c
|
+++ b/drivers/net/wireless/ath/ath11k/mac.c
|
||||||
@@ -1351,28 +1351,14 @@ err_mon_del:
|
@@ -1344,28 +1344,14 @@ err_mon_del:
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -55,7 +55,7 @@ Link: https://lore.kernel.org/r/20230405221648.17950-6-quic_alokad@quicinc.com
|
|||||||
ies += sizeof(mgmt->u.beacon);
|
ies += sizeof(mgmt->u.beacon);
|
||||||
|
|
||||||
if (cfg80211_find_ie(WLAN_EID_RSN, ies, (skb_tail_pointer(bcn) - ies)))
|
if (cfg80211_find_ie(WLAN_EID_RSN, ies, (skb_tail_pointer(bcn) - ies)))
|
||||||
@@ -1386,7 +1372,28 @@ static int ath11k_mac_setup_bcn_tmpl(str
|
@@ -1379,7 +1365,28 @@ static int ath11k_mac_setup_bcn_tmpl(str
|
||||||
arvif->wpaie_present = true;
|
arvif->wpaie_present = true;
|
||||||
else
|
else
|
||||||
arvif->wpaie_present = false;
|
arvif->wpaie_present = false;
|
||||||
|
@ -24,7 +24,7 @@ Link: https://lore.kernel.org/r/20230405221648.17950-7-quic_alokad@quicinc.com
|
|||||||
|
|
||||||
--- a/drivers/net/wireless/ath/ath11k/mac.c
|
--- a/drivers/net/wireless/ath/ath11k/mac.c
|
||||||
+++ b/drivers/net/wireless/ath/ath11k/mac.c
|
+++ b/drivers/net/wireless/ath/ath11k/mac.c
|
||||||
@@ -1351,6 +1351,84 @@ err_mon_del:
|
@@ -1344,6 +1344,84 @@ err_mon_del:
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -109,7 +109,7 @@ Link: https://lore.kernel.org/r/20230405221648.17950-7-quic_alokad@quicinc.com
|
|||||||
static void ath11k_mac_set_vif_params(struct ath11k_vif *arvif,
|
static void ath11k_mac_set_vif_params(struct ath11k_vif *arvif,
|
||||||
struct sk_buff *bcn)
|
struct sk_buff *bcn)
|
||||||
{
|
{
|
||||||
@@ -1374,18 +1452,26 @@ static void ath11k_mac_set_vif_params(st
|
@@ -1367,18 +1445,26 @@ static void ath11k_mac_set_vif_params(st
|
||||||
arvif->wpaie_present = false;
|
arvif->wpaie_present = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -139,7 +139,7 @@ Link: https://lore.kernel.org/r/20230405221648.17950-7-quic_alokad@quicinc.com
|
|||||||
|
|
||||||
bcn = ieee80211_beacon_get_template(hw, vif, &offs, 0);
|
bcn = ieee80211_beacon_get_template(hw, vif, &offs, 0);
|
||||||
if (!bcn) {
|
if (!bcn) {
|
||||||
@@ -1393,9 +1479,12 @@ static int ath11k_mac_setup_bcn_tmpl(str
|
@@ -1386,9 +1472,12 @@ static int ath11k_mac_setup_bcn_tmpl(str
|
||||||
return -EPERM;
|
return -EPERM;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -154,7 +154,7 @@ Link: https://lore.kernel.org/r/20230405221648.17950-7-quic_alokad@quicinc.com
|
|||||||
kfree_skb(bcn);
|
kfree_skb(bcn);
|
||||||
|
|
||||||
if (ret)
|
if (ret)
|
||||||
@@ -1405,6 +1494,23 @@ static int ath11k_mac_setup_bcn_tmpl(str
|
@@ -1398,6 +1487,23 @@ static int ath11k_mac_setup_bcn_tmpl(str
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -21,7 +21,7 @@ Link: https://lore.kernel.org/r/20230405221648.17950-8-quic_alokad@quicinc.com
|
|||||||
|
|
||||||
--- a/drivers/net/wireless/ath/ath11k/mac.c
|
--- a/drivers/net/wireless/ath/ath11k/mac.c
|
||||||
+++ b/drivers/net/wireless/ath/ath11k/mac.c
|
+++ b/drivers/net/wireless/ath/ath11k/mac.c
|
||||||
@@ -1452,6 +1452,60 @@ static void ath11k_mac_set_vif_params(st
|
@@ -1445,6 +1445,60 @@ static void ath11k_mac_set_vif_params(st
|
||||||
arvif->wpaie_present = false;
|
arvif->wpaie_present = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -82,7 +82,7 @@ Link: https://lore.kernel.org/r/20230405221648.17950-8-quic_alokad@quicinc.com
|
|||||||
static int ath11k_mac_setup_bcn_tmpl_mbssid(struct ath11k_vif *arvif)
|
static int ath11k_mac_setup_bcn_tmpl_mbssid(struct ath11k_vif *arvif)
|
||||||
{
|
{
|
||||||
struct ath11k *ar = arvif->ar;
|
struct ath11k *ar = arvif->ar;
|
||||||
@@ -1484,7 +1538,7 @@ static int ath11k_mac_setup_bcn_tmpl_mbs
|
@@ -1477,7 +1531,7 @@ static int ath11k_mac_setup_bcn_tmpl_mbs
|
||||||
else if (!ath11k_mac_set_nontx_vif_params(tx_arvif, arvif, bcn))
|
else if (!ath11k_mac_set_nontx_vif_params(tx_arvif, arvif, bcn))
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
@ -91,7 +91,7 @@ Link: https://lore.kernel.org/r/20230405221648.17950-8-quic_alokad@quicinc.com
|
|||||||
kfree_skb(bcn);
|
kfree_skb(bcn);
|
||||||
|
|
||||||
if (ret)
|
if (ret)
|
||||||
@@ -1508,6 +1562,9 @@ static int ath11k_mac_setup_bcn_tmpl(str
|
@@ -1501,6 +1555,9 @@ static int ath11k_mac_setup_bcn_tmpl(str
|
||||||
arvif != (void *)vif->mbssid_tx_vif->drv_priv && arvif->is_up)
|
arvif != (void *)vif->mbssid_tx_vif->drv_priv && arvif->is_up)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
@ -31,7 +31,7 @@ Link: https://lore.kernel.org/r/20230504092033.3542456-2-quic_mkenna@quicinc.com
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include <net/mac80211.h>
|
#include <net/mac80211.h>
|
||||||
@@ -4338,6 +4338,20 @@ exit:
|
@@ -4335,6 +4335,20 @@ exit:
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
@ -52,7 +52,7 @@ Link: https://lore.kernel.org/r/20230504092033.3542456-2-quic_mkenna@quicinc.com
|
|||||||
ath11k_mac_bitrate_mask_num_vht_rates(struct ath11k *ar,
|
ath11k_mac_bitrate_mask_num_vht_rates(struct ath11k *ar,
|
||||||
enum nl80211_band band,
|
enum nl80211_band band,
|
||||||
const struct cfg80211_bitrate_mask *mask)
|
const struct cfg80211_bitrate_mask *mask)
|
||||||
@@ -7791,20 +7805,6 @@ static void ath11k_mac_op_flush(struct i
|
@@ -7788,20 +7802,6 @@ static void ath11k_mac_op_flush(struct i
|
||||||
ath11k_mac_flush_tx_complete(ar);
|
ath11k_mac_flush_tx_complete(ar);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -27,7 +27,7 @@ Link: https://lore.kernel.org/r/20230504092033.3542456-3-quic_mkenna@quicinc.com
|
|||||||
|
|
||||||
--- a/drivers/net/wireless/ath/ath11k/mac.c
|
--- a/drivers/net/wireless/ath/ath11k/mac.c
|
||||||
+++ b/drivers/net/wireless/ath/ath11k/mac.c
|
+++ b/drivers/net/wireless/ath/ath11k/mac.c
|
||||||
@@ -4480,6 +4480,54 @@ ath11k_mac_set_peer_he_fixed_rate(struct
|
@@ -4477,6 +4477,54 @@ ath11k_mac_set_peer_he_fixed_rate(struct
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -82,7 +82,7 @@ Link: https://lore.kernel.org/r/20230504092033.3542456-3-quic_mkenna@quicinc.com
|
|||||||
static int ath11k_station_assoc(struct ath11k *ar,
|
static int ath11k_station_assoc(struct ath11k *ar,
|
||||||
struct ieee80211_vif *vif,
|
struct ieee80211_vif *vif,
|
||||||
struct ieee80211_sta *sta,
|
struct ieee80211_sta *sta,
|
||||||
@@ -4491,7 +4539,7 @@ static int ath11k_station_assoc(struct a
|
@@ -4488,7 +4536,7 @@ static int ath11k_station_assoc(struct a
|
||||||
struct cfg80211_chan_def def;
|
struct cfg80211_chan_def def;
|
||||||
enum nl80211_band band;
|
enum nl80211_band band;
|
||||||
struct cfg80211_bitrate_mask *mask;
|
struct cfg80211_bitrate_mask *mask;
|
||||||
@ -91,7 +91,7 @@ Link: https://lore.kernel.org/r/20230504092033.3542456-3-quic_mkenna@quicinc.com
|
|||||||
|
|
||||||
lockdep_assert_held(&ar->conf_mutex);
|
lockdep_assert_held(&ar->conf_mutex);
|
||||||
|
|
||||||
@@ -4519,6 +4567,7 @@ static int ath11k_station_assoc(struct a
|
@@ -4516,6 +4564,7 @@ static int ath11k_station_assoc(struct a
|
||||||
|
|
||||||
num_vht_rates = ath11k_mac_bitrate_mask_num_vht_rates(ar, band, mask);
|
num_vht_rates = ath11k_mac_bitrate_mask_num_vht_rates(ar, band, mask);
|
||||||
num_he_rates = ath11k_mac_bitrate_mask_num_he_rates(ar, band, mask);
|
num_he_rates = ath11k_mac_bitrate_mask_num_he_rates(ar, band, mask);
|
||||||
@ -99,7 +99,7 @@ Link: https://lore.kernel.org/r/20230504092033.3542456-3-quic_mkenna@quicinc.com
|
|||||||
|
|
||||||
/* If single VHT/HE rate is configured (by set_bitrate_mask()),
|
/* If single VHT/HE rate is configured (by set_bitrate_mask()),
|
||||||
* peer_assoc will disable VHT/HE. This is now enabled by a peer specific
|
* peer_assoc will disable VHT/HE. This is now enabled by a peer specific
|
||||||
@@ -4535,6 +4584,11 @@ static int ath11k_station_assoc(struct a
|
@@ -4532,6 +4581,11 @@ static int ath11k_station_assoc(struct a
|
||||||
band);
|
band);
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
@ -111,7 +111,7 @@ Link: https://lore.kernel.org/r/20230504092033.3542456-3-quic_mkenna@quicinc.com
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Re-assoc is run only to update supported rates for given station. It
|
/* Re-assoc is run only to update supported rates for given station. It
|
||||||
@@ -4608,7 +4662,7 @@ static void ath11k_sta_rc_update_wk(stru
|
@@ -4605,7 +4659,7 @@ static void ath11k_sta_rc_update_wk(stru
|
||||||
const u16 *vht_mcs_mask;
|
const u16 *vht_mcs_mask;
|
||||||
const u16 *he_mcs_mask;
|
const u16 *he_mcs_mask;
|
||||||
u32 changed, bw, nss, smps, bw_prev;
|
u32 changed, bw, nss, smps, bw_prev;
|
||||||
@ -120,7 +120,7 @@ Link: https://lore.kernel.org/r/20230504092033.3542456-3-quic_mkenna@quicinc.com
|
|||||||
const struct cfg80211_bitrate_mask *mask;
|
const struct cfg80211_bitrate_mask *mask;
|
||||||
struct peer_assoc_params peer_arg;
|
struct peer_assoc_params peer_arg;
|
||||||
enum wmi_phy_mode peer_phymode;
|
enum wmi_phy_mode peer_phymode;
|
||||||
@@ -4724,6 +4778,8 @@ static void ath11k_sta_rc_update_wk(stru
|
@@ -4721,6 +4775,8 @@ static void ath11k_sta_rc_update_wk(stru
|
||||||
|
|
||||||
if (changed & IEEE80211_RC_SUPP_RATES_CHANGED) {
|
if (changed & IEEE80211_RC_SUPP_RATES_CHANGED) {
|
||||||
mask = &arvif->bitrate_mask;
|
mask = &arvif->bitrate_mask;
|
||||||
@ -129,7 +129,7 @@ Link: https://lore.kernel.org/r/20230504092033.3542456-3-quic_mkenna@quicinc.com
|
|||||||
num_vht_rates = ath11k_mac_bitrate_mask_num_vht_rates(ar, band,
|
num_vht_rates = ath11k_mac_bitrate_mask_num_vht_rates(ar, band,
|
||||||
mask);
|
mask);
|
||||||
num_he_rates = ath11k_mac_bitrate_mask_num_he_rates(ar, band,
|
num_he_rates = ath11k_mac_bitrate_mask_num_he_rates(ar, band,
|
||||||
@@ -4746,6 +4802,9 @@ static void ath11k_sta_rc_update_wk(stru
|
@@ -4743,6 +4799,9 @@ static void ath11k_sta_rc_update_wk(stru
|
||||||
} else if (sta->deflink.he_cap.has_he && num_he_rates == 1) {
|
} else if (sta->deflink.he_cap.has_he && num_he_rates == 1) {
|
||||||
ath11k_mac_set_peer_he_fixed_rate(arvif, sta, mask,
|
ath11k_mac_set_peer_he_fixed_rate(arvif, sta, mask,
|
||||||
band);
|
band);
|
||||||
|
@ -1,127 +0,0 @@
|
|||||||
From 88ca89202f8e8afb5225eb5244d79cd67c15d744 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Wen Gong <quic_wgong@quicinc.com>
|
|
||||||
Date: Fri, 26 May 2023 12:41:06 +0300
|
|
||||||
Subject: [PATCH] wifi: ath11k: add support default regdb while searching
|
|
||||||
board-2.bin for WCN6855
|
|
||||||
|
|
||||||
Sometimes board-2.bin does not have the regdb data which matched the
|
|
||||||
parameters such as vendor, device, subsystem-vendor, subsystem-device
|
|
||||||
and etc. Add default regdb data with 'bus=%s' into board-2.bin for
|
|
||||||
WCN6855, then ath11k use 'bus=pci' to search regdb data in board-2.bin
|
|
||||||
for WCN6855.
|
|
||||||
|
|
||||||
kernel: [ 122.515808] ath11k_pci 0000:03:00.0: boot using board name 'bus=pci,vendor=17cb,device=1103,subsystem-vendor=17cb,subsystem-device=3374,qmi-chip-id=2,qmi-board-id=262'
|
|
||||||
kernel: [ 122.517240] ath11k_pci 0000:03:00.0: boot firmware request ath11k/WCN6855/hw2.0/board-2.bin size 6179564
|
|
||||||
kernel: [ 122.517280] ath11k_pci 0000:03:00.0: failed to fetch regdb data for bus=pci,vendor=17cb,device=1103,subsystem-vendor=17cb,subsystem-device=3374,qmi-chip-id=2,qmi-board-id=262 from ath11k/WCN6855/hw2.0/board-2.bin
|
|
||||||
kernel: [ 122.517464] ath11k_pci 0000:03:00.0: boot using board name 'bus=pci'
|
|
||||||
kernel: [ 122.518901] ath11k_pci 0000:03:00.0: boot firmware request ath11k/WCN6855/hw2.0/board-2.bin size 6179564
|
|
||||||
kernel: [ 122.518915] ath11k_pci 0000:03:00.0: board name
|
|
||||||
kernel: [ 122.518917] ath11k_pci 0000:03:00.0: 00000000: 62 75 73 3d 70 63 69 bus=pci
|
|
||||||
kernel: [ 122.518918] ath11k_pci 0000:03:00.0: boot found match regdb data for name 'bus=pci'
|
|
||||||
kernel: [ 122.518920] ath11k_pci 0000:03:00.0: boot found regdb data for 'bus=pci'
|
|
||||||
kernel: [ 122.518921] ath11k_pci 0000:03:00.0: fetched regdb
|
|
||||||
|
|
||||||
Tested-on: WCN6855 hw2.0 PCI WLAN.HSP.1.1-03125-QCAHSPSWPL_V1_V2_SILICONZ_LITE-3
|
|
||||||
|
|
||||||
Signed-off-by: Wen Gong <quic_wgong@quicinc.com>
|
|
||||||
Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
|
|
||||||
Link: https://lore.kernel.org/r/20230517133959.8224-1-quic_wgong@quicinc.com
|
|
||||||
---
|
|
||||||
drivers/net/wireless/ath/ath11k/core.c | 53 +++++++++++++++++++-------
|
|
||||||
1 file changed, 40 insertions(+), 13 deletions(-)
|
|
||||||
|
|
||||||
--- a/drivers/net/wireless/ath/ath11k/core.c
|
|
||||||
+++ b/drivers/net/wireless/ath/ath11k/core.c
|
|
||||||
@@ -961,7 +961,8 @@ int ath11k_core_check_dt(struct ath11k_b
|
|
||||||
}
|
|
||||||
|
|
||||||
static int __ath11k_core_create_board_name(struct ath11k_base *ab, char *name,
|
|
||||||
- size_t name_len, bool with_variant)
|
|
||||||
+ size_t name_len, bool with_variant,
|
|
||||||
+ bool bus_type_mode)
|
|
||||||
{
|
|
||||||
/* strlen(',variant=') + strlen(ab->qmi.target.bdf_ext) */
|
|
||||||
char variant[9 + ATH11K_QMI_BDF_EXT_STR_LENGTH] = { 0 };
|
|
||||||
@@ -972,15 +973,20 @@ static int __ath11k_core_create_board_na
|
|
||||||
|
|
||||||
switch (ab->id.bdf_search) {
|
|
||||||
case ATH11K_BDF_SEARCH_BUS_AND_BOARD:
|
|
||||||
- scnprintf(name, name_len,
|
|
||||||
- "bus=%s,vendor=%04x,device=%04x,subsystem-vendor=%04x,subsystem-device=%04x,qmi-chip-id=%d,qmi-board-id=%d%s",
|
|
||||||
- ath11k_bus_str(ab->hif.bus),
|
|
||||||
- ab->id.vendor, ab->id.device,
|
|
||||||
- ab->id.subsystem_vendor,
|
|
||||||
- ab->id.subsystem_device,
|
|
||||||
- ab->qmi.target.chip_id,
|
|
||||||
- ab->qmi.target.board_id,
|
|
||||||
- variant);
|
|
||||||
+ if (bus_type_mode)
|
|
||||||
+ scnprintf(name, name_len,
|
|
||||||
+ "bus=%s",
|
|
||||||
+ ath11k_bus_str(ab->hif.bus));
|
|
||||||
+ else
|
|
||||||
+ scnprintf(name, name_len,
|
|
||||||
+ "bus=%s,vendor=%04x,device=%04x,subsystem-vendor=%04x,subsystem-device=%04x,qmi-chip-id=%d,qmi-board-id=%d%s",
|
|
||||||
+ ath11k_bus_str(ab->hif.bus),
|
|
||||||
+ ab->id.vendor, ab->id.device,
|
|
||||||
+ ab->id.subsystem_vendor,
|
|
||||||
+ ab->id.subsystem_device,
|
|
||||||
+ ab->qmi.target.chip_id,
|
|
||||||
+ ab->qmi.target.board_id,
|
|
||||||
+ variant);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
scnprintf(name, name_len,
|
|
||||||
@@ -999,13 +1005,19 @@ static int __ath11k_core_create_board_na
|
|
||||||
static int ath11k_core_create_board_name(struct ath11k_base *ab, char *name,
|
|
||||||
size_t name_len)
|
|
||||||
{
|
|
||||||
- return __ath11k_core_create_board_name(ab, name, name_len, true);
|
|
||||||
+ return __ath11k_core_create_board_name(ab, name, name_len, true, false);
|
|
||||||
}
|
|
||||||
|
|
||||||
static int ath11k_core_create_fallback_board_name(struct ath11k_base *ab, char *name,
|
|
||||||
size_t name_len)
|
|
||||||
{
|
|
||||||
- return __ath11k_core_create_board_name(ab, name, name_len, false);
|
|
||||||
+ return __ath11k_core_create_board_name(ab, name, name_len, false, false);
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+static int ath11k_core_create_bus_type_board_name(struct ath11k_base *ab, char *name,
|
|
||||||
+ size_t name_len)
|
|
||||||
+{
|
|
||||||
+ return __ath11k_core_create_board_name(ab, name, name_len, false, true);
|
|
||||||
}
|
|
||||||
|
|
||||||
const struct firmware *ath11k_core_firmware_request(struct ath11k_base *ab,
|
|
||||||
@@ -1309,7 +1321,7 @@ success:
|
|
||||||
|
|
||||||
int ath11k_core_fetch_regdb(struct ath11k_base *ab, struct ath11k_board_data *bd)
|
|
||||||
{
|
|
||||||
- char boardname[BOARD_NAME_SIZE];
|
|
||||||
+ char boardname[BOARD_NAME_SIZE], default_boardname[BOARD_NAME_SIZE];
|
|
||||||
int ret;
|
|
||||||
|
|
||||||
ret = ath11k_core_create_board_name(ab, boardname, BOARD_NAME_SIZE);
|
|
||||||
@@ -1323,6 +1335,21 @@ int ath11k_core_fetch_regdb(struct ath11
|
|
||||||
ATH11K_BD_IE_REGDB,
|
|
||||||
ATH11K_BD_IE_REGDB_NAME,
|
|
||||||
ATH11K_BD_IE_REGDB_DATA);
|
|
||||||
+ if (!ret)
|
|
||||||
+ goto exit;
|
|
||||||
+
|
|
||||||
+ ret = ath11k_core_create_bus_type_board_name(ab, default_boardname,
|
|
||||||
+ BOARD_NAME_SIZE);
|
|
||||||
+ if (ret) {
|
|
||||||
+ ath11k_dbg(ab, ATH11K_DBG_BOOT,
|
|
||||||
+ "failed to create default board name for regdb: %d", ret);
|
|
||||||
+ goto exit;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ ret = ath11k_core_fetch_board_data_api_n(ab, bd, default_boardname,
|
|
||||||
+ ATH11K_BD_IE_REGDB,
|
|
||||||
+ ATH11K_BD_IE_REGDB_NAME,
|
|
||||||
+ ATH11K_BD_IE_REGDB_DATA);
|
|
||||||
if (!ret)
|
|
||||||
goto exit;
|
|
||||||
|
|
@ -226,7 +226,7 @@ Link: https://lore.kernel.org/r/20230517135934.16408-4-quic_rajkbhag@quicinc.com
|
|||||||
|
|
||||||
if (pdev && pdev->pdev_id == pdev_id)
|
if (pdev && pdev->pdev_id == pdev_id)
|
||||||
return (pdev->ar ? pdev->ar : NULL);
|
return (pdev->ar ? pdev->ar : NULL);
|
||||||
@@ -6271,6 +6274,11 @@ static int ath11k_mac_op_start(struct ie
|
@@ -6268,6 +6271,11 @@ static int ath11k_mac_op_start(struct ie
|
||||||
struct ath11k_pdev *pdev = ar->pdev;
|
struct ath11k_pdev *pdev = ar->pdev;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
@ -238,7 +238,7 @@ Link: https://lore.kernel.org/r/20230517135934.16408-4-quic_rajkbhag@quicinc.com
|
|||||||
ath11k_mac_drain_tx(ar);
|
ath11k_mac_drain_tx(ar);
|
||||||
mutex_lock(&ar->conf_mutex);
|
mutex_lock(&ar->conf_mutex);
|
||||||
|
|
||||||
@@ -6285,6 +6293,7 @@ static int ath11k_mac_op_start(struct ie
|
@@ -6282,6 +6290,7 @@ static int ath11k_mac_op_start(struct ie
|
||||||
case ATH11K_STATE_RESTARTED:
|
case ATH11K_STATE_RESTARTED:
|
||||||
case ATH11K_STATE_WEDGED:
|
case ATH11K_STATE_WEDGED:
|
||||||
case ATH11K_STATE_ON:
|
case ATH11K_STATE_ON:
|
||||||
@ -257,7 +257,7 @@ Link: https://lore.kernel.org/r/20230517135934.16408-4-quic_rajkbhag@quicinc.com
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include <linux/module.h>
|
#include <linux/module.h>
|
||||||
@@ -745,6 +745,7 @@ static int ath11k_pci_probe(struct pci_d
|
@@ -751,6 +751,7 @@ static int ath11k_pci_probe(struct pci_d
|
||||||
ab_pci->ab = ab;
|
ab_pci->ab = ab;
|
||||||
ab_pci->pdev = pdev;
|
ab_pci->pdev = pdev;
|
||||||
ab->hif.ops = &ath11k_pci_hif_ops;
|
ab->hif.ops = &ath11k_pci_hif_ops;
|
||||||
@ -767,7 +767,7 @@ Link: https://lore.kernel.org/r/20230517135934.16408-4-quic_rajkbhag@quicinc.com
|
|||||||
{
|
{
|
||||||
const void **tb;
|
const void **tb;
|
||||||
int ret;
|
int ret;
|
||||||
@@ -8628,6 +8628,9 @@ static void ath11k_wmi_tlv_op_rx(struct
|
@@ -8644,6 +8644,9 @@ static void ath11k_wmi_tlv_op_rx(struct
|
||||||
case WMI_PDEV_CSA_SWITCH_COUNT_STATUS_EVENTID:
|
case WMI_PDEV_CSA_SWITCH_COUNT_STATUS_EVENTID:
|
||||||
ath11k_wmi_pdev_csa_switch_count_status_event(ab, skb);
|
ath11k_wmi_pdev_csa_switch_count_status_event(ab, skb);
|
||||||
break;
|
break;
|
||||||
|
@ -30,7 +30,7 @@ Link: https://lore.kernel.org/r/20230517135934.16408-5-quic_rajkbhag@quicinc.com
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include <linux/elf.h>
|
#include <linux/elf.h>
|
||||||
@@ -2460,6 +2460,14 @@ static int ath11k_qmi_load_bdf_qmi(struc
|
@@ -2465,6 +2465,14 @@ static int ath11k_qmi_load_bdf_qmi(struc
|
||||||
|
|
||||||
fw_entry = ath11k_core_firmware_request(ab, ATH11K_DEFAULT_CAL_FILE);
|
fw_entry = ath11k_core_firmware_request(ab, ATH11K_DEFAULT_CAL_FILE);
|
||||||
if (IS_ERR(fw_entry)) {
|
if (IS_ERR(fw_entry)) {
|
||||||
|
@ -1,51 +0,0 @@
|
|||||||
From 6aafa1c2d3e3fea2ebe84c018003f2a91722e607 Mon Sep 17 00:00:00 2001
|
|
||||||
From: P Praneesh <quic_ppranees@quicinc.com>
|
|
||||||
Date: Tue, 6 Jun 2023 14:41:28 +0530
|
|
||||||
Subject: [PATCH] wifi: ath11k: fix memory leak in WMI firmware stats
|
|
||||||
|
|
||||||
Memory allocated for firmware pdev, vdev and beacon statistics
|
|
||||||
are not released during rmmod.
|
|
||||||
|
|
||||||
Fix it by calling ath11k_fw_stats_free() function before hardware
|
|
||||||
unregister.
|
|
||||||
|
|
||||||
While at it, avoid calling ath11k_fw_stats_free() while processing
|
|
||||||
the firmware stats received in the WMI event because the local list
|
|
||||||
is getting spliced and reinitialised and hence there are no elements
|
|
||||||
in the list after splicing.
|
|
||||||
|
|
||||||
Tested-on: QCN9074 hw1.0 PCI WLAN.HK.2.7.0.1-01744-QCAHKSWPL_SILICONZ-1
|
|
||||||
|
|
||||||
Signed-off-by: P Praneesh <quic_ppranees@quicinc.com>
|
|
||||||
Signed-off-by: Aditya Kumar Singh <quic_adisi@quicinc.com>
|
|
||||||
Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
|
|
||||||
Link: https://lore.kernel.org/r/20230606091128.14202-1-quic_adisi@quicinc.com
|
|
||||||
---
|
|
||||||
drivers/net/wireless/ath/ath11k/mac.c | 1 +
|
|
||||||
drivers/net/wireless/ath/ath11k/wmi.c | 5 +++++
|
|
||||||
2 files changed, 6 insertions(+)
|
|
||||||
|
|
||||||
--- a/drivers/net/wireless/ath/ath11k/mac.c
|
|
||||||
+++ b/drivers/net/wireless/ath/ath11k/mac.c
|
|
||||||
@@ -9792,6 +9792,7 @@ void ath11k_mac_destroy(struct ath11k_ba
|
|
||||||
if (!ar)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
+ ath11k_fw_stats_free(&ar->fw_stats);
|
|
||||||
ieee80211_free_hw(ar->hw);
|
|
||||||
pdev->ar = NULL;
|
|
||||||
}
|
|
||||||
--- a/drivers/net/wireless/ath/ath11k/wmi.c
|
|
||||||
+++ b/drivers/net/wireless/ath/ath11k/wmi.c
|
|
||||||
@@ -8119,6 +8119,11 @@ complete:
|
|
||||||
rcu_read_unlock();
|
|
||||||
spin_unlock_bh(&ar->data_lock);
|
|
||||||
|
|
||||||
+ /* Since the stats's pdev, vdev and beacon list are spliced and reinitialised
|
|
||||||
+ * at this point, no need to free the individual list.
|
|
||||||
+ */
|
|
||||||
+ return;
|
|
||||||
+
|
|
||||||
free:
|
|
||||||
ath11k_fw_stats_free(&stats);
|
|
||||||
}
|
|
@ -1,38 +0,0 @@
|
|||||||
From 16e0077e14a73866e9b0f4a6bf4ad3d4a5cb0f2a Mon Sep 17 00:00:00 2001
|
|
||||||
From: Jiasheng Jiang <jiasheng@iscas.ac.cn>
|
|
||||||
Date: Tue, 13 Jun 2023 12:19:40 +0300
|
|
||||||
Subject: [PATCH] wifi: ath11k: Add missing check for ioremap
|
|
||||||
|
|
||||||
Add check for ioremap() and return the error if it fails in order to
|
|
||||||
guarantee the success of ioremap(), same as in
|
|
||||||
ath11k_qmi_load_file_target_mem().
|
|
||||||
|
|
||||||
Fixes: 6ac04bdc5edb ("ath11k: Use reserved host DDR addresses from DT for PCI devices")
|
|
||||||
Signed-off-by: Jiasheng Jiang <jiasheng@iscas.ac.cn>
|
|
||||||
Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
|
|
||||||
Link: https://lore.kernel.org/r/20230608022858.27405-1-jiasheng@iscas.ac.cn
|
|
||||||
---
|
|
||||||
drivers/net/wireless/ath/ath11k/qmi.c | 5 +++++
|
|
||||||
1 file changed, 5 insertions(+)
|
|
||||||
|
|
||||||
--- a/drivers/net/wireless/ath/ath11k/qmi.c
|
|
||||||
+++ b/drivers/net/wireless/ath/ath11k/qmi.c
|
|
||||||
@@ -2061,6 +2061,9 @@ static int ath11k_qmi_assign_target_mem_
|
|
||||||
ab->qmi.target_mem[idx].iaddr =
|
|
||||||
ioremap(ab->qmi.target_mem[idx].paddr,
|
|
||||||
ab->qmi.target_mem[i].size);
|
|
||||||
+ if (!ab->qmi.target_mem[idx].iaddr)
|
|
||||||
+ return -EIO;
|
|
||||||
+
|
|
||||||
ab->qmi.target_mem[idx].size = ab->qmi.target_mem[i].size;
|
|
||||||
host_ddr_sz = ab->qmi.target_mem[i].size;
|
|
||||||
ab->qmi.target_mem[idx].type = ab->qmi.target_mem[i].type;
|
|
||||||
@@ -2086,6 +2089,8 @@ static int ath11k_qmi_assign_target_mem_
|
|
||||||
ab->qmi.target_mem[idx].iaddr =
|
|
||||||
ioremap(ab->qmi.target_mem[idx].paddr,
|
|
||||||
ab->qmi.target_mem[i].size);
|
|
||||||
+ if (!ab->qmi.target_mem[idx].iaddr)
|
|
||||||
+ return -EIO;
|
|
||||||
} else {
|
|
||||||
ab->qmi.target_mem[idx].paddr =
|
|
||||||
ATH11K_QMI_CALDB_ADDRESS;
|
|
@ -34,7 +34,7 @@ Link: https://lore.kernel.org/r/20230720151444.2016637-1-kvalo@kernel.org
|
|||||||
}
|
}
|
||||||
--- a/drivers/net/wireless/ath/ath11k/pcic.c
|
--- a/drivers/net/wireless/ath/ath11k/pcic.c
|
||||||
+++ b/drivers/net/wireless/ath/ath11k/pcic.c
|
+++ b/drivers/net/wireless/ath/ath11k/pcic.c
|
||||||
@@ -466,7 +466,6 @@ void ath11k_pcic_ext_irq_enable(struct a
|
@@ -464,7 +464,6 @@ void ath11k_pcic_ext_irq_enable(struct a
|
||||||
struct ath11k_ext_irq_grp *irq_grp = &ab->ext_irq_grp[i];
|
struct ath11k_ext_irq_grp *irq_grp = &ab->ext_irq_grp[i];
|
||||||
|
|
||||||
if (!irq_grp->napi_enabled) {
|
if (!irq_grp->napi_enabled) {
|
||||||
|
@ -104,14 +104,14 @@ Link: https://lore.kernel.org/r/20230726141032.3061-3-quic_rajkbhag@quicinc.com
|
|||||||
|
|
||||||
#define ATH11K_PCI_BAR_NUM 0
|
#define ATH11K_PCI_BAR_NUM 0
|
||||||
#define ATH11K_PCI_DMA_MASK 32
|
#define ATH11K_PCI_DMA_MASK 32
|
||||||
@@ -897,6 +898,7 @@ unsupported_wcn6855_soc:
|
@@ -903,6 +904,7 @@ unsupported_wcn6855_soc:
|
||||||
ath11k_err(ab, "failed to init core: %d\n", ret);
|
ath11k_err(ab, "failed to init core: %d\n", ret);
|
||||||
goto err_irq_affinity_cleanup;
|
goto err_free_irq;
|
||||||
}
|
}
|
||||||
+ ath11k_qmi_fwreset_from_cold_boot(ab);
|
+ ath11k_qmi_fwreset_from_cold_boot(ab);
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
err_irq_affinity_cleanup:
|
err_free_irq:
|
||||||
--- a/drivers/net/wireless/ath/ath11k/qmi.c
|
--- a/drivers/net/wireless/ath/ath11k/qmi.c
|
||||||
+++ b/drivers/net/wireless/ath/ath11k/qmi.c
|
+++ b/drivers/net/wireless/ath/ath11k/qmi.c
|
||||||
@@ -9,6 +9,7 @@
|
@@ -9,6 +9,7 @@
|
||||||
|
@ -1,103 +0,0 @@
|
|||||||
From 39564b475ac5a589e6c22c43a08cbd283c295d2c Mon Sep 17 00:00:00 2001
|
|
||||||
From: Baochen Qiang <quic_bqiang@quicinc.com>
|
|
||||||
Date: Thu, 7 Sep 2023 09:56:06 +0800
|
|
||||||
Subject: [PATCH] wifi: ath11k: fix boot failure with one MSI vector
|
|
||||||
|
|
||||||
Commit 5b32b6dd96633 ("ath11k: Remove core PCI references from
|
|
||||||
PCI common code") breaks with one MSI vector because it moves
|
|
||||||
affinity setting after IRQ request, see below log:
|
|
||||||
|
|
||||||
[ 1417.278835] ath11k_pci 0000:02:00.0: failed to receive control response completion, polling..
|
|
||||||
[ 1418.302829] ath11k_pci 0000:02:00.0: Service connect timeout
|
|
||||||
[ 1418.302833] ath11k_pci 0000:02:00.0: failed to connect to HTT: -110
|
|
||||||
[ 1418.303669] ath11k_pci 0000:02:00.0: failed to start core: -110
|
|
||||||
|
|
||||||
The detail is, if do affinity request after IRQ activated,
|
|
||||||
which is done in request_irq(), kernel caches that request and
|
|
||||||
returns success directly. Later when a subsequent MHI interrupt is
|
|
||||||
fired, kernel will do the real affinity setting work, as a result,
|
|
||||||
changs the MSI vector. However at that time host has configured
|
|
||||||
old vector to hardware, so host never receives CE or DP interrupts.
|
|
||||||
|
|
||||||
Fix it by setting affinity before registering MHI controller
|
|
||||||
where host is, for the first time, doing IRQ request.
|
|
||||||
|
|
||||||
Tested-on: WCN6855 hw2.0 PCI WLAN.HSP.1.1-03125-QCAHSPSWPL_V1_V2_SILICONZ_LITE-3
|
|
||||||
Tested-on: WCN6855 hw2.1 PCI WLAN.HSP.1.1-03125-QCAHSPSWPL_V1_V2_SILICONZ_LITE-3.6510.23
|
|
||||||
Tested-on: WCN6750 hw1.0 AHB WLAN.MSL.1.0.1-01160-QCAMSLSWPLZ-1
|
|
||||||
|
|
||||||
Fixes: 5b32b6dd9663 ("ath11k: Remove core PCI references from PCI common code")
|
|
||||||
Signed-off-by: Baochen Qiang <quic_bqiang@quicinc.com>
|
|
||||||
Acked-by: Jeff Johnson <quic_jjohnson@quicinc.com>
|
|
||||||
Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
|
|
||||||
Link: https://lore.kernel.org/r/20230907015606.16297-1-quic_bqiang@quicinc.com
|
|
||||||
---
|
|
||||||
drivers/net/wireless/ath/ath11k/pci.c | 24 ++++++++++++------------
|
|
||||||
1 file changed, 12 insertions(+), 12 deletions(-)
|
|
||||||
|
|
||||||
--- a/drivers/net/wireless/ath/ath11k/pci.c
|
|
||||||
+++ b/drivers/net/wireless/ath/ath11k/pci.c
|
|
||||||
@@ -852,10 +852,16 @@ unsupported_wcn6855_soc:
|
|
||||||
if (ret)
|
|
||||||
goto err_pci_disable_msi;
|
|
||||||
|
|
||||||
+ ret = ath11k_pci_set_irq_affinity_hint(ab_pci, cpumask_of(0));
|
|
||||||
+ if (ret) {
|
|
||||||
+ ath11k_err(ab, "failed to set irq affinity %d\n", ret);
|
|
||||||
+ goto err_pci_disable_msi;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
ret = ath11k_mhi_register(ab_pci);
|
|
||||||
if (ret) {
|
|
||||||
ath11k_err(ab, "failed to register mhi: %d\n", ret);
|
|
||||||
- goto err_pci_disable_msi;
|
|
||||||
+ goto err_irq_affinity_cleanup;
|
|
||||||
}
|
|
||||||
|
|
||||||
ret = ath11k_hal_srng_init(ab);
|
|
||||||
@@ -876,12 +882,6 @@ unsupported_wcn6855_soc:
|
|
||||||
goto err_ce_free;
|
|
||||||
}
|
|
||||||
|
|
||||||
- ret = ath11k_pci_set_irq_affinity_hint(ab_pci, cpumask_of(0));
|
|
||||||
- if (ret) {
|
|
||||||
- ath11k_err(ab, "failed to set irq affinity %d\n", ret);
|
|
||||||
- goto err_free_irq;
|
|
||||||
- }
|
|
||||||
-
|
|
||||||
/* kernel may allocate a dummy vector before request_irq and
|
|
||||||
* then allocate a real vector when request_irq is called.
|
|
||||||
* So get msi_data here again to avoid spurious interrupt
|
|
||||||
@@ -890,20 +890,17 @@ unsupported_wcn6855_soc:
|
|
||||||
ret = ath11k_pci_config_msi_data(ab_pci);
|
|
||||||
if (ret) {
|
|
||||||
ath11k_err(ab, "failed to config msi_data: %d\n", ret);
|
|
||||||
- goto err_irq_affinity_cleanup;
|
|
||||||
+ goto err_free_irq;
|
|
||||||
}
|
|
||||||
|
|
||||||
ret = ath11k_core_init(ab);
|
|
||||||
if (ret) {
|
|
||||||
ath11k_err(ab, "failed to init core: %d\n", ret);
|
|
||||||
- goto err_irq_affinity_cleanup;
|
|
||||||
+ goto err_free_irq;
|
|
||||||
}
|
|
||||||
ath11k_qmi_fwreset_from_cold_boot(ab);
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
-err_irq_affinity_cleanup:
|
|
||||||
- ath11k_pci_set_irq_affinity_hint(ab_pci, NULL);
|
|
||||||
-
|
|
||||||
err_free_irq:
|
|
||||||
ath11k_pcic_free_irq(ab);
|
|
||||||
|
|
||||||
@@ -916,6 +913,9 @@ err_hal_srng_deinit:
|
|
||||||
err_mhi_unregister:
|
|
||||||
ath11k_mhi_unregister(ab_pci);
|
|
||||||
|
|
||||||
+err_irq_affinity_cleanup:
|
|
||||||
+ ath11k_pci_set_irq_affinity_hint(ab_pci, NULL);
|
|
||||||
+
|
|
||||||
err_pci_disable_msi:
|
|
||||||
ath11k_pci_free_msi(ab_pci);
|
|
||||||
|
|
@ -56,7 +56,7 @@ Signed-off-by: Robert Marko <robimarko@gmail.com>
|
|||||||
int ath11k_thermal_set_throttling(struct ath11k *ar, u32 throttle_state);
|
int ath11k_thermal_set_throttling(struct ath11k *ar, u32 throttle_state);
|
||||||
--- a/local-symbols
|
--- a/local-symbols
|
||||||
+++ b/local-symbols
|
+++ b/local-symbols
|
||||||
@@ -174,6 +174,7 @@ ATH11K_DEBUG=
|
@@ -166,6 +166,7 @@ ATH11K_DEBUG=
|
||||||
ATH11K_DEBUGFS=
|
ATH11K_DEBUGFS=
|
||||||
ATH11K_TRACING=
|
ATH11K_TRACING=
|
||||||
ATH11K_SPECTRAL=
|
ATH11K_SPECTRAL=
|
||||||
|
@ -1,29 +0,0 @@
|
|||||||
From 04178918e7f6b5f34dde81ec79ee8a1ccace3be3 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Robert Marko <robimarko@gmail.com>
|
|
||||||
Date: Mon, 17 Oct 2022 11:45:03 +0200
|
|
||||||
Subject: [PATCH] wifi: ath11k: pci: fix compilation in 5.16 and older
|
|
||||||
|
|
||||||
Commit ("genirq/msi, treewide: Use a named struct for PCI/MSI attributes")
|
|
||||||
changed the msi_desc structure a bit, however that is only available in
|
|
||||||
kernels 5.17 and newer, so check for kernel version to allow compilation
|
|
||||||
in 5.16 and older.
|
|
||||||
|
|
||||||
Signed-off-by: Robert Marko <robimarko@gmail.com>
|
|
||||||
---
|
|
||||||
drivers/net/wireless/ath/ath11k/pci.c | 4 ++++
|
|
||||||
1 file changed, 4 insertions(+)
|
|
||||||
|
|
||||||
--- a/drivers/net/wireless/ath/ath11k/pci.c
|
|
||||||
+++ b/drivers/net/wireless/ath/ath11k/pci.c
|
|
||||||
@@ -459,7 +459,11 @@ static int ath11k_pci_alloc_msi(struct a
|
|
||||||
pci_read_config_dword(pci_dev, pci_dev->msi_cap + PCI_MSI_ADDRESS_LO,
|
|
||||||
&ab->pci.msi.addr_lo);
|
|
||||||
|
|
||||||
+#if (LINUX_VERSION_CODE > KERNEL_VERSION(5, 17, 0))
|
|
||||||
if (msi_desc->pci.msi_attrib.is_64) {
|
|
||||||
+#else
|
|
||||||
+ if (msi_desc->msi_attrib.is_64) {
|
|
||||||
+#endif
|
|
||||||
pci_read_config_dword(pci_dev, pci_dev->msi_cap + PCI_MSI_ADDRESS_HI,
|
|
||||||
&ab->pci.msi.addr_hi);
|
|
||||||
} else {
|
|
@ -64,7 +64,7 @@
|
|||||||
debugfs_create_devm_seqfile(sc->dev, "interrupt", sc->debug.debugfs_phy,
|
debugfs_create_devm_seqfile(sc->dev, "interrupt", sc->debug.debugfs_phy,
|
||||||
--- a/drivers/net/wireless/ath/ath.h
|
--- a/drivers/net/wireless/ath/ath.h
|
||||||
+++ b/drivers/net/wireless/ath/ath.h
|
+++ b/drivers/net/wireless/ath/ath.h
|
||||||
@@ -149,6 +149,7 @@ struct ath_common {
|
@@ -151,6 +151,7 @@ struct ath_common {
|
||||||
int debug_mask;
|
int debug_mask;
|
||||||
enum ath_device_state state;
|
enum ath_device_state state;
|
||||||
unsigned long op_flags;
|
unsigned long op_flags;
|
||||||
|
@ -1,15 +1,3 @@
|
|||||||
--- a/include/linux/ath9k_platform.h
|
|
||||||
+++ b/include/linux/ath9k_platform.h
|
|
||||||
@@ -46,6 +46,9 @@ struct ath9k_platform_data {
|
|
||||||
int (*external_reset)(void);
|
|
||||||
|
|
||||||
bool use_eeprom;
|
|
||||||
+
|
|
||||||
+ int num_leds;
|
|
||||||
+ const struct gpio_led *leds;
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif /* _LINUX_ATH9K_PLATFORM_H */
|
|
||||||
--- a/drivers/net/wireless/ath/ath9k/gpio.c
|
--- a/drivers/net/wireless/ath/ath9k/gpio.c
|
||||||
+++ b/drivers/net/wireless/ath/ath9k/gpio.c
|
+++ b/drivers/net/wireless/ath/ath9k/gpio.c
|
||||||
@@ -15,6 +15,7 @@
|
@@ -15,6 +15,7 @@
|
||||||
|
@ -125,7 +125,7 @@
|
|||||||
REG_SET_BIT(ah, AR_BTCOEX_WL_LNADIV, AR_BTCOEX_WL_LNADIV_FORCE_ON);
|
REG_SET_BIT(ah, AR_BTCOEX_WL_LNADIV, AR_BTCOEX_WL_LNADIV_FORCE_ON);
|
||||||
--- a/drivers/net/wireless/ath/ath9k/main.c
|
--- a/drivers/net/wireless/ath/ath9k/main.c
|
||||||
+++ b/drivers/net/wireless/ath/ath9k/main.c
|
+++ b/drivers/net/wireless/ath/ath9k/main.c
|
||||||
@@ -538,6 +538,11 @@ irqreturn_t ath_isr(int irq, void *dev)
|
@@ -537,6 +537,11 @@ irqreturn_t ath_isr(int irq, void *dev)
|
||||||
return IRQ_HANDLED;
|
return IRQ_HANDLED;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -128,16 +128,3 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||||||
|
|
||||||
if (pdata && pdata->leds && pdata->num_leds)
|
if (pdata && pdata->leds && pdata->num_leds)
|
||||||
for (i = 0; i < pdata->num_leds; i++) {
|
for (i = 0; i < pdata->num_leds; i++) {
|
||||||
--- a/include/linux/ath9k_platform.h
|
|
||||||
+++ b/include/linux/ath9k_platform.h
|
|
||||||
@@ -49,6 +49,10 @@ struct ath9k_platform_data {
|
|
||||||
|
|
||||||
int num_leds;
|
|
||||||
const struct gpio_led *leds;
|
|
||||||
+
|
|
||||||
+ unsigned num_btns;
|
|
||||||
+ const struct gpio_keys_button *btns;
|
|
||||||
+ unsigned btn_poll_interval;
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif /* _LINUX_ATH9K_PLATFORM_H */
|
|
||||||
|
@ -339,7 +339,7 @@
|
|||||||
|
|
||||||
static void ath9k_flush(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
|
static void ath9k_flush(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
|
||||||
u32 queues, bool drop);
|
u32 queues, bool drop);
|
||||||
@@ -659,6 +660,7 @@ void ath_reset_work(struct work_struct *
|
@@ -658,6 +659,7 @@ void ath_reset_work(struct work_struct *
|
||||||
static int ath9k_start(struct ieee80211_hw *hw)
|
static int ath9k_start(struct ieee80211_hw *hw)
|
||||||
{
|
{
|
||||||
struct ath_softc *sc = hw->priv;
|
struct ath_softc *sc = hw->priv;
|
||||||
@ -347,7 +347,7 @@
|
|||||||
struct ath_hw *ah = sc->sc_ah;
|
struct ath_hw *ah = sc->sc_ah;
|
||||||
struct ath_common *common = ath9k_hw_common(ah);
|
struct ath_common *common = ath9k_hw_common(ah);
|
||||||
struct ieee80211_channel *curchan = sc->cur_chan->chandef.chan;
|
struct ieee80211_channel *curchan = sc->cur_chan->chandef.chan;
|
||||||
@@ -737,6 +739,11 @@ static int ath9k_start(struct ieee80211_
|
@@ -736,6 +738,11 @@ static int ath9k_start(struct ieee80211_
|
||||||
AR_GPIO_OUTPUT_MUX_AS_OUTPUT);
|
AR_GPIO_OUTPUT_MUX_AS_OUTPUT);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -371,7 +371,7 @@
|
|||||||
|
|
||||||
--- a/local-symbols
|
--- a/local-symbols
|
||||||
+++ b/local-symbols
|
+++ b/local-symbols
|
||||||
@@ -129,6 +129,7 @@ ATH9K_WOW=
|
@@ -121,6 +121,7 @@ ATH9K_WOW=
|
||||||
ATH9K_RFKILL=
|
ATH9K_RFKILL=
|
||||||
ATH9K_CHANNEL_CONTEXT=
|
ATH9K_CHANNEL_CONTEXT=
|
||||||
ATH9K_PCOEM=
|
ATH9K_PCOEM=
|
||||||
|
@ -22,7 +22,7 @@
|
|||||||
static int modparam_bad_frames_preempt;
|
static int modparam_bad_frames_preempt;
|
||||||
module_param_named(bad_frames_preempt, modparam_bad_frames_preempt, int, 0444);
|
module_param_named(bad_frames_preempt, modparam_bad_frames_preempt, int, 0444);
|
||||||
MODULE_PARM_DESC(bad_frames_preempt,
|
MODULE_PARM_DESC(bad_frames_preempt,
|
||||||
@@ -2869,10 +2874,10 @@ static int b43_gpio_init(struct b43_wlde
|
@@ -2870,10 +2875,10 @@ static int b43_gpio_init(struct b43_wlde
|
||||||
u32 mask, set;
|
u32 mask, set;
|
||||||
|
|
||||||
b43_maskset32(dev, B43_MMIO_MACCTL, ~B43_MACCTL_GPOUTSMSK, 0);
|
b43_maskset32(dev, B43_MMIO_MACCTL, ~B43_MACCTL_GPOUTSMSK, 0);
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
antenna = b43_antenna_to_phyctl(antenna);
|
antenna = b43_antenna_to_phyctl(antenna);
|
||||||
ctl = b43_shm_read16(dev, B43_SHM_SHARED, B43_SHM_SH_BEACPHYCTL);
|
ctl = b43_shm_read16(dev, B43_SHM_SHARED, B43_SHM_SH_BEACPHYCTL);
|
||||||
/* We can't send beacons with short preamble. Would get PHY errors. */
|
/* We can't send beacons with short preamble. Would get PHY errors. */
|
||||||
@@ -3284,8 +3284,8 @@ static int b43_chip_init(struct b43_wlde
|
@@ -3285,8 +3285,8 @@ static int b43_chip_init(struct b43_wlde
|
||||||
|
|
||||||
/* Select the antennae */
|
/* Select the antennae */
|
||||||
if (phy->ops->set_rx_antenna)
|
if (phy->ops->set_rx_antenna)
|
||||||
@ -20,7 +20,7 @@
|
|||||||
|
|
||||||
if (phy->type == B43_PHYTYPE_B) {
|
if (phy->type == B43_PHYTYPE_B) {
|
||||||
value16 = b43_read16(dev, 0x005E);
|
value16 = b43_read16(dev, 0x005E);
|
||||||
@@ -3986,7 +3986,6 @@ static int b43_op_config(struct ieee8021
|
@@ -3988,7 +3988,6 @@ static int b43_op_config(struct ieee8021
|
||||||
struct b43_wldev *dev = wl->current_dev;
|
struct b43_wldev *dev = wl->current_dev;
|
||||||
struct b43_phy *phy = &dev->phy;
|
struct b43_phy *phy = &dev->phy;
|
||||||
struct ieee80211_conf *conf = &hw->conf;
|
struct ieee80211_conf *conf = &hw->conf;
|
||||||
@ -28,7 +28,7 @@
|
|||||||
int err = 0;
|
int err = 0;
|
||||||
|
|
||||||
mutex_lock(&wl->mutex);
|
mutex_lock(&wl->mutex);
|
||||||
@@ -4029,11 +4028,9 @@ static int b43_op_config(struct ieee8021
|
@@ -4031,11 +4030,9 @@ static int b43_op_config(struct ieee8021
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Antennas for RX and management frame TX. */
|
/* Antennas for RX and management frame TX. */
|
||||||
@ -42,7 +42,7 @@
|
|||||||
|
|
||||||
if (wl->radio_enabled != phy->radio_on) {
|
if (wl->radio_enabled != phy->radio_on) {
|
||||||
if (wl->radio_enabled) {
|
if (wl->radio_enabled) {
|
||||||
@@ -5176,6 +5173,47 @@ static int b43_op_get_survey(struct ieee
|
@@ -5178,6 +5175,47 @@ static int b43_op_get_survey(struct ieee
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -90,7 +90,7 @@
|
|||||||
static const struct ieee80211_ops b43_hw_ops = {
|
static const struct ieee80211_ops b43_hw_ops = {
|
||||||
.tx = b43_op_tx,
|
.tx = b43_op_tx,
|
||||||
.wake_tx_queue = ieee80211_handle_wake_tx_queue,
|
.wake_tx_queue = ieee80211_handle_wake_tx_queue,
|
||||||
@@ -5198,6 +5236,8 @@ static const struct ieee80211_ops b43_hw
|
@@ -5200,6 +5238,8 @@ static const struct ieee80211_ops b43_hw
|
||||||
.sw_scan_complete = b43_op_sw_scan_complete_notifier,
|
.sw_scan_complete = b43_op_sw_scan_complete_notifier,
|
||||||
.get_survey = b43_op_get_survey,
|
.get_survey = b43_op_get_survey,
|
||||||
.rfkill_poll = b43_rfkill_poll,
|
.rfkill_poll = b43_rfkill_poll,
|
||||||
@ -99,7 +99,7 @@
|
|||||||
};
|
};
|
||||||
|
|
||||||
/* Hard-reset the chip. Do not call this directly.
|
/* Hard-reset the chip. Do not call this directly.
|
||||||
@@ -5499,6 +5539,8 @@ static int b43_one_core_attach(struct b4
|
@@ -5501,6 +5541,8 @@ static int b43_one_core_attach(struct b4
|
||||||
if (!wldev)
|
if (!wldev)
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
@ -108,7 +108,7 @@
|
|||||||
wldev->use_pio = b43_modparam_pio;
|
wldev->use_pio = b43_modparam_pio;
|
||||||
wldev->dev = dev;
|
wldev->dev = dev;
|
||||||
wldev->wl = wl;
|
wldev->wl = wl;
|
||||||
@@ -5590,6 +5632,9 @@ static struct b43_wl *b43_wireless_init(
|
@@ -5592,6 +5634,9 @@ static struct b43_wl *b43_wireless_init(
|
||||||
|
|
||||||
wiphy_ext_feature_set(hw->wiphy, NL80211_EXT_FEATURE_CQM_RSSI_LIST);
|
wiphy_ext_feature_set(hw->wiphy, NL80211_EXT_FEATURE_CQM_RSSI_LIST);
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
--- a/drivers/net/wireless/broadcom/b43/main.c
|
--- a/drivers/net/wireless/broadcom/b43/main.c
|
||||||
+++ b/drivers/net/wireless/broadcom/b43/main.c
|
+++ b/drivers/net/wireless/broadcom/b43/main.c
|
||||||
@@ -2886,6 +2886,14 @@ static int b43_gpio_init(struct b43_wlde
|
@@ -2887,6 +2887,14 @@ static int b43_gpio_init(struct b43_wlde
|
||||||
} else if (dev->dev->chip_id == 0x5354) {
|
} else if (dev->dev->chip_id == 0x5354) {
|
||||||
/* Don't allow overtaking buttons GPIOs */
|
/* Don't allow overtaking buttons GPIOs */
|
||||||
set &= 0x2; /* 0x2 is LED GPIO on BCM5354 */
|
set &= 0x2; /* 0x2 is LED GPIO on BCM5354 */
|
||||||
|
@ -27,7 +27,7 @@
|
|||||||
@set -e ; test -f local-symbols || ( \
|
@set -e ; test -f local-symbols || ( \
|
||||||
echo "/--------------" ;\
|
echo "/--------------" ;\
|
||||||
echo "| You shouldn't run make in the backports tree, but only in" ;\
|
echo "| You shouldn't run make in the backports tree, but only in" ;\
|
||||||
@@ -60,58 +62,62 @@ mrproper:
|
@@ -60,57 +62,61 @@ mrproper:
|
||||||
echo "| (that isn't currently running.)" ;\
|
echo "| (that isn't currently running.)" ;\
|
||||||
echo "\\--" ;\
|
echo "\\--" ;\
|
||||||
false)
|
false)
|
||||||
@ -56,13 +56,12 @@
|
|||||||
- done \
|
- done \
|
||||||
- ) > Kconfig.kernel ;\
|
- ) > Kconfig.kernel ;\
|
||||||
- kver=$$($(MAKE) --no-print-directory -C $(KLIB_BUILD) M=$(BACKPORT_DIR) \
|
- kver=$$($(MAKE) --no-print-directory -C $(KLIB_BUILD) M=$(BACKPORT_DIR) \
|
||||||
- kernelversion | sed 's/^\(\([3-5]\|2\.6\)\.[0-9]\+\).*/\1/;t;d');\
|
- kernelversion | sed 's/^\(\([3-6]\|2\.6\)\.[0-9]\+\).*/\1/;t;d');\
|
||||||
- test "$$kver" != "" || echo "Kernel version parse failed!" ;\
|
- test "$$kver" != "" || echo "Kernel version parse failed!" ;\
|
||||||
- test "$$kver" != "" ;\
|
- test "$$kver" != "" ;\
|
||||||
- kvers="$$(seq 14 39 | sed 's/^/2.6./')" ;\
|
|
||||||
- kvers="$$kvers $$(seq 0 19 | sed 's/^/3./')" ;\
|
|
||||||
- kvers="$$kvers $$(seq 0 20 | sed 's/^/4./')" ;\
|
- kvers="$$kvers $$(seq 0 20 | sed 's/^/4./')" ;\
|
||||||
- kvers="$$kvers $$(seq 0 99 | sed 's/^/5./')" ;\
|
- kvers="$$kvers $$(seq 0 19 | sed 's/^/5./')" ;\
|
||||||
|
- kvers="$$kvers $$(seq 0 20 | sed 's/^/6./')" ;\
|
||||||
- print=0 ;\
|
- print=0 ;\
|
||||||
- for v in $$kvers ; do \
|
- for v in $$kvers ; do \
|
||||||
- if [ "$$print" = "1" ] ; then \
|
- if [ "$$print" = "1" ] ; then \
|
||||||
@ -113,13 +112,12 @@
|
|||||||
+
|
+
|
||||||
+Kconfig.versions: Kconfig.kernel
|
+Kconfig.versions: Kconfig.kernel
|
||||||
+ @kver=$$($(MAKE) --no-print-directory -C $(KLIB_BUILD) M=$(BACKPORT_DIR) \
|
+ @kver=$$($(MAKE) --no-print-directory -C $(KLIB_BUILD) M=$(BACKPORT_DIR) \
|
||||||
+ kernelversion | sed 's/^\(\([3-5]\|2\.6\)\.[0-9]\+\).*/\1/;t;d');\
|
+ kernelversion | sed 's/^\(\([3-6]\|2\.6\)\.[0-9]\+\).*/\1/;t;d');\
|
||||||
+ test "$$kver" != "" || echo "Kernel version parse failed!" ;\
|
+ test "$$kver" != "" || echo "Kernel version parse failed!" ;\
|
||||||
+ test "$$kver" != "" ;\
|
+ test "$$kver" != "" ;\
|
||||||
+ kvers="$$(seq 14 39 | sed 's/^/2.6./')" ;\
|
|
||||||
+ kvers="$$kvers $$(seq 0 19 | sed 's/^/3./')" ;\
|
|
||||||
+ kvers="$$kvers $$(seq 0 20 | sed 's/^/4./')" ;\
|
+ kvers="$$kvers $$(seq 0 20 | sed 's/^/4./')" ;\
|
||||||
+ kvers="$$kvers $$(seq 0 99 | sed 's/^/5./')" ;\
|
+ kvers="$$kvers $$(seq 0 19 | sed 's/^/5./')" ;\
|
||||||
|
+ kvers="$$kvers $$(seq 0 20 | sed 's/^/6./')" ;\
|
||||||
+ print=0 ;\
|
+ print=0 ;\
|
||||||
+ for v in $$kvers ; do \
|
+ for v in $$kvers ; do \
|
||||||
+ if [ "$$print" = "1" ] ; then \
|
+ if [ "$$print" = "1" ] ; then \
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
--- a/local-symbols
|
--- a/local-symbols
|
||||||
+++ b/local-symbols
|
+++ b/local-symbols
|
||||||
@@ -470,43 +470,6 @@ USB_VL600=
|
@@ -462,43 +462,6 @@ USB_VL600=
|
||||||
USB_NET_CH9200=
|
USB_NET_CH9200=
|
||||||
USB_NET_AQC111=
|
USB_NET_AQC111=
|
||||||
USB_RTL8153_ECM=
|
USB_RTL8153_ECM=
|
||||||
@ -90,7 +90,7 @@
|
|||||||
config B43_PHY_G
|
config B43_PHY_G
|
||||||
--- a/drivers/net/wireless/broadcom/b43/main.c
|
--- a/drivers/net/wireless/broadcom/b43/main.c
|
||||||
+++ b/drivers/net/wireless/broadcom/b43/main.c
|
+++ b/drivers/net/wireless/broadcom/b43/main.c
|
||||||
@@ -2853,7 +2853,7 @@ static struct ssb_device *b43_ssb_gpio_d
|
@@ -2854,7 +2854,7 @@ static struct ssb_device *b43_ssb_gpio_d
|
||||||
{
|
{
|
||||||
struct ssb_bus *bus = dev->dev->sdev->bus;
|
struct ssb_bus *bus = dev->dev->sdev->bus;
|
||||||
|
|
||||||
@ -99,7 +99,7 @@
|
|||||||
return (bus->chipco.dev ? bus->chipco.dev : bus->pcicore.dev);
|
return (bus->chipco.dev ? bus->chipco.dev : bus->pcicore.dev);
|
||||||
#else
|
#else
|
||||||
return bus->chipco.dev;
|
return bus->chipco.dev;
|
||||||
@@ -4871,7 +4871,7 @@ static int b43_wireless_core_init(struct
|
@@ -4873,7 +4873,7 @@ static int b43_wireless_core_init(struct
|
||||||
}
|
}
|
||||||
if (sprom->boardflags_lo & B43_BFL_XTAL_NOSLOW)
|
if (sprom->boardflags_lo & B43_BFL_XTAL_NOSLOW)
|
||||||
hf |= B43_HF_DSCRQ; /* Disable slowclock requests from ucode. */
|
hf |= B43_HF_DSCRQ; /* Disable slowclock requests from ucode. */
|
||||||
@ -171,7 +171,7 @@
|
|||||||
depends on CORDIC
|
depends on CORDIC
|
||||||
--- a/Kconfig.local
|
--- a/Kconfig.local
|
||||||
+++ b/Kconfig.local
|
+++ b/Kconfig.local
|
||||||
@@ -1414,117 +1414,6 @@ config BACKPORTED_USB_NET_AQC111
|
@@ -1390,117 +1390,6 @@ config BACKPORTED_USB_NET_AQC111
|
||||||
config BACKPORTED_USB_RTL8153_ECM
|
config BACKPORTED_USB_RTL8153_ECM
|
||||||
tristate
|
tristate
|
||||||
default USB_RTL8153_ECM
|
default USB_RTL8153_ECM
|
||||||
@ -303,7 +303,7 @@
|
|||||||
source "$BACKPORT_DIR/drivers/staging/Kconfig"
|
source "$BACKPORT_DIR/drivers/staging/Kconfig"
|
||||||
--- a/Makefile.kernel
|
--- a/Makefile.kernel
|
||||||
+++ b/Makefile.kernel
|
+++ b/Makefile.kernel
|
||||||
@@ -43,8 +43,6 @@ obj-$(CPTCFG_QRTR) += net/qrtr/
|
@@ -42,8 +42,6 @@ obj-$(CPTCFG_QRTR) += net/qrtr/
|
||||||
obj-$(CPTCFG_QCOM_QMI_HELPERS) += drivers/soc/qcom/
|
obj-$(CPTCFG_QCOM_QMI_HELPERS) += drivers/soc/qcom/
|
||||||
obj-$(CPTCFG_MHI_BUS) += drivers/bus/mhi/
|
obj-$(CPTCFG_MHI_BUS) += drivers/bus/mhi/
|
||||||
obj-$(CPTCFG_WLAN) += drivers/net/wireless/
|
obj-$(CPTCFG_WLAN) += drivers/net/wireless/
|
||||||
|
@ -1,24 +0,0 @@
|
|||||||
--- a/drivers/net/wireless/mac80211_hwsim.c
|
|
||||||
+++ b/drivers/net/wireless/mac80211_hwsim.c
|
|
||||||
@@ -5363,7 +5363,9 @@ static struct genl_family hwsim_genl_fam
|
|
||||||
.module = THIS_MODULE,
|
|
||||||
.small_ops = hwsim_ops,
|
|
||||||
.n_small_ops = ARRAY_SIZE(hwsim_ops),
|
|
||||||
+#if LINUX_VERSION_IS_GEQ(6,1,0)
|
|
||||||
.resv_start_op = HWSIM_CMD_DEL_MAC_ADDR + 1,
|
|
||||||
+#endif
|
|
||||||
.mcgrps = hwsim_mcgrps,
|
|
||||||
.n_mcgrps = ARRAY_SIZE(hwsim_mcgrps),
|
|
||||||
};
|
|
||||||
--- a/net/wireless/nl80211.c
|
|
||||||
+++ b/net/wireless/nl80211.c
|
|
||||||
@@ -17233,7 +17233,9 @@ static struct genl_family nl80211_fam __
|
|
||||||
.n_ops = ARRAY_SIZE(nl80211_ops),
|
|
||||||
.small_ops = nl80211_small_ops,
|
|
||||||
.n_small_ops = ARRAY_SIZE(nl80211_small_ops),
|
|
||||||
+#if LINUX_VERSION_IS_GEQ(6,1,0)
|
|
||||||
.resv_start_op = NL80211_CMD_REMOVE_LINK_STA + 1,
|
|
||||||
+#endif
|
|
||||||
.mcgrps = nl80211_mcgrps,
|
|
||||||
.n_mcgrps = ARRAY_SIZE(nl80211_mcgrps),
|
|
||||||
.parallel_ops = true,
|
|
@ -32,7 +32,7 @@ Signed-off-by: Robert Marko <robimarko@gmail.com>
|
|||||||
source "$BACKPORT_DIR/drivers/net/usb/Kconfig"
|
source "$BACKPORT_DIR/drivers/net/usb/Kconfig"
|
||||||
--- a/Makefile.kernel
|
--- a/Makefile.kernel
|
||||||
+++ b/Makefile.kernel
|
+++ b/Makefile.kernel
|
||||||
@@ -39,9 +39,7 @@ obj-y += compat/
|
@@ -38,9 +38,7 @@ obj-y += compat/
|
||||||
|
|
||||||
obj-$(CPTCFG_CFG80211) += net/wireless/
|
obj-$(CPTCFG_CFG80211) += net/wireless/
|
||||||
obj-$(CPTCFG_MAC80211) += net/mac80211/
|
obj-$(CPTCFG_MAC80211) += net/mac80211/
|
||||||
@ -59,7 +59,7 @@ Signed-off-by: Robert Marko <robimarko@gmail.com>
|
|||||||
|
|
||||||
--- a/local-symbols
|
--- a/local-symbols
|
||||||
+++ b/local-symbols
|
+++ b/local-symbols
|
||||||
@@ -65,14 +65,6 @@ MAC80211_MESH_PS_DEBUG=
|
@@ -57,14 +57,6 @@ MAC80211_MESH_PS_DEBUG=
|
||||||
MAC80211_TDLS_DEBUG=
|
MAC80211_TDLS_DEBUG=
|
||||||
MAC80211_DEBUG_COUNTERS=
|
MAC80211_DEBUG_COUNTERS=
|
||||||
MAC80211_STA_HASH_MAX_SIZE=
|
MAC80211_STA_HASH_MAX_SIZE=
|
||||||
|
@ -1,11 +0,0 @@
|
|||||||
--- a/backport-include/linux/skbuff.h
|
|
||||||
+++ b/backport-include/linux/skbuff.h
|
|
||||||
@@ -144,4 +144,8 @@ static inline u64 skb_get_kcov_handle(st
|
|
||||||
#define napi_build_skb build_skb
|
|
||||||
#endif
|
|
||||||
|
|
||||||
+#if LINUX_VERSION_IS_LESS(5,11,0)
|
|
||||||
+#define napi_build_skb build_skb
|
|
||||||
+#endif
|
|
||||||
+
|
|
||||||
#endif /* __BACKPORT_SKBUFF_H */
|
|
@ -177,7 +177,7 @@ Signed-off-by: Pali Rohár <pali@kernel.org>
|
|||||||
adapter->cmd_wait_q.status = -1;
|
adapter->cmd_wait_q.status = -1;
|
||||||
--- a/drivers/net/wireless/marvell/mwifiex/uap_cmd.c
|
--- a/drivers/net/wireless/marvell/mwifiex/uap_cmd.c
|
||||||
+++ b/drivers/net/wireless/marvell/mwifiex/uap_cmd.c
|
+++ b/drivers/net/wireless/marvell/mwifiex/uap_cmd.c
|
||||||
@@ -794,7 +794,8 @@ int mwifiex_uap_prepare_cmd(struct mwifi
|
@@ -802,7 +802,8 @@ int mwifiex_uap_prepare_cmd(struct mwifi
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
mwifiex_dbg(priv->adapter, ERROR,
|
mwifiex_dbg(priv->adapter, ERROR,
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
--- a/local-symbols
|
--- a/local-symbols
|
||||||
+++ b/local-symbols
|
+++ b/local-symbols
|
||||||
@@ -347,6 +347,7 @@ RT2X00_LIB_FIRMWARE=
|
@@ -339,6 +339,7 @@ RT2X00_LIB_FIRMWARE=
|
||||||
RT2X00_LIB_CRYPTO=
|
RT2X00_LIB_CRYPTO=
|
||||||
RT2X00_LIB_LEDS=
|
RT2X00_LIB_LEDS=
|
||||||
RT2X00_LIB_DEBUGFS=
|
RT2X00_LIB_DEBUGFS=
|
||||||
@ -127,7 +127,7 @@
|
|||||||
DECLARE_KFIFO_PTR(txstatus_fifo, u32);
|
DECLARE_KFIFO_PTR(txstatus_fifo, u32);
|
||||||
--- a/drivers/net/wireless/ralink/rt2x00/rt2x00dev.c
|
--- a/drivers/net/wireless/ralink/rt2x00/rt2x00dev.c
|
||||||
+++ b/drivers/net/wireless/ralink/rt2x00/rt2x00dev.c
|
+++ b/drivers/net/wireless/ralink/rt2x00/rt2x00dev.c
|
||||||
@@ -1419,6 +1419,10 @@ int rt2x00lib_probe_dev(struct rt2x00_de
|
@@ -1423,6 +1423,10 @@ int rt2x00lib_probe_dev(struct rt2x00_de
|
||||||
INIT_DELAYED_WORK(&rt2x00dev->autowakeup_work, rt2x00lib_autowakeup);
|
INIT_DELAYED_WORK(&rt2x00dev->autowakeup_work, rt2x00lib_autowakeup);
|
||||||
INIT_WORK(&rt2x00dev->sleep_work, rt2x00lib_sleep);
|
INIT_WORK(&rt2x00dev->sleep_work, rt2x00lib_sleep);
|
||||||
|
|
||||||
@ -138,7 +138,7 @@
|
|||||||
/*
|
/*
|
||||||
* Let the driver probe the device to detect the capabilities.
|
* Let the driver probe the device to detect the capabilities.
|
||||||
*/
|
*/
|
||||||
@@ -1559,6 +1563,11 @@ void rt2x00lib_remove_dev(struct rt2x00_
|
@@ -1563,6 +1567,11 @@ void rt2x00lib_remove_dev(struct rt2x00_
|
||||||
* Free the driver data.
|
* Free the driver data.
|
||||||
*/
|
*/
|
||||||
kfree(rt2x00dev->drv_data);
|
kfree(rt2x00dev->drv_data);
|
||||||
|
@ -12,7 +12,7 @@
|
|||||||
#endif /* _RT2X00_PLATFORM_H */
|
#endif /* _RT2X00_PLATFORM_H */
|
||||||
--- a/drivers/net/wireless/ralink/rt2x00/rt2x00dev.c
|
--- a/drivers/net/wireless/ralink/rt2x00/rt2x00dev.c
|
||||||
+++ b/drivers/net/wireless/ralink/rt2x00/rt2x00dev.c
|
+++ b/drivers/net/wireless/ralink/rt2x00/rt2x00dev.c
|
||||||
@@ -1007,6 +1007,22 @@ static int rt2x00lib_probe_hw_modes(stru
|
@@ -1008,6 +1008,22 @@ static int rt2x00lib_probe_hw_modes(stru
|
||||||
unsigned int num_rates;
|
unsigned int num_rates;
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
--- a/drivers/net/wireless/ralink/rt2x00/rt2x00dev.c
|
--- a/drivers/net/wireless/ralink/rt2x00/rt2x00dev.c
|
||||||
+++ b/drivers/net/wireless/ralink/rt2x00/rt2x00dev.c
|
+++ b/drivers/net/wireless/ralink/rt2x00/rt2x00dev.c
|
||||||
@@ -989,6 +989,12 @@ static void rt2x00lib_rate(struct ieee80
|
@@ -990,6 +990,12 @@ static void rt2x00lib_rate(struct ieee80
|
||||||
|
|
||||||
void rt2x00lib_set_mac_address(struct rt2x00_dev *rt2x00dev, u8 *eeprom_mac_addr)
|
void rt2x00lib_set_mac_address(struct rt2x00_dev *rt2x00dev, u8 *eeprom_mac_addr)
|
||||||
{
|
{
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
--- a/drivers/net/wireless/ralink/rt2x00/rt2x00dev.c
|
--- a/drivers/net/wireless/ralink/rt2x00/rt2x00dev.c
|
||||||
+++ b/drivers/net/wireless/ralink/rt2x00/rt2x00dev.c
|
+++ b/drivers/net/wireless/ralink/rt2x00/rt2x00dev.c
|
||||||
@@ -1012,6 +1012,16 @@ static int rt2x00lib_probe_hw_modes(stru
|
@@ -1013,6 +1013,16 @@ static int rt2x00lib_probe_hw_modes(stru
|
||||||
struct ieee80211_rate *rates;
|
struct ieee80211_rate *rates;
|
||||||
unsigned int num_rates;
|
unsigned int num_rates;
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
--- a/drivers/net/wireless/ralink/rt2x00/rt2x00dev.c
|
--- a/drivers/net/wireless/ralink/rt2x00/rt2x00dev.c
|
||||||
+++ b/drivers/net/wireless/ralink/rt2x00/rt2x00dev.c
|
+++ b/drivers/net/wireless/ralink/rt2x00/rt2x00dev.c
|
||||||
@@ -1358,7 +1358,7 @@ static inline void rt2x00lib_set_if_comb
|
@@ -1362,7 +1362,7 @@ static inline void rt2x00lib_set_if_comb
|
||||||
*/
|
*/
|
||||||
if_limit = &rt2x00dev->if_limits_ap;
|
if_limit = &rt2x00dev->if_limits_ap;
|
||||||
if_limit->max = rt2x00dev->ops->max_ap_intf;
|
if_limit->max = rt2x00dev->ops->max_ap_intf;
|
||||||
|
@ -39,8 +39,8 @@ Signed-off-by: Shiji Yang <yangshiji66@outlook.com>
|
|||||||
- }
|
- }
|
||||||
}
|
}
|
||||||
|
|
||||||
static void rt2800_config_alc_rt6352(struct rt2x00_dev *rt2x00dev,
|
static void rt2800_config_alc(struct rt2x00_dev *rt2x00dev,
|
||||||
@@ -4457,89 +4449,63 @@ static void rt2800_config_channel(struct
|
@@ -4438,89 +4430,63 @@ static void rt2800_config_channel(struct
|
||||||
usleep_range(1000, 1500);
|
usleep_range(1000, 1500);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -174,7 +174,7 @@ Signed-off-by: Shiji Yang <yangshiji66@outlook.com>
|
|||||||
}
|
}
|
||||||
|
|
||||||
bbp = rt2800_bbp_read(rt2x00dev, 4);
|
bbp = rt2800_bbp_read(rt2x00dev, 4);
|
||||||
@@ -5649,43 +5615,6 @@ void rt2800_vco_calibration(struct rt2x0
|
@@ -5630,43 +5596,6 @@ void rt2800_vco_calibration(struct rt2x0
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
rt2800_register_write(rt2x00dev, TX_PIN_CFG, tx_pin);
|
rt2800_register_write(rt2x00dev, TX_PIN_CFG, tx_pin);
|
||||||
@ -218,7 +218,7 @@ Signed-off-by: Shiji Yang <yangshiji66@outlook.com>
|
|||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(rt2800_vco_calibration);
|
EXPORT_SYMBOL_GPL(rt2800_vco_calibration);
|
||||||
|
|
||||||
@@ -8650,7 +8579,7 @@ static void rt2800_r_calibration(struct
|
@@ -8631,7 +8560,7 @@ static void rt2800_r_calibration(struct
|
||||||
rt2x00_warn(rt2x00dev, "Wait MAC Tx Status to MAX !!!\n");
|
rt2x00_warn(rt2x00dev, "Wait MAC Tx Status to MAX !!!\n");
|
||||||
|
|
||||||
maccfg = rt2800_register_read(rt2x00dev, MAC_SYS_CTRL);
|
maccfg = rt2800_register_read(rt2x00dev, MAC_SYS_CTRL);
|
||||||
@ -227,7 +227,7 @@ Signed-off-by: Shiji Yang <yangshiji66@outlook.com>
|
|||||||
rt2800_register_write(rt2x00dev, MAC_SYS_CTRL, maccfg);
|
rt2800_register_write(rt2x00dev, MAC_SYS_CTRL, maccfg);
|
||||||
|
|
||||||
if (unlikely(rt2800_wait_bbp_rf_ready(rt2x00dev, MAC_STATUS_CFG_BBP_RF_BUSY_RX)))
|
if (unlikely(rt2800_wait_bbp_rf_ready(rt2x00dev, MAC_STATUS_CFG_BBP_RF_BUSY_RX)))
|
||||||
@@ -10688,30 +10617,143 @@ static void rt2800_init_rfcsr_6352(struc
|
@@ -10669,30 +10598,143 @@ static void rt2800_init_rfcsr_6352(struc
|
||||||
rt2800_rfcsr_write_dccal(rt2x00dev, 5, 0x00);
|
rt2800_rfcsr_write_dccal(rt2x00dev, 5, 0x00);
|
||||||
rt2800_rfcsr_write_dccal(rt2x00dev, 17, 0x7C);
|
rt2800_rfcsr_write_dccal(rt2x00dev, 17, 0x7C);
|
||||||
}
|
}
|
||||||
@ -385,7 +385,7 @@ Signed-off-by: Shiji Yang <yangshiji66@outlook.com>
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -10804,6 +10846,10 @@ int rt2800_enable_radio(struct rt2x00_de
|
@@ -10785,6 +10827,10 @@ int rt2800_enable_radio(struct rt2x00_de
|
||||||
rt2800_init_bbp(rt2x00dev);
|
rt2800_init_bbp(rt2x00dev);
|
||||||
rt2800_init_rfcsr(rt2x00dev);
|
rt2800_init_rfcsr(rt2x00dev);
|
||||||
|
|
||||||
|
@ -9,7 +9,7 @@ Used for AP+STA support in OpenWrt - preserve AP mode keys across STA reconnect
|
|||||||
|
|
||||||
--- a/net/mac80211/cfg.c
|
--- a/net/mac80211/cfg.c
|
||||||
+++ b/net/mac80211/cfg.c
|
+++ b/net/mac80211/cfg.c
|
||||||
@@ -1519,7 +1519,6 @@ static int ieee80211_stop_ap(struct wiph
|
@@ -1523,7 +1523,6 @@ static int ieee80211_stop_ap(struct wiph
|
||||||
link_conf->bssid_indicator = 0;
|
link_conf->bssid_indicator = 0;
|
||||||
|
|
||||||
__sta_info_flush(sdata, true);
|
__sta_info_flush(sdata, true);
|
||||||
|
@ -8,7 +8,7 @@ Subject: [PATCH] mac80211: allow scans in access point mode (for site survey)
|
|||||||
|
|
||||||
--- a/net/mac80211/cfg.c
|
--- a/net/mac80211/cfg.c
|
||||||
+++ b/net/mac80211/cfg.c
|
+++ b/net/mac80211/cfg.c
|
||||||
@@ -2727,6 +2727,8 @@ static int ieee80211_scan(struct wiphy *
|
@@ -2733,6 +2733,8 @@ static int ieee80211_scan(struct wiphy *
|
||||||
*/
|
*/
|
||||||
fallthrough;
|
fallthrough;
|
||||||
case NL80211_IFTYPE_AP:
|
case NL80211_IFTYPE_AP:
|
||||||
|
@ -28,7 +28,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
|||||||
|
|
||||||
--- a/net/mac80211/sta_info.c
|
--- a/net/mac80211/sta_info.c
|
||||||
+++ b/net/mac80211/sta_info.c
|
+++ b/net/mac80211/sta_info.c
|
||||||
@@ -554,6 +554,7 @@ __sta_info_alloc(struct ieee80211_sub_if
|
@@ -557,6 +557,7 @@ __sta_info_alloc(struct ieee80211_sub_if
|
||||||
INIT_WORK(&sta->drv_deliver_wk, sta_deliver_ps_frames);
|
INIT_WORK(&sta->drv_deliver_wk, sta_deliver_ps_frames);
|
||||||
INIT_WORK(&sta->ampdu_mlme.work, ieee80211_ba_session_work);
|
INIT_WORK(&sta->ampdu_mlme.work, ieee80211_ba_session_work);
|
||||||
mutex_init(&sta->ampdu_mlme.mtx);
|
mutex_init(&sta->ampdu_mlme.mtx);
|
||||||
|
@ -23,7 +23,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||||||
|
|
||||||
--- a/net/mac80211/tx.c
|
--- a/net/mac80211/tx.c
|
||||||
+++ b/net/mac80211/tx.c
|
+++ b/net/mac80211/tx.c
|
||||||
@@ -3984,7 +3984,7 @@ struct ieee80211_txq *ieee80211_next_txq
|
@@ -3992,7 +3992,7 @@ struct ieee80211_txq *ieee80211_next_txq
|
||||||
|
|
||||||
if (deficit < 0)
|
if (deficit < 0)
|
||||||
sta->airtime[txqi->txq.ac].deficit +=
|
sta->airtime[txqi->txq.ac].deficit +=
|
||||||
@ -32,7 +32,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||||||
|
|
||||||
if (deficit < 0 || !aql_check) {
|
if (deficit < 0 || !aql_check) {
|
||||||
list_move_tail(&txqi->schedule_order,
|
list_move_tail(&txqi->schedule_order,
|
||||||
@@ -4127,7 +4127,8 @@ bool ieee80211_txq_may_transmit(struct i
|
@@ -4135,7 +4135,8 @@ bool ieee80211_txq_may_transmit(struct i
|
||||||
}
|
}
|
||||||
sta = container_of(iter->txq.sta, struct sta_info, sta);
|
sta = container_of(iter->txq.sta, struct sta_info, sta);
|
||||||
if (ieee80211_sta_deficit(sta, ac) < 0)
|
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]);
|
list_move_tail(&iter->schedule_order, &local->active_txqs[ac]);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -4135,7 +4136,7 @@ bool ieee80211_txq_may_transmit(struct i
|
@@ -4143,7 +4144,7 @@ bool ieee80211_txq_may_transmit(struct i
|
||||||
if (sta->airtime[ac].deficit >= 0)
|
if (sta->airtime[ac].deficit >= 0)
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
|
@ -51,7 +51,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
|||||||
*
|
*
|
||||||
* Drivers can optionally delegate responsibility for scheduling queues to
|
* Drivers can optionally delegate responsibility for scheduling queues to
|
||||||
* mac80211, to take advantage of airtime fairness accounting. In this case, to
|
* mac80211, to take advantage of airtime fairness accounting. In this case, to
|
||||||
@@ -2248,8 +2249,8 @@ struct ieee80211_link_sta {
|
@@ -2257,8 +2258,8 @@ struct ieee80211_link_sta {
|
||||||
* For non MLO STA it will point to the deflink data. For MLO 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.
|
* ieee80211_sta_recalc_aggregates() must be called to update it.
|
||||||
* @support_p2p_ps: indicates whether the STA supports P2P PS mechanism or not.
|
* @support_p2p_ps: indicates whether the STA supports P2P PS mechanism or not.
|
||||||
@ -62,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
|
* @deflink: This holds the default link STA information, for non MLO STA all link
|
||||||
* specific STA information is accessed through @deflink or through
|
* specific STA information is accessed through @deflink or through
|
||||||
* link[0] which points to address of @deflink. For MLO Link STA
|
* link[0] which points to address of @deflink. For MLO Link STA
|
||||||
@@ -5687,7 +5688,7 @@ void ieee80211_key_replay(struct ieee802
|
@@ -5700,7 +5701,7 @@ void ieee80211_key_replay(struct ieee802
|
||||||
* @hw: pointer as obtained from ieee80211_alloc_hw().
|
* @hw: pointer as obtained from ieee80211_alloc_hw().
|
||||||
* @queue: queue number (counted from zero).
|
* @queue: queue number (counted from zero).
|
||||||
*
|
*
|
||||||
@ -71,7 +71,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
|||||||
*/
|
*/
|
||||||
void ieee80211_wake_queue(struct ieee80211_hw *hw, int queue);
|
void ieee80211_wake_queue(struct ieee80211_hw *hw, int queue);
|
||||||
|
|
||||||
@@ -5696,7 +5697,7 @@ void ieee80211_wake_queue(struct ieee802
|
@@ -5709,7 +5710,7 @@ void ieee80211_wake_queue(struct ieee802
|
||||||
* @hw: pointer as obtained from ieee80211_alloc_hw().
|
* @hw: pointer as obtained from ieee80211_alloc_hw().
|
||||||
* @queue: queue number (counted from zero).
|
* @queue: queue number (counted from zero).
|
||||||
*
|
*
|
||||||
@ -80,7 +80,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
|||||||
*/
|
*/
|
||||||
void ieee80211_stop_queue(struct ieee80211_hw *hw, int queue);
|
void ieee80211_stop_queue(struct ieee80211_hw *hw, int queue);
|
||||||
|
|
||||||
@@ -5705,7 +5706,7 @@ void ieee80211_stop_queue(struct ieee802
|
@@ -5718,7 +5719,7 @@ void ieee80211_stop_queue(struct ieee802
|
||||||
* @hw: pointer as obtained from ieee80211_alloc_hw().
|
* @hw: pointer as obtained from ieee80211_alloc_hw().
|
||||||
* @queue: queue number (counted from zero).
|
* @queue: queue number (counted from zero).
|
||||||
*
|
*
|
||||||
@ -89,7 +89,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
|||||||
*
|
*
|
||||||
* Return: %true if the queue is stopped. %false otherwise.
|
* Return: %true if the queue is stopped. %false otherwise.
|
||||||
*/
|
*/
|
||||||
@@ -5716,7 +5717,7 @@ int ieee80211_queue_stopped(struct ieee8
|
@@ -5729,7 +5730,7 @@ int ieee80211_queue_stopped(struct ieee8
|
||||||
* ieee80211_stop_queues - stop all queues
|
* ieee80211_stop_queues - stop all queues
|
||||||
* @hw: pointer as obtained from ieee80211_alloc_hw().
|
* @hw: pointer as obtained from ieee80211_alloc_hw().
|
||||||
*
|
*
|
||||||
@ -98,7 +98,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
|||||||
*/
|
*/
|
||||||
void ieee80211_stop_queues(struct ieee80211_hw *hw);
|
void ieee80211_stop_queues(struct ieee80211_hw *hw);
|
||||||
|
|
||||||
@@ -5724,7 +5725,7 @@ void ieee80211_stop_queues(struct ieee80
|
@@ -5737,7 +5738,7 @@ void ieee80211_stop_queues(struct ieee80
|
||||||
* ieee80211_wake_queues - wake all queues
|
* ieee80211_wake_queues - wake all queues
|
||||||
* @hw: pointer as obtained from ieee80211_alloc_hw().
|
* @hw: pointer as obtained from ieee80211_alloc_hw().
|
||||||
*
|
*
|
||||||
@ -107,7 +107,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
|||||||
*/
|
*/
|
||||||
void ieee80211_wake_queues(struct ieee80211_hw *hw);
|
void ieee80211_wake_queues(struct ieee80211_hw *hw);
|
||||||
|
|
||||||
@@ -6946,6 +6947,18 @@ static inline struct sk_buff *ieee80211_
|
@@ -6960,6 +6961,18 @@ static inline struct sk_buff *ieee80211_
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -36,7 +36,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
|||||||
.remove_interface = ar5523_remove_interface,
|
.remove_interface = ar5523_remove_interface,
|
||||||
--- a/drivers/net/wireless/ath/ath11k/mac.c
|
--- a/drivers/net/wireless/ath/ath11k/mac.c
|
||||||
+++ b/drivers/net/wireless/ath/ath11k/mac.c
|
+++ b/drivers/net/wireless/ath/ath11k/mac.c
|
||||||
@@ -8587,6 +8587,7 @@ err_fallback:
|
@@ -8592,6 +8592,7 @@ err_fallback:
|
||||||
|
|
||||||
static const struct ieee80211_ops ath11k_ops = {
|
static const struct ieee80211_ops ath11k_ops = {
|
||||||
.tx = ath11k_mac_op_tx,
|
.tx = ath11k_mac_op_tx,
|
||||||
@ -96,7 +96,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
|||||||
.config = at76_config,
|
.config = at76_config,
|
||||||
--- a/drivers/net/wireless/broadcom/b43/main.c
|
--- a/drivers/net/wireless/broadcom/b43/main.c
|
||||||
+++ b/drivers/net/wireless/broadcom/b43/main.c
|
+++ b/drivers/net/wireless/broadcom/b43/main.c
|
||||||
@@ -5171,6 +5171,7 @@ static int b43_op_get_survey(struct ieee
|
@@ -5173,6 +5173,7 @@ static int b43_op_get_survey(struct ieee
|
||||||
|
|
||||||
static const struct ieee80211_ops b43_hw_ops = {
|
static const struct ieee80211_ops b43_hw_ops = {
|
||||||
.tx = b43_op_tx,
|
.tx = b43_op_tx,
|
||||||
@ -306,7 +306,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
|||||||
.add_interface = rtl8187_add_interface,
|
.add_interface = rtl8187_add_interface,
|
||||||
--- a/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_core.c
|
--- a/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_core.c
|
||||||
+++ b/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_core.c
|
+++ b/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_core.c
|
||||||
@@ -6548,6 +6548,7 @@ static void rtl8xxxu_stop(struct ieee802
|
@@ -6546,6 +6546,7 @@ static void rtl8xxxu_stop(struct ieee802
|
||||||
|
|
||||||
static const struct ieee80211_ops rtl8xxxu_ops = {
|
static const struct ieee80211_ops rtl8xxxu_ops = {
|
||||||
.tx = rtl8xxxu_tx,
|
.tx = rtl8xxxu_tx,
|
||||||
@ -326,7 +326,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
|||||||
.change_interface = rtl_op_change_interface,
|
.change_interface = rtl_op_change_interface,
|
||||||
--- a/drivers/net/wireless/realtek/rtw88/mac80211.c
|
--- a/drivers/net/wireless/realtek/rtw88/mac80211.c
|
||||||
+++ b/drivers/net/wireless/realtek/rtw88/mac80211.c
|
+++ b/drivers/net/wireless/realtek/rtw88/mac80211.c
|
||||||
@@ -896,6 +896,7 @@ static void rtw_ops_sta_rc_update(struct
|
@@ -892,6 +892,7 @@ static void rtw_ops_sta_rc_update(struct
|
||||||
|
|
||||||
const struct ieee80211_ops rtw_ops = {
|
const struct ieee80211_ops rtw_ops = {
|
||||||
.tx = rtw_ops_tx,
|
.tx = rtw_ops_tx,
|
||||||
@ -336,7 +336,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
|||||||
.stop = rtw_ops_stop,
|
.stop = rtw_ops_stop,
|
||||||
--- a/drivers/net/wireless/realtek/rtw89/mac80211.c
|
--- a/drivers/net/wireless/realtek/rtw89/mac80211.c
|
||||||
+++ b/drivers/net/wireless/realtek/rtw89/mac80211.c
|
+++ b/drivers/net/wireless/realtek/rtw89/mac80211.c
|
||||||
@@ -918,6 +918,7 @@ static int rtw89_ops_set_tid_config(stru
|
@@ -916,6 +916,7 @@ static int rtw89_ops_set_tid_config(stru
|
||||||
|
|
||||||
const struct ieee80211_ops rtw89_ops = {
|
const struct ieee80211_ops rtw89_ops = {
|
||||||
.tx = rtw89_ops_tx,
|
.tx = rtw89_ops_tx,
|
||||||
|
@ -11,7 +11,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
|||||||
|
|
||||||
--- a/net/mac80211/cfg.c
|
--- a/net/mac80211/cfg.c
|
||||||
+++ b/net/mac80211/cfg.c
|
+++ b/net/mac80211/cfg.c
|
||||||
@@ -4346,9 +4346,6 @@ static int ieee80211_get_txq_stats(struc
|
@@ -4357,9 +4357,6 @@ static int ieee80211_get_txq_stats(struc
|
||||||
struct ieee80211_sub_if_data *sdata;
|
struct ieee80211_sub_if_data *sdata;
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
|
|
||||||
@ -63,7 +63,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
|||||||
NL80211_EXT_FEATURE_AQL))
|
NL80211_EXT_FEATURE_AQL))
|
||||||
--- a/net/mac80211/ieee80211_i.h
|
--- a/net/mac80211/ieee80211_i.h
|
||||||
+++ b/net/mac80211/ieee80211_i.h
|
+++ b/net/mac80211/ieee80211_i.h
|
||||||
@@ -2294,7 +2294,6 @@ void ieee80211_wake_queue_by_reason(stru
|
@@ -2300,7 +2300,6 @@ void ieee80211_wake_queue_by_reason(stru
|
||||||
void ieee80211_stop_queue_by_reason(struct ieee80211_hw *hw, int queue,
|
void ieee80211_stop_queue_by_reason(struct ieee80211_hw *hw, int queue,
|
||||||
enum queue_stop_reason reason,
|
enum queue_stop_reason reason,
|
||||||
bool refcounted);
|
bool refcounted);
|
||||||
@ -86,13 +86,25 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
|||||||
ieee80211_roc_purge(local, sdata);
|
ieee80211_roc_purge(local, sdata);
|
||||||
|
|
||||||
switch (sdata->vif.type) {
|
switch (sdata->vif.type) {
|
||||||
@@ -813,13 +807,6 @@ static void ieee80211_uninit(struct net_
|
@@ -813,25 +807,6 @@ static void ieee80211_uninit(struct net_
|
||||||
ieee80211_teardown_sdata(IEEE80211_DEV_TO_SUB_IF(dev));
|
ieee80211_teardown_sdata(IEEE80211_DEV_TO_SUB_IF(dev));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
-#if LINUX_VERSION_IS_GEQ(5,2,0)
|
||||||
-static u16 ieee80211_netdev_select_queue(struct net_device *dev,
|
-static u16 ieee80211_netdev_select_queue(struct net_device *dev,
|
||||||
- struct sk_buff *skb,
|
- struct sk_buff *skb,
|
||||||
- struct net_device *sb_dev)
|
- struct net_device *sb_dev)
|
||||||
|
-#elif LINUX_VERSION_IS_GEQ(4,19,0)
|
||||||
|
-static u16 ieee80211_netdev_select_queue(struct net_device *dev,
|
||||||
|
- struct sk_buff *skb,
|
||||||
|
- struct net_device *sb_dev,
|
||||||
|
- select_queue_fallback_t fallback)
|
||||||
|
-#else
|
||||||
|
-static u16 ieee80211_netdev_select_queue(struct net_device *dev,
|
||||||
|
- struct sk_buff *skb,
|
||||||
|
- void *accel_priv,
|
||||||
|
- select_queue_fallback_t fallback)
|
||||||
|
-#endif
|
||||||
-{
|
-{
|
||||||
- return ieee80211_select_queue(IEEE80211_DEV_TO_SUB_IF(dev), skb);
|
- return ieee80211_select_queue(IEEE80211_DEV_TO_SUB_IF(dev), skb);
|
||||||
-}
|
-}
|
||||||
@ -100,7 +112,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
|||||||
static void
|
static void
|
||||||
ieee80211_get_stats64(struct net_device *dev, struct rtnl_link_stats64 *stats)
|
ieee80211_get_stats64(struct net_device *dev, struct rtnl_link_stats64 *stats)
|
||||||
{
|
{
|
||||||
@@ -833,7 +820,6 @@ static const struct net_device_ops ieee8
|
@@ -845,7 +820,6 @@ static const struct net_device_ops ieee8
|
||||||
.ndo_start_xmit = ieee80211_subif_start_xmit,
|
.ndo_start_xmit = ieee80211_subif_start_xmit,
|
||||||
.ndo_set_rx_mode = ieee80211_set_multicast_list,
|
.ndo_set_rx_mode = ieee80211_set_multicast_list,
|
||||||
.ndo_set_mac_address = ieee80211_change_mac,
|
.ndo_set_mac_address = ieee80211_change_mac,
|
||||||
@ -108,15 +120,15 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
|||||||
.ndo_get_stats64 = ieee80211_get_stats64,
|
.ndo_get_stats64 = ieee80211_get_stats64,
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -941,7 +927,6 @@ static const struct net_device_ops ieee8
|
@@ -967,7 +941,6 @@ static const struct net_device_ops ieee8
|
||||||
.ndo_start_xmit = ieee80211_subif_start_xmit_8023,
|
.ndo_start_xmit = ieee80211_subif_start_xmit_8023,
|
||||||
.ndo_set_rx_mode = ieee80211_set_multicast_list,
|
.ndo_set_rx_mode = ieee80211_set_multicast_list,
|
||||||
.ndo_set_mac_address = ieee80211_change_mac,
|
.ndo_set_mac_address = ieee80211_change_mac,
|
||||||
- .ndo_select_queue = ieee80211_netdev_select_queue,
|
- .ndo_select_queue = ieee80211_netdev_select_queue,
|
||||||
.ndo_get_stats64 = ieee80211_get_stats64,
|
.ndo_get_stats64 = ieee80211_get_stats64,
|
||||||
|
#if LINUX_VERSION_IS_GEQ(5,13,0)
|
||||||
.ndo_fill_forward_path = ieee80211_netdev_fill_forward_path,
|
.ndo_fill_forward_path = ieee80211_netdev_fill_forward_path,
|
||||||
};
|
@@ -1471,35 +1444,6 @@ int ieee80211_do_open(struct wireless_de
|
||||||
@@ -1443,35 +1428,6 @@ int ieee80211_do_open(struct wireless_de
|
|
||||||
|
|
||||||
ieee80211_recalc_ps(local);
|
ieee80211_recalc_ps(local);
|
||||||
|
|
||||||
@ -152,7 +164,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
|||||||
set_bit(SDATA_STATE_RUNNING, &sdata->state);
|
set_bit(SDATA_STATE_RUNNING, &sdata->state);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
@@ -1501,17 +1457,12 @@ static void ieee80211_if_setup(struct ne
|
@@ -1529,17 +1473,12 @@ static void ieee80211_if_setup(struct ne
|
||||||
{
|
{
|
||||||
ether_setup(dev);
|
ether_setup(dev);
|
||||||
dev->priv_flags &= ~IFF_TX_SKB_SHARING;
|
dev->priv_flags &= ~IFF_TX_SKB_SHARING;
|
||||||
@ -171,7 +183,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
|||||||
static void ieee80211_iface_process_skb(struct ieee80211_local *local,
|
static void ieee80211_iface_process_skb(struct ieee80211_local *local,
|
||||||
struct ieee80211_sub_if_data *sdata,
|
struct ieee80211_sub_if_data *sdata,
|
||||||
struct sk_buff *skb)
|
struct sk_buff *skb)
|
||||||
@@ -2096,9 +2047,7 @@ int ieee80211_if_add(struct ieee80211_lo
|
@@ -2124,9 +2063,7 @@ int ieee80211_if_add(struct ieee80211_lo
|
||||||
struct net_device *ndev = NULL;
|
struct net_device *ndev = NULL;
|
||||||
struct ieee80211_sub_if_data *sdata = NULL;
|
struct ieee80211_sub_if_data *sdata = NULL;
|
||||||
struct txq_info *txqi;
|
struct txq_info *txqi;
|
||||||
@ -181,7 +193,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
|||||||
|
|
||||||
ASSERT_RTNL();
|
ASSERT_RTNL();
|
||||||
|
|
||||||
@@ -2121,30 +2070,18 @@ int ieee80211_if_add(struct ieee80211_lo
|
@@ -2149,30 +2086,18 @@ int ieee80211_if_add(struct ieee80211_lo
|
||||||
sizeof(void *));
|
sizeof(void *));
|
||||||
int txq_size = 0;
|
int txq_size = 0;
|
||||||
|
|
||||||
@ -216,7 +228,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
|||||||
ndev->tstats = netdev_alloc_pcpu_stats(struct pcpu_sw_netstats);
|
ndev->tstats = netdev_alloc_pcpu_stats(struct pcpu_sw_netstats);
|
||||||
--- a/net/mac80211/main.c
|
--- a/net/mac80211/main.c
|
||||||
+++ b/net/mac80211/main.c
|
+++ b/net/mac80211/main.c
|
||||||
@@ -630,7 +630,7 @@ struct ieee80211_hw *ieee80211_alloc_hw_
|
@@ -627,7 +627,7 @@ struct ieee80211_hw *ieee80211_alloc_hw_
|
||||||
|
|
||||||
if (WARN_ON(!ops->tx || !ops->start || !ops->stop || !ops->config ||
|
if (WARN_ON(!ops->tx || !ops->start || !ops->stop || !ops->config ||
|
||||||
!ops->add_interface || !ops->remove_interface ||
|
!ops->add_interface || !ops->remove_interface ||
|
||||||
@ -225,7 +237,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
|||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
if (WARN_ON(ops->sta_state && (ops->sta_add || ops->sta_remove)))
|
if (WARN_ON(ops->sta_state && (ops->sta_add || ops->sta_remove)))
|
||||||
@@ -719,9 +719,7 @@ struct ieee80211_hw *ieee80211_alloc_hw_
|
@@ -716,9 +716,7 @@ struct ieee80211_hw *ieee80211_alloc_hw_
|
||||||
if (!ops->set_key)
|
if (!ops->set_key)
|
||||||
wiphy->flags |= WIPHY_FLAG_IBSS_RSN;
|
wiphy->flags |= WIPHY_FLAG_IBSS_RSN;
|
||||||
|
|
||||||
@ -236,7 +248,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
|||||||
wiphy_ext_feature_set(wiphy, NL80211_EXT_FEATURE_RRM);
|
wiphy_ext_feature_set(wiphy, NL80211_EXT_FEATURE_RRM);
|
||||||
|
|
||||||
wiphy->bss_priv_size = sizeof(struct ieee80211_bss);
|
wiphy->bss_priv_size = sizeof(struct ieee80211_bss);
|
||||||
@@ -834,10 +832,7 @@ struct ieee80211_hw *ieee80211_alloc_hw_
|
@@ -831,10 +829,7 @@ struct ieee80211_hw *ieee80211_alloc_hw_
|
||||||
atomic_set(&local->agg_queue_stop[i], 0);
|
atomic_set(&local->agg_queue_stop[i], 0);
|
||||||
}
|
}
|
||||||
tasklet_setup(&local->tx_pending_tasklet, ieee80211_tx_pending);
|
tasklet_setup(&local->tx_pending_tasklet, ieee80211_tx_pending);
|
||||||
@ -250,7 +262,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
|||||||
skb_queue_head_init(&local->skb_queue);
|
skb_queue_head_init(&local->skb_queue);
|
||||||
--- a/net/mac80211/rx.c
|
--- a/net/mac80211/rx.c
|
||||||
+++ b/net/mac80211/rx.c
|
+++ b/net/mac80211/rx.c
|
||||||
@@ -1571,9 +1571,6 @@ static void sta_ps_start(struct sta_info
|
@@ -1573,9 +1573,6 @@ static void sta_ps_start(struct sta_info
|
||||||
|
|
||||||
ieee80211_clear_fast_xmit(sta);
|
ieee80211_clear_fast_xmit(sta);
|
||||||
|
|
||||||
@ -286,7 +298,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
|||||||
}
|
}
|
||||||
|
|
||||||
for (ac = 0; ac < IEEE80211_NUM_ACS; ac++) {
|
for (ac = 0; ac < IEEE80211_NUM_ACS; ac++) {
|
||||||
@@ -425,8 +423,7 @@ void sta_info_free(struct ieee80211_loca
|
@@ -428,8 +426,7 @@ void sta_info_free(struct ieee80211_loca
|
||||||
|
|
||||||
sta_dbg(sta->sdata, "Destroyed STA %pM\n", sta->sta.addr);
|
sta_dbg(sta->sdata, "Destroyed STA %pM\n", sta->sta.addr);
|
||||||
|
|
||||||
@ -296,7 +308,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
|||||||
kfree(rcu_dereference_raw(sta->sta.rates));
|
kfree(rcu_dereference_raw(sta->sta.rates));
|
||||||
#ifdef CPTCFG_MAC80211_MESH
|
#ifdef CPTCFG_MAC80211_MESH
|
||||||
kfree(sta->mesh);
|
kfree(sta->mesh);
|
||||||
@@ -527,6 +524,8 @@ __sta_info_alloc(struct ieee80211_sub_if
|
@@ -530,6 +527,8 @@ __sta_info_alloc(struct ieee80211_sub_if
|
||||||
struct ieee80211_local *local = sdata->local;
|
struct ieee80211_local *local = sdata->local;
|
||||||
struct ieee80211_hw *hw = &local->hw;
|
struct ieee80211_hw *hw = &local->hw;
|
||||||
struct sta_info *sta;
|
struct sta_info *sta;
|
||||||
@ -305,7 +317,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
|||||||
int i;
|
int i;
|
||||||
|
|
||||||
sta = kzalloc(sizeof(*sta) + hw->sta_data_size, gfp);
|
sta = kzalloc(sizeof(*sta) + hw->sta_data_size, gfp);
|
||||||
@@ -597,21 +596,18 @@ __sta_info_alloc(struct ieee80211_sub_if
|
@@ -600,21 +599,18 @@ __sta_info_alloc(struct ieee80211_sub_if
|
||||||
|
|
||||||
sta->last_connected = ktime_get_seconds();
|
sta->last_connected = ktime_get_seconds();
|
||||||
|
|
||||||
@ -336,7 +348,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (sta_prepare_rate_control(local, sta, gfp))
|
if (sta_prepare_rate_control(local, sta, gfp))
|
||||||
@@ -685,8 +681,7 @@ __sta_info_alloc(struct ieee80211_sub_if
|
@@ -688,8 +684,7 @@ __sta_info_alloc(struct ieee80211_sub_if
|
||||||
return sta;
|
return sta;
|
||||||
|
|
||||||
free_txq:
|
free_txq:
|
||||||
@ -346,7 +358,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
|||||||
free:
|
free:
|
||||||
sta_info_free_link(&sta->deflink);
|
sta_info_free_link(&sta->deflink);
|
||||||
#ifdef CPTCFG_MAC80211_MESH
|
#ifdef CPTCFG_MAC80211_MESH
|
||||||
@@ -1960,9 +1955,6 @@ ieee80211_sta_ps_deliver_response(struct
|
@@ -1965,9 +1960,6 @@ ieee80211_sta_ps_deliver_response(struct
|
||||||
* TIM recalculation.
|
* TIM recalculation.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -356,7 +368,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
|||||||
for (tid = 0; tid < ARRAY_SIZE(sta->sta.txq); tid++) {
|
for (tid = 0; tid < ARRAY_SIZE(sta->sta.txq); tid++) {
|
||||||
if (!sta->sta.txq[tid] ||
|
if (!sta->sta.txq[tid] ||
|
||||||
!(driver_release_tids & BIT(tid)) ||
|
!(driver_release_tids & BIT(tid)) ||
|
||||||
@@ -2447,7 +2439,7 @@ static void sta_set_tidstats(struct sta_
|
@@ -2452,7 +2444,7 @@ static void sta_set_tidstats(struct sta_
|
||||||
tidstats->tx_msdu_failed = sta->deflink.status_stats.msdu_failed[tid];
|
tidstats->tx_msdu_failed = sta->deflink.status_stats.msdu_failed[tid];
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -365,7 +377,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
|||||||
spin_lock_bh(&local->fq.lock);
|
spin_lock_bh(&local->fq.lock);
|
||||||
rcu_read_lock();
|
rcu_read_lock();
|
||||||
|
|
||||||
@@ -2775,9 +2767,6 @@ unsigned long ieee80211_sta_last_active(
|
@@ -2780,9 +2772,6 @@ unsigned long ieee80211_sta_last_active(
|
||||||
|
|
||||||
static void sta_update_codel_params(struct sta_info *sta, u32 thr)
|
static void sta_update_codel_params(struct sta_info *sta, u32 thr)
|
||||||
{
|
{
|
||||||
@ -387,7 +399,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
|||||||
* Set the WLAN_TDLS_TEARDOWN flag to indicate a teardown in progress.
|
* Set the WLAN_TDLS_TEARDOWN flag to indicate a teardown in progress.
|
||||||
--- a/net/mac80211/tx.c
|
--- a/net/mac80211/tx.c
|
||||||
+++ b/net/mac80211/tx.c
|
+++ b/net/mac80211/tx.c
|
||||||
@@ -1600,9 +1600,6 @@ int ieee80211_txq_setup_flows(struct iee
|
@@ -1606,9 +1606,6 @@ int ieee80211_txq_setup_flows(struct iee
|
||||||
bool supp_vht = false;
|
bool supp_vht = false;
|
||||||
enum nl80211_band band;
|
enum nl80211_band band;
|
||||||
|
|
||||||
@ -397,7 +409,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
|||||||
ret = fq_init(fq, 4096);
|
ret = fq_init(fq, 4096);
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
@@ -1650,9 +1647,6 @@ void ieee80211_txq_teardown_flows(struct
|
@@ -1656,9 +1653,6 @@ void ieee80211_txq_teardown_flows(struct
|
||||||
{
|
{
|
||||||
struct fq *fq = &local->fq;
|
struct fq *fq = &local->fq;
|
||||||
|
|
||||||
@ -407,7 +419,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
|||||||
kfree(local->cvars);
|
kfree(local->cvars);
|
||||||
local->cvars = NULL;
|
local->cvars = NULL;
|
||||||
|
|
||||||
@@ -1669,8 +1663,7 @@ static bool ieee80211_queue_skb(struct i
|
@@ -1675,8 +1669,7 @@ static bool ieee80211_queue_skb(struct i
|
||||||
struct ieee80211_vif *vif;
|
struct ieee80211_vif *vif;
|
||||||
struct txq_info *txqi;
|
struct txq_info *txqi;
|
||||||
|
|
||||||
@ -417,7 +429,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
|||||||
return false;
|
return false;
|
||||||
|
|
||||||
if (sdata->vif.type == NL80211_IFTYPE_AP_VLAN)
|
if (sdata->vif.type == NL80211_IFTYPE_AP_VLAN)
|
||||||
@@ -4193,12 +4186,7 @@ void __ieee80211_subif_start_xmit(struct
|
@@ -4201,12 +4194,7 @@ void __ieee80211_subif_start_xmit(struct
|
||||||
if (IS_ERR(sta))
|
if (IS_ERR(sta))
|
||||||
sta = NULL;
|
sta = NULL;
|
||||||
|
|
||||||
@ -431,7 +443,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
|||||||
ieee80211_aggr_check(sdata, sta, skb);
|
ieee80211_aggr_check(sdata, sta, skb);
|
||||||
|
|
||||||
sk_pacing_shift_update(skb->sk, sdata->local->hw.tx_sk_pacing_shift);
|
sk_pacing_shift_update(skb->sk, sdata->local->hw.tx_sk_pacing_shift);
|
||||||
@@ -4509,11 +4497,7 @@ static void ieee80211_8023_xmit(struct i
|
@@ -4517,11 +4505,7 @@ static void ieee80211_8023_xmit(struct i
|
||||||
struct tid_ampdu_tx *tid_tx;
|
struct tid_ampdu_tx *tid_tx;
|
||||||
u8 tid;
|
u8 tid;
|
||||||
|
|
||||||
@ -444,7 +456,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
|||||||
|
|
||||||
if (unlikely(test_bit(SCAN_SW_SCANNING, &local->scanning)) &&
|
if (unlikely(test_bit(SCAN_SW_SCANNING, &local->scanning)) &&
|
||||||
test_bit(SDATA_STATE_OFFCHANNEL, &sdata->state))
|
test_bit(SDATA_STATE_OFFCHANNEL, &sdata->state))
|
||||||
@@ -4767,9 +4751,6 @@ void ieee80211_tx_pending(struct tasklet
|
@@ -4775,9 +4759,6 @@ void ieee80211_tx_pending(struct tasklet
|
||||||
if (!txok)
|
if (!txok)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -454,7 +466,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
|||||||
}
|
}
|
||||||
spin_unlock_irqrestore(&local->queue_stop_reason_lock, flags);
|
spin_unlock_irqrestore(&local->queue_stop_reason_lock, flags);
|
||||||
|
|
||||||
@@ -5962,10 +5943,9 @@ int ieee80211_tx_control_port(struct wip
|
@@ -5970,10 +5951,9 @@ int ieee80211_tx_control_port(struct wip
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!IS_ERR(sta)) {
|
if (!IS_ERR(sta)) {
|
||||||
|
@ -12,7 +12,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
|||||||
|
|
||||||
--- a/drivers/net/wireless/realtek/rtw88/mac80211.c
|
--- a/drivers/net/wireless/realtek/rtw88/mac80211.c
|
||||||
+++ b/drivers/net/wireless/realtek/rtw88/mac80211.c
|
+++ b/drivers/net/wireless/realtek/rtw88/mac80211.c
|
||||||
@@ -896,7 +896,6 @@ static void rtw_ops_sta_rc_update(struct
|
@@ -892,7 +892,6 @@ static void rtw_ops_sta_rc_update(struct
|
||||||
|
|
||||||
const struct ieee80211_ops rtw_ops = {
|
const struct ieee80211_ops rtw_ops = {
|
||||||
.tx = rtw_ops_tx,
|
.tx = rtw_ops_tx,
|
||||||
@ -22,7 +22,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
|||||||
.stop = rtw_ops_stop,
|
.stop = rtw_ops_stop,
|
||||||
--- a/drivers/net/wireless/realtek/rtw89/mac80211.c
|
--- a/drivers/net/wireless/realtek/rtw89/mac80211.c
|
||||||
+++ b/drivers/net/wireless/realtek/rtw89/mac80211.c
|
+++ b/drivers/net/wireless/realtek/rtw89/mac80211.c
|
||||||
@@ -918,7 +918,6 @@ static int rtw89_ops_set_tid_config(stru
|
@@ -916,7 +916,6 @@ static int rtw89_ops_set_tid_config(stru
|
||||||
|
|
||||||
const struct ieee80211_ops rtw89_ops = {
|
const struct ieee80211_ops rtw89_ops = {
|
||||||
.tx = rtw89_ops_tx,
|
.tx = rtw89_ops_tx,
|
||||||
|
@ -59,7 +59,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||||||
flow = fq_find_fattest_flow(fq);
|
flow = fq_find_fattest_flow(fq);
|
||||||
--- a/include/net/mac80211.h
|
--- a/include/net/mac80211.h
|
||||||
+++ b/include/net/mac80211.h
|
+++ b/include/net/mac80211.h
|
||||||
@@ -1807,6 +1807,10 @@ struct ieee80211_vif_cfg {
|
@@ -1816,6 +1816,10 @@ struct ieee80211_vif_cfg {
|
||||||
* @addr: address of this interface
|
* @addr: address of this interface
|
||||||
* @p2p: indicates whether this AP or STA interface is a p2p
|
* @p2p: indicates whether this AP or STA interface is a p2p
|
||||||
* interface, i.e. a GO or p2p-sta respectively
|
* interface, i.e. a GO or p2p-sta respectively
|
||||||
@ -70,7 +70,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||||||
* @driver_flags: flags/capabilities the driver has for this interface,
|
* @driver_flags: flags/capabilities the driver has for this interface,
|
||||||
* these need to be set (or cleared) when the interface is added
|
* these need to be set (or cleared) when the interface is added
|
||||||
* or, if supported by the driver, the interface type is changed
|
* or, if supported by the driver, the interface type is changed
|
||||||
@@ -1846,6 +1850,7 @@ struct ieee80211_vif {
|
@@ -1855,6 +1859,7 @@ struct ieee80211_vif {
|
||||||
|
|
||||||
struct ieee80211_txq *txq;
|
struct ieee80211_txq *txq;
|
||||||
|
|
||||||
@ -80,7 +80,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||||||
|
|
||||||
--- a/net/mac80211/iface.c
|
--- a/net/mac80211/iface.c
|
||||||
+++ b/net/mac80211/iface.c
|
+++ b/net/mac80211/iface.c
|
||||||
@@ -2181,6 +2181,7 @@ int ieee80211_if_add(struct ieee80211_lo
|
@@ -2197,6 +2197,7 @@ int ieee80211_if_add(struct ieee80211_lo
|
||||||
ndev->priv_flags |= IFF_LIVE_ADDR_CHANGE;
|
ndev->priv_flags |= IFF_LIVE_ADDR_CHANGE;
|
||||||
ndev->hw_features |= ndev->features &
|
ndev->hw_features |= ndev->features &
|
||||||
MAC80211_SUPPORTED_FEATURES_TX;
|
MAC80211_SUPPORTED_FEATURES_TX;
|
||||||
@ -90,7 +90,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||||||
|
|
||||||
--- a/net/mac80211/tx.c
|
--- a/net/mac80211/tx.c
|
||||||
+++ b/net/mac80211/tx.c
|
+++ b/net/mac80211/tx.c
|
||||||
@@ -1356,7 +1356,11 @@ static struct txq_info *ieee80211_get_tx
|
@@ -1362,7 +1362,11 @@ static struct txq_info *ieee80211_get_tx
|
||||||
|
|
||||||
static void ieee80211_set_skb_enqueue_time(struct sk_buff *skb)
|
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)
|
static u32 codel_skb_len_func(const struct sk_buff *skb)
|
||||||
@@ -3579,55 +3583,79 @@ ieee80211_xmit_fast_finish(struct ieee80
|
@@ -3585,55 +3589,79 @@ ieee80211_xmit_fast_finish(struct ieee80
|
||||||
return TX_CONTINUE;
|
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
|
/* 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
|
* as the may-encrypt argument for the resize to not account for
|
||||||
@@ -3636,10 +3664,8 @@ static bool ieee80211_xmit_fast(struct i
|
@@ -3642,10 +3670,8 @@ static bool ieee80211_xmit_fast(struct i
|
||||||
if (unlikely(ieee80211_skb_resize(sdata, skb,
|
if (unlikely(ieee80211_skb_resize(sdata, skb,
|
||||||
max_t(int, extra_head + hw_headroom -
|
max_t(int, extra_head + hw_headroom -
|
||||||
skb_headroom(skb), 0),
|
skb_headroom(skb), 0),
|
||||||
@ -232,7 +232,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||||||
|
|
||||||
memcpy(ð, skb->data, ETH_HLEN - 2);
|
memcpy(ð, skb->data, ETH_HLEN - 2);
|
||||||
hdr = skb_push(skb, extra_head);
|
hdr = skb_push(skb, extra_head);
|
||||||
@@ -3653,7 +3679,7 @@ static bool ieee80211_xmit_fast(struct i
|
@@ -3659,7 +3685,7 @@ static bool ieee80211_xmit_fast(struct i
|
||||||
info->control.vif = &sdata->vif;
|
info->control.vif = &sdata->vif;
|
||||||
info->flags = IEEE80211_TX_CTL_FIRST_FRAGMENT |
|
info->flags = IEEE80211_TX_CTL_FIRST_FRAGMENT |
|
||||||
IEEE80211_TX_CTL_DONTFRAG |
|
IEEE80211_TX_CTL_DONTFRAG |
|
||||||
@ -241,7 +241,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||||||
info->control.flags = IEEE80211_TX_CTRL_FAST_XMIT |
|
info->control.flags = IEEE80211_TX_CTRL_FAST_XMIT |
|
||||||
u32_encode_bits(IEEE80211_LINK_UNSPECIFIED,
|
u32_encode_bits(IEEE80211_LINK_UNSPECIFIED,
|
||||||
IEEE80211_TX_CTRL_MLO_LINK);
|
IEEE80211_TX_CTRL_MLO_LINK);
|
||||||
@@ -3677,16 +3703,14 @@ static bool ieee80211_xmit_fast(struct i
|
@@ -3683,16 +3709,14 @@ static bool ieee80211_xmit_fast(struct i
|
||||||
tx.key = fast_tx->key;
|
tx.key = fast_tx->key;
|
||||||
|
|
||||||
if (ieee80211_queue_skb(local, sdata, sta, skb))
|
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)
|
if (sdata->vif.type == NL80211_IFTYPE_AP_VLAN)
|
||||||
sdata = container_of(sdata->bss,
|
sdata = container_of(sdata->bss,
|
||||||
@@ -3694,6 +3718,56 @@ static bool ieee80211_xmit_fast(struct i
|
@@ -3700,6 +3724,56 @@ static bool ieee80211_xmit_fast(struct i
|
||||||
|
|
||||||
__skb_queue_tail(&tx.skbs, skb);
|
__skb_queue_tail(&tx.skbs, skb);
|
||||||
ieee80211_tx_frags(local, &sdata->vif, sta, &tx.skbs, false);
|
ieee80211_tx_frags(local, &sdata->vif, sta, &tx.skbs, false);
|
||||||
@ -318,7 +318,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -4201,31 +4275,14 @@ void __ieee80211_subif_start_xmit(struct
|
@@ -4209,31 +4283,14 @@ void __ieee80211_subif_start_xmit(struct
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -358,7 +358,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||||||
}
|
}
|
||||||
|
|
||||||
skb_list_walk_safe(skb, skb, next) {
|
skb_list_walk_safe(skb, skb, next) {
|
||||||
@@ -4443,9 +4500,11 @@ normal:
|
@@ -4451,9 +4508,11 @@ normal:
|
||||||
return NETDEV_TX_OK;
|
return NETDEV_TX_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -373,7 +373,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||||||
{
|
{
|
||||||
struct ieee80211_local *local = sdata->local;
|
struct ieee80211_local *local = sdata->local;
|
||||||
struct ieee80211_tx_control control = {};
|
struct ieee80211_tx_control control = {};
|
||||||
@@ -4454,14 +4513,6 @@ static bool ieee80211_tx_8023(struct iee
|
@@ -4462,14 +4521,6 @@ static bool ieee80211_tx_8023(struct iee
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
int q = info->hw_queue;
|
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);
|
spin_lock_irqsave(&local->queue_stop_reason_lock, flags);
|
||||||
|
|
||||||
if (local->queue_stop_reasons[q] ||
|
if (local->queue_stop_reasons[q] ||
|
||||||
@@ -4488,6 +4539,26 @@ static bool ieee80211_tx_8023(struct iee
|
@@ -4496,6 +4547,26 @@ static bool ieee80211_tx_8023(struct iee
|
||||||
return true;
|
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,
|
static void ieee80211_8023_xmit(struct ieee80211_sub_if_data *sdata,
|
||||||
struct net_device *dev, struct sta_info *sta,
|
struct net_device *dev, struct sta_info *sta,
|
||||||
struct ieee80211_key *key, struct sk_buff *skb)
|
struct ieee80211_key *key, struct sk_buff *skb)
|
||||||
@@ -4495,9 +4566,13 @@ static void ieee80211_8023_xmit(struct i
|
@@ -4503,9 +4574,13 @@ static void ieee80211_8023_xmit(struct i
|
||||||
struct ieee80211_tx_info *info;
|
struct ieee80211_tx_info *info;
|
||||||
struct ieee80211_local *local = sdata->local;
|
struct ieee80211_local *local = sdata->local;
|
||||||
struct tid_ampdu_tx *tid_tx;
|
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)) &&
|
if (unlikely(test_bit(SCAN_SW_SCANNING, &local->scanning)) &&
|
||||||
test_bit(SDATA_STATE_OFFCHANNEL, &sdata->state))
|
test_bit(SDATA_STATE_OFFCHANNEL, &sdata->state))
|
||||||
@@ -4507,9 +4582,6 @@ static void ieee80211_8023_xmit(struct i
|
@@ -4515,9 +4590,6 @@ static void ieee80211_8023_xmit(struct i
|
||||||
if (unlikely(!skb))
|
if (unlikely(!skb))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@ -440,7 +440,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||||||
ieee80211_aggr_check(sdata, sta, skb);
|
ieee80211_aggr_check(sdata, sta, skb);
|
||||||
|
|
||||||
tid = skb->priority & IEEE80211_QOS_CTL_TAG1D_MASK;
|
tid = skb->priority & IEEE80211_QOS_CTL_TAG1D_MASK;
|
||||||
@@ -4523,22 +4595,20 @@ static void ieee80211_8023_xmit(struct i
|
@@ -4531,22 +4603,20 @@ static void ieee80211_8023_xmit(struct i
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -471,7 +471,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||||||
|
|
||||||
if (sdata->vif.type == NL80211_IFTYPE_AP_VLAN)
|
if (sdata->vif.type == NL80211_IFTYPE_AP_VLAN)
|
||||||
sdata = container_of(sdata->bss,
|
sdata = container_of(sdata->bss,
|
||||||
@@ -4550,6 +4620,24 @@ static void ieee80211_8023_xmit(struct i
|
@@ -4558,6 +4628,24 @@ static void ieee80211_8023_xmit(struct i
|
||||||
if (key)
|
if (key)
|
||||||
info->control.hw_key = &key->conf;
|
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);
|
ieee80211_tx_8023(sdata, skb, sta, false);
|
||||||
|
|
||||||
return;
|
return;
|
||||||
@@ -4591,6 +4679,7 @@ netdev_tx_t ieee80211_subif_start_xmit_8
|
@@ -4599,6 +4687,7 @@ netdev_tx_t ieee80211_subif_start_xmit_8
|
||||||
key->conf.cipher == WLAN_CIPHER_SUITE_TKIP))
|
key->conf.cipher == WLAN_CIPHER_SUITE_TKIP))
|
||||||
goto skip_offload;
|
goto skip_offload;
|
||||||
|
|
||||||
|
@ -26,7 +26,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
|||||||
|
|
||||||
--- a/net/mac80211/rx.c
|
--- a/net/mac80211/rx.c
|
||||||
+++ b/net/mac80211/rx.c
|
+++ b/net/mac80211/rx.c
|
||||||
@@ -2403,7 +2403,6 @@ static int ieee80211_802_1x_port_control
|
@@ -2405,7 +2405,6 @@ static int ieee80211_802_1x_port_control
|
||||||
|
|
||||||
static int ieee80211_drop_unencrypted(struct ieee80211_rx_data *rx, __le16 fc)
|
static int ieee80211_drop_unencrypted(struct ieee80211_rx_data *rx, __le16 fc)
|
||||||
{
|
{
|
||||||
@ -34,7 +34,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
|||||||
struct sk_buff *skb = rx->skb;
|
struct sk_buff *skb = rx->skb;
|
||||||
struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(skb);
|
struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(skb);
|
||||||
|
|
||||||
@@ -2414,31 +2413,6 @@ static int ieee80211_drop_unencrypted(st
|
@@ -2416,31 +2415,6 @@ static int ieee80211_drop_unencrypted(st
|
||||||
if (status->flag & RX_FLAG_DECRYPTED)
|
if (status->flag & RX_FLAG_DECRYPTED)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
@ -66,7 +66,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
|||||||
/* Drop unencrypted frames if key is set. */
|
/* Drop unencrypted frames if key is set. */
|
||||||
if (unlikely(!ieee80211_has_protected(fc) &&
|
if (unlikely(!ieee80211_has_protected(fc) &&
|
||||||
!ieee80211_is_any_nullfunc(fc) &&
|
!ieee80211_is_any_nullfunc(fc) &&
|
||||||
@@ -2892,8 +2866,16 @@ ieee80211_rx_h_mesh_fwding(struct ieee80
|
@@ -2898,8 +2872,16 @@ ieee80211_rx_h_mesh_fwding(struct ieee80
|
||||||
hdr = (struct ieee80211_hdr *) skb->data;
|
hdr = (struct ieee80211_hdr *) skb->data;
|
||||||
mesh_hdr = (struct ieee80211s_hdr *) (skb->data + hdrlen);
|
mesh_hdr = (struct ieee80211s_hdr *) (skb->data + hdrlen);
|
||||||
|
|
||||||
|
@ -30,7 +30,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||||||
|
|
||||||
--- a/net/mac80211/ieee80211_i.h
|
--- a/net/mac80211/ieee80211_i.h
|
||||||
+++ b/net/mac80211/ieee80211_i.h
|
+++ b/net/mac80211/ieee80211_i.h
|
||||||
@@ -329,7 +329,6 @@ struct mesh_stats {
|
@@ -333,7 +333,6 @@ struct mesh_stats {
|
||||||
__u32 fwded_frames; /* Mesh total forwarded frames */
|
__u32 fwded_frames; /* Mesh total forwarded frames */
|
||||||
__u32 dropped_frames_ttl; /* Not transmitted since mesh_ttl == 0*/
|
__u32 dropped_frames_ttl; /* Not transmitted since mesh_ttl == 0*/
|
||||||
__u32 dropped_frames_no_route; /* Not transmitted, no route found */
|
__u32 dropped_frames_no_route; /* Not transmitted, no route found */
|
||||||
@ -40,7 +40,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||||||
#define PREQ_Q_F_START 0x1
|
#define PREQ_Q_F_START 0x1
|
||||||
--- a/net/mac80211/rx.c
|
--- a/net/mac80211/rx.c
|
||||||
+++ b/net/mac80211/rx.c
|
+++ b/net/mac80211/rx.c
|
||||||
@@ -2926,11 +2926,6 @@ ieee80211_rx_h_mesh_fwding(struct ieee80
|
@@ -2932,11 +2932,6 @@ ieee80211_rx_h_mesh_fwding(struct ieee80
|
||||||
return RX_CONTINUE;
|
return RX_CONTINUE;
|
||||||
|
|
||||||
ac = ieee802_1d_to_ac[skb->priority];
|
ac = ieee802_1d_to_ac[skb->priority];
|
||||||
|
@ -48,7 +48,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||||||
struct rx_packet_hdr *rx_hdr;
|
struct rx_packet_hdr *rx_hdr;
|
||||||
--- a/include/net/cfg80211.h
|
--- a/include/net/cfg80211.h
|
||||||
+++ b/include/net/cfg80211.h
|
+++ b/include/net/cfg80211.h
|
||||||
@@ -6208,11 +6208,36 @@ static inline int ieee80211_data_to_8023
|
@@ -6324,11 +6324,36 @@ static inline int ieee80211_data_to_8023
|
||||||
* @extra_headroom: The hardware extra headroom for SKBs in the @list.
|
* @extra_headroom: The hardware extra headroom for SKBs in the @list.
|
||||||
* @check_da: DA to check in the inner ethernet header, or NULL
|
* @check_da: DA to check in the inner ethernet header, or NULL
|
||||||
* @check_sa: SA to check in the inner ethernet header, or NULL
|
* @check_sa: SA to check in the inner ethernet header, or NULL
|
||||||
@ -88,7 +88,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||||||
* cfg80211_classify8021d - determine the 802.1p/1d tag for a data frame
|
* cfg80211_classify8021d - determine the 802.1p/1d tag for a data frame
|
||||||
--- a/net/mac80211/rx.c
|
--- a/net/mac80211/rx.c
|
||||||
+++ b/net/mac80211/rx.c
|
+++ b/net/mac80211/rx.c
|
||||||
@@ -2720,6 +2720,174 @@ ieee80211_deliver_skb(struct ieee80211_r
|
@@ -2726,6 +2726,174 @@ ieee80211_deliver_skb(struct ieee80211_r
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -263,7 +263,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||||||
static ieee80211_rx_result debug_noinline
|
static ieee80211_rx_result debug_noinline
|
||||||
__ieee80211_rx_h_amsdu(struct ieee80211_rx_data *rx, u8 data_offset)
|
__ieee80211_rx_h_amsdu(struct ieee80211_rx_data *rx, u8 data_offset)
|
||||||
{
|
{
|
||||||
@@ -2728,8 +2896,10 @@ __ieee80211_rx_h_amsdu(struct ieee80211_
|
@@ -2734,8 +2902,10 @@ __ieee80211_rx_h_amsdu(struct ieee80211_
|
||||||
struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data;
|
struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data;
|
||||||
__le16 fc = hdr->frame_control;
|
__le16 fc = hdr->frame_control;
|
||||||
struct sk_buff_head frame_list;
|
struct sk_buff_head frame_list;
|
||||||
@ -274,7 +274,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||||||
|
|
||||||
if (unlikely(ieee80211_has_a4(hdr->frame_control))) {
|
if (unlikely(ieee80211_has_a4(hdr->frame_control))) {
|
||||||
check_da = NULL;
|
check_da = NULL;
|
||||||
@@ -2746,6 +2916,8 @@ __ieee80211_rx_h_amsdu(struct ieee80211_
|
@@ -2752,6 +2922,8 @@ __ieee80211_rx_h_amsdu(struct ieee80211_
|
||||||
break;
|
break;
|
||||||
case NL80211_IFTYPE_MESH_POINT:
|
case NL80211_IFTYPE_MESH_POINT:
|
||||||
check_sa = NULL;
|
check_sa = NULL;
|
||||||
@ -283,7 +283,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
@@ -2763,17 +2935,29 @@ __ieee80211_rx_h_amsdu(struct ieee80211_
|
@@ -2769,17 +2941,29 @@ __ieee80211_rx_h_amsdu(struct ieee80211_
|
||||||
ieee80211_amsdu_to_8023s(skb, &frame_list, dev->dev_addr,
|
ieee80211_amsdu_to_8023s(skb, &frame_list, dev->dev_addr,
|
||||||
rx->sdata->vif.type,
|
rx->sdata->vif.type,
|
||||||
rx->local->hw.extra_tx_headroom,
|
rx->local->hw.extra_tx_headroom,
|
||||||
@ -316,7 +316,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||||||
}
|
}
|
||||||
|
|
||||||
return RX_QUEUED;
|
return RX_QUEUED;
|
||||||
@@ -2806,6 +2990,8 @@ ieee80211_rx_h_amsdu(struct ieee80211_rx
|
@@ -2812,6 +2996,8 @@ ieee80211_rx_h_amsdu(struct ieee80211_rx
|
||||||
if (!rx->sdata->u.mgd.use_4addr)
|
if (!rx->sdata->u.mgd.use_4addr)
|
||||||
return RX_DROP_UNUSABLE;
|
return RX_DROP_UNUSABLE;
|
||||||
break;
|
break;
|
||||||
@ -325,7 +325,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||||||
default:
|
default:
|
||||||
return RX_DROP_UNUSABLE;
|
return RX_DROP_UNUSABLE;
|
||||||
}
|
}
|
||||||
@@ -2834,155 +3020,6 @@ ieee80211_rx_h_amsdu(struct ieee80211_rx
|
@@ -2840,155 +3026,6 @@ ieee80211_rx_h_amsdu(struct ieee80211_rx
|
||||||
return __ieee80211_rx_h_amsdu(rx, 0);
|
return __ieee80211_rx_h_amsdu(rx, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -481,7 +481,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||||||
static ieee80211_rx_result debug_noinline
|
static ieee80211_rx_result debug_noinline
|
||||||
ieee80211_rx_h_data(struct ieee80211_rx_data *rx)
|
ieee80211_rx_h_data(struct ieee80211_rx_data *rx)
|
||||||
{
|
{
|
||||||
@@ -2991,6 +3028,7 @@ ieee80211_rx_h_data(struct ieee80211_rx_
|
@@ -2997,6 +3034,7 @@ ieee80211_rx_h_data(struct ieee80211_rx_
|
||||||
struct net_device *dev = sdata->dev;
|
struct net_device *dev = sdata->dev;
|
||||||
struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)rx->skb->data;
|
struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)rx->skb->data;
|
||||||
__le16 fc = hdr->frame_control;
|
__le16 fc = hdr->frame_control;
|
||||||
@ -489,7 +489,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||||||
bool port_control;
|
bool port_control;
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
@@ -3017,6 +3055,10 @@ ieee80211_rx_h_data(struct ieee80211_rx_
|
@@ -3023,6 +3061,10 @@ ieee80211_rx_h_data(struct ieee80211_rx_
|
||||||
if (unlikely(err))
|
if (unlikely(err))
|
||||||
return RX_DROP_UNUSABLE;
|
return RX_DROP_UNUSABLE;
|
||||||
|
|
||||||
@ -500,7 +500,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||||||
if (!ieee80211_frame_allowed(rx, fc))
|
if (!ieee80211_frame_allowed(rx, fc))
|
||||||
return RX_DROP_MONITOR;
|
return RX_DROP_MONITOR;
|
||||||
|
|
||||||
@@ -3987,10 +4029,6 @@ static void ieee80211_rx_handlers(struct
|
@@ -3997,10 +4039,6 @@ static void ieee80211_rx_handlers(struct
|
||||||
CALL_RXH(ieee80211_rx_h_defragment);
|
CALL_RXH(ieee80211_rx_h_defragment);
|
||||||
CALL_RXH(ieee80211_rx_h_michael_mic_verify);
|
CALL_RXH(ieee80211_rx_h_michael_mic_verify);
|
||||||
/* must be after MMIC verify so header is counted in MPDU mic */
|
/* must be after MMIC verify so header is counted in MPDU mic */
|
||||||
|
@ -19,7 +19,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||||||
|
|
||||||
--- a/include/net/cfg80211.h
|
--- a/include/net/cfg80211.h
|
||||||
+++ b/include/net/cfg80211.h
|
+++ b/include/net/cfg80211.h
|
||||||
@@ -6194,6 +6194,19 @@ static inline int ieee80211_data_to_8023
|
@@ -6310,6 +6310,19 @@ static inline int ieee80211_data_to_8023
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -41,7 +41,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||||||
* Decode an IEEE 802.11 A-MSDU and convert it to a list of 802.3 frames.
|
* Decode an IEEE 802.11 A-MSDU and convert it to a list of 802.3 frames.
|
||||||
--- a/net/mac80211/rx.c
|
--- a/net/mac80211/rx.c
|
||||||
+++ b/net/mac80211/rx.c
|
+++ b/net/mac80211/rx.c
|
||||||
@@ -2899,7 +2899,6 @@ __ieee80211_rx_h_amsdu(struct ieee80211_
|
@@ -2905,7 +2905,6 @@ __ieee80211_rx_h_amsdu(struct ieee80211_
|
||||||
static ieee80211_rx_result res;
|
static ieee80211_rx_result res;
|
||||||
struct ethhdr ethhdr;
|
struct ethhdr ethhdr;
|
||||||
const u8 *check_da = ethhdr.h_dest, *check_sa = ethhdr.h_source;
|
const u8 *check_da = ethhdr.h_dest, *check_sa = ethhdr.h_source;
|
||||||
@ -49,7 +49,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||||||
|
|
||||||
if (unlikely(ieee80211_has_a4(hdr->frame_control))) {
|
if (unlikely(ieee80211_has_a4(hdr->frame_control))) {
|
||||||
check_da = NULL;
|
check_da = NULL;
|
||||||
@@ -2917,7 +2916,6 @@ __ieee80211_rx_h_amsdu(struct ieee80211_
|
@@ -2923,7 +2922,6 @@ __ieee80211_rx_h_amsdu(struct ieee80211_
|
||||||
case NL80211_IFTYPE_MESH_POINT:
|
case NL80211_IFTYPE_MESH_POINT:
|
||||||
check_sa = NULL;
|
check_sa = NULL;
|
||||||
check_da = NULL;
|
check_da = NULL;
|
||||||
@ -57,7 +57,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
@@ -2932,10 +2930,21 @@ __ieee80211_rx_h_amsdu(struct ieee80211_
|
@@ -2938,10 +2936,21 @@ __ieee80211_rx_h_amsdu(struct ieee80211_
|
||||||
data_offset, true))
|
data_offset, true))
|
||||||
return RX_DROP_UNUSABLE;
|
return RX_DROP_UNUSABLE;
|
||||||
|
|
||||||
@ -82,7 +82,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||||||
rx->skb = __skb_dequeue(&frame_list);
|
rx->skb = __skb_dequeue(&frame_list);
|
||||||
--- a/net/mac80211/sta_info.c
|
--- a/net/mac80211/sta_info.c
|
||||||
+++ b/net/mac80211/sta_info.c
|
+++ b/net/mac80211/sta_info.c
|
||||||
@@ -591,6 +591,9 @@ __sta_info_alloc(struct ieee80211_sub_if
|
@@ -594,6 +594,9 @@ __sta_info_alloc(struct ieee80211_sub_if
|
||||||
|
|
||||||
sta->sta_state = IEEE80211_STA_NONE;
|
sta->sta_state = IEEE80211_STA_NONE;
|
||||||
|
|
||||||
|
@ -11,7 +11,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||||||
|
|
||||||
--- a/net/mac80211/ieee80211_i.h
|
--- a/net/mac80211/ieee80211_i.h
|
||||||
+++ b/net/mac80211/ieee80211_i.h
|
+++ b/net/mac80211/ieee80211_i.h
|
||||||
@@ -696,7 +696,7 @@ struct ieee80211_if_mesh {
|
@@ -700,7 +700,7 @@ struct ieee80211_if_mesh {
|
||||||
struct mesh_stats mshstats;
|
struct mesh_stats mshstats;
|
||||||
struct mesh_config mshcfg;
|
struct mesh_config mshcfg;
|
||||||
atomic_t estab_plinks;
|
atomic_t estab_plinks;
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user