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
|
#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,
|
static void ath9k_htc_beacon_config_sta(struct ath9k_htc_priv *priv,
|
||||||
struct htc_beacon_config *bss_conf)
|
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",
|
"imask: 0x%x\n",
|
||||||
bss_conf->beacon_interval, nexttbtt, imask);
|
bss_conf->beacon_interval, nexttbtt, imask);
|
||||||
|
|
||||||
|
ath9k_htc_beaconq_config(priv);
|
||||||
|
|
||||||
WMI_CMD(WMI_DISABLE_INTR_CMDID);
|
WMI_CMD(WMI_DISABLE_INTR_CMDID);
|
||||||
ath9k_hw_beaconinit(priv->ah, TU_TO_USEC(nexttbtt), TU_TO_USEC(intval));
|
ath9k_hw_beaconinit(priv->ah, TU_TO_USEC(nexttbtt), TU_TO_USEC(intval));
|
||||||
priv->cur_beacon_conf.bmiss_cnt = 0;
|
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);
|
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,
|
void ath9k_htc_assign_bslot(struct ath9k_htc_priv *priv,
|
||||||
struct ieee80211_vif *vif)
|
struct ieee80211_vif *vif)
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user