mac80211: re-organize the rx rate calculation logic
Currently the logic to fill a struct rate_info with a STA's last RX rate is accessible only in the cfg.c. As the RX rate calculation might be needed elsewhere, split this out into a separate function. Signed-off-by: Saravana <saravanad@posedge.com> [fix various whitespace issues, reword commit log] Signed-off-by: Johannes Berg <johannes.berg@intel.com>
This commit is contained in:
parent
91b8c050b2
commit
003e676af5
|
@ -398,6 +398,38 @@ void sta_set_rate_info_tx(struct sta_info *sta,
|
||||||
rinfo->flags |= RATE_INFO_FLAGS_SHORT_GI;
|
rinfo->flags |= RATE_INFO_FLAGS_SHORT_GI;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void sta_set_rate_info_rx(struct sta_info *sta, struct rate_info *rinfo)
|
||||||
|
{
|
||||||
|
rinfo->flags = 0;
|
||||||
|
|
||||||
|
if (sta->last_rx_rate_flag & RX_FLAG_HT) {
|
||||||
|
rinfo->flags |= RATE_INFO_FLAGS_MCS;
|
||||||
|
rinfo->mcs = sta->last_rx_rate_idx;
|
||||||
|
} else if (sta->last_rx_rate_flag & RX_FLAG_VHT) {
|
||||||
|
rinfo->flags |= RATE_INFO_FLAGS_VHT_MCS;
|
||||||
|
rinfo->nss = sta->last_rx_rate_vht_nss;
|
||||||
|
rinfo->mcs = sta->last_rx_rate_idx;
|
||||||
|
} else {
|
||||||
|
struct ieee80211_supported_band *sband;
|
||||||
|
|
||||||
|
sband = sta->local->hw.wiphy->bands[
|
||||||
|
ieee80211_get_sdata_band(sta->sdata)];
|
||||||
|
rinfo->legacy =
|
||||||
|
sband->bitrates[sta->last_rx_rate_idx].bitrate;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (sta->last_rx_rate_flag & RX_FLAG_40MHZ)
|
||||||
|
rinfo->flags |= RATE_INFO_FLAGS_40_MHZ_WIDTH;
|
||||||
|
if (sta->last_rx_rate_flag & RX_FLAG_SHORT_GI)
|
||||||
|
rinfo->flags |= RATE_INFO_FLAGS_SHORT_GI;
|
||||||
|
if (sta->last_rx_rate_flag & RX_FLAG_80MHZ)
|
||||||
|
rinfo->flags |= RATE_INFO_FLAGS_80_MHZ_WIDTH;
|
||||||
|
if (sta->last_rx_rate_flag & RX_FLAG_80P80MHZ)
|
||||||
|
rinfo->flags |= RATE_INFO_FLAGS_80P80_MHZ_WIDTH;
|
||||||
|
if (sta->last_rx_rate_flag & RX_FLAG_160MHZ)
|
||||||
|
rinfo->flags |= RATE_INFO_FLAGS_160_MHZ_WIDTH;
|
||||||
|
}
|
||||||
|
|
||||||
static void sta_set_sinfo(struct sta_info *sta, struct station_info *sinfo)
|
static void sta_set_sinfo(struct sta_info *sta, struct station_info *sinfo)
|
||||||
{
|
{
|
||||||
struct ieee80211_sub_if_data *sdata = sta->sdata;
|
struct ieee80211_sub_if_data *sdata = sta->sdata;
|
||||||
|
@ -444,34 +476,7 @@ static void sta_set_sinfo(struct sta_info *sta, struct station_info *sinfo)
|
||||||
}
|
}
|
||||||
|
|
||||||
sta_set_rate_info_tx(sta, &sta->last_tx_rate, &sinfo->txrate);
|
sta_set_rate_info_tx(sta, &sta->last_tx_rate, &sinfo->txrate);
|
||||||
|
sta_set_rate_info_rx(sta, &sinfo->rxrate);
|
||||||
sinfo->rxrate.flags = 0;
|
|
||||||
if (sta->last_rx_rate_flag & RX_FLAG_HT) {
|
|
||||||
sinfo->rxrate.flags |= RATE_INFO_FLAGS_MCS;
|
|
||||||
sinfo->rxrate.mcs = sta->last_rx_rate_idx;
|
|
||||||
} else if (sta->last_rx_rate_flag & RX_FLAG_VHT) {
|
|
||||||
sinfo->rxrate.flags |= RATE_INFO_FLAGS_VHT_MCS;
|
|
||||||
sinfo->rxrate.nss = sta->last_rx_rate_vht_nss;
|
|
||||||
sinfo->rxrate.mcs = sta->last_rx_rate_idx;
|
|
||||||
} else {
|
|
||||||
struct ieee80211_supported_band *sband;
|
|
||||||
|
|
||||||
sband = sta->local->hw.wiphy->bands[
|
|
||||||
ieee80211_get_sdata_band(sta->sdata)];
|
|
||||||
sinfo->rxrate.legacy =
|
|
||||||
sband->bitrates[sta->last_rx_rate_idx].bitrate;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (sta->last_rx_rate_flag & RX_FLAG_40MHZ)
|
|
||||||
sinfo->rxrate.flags |= RATE_INFO_FLAGS_40_MHZ_WIDTH;
|
|
||||||
if (sta->last_rx_rate_flag & RX_FLAG_SHORT_GI)
|
|
||||||
sinfo->rxrate.flags |= RATE_INFO_FLAGS_SHORT_GI;
|
|
||||||
if (sta->last_rx_rate_flag & RX_FLAG_80MHZ)
|
|
||||||
sinfo->rxrate.flags |= RATE_INFO_FLAGS_80_MHZ_WIDTH;
|
|
||||||
if (sta->last_rx_rate_flag & RX_FLAG_80P80MHZ)
|
|
||||||
sinfo->rxrate.flags |= RATE_INFO_FLAGS_80P80_MHZ_WIDTH;
|
|
||||||
if (sta->last_rx_rate_flag & RX_FLAG_160MHZ)
|
|
||||||
sinfo->rxrate.flags |= RATE_INFO_FLAGS_160_MHZ_WIDTH;
|
|
||||||
|
|
||||||
if (ieee80211_vif_is_mesh(&sdata->vif)) {
|
if (ieee80211_vif_is_mesh(&sdata->vif)) {
|
||||||
#ifdef CONFIG_MAC80211_MESH
|
#ifdef CONFIG_MAC80211_MESH
|
||||||
|
|
|
@ -554,6 +554,8 @@ int sta_info_flush(struct ieee80211_local *local,
|
||||||
void sta_set_rate_info_tx(struct sta_info *sta,
|
void sta_set_rate_info_tx(struct sta_info *sta,
|
||||||
const struct ieee80211_tx_rate *rate,
|
const struct ieee80211_tx_rate *rate,
|
||||||
struct rate_info *rinfo);
|
struct rate_info *rinfo);
|
||||||
|
void sta_set_rate_info_rx(struct sta_info *sta,
|
||||||
|
struct rate_info *rinfo);
|
||||||
void ieee80211_sta_expire(struct ieee80211_sub_if_data *sdata,
|
void ieee80211_sta_expire(struct ieee80211_sub_if_data *sdata,
|
||||||
unsigned long exp_time);
|
unsigned long exp_time);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user