mirror of
https://github.com/followmsi/android_kernel_google_msm.git
synced 2024-11-06 23:17:41 +00:00
ath9k_htc: Add set_bitrate_mask() callback
This callback is used to set the minimum rate for management frames. Signed-off-by: Sujith Manoharan <Sujith.Manoharan@atheros.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
parent
a55bb94aa3
commit
e2186b7c25
1 changed files with 50 additions and 0 deletions
|
@ -1659,6 +1659,55 @@ static void ath9k_htc_set_coverage_class(struct ieee80211_hw *hw,
|
||||||
mutex_unlock(&priv->mutex);
|
mutex_unlock(&priv->mutex);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Currently, this is used only for selecting the minimum rate
|
||||||
|
* for management frames, rate selection for data frames remain
|
||||||
|
* unaffected.
|
||||||
|
*/
|
||||||
|
static int ath9k_htc_set_bitrate_mask(struct ieee80211_hw *hw,
|
||||||
|
struct ieee80211_vif *vif,
|
||||||
|
const struct cfg80211_bitrate_mask *mask)
|
||||||
|
{
|
||||||
|
struct ath9k_htc_priv *priv = hw->priv;
|
||||||
|
struct ath_common *common = ath9k_hw_common(priv->ah);
|
||||||
|
struct ath9k_htc_target_rate_mask tmask;
|
||||||
|
struct ath9k_htc_vif *avp = (void *)vif->drv_priv;
|
||||||
|
int ret = 0;
|
||||||
|
u8 cmd_rsp;
|
||||||
|
|
||||||
|
memset(&tmask, 0, sizeof(struct ath9k_htc_target_rate_mask));
|
||||||
|
|
||||||
|
tmask.vif_index = avp->index;
|
||||||
|
tmask.band = IEEE80211_BAND_2GHZ;
|
||||||
|
tmask.mask = cpu_to_be32(mask->control[IEEE80211_BAND_2GHZ].legacy);
|
||||||
|
|
||||||
|
WMI_CMD_BUF(WMI_BITRATE_MASK_CMDID, &tmask);
|
||||||
|
if (ret) {
|
||||||
|
ath_err(common,
|
||||||
|
"Unable to set 2G rate mask for "
|
||||||
|
"interface at idx: %d\n", avp->index);
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
|
tmask.band = IEEE80211_BAND_5GHZ;
|
||||||
|
tmask.mask = cpu_to_be32(mask->control[IEEE80211_BAND_5GHZ].legacy);
|
||||||
|
|
||||||
|
WMI_CMD_BUF(WMI_BITRATE_MASK_CMDID, &tmask);
|
||||||
|
if (ret) {
|
||||||
|
ath_err(common,
|
||||||
|
"Unable to set 5G rate mask for "
|
||||||
|
"interface at idx: %d\n", avp->index);
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
|
ath_dbg(common, ATH_DBG_CONFIG,
|
||||||
|
"Set bitrate masks: 0x%x, 0x%x\n",
|
||||||
|
mask->control[IEEE80211_BAND_2GHZ].legacy,
|
||||||
|
mask->control[IEEE80211_BAND_5GHZ].legacy);
|
||||||
|
out:
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
struct ieee80211_ops ath9k_htc_ops = {
|
struct ieee80211_ops ath9k_htc_ops = {
|
||||||
.tx = ath9k_htc_tx,
|
.tx = ath9k_htc_tx,
|
||||||
.start = ath9k_htc_start,
|
.start = ath9k_htc_start,
|
||||||
|
@ -1681,4 +1730,5 @@ struct ieee80211_ops ath9k_htc_ops = {
|
||||||
.set_rts_threshold = ath9k_htc_set_rts_threshold,
|
.set_rts_threshold = ath9k_htc_set_rts_threshold,
|
||||||
.rfkill_poll = ath9k_htc_rfkill_poll_state,
|
.rfkill_poll = ath9k_htc_rfkill_poll_state,
|
||||||
.set_coverage_class = ath9k_htc_set_coverage_class,
|
.set_coverage_class = ath9k_htc_set_coverage_class,
|
||||||
|
.set_bitrate_mask = ath9k_htc_set_bitrate_mask,
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in a new issue