rtw89: add ieee80211::sta_rc_update ops
When peer's NSS, rate or bandwidth is changed, we update RA(rate adaptive) mask to ensure transmitting packets properly. Signed-off-by: Ping-Ke Shih <pkshih@realtek.com> Signed-off-by: Kalle Valo <kvalo@kernel.org> Link: https://lore.kernel.org/r/20220516005215.5878-2-pkshih@realtek.com
This commit is contained in:
parent
8762246c7b
commit
9d9a9edcf8
@ -630,7 +630,7 @@ static void rtw89_ra_mask_info_update_iter(void *data, struct ieee80211_sta *sta
|
|||||||
|
|
||||||
rtwsta->use_cfg_mask = true;
|
rtwsta->use_cfg_mask = true;
|
||||||
rtwsta->mask = *br_data->mask;
|
rtwsta->mask = *br_data->mask;
|
||||||
rtw89_phy_ra_updata_sta(br_data->rtwdev, sta);
|
rtw89_phy_ra_updata_sta(br_data->rtwdev, sta, IEEE80211_RC_SUPP_RATES_CHANGED);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void rtw89_ra_mask_info_update(struct rtw89_dev *rtwdev,
|
static void rtw89_ra_mask_info_update(struct rtw89_dev *rtwdev,
|
||||||
@ -759,6 +759,15 @@ static void rtw89_ops_cancel_hw_scan(struct ieee80211_hw *hw,
|
|||||||
mutex_unlock(&rtwdev->mutex);
|
mutex_unlock(&rtwdev->mutex);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void rtw89_ops_sta_rc_update(struct ieee80211_hw *hw,
|
||||||
|
struct ieee80211_vif *vif,
|
||||||
|
struct ieee80211_sta *sta, u32 changed)
|
||||||
|
{
|
||||||
|
struct rtw89_dev *rtwdev = hw->priv;
|
||||||
|
|
||||||
|
rtw89_phy_ra_updata_sta(rtwdev, sta, changed);
|
||||||
|
}
|
||||||
|
|
||||||
const struct ieee80211_ops rtw89_ops = {
|
const struct ieee80211_ops rtw89_ops = {
|
||||||
.tx = rtw89_ops_tx,
|
.tx = rtw89_ops_tx,
|
||||||
.wake_tx_queue = rtw89_ops_wake_tx_queue,
|
.wake_tx_queue = rtw89_ops_wake_tx_queue,
|
||||||
@ -788,5 +797,6 @@ const struct ieee80211_ops rtw89_ops = {
|
|||||||
.hw_scan = rtw89_ops_hw_scan,
|
.hw_scan = rtw89_ops_hw_scan,
|
||||||
.cancel_hw_scan = rtw89_ops_cancel_hw_scan,
|
.cancel_hw_scan = rtw89_ops_cancel_hw_scan,
|
||||||
.set_sar_specs = rtw89_ops_set_sar_specs,
|
.set_sar_specs = rtw89_ops_set_sar_specs,
|
||||||
|
.sta_rc_update = rtw89_ops_sta_rc_update,
|
||||||
};
|
};
|
||||||
EXPORT_SYMBOL(rtw89_ops);
|
EXPORT_SYMBOL(rtw89_ops);
|
||||||
|
@ -357,13 +357,19 @@ static void rtw89_phy_ra_sta_update(struct rtw89_dev *rtwdev,
|
|||||||
ra->csi_mode = csi_mode;
|
ra->csi_mode = csi_mode;
|
||||||
}
|
}
|
||||||
|
|
||||||
void rtw89_phy_ra_updata_sta(struct rtw89_dev *rtwdev, struct ieee80211_sta *sta)
|
void rtw89_phy_ra_updata_sta(struct rtw89_dev *rtwdev, struct ieee80211_sta *sta,
|
||||||
|
u32 changed)
|
||||||
{
|
{
|
||||||
struct rtw89_sta *rtwsta = (struct rtw89_sta *)sta->drv_priv;
|
struct rtw89_sta *rtwsta = (struct rtw89_sta *)sta->drv_priv;
|
||||||
struct rtw89_ra_info *ra = &rtwsta->ra;
|
struct rtw89_ra_info *ra = &rtwsta->ra;
|
||||||
|
|
||||||
rtw89_phy_ra_sta_update(rtwdev, sta, false);
|
rtw89_phy_ra_sta_update(rtwdev, sta, false);
|
||||||
ra->upd_mask = 1;
|
|
||||||
|
if (changed & IEEE80211_RC_SUPP_RATES_CHANGED)
|
||||||
|
ra->upd_mask = 1;
|
||||||
|
if (changed & (IEEE80211_RC_BW_CHANGED | IEEE80211_RC_NSS_CHANGED))
|
||||||
|
ra->upd_bw_nss_mask = 1;
|
||||||
|
|
||||||
rtw89_debug(rtwdev, RTW89_DBG_RA,
|
rtw89_debug(rtwdev, RTW89_DBG_RA,
|
||||||
"ra updat: macid = %d, bw = %d, nss = %d, gi = %d %d",
|
"ra updat: macid = %d, bw = %d, nss = %d, gi = %d %d",
|
||||||
ra->macid,
|
ra->macid,
|
||||||
@ -487,7 +493,7 @@ static void rtw89_phy_ra_updata_sta_iter(void *data, struct ieee80211_sta *sta)
|
|||||||
{
|
{
|
||||||
struct rtw89_dev *rtwdev = (struct rtw89_dev *)data;
|
struct rtw89_dev *rtwdev = (struct rtw89_dev *)data;
|
||||||
|
|
||||||
rtw89_phy_ra_updata_sta(rtwdev, sta);
|
rtw89_phy_ra_updata_sta(rtwdev, sta, IEEE80211_RC_SUPP_RATES_CHANGED);
|
||||||
}
|
}
|
||||||
|
|
||||||
void rtw89_phy_ra_update(struct rtw89_dev *rtwdev)
|
void rtw89_phy_ra_update(struct rtw89_dev *rtwdev)
|
||||||
|
@ -471,7 +471,8 @@ s8 rtw89_phy_read_txpwr_limit(struct rtw89_dev *rtwdev,
|
|||||||
u8 bw, u8 ntx, u8 rs, u8 bf, u8 ch);
|
u8 bw, u8 ntx, u8 rs, u8 bf, u8 ch);
|
||||||
void rtw89_phy_ra_assoc(struct rtw89_dev *rtwdev, struct ieee80211_sta *sta);
|
void rtw89_phy_ra_assoc(struct rtw89_dev *rtwdev, struct ieee80211_sta *sta);
|
||||||
void rtw89_phy_ra_update(struct rtw89_dev *rtwdev);
|
void rtw89_phy_ra_update(struct rtw89_dev *rtwdev);
|
||||||
void rtw89_phy_ra_updata_sta(struct rtw89_dev *rtwdev, struct ieee80211_sta *sta);
|
void rtw89_phy_ra_updata_sta(struct rtw89_dev *rtwdev, struct ieee80211_sta *sta,
|
||||||
|
u32 changed);
|
||||||
void rtw89_phy_rate_pattern_vif(struct rtw89_dev *rtwdev,
|
void rtw89_phy_rate_pattern_vif(struct rtw89_dev *rtwdev,
|
||||||
struct ieee80211_vif *vif,
|
struct ieee80211_vif *vif,
|
||||||
const struct cfg80211_bitrate_mask *mask);
|
const struct cfg80211_bitrate_mask *mask);
|
||||||
|
Loading…
Reference in New Issue
Block a user