]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
wifi: rtw89: support mac_id number according to chip
authorZong-Zhe Yang <kevin_yang@realtek.com>
Thu, 9 May 2024 09:06:46 +0000 (17:06 +0800)
committerPing-Ke Shih <pkshih@realtek.com>
Tue, 14 May 2024 01:30:31 +0000 (09:30 +0800)
On 802.11be chips, to consider MLO, HW doesn't design number
of support mac_id as large as before. And, it might be various
according to chip. For example, old chips support mac_id up to
128, but RTL8922a only supports mac_id up to 32.

Besides, the mac_id acquiring function will be extended when
impending MLO support.

Signed-off-by: Zong-Zhe Yang <kevin_yang@realtek.com>
Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
Link: https://msgid.link/20240509090646.35304-5-pkshih@realtek.com
drivers/net/wireless/realtek/rtw89/core.c
drivers/net/wireless/realtek/rtw89/core.h
drivers/net/wireless/realtek/rtw89/mac.c
drivers/net/wireless/realtek/rtw89/rtw8851b.c
drivers/net/wireless/realtek/rtw89/rtw8852a.c
drivers/net/wireless/realtek/rtw89/rtw8852b.c
drivers/net/wireless/realtek/rtw89/rtw8852c.c
drivers/net/wireless/realtek/rtw89/rtw8922a.c

index 1382bd24ba3bae879b74ac7b008a66a92c57a08a..8b6cb310eabac9a9a3380a230f66d422d6c01e9f 100644 (file)
@@ -3343,14 +3343,13 @@ int rtw89_core_sta_add(struct rtw89_dev *rtwdev,
                                         BTC_ROLE_MSTS_STA_CONN_START);
                rtw89_chip_rfk_channel(rtwdev);
        } else if (vif->type == NL80211_IFTYPE_AP || sta->tdls) {
-               rtwsta->mac_id = rtw89_core_acquire_bit_map(rtwdev->mac_id_map,
-                                                           RTW89_MAX_MAC_ID_NUM);
+               rtwsta->mac_id = rtw89_acquire_mac_id(rtwdev);
                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_release_mac_id(rtwdev, rtwsta->mac_id);
                        rtw89_warn(rtwdev, "failed to send h2c macid pause\n");
                        return ret;
                }
@@ -3358,7 +3357,7 @@ int rtw89_core_sta_add(struct rtw89_dev *rtwdev,
                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_release_mac_id(rtwdev, rtwsta->mac_id);
                        rtw89_warn(rtwdev, "failed to send h2c role info\n");
                        return ret;
                }
@@ -3531,7 +3530,7 @@ int rtw89_core_sta_remove(struct rtw89_dev *rtwdev,
                rtw89_btc_ntfy_role_info(rtwdev, rtwvif, rtwsta,
                                         BTC_ROLE_MSTS_STA_DIS_CONN);
        } else if (vif->type == NL80211_IFTYPE_AP || sta->tdls) {
-               rtw89_core_release_bit_map(rtwdev->mac_id_map, rtwsta->mac_id);
+               rtw89_release_mac_id(rtwdev, rtwsta->mac_id);
 
                ret = rtw89_fw_h2c_role_maintain(rtwdev, rtwvif, rtwsta,
                                                 RTW89_ROLE_REMOVE);
@@ -4181,6 +4180,25 @@ void rtw89_core_stop(struct rtw89_dev *rtwdev)
        rtw89_hci_reset(rtwdev);
 }
 
