mirror of
https://git.openwrt.org/openwrt/openwrt.git
synced 2025-12-10 07:34:40 +01:00
mac80211: Update to version 6.1.145-1
This updates mac80211 to version 6.1.145-1. This code is based on Linux 6.1.145 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 were applied upstream. Link: https://github.com/openwrt/openwrt/pull/16948 Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
This commit is contained in:
parent
6747179486
commit
50243ef2d8
69 changed files with 219 additions and 527 deletions
|
|
@ -10,13 +10,13 @@ include $(INCLUDE_DIR)/kernel.mk
|
|||
|
||||
PKG_NAME:=mac80211
|
||||
|
||||
PKG_VERSION:=6.1.110-1
|
||||
PKG_VERSION:=6.1.145-1
|
||||
PKG_RELEASE:=1
|
||||
PKG_LICENSE:=GPL-2.0-only
|
||||
PKG_LICENSE_FILES:=COPYING
|
||||
|
||||
PKG_SOURCE_URL:=@KERNEL/linux/kernel/projects/backports/stable/v6.1.110/
|
||||
PKG_HASH:=2415bc529ca25be0aa597f9638d8b6fc4138080bbaea96881a38101896df6703
|
||||
PKG_SOURCE_URL:=@KERNEL/linux/kernel/projects/backports/stable/v6.1.145/
|
||||
PKG_HASH:=05f2c39f1be0aab49014a6e27a9492ce7ed0491f552db8a07f3ba0de33b9317d
|
||||
|
||||
PKG_SOURCE:=backports-$(PKG_VERSION).tar.xz
|
||||
PKG_BUILD_DIR:=$(KERNEL_BUILD_DIR)/backports-$(PKG_VERSION)
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
--- a/net/wireless/reg.c
|
||||
+++ b/net/wireless/reg.c
|
||||
@@ -3373,6 +3373,8 @@ void regulatory_hint_country_ie(struct w
|
||||
@@ -3374,6 +3374,8 @@ void regulatory_hint_country_ie(struct w
|
||||
enum environment_cap env = ENVIRON_ANY;
|
||||
struct regulatory_request *request = NULL, *lr;
|
||||
|
||||
|
|
@ -9,7 +9,7 @@
|
|||
/* IE len must be evenly divisible by 2 */
|
||||
if (country_ie_len & 0x01)
|
||||
return;
|
||||
@@ -3624,6 +3626,7 @@ static bool is_wiphy_all_set_reg_flag(en
|
||||
@@ -3625,6 +3627,7 @@ static bool is_wiphy_all_set_reg_flag(en
|
||||
|
||||
void regulatory_hint_disconnect(void)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@
|
|||
#include "../ath.h"
|
||||
#include "ath5k.h"
|
||||
#include "debug.h"
|
||||
@@ -71,7 +72,7 @@ static void ath5k_pci_read_cachesize(str
|
||||
@@ -73,7 +74,7 @@ static void ath5k_pci_read_cachesize(str
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
@ -17,7 +17,7 @@
|
|||
*/
|
||||
static bool
|
||||
ath5k_pci_eeprom_read(struct ath_common *common, u32 offset, u16 *data)
|
||||
@@ -79,6 +80,19 @@ ath5k_pci_eeprom_read(struct ath_common
|
||||
@@ -81,6 +82,19 @@ ath5k_pci_eeprom_read(struct ath_common
|
||||
struct ath5k_hw *ah = (struct ath5k_hw *) common->ah;
|
||||
u32 status, timeout;
|
||||
|
||||
|
|
@ -37,7 +37,7 @@
|
|||
/*
|
||||
* Initialize EEPROM access
|
||||
*/
|
||||
@@ -122,6 +136,16 @@ static int ath5k_pci_eeprom_read_mac(str
|
||||
@@ -124,6 +138,16 @@ static int ath5k_pci_eeprom_read_mac(str
|
||||
u16 data;
|
||||
int octet;
|
||||
|
||||
|
|
|
|||
|
|
@ -456,7 +456,7 @@ v13:
|
|||
{
|
||||
--- a/drivers/net/wireless/ath/ath10k/wmi-tlv.c
|
||||
+++ b/drivers/net/wireless/ath/ath10k/wmi-tlv.c
|
||||
@@ -4598,6 +4598,8 @@ static const struct wmi_ops wmi_tlv_ops
|
||||
@@ -4603,6 +4603,8 @@ static const struct wmi_ops wmi_tlv_ops
|
||||
.gen_echo = ath10k_wmi_tlv_op_gen_echo,
|
||||
.gen_vdev_spectral_conf = ath10k_wmi_tlv_op_gen_vdev_spectral_conf,
|
||||
.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 = {
|
||||
--- a/drivers/net/wireless/ath/ath10k/wmi.c
|
||||
+++ b/drivers/net/wireless/ath/ath10k/wmi.c
|
||||
@@ -7492,6 +7492,49 @@ ath10k_wmi_op_gen_peer_set_param(struct
|
||||
@@ -7493,6 +7493,49 @@ ath10k_wmi_op_gen_peer_set_param(struct
|
||||
return skb;
|
||||
}
|
||||
|
||||
|
|
@ -517,7 +517,7 @@ v13:
|
|||
static struct sk_buff *
|
||||
ath10k_wmi_op_gen_set_psmode(struct ath10k *ar, u32 vdev_id,
|
||||
enum wmi_sta_ps_mode psmode)
|
||||
@@ -9180,6 +9223,9 @@ static const struct wmi_ops wmi_ops = {
|
||||
@@ -9181,6 +9224,9 @@ static const struct wmi_ops wmi_ops = {
|
||||
.fw_stats_fill = ath10k_wmi_main_op_fw_stats_fill,
|
||||
.get_vdev_subtype = ath10k_wmi_op_get_vdev_subtype,
|
||||
.gen_echo = ath10k_wmi_op_gen_echo,
|
||||
|
|
@ -527,7 +527,7 @@ v13:
|
|||
/* .gen_bcn_tmpl not implemented */
|
||||
/* .gen_prb_tmpl not implemented */
|
||||
/* .gen_p2p_go_bcn_ie not implemented */
|
||||
@@ -9250,6 +9296,8 @@ static const struct wmi_ops wmi_10_1_ops
|
||||
@@ -9251,6 +9297,8 @@ static const struct wmi_ops wmi_10_1_ops
|
||||
.fw_stats_fill = ath10k_wmi_10x_op_fw_stats_fill,
|
||||
.get_vdev_subtype = ath10k_wmi_op_get_vdev_subtype,
|
||||
.gen_echo = ath10k_wmi_op_gen_echo,
|
||||
|
|
@ -536,7 +536,7 @@ v13:
|
|||
/* .gen_bcn_tmpl not implemented */
|
||||
/* .gen_prb_tmpl not implemented */
|
||||
/* .gen_p2p_go_bcn_ie not implemented */
|
||||
@@ -9322,6 +9370,8 @@ static const struct wmi_ops wmi_10_2_ops
|
||||
@@ -9323,6 +9371,8 @@ static const struct wmi_ops wmi_10_2_ops
|
||||
.gen_delba_send = ath10k_wmi_op_gen_delba_send,
|
||||
.fw_stats_fill = ath10k_wmi_10x_op_fw_stats_fill,
|
||||
.get_vdev_subtype = ath10k_wmi_op_get_vdev_subtype,
|
||||
|
|
@ -545,7 +545,7 @@ v13:
|
|||
/* .gen_pdev_enable_adaptive_cca not implemented */
|
||||
};
|
||||
|
||||
@@ -9393,6 +9443,8 @@ static const struct wmi_ops wmi_10_2_4_o
|
||||
@@ -9394,6 +9444,8 @@ static const struct wmi_ops wmi_10_2_4_o
|
||||
ath10k_wmi_op_gen_pdev_enable_adaptive_cca,
|
||||
.get_vdev_subtype = ath10k_wmi_10_2_4_op_get_vdev_subtype,
|
||||
.gen_bb_timing = ath10k_wmi_10_2_4_op_gen_bb_timing,
|
||||
|
|
@ -554,7 +554,7 @@ v13:
|
|||
/* .gen_bcn_tmpl not implemented */
|
||||
/* .gen_prb_tmpl not implemented */
|
||||
/* .gen_p2p_go_bcn_ie not implemented */
|
||||
@@ -9474,6 +9526,8 @@ static const struct wmi_ops wmi_10_4_ops
|
||||
@@ -9475,6 +9527,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_echo = ath10k_wmi_op_gen_echo,
|
||||
.gen_pdev_get_tpc_config = ath10k_wmi_10_2_4_op_gen_pdev_get_tpc_config,
|
||||
|
|
|
|||
|
|
@ -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
|
||||
+++ b/drivers/net/wireless/ath/ath11k/core.c
|
||||
@@ -1668,7 +1668,7 @@ static void ath11k_update_11d(struct wor
|
||||
@@ -1675,7 +1675,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_pdev *pdev;
|
||||
@@ -1757,9 +1757,6 @@ static void ath11k_core_restart(struct w
|
||||
@@ -1764,9 +1764,6 @@ static void ath11k_core_restart(struct w
|
||||
struct ath11k_base *ab = container_of(work, struct ath11k_base, restart_work);
|
||||
int ret;
|
||||
|
||||
|
|
@ -56,7 +56,7 @@ Link: https://lore.kernel.org/r/20220923170235.18873-1-quic_adisi@quicinc.com
|
|||
ath11k_err(ab, "failed to reconfigure driver on crash recovery\n");
|
||||
--- a/drivers/net/wireless/ath/ath11k/core.h
|
||||
+++ b/drivers/net/wireless/ath/ath11k/core.h
|
||||
@@ -1158,6 +1158,7 @@ int ath11k_core_check_smbios(struct ath1
|
||||
@@ -1160,6 +1160,7 @@ int ath11k_core_check_smbios(struct ath1
|
||||
void ath11k_core_halt(struct ath11k *ar);
|
||||
int ath11k_core_resume(struct ath11k_base *ab);
|
||||
int ath11k_core_suspend(struct ath11k_base *ab);
|
||||
|
|
@ -66,7 +66,7 @@ Link: https://lore.kernel.org/r/20220923170235.18873-1-quic_adisi@quicinc.com
|
|||
const char *filename);
|
||||
--- a/drivers/net/wireless/ath/ath11k/qmi.c
|
||||
+++ b/drivers/net/wireless/ath/ath11k/qmi.c
|
||||
@@ -3169,6 +3169,9 @@ static void ath11k_qmi_driver_event_work
|
||||
@@ -3178,6 +3178,9 @@ static void ath11k_qmi_driver_event_work
|
||||
case ATH11K_QMI_EVENT_SERVER_EXIT:
|
||||
set_bit(ATH11K_FLAG_CRASH_FLUSH, &ab->dev_flags);
|
||||
set_bit(ATH11K_FLAG_RECOVERY, &ab->dev_flags);
|
||||
|
|
|
|||
|
|
@ -90,7 +90,7 @@ Link: https://lore.kernel.org/r/20221007051130.6067-1-quic_mpubbise@quicinc.com
|
|||
|
||||
exit:
|
||||
kfree(arg.chan_list);
|
||||
@@ -9072,6 +9094,9 @@ static int __ath11k_mac_register(struct
|
||||
@@ -9074,6 +9096,9 @@ static int __ath11k_mac_register(struct
|
||||
NL80211_EXT_FEATURE_UNSOL_BCAST_PROBE_RESP);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
+++ b/drivers/net/wireless/ath/ath11k/core.c
|
||||
@@ -1704,6 +1704,10 @@ void ath11k_core_pre_reconfigure_recover
|
||||
@@ -1711,6 +1711,10 @@ void ath11k_core_pre_reconfigure_recover
|
||||
ath11k_mac_tx_mgmt_pending_free, ar);
|
||||
idr_destroy(&ar->txmgmt_idr);
|
||||
wake_up(&ar->txmgmt_empty_waitq);
|
||||
|
|
|
|||
|
|
@ -34,7 +34,7 @@ Link: https://lore.kernel.org/r/20221122132152.17771-4-quic_kathirve@quicinc.com
|
|||
.rx_mac_buf_ring = false,
|
||||
--- a/drivers/net/wireless/ath/ath11k/core.h
|
||||
+++ b/drivers/net/wireless/ath/ath11k/core.h
|
||||
@@ -1145,6 +1145,9 @@ extern const struct service_to_pipe ath1
|
||||
@@ -1147,6 +1147,9 @@ extern const struct service_to_pipe ath1
|
||||
extern const struct ce_pipe_config ath11k_target_ce_config_wlan_qca6390[];
|
||||
extern const struct service_to_pipe ath11k_target_service_to_ce_map_wlan_qca6390[];
|
||||
|
||||
|
|
|
|||
|
|
@ -212,7 +212,7 @@ Link: https://lore.kernel.org/r/20221122132152.17771-5-quic_kathirve@quicinc.com
|
|||
.rx_mac_buf_ring = false,
|
||||
--- a/drivers/net/wireless/ath/ath11k/core.h
|
||||
+++ b/drivers/net/wireless/ath/ath11k/core.h
|
||||
@@ -851,6 +851,7 @@ struct ath11k_base {
|
||||
@@ -853,6 +853,7 @@ struct ath11k_base {
|
||||
struct ath11k_dp dp;
|
||||
|
||||
void __iomem *mem;
|
||||
|
|
|
|||
|
|
@ -146,7 +146,7 @@ Link: https://lore.kernel.org/r/20221220044435.10506-1-quic_rajkbhag@quicinc.com
|
|||
if (changed & BSS_CHANGED_FILS_DISCOVERY ||
|
||||
changed & BSS_CHANGED_UNSOL_BCAST_PROBE_RESP)
|
||||
ath11k_mac_fils_discovery(arvif, info);
|
||||
@@ -9125,6 +9139,10 @@ static int __ath11k_mac_register(struct
|
||||
@@ -9127,6 +9141,10 @@ static int __ath11k_mac_register(struct
|
||||
wiphy_ext_feature_set(ar->hw->wiphy,
|
||||
NL80211_EXT_FEATURE_SET_SCAN_DWELL);
|
||||
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
--- a/drivers/net/wireless/ath/ath11k/mac.c
|
||||
+++ b/drivers/net/wireless/ath/ath11k/mac.c
|
||||
@@ -9186,6 +9186,11 @@ static int __ath11k_mac_register(struct
|
||||
@@ -9188,6 +9188,11 @@ static int __ath11k_mac_register(struct
|
||||
goto err_free_if_combs;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -65,7 +65,7 @@ Link: https://lore.kernel.org/r/20230309164434.32660-1-quic_hprem@quicinc.com
|
|||
return 0;
|
||||
}
|
||||
|
||||
@@ -3037,39 +3014,51 @@ static int ath11k_dp_rx_reap_mon_status_
|
||||
@@ -3044,39 +3021,51 @@ static int ath11k_dp_rx_reap_mon_status_
|
||||
|
||||
spin_lock_bh(&rx_ring->idr_lock);
|
||||
skb = idr_find(&rx_ring->bufs_idr, buf_id);
|
||||
|
|
|
|||
|
|
@ -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_MESH_POINT)) {
|
||||
arvif->ftm_responder = info->ftm_responder;
|
||||
@@ -9246,7 +9246,7 @@ static int __ath11k_mac_register(struct
|
||||
@@ -9248,7 +9248,7 @@ static int __ath11k_mac_register(struct
|
||||
wiphy_ext_feature_set(ar->hw->wiphy,
|
||||
NL80211_EXT_FEATURE_SET_SCAN_DWELL);
|
||||
|
||||
|
|
|
|||
|
|
@ -24,7 +24,7 @@ Link: https://lore.kernel.org/r/20230320110312.20639-1-quic_ppranees@quicinc.com
|
|||
|
||||
--- a/drivers/net/wireless/ath/ath11k/hal_rx.c
|
||||
+++ b/drivers/net/wireless/ath/ath11k/hal_rx.c
|
||||
@@ -865,6 +865,12 @@ ath11k_hal_rx_populate_mu_user_info(void
|
||||
@@ -866,6 +866,12 @@ ath11k_hal_rx_populate_mu_user_info(void
|
||||
ath11k_hal_rx_populate_byte_count(rx_tlv, ppdu_info, rx_user_status);
|
||||
}
|
||||
|
||||
|
|
@ -37,7 +37,7 @@ Link: https://lore.kernel.org/r/20230320110312.20639-1-quic_ppranees@quicinc.com
|
|||
static enum hal_rx_mon_status
|
||||
ath11k_hal_rx_parse_mon_status_tlv(struct ath11k_base *ab,
|
||||
struct hal_rx_mon_ppdu_info *ppdu_info,
|
||||
@@ -1459,9 +1465,11 @@ ath11k_hal_rx_parse_mon_status_tlv(struc
|
||||
@@ -1460,9 +1466,11 @@ ath11k_hal_rx_parse_mon_status_tlv(struc
|
||||
break;
|
||||
}
|
||||
case HAL_RX_MPDU_START: {
|
||||
|
|
|
|||
|
|
@ -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
|
||||
+++ b/drivers/net/wireless/ath/ath11k/dp_rx.c
|
||||
@@ -3114,8 +3114,11 @@ int ath11k_peer_rx_frag_setup(struct ath
|
||||
@@ -3121,8 +3121,11 @@ int ath11k_peer_rx_frag_setup(struct ath
|
||||
int i;
|
||||
|
||||
tfm = crypto_alloc_shash("michael_mic", 0, 0);
|
||||
|
|
|
|||
|
|
@ -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
|
||||
+++ b/drivers/net/wireless/ath/ath11k/dp_rx.c
|
||||
@@ -3606,7 +3606,7 @@ static int ath11k_dp_rx_frag_h_mpdu(stru
|
||||
@@ -3613,7 +3613,7 @@ static int ath11k_dp_rx_frag_h_mpdu(stru
|
||||
goto out_unlock;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -18,7 +18,7 @@ Link: https://lore.kernel.org/r/20230403195738.25367-3-quic_pradeepc@quicinc.com
|
|||
|
||||
--- a/drivers/net/wireless/ath/ath11k/hal_rx.c
|
||||
+++ b/drivers/net/wireless/ath/ath11k/hal_rx.c
|
||||
@@ -1029,7 +1029,7 @@ ath11k_hal_rx_parse_mon_status_tlv(struc
|
||||
@@ -1030,7 +1030,7 @@ ath11k_hal_rx_parse_mon_status_tlv(struc
|
||||
info1 = __le32_to_cpu(vht_sig->info1);
|
||||
|
||||
ppdu_info->ldpc = FIELD_GET(HAL_RX_VHT_SIG_A_INFO_INFO1_SU_MU_CODING,
|
||||
|
|
@ -27,7 +27,7 @@ Link: https://lore.kernel.org/r/20230403195738.25367-3-quic_pradeepc@quicinc.com
|
|||
ppdu_info->mcs = FIELD_GET(HAL_RX_VHT_SIG_A_INFO_INFO1_MCS,
|
||||
info1);
|
||||
gi_setting = FIELD_GET(HAL_RX_VHT_SIG_A_INFO_INFO1_GI_SETTING,
|
||||
@@ -1452,7 +1452,7 @@ ath11k_hal_rx_parse_mon_status_tlv(struc
|
||||
@@ -1453,7 +1453,7 @@ ath11k_hal_rx_parse_mon_status_tlv(struc
|
||||
* PHYRX_OTHER_RECEIVE_INFO TLV.
|
||||
*/
|
||||
ppdu_info->rssi_comb =
|
||||
|
|
|
|||
|
|
@ -56,7 +56,7 @@ Link: https://lore.kernel.org/r/20230405221648.17950-2-quic_alokad@quicinc.com
|
|||
#define ATH11K_QUEUE_LEN 4096
|
||||
--- a/drivers/net/wireless/ath/ath11k/mac.c
|
||||
+++ b/drivers/net/wireless/ath/ath11k/mac.c
|
||||
@@ -9013,19 +9013,23 @@ static int ath11k_mac_setup_iface_combin
|
||||
@@ -9015,19 +9015,23 @@ static int ath11k_mac_setup_iface_combin
|
||||
|
||||
static const u8 ath11k_if_types_ext_capa[] = {
|
||||
[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[] = {
|
||||
@@ -9263,6 +9267,9 @@ static int __ath11k_mac_register(struct
|
||||
@@ -9265,6 +9269,9 @@ static int __ath11k_mac_register(struct
|
||||
wiphy_ext_feature_set(ar->hw->wiphy,
|
||||
NL80211_EXT_FEATURE_ENABLE_FTM_RESPONDER);
|
||||
|
||||
|
|
|
|||
|
|
@ -1,128 +0,0 @@
|
|||
From 86f85575a3f6a20cef1c8bb98e78585fe3a53ccc Mon Sep 17 00:00:00 2001
|
||||
From: Govindaraj Saminathan <quic_gsaminat@quicinc.com>
|
||||
Date: Fri, 26 May 2023 12:41:06 +0300
|
||||
Subject: [PATCH 82/84] wifi: ath11k: remove unused function
|
||||
ath11k_tm_event_wmi()
|
||||
|
||||
The function ath11k_tm_event_wmi() is only defined and it is not used
|
||||
anywhere. Hence remove the unused.
|
||||
|
||||
Tested-on: IPQ8074 hw2.0 AHB WLAN.HK.2.7.0.1-01744-QCAHKSWPL_SILICONZ-1
|
||||
|
||||
Signed-off-by: Govindaraj Saminathan <quic_gsaminat@quicinc.com>
|
||||
Signed-off-by: Raj Kumar Bhagat <quic_rajkbhag@quicinc.com>
|
||||
Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
|
||||
Link: https://lore.kernel.org/r/20230517135934.16408-2-quic_rajkbhag@quicinc.com
|
||||
---
|
||||
drivers/net/wireless/ath/ath11k/testmode.c | 64 +---------------------
|
||||
drivers/net/wireless/ath/ath11k/testmode.h | 8 +--
|
||||
2 files changed, 2 insertions(+), 70 deletions(-)
|
||||
|
||||
--- a/drivers/net/wireless/ath/ath11k/testmode.c
|
||||
+++ b/drivers/net/wireless/ath/ath11k/testmode.c
|
||||
@@ -1,6 +1,7 @@
|
||||
// SPDX-License-Identifier: BSD-3-Clause-Clear
|
||||
/*
|
||||
* Copyright (c) 2018-2019 The Linux Foundation. All rights reserved.
|
||||
+ * Copyright (c) 2023 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
*/
|
||||
|
||||
#include "testmode.h"
|
||||
@@ -20,69 +21,6 @@ static const struct nla_policy ath11k_tm
|
||||
[ATH11K_TM_ATTR_VERSION_MINOR] = { .type = NLA_U32 },
|
||||
};
|
||||
|
||||
-/* Returns true if callee consumes the skb and the skb should be discarded.
|
||||
- * Returns false if skb is not used. Does not sleep.
|
||||
- */
|
||||
-bool ath11k_tm_event_wmi(struct ath11k *ar, u32 cmd_id, struct sk_buff *skb)
|
||||
-{
|
||||
- struct sk_buff *nl_skb;
|
||||
- bool consumed;
|
||||
- int ret;
|
||||
-
|
||||
- ath11k_dbg(ar->ab, ATH11K_DBG_TESTMODE,
|
||||
- "testmode event wmi cmd_id %d skb %pK skb->len %d\n",
|
||||
- cmd_id, skb, skb->len);
|
||||
-
|
||||
- ath11k_dbg_dump(ar->ab, ATH11K_DBG_TESTMODE, NULL, "", skb->data, skb->len);
|
||||
-
|
||||
- spin_lock_bh(&ar->data_lock);
|
||||
-
|
||||
- consumed = true;
|
||||
-
|
||||
- nl_skb = cfg80211_testmode_alloc_event_skb(ar->hw->wiphy,
|
||||
- 2 * sizeof(u32) + skb->len,
|
||||
- GFP_ATOMIC);
|
||||
- if (!nl_skb) {
|
||||
- ath11k_warn(ar->ab,
|
||||
- "failed to allocate skb for testmode wmi event\n");
|
||||
- goto out;
|
||||
- }
|
||||
-
|
||||
- ret = nla_put_u32(nl_skb, ATH11K_TM_ATTR_CMD, ATH11K_TM_CMD_WMI);
|
||||
- if (ret) {
|
||||
- ath11k_warn(ar->ab,
|
||||
- "failed to put testmode wmi event cmd attribute: %d\n",
|
||||
- ret);
|
||||
- kfree_skb(nl_skb);
|
||||
- goto out;
|
||||
- }
|
||||
-
|
||||
- ret = nla_put_u32(nl_skb, ATH11K_TM_ATTR_WMI_CMDID, cmd_id);
|
||||
- if (ret) {
|
||||
- ath11k_warn(ar->ab,
|
||||
- "failed to put testmode wmi even cmd_id: %d\n",
|
||||
- ret);
|
||||
- kfree_skb(nl_skb);
|
||||
- goto out;
|
||||
- }
|
||||
-
|
||||
- ret = nla_put(nl_skb, ATH11K_TM_ATTR_DATA, skb->len, skb->data);
|
||||
- if (ret) {
|
||||
- ath11k_warn(ar->ab,
|
||||
- "failed to copy skb to testmode wmi event: %d\n",
|
||||
- ret);
|
||||
- kfree_skb(nl_skb);
|
||||
- goto out;
|
||||
- }
|
||||
-
|
||||
- cfg80211_testmode_event(nl_skb, GFP_ATOMIC);
|
||||
-
|
||||
-out:
|
||||
- spin_unlock_bh(&ar->data_lock);
|
||||
-
|
||||
- return consumed;
|
||||
-}
|
||||
-
|
||||
static int ath11k_tm_cmd_get_version(struct ath11k *ar, struct nlattr *tb[])
|
||||
{
|
||||
struct sk_buff *skb;
|
||||
--- a/drivers/net/wireless/ath/ath11k/testmode.h
|
||||
+++ b/drivers/net/wireless/ath/ath11k/testmode.h
|
||||
@@ -1,24 +1,18 @@
|
||||
/* SPDX-License-Identifier: BSD-3-Clause-Clear */
|
||||
/*
|
||||
* Copyright (c) 2018-2019 The Linux Foundation. All rights reserved.
|
||||
+ * Copyright (c) 2023 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
*/
|
||||
|
||||
#include "core.h"
|
||||
|
||||
#ifdef CPTCFG_NL80211_TESTMODE
|
||||
|
||||
-bool ath11k_tm_event_wmi(struct ath11k *ar, u32 cmd_id, struct sk_buff *skb);
|
||||
int ath11k_tm_cmd(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
|
||||
void *data, int len);
|
||||
|
||||
#else
|
||||
|
||||
-static inline bool ath11k_tm_event_wmi(struct ath11k *ar, u32 cmd_id,
|
||||
- struct sk_buff *skb)
|
||||
-{
|
||||
- return false;
|
||||
-}
|
||||
-
|
||||
static inline int ath11k_tm_cmd(struct ieee80211_hw *hw,
|
||||
struct ieee80211_vif *vif,
|
||||
void *data, int len)
|
||||
|
|
@ -91,7 +91,7 @@ Link: https://lore.kernel.org/r/20230517135934.16408-4-quic_rajkbhag@quicinc.com
|
|||
static const struct ath11k_hw_params ath11k_hw_params[] = {
|
||||
{
|
||||
.hw_rev = ATH11K_HW_IPQ8074,
|
||||
@@ -1381,6 +1385,11 @@ static int ath11k_core_soc_create(struct
|
||||
@@ -1382,6 +1386,11 @@ static int ath11k_core_soc_create(struct
|
||||
{
|
||||
int ret;
|
||||
|
||||
|
|
@ -103,16 +103,16 @@ Link: https://lore.kernel.org/r/20230517135934.16408-4-quic_rajkbhag@quicinc.com
|
|||
ret = ath11k_qmi_init_service(ab);
|
||||
if (ret) {
|
||||
ath11k_err(ab, "failed to initialize qmi :%d\n", ret);
|
||||
@@ -1607,7 +1616,7 @@ int ath11k_core_qmi_firmware_ready(struc
|
||||
{
|
||||
int ret;
|
||||
@@ -1622,7 +1631,7 @@ int ath11k_core_qmi_firmware_ready(struc
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
- ret = ath11k_core_start_firmware(ab, ATH11K_FIRMWARE_MODE_NORMAL);
|
||||
+ ret = ath11k_core_start_firmware(ab, ab->fw_mode);
|
||||
if (ret) {
|
||||
ath11k_err(ab, "failed to start firmware: %d\n", ret);
|
||||
return ret;
|
||||
@@ -1772,7 +1781,8 @@ void ath11k_core_pre_reconfigure_recover
|
||||
@@ -1779,7 +1788,8 @@ void ath11k_core_pre_reconfigure_recover
|
||||
for (i = 0; i < ab->num_radios; i++) {
|
||||
pdev = &ab->pdevs[i];
|
||||
ar = pdev->ar;
|
||||
|
|
@ -122,7 +122,7 @@ Link: https://lore.kernel.org/r/20230517135934.16408-4-quic_rajkbhag@quicinc.com
|
|||
continue;
|
||||
|
||||
ieee80211_stop_queues(ar->hw);
|
||||
@@ -1841,7 +1851,12 @@ static void ath11k_core_post_reconfigure
|
||||
@@ -1848,7 +1858,12 @@ static void ath11k_core_post_reconfigure
|
||||
ath11k_warn(ab,
|
||||
"device is wedged, will not restart radio %d\n", i);
|
||||
break;
|
||||
|
|
@ -170,7 +170,7 @@ Link: https://lore.kernel.org/r/20230517135934.16408-4-quic_rajkbhag@quicinc.com
|
|||
/* Add other states as required */
|
||||
};
|
||||
|
||||
@@ -709,6 +712,8 @@ struct ath11k {
|
||||
@@ -711,6 +714,8 @@ struct ath11k {
|
||||
u32 last_ppdu_id;
|
||||
u32 cached_ppdu_id;
|
||||
int monitor_vdev_id;
|
||||
|
|
@ -179,7 +179,7 @@ Link: https://lore.kernel.org/r/20230517135934.16408-4-quic_rajkbhag@quicinc.com
|
|||
#ifdef CPTCFG_ATH11K_DEBUGFS
|
||||
struct ath11k_debug debug;
|
||||
#endif
|
||||
@@ -838,6 +843,7 @@ struct ath11k_msi_config {
|
||||
@@ -840,6 +845,7 @@ struct ath11k_msi_config {
|
||||
/* Master structure to hold the hw data which may be used in core module */
|
||||
struct ath11k_base {
|
||||
enum ath11k_hw_rev hw_rev;
|
||||
|
|
@ -187,7 +187,7 @@ Link: https://lore.kernel.org/r/20230517135934.16408-4-quic_rajkbhag@quicinc.com
|
|||
struct platform_device *pdev;
|
||||
struct device *dev;
|
||||
struct ath11k_qmi qmi;
|
||||
@@ -978,6 +984,14 @@ struct ath11k_base {
|
||||
@@ -980,6 +986,14 @@ struct ath11k_base {
|
||||
const struct ath11k_pci_ops *ops;
|
||||
} pci;
|
||||
|
||||
|
|
|
|||
|
|
@ -30,7 +30,7 @@ Link: https://lore.kernel.org/r/20230517135934.16408-5-quic_rajkbhag@quicinc.com
|
|||
*/
|
||||
|
||||
#include <linux/elf.h>
|
||||
@@ -2465,6 +2465,14 @@ static int ath11k_qmi_load_bdf_qmi(struc
|
||||
@@ -2474,6 +2474,14 @@ static int ath11k_qmi_load_bdf_qmi(struc
|
||||
|
||||
fw_entry = ath11k_core_firmware_request(ab, ATH11K_DEFAULT_CAL_FILE);
|
||||
if (IS_ERR(fw_entry)) {
|
||||
|
|
|
|||
|
|
@ -115,7 +115,7 @@ Link: https://lore.kernel.org/r/20230726141032.3061-2-quic_rajkbhag@quicinc.com
|
|||
.cbcal_restart_fw = true,
|
||||
.fix_l1ss = true,
|
||||
.supports_dynamic_smps_6ghz = false,
|
||||
@@ -749,6 +757,18 @@ void ath11k_fw_stats_free(struct ath11k_
|
||||
@@ -750,6 +758,18 @@ void ath11k_fw_stats_free(struct ath11k_
|
||||
ath11k_fw_stats_bcn_free(&stats->bcn);
|
||||
}
|
||||
|
||||
|
|
@ -136,7 +136,7 @@ Link: https://lore.kernel.org/r/20230726141032.3061-2-quic_rajkbhag@quicinc.com
|
|||
int ret;
|
||||
--- a/drivers/net/wireless/ath/ath11k/core.h
|
||||
+++ b/drivers/net/wireless/ath/ath11k/core.h
|
||||
@@ -1186,6 +1186,7 @@ void ath11k_core_halt(struct ath11k *ar)
|
||||
@@ -1188,6 +1188,7 @@ void ath11k_core_halt(struct ath11k *ar)
|
||||
int ath11k_core_resume(struct ath11k_base *ab);
|
||||
int ath11k_core_suspend(struct ath11k_base *ab);
|
||||
void ath11k_core_pre_reconfigure_recovery(struct ath11k_base *ab);
|
||||
|
|
@ -158,7 +158,7 @@ Link: https://lore.kernel.org/r/20230726141032.3061-2-quic_rajkbhag@quicinc.com
|
|||
u32 num_vdevs;
|
||||
--- a/drivers/net/wireless/ath/ath11k/qmi.c
|
||||
+++ b/drivers/net/wireless/ath/ath11k/qmi.c
|
||||
@@ -2082,7 +2082,7 @@ static int ath11k_qmi_assign_target_mem_
|
||||
@@ -2091,7 +2091,7 @@ static int ath11k_qmi_assign_target_mem_
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
|
|
@ -167,7 +167,7 @@ Link: https://lore.kernel.org/r/20230726141032.3061-2-quic_rajkbhag@quicinc.com
|
|||
if (hremote_node) {
|
||||
ab->qmi.target_mem[idx].paddr =
|
||||
res.start + host_ddr_sz;
|
||||
@@ -3212,8 +3212,8 @@ static void ath11k_qmi_driver_event_work
|
||||
@@ -3221,8 +3221,8 @@ static void ath11k_qmi_driver_event_work
|
||||
break;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -122,7 +122,7 @@ Link: https://lore.kernel.org/r/20230726141032.3061-3-quic_rajkbhag@quicinc.com
|
|||
#include <linux/of.h>
|
||||
#include <linux/of_address.h>
|
||||
#include <linux/ioport.h>
|
||||
@@ -2842,6 +2843,33 @@ int ath11k_qmi_firmware_start(struct ath
|
||||
@@ -2851,6 +2852,33 @@ int ath11k_qmi_firmware_start(struct ath
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -22,7 +22,7 @@ Link: https://lore.kernel.org/r/20230726141032.3061-4-quic_rajkbhag@quicinc.com
|
|||
|
||||
--- a/drivers/net/wireless/ath/ath11k/qmi.c
|
||||
+++ b/drivers/net/wireless/ath/ath11k/qmi.c
|
||||
@@ -2847,7 +2847,7 @@ int ath11k_qmi_fwreset_from_cold_boot(st
|
||||
@@ -2856,7 +2856,7 @@ int ath11k_qmi_fwreset_from_cold_boot(st
|
||||
{
|
||||
int timeout;
|
||||
|
||||
|
|
|
|||
|
|
@ -22,7 +22,7 @@ Link: https://lore.kernel.org/r/20230830060226.18664-1-quic_wgong@quicinc.com
|
|||
|
||||
--- a/drivers/net/wireless/ath/ath11k/core.c
|
||||
+++ b/drivers/net/wireless/ath/ath11k/core.c
|
||||
@@ -985,9 +985,15 @@ int ath11k_core_check_dt(struct ath11k_b
|
||||
@@ -986,9 +986,15 @@ int ath11k_core_check_dt(struct ath11k_b
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
@ -39,7 +39,7 @@ Link: https://lore.kernel.org/r/20230830060226.18664-1-quic_wgong@quicinc.com
|
|||
{
|
||||
/* strlen(',variant=') + strlen(ab->qmi.target.bdf_ext) */
|
||||
char variant[9 + ATH11K_QMI_BDF_EXT_STR_LENGTH] = { 0 };
|
||||
@@ -998,11 +1004,8 @@ static int __ath11k_core_create_board_na
|
||||
@@ -999,11 +1005,8 @@ static int __ath11k_core_create_board_na
|
||||
|
||||
switch (ab->id.bdf_search) {
|
||||
case ATH11K_BDF_SEARCH_BUS_AND_BOARD:
|
||||
|
|
@ -53,7 +53,7 @@ Link: https://lore.kernel.org/r/20230830060226.18664-1-quic_wgong@quicinc.com
|
|||
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),
|
||||
@@ -1012,6 +1015,19 @@ static int __ath11k_core_create_board_na
|
||||
@@ -1013,6 +1016,19 @@ static int __ath11k_core_create_board_na
|
||||
ab->qmi.target.chip_id,
|
||||
ab->qmi.target.board_id,
|
||||
variant);
|
||||
|
|
@ -73,7 +73,7 @@ Link: https://lore.kernel.org/r/20230830060226.18664-1-quic_wgong@quicinc.com
|
|||
break;
|
||||
default:
|
||||
scnprintf(name, name_len,
|
||||
@@ -1030,19 +1046,29 @@ static int __ath11k_core_create_board_na
|
||||
@@ -1031,19 +1047,29 @@ static int __ath11k_core_create_board_na
|
||||
static int ath11k_core_create_board_name(struct ath11k_base *ab, char *name,
|
||||
size_t name_len)
|
||||
{
|
||||
|
|
@ -106,7 +106,7 @@ Link: https://lore.kernel.org/r/20230830060226.18664-1-quic_wgong@quicinc.com
|
|||
}
|
||||
|
||||
const struct firmware *ath11k_core_firmware_request(struct ath11k_base *ab,
|
||||
@@ -1289,16 +1315,21 @@ int ath11k_core_fetch_board_data_api_1(s
|
||||
@@ -1290,16 +1316,21 @@ int ath11k_core_fetch_board_data_api_1(s
|
||||
#define BOARD_NAME_SIZE 200
|
||||
int ath11k_core_fetch_bdf(struct ath11k_base *ab, struct ath11k_board_data *bd)
|
||||
{
|
||||
|
|
@ -132,7 +132,7 @@ Link: https://lore.kernel.org/r/20230830060226.18664-1-quic_wgong@quicinc.com
|
|||
}
|
||||
|
||||
ab->bd_api = 2;
|
||||
@@ -1307,13 +1338,19 @@ int ath11k_core_fetch_bdf(struct ath11k_
|
||||
@@ -1308,13 +1339,19 @@ int ath11k_core_fetch_bdf(struct ath11k_
|
||||
ATH11K_BD_IE_BOARD_NAME,
|
||||
ATH11K_BD_IE_BOARD_DATA);
|
||||
if (!ret)
|
||||
|
|
@ -155,7 +155,7 @@ Link: https://lore.kernel.org/r/20230830060226.18664-1-quic_wgong@quicinc.com
|
|||
}
|
||||
|
||||
ret = ath11k_core_fetch_board_data_api_n(ab, bd, fallback_boardname,
|
||||
@@ -1321,7 +1358,28 @@ int ath11k_core_fetch_bdf(struct ath11k_
|
||||
@@ -1322,7 +1359,28 @@ int ath11k_core_fetch_bdf(struct ath11k_
|
||||
ATH11K_BD_IE_BOARD_NAME,
|
||||
ATH11K_BD_IE_BOARD_DATA);
|
||||
if (!ret)
|
||||
|
|
@ -185,7 +185,7 @@ Link: https://lore.kernel.org/r/20230830060226.18664-1-quic_wgong@quicinc.com
|
|||
|
||||
ab->bd_api = 1;
|
||||
ret = ath11k_core_fetch_board_data_api_1(ab, bd, ATH11K_DEFAULT_BOARD_FILE);
|
||||
@@ -1334,14 +1392,22 @@ int ath11k_core_fetch_bdf(struct ath11k_
|
||||
@@ -1335,14 +1393,22 @@ int ath11k_core_fetch_bdf(struct ath11k_
|
||||
ath11k_err(ab, "failed to fetch board data for %s from %s\n",
|
||||
fallback_boardname, filepath);
|
||||
|
||||
|
|
|
|||
|
|
@ -31,7 +31,7 @@ Signed-off-by: Robert Marko <robimarko@gmail.com>
|
|||
{
|
||||
.hw_rev = ATH11K_HW_IPQ8074,
|
||||
.name = "ipq8074 hw2.0",
|
||||
@@ -2040,7 +2040,8 @@ static void ath11k_core_reset(struct wor
|
||||
@@ -2047,7 +2047,8 @@ static void ath11k_core_reset(struct wor
|
||||
static int ath11k_init_hw_params(struct ath11k_base *ab)
|
||||
{
|
||||
const struct ath11k_hw_params *hw_params = NULL;
|
||||
|
|
@ -41,7 +41,7 @@ Signed-off-by: Robert Marko <robimarko@gmail.com>
|
|||
|
||||
for (i = 0; i < ARRAY_SIZE(ath11k_hw_params); i++) {
|
||||
hw_params = &ath11k_hw_params[i];
|
||||
@@ -2056,7 +2057,31 @@ static int ath11k_init_hw_params(struct
|
||||
@@ -2063,7 +2064,31 @@ static int ath11k_init_hw_params(struct
|
||||
|
||||
ab->hw_params = *hw_params;
|
||||
|
||||
|
|
|
|||
|
|
@ -1,11 +0,0 @@
|
|||
--- a/drivers/net/wireless/ath/ath5k/pci.c
|
||||
+++ b/drivers/net/wireless/ath/ath5k/pci.c
|
||||
@@ -47,6 +47,8 @@ static const struct pci_device_id ath5k_
|
||||
{ PCI_VDEVICE(ATHEROS, 0x001b) }, /* 5413 Eagle */
|
||||
{ PCI_VDEVICE(ATHEROS, 0x001c) }, /* PCI-E cards */
|
||||
{ PCI_VDEVICE(ATHEROS, 0x001d) }, /* 2417 Nala */
|
||||
+ { PCI_VDEVICE(ATHEROS, 0xff16) }, /* 2413,2414 sx76x on lantiq_danube */
|
||||
+ { PCI_VDEVICE(ATHEROS, 0xff1a) }, /* 2417 arv45xx on lantiq_danube */
|
||||
{ PCI_VDEVICE(ATHEROS, 0xff1b) }, /* AR5BXB63 */
|
||||
{ 0 }
|
||||
};
|
||||
|
|
@ -1,6 +1,6 @@
|
|||
--- a/drivers/net/wireless/ath/ath9k/init.c
|
||||
+++ b/drivers/net/wireless/ath/ath9k/init.c
|
||||
@@ -882,6 +882,7 @@ static const struct ieee80211_iface_limi
|
||||
@@ -884,6 +884,7 @@ static const struct ieee80211_iface_limi
|
||||
BIT(NL80211_IFTYPE_AP) },
|
||||
{ .max = 1, .types = BIT(NL80211_IFTYPE_P2P_CLIENT) |
|
||||
BIT(NL80211_IFTYPE_P2P_GO) },
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@ Signed-off-by: David Bauer <mail@david-bauer.net>
|
|||
|
||||
--- a/drivers/net/wireless/ath/ath9k/init.c
|
||||
+++ b/drivers/net/wireless/ath/ath9k/init.c
|
||||
@@ -963,6 +963,7 @@ static void ath9k_set_hw_capab(struct at
|
||||
@@ -965,6 +965,7 @@ static void ath9k_set_hw_capab(struct at
|
||||
ieee80211_hw_set(hw, HOST_BROADCAST_PS_BUFFERING);
|
||||
ieee80211_hw_set(hw, SUPPORT_FAST_XMIT);
|
||||
ieee80211_hw_set(hw, SUPPORTS_CLONED_SKBS);
|
||||
|
|
@ -22,7 +22,7 @@ Signed-off-by: David Bauer <mail@david-bauer.net>
|
|||
|
||||
if (ath9k_ps_enable)
|
||||
ieee80211_hw_set(hw, SUPPORTS_PS);
|
||||
@@ -975,9 +976,6 @@ static void ath9k_set_hw_capab(struct at
|
||||
@@ -977,9 +978,6 @@ static void ath9k_set_hw_capab(struct at
|
||||
IEEE80211_RADIOTAP_MCS_HAVE_STBC;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -55,7 +55,7 @@
|
|||
int ath9k_init_debug(struct ath_hw *ah)
|
||||
{
|
||||
struct ath_common *common = ath9k_hw_common(ah);
|
||||
@@ -1432,6 +1480,8 @@ int ath9k_init_debug(struct ath_hw *ah)
|
||||
@@ -1430,6 +1478,8 @@ int ath9k_init_debug(struct ath_hw *ah)
|
||||
ath9k_tx99_init_debug(sc);
|
||||
ath9k_cmn_spectral_init_debug(&sc->spec_priv, sc->debug.debugfs_phy);
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
--- a/drivers/net/wireless/ath/ath9k/init.c
|
||||
+++ b/drivers/net/wireless/ath/ath9k/init.c
|
||||
@@ -1178,25 +1178,25 @@ static int __init ath9k_init(void)
|
||||
@@ -1180,25 +1180,25 @@ static int __init ath9k_init(void)
|
||||
{
|
||||
int error;
|
||||
|
||||
|
|
|
|||
|
|
@ -53,7 +53,7 @@
|
|||
int ath9k_init_debug(struct ath_hw *ah)
|
||||
{
|
||||
struct ath_common *common = ath9k_hw_common(ah);
|
||||
@@ -1482,6 +1528,8 @@ int ath9k_init_debug(struct ath_hw *ah)
|
||||
@@ -1480,6 +1526,8 @@ int ath9k_init_debug(struct ath_hw *ah)
|
||||
|
||||
debugfs_create_file("eeprom", S_IRUSR, sc->debug.debugfs_phy, sc,
|
||||
&fops_eeprom);
|
||||
|
|
|
|||
|
|
@ -181,7 +181,7 @@
|
|||
|
||||
--- a/drivers/net/wireless/ath/ath9k/init.c
|
||||
+++ b/drivers/net/wireless/ath/ath9k/init.c
|
||||
@@ -1088,7 +1088,7 @@ int ath9k_init_device(u16 devid, struct
|
||||
@@ -1090,7 +1090,7 @@ int ath9k_init_device(u16 devid, struct
|
||||
|
||||
#ifdef CPTCFG_MAC80211_LEDS
|
||||
/* must be initialized before ieee80211_register_hw */
|
||||
|
|
@ -254,7 +254,7 @@
|
|||
|
||||
int ath9k_init_debug(struct ath_hw *ah)
|
||||
{
|
||||
@@ -1530,6 +1585,10 @@ int ath9k_init_debug(struct ath_hw *ah)
|
||||
@@ -1528,6 +1583,10 @@ int ath9k_init_debug(struct ath_hw *ah)
|
||||
&fops_eeprom);
|
||||
debugfs_create_file("chanbw", S_IRUSR | S_IWUSR, sc->debug.debugfs_phy,
|
||||
sc, &fops_chanbw);
|
||||
|
|
|
|||
|
|
@ -51,7 +51,7 @@
|
|||
int ath9k_init_debug(struct ath_hw *ah)
|
||||
{
|
||||
struct ath_common *common = ath9k_hw_common(ah);
|
||||
@@ -1589,6 +1633,8 @@ int ath9k_init_debug(struct ath_hw *ah)
|
||||
@@ -1587,6 +1631,8 @@ int ath9k_init_debug(struct ath_hw *ah)
|
||||
debugfs_create_file("gpio_led", S_IWUSR,
|
||||
sc->debug.debugfs_phy, sc, &fops_gpio_led);
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -55,7 +55,7 @@
|
|||
ops->spectral_scan_config = ar9003_hw_spectral_scan_config;
|
||||
--- a/drivers/net/wireless/ath/ath9k/init.c
|
||||
+++ b/drivers/net/wireless/ath/ath9k/init.c
|
||||
@@ -870,7 +870,8 @@ static void ath9k_init_txpower_limits(st
|
||||
@@ -872,7 +872,8 @@ static void ath9k_init_txpower_limits(st
|
||||
if (ah->caps.hw_caps & ATH9K_HW_CAP_5GHZ)
|
||||
ath9k_init_band_txpower(sc, NL80211_BAND_5GHZ);
|
||||
|
||||
|
|
@ -65,7 +65,7 @@
|
|||
}
|
||||
|
||||
static const struct ieee80211_iface_limit if_limits[] = {
|
||||
@@ -1048,6 +1049,18 @@ static void ath9k_set_hw_capab(struct at
|
||||
@@ -1050,6 +1051,18 @@ static void ath9k_set_hw_capab(struct at
|
||||
wiphy_ext_feature_set(hw->wiphy, NL80211_EXT_FEATURE_CAN_REPLACE_PTK0);
|
||||
}
|
||||
|
||||
|
|
@ -84,7 +84,7 @@
|
|||
int ath9k_init_device(u16 devid, struct ath_softc *sc,
|
||||
const struct ath_bus_ops *bus_ops)
|
||||
{
|
||||
@@ -1095,6 +1108,8 @@ int ath9k_init_device(u16 devid, struct
|
||||
@@ -1097,6 +1110,8 @@ int ath9k_init_device(u16 devid, struct
|
||||
|
||||
wiphy_read_of_freq_limits(hw->wiphy);
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
--- a/drivers/net/wireless/ath/ath9k/init.c
|
||||
+++ b/drivers/net/wireless/ath/ath9k/init.c
|
||||
@@ -696,6 +696,12 @@ static int ath9k_of_init(struct ath_soft
|
||||
@@ -698,6 +698,12 @@ static int ath9k_of_init(struct ath_soft
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
@ -13,7 +13,7 @@
|
|||
static int ath9k_init_softc(u16 devid, struct ath_softc *sc,
|
||||
const struct ath_bus_ops *bus_ops)
|
||||
{
|
||||
@@ -803,6 +809,9 @@ static int ath9k_init_softc(u16 devid, s
|
||||
@@ -805,6 +811,9 @@ static int ath9k_init_softc(u16 devid, s
|
||||
if (ret)
|
||||
goto err_hw;
|
||||
|
||||
|
|
|
|||
|
|
@ -49,9 +49,9 @@ Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
|
|||
void brcmf_of_probe(struct device *dev, enum brcmf_bus_type bus_type,
|
||||
struct brcmf_mp_device *settings)
|
||||
{
|
||||
@@ -106,6 +136,8 @@ void brcmf_of_probe(struct device *dev,
|
||||
of_node_put(root);
|
||||
@@ -105,6 +135,8 @@ void brcmf_of_probe(struct device *dev,
|
||||
}
|
||||
of_node_put(root);
|
||||
|
||||
+ brcmf_of_probe_cc(dev, settings);
|
||||
+
|
||||
|
|
|
|||
|
|
@ -24,7 +24,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.com>
|
|||
#include "of.h"
|
||||
|
||||
static int brcmf_of_get_country_codes(struct device *dev,
|
||||
@@ -168,3 +169,38 @@ void brcmf_of_probe(struct device *dev,
|
||||
@@ -167,3 +168,38 @@ void brcmf_of_probe(struct device *dev,
|
||||
sdio->oob_irq_nr = irq;
|
||||
sdio->oob_irq_flags = irqf;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -6,5 +6,5 @@
|
|||
depends on m
|
||||
- select CFG80211_WEXT
|
||||
depends on CRYPTO
|
||||
depends on CRYPTO_LIB_AES
|
||||
select BPAUTO_CRYPTO_LIB_ARC4
|
||||
help
|
||||
|
|
|
|||
|
|
@ -1,169 +0,0 @@
|
|||
From e0f83d268974dab0361d11904dfc9acec53f96a6 Mon Sep 17 00:00:00 2001
|
||||
From: Eric Dumazet <edumazet@google.com>
|
||||
Date: Fri, 11 Oct 2024 17:12:17 +0000
|
||||
Subject: [PATCH] genetlink: hold RCU in genlmsg_mcast()
|
||||
|
||||
[ Upstream commit 56440d7ec28d60f8da3bfa09062b3368ff9b16db ]
|
||||
|
||||
While running net selftests with CONFIG_PROVE_RCU_LIST=y I saw
|
||||
one lockdep splat [1].
|
||||
|
||||
genlmsg_mcast() uses for_each_net_rcu(), and must therefore hold RCU.
|
||||
|
||||
Instead of letting all callers guard genlmsg_multicast_allns()
|
||||
with a rcu_read_lock()/rcu_read_unlock() pair, do it in genlmsg_mcast().
|
||||
|
||||
This also means the @flags parameter is useless, we need to always use
|
||||
GFP_ATOMIC.
|
||||
|
||||
[1]
|
||||
[10882.424136] =============================
|
||||
[10882.424166] WARNING: suspicious RCU usage
|
||||
[10882.424309] 6.12.0-rc2-virtme #1156 Not tainted
|
||||
[10882.424400] -----------------------------
|
||||
[10882.424423] net/netlink/genetlink.c:1940 RCU-list traversed in non-reader section!!
|
||||
[10882.424469]
|
||||
other info that might help us debug this:
|
||||
|
||||
[10882.424500]
|
||||
rcu_scheduler_active = 2, debug_locks = 1
|
||||
[10882.424744] 2 locks held by ip/15677:
|
||||
[10882.424791] #0: ffffffffb6b491b0 (cb_lock){++++}-{3:3}, at: genl_rcv (net/netlink/genetlink.c:1219)
|
||||
[10882.426334] #1: ffffffffb6b49248 (genl_mutex){+.+.}-{3:3}, at: genl_rcv_msg (net/netlink/genetlink.c:61 net/netlink/genetlink.c:57 net/netlink/genetlink.c:1209)
|
||||
[10882.426465]
|
||||
stack backtrace:
|
||||
[10882.426805] CPU: 14 UID: 0 PID: 15677 Comm: ip Not tainted 6.12.0-rc2-virtme #1156
|
||||
[10882.426919] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.16.3-debian-1.16.3-2 04/01/2014
|
||||
[10882.427046] Call Trace:
|
||||
[10882.427131] <TASK>
|
||||
[10882.427244] dump_stack_lvl (lib/dump_stack.c:123)
|
||||
[10882.427335] lockdep_rcu_suspicious (kernel/locking/lockdep.c:6822)
|
||||
[10882.427387] genlmsg_multicast_allns (net/netlink/genetlink.c:1940 (discriminator 7) net/netlink/genetlink.c:1977 (discriminator 7))
|
||||
[10882.427436] l2tp_tunnel_notify.constprop.0 (net/l2tp/l2tp_netlink.c:119) l2tp_netlink
|
||||
[10882.427683] l2tp_nl_cmd_tunnel_create (net/l2tp/l2tp_netlink.c:253) l2tp_netlink
|
||||
[10882.427748] genl_family_rcv_msg_doit (net/netlink/genetlink.c:1115)
|
||||
[10882.427834] genl_rcv_msg (net/netlink/genetlink.c:1195 net/netlink/genetlink.c:1210)
|
||||
[10882.427877] ? __pfx_l2tp_nl_cmd_tunnel_create (net/l2tp/l2tp_netlink.c:186) l2tp_netlink
|
||||
[10882.427927] ? __pfx_genl_rcv_msg (net/netlink/genetlink.c:1201)
|
||||
[10882.427959] netlink_rcv_skb (net/netlink/af_netlink.c:2551)
|
||||
[10882.428069] genl_rcv (net/netlink/genetlink.c:1220)
|
||||
[10882.428095] netlink_unicast (net/netlink/af_netlink.c:1332 net/netlink/af_netlink.c:1357)
|
||||
[10882.428140] netlink_sendmsg (net/netlink/af_netlink.c:1901)
|
||||
[10882.428210] ____sys_sendmsg (net/socket.c:729 (discriminator 1) net/socket.c:744 (discriminator 1) net/socket.c:2607 (discriminator 1))
|
||||
|
||||
Fixes: 33f72e6f0c67 ("l2tp : multicast notification to the registered listeners")
|
||||
Signed-off-by: Eric Dumazet <edumazet@google.com>
|
||||
Cc: James Chapman <jchapman@katalix.com>
|
||||
Cc: Tom Parkin <tparkin@katalix.com>
|
||||
Cc: Johannes Berg <johannes.berg@intel.com>
|
||||
Link: https://patch.msgid.link/20241011171217.3166614-1-edumazet@google.com
|
||||
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
||||
Signed-off-by: Sasha Levin <sashal@kernel.org>
|
||||
---
|
||||
drivers/target/target_core_user.c | 2 +-
|
||||
include/net/genetlink.h | 3 +--
|
||||
net/l2tp/l2tp_netlink.c | 4 ++--
|
||||
net/netlink/genetlink.c | 28 ++++++++++++++--------------
|
||||
net/wireless/nl80211.c | 8 ++------
|
||||
5 files changed, 20 insertions(+), 25 deletions(-)
|
||||
|
||||
--- a/backport-include/net/genetlink.h
|
||||
+++ b/backport-include/net/genetlink.h
|
||||
@@ -150,7 +150,7 @@ int genlmsg_multicast(const struct genl_
|
||||
#define genlmsg_multicast_allns LINUX_BACKPORT(genlmsg_multicast_allns)
|
||||
int backport_genlmsg_multicast_allns(const struct genl_family *family,
|
||||
struct sk_buff *skb, u32 portid,
|
||||
- unsigned int group, gfp_t flags);
|
||||
+ unsigned int group);
|
||||
|
||||
#define genl_family_attrbuf LINUX_BACKPORT(genl_family_attrbuf)
|
||||
static inline struct nlattr **genl_family_attrbuf(struct genl_family *family)
|
||||
--- a/compat/backport-genetlink.c
|
||||
+++ b/compat/backport-genetlink.c
|
||||
@@ -198,23 +198,23 @@ int genlmsg_multicast(const struct genl_
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(genlmsg_multicast);
|
||||
|
||||
-static int genlmsg_mcast(struct sk_buff *skb, u32 portid, unsigned long group,
|
||||
- gfp_t flags)
|
||||
+static int genlmsg_mcast(struct sk_buff *skb, u32 portid, unsigned long group)
|
||||
{
|
||||
struct sk_buff *tmp;
|
||||
struct net *net, *prev = NULL;
|
||||
bool delivered = false;
|
||||
int err;
|
||||
|
||||
+ rcu_read_lock();
|
||||
for_each_net_rcu(net) {
|
||||
if (prev) {
|
||||
- tmp = skb_clone(skb, flags);
|
||||
+ tmp = skb_clone(skb, GFP_ATOMIC);
|
||||
if (!tmp) {
|
||||
err = -ENOMEM;
|
||||
goto error;
|
||||
}
|
||||
err = nlmsg_multicast(prev->genl_sock, tmp,
|
||||
- portid, group, flags);
|
||||
+ portid, group, GFP_ATOMIC);
|
||||
if (!err)
|
||||
delivered = true;
|
||||
else if (err != -ESRCH)
|
||||
@@ -223,25 +223,29 @@ static int genlmsg_mcast(struct sk_buff
|
||||
|
||||
prev = net;
|
||||
}
|
||||
+ err = nlmsg_multicast(prev->genl_sock, skb, portid, group, GFP_ATOMIC);
|
||||
+
|
||||
+ rcu_read_unlock();
|
||||
|
||||
- err = nlmsg_multicast(prev->genl_sock, skb, portid, group, flags);
|
||||
if (!err)
|
||||
delivered = true;
|
||||
else if (err != -ESRCH)
|
||||
return err;
|
||||
return delivered ? 0 : -ESRCH;
|
||||
error:
|
||||
+ rcu_read_unlock();
|
||||
+
|
||||
kfree_skb(skb);
|
||||
return err;
|
||||
}
|
||||
|
||||
int backport_genlmsg_multicast_allns(const struct genl_family *family,
|
||||
struct sk_buff *skb, u32 portid,
|
||||
- unsigned int group, gfp_t flags)
|
||||
+ unsigned int group)
|
||||
{
|
||||
group = __backport_genl_group(family, group);
|
||||
if (group == INVALID_GROUP)
|
||||
return -EINVAL;
|
||||
- return genlmsg_mcast(skb, portid, group, flags);
|
||||
+ return genlmsg_mcast(skb, portid, group);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(backport_genlmsg_multicast_allns);
|
||||
--- a/net/wireless/nl80211.c
|
||||
+++ b/net/wireless/nl80211.c
|
||||
@@ -17627,10 +17627,8 @@ void nl80211_common_reg_change_event(enu
|
||||
|
||||
genlmsg_end(msg, hdr);
|
||||
|
||||
- rcu_read_lock();
|
||||
genlmsg_multicast_allns(&nl80211_fam, msg, 0,
|
||||
- NL80211_MCGRP_REGULATORY, GFP_ATOMIC);
|
||||
- rcu_read_unlock();
|
||||
+ NL80211_MCGRP_REGULATORY);
|
||||
|
||||
return;
|
||||
|
||||
@@ -18248,10 +18246,8 @@ void nl80211_send_beacon_hint_event(stru
|
||||
|
||||
genlmsg_end(msg, hdr);
|
||||
|
||||
- rcu_read_lock();
|
||||
genlmsg_multicast_allns(&nl80211_fam, msg, 0,
|
||||
- NL80211_MCGRP_REGULATORY, GFP_ATOMIC);
|
||||
- rcu_read_unlock();
|
||||
+ NL80211_MCGRP_REGULATORY);
|
||||
|
||||
return;
|
||||
|
||||
|
|
@ -17,8 +17,8 @@ Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
|
|||
|
||||
--- a/backport-include/net/genetlink.h
|
||||
+++ b/backport-include/net/genetlink.h
|
||||
@@ -172,4 +172,15 @@ static inline int genlmsg_parse(const st
|
||||
}
|
||||
@@ -192,4 +192,15 @@ int backport_genlmsg_multicast_allns(con
|
||||
#define genlmsg_multicast_allns LINUX_BACKPORT(genlmsg_multicast_allns)
|
||||
#endif /* LINUX_VERSION_IS_LESS(5,2,0) */
|
||||
|
||||
+#if LINUX_VERSION_IN_RANGE(5,15,0,5,15,169) || \
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@ Subject: [PATCH] mac80211: allow scans in access point mode (for site survey)
|
|||
|
||||
--- a/net/mac80211/cfg.c
|
||||
+++ b/net/mac80211/cfg.c
|
||||
@@ -2734,6 +2734,8 @@ static int ieee80211_scan(struct wiphy *
|
||||
@@ -2735,6 +2735,8 @@ static int ieee80211_scan(struct wiphy *
|
||||
*/
|
||||
fallthrough;
|
||||
case NL80211_IFTYPE_AP:
|
||||
|
|
|
|||
|
|
@ -51,7 +51,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
|||
*
|
||||
* Drivers can optionally delegate responsibility for scheduling queues to
|
||||
* mac80211, to take advantage of airtime fairness accounting. In this case, to
|
||||
@@ -2257,8 +2258,8 @@ struct ieee80211_link_sta {
|
||||
@@ -2258,8 +2259,8 @@ struct ieee80211_link_sta {
|
||||
* For non MLO STA it will point to the deflink data. For MLO STA
|
||||
* ieee80211_sta_recalc_aggregates() must be called to update it.
|
||||
* @support_p2p_ps: indicates whether the STA supports P2P PS mechanism or not.
|
||||
|
|
@ -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
|
||||
* specific STA information is accessed through @deflink or through
|
||||
* link[0] which points to address of @deflink. For MLO Link STA
|
||||
@@ -5700,7 +5701,7 @@ void ieee80211_key_replay(struct ieee802
|
||||
@@ -5714,7 +5715,7 @@ void ieee80211_key_replay(struct ieee802
|
||||
* @hw: pointer as obtained from ieee80211_alloc_hw().
|
||||
* @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);
|
||||
|
||||
@@ -5709,7 +5710,7 @@ void ieee80211_wake_queue(struct ieee802
|
||||
@@ -5723,7 +5724,7 @@ void ieee80211_wake_queue(struct ieee802
|
||||
* @hw: pointer as obtained from ieee80211_alloc_hw().
|
||||
* @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);
|
||||
|
||||
@@ -5718,7 +5719,7 @@ void ieee80211_stop_queue(struct ieee802
|
||||
@@ -5732,7 +5733,7 @@ void ieee80211_stop_queue(struct ieee802
|
||||
* @hw: pointer as obtained from ieee80211_alloc_hw().
|
||||
* @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.
|
||||
*/
|
||||
@@ -5729,7 +5730,7 @@ int ieee80211_queue_stopped(struct ieee8
|
||||
@@ -5743,7 +5744,7 @@ int ieee80211_queue_stopped(struct ieee8
|
||||
* ieee80211_stop_queues - stop all queues
|
||||
* @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);
|
||||
|
||||
@@ -5737,7 +5738,7 @@ void ieee80211_stop_queues(struct ieee80
|
||||
@@ -5751,7 +5752,7 @@ void ieee80211_stop_queues(struct ieee80
|
||||
* ieee80211_wake_queues - wake all queues
|
||||
* @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);
|
||||
|
||||
@@ -6960,6 +6961,18 @@ static inline struct sk_buff *ieee80211_
|
||||
@@ -6974,6 +6975,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,
|
||||
--- a/drivers/net/wireless/ath/ath11k/mac.c
|
||||
+++ b/drivers/net/wireless/ath/ath11k/mac.c
|
||||
@@ -8599,6 +8599,7 @@ err_fallback:
|
||||
@@ -8601,6 +8601,7 @@ err_fallback:
|
||||
|
||||
static const struct ieee80211_ops ath11k_ops = {
|
||||
.tx = ath11k_mac_op_tx,
|
||||
|
|
@ -166,7 +166,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
|||
.add_interface = p54_add_interface,
|
||||
--- a/drivers/net/wireless/mac80211_hwsim.c
|
||||
+++ b/drivers/net/wireless/mac80211_hwsim.c
|
||||
@@ -3109,6 +3109,7 @@ static int mac80211_hwsim_change_sta_lin
|
||||
@@ -3114,6 +3114,7 @@ static int mac80211_hwsim_change_sta_lin
|
||||
|
||||
#define HWSIM_COMMON_OPS \
|
||||
.tx = mac80211_hwsim_tx, \
|
||||
|
|
@ -306,7 +306,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
|||
.add_interface = rtl8187_add_interface,
|
||||
--- a/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_core.c
|
||||
+++ b/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_core.c
|
||||
@@ -6546,6 +6546,7 @@ static void rtl8xxxu_stop(struct ieee802
|
||||
@@ -6553,6 +6553,7 @@ static void rtl8xxxu_stop(struct ieee802
|
||||
|
||||
static const struct ieee80211_ops rtl8xxxu_ops = {
|
||||
.tx = rtl8xxxu_tx,
|
||||
|
|
@ -336,7 +336,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
|||
.stop = rtw_ops_stop,
|
||||
--- a/drivers/net/wireless/realtek/rtw89/mac80211.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw89/mac80211.c
|
||||
@@ -916,6 +916,7 @@ static int rtw89_ops_set_tid_config(stru
|
||||
@@ -918,6 +918,7 @@ static int rtw89_ops_set_tid_config(stru
|
||||
|
||||
const struct ieee80211_ops rtw89_ops = {
|
||||
.tx = rtw89_ops_tx,
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
|||
|
||||
--- a/net/mac80211/cfg.c
|
||||
+++ b/net/mac80211/cfg.c
|
||||
@@ -4359,9 +4359,6 @@ static int ieee80211_get_txq_stats(struc
|
||||
@@ -4361,9 +4361,6 @@ static int ieee80211_get_txq_stats(struc
|
||||
struct ieee80211_sub_if_data *sdata;
|
||||
int ret = 0;
|
||||
|
||||
|
|
@ -63,7 +63,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
|||
NL80211_EXT_FEATURE_AQL))
|
||||
--- a/net/mac80211/ieee80211_i.h
|
||||
+++ b/net/mac80211/ieee80211_i.h
|
||||
@@ -2301,7 +2301,6 @@ void ieee80211_wake_queue_by_reason(stru
|
||||
@@ -2299,7 +2299,6 @@ void ieee80211_wake_queue_by_reason(stru
|
||||
void ieee80211_stop_queue_by_reason(struct ieee80211_hw *hw, int queue,
|
||||
enum queue_stop_reason reason,
|
||||
bool refcounted);
|
||||
|
|
@ -73,7 +73,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
|||
void ieee80211_add_pending_skbs(struct ieee80211_local *local,
|
||||
--- a/net/mac80211/iface.c
|
||||
+++ b/net/mac80211/iface.c
|
||||
@@ -481,12 +481,6 @@ static void ieee80211_do_stop(struct iee
|
||||
@@ -482,12 +482,6 @@ static void ieee80211_do_stop(struct iee
|
||||
if (cancel_scan)
|
||||
ieee80211_scan_cancel(local);
|
||||
|
||||
|
|
@ -86,7 +86,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
|||
ieee80211_roc_purge(local, sdata);
|
||||
|
||||
switch (sdata->vif.type) {
|
||||
@@ -834,25 +828,6 @@ static void ieee80211_uninit(struct net_
|
||||
@@ -852,25 +846,6 @@ static void ieee80211_uninit(struct net_
|
||||
ieee80211_teardown_sdata(IEEE80211_DEV_TO_SUB_IF(dev));
|
||||
}
|
||||
|
||||
|
|
@ -112,7 +112,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
|||
static void
|
||||
ieee80211_get_stats64(struct net_device *dev, struct rtnl_link_stats64 *stats)
|
||||
{
|
||||
@@ -866,7 +841,6 @@ static const struct net_device_ops ieee8
|
||||
@@ -884,7 +859,6 @@ static const struct net_device_ops ieee8
|
||||
.ndo_start_xmit = ieee80211_subif_start_xmit,
|
||||
.ndo_set_rx_mode = ieee80211_set_multicast_list,
|
||||
.ndo_set_mac_address = ieee80211_change_mac,
|
||||
|
|
@ -120,7 +120,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
|||
.ndo_get_stats64 = ieee80211_get_stats64,
|
||||
};
|
||||
|
||||
@@ -988,7 +962,6 @@ static const struct net_device_ops ieee8
|
||||
@@ -1006,7 +980,6 @@ static const struct net_device_ops ieee8
|
||||
.ndo_start_xmit = ieee80211_subif_start_xmit_8023,
|
||||
.ndo_set_rx_mode = ieee80211_set_multicast_list,
|
||||
.ndo_set_mac_address = ieee80211_change_mac,
|
||||
|
|
@ -128,7 +128,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
|||
.ndo_get_stats64 = ieee80211_get_stats64,
|
||||
#if LINUX_VERSION_IS_GEQ(5,13,0)
|
||||
.ndo_fill_forward_path = ieee80211_netdev_fill_forward_path,
|
||||
@@ -1492,35 +1465,6 @@ int ieee80211_do_open(struct wireless_de
|
||||
@@ -1510,35 +1483,6 @@ int ieee80211_do_open(struct wireless_de
|
||||
|
||||
ieee80211_recalc_ps(local);
|
||||
|
||||
|
|
@ -164,7 +164,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
|||
set_bit(SDATA_STATE_RUNNING, &sdata->state);
|
||||
|
||||
return 0;
|
||||
@@ -1550,17 +1494,12 @@ static void ieee80211_if_setup(struct ne
|
||||
@@ -1568,17 +1512,12 @@ static void ieee80211_if_setup(struct ne
|
||||
{
|
||||
ether_setup(dev);
|
||||
dev->priv_flags &= ~IFF_TX_SKB_SHARING;
|
||||
|
|
@ -183,7 +183,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
|||
static void ieee80211_iface_process_skb(struct ieee80211_local *local,
|
||||
struct ieee80211_sub_if_data *sdata,
|
||||
struct sk_buff *skb)
|
||||
@@ -2145,9 +2084,7 @@ int ieee80211_if_add(struct ieee80211_lo
|
||||
@@ -2163,9 +2102,7 @@ int ieee80211_if_add(struct ieee80211_lo
|
||||
struct net_device *ndev = NULL;
|
||||
struct ieee80211_sub_if_data *sdata = NULL;
|
||||
struct txq_info *txqi;
|
||||
|
|
@ -193,7 +193,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
|||
|
||||
ASSERT_RTNL();
|
||||
|
||||
@@ -2170,30 +2107,18 @@ int ieee80211_if_add(struct ieee80211_lo
|
||||
@@ -2188,30 +2125,18 @@ int ieee80211_if_add(struct ieee80211_lo
|
||||
sizeof(void *));
|
||||
int txq_size = 0;
|
||||
|
||||
|
|
@ -228,7 +228,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
|||
ndev->tstats = netdev_alloc_pcpu_stats(struct pcpu_sw_netstats);
|
||||
--- a/net/mac80211/main.c
|
||||
+++ b/net/mac80211/main.c
|
||||
@@ -634,7 +634,7 @@ struct ieee80211_hw *ieee80211_alloc_hw_
|
||||
@@ -636,7 +636,7 @@ struct ieee80211_hw *ieee80211_alloc_hw_
|
||||
|
||||
if (WARN_ON(!ops->tx || !ops->start || !ops->stop || !ops->config ||
|
||||
!ops->add_interface || !ops->remove_interface ||
|
||||
|
|
@ -237,7 +237,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
|||
return NULL;
|
||||
|
||||
if (WARN_ON(ops->sta_state && (ops->sta_add || ops->sta_remove)))
|
||||
@@ -723,9 +723,7 @@ struct ieee80211_hw *ieee80211_alloc_hw_
|
||||
@@ -725,9 +725,7 @@ struct ieee80211_hw *ieee80211_alloc_hw_
|
||||
if (!ops->set_key)
|
||||
wiphy->flags |= WIPHY_FLAG_IBSS_RSN;
|
||||
|
||||
|
|
@ -248,7 +248,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
|||
wiphy_ext_feature_set(wiphy, NL80211_EXT_FEATURE_RRM);
|
||||
|
||||
wiphy->bss_priv_size = sizeof(struct ieee80211_bss);
|
||||
@@ -838,10 +836,7 @@ struct ieee80211_hw *ieee80211_alloc_hw_
|
||||
@@ -840,10 +838,7 @@ struct ieee80211_hw *ieee80211_alloc_hw_
|
||||
atomic_set(&local->agg_queue_stop[i], 0);
|
||||
}
|
||||
tasklet_setup(&local->tx_pending_tasklet, ieee80211_tx_pending);
|
||||
|
|
@ -466,7 +466,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
|||
}
|
||||
spin_unlock_irqrestore(&local->queue_stop_reason_lock, flags);
|
||||
|
||||
@@ -5970,10 +5951,9 @@ int ieee80211_tx_control_port(struct wip
|
||||
@@ -5972,10 +5953,9 @@ int ieee80211_tx_control_port(struct wip
|
||||
}
|
||||
|
||||
if (!IS_ERR(sta)) {
|
||||
|
|
|
|||
|
|
@ -22,7 +22,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
|||
.stop = rtw_ops_stop,
|
||||
--- a/drivers/net/wireless/realtek/rtw89/mac80211.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw89/mac80211.c
|
||||
@@ -916,7 +916,6 @@ static int rtw89_ops_set_tid_config(stru
|
||||
@@ -918,7 +918,6 @@ static int rtw89_ops_set_tid_config(stru
|
||||
|
||||
const struct ieee80211_ops rtw89_ops = {
|
||||
.tx = rtw89_ops_tx,
|
||||
|
|
|
|||
|
|
@ -59,7 +59,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||
flow = fq_find_fattest_flow(fq);
|
||||
--- a/include/net/mac80211.h
|
||||
+++ b/include/net/mac80211.h
|
||||
@@ -1816,6 +1816,10 @@ struct ieee80211_vif_cfg {
|
||||
@@ -1817,6 +1817,10 @@ struct ieee80211_vif_cfg {
|
||||
* @addr: address of this interface
|
||||
* @p2p: indicates whether this AP or STA interface is a p2p
|
||||
* 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,
|
||||
* these need to be set (or cleared) when the interface is added
|
||||
* or, if supported by the driver, the interface type is changed
|
||||
@@ -1855,6 +1859,7 @@ struct ieee80211_vif {
|
||||
@@ -1856,6 +1860,7 @@ struct ieee80211_vif {
|
||||
|
||||
struct ieee80211_txq *txq;
|
||||
|
||||
|
|
@ -80,7 +80,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||
|
||||
--- a/net/mac80211/iface.c
|
||||
+++ b/net/mac80211/iface.c
|
||||
@@ -2218,6 +2218,7 @@ int ieee80211_if_add(struct ieee80211_lo
|
||||
@@ -2236,6 +2236,7 @@ int ieee80211_if_add(struct ieee80211_lo
|
||||
ndev->priv_flags |= IFF_LIVE_ADDR_CHANGE;
|
||||
ndev->hw_features |= ndev->features &
|
||||
MAC80211_SUPPORTED_FEATURES_TX;
|
||||
|
|
|
|||
|
|
@ -68,7 +68,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||
};
|
||||
|
||||
#ifdef CPTCFG_MAC80211_MESH
|
||||
@@ -2009,6 +2024,11 @@ int ieee80211_tx_control_port(struct wip
|
||||
@@ -2007,6 +2022,11 @@ int ieee80211_tx_control_port(struct wip
|
||||
int link_id, u64 *cookie);
|
||||
int ieee80211_probe_mesh_link(struct wiphy *wiphy, struct net_device *dev,
|
||||
const u8 *buf, size_t len);
|
||||
|
|
@ -262,7 +262,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||
static inline
|
||||
--- a/net/mac80211/mesh_hwmp.c
|
||||
+++ b/net/mac80211/mesh_hwmp.c
|
||||
@@ -394,6 +394,7 @@ static u32 hwmp_route_info_get(struct ie
|
||||
@@ -400,6 +400,7 @@ static u32 hwmp_route_info_get(struct ie
|
||||
u32 orig_sn, orig_metric;
|
||||
unsigned long orig_lifetime, exp_time;
|
||||
u32 last_hop_metric, new_metric;
|
||||
|
|
@ -270,7 +270,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||
bool process = true;
|
||||
u8 hopcount;
|
||||
|
||||
@@ -491,8 +492,10 @@ static u32 hwmp_route_info_get(struct ie
|
||||
@@ -497,8 +498,10 @@ static u32 hwmp_route_info_get(struct ie
|
||||
}
|
||||
|
||||
if (fresh_info) {
|
||||
|
|
@ -282,7 +282,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||
mesh_path_assign_nexthop(mpath, sta);
|
||||
mpath->flags |= MESH_PATH_SN_VALID;
|
||||
mpath->metric = new_metric;
|
||||
@@ -502,6 +505,8 @@ static u32 hwmp_route_info_get(struct ie
|
||||
@@ -508,6 +511,8 @@ static u32 hwmp_route_info_get(struct ie
|
||||
mpath->hop_count = hopcount;
|
||||
mesh_path_activate(mpath);
|
||||
spin_unlock_bh(&mpath->state_lock);
|
||||
|
|
@ -291,7 +291,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||
ewma_mesh_fail_avg_init(&sta->mesh->fail_avg);
|
||||
/* init it at a low value - 0 start is tricky */
|
||||
ewma_mesh_fail_avg_add(&sta->mesh->fail_avg, 1);
|
||||
@@ -539,8 +544,10 @@ static u32 hwmp_route_info_get(struct ie
|
||||
@@ -545,8 +550,10 @@ static u32 hwmp_route_info_get(struct ie
|
||||
}
|
||||
|
||||
if (fresh_info) {
|
||||
|
|
@ -303,7 +303,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||
mesh_path_assign_nexthop(mpath, sta);
|
||||
mpath->metric = last_hop_metric;
|
||||
mpath->exp_time = time_after(mpath->exp_time, exp_time)
|
||||
@@ -548,6 +555,8 @@ static u32 hwmp_route_info_get(struct ie
|
||||
@@ -554,6 +561,8 @@ static u32 hwmp_route_info_get(struct ie
|
||||
mpath->hop_count = 1;
|
||||
mesh_path_activate(mpath);
|
||||
spin_unlock_bh(&mpath->state_lock);
|
||||
|
|
@ -312,7 +312,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||
ewma_mesh_fail_avg_init(&sta->mesh->fail_avg);
|
||||
/* init it at a low value - 0 start is tricky */
|
||||
ewma_mesh_fail_avg_add(&sta->mesh->fail_avg, 1);
|
||||
@@ -1215,6 +1224,20 @@ static int mesh_nexthop_lookup_nolearn(s
|
||||
@@ -1223,6 +1232,20 @@ static int mesh_nexthop_lookup_nolearn(s
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
@ -333,7 +333,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||
/**
|
||||
* mesh_nexthop_lookup - put the appropriate next hop on a mesh frame. Calling
|
||||
* this function is considered "using" the associated mpath, so preempt a path
|
||||
@@ -1242,19 +1265,15 @@ int mesh_nexthop_lookup(struct ieee80211
|
||||
@@ -1250,19 +1273,15 @@ int mesh_nexthop_lookup(struct ieee80211
|
||||
if (!mpath || !(mpath->flags & MESH_PATH_ACTIVE))
|
||||
return -ENOENT;
|
||||
|
||||
|
|
|
|||
|
|
@ -106,7 +106,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||
rx_accept:
|
||||
--- a/net/mac80211/ieee80211_i.h
|
||||
+++ b/net/mac80211/ieee80211_i.h
|
||||
@@ -2029,6 +2029,8 @@ void __ieee80211_xmit_fast(struct ieee80
|
||||
@@ -2027,6 +2027,8 @@ void __ieee80211_xmit_fast(struct ieee80
|
||||
struct ieee80211_fast_tx *fast_tx,
|
||||
struct sk_buff *skb, bool ampdu,
|
||||
const u8 *da, const u8 *sa);
|
||||
|
|
|
|||
|
|
@ -13,7 +13,7 @@ Signed-off-by: Ryder Lee <ryder.lee@mediatek.com>
|
|||
|
||||
--- a/include/net/mac80211.h
|
||||
+++ b/include/net/mac80211.h
|
||||
@@ -5977,6 +5977,18 @@ void ieee80211_queue_delayed_work(struct
|
||||
@@ -5991,6 +5991,18 @@ void ieee80211_queue_delayed_work(struct
|
||||
unsigned long delay);
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||
|
||||
--- a/net/mac80211/rx.c
|
||||
+++ b/net/mac80211/rx.c
|
||||
@@ -4580,6 +4580,12 @@ void ieee80211_check_fast_rx(struct sta_
|
||||
@@ -4584,6 +4584,12 @@ void ieee80211_check_fast_rx(struct sta_
|
||||
}
|
||||
|
||||
break;
|
||||
|
|
@ -23,7 +23,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||
default:
|
||||
goto clear;
|
||||
}
|
||||
@@ -4788,6 +4794,7 @@ static bool ieee80211_invoke_fast_rx(str
|
||||
@@ -4792,6 +4798,7 @@ static bool ieee80211_invoke_fast_rx(str
|
||||
struct sk_buff *skb = rx->skb;
|
||||
struct ieee80211_hdr *hdr = (void *)skb->data;
|
||||
struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(skb);
|
||||
|
|
@ -31,7 +31,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||
int orig_len = skb->len;
|
||||
int hdrlen = ieee80211_hdrlen(hdr->frame_control);
|
||||
int snap_offs = hdrlen;
|
||||
@@ -4849,7 +4856,8 @@ static bool ieee80211_invoke_fast_rx(str
|
||||
@@ -4853,7 +4860,8 @@ static bool ieee80211_invoke_fast_rx(str
|
||||
snap_offs += IEEE80211_CCMP_HDR_LEN;
|
||||
}
|
||||
|
||||
|
|
@ -41,7 +41,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||
if (!pskb_may_pull(skb, snap_offs + sizeof(*payload)))
|
||||
return false;
|
||||
|
||||
@@ -4888,13 +4896,29 @@ static bool ieee80211_invoke_fast_rx(str
|
||||
@@ -4892,13 +4900,29 @@ static bool ieee80211_invoke_fast_rx(str
|
||||
/* do the header conversion - first grab the addresses */
|
||||
ether_addr_copy(addrs.da, skb->data + fast_rx->da_offs);
|
||||
ether_addr_copy(addrs.sa, skb->data + fast_rx->sa_offs);
|
||||
|
|
|
|||
|
|
@ -12,7 +12,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||
|
||||
--- a/include/net/mac80211.h
|
||||
+++ b/include/net/mac80211.h
|
||||
@@ -4201,6 +4201,10 @@ struct ieee80211_prep_tx_info {
|
||||
@@ -4215,6 +4215,10 @@ struct ieee80211_prep_tx_info {
|
||||
* Note that a sta can also be inserted or removed with valid links,
|
||||
* i.e. passed to @sta_add/@sta_state with sta->valid_links not zero.
|
||||
* In fact, cannot change from having valid_links and not having them.
|
||||
|
|
@ -23,7 +23,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||
*/
|
||||
struct ieee80211_ops {
|
||||
void (*tx)(struct ieee80211_hw *hw,
|
||||
@@ -4556,6 +4560,11 @@ struct ieee80211_ops {
|
||||
@@ -4570,6 +4574,11 @@ struct ieee80211_ops {
|
||||
struct ieee80211_vif *vif,
|
||||
struct ieee80211_sta *sta,
|
||||
u16 old_links, u16 new_links);
|
||||
|
|
@ -75,7 +75,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||
MAC80211_SUPPORTED_FEATURES_RX)
|
||||
--- a/net/mac80211/iface.c
|
||||
+++ b/net/mac80211/iface.c
|
||||
@@ -834,6 +834,21 @@ ieee80211_get_stats64(struct net_device
|
||||
@@ -852,6 +852,21 @@ ieee80211_get_stats64(struct net_device
|
||||
dev_fetch_sw_netstats(stats, dev->tstats);
|
||||
}
|
||||
|
||||
|
|
@ -97,7 +97,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||
static const struct net_device_ops ieee80211_dataif_ops = {
|
||||
.ndo_open = ieee80211_open,
|
||||
.ndo_stop = ieee80211_stop,
|
||||
@@ -842,6 +857,7 @@ static const struct net_device_ops ieee8
|
||||
@@ -860,6 +875,7 @@ static const struct net_device_ops ieee8
|
||||
.ndo_set_rx_mode = ieee80211_set_multicast_list,
|
||||
.ndo_set_mac_address = ieee80211_change_mac,
|
||||
.ndo_get_stats64 = ieee80211_get_stats64,
|
||||
|
|
@ -105,7 +105,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||
};
|
||||
|
||||
#if LINUX_VERSION_IS_GEQ(5,2,0)
|
||||
@@ -966,6 +982,7 @@ static const struct net_device_ops ieee8
|
||||
@@ -984,6 +1000,7 @@ static const struct net_device_ops ieee8
|
||||
#if LINUX_VERSION_IS_GEQ(5,13,0)
|
||||
.ndo_fill_forward_path = ieee80211_netdev_fill_forward_path,
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -12,7 +12,7 @@ Reviewed-by: Greenman, Gregory <gregory.greenman@intel.com>
|
|||
|
||||
--- a/drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c
|
||||
+++ b/drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c
|
||||
@@ -4844,9 +4844,6 @@ static void iwl_mvm_mac_flush(struct iee
|
||||
@@ -4848,9 +4848,6 @@ static void iwl_mvm_mac_flush(struct iee
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -22,7 +22,7 @@ Reviewed-by: Greenman, Gregory <gregory.greenman@intel.com>
|
|||
/* Make sure we're done with the deferred traffic before flushing */
|
||||
flush_work(&mvm->add_stream_wk);
|
||||
|
||||
@@ -4864,9 +4861,6 @@ static void iwl_mvm_mac_flush(struct iee
|
||||
@@ -4868,9 +4865,6 @@ static void iwl_mvm_mac_flush(struct iee
|
||||
if (mvmsta->vif != vif)
|
||||
continue;
|
||||
|
||||
|
|
|
|||
|
|
@ -12,7 +12,7 @@ Reviewed-by: Greenman, Gregory <gregory.greenman@intel.com>
|
|||
|
||||
--- a/include/net/mac80211.h
|
||||
+++ b/include/net/mac80211.h
|
||||
@@ -3927,6 +3927,10 @@ struct ieee80211_prep_tx_info {
|
||||
@@ -3941,6 +3941,10 @@ struct ieee80211_prep_tx_info {
|
||||
* Note that vif can be NULL.
|
||||
* The callback can sleep.
|
||||
*
|
||||
|
|
@ -23,7 +23,7 @@ Reviewed-by: Greenman, Gregory <gregory.greenman@intel.com>
|
|||
* @channel_switch: Drivers that need (or want) to offload the channel
|
||||
* switch operation for CSAs received from the AP may implement this
|
||||
* callback. They must then call ieee80211_chswitch_done() to indicate
|
||||
@@ -4381,6 +4385,8 @@ struct ieee80211_ops {
|
||||
@@ -4395,6 +4399,8 @@ struct ieee80211_ops {
|
||||
#endif
|
||||
void (*flush)(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
|
||||
u32 queues, bool drop);
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@ Reviewed-by: Greenman, Gregory <gregory.greenman@intel.com>
|
|||
|
||||
--- a/drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c
|
||||
+++ b/drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c
|
||||
@@ -4880,6 +4880,31 @@ static void iwl_mvm_mac_flush(struct iee
|
||||
@@ -4887,6 +4887,31 @@ static void iwl_mvm_mac_flush(struct iee
|
||||
iwl_trans_wait_tx_queues_empty(mvm->trans, msk);
|
||||
}
|
||||
|
||||
|
|
@ -43,7 +43,7 @@ Reviewed-by: Greenman, Gregory <gregory.greenman@intel.com>
|
|||
static int iwl_mvm_mac_get_survey(struct ieee80211_hw *hw, int idx,
|
||||
struct survey_info *survey)
|
||||
{
|
||||
@@ -5407,6 +5432,7 @@ const struct ieee80211_ops iwl_mvm_hw_op
|
||||
@@ -5414,6 +5439,7 @@ const struct ieee80211_ops iwl_mvm_hw_op
|
||||
.mgd_complete_tx = iwl_mvm_mac_mgd_complete_tx,
|
||||
.mgd_protect_tdls_discover = iwl_mvm_mac_mgd_protect_tdls_discover,
|
||||
.flush = iwl_mvm_mac_flush,
|
||||
|
|
|
|||
|
|
@ -38,7 +38,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
|||
|
||||
--- a/include/net/mac80211.h
|
||||
+++ b/include/net/mac80211.h
|
||||
@@ -5265,6 +5265,74 @@ ieee80211_beacon_get_template(struct iee
|
||||
@@ -5279,6 +5279,74 @@ ieee80211_beacon_get_template(struct iee
|
||||
unsigned int link_id);
|
||||
|
||||
/**
|
||||
|
|
@ -129,7 +129,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
|||
}
|
||||
|
||||
new = kzalloc(size, GFP_KERNEL);
|
||||
@@ -3396,8 +3396,11 @@ cfg80211_beacon_dup(struct cfg80211_beac
|
||||
@@ -3398,8 +3398,11 @@ cfg80211_beacon_dup(struct cfg80211_beac
|
||||
|
||||
len = beacon->head_len + beacon->tail_len + beacon->beacon_ies_len +
|
||||
beacon->proberesp_ies_len + beacon->assocresp_ies_len +
|
||||
|
|
@ -222,7 +222,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
|||
offs->mbssid_off = skb->len - mbssid_len;
|
||||
}
|
||||
|
||||
@@ -5288,12 +5298,51 @@ ieee80211_beacon_get_ap(struct ieee80211
|
||||
@@ -5290,12 +5300,51 @@ ieee80211_beacon_get_ap(struct ieee80211
|
||||
return skb;
|
||||
}
|
||||
|
||||
|
|
@ -275,7 +275,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
|||
{
|
||||
struct ieee80211_local *local = hw_to_local(hw);
|
||||
struct beacon_data *beacon = NULL;
|
||||
@@ -5322,8 +5371,29 @@ __ieee80211_beacon_get(struct ieee80211_
|
||||
@@ -5324,8 +5373,29 @@ __ieee80211_beacon_get(struct ieee80211_
|
||||
if (!beacon)
|
||||
goto out;
|
||||
|
||||
|
|
@ -307,7 +307,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
|||
} else if (sdata->vif.type == NL80211_IFTYPE_ADHOC) {
|
||||
struct ieee80211_if_ibss *ifibss = &sdata->u.ibss;
|
||||
struct ieee80211_hdr *hdr;
|
||||
@@ -5411,10 +5481,50 @@ ieee80211_beacon_get_template(struct iee
|
||||
@@ -5413,10 +5483,50 @@ ieee80211_beacon_get_template(struct iee
|
||||
struct ieee80211_mutable_offsets *offs,
|
||||
unsigned int link_id)
|
||||
{
|
||||
|
|
@ -359,7 +359,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
|||
struct sk_buff *ieee80211_beacon_get_tim(struct ieee80211_hw *hw,
|
||||
struct ieee80211_vif *vif,
|
||||
u16 *tim_offset, u16 *tim_length,
|
||||
@@ -5422,7 +5532,9 @@ struct sk_buff *ieee80211_beacon_get_tim
|
||||
@@ -5424,7 +5534,9 @@ struct sk_buff *ieee80211_beacon_get_tim
|
||||
{
|
||||
struct ieee80211_mutable_offsets offs = {};
|
||||
struct sk_buff *bcn = __ieee80211_beacon_get(hw, vif, &offs, false,
|
||||
|
|
|
|||
|
|
@ -113,7 +113,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||
{
|
||||
--- a/net/wireless/core.h
|
||||
+++ b/net/wireless/core.h
|
||||
@@ -497,6 +497,8 @@ void cfg80211_set_dfs_state(struct wiphy
|
||||
@@ -491,6 +491,8 @@ void cfg80211_set_dfs_state(struct wiphy
|
||||
enum nl80211_dfs_state dfs_state);
|
||||
|
||||
void cfg80211_dfs_channels_update_work(struct work_struct *work);
|
||||
|
|
|
|||
|
|
@ -76,7 +76,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
|||
|
||||
--- a/net/wireless/core.h
|
||||
+++ b/net/wireless/core.h
|
||||
@@ -283,6 +283,8 @@ struct cfg80211_event {
|
||||
@@ -277,6 +277,8 @@ struct cfg80211_event {
|
||||
} ij;
|
||||
struct {
|
||||
u8 bssid[ETH_ALEN];
|
||||
|
|
@ -85,7 +85,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
|||
} pa;
|
||||
};
|
||||
};
|
||||
@@ -427,7 +429,8 @@ int cfg80211_disconnect(struct cfg80211_
|
||||
@@ -421,7 +423,8 @@ int cfg80211_disconnect(struct cfg80211_
|
||||
bool wextev);
|
||||
void __cfg80211_roamed(struct wireless_dev *wdev,
|
||||
struct cfg80211_roam_info *info);
|
||||
|
|
@ -97,7 +97,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
|||
void cfg80211_autodisconnect_wk(struct work_struct *work);
|
||||
--- a/net/wireless/nl80211.c
|
||||
+++ b/net/wireless/nl80211.c
|
||||
@@ -18022,7 +18022,8 @@ void nl80211_send_roamed(struct cfg80211
|
||||
@@ -18041,7 +18041,8 @@ void nl80211_send_roamed(struct cfg80211
|
||||
}
|
||||
|
||||
void nl80211_send_port_authorized(struct cfg80211_registered_device *rdev,
|
||||
|
|
@ -107,7 +107,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
|||
{
|
||||
struct sk_buff *msg;
|
||||
void *hdr;
|
||||
@@ -18042,6 +18043,11 @@ void nl80211_send_port_authorized(struct
|
||||
@@ -18061,6 +18062,11 @@ void nl80211_send_port_authorized(struct
|
||||
nla_put(msg, NL80211_ATTR_MAC, ETH_ALEN, bssid))
|
||||
goto nla_put_failure;
|
||||
|
||||
|
|
@ -133,7 +133,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
|||
const u8 *ie, size_t ie_len, bool from_ap);
|
||||
--- a/net/wireless/sme.c
|
||||
+++ b/net/wireless/sme.c
|
||||
@@ -1266,7 +1266,8 @@ out:
|
||||
@@ -1267,7 +1267,8 @@ out:
|
||||
}
|
||||
EXPORT_SYMBOL(cfg80211_roamed);
|
||||
|
||||
|
|
@ -143,7 +143,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
|||
{
|
||||
ASSERT_WDEV_LOCK(wdev);
|
||||
|
||||
@@ -1279,11 +1280,11 @@ void __cfg80211_port_authorized(struct w
|
||||
@@ -1280,11 +1281,11 @@ void __cfg80211_port_authorized(struct w
|
||||
return;
|
||||
|
||||
nl80211_send_port_authorized(wiphy_to_rdev(wdev->wiphy), wdev->netdev,
|
||||
|
|
@ -157,7 +157,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
|||
{
|
||||
struct wireless_dev *wdev = dev->ieee80211_ptr;
|
||||
struct cfg80211_registered_device *rdev = wiphy_to_rdev(wdev->wiphy);
|
||||
@@ -1293,12 +1294,15 @@ void cfg80211_port_authorized(struct net
|
||||
@@ -1294,12 +1295,15 @@ void cfg80211_port_authorized(struct net
|
||||
if (WARN_ON(!bssid))
|
||||
return;
|
||||
|
||||
|
|
|
|||
|
|
@ -18,7 +18,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
|||
|
||||
--- a/include/net/mac80211.h
|
||||
+++ b/include/net/mac80211.h
|
||||
@@ -1477,6 +1477,7 @@ enum mac80211_rx_encoding {
|
||||
@@ -1478,6 +1478,7 @@ enum mac80211_rx_encoding {
|
||||
RX_ENC_HT,
|
||||
RX_ENC_VHT,
|
||||
RX_ENC_HE,
|
||||
|
|
@ -26,7 +26,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
|||
};
|
||||
|
||||
/**
|
||||
@@ -1510,7 +1511,7 @@ enum mac80211_rx_encoding {
|
||||
@@ -1511,7 +1512,7 @@ enum mac80211_rx_encoding {
|
||||
* @antenna: antenna used
|
||||
* @rate_idx: index of data rate into band's supported rates or MCS index if
|
||||
* HT or VHT is used (%RX_FLAG_HT/%RX_FLAG_VHT)
|
||||
|
|
@ -35,7 +35,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
|||
* @flag: %RX_FLAG_\*
|
||||
* @encoding: &enum mac80211_rx_encoding
|
||||
* @bw: &enum rate_info_bw
|
||||
@@ -1518,6 +1519,8 @@ enum mac80211_rx_encoding {
|
||||
@@ -1519,6 +1520,8 @@ enum mac80211_rx_encoding {
|
||||
* @he_ru: HE RU, from &enum nl80211_he_ru_alloc
|
||||
* @he_gi: HE GI, from &enum nl80211_he_gi
|
||||
* @he_dcm: HE DCM value
|
||||
|
|
@ -44,7 +44,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
|||
* @rx_flags: internal RX flags for mac80211
|
||||
* @ampdu_reference: A-MPDU reference number, must be a different value for
|
||||
* each A-MPDU but the same for each subframe within one A-MPDU
|
||||
@@ -1539,8 +1542,18 @@ struct ieee80211_rx_status {
|
||||
@@ -1540,8 +1543,18 @@ struct ieee80211_rx_status {
|
||||
u32 flag;
|
||||
u16 freq: 13, freq_offset: 1;
|
||||
u8 enc_flags;
|
||||
|
|
@ -67,7 +67,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
|||
u8 rx_flags;
|
||||
--- a/net/mac80211/rx.c
|
||||
+++ b/net/mac80211/rx.c
|
||||
@@ -5358,6 +5358,15 @@ void ieee80211_rx_list(struct ieee80211_
|
||||
@@ -5362,6 +5362,15 @@ void ieee80211_rx_list(struct ieee80211_
|
||||
status->rate_idx, status->nss))
|
||||
goto drop;
|
||||
break;
|
||||
|
|
@ -157,7 +157,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
|||
return STA_STATS_RATE_INVALID;
|
||||
--- a/net/mac80211/util.c
|
||||
+++ b/net/mac80211/util.c
|
||||
@@ -3902,6 +3902,19 @@ u64 ieee80211_calculate_rx_timestamp(str
|
||||
@@ -3905,6 +3905,19 @@ u64 ieee80211_calculate_rx_timestamp(str
|
||||
|
||||
/* Fill cfg80211 rate info */
|
||||
switch (status->encoding) {
|
||||
|
|
|
|||
|
|
@ -62,7 +62,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
|||
bool mu_mimo_owner;
|
||||
--- a/net/mac80211/cfg.c
|
||||
+++ b/net/mac80211/cfg.c
|
||||
@@ -4197,7 +4197,7 @@ static int ieee80211_set_ap_chanwidth(st
|
||||
@@ -4199,7 +4199,7 @@ static int ieee80211_set_ap_chanwidth(st
|
||||
struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
|
||||
struct ieee80211_link_data *link;
|
||||
int ret;
|
||||
|
|
@ -84,7 +84,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
|||
struct ieee80211_bss_conf *link_conf = link->conf;
|
||||
--- a/net/mac80211/ieee80211_i.h
|
||||
+++ b/net/mac80211/ieee80211_i.h
|
||||
@@ -2499,7 +2499,7 @@ int ieee80211_link_unreserve_chanctx(str
|
||||
@@ -2497,7 +2497,7 @@ int ieee80211_link_unreserve_chanctx(str
|
||||
int __must_check
|
||||
ieee80211_link_change_bandwidth(struct ieee80211_link_data *link,
|
||||
const struct cfg80211_chan_def *chandef,
|
||||
|
|
@ -255,7 +255,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
|||
{
|
||||
struct ieee80211_sub_if_data *sdata = link->sdata;
|
||||
struct ieee80211_local *local = sdata->local;
|
||||
@@ -4140,6 +4275,7 @@ static bool ieee80211_assoc_config_link(
|
||||
@@ -4141,6 +4276,7 @@ static bool ieee80211_assoc_config_link(
|
||||
link_sta);
|
||||
|
||||
bss_conf->eht_support = link_sta->pub->eht_cap.has_eht;
|
||||
|
|
@ -263,7 +263,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
|||
} else {
|
||||
bss_conf->eht_support = false;
|
||||
}
|
||||
@@ -5452,6 +5588,45 @@ static bool ieee80211_rx_our_beacon(cons
|
||||
@@ -5453,6 +5589,45 @@ static bool ieee80211_rx_our_beacon(cons
|
||||
return ether_addr_equal(tx_bssid, bss->transmitted_bss->bssid);
|
||||
}
|
||||
|
||||
|
|
@ -309,7 +309,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
|||
static void ieee80211_rx_mgmt_beacon(struct ieee80211_link_data *link,
|
||||
struct ieee80211_hdr *hdr, size_t len,
|
||||
struct ieee80211_rx_status *rx_status)
|
||||
@@ -5468,7 +5643,7 @@ static void ieee80211_rx_mgmt_beacon(str
|
||||
@@ -5469,7 +5644,7 @@ static void ieee80211_rx_mgmt_beacon(str
|
||||
struct ieee80211_channel *chan;
|
||||
struct link_sta_info *link_sta;
|
||||
struct sta_info *sta;
|
||||
|
|
@ -318,7 +318,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
|||
bool erp_valid;
|
||||
u8 erp_value = 0;
|
||||
u32 ncrc = 0;
|
||||
@@ -5761,6 +5936,21 @@ static void ieee80211_rx_mgmt_beacon(str
|
||||
@@ -5762,6 +5937,21 @@ static void ieee80211_rx_mgmt_beacon(str
|
||||
elems->pwr_constr_elem,
|
||||
elems->cisco_dtpc_elem);
|
||||
|
||||
|
|
@ -340,7 +340,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
|||
ieee80211_link_info_change_notify(sdata, link, changed);
|
||||
free:
|
||||
kfree(elems);
|
||||
@@ -6862,9 +7052,12 @@ ieee80211_setup_assoc_link(struct ieee80
|
||||
@@ -6863,9 +7053,12 @@ ieee80211_setup_assoc_link(struct ieee80
|
||||
ieee80211_apply_htcap_overrides(sdata, &sta_ht_cap);
|
||||
}
|
||||
|
||||
|
|
@ -353,7 +353,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
|||
const struct element *elem;
|
||||
u8 dtim_count = 0;
|
||||
|
||||
@@ -6893,6 +7086,31 @@ ieee80211_setup_assoc_link(struct ieee80
|
||||
@@ -6894,6 +7087,31 @@ ieee80211_setup_assoc_link(struct ieee80
|
||||
link->conf->ema_ap = true;
|
||||
else
|
||||
link->conf->ema_ap = false;
|
||||
|
|
|
|||
|
|
@ -120,7 +120,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
|||
break;
|
||||
link->u.mgd.conn_flags |=
|
||||
ieee80211_chandef_downgrade(chandef);
|
||||
@@ -5613,8 +5552,8 @@ static bool ieee80211_config_puncturing(
|
||||
@@ -5614,8 +5553,8 @@ static bool ieee80211_config_puncturing(
|
||||
extracted == link->conf->eht_puncturing)
|
||||
return true;
|
||||
|
||||
|
|
@ -131,7 +131,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
|||
link_info(link,
|
||||
"Got an invalid disable subchannel bitmap from AP %pM: bitmap = 0x%x, bw = 0x%x. disconnect\n",
|
||||
link->u.mgd.bssid,
|
||||
@@ -7102,8 +7041,8 @@ ieee80211_setup_assoc_link(struct ieee80
|
||||
@@ -7103,8 +7042,8 @@ ieee80211_setup_assoc_link(struct ieee80
|
||||
u16 bitmap;
|
||||
|
||||
bitmap = get_unaligned_le16(disable_subchannel_bitmap);
|
||||
|
|
|
|||
|
|
@ -137,7 +137,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
|||
int nl80211_parse_chandef(struct cfg80211_registered_device *rdev,
|
||||
struct genl_info *info,
|
||||
struct cfg80211_chan_def *chandef)
|
||||
@@ -5969,6 +5985,14 @@ static int nl80211_start_ap(struct sk_bu
|
||||
@@ -5974,6 +5990,14 @@ static int nl80211_start_ap(struct sk_bu
|
||||
goto out;
|
||||
}
|
||||
|
||||
|
|
@ -152,7 +152,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
|||
if (!cfg80211_reg_can_beacon_relax(&rdev->wiphy, ¶ms->chandef,
|
||||
wdev->iftype)) {
|
||||
err = -EINVAL;
|
||||
@@ -10107,6 +10131,14 @@ skip_beacons:
|
||||
@@ -10126,6 +10150,14 @@ skip_beacons:
|
||||
if (info->attrs[NL80211_ATTR_CH_SWITCH_BLOCK_TX])
|
||||
params.block_tx = true;
|
||||
|
||||
|
|
|
|||
|
|
@ -91,7 +91,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
|||
* ieee80211_operating_class_to_band - convert operating class to band
|
||||
--- a/net/mac80211/cfg.c
|
||||
+++ b/net/mac80211/cfg.c
|
||||
@@ -3612,7 +3612,8 @@ static int __ieee80211_csa_finalize(stru
|
||||
@@ -3614,7 +3614,8 @@ static int __ieee80211_csa_finalize(stru
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
|
|
@ -101,7 +101,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
|||
|
||||
return 0;
|
||||
}
|
||||
@@ -3884,7 +3885,7 @@ __ieee80211_channel_switch(struct wiphy
|
||||
@@ -3886,7 +3887,7 @@ __ieee80211_channel_switch(struct wiphy
|
||||
|
||||
cfg80211_ch_switch_started_notify(sdata->dev,
|
||||
&sdata->deflink.csa_chandef, 0,
|
||||
|
|
@ -132,7 +132,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
|||
/* use driver's channel switch callback */
|
||||
--- a/net/wireless/nl80211.c
|
||||
+++ b/net/wireless/nl80211.c
|
||||
@@ -19081,7 +19081,7 @@ static void nl80211_ch_switch_notify(str
|
||||
@@ -19100,7 +19100,7 @@ static void nl80211_ch_switch_notify(str
|
||||
struct cfg80211_chan_def *chandef,
|
||||
gfp_t gfp,
|
||||
enum nl80211_commands notif,
|
||||
|
|
@ -141,7 +141,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
|||
{
|
||||
struct wireless_dev *wdev = netdev->ieee80211_ptr;
|
||||
struct sk_buff *msg;
|
||||
@@ -19115,6 +19115,9 @@ static void nl80211_ch_switch_notify(str
|
||||
@@ -19134,6 +19134,9 @@ static void nl80211_ch_switch_notify(str
|
||||
goto nla_put_failure;
|
||||
}
|
||||
|
||||
|
|
@ -151,7 +151,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
|||
genlmsg_end(msg, hdr);
|
||||
|
||||
genlmsg_multicast_netns(&nl80211_fam, wiphy_net(&rdev->wiphy), msg, 0,
|
||||
@@ -19127,7 +19130,7 @@ static void nl80211_ch_switch_notify(str
|
||||
@@ -19146,7 +19149,7 @@ static void nl80211_ch_switch_notify(str
|
||||
|
||||
void cfg80211_ch_switch_notify(struct net_device *dev,
|
||||
struct cfg80211_chan_def *chandef,
|
||||
|
|
@ -160,7 +160,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
|||
{
|
||||
struct wireless_dev *wdev = dev->ieee80211_ptr;
|
||||
struct wiphy *wiphy = wdev->wiphy;
|
||||
@@ -19136,7 +19139,7 @@ void cfg80211_ch_switch_notify(struct ne
|
||||
@@ -19155,7 +19158,7 @@ void cfg80211_ch_switch_notify(struct ne
|
||||
ASSERT_WDEV_LOCK(wdev);
|
||||
WARN_INVALID_LINK_ID(wdev, link_id);
|
||||
|
||||
|
|
@ -169,7 +169,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
|||
|
||||
switch (wdev->iftype) {
|
||||
case NL80211_IFTYPE_STATION:
|
||||
@@ -19164,14 +19167,15 @@ void cfg80211_ch_switch_notify(struct ne
|
||||
@@ -19183,14 +19186,15 @@ void cfg80211_ch_switch_notify(struct ne
|
||||
cfg80211_sched_dfs_chan_update(rdev);
|
||||
|
||||
nl80211_ch_switch_notify(rdev, dev, link_id, chandef, GFP_KERNEL,
|
||||
|
|
@ -187,7 +187,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
|||
{
|
||||
struct wireless_dev *wdev = dev->ieee80211_ptr;
|
||||
struct wiphy *wiphy = wdev->wiphy;
|
||||
@@ -19180,11 +19184,13 @@ void cfg80211_ch_switch_started_notify(s
|
||||
@@ -19199,11 +19203,13 @@ void cfg80211_ch_switch_started_notify(s
|
||||
ASSERT_WDEV_LOCK(wdev);
|
||||
WARN_INVALID_LINK_ID(wdev, link_id);
|
||||
|
||||
|
|
|
|||
|
|
@ -59,7 +59,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
|||
if (sdata->vif.type == NL80211_IFTYPE_AP &&
|
||||
params->mbssid_config.tx_wdev) {
|
||||
err = ieee80211_set_ap_mbssid_options(sdata,
|
||||
@@ -3571,6 +3576,12 @@ static int __ieee80211_csa_finalize(stru
|
||||
@@ -3573,6 +3578,12 @@ static int __ieee80211_csa_finalize(stru
|
||||
lockdep_assert_held(&local->mtx);
|
||||
lockdep_assert_held(&local->chanctx_mtx);
|
||||
|
||||
|
|
@ -72,7 +72,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
|||
/*
|
||||
* using reservation isn't immediate as it may be deferred until later
|
||||
* with multi-vif. once reservation is complete it will re-schedule the
|
||||
@@ -3613,7 +3624,7 @@ static int __ieee80211_csa_finalize(stru
|
||||
@@ -3615,7 +3626,7 @@ static int __ieee80211_csa_finalize(stru
|
||||
return err;
|
||||
|
||||
cfg80211_ch_switch_notify(sdata->dev, &sdata->deflink.csa_chandef, 0,
|
||||
|
|
@ -81,7 +81,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
|||
|
||||
return 0;
|
||||
}
|
||||
@@ -3875,9 +3886,13 @@ __ieee80211_channel_switch(struct wiphy
|
||||
@@ -3877,9 +3888,13 @@ __ieee80211_channel_switch(struct wiphy
|
||||
goto out;
|
||||
}
|
||||
|
||||
|
|
@ -95,7 +95,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
|||
|
||||
if (sdata->deflink.csa_block_tx)
|
||||
ieee80211_stop_vif_queues(local, sdata,
|
||||
@@ -3885,7 +3900,8 @@ __ieee80211_channel_switch(struct wiphy
|
||||
@@ -3887,7 +3902,8 @@ __ieee80211_channel_switch(struct wiphy
|
||||
|
||||
cfg80211_ch_switch_started_notify(sdata->dev,
|
||||
&sdata->deflink.csa_chandef, 0,
|
||||
|
|
|
|||
|
|
@ -21,7 +21,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
|||
|
||||
--- a/net/mac80211/mlme.c
|
||||
+++ b/net/mac80211/mlme.c
|
||||
@@ -3239,7 +3239,7 @@ static void ieee80211_mgd_probe_ap(struc
|
||||
@@ -3240,7 +3240,7 @@ static void ieee80211_mgd_probe_ap(struc
|
||||
struct ieee80211_if_managed *ifmgd = &sdata->u.mgd;
|
||||
bool already = false;
|
||||
|
||||
|
|
|
|||
|
|
@ -17,7 +17,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
|||
|
||||
--- a/net/mac80211/util.c
|
||||
+++ b/net/mac80211/util.c
|
||||
@@ -2497,21 +2497,55 @@ int ieee80211_reconfig(struct ieee80211_
|
||||
@@ -2500,21 +2500,55 @@ int ieee80211_reconfig(struct ieee80211_
|
||||
|
||||
/* Finally also reconfigure all the BSS information */
|
||||
list_for_each_entry(sdata, &local->interfaces, list) {
|
||||
|
|
@ -77,7 +77,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
|||
}
|
||||
|
||||
switch (sdata->vif.type) {
|
||||
@@ -2531,42 +2565,42 @@ int ieee80211_reconfig(struct ieee80211_
|
||||
@@ -2534,42 +2568,42 @@ int ieee80211_reconfig(struct ieee80211_
|
||||
&sdata->deflink.tx_conf[i]);
|
||||
break;
|
||||
}
|
||||
|
|
@ -150,7 +150,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
|||
break;
|
||||
case NL80211_IFTYPE_OCB:
|
||||
changed |= BSS_CHANGED_OCB;
|
||||
@@ -2601,6 +2635,7 @@ int ieee80211_reconfig(struct ieee80211_
|
||||
@@ -2604,6 +2638,7 @@ int ieee80211_reconfig(struct ieee80211_
|
||||
case NL80211_IFTYPE_NAN:
|
||||
res = ieee80211_reconfig_nan(sdata);
|
||||
if (res < 0) {
|
||||
|
|
@ -158,7 +158,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
|||
ieee80211_handle_reconfig_failure(local);
|
||||
return res;
|
||||
}
|
||||
@@ -2618,6 +2653,10 @@ int ieee80211_reconfig(struct ieee80211_
|
||||
@@ -2621,6 +2656,10 @@ int ieee80211_reconfig(struct ieee80211_
|
||||
WARN_ON(1);
|
||||
break;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -53,7 +53,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
|||
int ieee80211_reconfig(struct ieee80211_local *local)
|
||||
{
|
||||
struct ieee80211_hw *hw = &local->hw;
|
||||
@@ -2610,7 +2639,13 @@ int ieee80211_reconfig(struct ieee80211_
|
||||
@@ -2613,7 +2642,13 @@ int ieee80211_reconfig(struct ieee80211_
|
||||
changed |= BSS_CHANGED_IBSS;
|
||||
fallthrough;
|
||||
case NL80211_IFTYPE_AP:
|
||||
|
|
@ -68,7 +68,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
|||
|
||||
if (sdata->vif.bss_conf.ftm_responder == 1 &&
|
||||
wiphy_ext_feature_isset(sdata->local->hw.wiphy,
|
||||
@@ -2620,6 +2655,13 @@ int ieee80211_reconfig(struct ieee80211_
|
||||
@@ -2623,6 +2658,13 @@ int ieee80211_reconfig(struct ieee80211_
|
||||
if (sdata->vif.type == NL80211_IFTYPE_AP) {
|
||||
changed |= BSS_CHANGED_AP_PROBE_RESP;
|
||||
|
||||
|
|
|
|||
|
|
@ -33,7 +33,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
|||
|
||||
--- a/include/net/mac80211.h
|
||||
+++ b/include/net/mac80211.h
|
||||
@@ -1936,6 +1936,27 @@ struct ieee80211_vif {
|
||||
@@ -1937,6 +1937,27 @@ struct ieee80211_vif {
|
||||
u8 drv_priv[] __aligned(sizeof(void *));
|
||||
};
|
||||
|
||||
|
|
@ -132,7 +132,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
|||
chanctx_conf = rcu_dereference(sdata->vif.bss_conf.chanctx_conf);
|
||||
--- a/net/mac80211/iface.c
|
||||
+++ b/net/mac80211/iface.c
|
||||
@@ -542,7 +542,7 @@ static void ieee80211_do_stop(struct iee
|
||||
@@ -543,7 +543,7 @@ static void ieee80211_do_stop(struct iee
|
||||
cancel_work_sync(&sdata->recalc_smps);
|
||||
|
||||
sdata_lock(sdata);
|
||||
|
|
@ -141,7 +141,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
|||
"destroying interface with valid links 0x%04x\n",
|
||||
sdata->vif.valid_links);
|
||||
|
||||
@@ -1855,7 +1855,7 @@ static int ieee80211_runtime_change_ifty
|
||||
@@ -1873,7 +1873,7 @@ static int ieee80211_runtime_change_ifty
|
||||
return -EBUSY;
|
||||
|
||||
/* for now, don't support changing while links exist */
|
||||
|
|
@ -217,7 +217,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
|||
ieee80211_recalc_smps(sdata, &sdata->deflink);
|
||||
ieee80211_recalc_ps_vif(sdata);
|
||||
|
||||
@@ -2982,7 +2982,7 @@ static void ieee80211_set_disassoc(struc
|
||||
@@ -2983,7 +2983,7 @@ static void ieee80211_set_disassoc(struc
|
||||
sta_info_flush(sdata);
|
||||
|
||||
/* finally reset all BSS / config parameters */
|
||||
|
|
@ -226,7 +226,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
|||
changed |= ieee80211_reset_erp_info(sdata);
|
||||
|
||||
ieee80211_led_assoc(local, 0);
|
||||
@@ -3007,7 +3007,7 @@ static void ieee80211_set_disassoc(struc
|
||||
@@ -3008,7 +3008,7 @@ static void ieee80211_set_disassoc(struc
|
||||
sizeof(sdata->vif.bss_conf.mu_group.membership));
|
||||
memset(sdata->vif.bss_conf.mu_group.position, 0,
|
||||
sizeof(sdata->vif.bss_conf.mu_group.position));
|
||||
|
|
@ -235,7 +235,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
|||
changed |= BSS_CHANGED_MU_GROUPS;
|
||||
sdata->vif.bss_conf.mu_mimo_owner = false;
|
||||
|
||||
@@ -3021,7 +3021,7 @@ static void ieee80211_set_disassoc(struc
|
||||
@@ -3022,7 +3022,7 @@ static void ieee80211_set_disassoc(struc
|
||||
changed |= BSS_CHANGED_ARP_FILTER;
|
||||
|
||||
sdata->vif.bss_conf.qos = false;
|
||||
|
|
@ -244,7 +244,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
|||
changed |= BSS_CHANGED_QOS;
|
||||
/* The BSSID (not really interesting) and HT changed */
|
||||
changed |= BSS_CHANGED_BSSID | BSS_CHANGED_HT;
|
||||
@@ -3191,7 +3191,7 @@ static void ieee80211_mgd_probe_ap_send(
|
||||
@@ -3192,7 +3192,7 @@ static void ieee80211_mgd_probe_ap_send(
|
||||
u8 unicast_limit = max(1, max_probe_tries - 3);
|
||||
struct sta_info *sta;
|
||||
|
||||
|
|
@ -253,7 +253,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
|||
return;
|
||||
|
||||
/*
|
||||
@@ -3239,7 +3239,7 @@ static void ieee80211_mgd_probe_ap(struc
|
||||
@@ -3240,7 +3240,7 @@ static void ieee80211_mgd_probe_ap(struc
|
||||
struct ieee80211_if_managed *ifmgd = &sdata->u.mgd;
|
||||
bool already = false;
|
||||
|
||||
|
|
@ -262,7 +262,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
|||
return;
|
||||
|
||||
if (!ieee80211_sdata_running(sdata))
|
||||
@@ -3314,7 +3314,7 @@ struct sk_buff *ieee80211_ap_probereq_ge
|
||||
@@ -3315,7 +3315,7 @@ struct sk_buff *ieee80211_ap_probereq_ge
|
||||
int ssid_len;
|
||||
|
||||
if (WARN_ON(sdata->vif.type != NL80211_IFTYPE_STATION ||
|
||||
|
|
@ -271,7 +271,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
|||
return NULL;
|
||||
|
||||
sdata_assert_lock(sdata);
|
||||
@@ -3379,7 +3379,8 @@ static void __ieee80211_disconnect(struc
|
||||
@@ -3380,7 +3380,8 @@ static void __ieee80211_disconnect(struc
|
||||
}
|
||||
|
||||
/* in MLO assume we have a link where we can TX the frame */
|
||||
|
|
@ -281,7 +281,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
|||
|
||||
if (!ifmgd->driver_disconnect) {
|
||||
unsigned int link_id;
|
||||
@@ -3578,7 +3579,7 @@ static void ieee80211_destroy_assoc_data
|
||||
@@ -3579,7 +3580,7 @@ static void ieee80211_destroy_assoc_data
|
||||
for (i = 0; i < ARRAY_SIZE(data.bss); i++)
|
||||
data.bss[i] = assoc_data->link[i].bss;
|
||||
|
||||
|
|
@ -290,7 +290,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
|||
data.ap_mld_addr = assoc_data->ap_addr;
|
||||
|
||||
cfg80211_assoc_failure(sdata->dev, &data);
|
||||
@@ -4979,7 +4980,7 @@ static bool ieee80211_assoc_success(stru
|
||||
@@ -4980,7 +4981,7 @@ static bool ieee80211_assoc_success(stru
|
||||
if (WARN_ON(!sta))
|
||||
goto out_err;
|
||||
|
||||
|
|
@ -299,7 +299,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
|||
u16 valid_links = 0;
|
||||
|
||||
for (link_id = 0; link_id < IEEE80211_MLD_MAX_NUM_LINKS; link_id++) {
|
||||
@@ -5008,7 +5009,7 @@ static bool ieee80211_assoc_success(stru
|
||||
@@ -5009,7 +5010,7 @@ static bool ieee80211_assoc_success(stru
|
||||
if (WARN_ON(!link))
|
||||
goto out_err;
|
||||
|
||||
|
|
@ -308,7 +308,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
|||
link_info(link,
|
||||
"local address %pM, AP link address %pM\n",
|
||||
link->conf->addr,
|
||||
@@ -5240,7 +5241,7 @@ static void ieee80211_rx_mgmt_assoc_resp
|
||||
@@ -5241,7 +5242,7 @@ static void ieee80211_rx_mgmt_assoc_resp
|
||||
ifmgd->broken_ap = true;
|
||||
}
|
||||
|
||||
|
|
@ -317,7 +317,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
|||
if (!elems->multi_link) {
|
||||
sdata_info(sdata,
|
||||
"MLO association with %pM but no multi-link element in response!\n",
|
||||
@@ -5304,7 +5305,7 @@ static void ieee80211_rx_mgmt_assoc_resp
|
||||
@@ -5305,7 +5306,7 @@ static void ieee80211_rx_mgmt_assoc_resp
|
||||
resp.uapsd_queues |= ieee80211_ac_to_qos_mask[ac];
|
||||
}
|
||||
|
||||
|
|
@ -326,7 +326,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
|||
ether_addr_copy(ap_mld_addr, sdata->vif.cfg.ap_addr);
|
||||
resp.ap_mld_addr = ap_mld_addr;
|
||||
}
|
||||
@@ -5629,7 +5630,7 @@ static void ieee80211_rx_mgmt_beacon(str
|
||||
@@ -5630,7 +5631,7 @@ static void ieee80211_rx_mgmt_beacon(str
|
||||
rcu_read_unlock();
|
||||
|
||||
if (ifmgd->assoc_data && ifmgd->assoc_data->need_beacon &&
|
||||
|
|
@ -335,7 +335,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
|||
ieee80211_rx_our_beacon(bssid, ifmgd->assoc_data->link[0].bss)) {
|
||||
parse_params.bss = ifmgd->assoc_data->link[0].bss;
|
||||
elems = ieee802_11_parse_elems_full(&parse_params);
|
||||
@@ -6319,7 +6320,7 @@ static void ieee80211_sta_bcn_mon_timer(
|
||||
@@ -6320,7 +6321,7 @@ static void ieee80211_sta_bcn_mon_timer(
|
||||
struct ieee80211_sub_if_data *sdata =
|
||||
from_timer(sdata, t, u.mgd.bcn_mon_timer);
|
||||
|
||||
|
|
@ -344,7 +344,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
|||
return;
|
||||
|
||||
if (sdata->vif.bss_conf.csa_active &&
|
||||
@@ -6343,7 +6344,7 @@ static void ieee80211_sta_conn_mon_timer
|
||||
@@ -6344,7 +6345,7 @@ static void ieee80211_sta_conn_mon_timer
|
||||
struct sta_info *sta;
|
||||
unsigned long timeout;
|
||||
|
||||
|
|
@ -353,7 +353,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
|||
return;
|
||||
|
||||
if (sdata->vif.bss_conf.csa_active &&
|
||||
@@ -6898,7 +6899,7 @@ int ieee80211_mgd_auth(struct ieee80211_
|
||||
@@ -6899,7 +6900,7 @@ int ieee80211_mgd_auth(struct ieee80211_
|
||||
return 0;
|
||||
|
||||
err_clear:
|
||||
|
|
@ -456,7 +456,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
|||
chanctx_conf =
|
||||
rcu_dereference(sdata->vif.bss_conf.chanctx_conf);
|
||||
if (unlikely(!chanctx_conf)) {
|
||||
@@ -6008,7 +6008,7 @@ void __ieee80211_tx_skb_tid_band(struct
|
||||
@@ -6010,7 +6010,7 @@ void __ieee80211_tx_skb_tid_band(struct
|
||||
BUILD_BUG_ON(!FIELD_FIT(IEEE80211_TX_CTRL_MLO_LINK,
|
||||
IEEE80211_LINK_UNSPECIFIED));
|
||||
|
||||
|
|
@ -465,7 +465,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
|||
link = 0;
|
||||
} else if (link_id >= 0) {
|
||||
link = link_id;
|
||||
@@ -6054,7 +6054,7 @@ void ieee80211_tx_skb_tid(struct ieee802
|
||||
@@ -6056,7 +6056,7 @@ void ieee80211_tx_skb_tid(struct ieee802
|
||||
enum nl80211_band band;
|
||||
|
||||
rcu_read_lock();
|
||||
|
|
@ -485,7 +485,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
|||
struct {
|
||||
u8 id;
|
||||
u8 len;
|
||||
@@ -2546,7 +2546,7 @@ int ieee80211_reconfig(struct ieee80211_
|
||||
@@ -2549,7 +2549,7 @@ int ieee80211_reconfig(struct ieee80211_
|
||||
continue;
|
||||
|
||||
sdata_lock(sdata);
|
||||
|
|
@ -494,7 +494,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
|||
struct ieee80211_bss_conf *old[IEEE80211_MLD_MAX_NUM_LINKS] = {
|
||||
[0] = &sdata->vif.bss_conf,
|
||||
};
|
||||
@@ -2566,7 +2566,7 @@ int ieee80211_reconfig(struct ieee80211_
|
||||
@@ -2569,7 +2569,7 @@ int ieee80211_reconfig(struct ieee80211_
|
||||
for (link_id = 0;
|
||||
link_id < ARRAY_SIZE(sdata->vif.link_conf);
|
||||
link_id++) {
|
||||
|
|
@ -503,7 +503,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
|||
!(sdata->vif.active_links & BIT(link_id)))
|
||||
continue;
|
||||
|
||||
@@ -2598,12 +2598,12 @@ int ieee80211_reconfig(struct ieee80211_
|
||||
@@ -2601,12 +2601,12 @@ int ieee80211_reconfig(struct ieee80211_
|
||||
if (sdata->vif.bss_conf.mu_mimo_owner)
|
||||
changed |= BSS_CHANGED_MU_GROUPS;
|
||||
|
||||
|
|
@ -518,7 +518,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
|||
changed |= BSS_CHANGED_ASSOC |
|
||||
BSS_CHANGED_ARP_FILTER |
|
||||
BSS_CHANGED_PS;
|
||||
@@ -2641,7 +2641,7 @@ int ieee80211_reconfig(struct ieee80211_
|
||||
@@ -2644,7 +2644,7 @@ int ieee80211_reconfig(struct ieee80211_
|
||||
case NL80211_IFTYPE_AP:
|
||||
changed |= BSS_CHANGED_P2P_PS;
|
||||
|
||||
|
|
@ -527,7 +527,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
|||
ieee80211_vif_cfg_change_notify(sdata,
|
||||
BSS_CHANGED_SSID);
|
||||
else
|
||||
@@ -2655,7 +2655,7 @@ int ieee80211_reconfig(struct ieee80211_
|
||||
@@ -2658,7 +2658,7 @@ int ieee80211_reconfig(struct ieee80211_
|
||||
if (sdata->vif.type == NL80211_IFTYPE_AP) {
|
||||
changed |= BSS_CHANGED_AP_PROBE_RESP;
|
||||
|
||||
|
|
|
|||
|
|
@ -18,7 +18,7 @@
|
|||
|
||||
--- a/include/net/mac80211.h
|
||||
+++ b/include/net/mac80211.h
|
||||
@@ -1714,6 +1714,7 @@ enum ieee80211_smps_mode {
|
||||
@@ -1715,6 +1715,7 @@ enum ieee80211_smps_mode {
|
||||
*
|
||||
* @power_level: requested transmit power (in dBm), backward compatibility
|
||||
* value only that is set to the minimum of all interfaces
|
||||
|
|
@ -26,7 +26,7 @@
|
|||
*
|
||||
* @chandef: the channel definition to tune to
|
||||
* @radar_enabled: whether radar detection is enabled
|
||||
@@ -1734,6 +1735,7 @@ enum ieee80211_smps_mode {
|
||||
@@ -1735,6 +1736,7 @@ enum ieee80211_smps_mode {
|
||||
struct ieee80211_conf {
|
||||
u32 flags;
|
||||
int power_level, dynamic_ps_timeout;
|
||||
|
|
@ -56,7 +56,7 @@
|
|||
__NL80211_ATTR_AFTER_LAST,
|
||||
--- a/net/mac80211/cfg.c
|
||||
+++ b/net/mac80211/cfg.c
|
||||
@@ -3079,6 +3079,19 @@ static int ieee80211_get_tx_power(struct
|
||||
@@ -3081,6 +3081,19 @@ static int ieee80211_get_tx_power(struct
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
@ -76,7 +76,7 @@
|
|||
static void ieee80211_rfkill_poll(struct wiphy *wiphy)
|
||||
{
|
||||
struct ieee80211_local *local = wiphy_priv(wiphy);
|
||||
@@ -5009,6 +5022,7 @@ const struct cfg80211_ops mac80211_confi
|
||||
@@ -5011,6 +5024,7 @@ const struct cfg80211_ops mac80211_confi
|
||||
.set_wiphy_params = ieee80211_set_wiphy_params,
|
||||
.set_tx_power = ieee80211_set_tx_power,
|
||||
.get_tx_power = ieee80211_get_tx_power,
|
||||
|
|
@ -105,7 +105,7 @@
|
|||
u32 offchannel_flag;
|
||||
|
||||
offchannel_flag = local->hw.conf.flags & IEEE80211_CONF_OFFCHANNEL;
|
||||
@@ -157,6 +157,12 @@ static u32 ieee80211_hw_conf_chan(struct
|
||||
@@ -159,6 +159,12 @@ static u32 ieee80211_hw_conf_chan(struct
|
||||
}
|
||||
rcu_read_unlock();
|
||||
|
||||
|
|
@ -118,7 +118,7 @@
|
|||
if (local->hw.conf.power_level != power) {
|
||||
changed |= IEEE80211_CONF_CHANGE_POWER;
|
||||
local->hw.conf.power_level = power;
|
||||
@@ -766,6 +772,7 @@ struct ieee80211_hw *ieee80211_alloc_hw_
|
||||
@@ -768,6 +774,7 @@ struct ieee80211_hw *ieee80211_alloc_hw_
|
||||
IEEE80211_RADIOTAP_MCS_HAVE_BW;
|
||||
local->hw.radiotap_vht_details = IEEE80211_RADIOTAP_VHT_KNOWN_GI |
|
||||
IEEE80211_RADIOTAP_VHT_KNOWN_BANDWIDTH;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue