mirror of
https://github.com/torvalds/linux.git
synced 2026-06-01 02:53:36 +02:00
wifi: rtw89: support mac_id number according to chip
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
This commit is contained in:
parent
e9f1a901c9
commit
578bdd984f
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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) |
|
||||
|
|
|
|||
|
|
@ -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) |
|
||||
|
|
|
|||
|
|
@ -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) |
|
||||
|
|
|
|||
|
|
@ -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) |
|
||||
|
|
|
|||
|
|
@ -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) |
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user