PKG_NAME:=mac80211
-PKG_VERSION:=6.12.44
-PKG_RELEASE:=2
+PKG_VERSION:=6.12.52
+PKG_RELEASE:=1
PKG_LICENSE:=GPL-2.0-only
PKG_LICENSE_FILES:=COPYING
PKG_SOURCE_URL:=http://mirror2.openwrt.org/sources/
-PKG_HASH:=85a9f92ddba3bf2970a089e7af576c1135217c387205f4481ea9131c0c45c509
+PKG_HASH:=ed6ef4c67e08b294ed1101c7cc5ae584a5f338c99ef95362fa3921eb6d207f5d
PKG_SOURCE:=backports-$(PKG_VERSION).tar.xz
PKG_BUILD_DIR:=$(KERNEL_BUILD_DIR)/$(if $(BUILD_VARIANT),$(PKG_NAME)-$(BUILD_VARIANT)/)backports-$(PKG_VERSION)
--- a/drivers/net/wireless/ath/ath10k/mac.c
+++ b/drivers/net/wireless/ath/ath10k/mac.c
-@@ -8166,6 +8166,20 @@ static void ath10k_flush(struct ieee8021
+@@ -8135,6 +8135,20 @@ static void ath10k_flush(struct ieee8021
mutex_unlock(&ar->conf_mutex);
}
/* TODO: Implement this function properly
* For now it is needed to reply to Probe Requests in IBSS mode.
* Probably we need this information from FW.
-@@ -9513,6 +9527,7 @@ static const struct ieee80211_ops ath10k
+@@ -9486,6 +9500,7 @@ static const struct ieee80211_ops ath10k
.set_rts_threshold = ath10k_set_rts_threshold,
.set_frag_threshold = ath10k_mac_op_set_frag_threshold,
.flush = ath10k_flush,
.tx_last_beacon = ath10k_tx_last_beacon,
.set_antenna = ath10k_set_antenna,
.get_antenna = ath10k_get_antenna,
-@@ -10334,6 +10349,9 @@ int ath10k_mac_register(struct ath10k *a
+@@ -10307,6 +10322,9 @@ int ath10k_mac_register(struct ath10k *a
if (!ar->hw_params.hw_ops->set_coverage_class)
ar->ops->set_coverage_class = NULL;
{
.hw_rev = ATH11K_HW_IPQ8074,
.name = "ipq8074 hw2.0",
-@@ -2200,7 +2200,8 @@ static void ath11k_core_reset(struct wor
+@@ -2201,7 +2201,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;
for (i = 0; i < ARRAY_SIZE(ath11k_hw_params); i++) {
hw_params = &ath11k_hw_params[i];
-@@ -2216,7 +2217,31 @@ static int ath11k_init_hw_params(struct
+@@ -2217,7 +2218,31 @@ static int ath11k_init_hw_params(struct
ab->hw_params = *hw_params;
--- a/drivers/net/wireless/ath/ath11k/reg.c
+++ b/drivers/net/wireless/ath/ath11k/reg.c
-@@ -361,134 +361,6 @@ static u32 ath11k_map_fw_phy_flags(u32 p
+@@ -353,134 +353,6 @@ static u32 ath11k_map_fw_phy_flags(u32 p
return flags;
}
static const char *
ath11k_reg_get_regdom_str(enum nl80211_dfs_regions dfs_region)
{
-@@ -639,11 +511,11 @@ ath11k_reg_ap_pwr_convert(enum ieee80211
+@@ -631,11 +503,11 @@ ath11k_reg_ap_pwr_convert(enum ieee80211
struct ieee80211_regdomain *
ath11k_reg_build_regd(struct ath11k_base *ab,
struct cur_reg_rule *reg_rule, *reg_rule_6ghz;
u8 i = 0, j = 0, k = 0;
u8 num_rules;
-@@ -686,26 +558,26 @@ ath11k_reg_build_regd(struct ath11k_base
+@@ -678,26 +550,26 @@ ath11k_reg_build_regd(struct ath11k_base
}
if (!num_rules)
reg_info->dfs_region, num_rules);
/* Update reg_rules[] below. Firmware is expected to
* send these rules in order(2 GHz rules first and then 5 GHz)
-@@ -744,7 +616,7 @@ ath11k_reg_build_regd(struct ath11k_base
+@@ -736,7 +608,7 @@ ath11k_reg_build_regd(struct ath11k_base
flags |= ath11k_map_fw_reg_flags(reg_rule->flags);
flags |= ath11k_map_fw_phy_flags(reg_info->phybitmap);
reg_rule->start_freq,
reg_rule->end_freq, max_bw,
reg_rule->ant_gain, reg_rule->reg_power,
-@@ -759,7 +631,7 @@ ath11k_reg_build_regd(struct ath11k_base
+@@ -751,7 +623,7 @@ ath11k_reg_build_regd(struct ath11k_base
reg_info->dfs_region == ATH11K_DFS_REG_ETSI &&
(reg_rule->end_freq > ETSI_WEATHER_RADAR_BAND_LOW &&
reg_rule->start_freq < ETSI_WEATHER_RADAR_BAND_HIGH)){
reg_rule, &i,
flags, max_bw);
continue;
-@@ -770,51 +642,23 @@ ath11k_reg_build_regd(struct ath11k_base
+@@ -762,37 +634,20 @@ ath11k_reg_build_regd(struct ath11k_base
"\t%d. (%d - %d @ %d) (%d, %d) (%d ms) (FLAGS %d) (%d, %d)\n",
i + 1, reg_rule->start_freq, reg_rule->end_freq,
max_bw, reg_rule->ant_gain, reg_rule->reg_power,
return new_regd;
}
+@@ -844,17 +699,6 @@ void ath11k_regd_update_chan_list_work(s
+ }
+ }
+
-static bool ath11k_reg_is_world_alpha(char *alpha)
-{
- if (alpha[0] == '0' && alpha[1] == '0')
static enum wmi_vdev_type ath11k_reg_get_ar_vdev_type(struct ath11k *ar)
{
struct ath11k_vif *arvif;
-@@ -837,7 +681,6 @@ int ath11k_reg_handle_chan_list(struct a
+@@ -877,7 +721,6 @@ int ath11k_reg_handle_chan_list(struct a
enum ieee80211_ap_reg_power power_type)
{
struct ieee80211_regdomain *regd;
int pdev_idx;
struct ath11k *ar;
enum wmi_vdev_type vdev_type;
-@@ -889,24 +732,14 @@ int ath11k_reg_handle_chan_list(struct a
+@@ -929,24 +772,14 @@ int ath11k_reg_handle_chan_list(struct a
(char *)reg_info->alpha2, 2))
goto retfail;
goto fallback;
--- a/drivers/net/wireless/ath/ath11k/reg.h
+++ b/drivers/net/wireless/ath/ath11k/reg.h
-@@ -35,7 +35,7 @@ void ath11k_reg_free(struct ath11k_base
- void ath11k_regd_update_work(struct work_struct *work);
+@@ -36,7 +36,7 @@ void ath11k_regd_update_work(struct work
+ void ath11k_regd_update_chan_list_work(struct work_struct *work);
struct ieee80211_regdomain *
ath11k_reg_build_regd(struct ath11k_base *ab,
- struct cur_regulatory_info *reg_info, bool intersect,
+++ /dev/null
-From 52393e2ae12f18fb1a60578c24c46ebab292ddb6 Mon Sep 17 00:00:00 2001
-From: Rameshkumar Sundaram <quic_ramess@quicinc.com>
-Date: Mon, 28 Mar 2022 13:21:04 +0530
-Subject: [PATCH] ath11k: Revert: clear the keys properly when DISABLE_KEY
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Reverting the Upstream clear key change added as a part of
-436a4e886598 ("ath11k: clear the keys properly
-when DISABLE_KEY")
-This change exposed a race in WLAN Firmware where target asserts
-are seen frequently due FW not synchronizing ath11k host’s clear
-key commands(CIPHER changes to NONE) with frames in TX queue.
-Hence reverting this change untill FW fixes to synchronize
-ath11k host’s clear key command are available.
-
-Signed-off-by: Rameshkumar Sundaram <quic_ramess@quicinc.com>
----
- drivers/net/wireless/ath/ath11k/mac.c | 4 +++-
- drivers/net/wireless/ath/ath11k/wmi.c | 3 +--
- 2 files changed, 4 insertions(+), 3 deletions(-)
-
---- a/drivers/net/wireless/ath/ath11k/mac.c
-+++ b/drivers/net/wireless/ath/ath11k/mac.c
-@@ -4222,7 +4222,9 @@ static int ath11k_install_key(struct ath
- return 0;
-
- if (cmd == DISABLE_KEY) {
-- arg.key_cipher = WMI_CIPHER_NONE;
-+ /* TODO: Check if FW expects value other than NONE for del */
-+ /* arg.key_cipher = WMI_CIPHER_NONE; */
-+ arg.key_len = 0;
- arg.key_data = NULL;
- goto install;
- }
---- a/drivers/net/wireless/ath/ath11k/wmi.c
-+++ b/drivers/net/wireless/ath/ath11k/wmi.c
-@@ -1854,8 +1854,7 @@ int ath11k_wmi_vdev_install_key(struct a
- tlv = (struct wmi_tlv *)(skb->data + sizeof(*cmd));
- tlv->header = FIELD_PREP(WMI_TLV_TAG, WMI_TAG_ARRAY_BYTE) |
- FIELD_PREP(WMI_TLV_LEN, key_len_aligned);
-- if (arg->key_data)
-- memcpy(tlv->value, (u8 *)arg->key_data, key_len_aligned);
-+ memcpy(tlv->value, (u8 *)arg->key_data, key_len_aligned);
-
- ret = ath11k_wmi_cmd_send(wmi, skb, WMI_VDEV_INSTALL_KEY_CMDID);
- if (ret) {
--- a/drivers/net/wireless/marvell/libertas/cfg.c
+++ b/drivers/net/wireless/marvell/libertas/cfg.c
-@@ -2102,6 +2102,8 @@ struct wireless_dev *lbs_cfg_alloc(struc
+@@ -2105,6 +2105,8 @@ struct wireless_dev *lbs_cfg_alloc(struc
goto err_wiphy_new;
}
--- a/drivers/net/wireless/marvell/libertas/cfg.c
+++ b/drivers/net/wireless/marvell/libertas/cfg.c
-@@ -2179,6 +2179,8 @@ int lbs_cfg_register(struct lbs_private
+@@ -2182,6 +2182,8 @@ int lbs_cfg_register(struct lbs_private
wdev->wiphy->n_cipher_suites = ARRAY_SIZE(cipher_suites);
wdev->wiphy->reg_notifier = lbs_reg_notifier;
--- a/net/mac80211/main.c
+++ b/net/mac80211/main.c
-@@ -1585,24 +1585,6 @@ int ieee80211_register_hw(struct ieee802
+@@ -1590,24 +1590,6 @@ int ieee80211_register_hw(struct ieee802
ieee80211_check_wbrf_support(local);
continue;
for (i = 0; i < rdev_req->n_channels; i++) {
-@@ -3512,9 +3513,12 @@ int cfg80211_wext_siwscan(struct net_dev
+@@ -3513,9 +3514,12 @@ int cfg80211_wext_siwscan(struct net_dev
continue;
for (j = 0; j < wiphy->bands[band]->n_channels; j++) {
net/mac80211/ieee80211_i.h | 9 +++-
5 files changed, 90 insertions(+), 48 deletions(-)
-diff --git a/include/linux/ieee80211.h b/include/linux/ieee80211.h
-index 456bca45ff05..05dedc45505c 100644
--- a/include/linux/ieee80211.h
+++ b/include/linux/ieee80211.h
-@@ -1445,6 +1445,8 @@ struct ieee80211_mgmt {
+@@ -1492,6 +1492,8 @@ struct ieee80211_mgmt {
__le16 status;
__le16 capab;
__le16 timeout;
} __packed addba_resp;
struct{
u8 action_code;
-diff --git a/net/mac80211/agg-rx.c b/net/mac80211/agg-rx.c
-index fe7eab4b681b..f3fbe5a4395e 100644
--- a/net/mac80211/agg-rx.c
+++ b/net/mac80211/agg-rx.c
-@@ -170,28 +170,63 @@ static void sta_rx_agg_reorder_timer_expired(struct timer_list *t)
+@@ -170,28 +170,63 @@ static void sta_rx_agg_reorder_timer_exp
rcu_read_unlock();
}
{
struct ieee80211_sub_if_data *sdata = sta->sdata;
struct ieee80211_local *local = sdata->local;
-@@ -223,8 +258,8 @@ static void ieee80211_send_addba_resp(struct sta_info *sta, u8 *da, u16 tid,
+@@ -223,8 +258,8 @@ static void ieee80211_send_addba_resp(st
mgmt->u.action.u.addba_resp.timeout = cpu_to_le16(timeout);
mgmt->u.action.u.addba_resp.status = cpu_to_le16(status);
ieee80211_tx_skb(sdata, skb);
}
-@@ -233,7 +268,7 @@ void __ieee80211_start_rx_ba_session(struct sta_info *sta,
+@@ -233,7 +268,7 @@ void __ieee80211_start_rx_ba_session(str
u8 dialog_token, u16 timeout,
u16 start_seq_num, u16 ba_policy, u16 tid,
u16 buf_size, bool tx, bool auto_seq,
{
struct ieee80211_local *local = sta->sdata->local;
struct tid_ampdu_rx *tid_agg_rx;
-@@ -419,7 +454,7 @@ void __ieee80211_start_rx_ba_session(struct sta_info *sta,
+@@ -419,7 +454,7 @@ end:
if (tx)
ieee80211_send_addba_resp(sta, sta->sta.addr, tid,
dialog_token, status, 1, buf_size,
}
void ieee80211_process_addba_request(struct ieee80211_local *local,
-@@ -428,9 +463,7 @@ void ieee80211_process_addba_request(struct ieee80211_local *local,
+@@ -428,9 +463,7 @@ void ieee80211_process_addba_request(str
size_t len)
{
u16 capab, tid, timeout, ba_policy, buf_size, start_seq_num;
/* extract session parameters from addba request frame */
dialog_token = mgmt->u.action.u.addba_req.dialog_token;
-@@ -443,28 +476,17 @@ void ieee80211_process_addba_request(struct ieee80211_local *local,
+@@ -443,28 +476,17 @@ void ieee80211_process_addba_request(str
tid = (capab & IEEE80211_ADDBA_PARAM_TID_MASK) >> 2;
buf_size = (capab & IEEE80211_ADDBA_PARAM_BUF_SIZE_MASK) >> 6;
}
void ieee80211_manage_rx_ba_offl(struct ieee80211_vif *vif,
-diff --git a/net/mac80211/agg-tx.c b/net/mac80211/agg-tx.c
-index 04cb45cfb310..61f2cac37728 100644
--- a/net/mac80211/agg-tx.c
+++ b/net/mac80211/agg-tx.c
@@ -58,23 +58,24 @@
skb_put(skb, 1 + sizeof(mgmt->u.action.u.addba_req));
-@@ -93,6 +94,9 @@ static void ieee80211_send_addba_request(struct ieee80211_sub_if_data *sdata,
+@@ -93,6 +94,9 @@ static void ieee80211_send_addba_request
mgmt->u.action.u.addba_req.start_seq_num =
cpu_to_le16(start_seq_num << 4);
ieee80211_tx_skb_tid(sdata, skb, tid, -1);
}
-@@ -460,8 +464,11 @@ static void ieee80211_send_addba_with_timeout(struct sta_info *sta,
+@@ -460,8 +464,11 @@ static void ieee80211_send_addba_with_ti
sta->ampdu_mlme.addba_req_num[tid]++;
spin_unlock_bh(&sta->lock);
} else {
/*
* We really should use what the driver told us it will
-@@ -473,9 +480,8 @@ static void ieee80211_send_addba_with_timeout(struct sta_info *sta,
+@@ -473,9 +480,8 @@ static void ieee80211_send_addba_with_ti
}
/* send AddBA request */
WARN_ON(test_and_set_bit(HT_AGG_STATE_SENT_ADDBA, &tid_tx->state));
}
-@@ -970,6 +976,13 @@ void ieee80211_process_addba_resp(struct ieee80211_local *local,
+@@ -970,6 +976,13 @@ void ieee80211_process_addba_resp(struct
amsdu = capab & IEEE80211_ADDBA_PARAM_AMSDU_MASK;
tid = u16_get_bits(capab, IEEE80211_ADDBA_PARAM_TID_MASK);
buf_size = u16_get_bits(capab, IEEE80211_ADDBA_PARAM_BUF_SIZE_MASK);
buf_size = min(buf_size, local->hw.max_tx_aggregation_subframes);
txq = sta->sta.txq[tid];
-diff --git a/net/mac80211/ht.c b/net/mac80211/ht.c
-index 1c2b7dd8976a..32390d8a9d75 100644
--- a/net/mac80211/ht.c
+++ b/net/mac80211/ht.c
-@@ -379,7 +379,7 @@ void ieee80211_ba_session_work(struct wiphy *wiphy, struct wiphy_work *work)
+@@ -379,7 +379,7 @@ void ieee80211_ba_session_work(struct wi
sta->ampdu_mlme.tid_rx_manage_offl))
__ieee80211_start_rx_ba_session(sta, 0, 0, 0, 1, tid,
IEEE80211_MAX_AMPDU_BUF_HT,
if (test_and_clear_bit(tid + IEEE80211_NUM_TIDS,
sta->ampdu_mlme.tid_rx_manage_offl))
-diff --git a/net/mac80211/ieee80211_i.h b/net/mac80211/ieee80211_i.h
-index 7dcb46120abc..752297bcde76 100644
--- a/net/mac80211/ieee80211_i.h
+++ b/net/mac80211/ieee80211_i.h
-@@ -2111,14 +2111,19 @@ int ieee80211_send_smps_action(struct ieee80211_sub_if_data *sdata,
+@@ -2131,14 +2131,19 @@ int ieee80211_send_smps_action(struct ie
const u8 *bssid, int link_id);
bool ieee80211_smps_is_restrictive(enum ieee80211_smps_mode smps_mode_old,
enum ieee80211_smps_mode smps_mode_new);
void ieee80211_sta_tear_down_BA_sessions(struct sta_info *sta,
enum ieee80211_agg_stop_reason reason);
void ieee80211_process_delba(struct ieee80211_sub_if_data *sdata,
---
-2.39.5
-