|
@@ -1516,7 +1516,8 @@ ath5k_beaconq_config(struct ath5k_softc *sc)
|
|
|
|
|
|
ret = ath5k_hw_get_tx_queueprops(ah, sc->bhalq, &qi);
|
|
ret = ath5k_hw_get_tx_queueprops(ah, sc->bhalq, &qi);
|
|
if (ret)
|
|
if (ret)
|
|
- return ret;
|
|
|
|
|
|
+ goto err;
|
|
|
|
+
|
|
if (sc->opmode == NL80211_IFTYPE_AP ||
|
|
if (sc->opmode == NL80211_IFTYPE_AP ||
|
|
sc->opmode == NL80211_IFTYPE_MESH_POINT) {
|
|
sc->opmode == NL80211_IFTYPE_MESH_POINT) {
|
|
/*
|
|
/*
|
|
@@ -1543,10 +1544,25 @@ ath5k_beaconq_config(struct ath5k_softc *sc)
|
|
if (ret) {
|
|
if (ret) {
|
|
ATH5K_ERR(sc, "%s: unable to update parameters for beacon "
|
|
ATH5K_ERR(sc, "%s: unable to update parameters for beacon "
|
|
"hardware queue!\n", __func__);
|
|
"hardware queue!\n", __func__);
|
|
- return ret;
|
|
|
|
|
|
+ goto err;
|
|
}
|
|
}
|
|
|
|
+ ret = ath5k_hw_reset_tx_queue(ah, sc->bhalq); /* push to h/w */
|
|
|
|
+ if (ret)
|
|
|
|
+ goto err;
|
|
|
|
|
|
- return ath5k_hw_reset_tx_queue(ah, sc->bhalq); /* push to h/w */;
|
|
|
|
|
|
+ /* reconfigure cabq with ready time to 80% of beacon_interval */
|
|
|
|
+ ret = ath5k_hw_get_tx_queueprops(ah, AR5K_TX_QUEUE_ID_CAB, &qi);
|
|
|
|
+ if (ret)
|
|
|
|
+ goto err;
|
|
|
|
+
|
|
|
|
+ qi.tqi_ready_time = (sc->bintval * 80) / 100;
|
|
|
|
+ ret = ath5k_hw_set_tx_queueprops(ah, AR5K_TX_QUEUE_ID_CAB, &qi);
|
|
|
|
+ if (ret)
|
|
|
|
+ goto err;
|
|
|
|
+
|
|
|
|
+ ret = ath5k_hw_reset_tx_queue(ah, AR5K_TX_QUEUE_ID_CAB);
|
|
|
|
+err:
|
|
|
|
+ return ret;
|
|
}
|
|
}
|
|
|
|
|
|
static void
|
|
static void
|