wifi: rtw89: refactor STA related func ahead for MLO
Refactor STA related functions, e.g. add/assoc/disassoc/disconnect/remove to separate most link stuffs into sub-functions for MLO reuse. Signed-off-by: Zong-Zhe Yang <kevin_yang@realtek.com> Signed-off-by: Ping-Ke Shih <pkshih@realtek.com> Link: https://patch.msgid.link/20240916053158.47350-7-pkshih@realtek.com
This commit is contained in:
committed by
Ping-Ke Shih
parent
26d460e13f
commit
72e9457c19
@@ -2746,8 +2746,8 @@ skip_ba_work:
|
||||
spin_unlock_bh(&rtwdev->ba_lock);
|
||||
}
|
||||
|
||||
static void rtw89_core_free_sta_pending_ba(struct rtw89_dev *rtwdev,
|
||||
struct ieee80211_sta *sta)
|
||||
void rtw89_core_free_sta_pending_ba(struct rtw89_dev *rtwdev,
|
||||
struct ieee80211_sta *sta)
|
||||
{
|
||||
struct rtw89_txq *rtwtxq, *tmp;
|
||||
|
||||
@@ -2761,8 +2761,8 @@ static void rtw89_core_free_sta_pending_ba(struct rtw89_dev *rtwdev,
|
||||
spin_unlock_bh(&rtwdev->ba_lock);
|
||||
}
|
||||
|
||||
static void rtw89_core_free_sta_pending_forbid_ba(struct rtw89_dev *rtwdev,
|
||||
struct ieee80211_sta *sta)
|
||||
void rtw89_core_free_sta_pending_forbid_ba(struct rtw89_dev *rtwdev,
|
||||
struct ieee80211_sta *sta)
|
||||
{
|
||||
struct rtw89_txq *rtwtxq, *tmp;
|
||||
|
||||
@@ -2778,8 +2778,8 @@ static void rtw89_core_free_sta_pending_forbid_ba(struct rtw89_dev *rtwdev,
|
||||
spin_unlock_bh(&rtwdev->ba_lock);
|
||||
}
|
||||
|
||||
static void rtw89_core_free_sta_pending_roc_tx(struct rtw89_dev *rtwdev,
|
||||
struct ieee80211_sta *sta)
|
||||
void rtw89_core_free_sta_pending_roc_tx(struct rtw89_dev *rtwdev,
|
||||
struct ieee80211_sta *sta)
|
||||
{
|
||||
struct rtw89_sta_link *rtwsta_link = (struct rtw89_sta_link *)sta->drv_priv;
|
||||
struct sk_buff *skb, *tmp;
|
||||
@@ -3525,26 +3525,19 @@ void rtw89_vif_type_mapping(struct rtw89_vif_link *rtwvif_link, bool assoc)
|
||||
}
|
||||
}
|
||||
|
||||
int rtw89_core_sta_add(struct rtw89_dev *rtwdev,
|
||||
struct ieee80211_vif *vif,
|
||||
struct ieee80211_sta *sta)
|
||||
int rtw89_core_sta_link_add(struct rtw89_dev *rtwdev,
|
||||
struct rtw89_vif_link *rtwvif_link,
|
||||
struct rtw89_sta_link *rtwsta_link)
|
||||
{
|
||||
struct rtw89_vif_link *rtwvif_link = (struct rtw89_vif_link *)vif->drv_priv;
|
||||
struct rtw89_sta_link *rtwsta_link = (struct rtw89_sta_link *)sta->drv_priv;
|
||||
struct ieee80211_vif *vif = rtwvif_to_vif(rtwvif_link);
|
||||
struct ieee80211_sta *sta = rtwsta_to_sta(rtwsta_link);
|
||||
struct rtw89_hal *hal = &rtwdev->hal;
|
||||
u8 ant_num = hal->ant_diversity ? 2 : rtwdev->chip->rf_path_num;
|
||||
int i;
|
||||
int ret;
|
||||
|
||||
rtwsta_link->rtwdev = rtwdev;
|
||||
rtwsta_link->rtwvif_link = rtwvif_link;
|
||||
rtwsta_link->prev_rssi = 0;
|
||||
INIT_LIST_HEAD(&rtwsta_link->ba_cam_list);
|
||||
skb_queue_head_init(&rtwsta_link->roc_queue);
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(sta->txq); i++)
|
||||
rtw89_core_txq_init(rtwdev, sta->txq[i]);
|
||||
|
||||
ewma_rssi_init(&rtwsta_link->avg_rssi);
|
||||
ewma_snr_init(&rtwsta_link->avg_snr);
|
||||
ewma_evm_init(&rtwsta_link->evm_1ss);
|
||||
@@ -3555,9 +3548,6 @@ int rtw89_core_sta_add(struct rtw89_dev *rtwdev,
|
||||
}
|
||||
|
||||
if (vif->type == NL80211_IFTYPE_STATION && !sta->tdls) {
|
||||
/* for station mode, assign the mac_id from itself */
|
||||
rtwsta_link->mac_id = rtwvif_link->mac_id;
|
||||
|
||||
/* must do rtw89_reg_6ghz_recalc() before rfk channel */
|
||||
ret = rtw89_reg_6ghz_recalc(rtwdev, rtwvif_link, true);
|
||||
if (ret)
|
||||
@@ -3567,13 +3557,8 @@ int rtw89_core_sta_add(struct rtw89_dev *rtwdev,
|
||||
BTC_ROLE_MSTS_STA_CONN_START);
|
||||
rtw89_chip_rfk_channel(rtwdev, rtwvif_link);
|
||||
} else if (vif->type == NL80211_IFTYPE_AP || sta->tdls) {
|
||||
rtwsta_link->mac_id = rtw89_acquire_mac_id(rtwdev);
|
||||
if (rtwsta_link->mac_id == RTW89_MAX_MAC_ID_NUM)
|
||||
return -ENOSPC;
|
||||
|
||||
ret = rtw89_mac_set_macid_pause(rtwdev, rtwsta_link->mac_id, false);
|
||||
if (ret) {
|
||||
rtw89_release_mac_id(rtwdev, rtwsta_link->mac_id);
|
||||
rtw89_warn(rtwdev, "failed to send h2c macid pause\n");
|
||||
return ret;
|
||||
}
|
||||
@@ -3581,7 +3566,6 @@ int rtw89_core_sta_add(struct rtw89_dev *rtwdev,
|
||||
ret = rtw89_fw_h2c_role_maintain(rtwdev, rtwvif_link, rtwsta_link,
|
||||
RTW89_ROLE_CREATE);
|
||||
if (ret) {
|
||||
rtw89_release_mac_id(rtwdev, rtwsta_link->mac_id);
|
||||
rtw89_warn(rtwdev, "failed to send h2c role info\n");
|
||||
return ret;
|
||||
}
|
||||
@@ -3593,44 +3577,33 @@ int rtw89_core_sta_add(struct rtw89_dev *rtwdev,
|
||||
ret = rtw89_chip_h2c_default_dmac_tbl(rtwdev, rtwvif_link, rtwsta_link);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
rtw89_queue_chanctx_change(rtwdev, RTW89_CHANCTX_REMOTE_STA_CHANGE);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int rtw89_core_sta_disassoc(struct rtw89_dev *rtwdev,
|
||||
struct ieee80211_vif *vif,
|
||||
struct ieee80211_sta *sta)
|
||||
int rtw89_core_sta_link_disassoc(struct rtw89_dev *rtwdev,
|
||||
struct rtw89_vif_link *rtwvif_link,
|
||||
struct rtw89_sta_link *rtwsta_link)
|
||||
{
|
||||
struct rtw89_vif_link *rtwvif_link = (struct rtw89_vif_link *)vif->drv_priv;
|
||||
struct rtw89_sta_link *rtwsta_link = (struct rtw89_sta_link *)sta->drv_priv;
|
||||
struct ieee80211_vif *vif = rtwvif_to_vif(rtwvif_link);
|
||||
|
||||
if (vif->type == NL80211_IFTYPE_STATION)
|
||||
rtw89_fw_h2c_set_bcn_fltr_cfg(rtwdev, vif, false);
|
||||
|
||||
rtwdev->total_sta_assoc--;
|
||||
if (sta->tdls)
|
||||
rtwvif_link->tdls_peer--;
|
||||
rtwsta_link->disassoc = true;
|
||||
rtw89_fw_h2c_set_bcn_fltr_cfg(rtwdev, rtwvif_link, false);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int rtw89_core_sta_disconnect(struct rtw89_dev *rtwdev,
|
||||
struct ieee80211_vif *vif,
|
||||
struct ieee80211_sta *sta)
|
||||
int rtw89_core_sta_link_disconnect(struct rtw89_dev *rtwdev,
|
||||
struct rtw89_vif_link *rtwvif_link,
|
||||
struct rtw89_sta_link *rtwsta_link)
|
||||
{
|
||||
struct rtw89_vif_link *rtwvif_link = (struct rtw89_vif_link *)vif->drv_priv;
|
||||
struct rtw89_sta_link *rtwsta_link = (struct rtw89_sta_link *)sta->drv_priv;
|
||||
struct ieee80211_vif *vif = rtwvif_to_vif(rtwvif_link);
|
||||
struct ieee80211_sta *sta = rtwsta_to_sta(rtwsta_link);
|
||||
int ret;
|
||||
|
||||
rtw89_mac_bf_monitor_calc(rtwdev, sta, true);
|
||||
rtw89_mac_bf_disassoc(rtwdev, vif, sta);
|
||||
rtw89_core_free_sta_pending_ba(rtwdev, sta);
|
||||
rtw89_core_free_sta_pending_forbid_ba(rtwdev, sta);
|
||||
rtw89_core_free_sta_pending_roc_tx(rtwdev, sta);
|
||||
rtw89_mac_bf_monitor_calc(rtwdev, rtwsta_link, true);
|
||||
rtw89_mac_bf_disassoc(rtwdev, rtwvif_link, rtwsta_link);
|
||||
|
||||
if (vif->type == NL80211_IFTYPE_AP || sta->tdls)
|
||||
rtw89_cam_deinit_addr_cam(rtwdev, &rtwsta_link->addr_cam);
|
||||
@@ -3642,7 +3615,7 @@ int rtw89_core_sta_disconnect(struct rtw89_dev *rtwdev,
|
||||
rtw89_fw_release_general_pkt_list_vif(rtwdev, rtwvif_link, true);
|
||||
}
|
||||
|
||||
ret = rtw89_chip_h2c_assoc_cmac_tbl(rtwdev, vif, sta);
|
||||
ret = rtw89_chip_h2c_assoc_cmac_tbl(rtwdev, rtwvif_link, rtwsta_link);
|
||||
if (ret) {
|
||||
rtw89_warn(rtwdev, "failed to send h2c cmac table\n");
|
||||
return ret;
|
||||
@@ -3664,12 +3637,12 @@ int rtw89_core_sta_disconnect(struct rtw89_dev *rtwdev,
|
||||
return ret;
|
||||
}
|
||||
|
||||
int rtw89_core_sta_assoc(struct rtw89_dev *rtwdev,
|
||||
struct ieee80211_vif *vif,
|
||||
struct ieee80211_sta *sta)
|
||||
int rtw89_core_sta_link_assoc(struct rtw89_dev *rtwdev,
|
||||
struct rtw89_vif_link *rtwvif_link,
|
||||
struct rtw89_sta_link *rtwsta_link)
|
||||
{
|
||||
struct rtw89_vif_link *rtwvif_link = (struct rtw89_vif_link *)vif->drv_priv;
|
||||
struct rtw89_sta_link *rtwsta_link = (struct rtw89_sta_link *)sta->drv_priv;
|
||||
struct ieee80211_vif *vif = rtwvif_to_vif(rtwvif_link);
|
||||
struct ieee80211_sta *sta = rtwsta_to_sta(rtwsta_link);
|
||||
struct rtw89_bssid_cam_entry *bssid_cam = rtw89_get_bssid_cam_of(rtwvif_link,
|
||||
rtwsta_link);
|
||||
const struct rtw89_chan *chan = rtw89_chan_get(rtwdev,
|
||||
@@ -3701,7 +3674,7 @@ int rtw89_core_sta_assoc(struct rtw89_dev *rtwdev,
|
||||
}
|
||||
}
|
||||
|
||||
ret = rtw89_chip_h2c_assoc_cmac_tbl(rtwdev, vif, sta);
|
||||
ret = rtw89_chip_h2c_assoc_cmac_tbl(rtwdev, rtwvif_link, rtwsta_link);
|
||||
if (ret) {
|
||||
rtw89_warn(rtwdev, "failed to send h2c cmac table\n");
|
||||
return ret;
|
||||
@@ -3720,12 +3693,9 @@ int rtw89_core_sta_assoc(struct rtw89_dev *rtwdev,
|
||||
return ret;
|
||||
}
|
||||
|
||||
rtwdev->total_sta_assoc++;
|
||||
if (sta->tdls)
|
||||
rtwvif_link->tdls_peer++;
|
||||
rtw89_phy_ra_assoc(rtwdev, sta);
|
||||
rtw89_mac_bf_assoc(rtwdev, vif, sta);
|
||||
rtw89_mac_bf_monitor_calc(rtwdev, sta, false);
|
||||
rtw89_phy_ra_assoc(rtwdev, rtwsta_link);
|
||||
rtw89_mac_bf_assoc(rtwdev, rtwvif_link, rtwsta_link);
|
||||
rtw89_mac_bf_monitor_calc(rtwdev, rtwsta_link, false);
|
||||
|
||||
if (vif->type == NL80211_IFTYPE_STATION && !sta->tdls) {
|
||||
struct ieee80211_bss_conf *bss_conf;
|
||||
@@ -3750,18 +3720,18 @@ int rtw89_core_sta_assoc(struct rtw89_dev *rtwdev,
|
||||
return ret;
|
||||
}
|
||||
|
||||
rtw89_fw_h2c_set_bcn_fltr_cfg(rtwdev, vif, true);
|
||||
rtw89_fw_h2c_set_bcn_fltr_cfg(rtwdev, rtwvif_link, true);
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
int rtw89_core_sta_remove(struct rtw89_dev *rtwdev,
|
||||
struct ieee80211_vif *vif,
|
||||
struct ieee80211_sta *sta)
|
||||
int rtw89_core_sta_link_remove(struct rtw89_dev *rtwdev,
|
||||
struct rtw89_vif_link *rtwvif_link,
|
||||
struct rtw89_sta_link *rtwsta_link)
|
||||
{
|
||||
struct rtw89_vif_link *rtwvif_link = (struct rtw89_vif_link *)vif->drv_priv;
|
||||
struct rtw89_sta_link *rtwsta_link = (struct rtw89_sta_link *)sta->drv_priv;
|
||||
struct ieee80211_vif *vif = rtwvif_to_vif(rtwvif_link);
|
||||
struct ieee80211_sta *sta = rtwsta_to_sta(rtwsta_link);
|
||||
int ret;
|
||||
|
||||
if (vif->type == NL80211_IFTYPE_STATION && !sta->tdls) {
|
||||
@@ -3769,16 +3739,12 @@ int rtw89_core_sta_remove(struct rtw89_dev *rtwdev,
|
||||
rtw89_btc_ntfy_role_info(rtwdev, rtwvif_link, rtwsta_link,
|
||||
BTC_ROLE_MSTS_STA_DIS_CONN);
|
||||
} else if (vif->type == NL80211_IFTYPE_AP || sta->tdls) {
|
||||
rtw89_release_mac_id(rtwdev, rtwsta_link->mac_id);
|
||||
|
||||
ret = rtw89_fw_h2c_role_maintain(rtwdev, rtwvif_link, rtwsta_link,
|
||||
RTW89_ROLE_REMOVE);
|
||||
if (ret) {
|
||||
rtw89_warn(rtwdev, "failed to send h2c role info\n");
|
||||
return ret;
|
||||
}
|
||||
|
||||
rtw89_queue_chanctx_change(rtwdev, RTW89_CHANCTX_REMOTE_STA_CHANGE);
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
||||
@@ -3656,8 +3656,8 @@ struct rtw89_chip_ops {
|
||||
struct rtw89_vif_link *rtwvif_link,
|
||||
struct rtw89_sta_link *rtwsta_link);
|
||||
int (*h2c_assoc_cmac_tbl)(struct rtw89_dev *rtwdev,
|
||||
struct ieee80211_vif *vif,
|
||||
struct ieee80211_sta *sta);
|
||||
struct rtw89_vif_link *rtwvif_link,
|
||||
struct rtw89_sta_link *rtwsta_link);
|
||||
int (*h2c_ampdu_cmac_tbl)(struct rtw89_dev *rtwdev,
|
||||
struct ieee80211_vif *vif,
|
||||
struct ieee80211_sta *sta);
|
||||
@@ -6657,21 +6657,21 @@ void rtw89_core_napi_start(struct rtw89_dev *rtwdev);
|
||||
void rtw89_core_napi_stop(struct rtw89_dev *rtwdev);
|
||||
int rtw89_core_napi_init(struct rtw89_dev *rtwdev);
|
||||
void rtw89_core_napi_deinit(struct rtw89_dev *rtwdev);
|
||||
int rtw89_core_sta_add(struct rtw89_dev *rtwdev,
|
||||
struct ieee80211_vif *vif,
|
||||
struct ieee80211_sta *sta);
|
||||
int rtw89_core_sta_assoc(struct rtw89_dev *rtwdev,
|
||||
struct ieee80211_vif *vif,
|
||||
struct ieee80211_sta *sta);
|
||||
int rtw89_core_sta_disassoc(struct rtw89_dev *rtwdev,
|
||||
struct ieee80211_vif *vif,
|
||||
struct ieee80211_sta *sta);
|
||||
int rtw89_core_sta_disconnect(struct rtw89_dev *rtwdev,
|
||||
struct ieee80211_vif *vif,
|
||||
struct ieee80211_sta *sta);
|
||||
int rtw89_core_sta_remove(struct rtw89_dev *rtwdev,
|
||||
struct ieee80211_vif *vif,
|
||||
struct ieee80211_sta *sta);
|
||||
int rtw89_core_sta_link_add(struct rtw89_dev *rtwdev,
|
||||
struct rtw89_vif_link *rtwvif_link,
|
||||
struct rtw89_sta_link *rtwsta_link);
|
||||
int rtw89_core_sta_link_assoc(struct rtw89_dev *rtwdev,
|
||||
struct rtw89_vif_link *rtwvif_link,
|
||||
struct rtw89_sta_link *rtwsta_link);
|
||||
int rtw89_core_sta_link_disassoc(struct rtw89_dev *rtwdev,
|
||||
struct rtw89_vif_link *rtwvif_link,
|
||||
struct rtw89_sta_link *rtwsta_link);
|
||||
int rtw89_core_sta_link_disconnect(struct rtw89_dev *rtwdev,
|
||||
struct rtw89_vif_link *rtwvif_link,
|
||||
struct rtw89_sta_link *rtwsta_link);
|
||||
int rtw89_core_sta_link_remove(struct rtw89_dev *rtwdev,
|
||||
struct rtw89_vif_link *rtwvif_link,
|
||||
struct rtw89_sta_link *rtwsta_link);
|
||||
void rtw89_core_set_tid_config(struct rtw89_dev *rtwdev,
|
||||
struct ieee80211_sta *sta,
|
||||
struct cfg80211_tid_config *tid_config);
|
||||
@@ -6703,6 +6703,12 @@ int rtw89_core_acquire_sta_ba_entry(struct rtw89_dev *rtwdev,
|
||||
int rtw89_core_release_sta_ba_entry(struct rtw89_dev *rtwdev,
|
||||
struct rtw89_sta_link *rtwsta_link, u8 tid,
|
||||
u8 *cam_idx);
|
||||
void rtw89_core_free_sta_pending_ba(struct rtw89_dev *rtwdev,
|
||||
struct ieee80211_sta *sta);
|
||||
void rtw89_core_free_sta_pending_forbid_ba(struct rtw89_dev *rtwdev,
|
||||
struct ieee80211_sta *sta);
|
||||
void rtw89_core_free_sta_pending_roc_tx(struct rtw89_dev *rtwdev,
|
||||
struct ieee80211_sta *sta);
|
||||
void rtw89_vif_type_mapping(struct rtw89_vif_link *rtwvif_link, bool assoc);
|
||||
int rtw89_chip_info_setup(struct rtw89_dev *rtwdev);
|
||||
void rtw89_chip_cfg_txpwr_ul_tb_offset(struct rtw89_dev *rtwdev,
|
||||
|
||||
@@ -2832,12 +2832,11 @@ static void __get_sta_he_pkt_padding(struct rtw89_dev *rtwdev,
|
||||
}
|
||||
|
||||
int rtw89_fw_h2c_assoc_cmac_tbl(struct rtw89_dev *rtwdev,
|
||||
struct ieee80211_vif *vif,
|
||||
struct ieee80211_sta *sta)
|
||||
struct rtw89_vif_link *rtwvif_link,
|
||||
struct rtw89_sta_link *rtwsta_link)
|
||||
{
|
||||
struct ieee80211_vif *vif = rtwvif_to_vif(rtwvif_link);
|
||||
const struct rtw89_chip_info *chip = rtwdev->chip;
|
||||
struct rtw89_sta_link *rtwsta_link = sta_to_rtwsta_safe(sta);
|
||||
struct rtw89_vif_link *rtwvif_link = (struct rtw89_vif_link *)vif->drv_priv;
|
||||
const struct rtw89_chan *chan = rtw89_chan_get(rtwdev,
|
||||
rtwvif_link->chanctx_idx);
|
||||
struct ieee80211_link_sta *link_sta;
|
||||
@@ -2980,11 +2979,10 @@ static void __get_sta_eht_pkt_padding(struct rtw89_dev *rtwdev,
|
||||
}
|
||||
|
||||
int rtw89_fw_h2c_assoc_cmac_tbl_g7(struct rtw89_dev *rtwdev,
|
||||
struct ieee80211_vif *vif,
|
||||
struct ieee80211_sta *sta)
|
||||
struct rtw89_vif_link *rtwvif_link,
|
||||
struct rtw89_sta_link *rtwsta_link)
|
||||
{
|
||||
struct rtw89_vif_link *rtwvif_link = (struct rtw89_vif_link *)vif->drv_priv;
|
||||
struct rtw89_sta_link *rtwsta_link = sta_to_rtwsta_safe(sta);
|
||||
struct ieee80211_vif *vif = rtwvif_to_vif(rtwvif_link);
|
||||
const struct rtw89_chan *chan = rtw89_chan_get(rtwdev, rtwvif_link->chanctx_idx);
|
||||
u8 mac_id = rtwsta_link ? rtwsta_link->mac_id : rtwvif_link->mac_id;
|
||||
struct rtw89_h2c_cctlinfo_ud_g7 *h2c;
|
||||
@@ -3789,10 +3787,9 @@ fail:
|
||||
}
|
||||
|
||||
int rtw89_fw_h2c_set_bcn_fltr_cfg(struct rtw89_dev *rtwdev,
|
||||
struct ieee80211_vif *vif,
|
||||
struct rtw89_vif_link *rtwvif_link,
|
||||
bool connect)
|
||||
{
|
||||
struct rtw89_vif_link *rtwvif_link = vif_to_rtwvif_safe(vif);
|
||||
struct ieee80211_bss_conf *bss_conf;
|
||||
s32 thold = RTW89_DEFAULT_CQM_THOLD;
|
||||
u32 hyst = RTW89_DEFAULT_CQM_HYST;
|
||||
|
||||
@@ -4468,11 +4468,11 @@ int rtw89_fw_h2c_default_dmac_tbl_v2(struct rtw89_dev *rtwdev,
|
||||
struct rtw89_vif_link *rtwvif_link,
|
||||
struct rtw89_sta_link *rtwsta_link);
|
||||
int rtw89_fw_h2c_assoc_cmac_tbl(struct rtw89_dev *rtwdev,
|
||||
struct ieee80211_vif *vif,
|
||||
struct ieee80211_sta *sta);
|
||||
struct rtw89_vif_link *rtwvif_link,
|
||||
struct rtw89_sta_link *rtwsta_link);
|
||||
int rtw89_fw_h2c_assoc_cmac_tbl_g7(struct rtw89_dev *rtwdev,
|
||||
struct ieee80211_vif *vif,
|
||||
struct ieee80211_sta *sta);
|
||||
struct rtw89_vif_link *rtwvif_link,
|
||||
struct rtw89_sta_link *rtwsta_link);
|
||||
int rtw89_fw_h2c_ampdu_cmac_tbl_g7(struct rtw89_dev *rtwdev,
|
||||
struct ieee80211_vif *vif,
|
||||
struct ieee80211_sta *sta);
|
||||
@@ -4507,7 +4507,7 @@ int rtw89_fw_h2c_set_edca(struct rtw89_dev *rtwdev, struct rtw89_vif_link *rtwvi
|
||||
u8 ac, u32 val);
|
||||
int rtw89_fw_h2c_set_ofld_cfg(struct rtw89_dev *rtwdev);
|
||||
int rtw89_fw_h2c_set_bcn_fltr_cfg(struct rtw89_dev *rtwdev,
|
||||
struct ieee80211_vif *vif,
|
||||
struct rtw89_vif_link *rtwvif_link,
|
||||
bool connect);
|
||||
int rtw89_fw_h2c_rssi_offload(struct rtw89_dev *rtwdev,
|
||||
struct rtw89_rx_phy_ppdu *phy_ppdu);
|
||||
@@ -4709,12 +4709,12 @@ static inline int rtw89_chip_h2c_update_beacon(struct rtw89_dev *rtwdev,
|
||||
}
|
||||
|
||||
static inline int rtw89_chip_h2c_assoc_cmac_tbl(struct rtw89_dev *rtwdev,
|
||||
struct ieee80211_vif *vif,
|
||||
struct ieee80211_sta *sta)
|
||||
struct rtw89_vif_link *rtwvif_link,
|
||||
struct rtw89_sta_link *rtwsta_link)
|
||||
{
|
||||
const struct rtw89_chip_info *chip = rtwdev->chip;
|
||||
|
||||
return chip->ops->h2c_assoc_cmac_tbl(rtwdev, vif, sta);
|
||||
return chip->ops->h2c_assoc_cmac_tbl(rtwdev, rtwvif_link, rtwsta_link);
|
||||
}
|
||||
|
||||
static inline int rtw89_chip_h2c_ampdu_cmac_tbl(struct rtw89_dev *rtwdev,
|
||||
|
||||
@@ -4877,7 +4877,7 @@ rtw89_mac_bcn_fltr_rpt(struct rtw89_dev *rtwdev, struct rtw89_vif_link *rtwvif_l
|
||||
if (!rtwdev->scanning && !rtwvif_link->offchan)
|
||||
ieee80211_connection_loss(vif);
|
||||
else
|
||||
rtw89_fw_h2c_set_bcn_fltr_cfg(rtwdev, vif, true);
|
||||
rtw89_fw_h2c_set_bcn_fltr_cfg(rtwdev, rtwvif_link, true);
|
||||
return;
|
||||
case RTW89_BCN_FLTR_NOTIFY:
|
||||
nl_event = NL80211_CQM_RSSI_THRESHOLD_EVENT_HIGH;
|
||||
@@ -5969,11 +5969,9 @@ static int rtw89_mac_init_bfee_ax(struct rtw89_dev *rtwdev, u8 mac_idx)
|
||||
}
|
||||
|
||||
static int rtw89_mac_set_csi_para_reg_ax(struct rtw89_dev *rtwdev,
|
||||
struct ieee80211_vif *vif,
|
||||
struct ieee80211_sta *sta)
|
||||
struct rtw89_vif_link *rtwvif_link,
|
||||
struct rtw89_sta_link *rtwsta_link)
|
||||
{
|
||||
struct rtw89_vif_link *rtwvif_link = (struct rtw89_vif_link *)vif->drv_priv;
|
||||
struct rtw89_sta_link *rtwsta_link = (struct rtw89_sta_link *)sta->drv_priv;
|
||||
u8 nc = 1, nr = 3, ng = 0, cb = 1, cs = 1, ldpc_en = 1, stbc_en = 1;
|
||||
struct ieee80211_link_sta *link_sta;
|
||||
u8 mac_idx = rtwvif_link->mac_idx;
|
||||
@@ -6036,11 +6034,9 @@ static int rtw89_mac_set_csi_para_reg_ax(struct rtw89_dev *rtwdev,
|
||||
}
|
||||
|
||||
static int rtw89_mac_csi_rrsc_ax(struct rtw89_dev *rtwdev,
|
||||
struct ieee80211_vif *vif,
|
||||
struct ieee80211_sta *sta)
|
||||
struct rtw89_vif_link *rtwvif_link,
|
||||
struct rtw89_sta_link *rtwsta_link)
|
||||
{
|
||||
struct rtw89_vif_link *rtwvif_link = (struct rtw89_vif_link *)vif->drv_priv;
|
||||
struct rtw89_sta_link *rtwsta_link = (struct rtw89_sta_link *)sta->drv_priv;
|
||||
u32 rrsc = BIT(RTW89_MAC_BF_RRSC_6M) | BIT(RTW89_MAC_BF_RRSC_24M);
|
||||
struct ieee80211_link_sta *link_sta;
|
||||
u8 mac_idx = rtwvif_link->mac_idx;
|
||||
@@ -6084,11 +6080,9 @@ static int rtw89_mac_csi_rrsc_ax(struct rtw89_dev *rtwdev,
|
||||
}
|
||||
|
||||
static void rtw89_mac_bf_assoc_ax(struct rtw89_dev *rtwdev,
|
||||
struct ieee80211_vif *vif,
|
||||
struct ieee80211_sta *sta)
|
||||
struct rtw89_vif_link *rtwvif_link,
|
||||
struct rtw89_sta_link *rtwsta_link)
|
||||
{
|
||||
struct rtw89_vif_link *rtwvif_link = (struct rtw89_vif_link *)vif->drv_priv;
|
||||
struct rtw89_sta_link *rtwsta_link = (struct rtw89_sta_link *)sta->drv_priv;
|
||||
struct ieee80211_link_sta *link_sta;
|
||||
bool has_beamformer_cap;
|
||||
|
||||
@@ -6103,16 +6097,15 @@ static void rtw89_mac_bf_assoc_ax(struct rtw89_dev *rtwdev,
|
||||
rtw89_debug(rtwdev, RTW89_DBG_BF,
|
||||
"initialize bfee for new association\n");
|
||||
rtw89_mac_init_bfee_ax(rtwdev, rtwvif_link->mac_idx);
|
||||
rtw89_mac_set_csi_para_reg_ax(rtwdev, vif, sta);
|
||||
rtw89_mac_csi_rrsc_ax(rtwdev, vif, sta);
|
||||
rtw89_mac_set_csi_para_reg_ax(rtwdev, rtwvif_link, rtwsta_link);
|
||||
rtw89_mac_csi_rrsc_ax(rtwdev, rtwvif_link, rtwsta_link);
|
||||
}
|
||||
}
|
||||
|
||||
void rtw89_mac_bf_disassoc(struct rtw89_dev *rtwdev, struct ieee80211_vif *vif,
|
||||
struct ieee80211_sta *sta)
|
||||
void rtw89_mac_bf_disassoc(struct rtw89_dev *rtwdev,
|
||||
struct rtw89_vif_link *rtwvif_link,
|
||||
struct rtw89_sta_link *rtwsta_link)
|
||||
{
|
||||
struct rtw89_vif_link *rtwvif_link = (struct rtw89_vif_link *)vif->drv_priv;
|
||||
|
||||
rtw89_mac_bfee_ctrl(rtwdev, rtwvif_link->mac_idx, false);
|
||||
}
|
||||
|
||||
@@ -6146,7 +6139,7 @@ void rtw89_mac_bf_set_gid_table(struct rtw89_dev *rtwdev, struct ieee80211_vif *
|
||||
|
||||
struct rtw89_mac_bf_monitor_iter_data {
|
||||
struct rtw89_dev *rtwdev;
|
||||
struct ieee80211_sta *down_sta;
|
||||
struct rtw89_sta_link *down_rtwsta_link;
|
||||
int count;
|
||||
};
|
||||
|
||||
@@ -6156,11 +6149,11 @@ void rtw89_mac_bf_monitor_calc_iter(void *data, struct ieee80211_sta *sta)
|
||||
struct rtw89_sta_link *rtwsta_link = (struct rtw89_sta_link *)sta->drv_priv;
|
||||
struct rtw89_mac_bf_monitor_iter_data *iter_data =
|
||||
(struct rtw89_mac_bf_monitor_iter_data *)data;
|
||||
struct ieee80211_sta *down_sta = iter_data->down_sta;
|
||||
struct rtw89_sta_link *down_rtwsta_link = iter_data->down_rtwsta_link;
|
||||
struct ieee80211_link_sta *link_sta;
|
||||
int *count = &iter_data->count;
|
||||
|
||||
if (down_sta == sta)
|
||||
if (down_rtwsta_link == rtwsta_link)
|
||||
return;
|
||||
|
||||
rcu_read_lock();
|
||||
@@ -6173,12 +6166,13 @@ void rtw89_mac_bf_monitor_calc_iter(void *data, struct ieee80211_sta *sta)
|
||||
}
|
||||
|
||||
void rtw89_mac_bf_monitor_calc(struct rtw89_dev *rtwdev,
|
||||
struct ieee80211_sta *sta, bool disconnect)
|
||||
struct rtw89_sta_link *rtwsta_link,
|
||||
bool disconnect)
|
||||
{
|
||||
struct rtw89_mac_bf_monitor_iter_data data;
|
||||
|
||||
data.rtwdev = rtwdev;
|
||||
data.down_sta = disconnect ? sta : NULL;
|
||||
data.down_rtwsta_link = disconnect ? rtwsta_link : NULL;
|
||||
data.count = 0;
|
||||
ieee80211_iterate_stations_atomic(rtwdev->hw,
|
||||
rtw89_mac_bf_monitor_calc_iter,
|
||||
|
||||
@@ -951,8 +951,9 @@ struct rtw89_mac_gen_def {
|
||||
void (*dmac_func_pre_en)(struct rtw89_dev *rtwdev);
|
||||
void (*dle_func_en)(struct rtw89_dev *rtwdev, bool enable);
|
||||
void (*dle_clk_en)(struct rtw89_dev *rtwdev, bool enable);
|
||||
void (*bf_assoc)(struct rtw89_dev *rtwdev, struct ieee80211_vif *vif,
|
||||
struct ieee80211_sta *sta);
|
||||
void (*bf_assoc)(struct rtw89_dev *rtwdev,
|
||||
struct rtw89_vif_link *rtwvif_link,
|
||||
struct rtw89_sta_link *rtwsta_link);
|
||||
|
||||
int (*typ_fltr_opt)(struct rtw89_dev *rtwdev,
|
||||
enum rtw89_machdr_frame_type type,
|
||||
@@ -1259,21 +1260,24 @@ void rtw89_mac_power_mode_change(struct rtw89_dev *rtwdev, bool enter);
|
||||
void rtw89_mac_notify_wake(struct rtw89_dev *rtwdev);
|
||||
|
||||
static inline
|
||||
void rtw89_mac_bf_assoc(struct rtw89_dev *rtwdev, struct ieee80211_vif *vif,
|
||||
struct ieee80211_sta *sta)
|
||||
void rtw89_mac_bf_assoc(struct rtw89_dev *rtwdev,
|
||||
struct rtw89_vif_link *rtwvif_link,
|
||||
struct rtw89_sta_link *rtwsta_link)
|
||||
{
|
||||
const struct rtw89_mac_gen_def *mac = rtwdev->chip->mac_def;
|
||||
|
||||
if (mac->bf_assoc)
|
||||
mac->bf_assoc(rtwdev, vif, sta);
|
||||
mac->bf_assoc(rtwdev, rtwvif_link, rtwsta_link);
|
||||
}
|
||||
|
||||
void rtw89_mac_bf_disassoc(struct rtw89_dev *rtwdev, struct ieee80211_vif *vif,
|
||||
struct ieee80211_sta *sta);
|
||||
void rtw89_mac_bf_disassoc(struct rtw89_dev *rtwdev,
|
||||
struct rtw89_vif_link *rtwvif_link,
|
||||
struct rtw89_sta_link *rtwsta_link);
|
||||
void rtw89_mac_bf_set_gid_table(struct rtw89_dev *rtwdev, struct ieee80211_vif *vif,
|
||||
struct ieee80211_bss_conf *conf);
|
||||
void rtw89_mac_bf_monitor_calc(struct rtw89_dev *rtwdev,
|
||||
struct ieee80211_sta *sta, bool disconnect);
|
||||
struct rtw89_sta_link *rtwsta_link,
|
||||
bool disconnect);
|
||||
void _rtw89_mac_bf_monitor_track(struct rtw89_dev *rtwdev);
|
||||
void rtw89_mac_bfee_ctrl(struct rtw89_dev *rtwdev, u8 mac_idx, bool en);
|
||||
int rtw89_mac_vif_init(struct rtw89_dev *rtwdev, struct rtw89_vif_link *rtwvif_link);
|
||||
|
||||
@@ -456,10 +456,140 @@ static void rtw89_conf_tx(struct rtw89_dev *rtwdev,
|
||||
__rtw89_conf_tx(rtwdev, rtwvif_link, ac);
|
||||
}
|
||||
|
||||
static int __rtw89_ops_sta_add(struct rtw89_dev *rtwdev,
|
||||
struct ieee80211_vif *vif,
|
||||
struct ieee80211_sta *sta)
|
||||
{
|
||||
struct rtw89_vif_link *rtwvif_link = (struct rtw89_vif_link *)vif->drv_priv;
|
||||
struct rtw89_sta_link *rtwsta_link = (struct rtw89_sta_link *)sta->drv_priv;
|
||||
bool acquire_macid = false;
|
||||
u8 macid;
|
||||
int ret;
|
||||
int i;
|
||||
|
||||
if (vif->type == NL80211_IFTYPE_STATION && !sta->tdls) {
|
||||
/* for station mode, assign the mac_id from itself */
|
||||
macid = rtwvif_link->mac_id;
|
||||
} else {
|
||||
macid = rtw89_acquire_mac_id(rtwdev);
|
||||
if (macid == RTW89_MAX_MAC_ID_NUM)
|
||||
return -ENOSPC;
|
||||
|
||||
acquire_macid = true;
|
||||
}
|
||||
|
||||
rtwsta_link->rtwdev = rtwdev;
|
||||
rtwsta_link->rtwvif_link = rtwvif_link;
|
||||
rtwsta_link->mac_id = macid;
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(sta->txq); i++)
|
||||
rtw89_core_txq_init(rtwdev, sta->txq[i]);
|
||||
|
||||
skb_queue_head_init(&rtwsta_link->roc_queue);
|
||||
|
||||
ret = rtw89_core_sta_link_add(rtwdev, rtwvif_link, rtwsta_link);
|
||||
if (ret)
|
||||
goto err;
|
||||
|
||||
if (vif->type == NL80211_IFTYPE_AP || sta->tdls)
|
||||
rtw89_queue_chanctx_change(rtwdev, RTW89_CHANCTX_REMOTE_STA_CHANGE);
|
||||
|
||||
return 0;
|
||||
|
||||
err:
|
||||
if (acquire_macid)
|
||||
rtw89_release_mac_id(rtwdev, macid);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int __rtw89_ops_sta_assoc(struct rtw89_dev *rtwdev,
|
||||
struct ieee80211_vif *vif,
|
||||
struct ieee80211_sta *sta,
|
||||
bool station_mode)
|
||||
{
|
||||
struct rtw89_vif_link *rtwvif_link = (struct rtw89_vif_link *)vif->drv_priv;
|
||||
struct rtw89_sta_link *rtwsta_link = (struct rtw89_sta_link *)sta->drv_priv;
|
||||
int ret;
|
||||
|
||||
if (station_mode)
|
||||
rtw89_vif_type_mapping(rtwvif_link, true);
|
||||
|
||||
ret = rtw89_core_sta_link_assoc(rtwdev, rtwvif_link, rtwsta_link);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
rtwdev->total_sta_assoc++;
|
||||
if (sta->tdls)
|
||||
rtwvif_link->tdls_peer++;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int __rtw89_ops_sta_disassoc(struct rtw89_dev *rtwdev,
|
||||
struct ieee80211_vif *vif,
|
||||
struct ieee80211_sta *sta)
|
||||
{
|
||||
struct rtw89_vif_link *rtwvif_link = (struct rtw89_vif_link *)vif->drv_priv;
|
||||
struct rtw89_sta_link *rtwsta_link = (struct rtw89_sta_link *)sta->drv_priv;
|
||||
int ret;
|
||||
|
||||
ret = rtw89_core_sta_link_disassoc(rtwdev, rtwvif_link, rtwsta_link);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
rtwsta_link->disassoc = true;
|
||||
|
||||
rtwdev->total_sta_assoc--;
|
||||
if (sta->tdls)
|
||||
rtwvif_link->tdls_peer--;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int __rtw89_ops_sta_disconnect(struct rtw89_dev *rtwdev,
|
||||
struct ieee80211_vif *vif,
|
||||
struct ieee80211_sta *sta)
|
||||
{
|
||||
struct rtw89_vif_link *rtwvif_link = (struct rtw89_vif_link *)vif->drv_priv;
|
||||
struct rtw89_sta_link *rtwsta_link = (struct rtw89_sta_link *)sta->drv_priv;
|
||||
int ret;
|
||||
|
||||
rtw89_core_free_sta_pending_ba(rtwdev, sta);
|
||||
rtw89_core_free_sta_pending_forbid_ba(rtwdev, sta);
|
||||
rtw89_core_free_sta_pending_roc_tx(rtwdev, sta);
|
||||
|
||||
ret = rtw89_core_sta_link_disconnect(rtwdev, rtwvif_link, rtwsta_link);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int __rtw89_ops_sta_remove(struct rtw89_dev *rtwdev,
|
||||
struct ieee80211_vif *vif,
|
||||
struct ieee80211_sta *sta)
|
||||
{
|
||||
struct rtw89_vif_link *rtwvif_link = (struct rtw89_vif_link *)vif->drv_priv;
|
||||
struct rtw89_sta_link *rtwsta_link = (struct rtw89_sta_link *)sta->drv_priv;
|
||||
u8 macid = rtwsta_link->mac_id;
|
||||
int ret;
|
||||
|
||||
ret = rtw89_core_sta_link_remove(rtwdev, rtwvif_link, rtwsta_link);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
if (vif->type == NL80211_IFTYPE_AP || sta->tdls) {
|
||||
rtw89_release_mac_id(rtwdev, macid);
|
||||
rtw89_queue_chanctx_change(rtwdev, RTW89_CHANCTX_REMOTE_STA_CHANGE);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void rtw89_station_mode_sta_assoc(struct rtw89_dev *rtwdev,
|
||||
struct ieee80211_vif *vif)
|
||||
{
|
||||
struct rtw89_vif_link *rtwvif_link = (struct rtw89_vif_link *)vif->drv_priv;
|
||||
struct ieee80211_sta *sta;
|
||||
|
||||
if (vif->type != NL80211_IFTYPE_STATION)
|
||||
@@ -471,9 +601,7 @@ static void rtw89_station_mode_sta_assoc(struct rtw89_dev *rtwdev,
|
||||
return;
|
||||
}
|
||||
|
||||
rtw89_vif_type_mapping(rtwvif_link, true);
|
||||
|
||||
rtw89_core_sta_assoc(rtwdev, vif, sta);
|
||||
__rtw89_ops_sta_assoc(rtwdev, vif, sta, true);
|
||||
}
|
||||
|
||||
static void __rtw89_ops_bss_link_assoc(struct rtw89_dev *rtwdev,
|
||||
@@ -552,7 +680,7 @@ static void rtw89_ops_link_info_changed(struct ieee80211_hw *hw,
|
||||
rtw89_core_update_p2p_ps(rtwdev, rtwvif_link, conf);
|
||||
|
||||
if (changed & BSS_CHANGED_CQM)
|
||||
rtw89_fw_h2c_set_bcn_fltr_cfg(rtwdev, vif, true);
|
||||
rtw89_fw_h2c_set_bcn_fltr_cfg(rtwdev, rtwvif_link, true);
|
||||
|
||||
if (changed & BSS_CHANGED_TPE)
|
||||
rtw89_reg_6ghz_recalc(rtwdev, rtwvif_link, true);
|
||||
@@ -582,7 +710,7 @@ static int rtw89_ops_start_ap(struct ieee80211_hw *hw,
|
||||
ether_addr_copy(rtwvif_link->bssid, link_conf->bssid);
|
||||
rtw89_cam_bssid_changed(rtwdev, rtwvif_link);
|
||||
rtw89_mac_port_update(rtwdev, rtwvif_link);
|
||||
rtw89_chip_h2c_assoc_cmac_tbl(rtwdev, vif, NULL);
|
||||
rtw89_chip_h2c_assoc_cmac_tbl(rtwdev, rtwvif_link, NULL);
|
||||
rtw89_fw_h2c_role_maintain(rtwdev, rtwvif_link, NULL, RTW89_ROLE_TYPE_CHANGE);
|
||||
rtw89_fw_h2c_join_info(rtwdev, rtwvif_link, NULL, true);
|
||||
rtw89_fw_h2c_cam(rtwdev, rtwvif_link, NULL, NULL);
|
||||
@@ -603,7 +731,7 @@ void rtw89_ops_stop_ap(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
|
||||
|
||||
mutex_lock(&rtwdev->mutex);
|
||||
rtw89_mac_stop_ap(rtwdev, rtwvif_link);
|
||||
rtw89_chip_h2c_assoc_cmac_tbl(rtwdev, vif, NULL);
|
||||
rtw89_chip_h2c_assoc_cmac_tbl(rtwdev, rtwvif_link, NULL);
|
||||
rtw89_fw_h2c_join_info(rtwdev, rtwvif_link, NULL, true);
|
||||
mutex_unlock(&rtwdev->mutex);
|
||||
}
|
||||
@@ -647,26 +775,26 @@ static int __rtw89_ops_sta_state(struct ieee80211_hw *hw,
|
||||
|
||||
if (old_state == IEEE80211_STA_NOTEXIST &&
|
||||
new_state == IEEE80211_STA_NONE)
|
||||
return rtw89_core_sta_add(rtwdev, vif, sta);
|
||||
return __rtw89_ops_sta_add(rtwdev, vif, sta);
|
||||
|
||||
if (old_state == IEEE80211_STA_AUTH &&
|
||||
new_state == IEEE80211_STA_ASSOC) {
|
||||
if (vif->type == NL80211_IFTYPE_STATION && !sta->tdls)
|
||||
return 0; /* defer to bss_info_changed to have vif info */
|
||||
return rtw89_core_sta_assoc(rtwdev, vif, sta);
|
||||
return __rtw89_ops_sta_assoc(rtwdev, vif, sta, false);
|
||||
}
|
||||
|
||||
if (old_state == IEEE80211_STA_ASSOC &&
|
||||
new_state == IEEE80211_STA_AUTH)
|
||||
return rtw89_core_sta_disassoc(rtwdev, vif, sta);
|
||||
return __rtw89_ops_sta_disassoc(rtwdev, vif, sta);
|
||||
|
||||
if (old_state == IEEE80211_STA_AUTH &&
|
||||
new_state == IEEE80211_STA_NONE)
|
||||
return rtw89_core_sta_disconnect(rtwdev, vif, sta);
|
||||
return __rtw89_ops_sta_disconnect(rtwdev, vif, sta);
|
||||
|
||||
if (old_state == IEEE80211_STA_NONE &&
|
||||
new_state == IEEE80211_STA_NOTEXIST)
|
||||
return rtw89_core_sta_remove(rtwdev, vif, sta);
|
||||
return __rtw89_ops_sta_remove(rtwdev, vif, sta);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -2091,11 +2091,9 @@ static int rtw89_mac_init_bfee_be(struct rtw89_dev *rtwdev, u8 mac_idx)
|
||||
}
|
||||
|
||||
static int rtw89_mac_set_csi_para_reg_be(struct rtw89_dev *rtwdev,
|
||||
struct ieee80211_vif *vif,
|
||||
struct ieee80211_sta *sta)
|
||||
struct rtw89_vif_link *rtwvif_link,
|
||||
struct rtw89_sta_link *rtwsta_link)
|
||||
{
|
||||
struct rtw89_vif_link *rtwvif_link = (struct rtw89_vif_link *)vif->drv_priv;
|
||||
struct rtw89_sta_link *rtwsta_link = (struct rtw89_sta_link *)sta->drv_priv;
|
||||
u8 nc = 1, nr = 3, ng = 0, cb = 1, cs = 1, ldpc_en = 1, stbc_en = 1;
|
||||
struct ieee80211_link_sta *link_sta;
|
||||
u8 mac_idx = rtwvif_link->mac_idx;
|
||||
@@ -2162,11 +2160,9 @@ static int rtw89_mac_set_csi_para_reg_be(struct rtw89_dev *rtwdev,
|
||||
}
|
||||
|
||||
static int rtw89_mac_csi_rrsc_be(struct rtw89_dev *rtwdev,
|
||||
struct ieee80211_vif *vif,
|
||||
struct ieee80211_sta *sta)
|
||||
struct rtw89_vif_link *rtwvif_link,
|
||||
struct rtw89_sta_link *rtwsta_link)
|
||||
{
|
||||
struct rtw89_vif_link *rtwvif_link = (struct rtw89_vif_link *)vif->drv_priv;
|
||||
struct rtw89_sta_link *rtwsta_link = (struct rtw89_sta_link *)sta->drv_priv;
|
||||
u32 rrsc = BIT(RTW89_MAC_BF_RRSC_6M) | BIT(RTW89_MAC_BF_RRSC_24M);
|
||||
struct ieee80211_link_sta *link_sta;
|
||||
u8 mac_idx = rtwvif_link->mac_idx;
|
||||
@@ -2210,11 +2206,9 @@ static int rtw89_mac_csi_rrsc_be(struct rtw89_dev *rtwdev,
|
||||
}
|
||||
|
||||
static void rtw89_mac_bf_assoc_be(struct rtw89_dev *rtwdev,
|
||||
struct ieee80211_vif *vif,
|
||||
struct ieee80211_sta *sta)
|
||||
struct rtw89_vif_link *rtwvif_link,
|
||||
struct rtw89_sta_link *rtwsta_link)
|
||||
{
|
||||
struct rtw89_vif_link *rtwvif_link = (struct rtw89_vif_link *)vif->drv_priv;
|
||||
struct rtw89_sta_link *rtwsta_link = (struct rtw89_sta_link *)sta->drv_priv;
|
||||
struct ieee80211_link_sta *link_sta;
|
||||
bool has_beamformer_cap;
|
||||
|
||||
@@ -2229,8 +2223,8 @@ static void rtw89_mac_bf_assoc_be(struct rtw89_dev *rtwdev,
|
||||
rtw89_debug(rtwdev, RTW89_DBG_BF,
|
||||
"initialize bfee for new association\n");
|
||||
rtw89_mac_init_bfee_be(rtwdev, rtwvif_link->mac_idx);
|
||||
rtw89_mac_set_csi_para_reg_be(rtwdev, vif, sta);
|
||||
rtw89_mac_csi_rrsc_be(rtwdev, vif, sta);
|
||||
rtw89_mac_set_csi_para_reg_be(rtwdev, rtwvif_link, rtwsta_link);
|
||||
rtw89_mac_csi_rrsc_be(rtwdev, rtwvif_link, rtwsta_link);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -637,9 +637,8 @@ void rtw89_phy_ra_update(struct rtw89_dev *rtwdev)
|
||||
rtwdev);
|
||||
}
|
||||
|
||||
void rtw89_phy_ra_assoc(struct rtw89_dev *rtwdev, struct ieee80211_sta *sta)
|
||||
void rtw89_phy_ra_assoc(struct rtw89_dev *rtwdev, struct rtw89_sta_link *rtwsta_link)
|
||||
{
|
||||
struct rtw89_sta_link *rtwsta_link = (struct rtw89_sta_link *)sta->drv_priv;
|
||||
struct rtw89_vif_link *rtwvif_link = rtwsta_link->rtwvif_link;
|
||||
struct ieee80211_vif *vif = rtwvif_to_vif(rtwvif_link);
|
||||
struct rtw89_ra_info *ra = &rtwsta_link->ra;
|
||||
|
||||
@@ -892,7 +892,7 @@ void rtw89_phy_set_txpwr_limit_ru(struct rtw89_dev *rtwdev,
|
||||
phy->set_txpwr_limit_ru(rtwdev, chan, phy_idx);
|
||||
}
|
||||
|
||||
void rtw89_phy_ra_assoc(struct rtw89_dev *rtwdev, struct ieee80211_sta *sta);
|
||||
void rtw89_phy_ra_assoc(struct rtw89_dev *rtwdev, struct rtw89_sta_link *rtwsta_link);
|
||||
void rtw89_phy_ra_update(struct rtw89_dev *rtwdev);
|
||||
void rtw89_phy_ra_update_sta(struct rtw89_dev *rtwdev, struct ieee80211_sta *sta,
|
||||
u32 changed);
|
||||
|
||||
@@ -1240,7 +1240,7 @@ static int rtw89_wow_swap_fw(struct rtw89_dev *rtwdev, bool wow)
|
||||
return ret;
|
||||
}
|
||||
|
||||
ret = rtw89_chip_h2c_assoc_cmac_tbl(rtwdev, wow_vif, wow_sta);
|
||||
ret = rtw89_chip_h2c_assoc_cmac_tbl(rtwdev, rtwvif_link, rtwsta_link);
|
||||
if (ret) {
|
||||
rtw89_warn(rtwdev, "failed to send h2c assoc cmac tbl\n");
|
||||
return ret;
|
||||
@@ -1267,7 +1267,7 @@ static int rtw89_wow_swap_fw(struct rtw89_dev *rtwdev, bool wow)
|
||||
rtw89_warn(rtwdev, "failed to send h2c general packet\n");
|
||||
return ret;
|
||||
}
|
||||
rtw89_phy_ra_assoc(rtwdev, wow_sta);
|
||||
rtw89_phy_ra_assoc(rtwdev, rtwsta_link);
|
||||
rtw89_phy_set_bss_color(rtwdev, rtwvif_link);
|
||||
rtw89_chip_cfg_txpwr_ul_tb_offset(rtwdev, rtwvif_link);
|
||||
}
|
||||
@@ -1374,13 +1374,14 @@ static int rtw89_wow_disable_trx_post(struct rtw89_dev *rtwdev)
|
||||
{
|
||||
struct rtw89_wow_param *rtw_wow = &rtwdev->wow;
|
||||
struct ieee80211_vif *vif = rtw_wow->wow_vif;
|
||||
struct rtw89_vif_link *rtwvif_link = (struct rtw89_vif_link *)vif->drv_priv;
|
||||
int ret;
|
||||
|
||||
ret = rtw89_mac_cfg_ppdu_status(rtwdev, RTW89_MAC_0, true);
|
||||
if (ret)
|
||||
rtw89_err(rtwdev, "cfg ppdu status\n");
|
||||
|
||||
rtw89_fw_h2c_set_bcn_fltr_cfg(rtwdev, vif, true);
|
||||
rtw89_fw_h2c_set_bcn_fltr_cfg(rtwdev, rtwvif_link, true);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user