mac80211: rtl8xxxu: sync with linux-next 20240229
[openwrt/staging/981213.git] / package / kernel / mac80211 / patches / rtl / 001-17-v6.9-wifi-rtl8xxxu-add-macids-for-STA-mode.patch
1 From 5ce0d7e8aee03e73b35f0fe1f1ebbdd4e45776f3 Mon Sep 17 00:00:00 2001
2 From: Martin Kaistra <martin.kaistra@linutronix.de>
3 Date: Fri, 22 Dec 2023 11:14:38 +0100
4 Subject: [PATCH 17/21] wifi: rtl8xxxu: add macids for STA mode
5
6 Until now, the driver only assigned a dedicated macid for connections
7 made in AP mode, in STA mode the return value of rtl8xxxu_get_macid()
8 was simply 0.
9 To differentiate between port 0 and 1, when both are in STA mode,
10 allocate a second macid (with value 1) and set sta_info->macid according
11 to the used port_num in rtl8xxxu_sta_add().
12
13 Signed-off-by: Martin Kaistra <martin.kaistra@linutronix.de>
14 Reviewed-by: Ping-Ke Shih <pkshih@realtek.com>
15 Signed-off-by: Kalle Valo <kvalo@kernel.org>
16 Link: https://msgid.link/20231222101442.626837-18-martin.kaistra@linutronix.de
17 ---
18 .../net/wireless/realtek/rtl8xxxu/rtl8xxxu.h | 1 +
19 .../wireless/realtek/rtl8xxxu/rtl8xxxu_core.c | 18 +++++++++++++++++-
20 2 files changed, 18 insertions(+), 1 deletion(-)
21
22 --- a/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu.h
23 +++ b/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu.h
24 @@ -1774,6 +1774,7 @@ struct rtl8xxxu_cfo_tracking {
25 #define RTL8XXXU_HW_LED_CONTROL 2
26 #define RTL8XXXU_MAX_MAC_ID_NUM 128
27 #define RTL8XXXU_BC_MC_MACID 0
28 +#define RTL8XXXU_BC_MC_MACID1 1
29
30 struct rtl8xxxu_priv {
31 struct ieee80211_hw *hw;
32 --- a/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_core.c
33 +++ b/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_core.c
34 @@ -4053,10 +4053,13 @@ static inline u8 rtl8xxxu_get_macid(stru
35 {
36 struct rtl8xxxu_sta_info *sta_info;
37
38 - if (!priv->vif || priv->vif->type == NL80211_IFTYPE_STATION || !sta)
39 + if (!sta)
40 return 0;
41
42 sta_info = (struct rtl8xxxu_sta_info *)sta->drv_priv;
43 + if (!sta_info)
44 + return 0;
45 +
46 return sta_info->macid;
47 }
48
49 @@ -4536,6 +4539,7 @@ static int rtl8xxxu_init_device(struct i
50 rtl8188e_ra_info_init_all(&priv->ra_info);
51
52 set_bit(RTL8XXXU_BC_MC_MACID, priv->mac_id_map);
53 + set_bit(RTL8XXXU_BC_MC_MACID1, priv->mac_id_map);
54
55 exit:
56 return ret;
57 @@ -7375,6 +7379,7 @@ static int rtl8xxxu_sta_add(struct ieee8
58 struct ieee80211_sta *sta)
59 {
60 struct rtl8xxxu_sta_info *sta_info = (struct rtl8xxxu_sta_info *)sta->drv_priv;
61 + struct rtl8xxxu_vif *rtlvif = (struct rtl8xxxu_vif *)vif->drv_priv;
62 struct rtl8xxxu_priv *priv = hw->priv;
63
64 if (vif->type == NL80211_IFTYPE_AP) {
65 @@ -7384,6 +7389,17 @@ static int rtl8xxxu_sta_add(struct ieee8
66
67 rtl8xxxu_refresh_rate_mask(priv, 0, sta, true);
68 priv->fops->report_connect(priv, sta_info->macid, H2C_MACID_ROLE_STA, true);
69 + } else {
70 + switch (rtlvif->port_num) {
71 + case 0:
72 + sta_info->macid = RTL8XXXU_BC_MC_MACID;
73 + break;
74 + case 1:
75 + sta_info->macid = RTL8XXXU_BC_MC_MACID1;
76 + break;
77 + default:
78 + break;
79 + }
80 }
81
82 return 0;