On Tue, Jul 22, 2014 at 09:52:04PM +0200, Lorenzo Bianconi wrote: > Hi John, > > > On Sun, Jul 20, 2014 at 02:31:25PM +0200, Lorenzo Bianconi wrote: > >> Add ath9k_enable_dynack() method to enable ack timeout estimation algorithm. > >> Moreover disable dynack if the coverage class has been configured > >> > >> Signed-off-by: Lorenzo Bianconi <lorenzo.bianconi83@xxxxxxxxx> > >> --- > >> drivers/net/wireless/ath/ath9k/main.c | 34 ++++++++++++++++++++++++++++++++++ > >> 1 file changed, 34 insertions(+) > >> > >> diff --git a/drivers/net/wireless/ath/ath9k/main.c b/drivers/net/wireless/ath/ath9k/main.c > >> index e6ac8d2..52ca884 100644 > >> --- a/drivers/net/wireless/ath/ath9k/main.c > >> +++ b/drivers/net/wireless/ath/ath9k/main.c > >> @@ -1970,6 +1970,14 @@ static void ath9k_set_coverage_class(struct ieee80211_hw *hw, u8 coverage_class) > >> mutex_lock(&sc->mutex); > >> ah->coverage_class = coverage_class; > >> > >> + if (ah->dynack.enabled) { > >> + u32 rfilt; > >> + > >> + ah->dynack.enabled = false; > >> + rfilt = ath_calcrxfilter(sc); > >> + ath9k_hw_setrxfilter(ah, rfilt); > >> + } > >> + > >> ath9k_ps_wakeup(sc); > >> ath9k_hw_init_global_settings(ah); > >> ath9k_ps_restore(sc); > >> @@ -1977,6 +1985,28 @@ static void ath9k_set_coverage_class(struct ieee80211_hw *hw, u8 coverage_class) > >> mutex_unlock(&sc->mutex); > >> } > >> > >> +#ifdef CONFIG_ATH9K_DYNACK > >> +static int ath9k_enable_dynack(struct ieee80211_hw *hw) > >> +{ > >> + u32 rfilt; > >> + struct ath_softc *sc = hw->priv; > >> + struct ath_hw *ah = sc->sc_ah; > >> + > >> + if (config_enabled(CONFIG_ATH9K_TX99)) > >> + return -EOPNOTSUPP; > >> + > >> + if (!ah->dynack.enabled) { > >> + ath_dynack_reset(ah); > >> + > >> + ah->dynack.enabled = true; > >> + rfilt = ath_calcrxfilter(sc); > >> + ath9k_hw_setrxfilter(ah, rfilt); > >> + } > >> + > >> + return 0; > >> +} > >> +#endif > >> + > >> static bool ath9k_has_tx_pending(struct ath_softc *sc) > >> { > >> int i, npend = 0; > >> @@ -2651,4 +2681,8 @@ struct ieee80211_ops ath9k_ops = { > >> #endif > >> .sw_scan_start = ath9k_sw_scan_start, > >> .sw_scan_complete = ath9k_sw_scan_complete, > >> + > >> +#ifdef CONFIG_ATH9K_DYNACK > >> + .enable_dynack = ath9k_enable_dynack, > >> +#endif > >> }; > > > > CC drivers/net/wireless/ath/ath9k/main.o > > drivers/net/wireless/ath/ath9k/main.c:2690:2: error: unknown field ‘enable_dynack’ specified in initializer > > .enable_dynack = ath9k_enable_dynack, > > ^ > > drivers/net/wireless/ath/ath9k/main.c:2690:2: warning: initialization from incompatible pointer type [enabled by default] > > drivers/net/wireless/ath/ath9k/main.c:2690:2: warning: (near initialization for ‘ath9k_ops.get_stats’) [enabled by default] > > make[3]: *** [drivers/net/wireless/ath/ath9k/main.o] Error 1 > > make[2]: *** [drivers/net/wireless/ath/ath9k] Error 2 > > make[1]: *** [drivers/net/wireless/ath] Error 2 > > make: *** [drivers/net/wireless/] Error 2 > > > > Missing a header file change? > > > > The function pointer is defined in "configure ack timeout estimation > algorithm through mac80211 stack" patchset sent on linux-wireless. > Anyway I will send patchset v3 to take Johannes's hint. Perhaps you should post them all together, or keep this series as RFC until the other one gets merged? -- John W. Linville Someday the world will need a hero, and you linville@xxxxxxxxxxxxx might be all we have. Be ready. -- To unsubscribe from this list: send the line "unsubscribe linux-wireless" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html