wifi: rtl8xxxu: Introduce rtl8xxxu_update_ra_report
The ra_report struct is used for reporting the TX rate via sta_statistics. The code which fills it out is duplicated in two places, and the RTL8188EU will need it in a third place. Move this code into a new function rtl8xxxu_update_ra_report. Signed-off-by: Bitterblue Smith <rtl8821cerfe2@gmail.com> Reviewed-by: Ping-Ke Shih <pkshih@realtek.com> Signed-off-by: Kalle Valo <kvalo@kernel.org> Link: https://lore.kernel.org/r/0777ad35-fe03-473c-2e02-e3390bef5dd0@gmail.com
This commit is contained in:
parent
76c16af2cb
commit
7de16123d9
|
@ -4598,6 +4598,32 @@ static void rtl8xxxu_set_aifs(struct rtl8xxxu_priv *priv, u8 slot_time)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void rtl8xxxu_update_ra_report(struct rtl8xxxu_ra_report *rarpt,
|
||||||
|
u8 rate, u8 sgi, u8 bw)
|
||||||
|
{
|
||||||
|
u8 mcs, nss;
|
||||||
|
|
||||||
|
rarpt->txrate.flags = 0;
|
||||||
|
|
||||||
|
if (rate <= DESC_RATE_54M) {
|
||||||
|
rarpt->txrate.legacy = rtl8xxxu_legacy_ratetable[rate].bitrate;
|
||||||
|
} else {
|
||||||
|
rtl8xxxu_desc_to_mcsrate(rate, &mcs, &nss);
|
||||||
|
rarpt->txrate.flags |= RATE_INFO_FLAGS_MCS;
|
||||||
|
|
||||||
|
rarpt->txrate.mcs = mcs;
|
||||||
|
rarpt->txrate.nss = nss;
|
||||||
|
|
||||||
|
if (sgi)
|
||||||
|
rarpt->txrate.flags |= RATE_INFO_FLAGS_SHORT_GI;
|
||||||
|
|
||||||
|
rarpt->txrate.bw = bw;
|
||||||
|
}
|
||||||
|
|
||||||
|
rarpt->bit_rate = cfg80211_calculate_bitrate(&rarpt->txrate);
|
||||||
|
rarpt->desc_rate = rate;
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
rtl8xxxu_bss_info_changed(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
|
rtl8xxxu_bss_info_changed(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
|
||||||
struct ieee80211_bss_conf *bss_conf, u64 changed)
|
struct ieee80211_bss_conf *bss_conf, u64 changed)
|
||||||
|
@ -4620,9 +4646,7 @@ rtl8xxxu_bss_info_changed(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
|
||||||
u32 ramask;
|
u32 ramask;
|
||||||
int sgi = 0;
|
int sgi = 0;
|
||||||
u8 highest_rate;
|
u8 highest_rate;
|
||||||
u8 mcs = 0, nss = 0;
|
u8 bw;
|
||||||
u32 bit_rate;
|
|
||||||
|
|
||||||
|
|
||||||
rcu_read_lock();
|
rcu_read_lock();
|
||||||
sta = ieee80211_find_sta(vif, bss_conf->bssid);
|
sta = ieee80211_find_sta(vif, bss_conf->bssid);
|
||||||
|
@ -4647,37 +4671,19 @@ rtl8xxxu_bss_info_changed(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
|
||||||
sgi = 1;
|
sgi = 1;
|
||||||
|
|
||||||
highest_rate = fls(ramask) - 1;
|
highest_rate = fls(ramask) - 1;
|
||||||
if (highest_rate < DESC_RATE_MCS0) {
|
if (rtl8xxxu_ht40_2g &&
|
||||||
rarpt->txrate.legacy =
|
(sta->deflink.ht_cap.cap & IEEE80211_HT_CAP_SUP_WIDTH_20_40))
|
||||||
rtl8xxxu_legacy_ratetable[highest_rate].bitrate;
|
bw = RATE_INFO_BW_40;
|
||||||
} else {
|
else
|
||||||
rtl8xxxu_desc_to_mcsrate(highest_rate,
|
bw = RATE_INFO_BW_20;
|
||||||
&mcs, &nss);
|
|
||||||
rarpt->txrate.flags |= RATE_INFO_FLAGS_MCS;
|
|
||||||
|
|
||||||
rarpt->txrate.mcs = mcs;
|
|
||||||
rarpt->txrate.nss = nss;
|
|
||||||
|
|
||||||
if (sgi) {
|
|
||||||
rarpt->txrate.flags |=
|
|
||||||
RATE_INFO_FLAGS_SHORT_GI;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (rtl8xxxu_ht40_2g &&
|
|
||||||
(sta->deflink.ht_cap.cap & IEEE80211_HT_CAP_SUP_WIDTH_20_40))
|
|
||||||
rarpt->txrate.bw = RATE_INFO_BW_40;
|
|
||||||
else
|
|
||||||
rarpt->txrate.bw = RATE_INFO_BW_20;
|
|
||||||
}
|
|
||||||
rcu_read_unlock();
|
rcu_read_unlock();
|
||||||
bit_rate = cfg80211_calculate_bitrate(&rarpt->txrate);
|
|
||||||
rarpt->bit_rate = bit_rate;
|
rtl8xxxu_update_ra_report(rarpt, highest_rate, sgi, bw);
|
||||||
rarpt->desc_rate = highest_rate;
|
|
||||||
|
|
||||||
priv->vif = vif;
|
priv->vif = vif;
|
||||||
priv->rssi_level = RTL8XXXU_RATR_STA_INIT;
|
priv->rssi_level = RTL8XXXU_RATR_STA_INIT;
|
||||||
|
|
||||||
priv->fops->update_rate_mask(priv, ramask, 0, sgi, rarpt->txrate.bw == RATE_INFO_BW_40);
|
priv->fops->update_rate_mask(priv, ramask, 0, sgi, bw == RATE_INFO_BW_40);
|
||||||
|
|
||||||
rtl8xxxu_write8(priv, REG_BCN_MAX_ERR, 0xff);
|
rtl8xxxu_write8(priv, REG_BCN_MAX_ERR, 0xff);
|
||||||
|
|
||||||
|
@ -5538,9 +5544,7 @@ static void rtl8xxxu_c2hcmd_callback(struct work_struct *work)
|
||||||
u8 bt_info = 0;
|
u8 bt_info = 0;
|
||||||
struct rtl8xxxu_btcoex *btcoex;
|
struct rtl8xxxu_btcoex *btcoex;
|
||||||
struct rtl8xxxu_ra_report *rarpt;
|
struct rtl8xxxu_ra_report *rarpt;
|
||||||
u8 rate, sgi, bw;
|
u8 bw;
|
||||||
u32 bit_rate;
|
|
||||||
u8 mcs = 0, nss = 0;
|
|
||||||
|
|
||||||
priv = container_of(work, struct rtl8xxxu_priv, c2hcmd_work);
|
priv = container_of(work, struct rtl8xxxu_priv, c2hcmd_work);
|
||||||
btcoex = &priv->bt_coex;
|
btcoex = &priv->bt_coex;
|
||||||
|
@ -5566,36 +5570,17 @@ static void rtl8xxxu_c2hcmd_callback(struct work_struct *work)
|
||||||
rtl8723bu_handle_bt_info(priv);
|
rtl8723bu_handle_bt_info(priv);
|
||||||
break;
|
break;
|
||||||
case C2H_8723B_RA_REPORT:
|
case C2H_8723B_RA_REPORT:
|
||||||
rarpt->txrate.flags = 0;
|
bw = rarpt->txrate.bw;
|
||||||
rate = c2h->ra_report.rate;
|
|
||||||
sgi = c2h->ra_report.sgi;
|
|
||||||
|
|
||||||
if (rate < DESC_RATE_MCS0) {
|
if (skb->len >= offsetofend(typeof(*c2h), ra_report.bw)) {
|
||||||
rarpt->txrate.legacy =
|
if (c2h->ra_report.bw == RTL8XXXU_CHANNEL_WIDTH_40)
|
||||||
rtl8xxxu_legacy_ratetable[rate].bitrate;
|
bw = RATE_INFO_BW_40;
|
||||||
} else {
|
else
|
||||||
rtl8xxxu_desc_to_mcsrate(rate, &mcs, &nss);
|
bw = RATE_INFO_BW_20;
|
||||||
rarpt->txrate.flags |= RATE_INFO_FLAGS_MCS;
|
|
||||||
|
|
||||||
rarpt->txrate.mcs = mcs;
|
|
||||||
rarpt->txrate.nss = nss;
|
|
||||||
|
|
||||||
if (sgi) {
|
|
||||||
rarpt->txrate.flags |=
|
|
||||||
RATE_INFO_FLAGS_SHORT_GI;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (skb->len >= offsetofend(typeof(*c2h), ra_report.bw)) {
|
|
||||||
if (c2h->ra_report.bw == RTL8XXXU_CHANNEL_WIDTH_40)
|
|
||||||
bw = RATE_INFO_BW_40;
|
|
||||||
else
|
|
||||||
bw = RATE_INFO_BW_20;
|
|
||||||
rarpt->txrate.bw = bw;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
bit_rate = cfg80211_calculate_bitrate(&rarpt->txrate);
|
|
||||||
rarpt->bit_rate = bit_rate;
|
rtl8xxxu_update_ra_report(rarpt, c2h->ra_report.rate,
|
||||||
rarpt->desc_rate = rate;
|
c2h->ra_report.sgi, bw);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
|
|
Loading…
Reference in New Issue