+u8 rtw89_acquire_mac_id(struct rtw89_dev *rtwdev)
+{
+       const struct rtw89_chip_info *chip = rtwdev->chip;
+       u8 mac_id_num = chip->support_macid_num;
+       u8 mac_id;
+
+       mac_id = find_first_zero_bit(rtwdev->mac_id_map, mac_id_num);
+       if (mac_id == mac_id_num)
+               return RTW89_MAX_MAC_ID_NUM;
+
+       set_bit(mac_id, rtwdev->mac_id_map);
+       return mac_id;
+}
+
+void rtw89_release_mac_id(struct rtw89_dev *rtwdev, u8 mac_id)
+{
+       clear_bit(mac_id, rtwdev->mac_id_map);
+}
+
 int rtw89_core_init(struct rtw89_dev *rtwdev)
 {
        struct rtw89_btc *btc = &rtwdev->btc;
index 32ae500579bb34768b2c768cc87ed7e0a38b7fce..c0f2afb4888a9c7ed1dcf6cfbc164a224229a768 100644 (file)
@@ -4143,6 +4143,7 @@ struct rtw89_chip_info {
        u8 wde_qempty_acq_grpnum;
        u8 wde_qempty_mgq_grpsel;
        u32 rf_base_addr[2];
+       u8 support_macid_num;
        u8 support_chanctx_num;
        u8 support_bands;
        u16 support_bandwidths;
@@ -6470,6 +6471,8 @@ struct rtw89_dev *rtw89_alloc_ieee80211_hw(struct device *device,
                                           u32 bus_data_size,
                                           const struct rtw89_chip_info *chip);
 void rtw89_free_ieee80211_hw(struct rtw89_dev *rtwdev);
+u8 rtw89_acquire_mac_id(struct rtw89_dev *rtwdev);
+void rtw89_release_mac_id(struct rtw89_dev *rtwdev, u8 mac_id);
 void rtw89_core_set_chip_txpwr(struct rtw89_dev *rtwdev);
 void rtw89_get_default_chandef(struct cfg80211_chan_def *chandef);
 void rtw89_get_channel_params(const struct cfg80211_chan_def *chandef,
index 3fe0046f6eaa24998c1eb9dd90fe61e3d96af608..baefc30b88c4d7c5483723c7bbb83c569a9a5603 100644 (file)
@@ -4664,8 +4664,7 @@ int rtw89_mac_add_vif(struct rtw89_dev *rtwdev, struct rtw89_vif *rtwvif)
 {
        int ret;
 
-       rtwvif->mac_id = rtw89_core_acquire_bit_map(rtwdev->mac_id_map,
-                                                   RTW89_MAX_MAC_ID_NUM);
+       rtwvif->mac_id = rtw89_acquire_mac_id(rtwdev);
        if (rtwvif->mac_id == RTW89_MAX_MAC_ID_NUM)
                return -ENOSPC;
 
@@ -4676,7 +4675,7 @@ int rtw89_mac_add_vif(struct rtw89_dev *rtwdev, struct rtw89_vif *rtwvif)
        return 0;
 
 release_mac_id:
-       rtw89_core_release_bit_map(rtwdev->mac_id_map, rtwvif->mac_id);
+       rtw89_release_mac_id(rtwdev, rtwvif->mac_id);
 
        return ret;
 }
@@ -4686,7 +4685,7 @@ int rtw89_mac_remove_vif(struct rtw89_dev *rtwdev, struct rtw89_vif *rtwvif)
        int ret;
 
        ret = rtw89_mac_vif_deinit(rtwdev, rtwvif);
-       rtw89_core_release_bit_map(rtwdev->mac_id_map, rtwvif->mac_id);
+       rtw89_release_mac_id(rtwdev, rtwvif->mac_id);
 
        return ret;
 }
index 87b51823244dcf805fa26dae87c53363c50ccc47..78e276f321c205da6fbfc5b1c32d47d105eb65d6 100644 (file)
@@ -2447,6 +2447,7 @@ const struct rtw89_chip_info rtw8851b_chip_info = {
        .dig_table              = NULL,
        .dig_regs               = &rtw8851b_dig_regs,
        .tssi_dbw_table         = NULL,
+       .support_macid_num      = RTW89_MAX_MAC_ID_NUM,
        .support_chanctx_num    = 0,
        .support_rnr            = false,
        .support_bands          = BIT(NL80211_BAND_2GHZ) |
index e93cee1456bda33b99e5d41e3669ec355064f6cc..aebbceea93f84516964c69da043cb6d2c3580081 100644 (file)
@@ -2162,6 +2162,7 @@ const struct rtw89_chip_info rtw8852a_chip_info = {
        .dig_table              = &rtw89_8852a_phy_dig_table,
        .dig_regs               = &rtw8852a_dig_regs,
        .tssi_dbw_table         = NULL,
+       .support_macid_num      = RTW89_MAX_MAC_ID_NUM,
        .support_chanctx_num    = 1,
        .support_rnr            = false,
        .support_bands          = BIT(NL80211_BAND_2GHZ) |
index d351096fa4b413f2048dbb4259b80fb650543698..53ae00b5ab7cce8a3c1be2cd20ed60add904f76a 100644 (file)
@@ -2610,6 +2610,7 @@ const struct rtw89_chip_info rtw8852b_chip_info = {
        .dig_table              = NULL,
        .dig_regs               = &rtw8852b_dig_regs,
        .tssi_dbw_table         = NULL,
+       .support_macid_num      = RTW89_MAX_MAC_ID_NUM,
        .support_chanctx_num    = 0,
        .support_rnr            = false,
        .support_bands          = BIT(NL80211_BAND_2GHZ) |
index 3571b41786d7cedb1b259c65a664cb8e3cb2cdf5..544ea1d3b577fbb9238dc6166fd08314bb702ae3 100644 (file)
@@ -2941,6 +2941,7 @@ const struct rtw89_chip_info rtw8852c_chip_info = {
        .dig_table              = NULL,
        .dig_regs               = &rtw8852c_dig_regs,
        .tssi_dbw_table         = &rtw89_8852c_tssi_dbw_table,
+       .support_macid_num      = RTW89_MAX_MAC_ID_NUM,
        .support_chanctx_num    = 2,
        .support_rnr            = false,
        .support_bands          = BIT(NL80211_BAND_2GHZ) |
index 3b3ea3a7c19ae8f4b4ffccaf1ecba3765046c7a6..cc4f251caadd6648a22900d0c9067d7996b5afcd 100644 (file)
@@ -2544,6 +2544,7 @@ const struct rtw89_chip_info rtw8922a_chip_info = {
        .dig_table              = NULL,
        .dig_regs               = &rtw8922a_dig_regs,
        .tssi_dbw_table         = NULL,
+       .support_macid_num      = 32,
        .support_chanctx_num    = 2,
        .support_rnr            = true,
        .support_bands          = BIT(NL80211_BAND_2GHZ) |