forked from Minki/linux
ath9k_htc: Configure the beacon queue
Set operating parameters (cwmin, cwmax) for the beacon queue in AP mode. Signed-off-by: Sujith Manoharan <Sujith.Manoharan@atheros.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
parent
9b674a0207
commit
2493a547ee
@ -18,6 +18,50 @@
|
||||
|
||||
#define FUDGE 2
|
||||
|
||||
void ath9k_htc_beaconq_config(struct ath9k_htc_priv *priv)
|
||||
{
|
||||
struct ath_hw *ah = priv->ah;
|
||||
struct ath9k_tx_queue_info qi, qi_be;
|
||||
|
||||
memset(&qi, 0, sizeof(struct ath9k_tx_queue_info));
|
||||
memset(&qi_be, 0, sizeof(struct ath9k_tx_queue_info));
|
||||
|
||||
ath9k_hw_get_txq_props(ah, priv->beaconq, &qi);
|
||||
|
||||
if (priv->ah->opmode == NL80211_IFTYPE_AP) {
|
||||
qi.tqi_aifs = 1;
|
||||
qi.tqi_cwmin = 0;
|
||||
qi.tqi_cwmax = 0;
|
||||
} else if (priv->ah->opmode == NL80211_IFTYPE_ADHOC) {
|
||||
int qnum = priv->hwq_map[WME_AC_BE];
|
||||
|
||||
ath9k_hw_get_txq_props(ah, qnum, &qi_be);
|
||||
|
||||
qi.tqi_aifs = qi_be.tqi_aifs;
|
||||
|
||||
/*
|
||||
* For WIFI Beacon Distribution
|
||||
* Long slot time : 2x cwmin
|
||||
* Short slot time : 4x cwmin
|
||||
*/
|
||||
if (ah->slottime == ATH9K_SLOT_TIME_20)
|
||||
qi.tqi_cwmin = 2*qi_be.tqi_cwmin;
|
||||
else
|
||||
qi.tqi_cwmin = 4*qi_be.tqi_cwmin;
|
||||
|
||||
qi.tqi_cwmax = qi_be.tqi_cwmax;
|
||||
|
||||
}
|
||||
|
||||
if (!ath9k_hw_set_txq_props(ah, priv->beaconq, &qi)) {
|
||||
ath_err(ath9k_hw_common(ah),
|
||||
"Unable to update beacon queue %u!\n", priv->beaconq);
|
||||
} else {
|
||||
ath9k_hw_resettxqueue(ah, priv->beaconq);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
static void ath9k_htc_beacon_config_sta(struct ath9k_htc_priv *priv,
|
||||
struct htc_beacon_config *bss_conf)
|
||||
{
|
||||
@ -176,6 +220,8 @@ static void ath9k_htc_beacon_config_ap(struct ath9k_htc_priv *priv,
|
||||
"imask: 0x%x\n",
|
||||
bss_conf->beacon_interval, nexttbtt, imask);
|
||||
|
||||
ath9k_htc_beaconq_config(priv);
|
||||
|
||||
WMI_CMD(WMI_DISABLE_INTR_CMDID);
|
||||
ath9k_hw_beaconinit(priv->ah, TU_TO_USEC(nexttbtt), TU_TO_USEC(intval));
|
||||
priv->cur_beacon_conf.bmiss_cnt = 0;
|
||||
@ -347,37 +393,6 @@ void ath9k_htc_swba(struct ath9k_htc_priv *priv)
|
||||
ath9k_htc_send_beacon(priv, slot);
|
||||
}
|
||||
|
||||
/* Currently, only for IBSS */
|
||||
void ath9k_htc_beaconq_config(struct ath9k_htc_priv *priv)
|
||||
{
|
||||
struct ath_hw *ah = priv->ah;
|
||||
struct ath9k_tx_queue_info qi, qi_be;
|
||||
int qnum = priv->hwq_map[WME_AC_BE];
|
||||
|
||||
memset(&qi, 0, sizeof(struct ath9k_tx_queue_info));
|
||||
memset(&qi_be, 0, sizeof(struct ath9k_tx_queue_info));
|
||||
|
||||
ath9k_hw_get_txq_props(ah, qnum, &qi_be);
|
||||
|
||||
qi.tqi_aifs = qi_be.tqi_aifs;
|
||||
/* For WIFI Beacon Distribution
|
||||
* Long slot time : 2x cwmin
|
||||
* Short slot time : 4x cwmin
|
||||
*/
|
||||
if (ah->slottime == ATH9K_SLOT_TIME_20)
|
||||
qi.tqi_cwmin = 2*qi_be.tqi_cwmin;
|
||||
else
|
||||
qi.tqi_cwmin = 4*qi_be.tqi_cwmin;
|
||||
qi.tqi_cwmax = qi_be.tqi_cwmax;
|
||||
|
||||
if (!ath9k_hw_set_txq_props(ah, priv->beaconq, &qi)) {
|
||||
ath_err(ath9k_hw_common(ah),
|
||||
"Unable to update beacon queue %u!\n", qnum);
|
||||
} else {
|
||||
ath9k_hw_resettxqueue(ah, priv->beaconq);
|
||||
}
|
||||
}
|
||||
|
||||
void ath9k_htc_assign_bslot(struct ath9k_htc_priv *priv,
|
||||
struct ieee80211_vif *vif)
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user