You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
128 lines
4.2 KiB
128 lines
4.2 KiB
From d44a19d9cfa0ed1fcc25c65489f1336dbcbfb5d1 Mon Sep 17 00:00:00 2001
|
|
From: =?UTF-8?q?=C3=8D=C3=B1igo=20Huguet?= <ihuguet@redhat.com>
|
|
Date: Wed, 24 May 2023 15:00:40 +0200
|
|
Subject: [PATCH 142/142] wifi: rtw89: fix AP mode authentication transmission
|
|
failed
|
|
MIME-Version: 1.0
|
|
Content-Type: text/plain; charset=UTF-8
|
|
Content-Transfer-Encoding: 8bit
|
|
|
|
Bugzilla: https://bugzilla.redhat.com/2207499
|
|
|
|
commit 0731d0b664f26f54b6293421af54da15b9eb1c8c
|
|
Author: Po-Hao Huang <phhuang@realtek.com>
|
|
Date: Thu Feb 16 16:28:07 2023 +0800
|
|
|
|
wifi: rtw89: fix AP mode authentication transmission failed
|
|
|
|
For some ICs, packets can't be sent correctly without initializing
|
|
CMAC table first. Previous flow do this initialization after
|
|
associated, results in authentication response fails to transmit.
|
|
Move the initialization up front to a proper place to solve this.
|
|
|
|
Signed-off-by: Po-Hao Huang <phhuang@realtek.com>
|
|
Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
|
|
Signed-off-by: Kalle Valo <kvalo@kernel.org>
|
|
Link: https://lore.kernel.org/r/20230216082807.22285-1-pkshih@realtek.com
|
|
|
|
Signed-off-by: Íñigo Huguet <ihuguet@redhat.com>
|
|
---
|
|
drivers/net/wireless/realtek/rtw89/core.c | 47 +++++++++++++++++--------------
|
|
1 file changed, 26 insertions(+), 21 deletions(-)
|
|
|
|
diff --git a/drivers/net/wireless/realtek/rtw89/core.c b/drivers/net/wireless/realtek/rtw89/core.c
|
|
index 3ed2f3a966353..f09361bc4a4d1 100644
|
|
--- a/drivers/net/wireless/realtek/rtw89/core.c
|
|
+++ b/drivers/net/wireless/realtek/rtw89/core.c
|
|
@@ -2435,6 +2435,7 @@ int rtw89_core_sta_add(struct rtw89_dev *rtwdev,
|
|
struct rtw89_vif *rtwvif = (struct rtw89_vif *)vif->drv_priv;
|
|
struct rtw89_sta *rtwsta = (struct rtw89_sta *)sta->drv_priv;
|
|
int i;
|
|
+ int ret;
|
|
|
|
rtwsta->rtwdev = rtwdev;
|
|
rtwsta->rtwvif = rtwvif;
|
|
@@ -2459,6 +2460,21 @@ int rtw89_core_sta_add(struct rtw89_dev *rtwdev,
|
|
RTW89_MAX_MAC_ID_NUM);
|
|
if (rtwsta->mac_id == RTW89_MAX_MAC_ID_NUM)
|
|
return -ENOSPC;
|
|
+
|
|
+ ret = rtw89_mac_set_macid_pause(rtwdev, rtwsta->mac_id, false);
|
|
+ if (ret) {
|
|
+ rtw89_core_release_bit_map(rtwdev->mac_id_map, rtwsta->mac_id);
|
|
+ rtw89_warn(rtwdev, "failed to send h2c macid pause\n");
|
|
+ return ret;
|
|
+ }
|
|
+
|
|
+ ret = rtw89_fw_h2c_role_maintain(rtwdev, rtwvif, rtwsta,
|
|
+ RTW89_ROLE_CREATE);
|
|
+ if (ret) {
|
|
+ rtw89_core_release_bit_map(rtwdev->mac_id_map, rtwsta->mac_id);
|
|
+ rtw89_warn(rtwdev, "failed to send h2c role info\n");
|
|
+ return ret;
|
|
+ }
|
|
}
|
|
|
|
return 0;
|
|
@@ -2513,14 +2529,6 @@ int rtw89_core_sta_disconnect(struct rtw89_dev *rtwdev,
|
|
return ret;
|
|
}
|
|
|
|
- if (vif->type == NL80211_IFTYPE_AP || sta->tdls) {
|
|
- ret = rtw89_fw_h2c_role_maintain(rtwdev, rtwvif, rtwsta, RTW89_ROLE_REMOVE);
|
|
- if (ret) {
|
|
- rtw89_warn(rtwdev, "failed to send h2c role info\n");
|
|
- return ret;
|
|
- }
|
|
- }
|
|
-
|
|
/* update cam aid mac_id net_type */
|
|
ret = rtw89_fw_h2c_cam(rtwdev, rtwvif, rtwsta, NULL);
|
|
if (ret) {
|
|
@@ -2541,18 +2549,6 @@ int rtw89_core_sta_assoc(struct rtw89_dev *rtwdev,
|
|
int ret;
|
|
|
|
if (vif->type == NL80211_IFTYPE_AP || sta->tdls) {
|
|
- ret = rtw89_mac_set_macid_pause(rtwdev, rtwsta->mac_id, false);
|
|
- if (ret) {
|
|
- rtw89_warn(rtwdev, "failed to send h2c macid pause\n");
|
|
- return ret;
|
|
- }
|
|
-
|
|
- ret = rtw89_fw_h2c_role_maintain(rtwdev, rtwvif, rtwsta, RTW89_ROLE_CREATE);
|
|
- if (ret) {
|
|
- rtw89_warn(rtwdev, "failed to send h2c role info\n");
|
|
- return ret;
|
|
- }
|
|
-
|
|
if (sta->tdls) {
|
|
ret = rtw89_cam_init_bssid_cam(rtwdev, rtwvif, bssid_cam, sta->addr);
|
|
if (ret) {
|
|
@@ -2622,13 +2618,22 @@ int rtw89_core_sta_remove(struct rtw89_dev *rtwdev,
|
|
{
|
|
struct rtw89_vif *rtwvif = (struct rtw89_vif *)vif->drv_priv;
|
|
struct rtw89_sta *rtwsta = (struct rtw89_sta *)sta->drv_priv;
|
|
+ int ret;
|
|
|
|
if (vif->type == NL80211_IFTYPE_STATION && !sta->tdls)
|
|
rtw89_btc_ntfy_role_info(rtwdev, rtwvif, rtwsta,
|
|
BTC_ROLE_MSTS_STA_DIS_CONN);
|
|
- else if (vif->type == NL80211_IFTYPE_AP || sta->tdls)
|
|
+ else if (vif->type == NL80211_IFTYPE_AP || sta->tdls) {
|
|
rtw89_core_release_bit_map(rtwdev->mac_id_map, rtwsta->mac_id);
|
|
|
|
+ ret = rtw89_fw_h2c_role_maintain(rtwdev, rtwvif, rtwsta,
|
|
+ RTW89_ROLE_REMOVE);
|
|
+ if (ret) {
|
|
+ rtw89_warn(rtwdev, "failed to send h2c role info\n");
|
|
+ return ret;
|
|
+ }
|
|
+ }
|
|
+
|
|
return 0;
|
|
}
|
|
|
|
--
|
|
2.13.6
|
|
|