Thread (16 messages) 16 messages, 3 authors, 2014-07-22

Re: [PATCH 09/10] ath9k: add ath9k_enable_dynack() method

From: Lorenzo Bianconi <hidden>
Date: 2014-07-22 22:17:15

On Tue, Jul 22, 2014 at 09:52:04PM +0200, Lorenzo Bianconi wrote:
quoted
Hi John,
quoted
On Sun, Jul 20, 2014 at 02:31:25PM +0200, Lorenzo Bianconi wrote:
quoted
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 <redacted>
---
 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?
Ack. First of all I will include Johannes's hints in "configure ack
timeout estimation algorithm through mac80211 stack" in such a way the
function pointer is merged and then I will send a new patchset for
dynack.

Best regards,
Lorenzo
--
John W. Linville                Someday the world will need a hero, and you
linville@tuxdriver.com                  might be all we have.  Be ready.


-- 
UNIX is Sexy: who | grep -i blonde | talk; cd ~; wine; talk; touch;
unzip; touch; strip; gasp; finger; gasp; mount; fsck; more; yes; gasp;
umount; make clean; sleep
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help