mac80211: extend set_coverage_class signature
authorLorenzo Bianconi <lorenzo.bianconi83@gmail.com>
Thu, 4 Sep 2014 21:57:41 +0000 (23:57 +0200)
committerJohannes Berg <johannes.berg@intel.com>
Fri, 5 Sep 2014 11:54:07 +0000 (13:54 +0200)
Extend mac80211 set_coverage_class API in order to enable ACK timeout
estimation algorithm (dynack) passing coverage class equals to -1
to lower drivers. Synchronize set_coverage_class routine signature with
mac80211 function pointer for p54, ath9k, ath9k_htc and ath5k drivers.

Signed-off-by: Lorenzo Bianconi <lorenzo.bianconi83@gmail.com>
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
drivers/net/wireless/ath/ath5k/mac80211-ops.c
drivers/net/wireless/ath/ath9k/htc_drv_main.c
drivers/net/wireless/ath/ath9k/main.c
drivers/net/wireless/p54/main.c
include/net/mac80211.h
net/mac80211/cfg.c
net/mac80211/driver-ops.h
net/mac80211/trace.h

index b65c38fdaa4b23723ac8f59add51e46acc7d16f1..ab2709a437686ecec7d6a858756c340184ad10b6 100644 (file)
@@ -704,7 +704,7 @@ ath5k_get_survey(struct ieee80211_hw *hw, int idx, struct survey_info *survey)
  * reset.
  */
 static void
-ath5k_set_coverage_class(struct ieee80211_hw *hw, u8 coverage_class)
+ath5k_set_coverage_class(struct ieee80211_hw *hw, s16 coverage_class)
 {
        struct ath5k_hw *ah = hw->priv;
 
index 5627917c5ff761137061467e1b9d71f281ce0652..994fff1ff5198db245b3a3e2250105bfb6e6a8b9 100644 (file)
@@ -1722,7 +1722,7 @@ static int ath9k_htc_set_rts_threshold(struct ieee80211_hw *hw, u32 value)
 }
 
 static void ath9k_htc_set_coverage_class(struct ieee80211_hw *hw,
-                                        u8 coverage_class)
+                                        s16 coverage_class)
 {
        struct ath9k_htc_priv *priv = hw->priv;
 
index e6ac8d2e610ca421f60dbfa6eb68dd46f8061c9d..97c028e36647692339b2358248ec876327151c01 100644 (file)
@@ -1959,7 +1959,8 @@ static int ath9k_get_survey(struct ieee80211_hw *hw, int idx,
        return 0;
 }
 
-static void ath9k_set_coverage_class(struct ieee80211_hw *hw, u8 coverage_class)
+static void ath9k_set_coverage_class(struct ieee80211_hw *hw,
+                                    s16 coverage_class)
 {
        struct ath_softc *sc = hw->priv;
        struct ath_hw *ah = sc->sc_ah;
index 7be3a4839640c6eda6b8254fd7b81bbe5d01fd33..97aeff0edb84b52b5bbe5821caae9541e13ef554 100644 (file)
@@ -696,7 +696,8 @@ static void p54_flush(struct ieee80211_hw *dev, struct ieee80211_vif *vif,
        WARN(total, "tx flush timeout, unresponsive firmware");
 }
 
-static void p54_set_coverage_class(struct ieee80211_hw *dev, u8 coverage_class)
+static void p54_set_coverage_class(struct ieee80211_hw *dev,
+                                  s16 coverage_class)
 {
        struct p54_common *priv = dev->priv;
 
index db4975c33861286800e0f8abd5af8eb54fdcf573..c6e6a6804ee4fed7676e77f21aae93f6d8aefb24 100644 (file)
@@ -2673,7 +2673,9 @@ enum ieee80211_roc_type {
  *
  * @set_coverage_class: Set slot time for given coverage class as specified
  *     in IEEE 802.11-2007 section 17.3.8.6 and modify ACK timeout
- *     accordingly. This callback is not required and may sleep.
+ *     accordingly; coverage class equals to -1 to enable ACK timeout
+ *     estimation algorithm (dynack). To disable dynack set valid value for
+ *     coverage class. This callback is not required and may sleep.
  *
  * @testmode_cmd: Implement a cfg80211 test mode command. The passed @vif may
  *     be %NULL. The callback can sleep.
@@ -2957,7 +2959,7 @@ struct ieee80211_ops {
        int (*get_survey)(struct ieee80211_hw *hw, int idx,
                struct survey_info *survey);
        void (*rfkill_poll)(struct ieee80211_hw *hw);
-       void (*set_coverage_class)(struct ieee80211_hw *hw, u8 coverage_class);
+       void (*set_coverage_class)(struct ieee80211_hw *hw, s16 coverage_class);
 #ifdef CONFIG_NL80211_TESTMODE
        int (*testmode_cmd)(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
                            void *data, int len);
index 4c1681bae232edc439d11f471e757f0a9dc1b003..101ae6cfad81219dcb0b4925311bf15be3715657 100644 (file)
@@ -1978,8 +1978,13 @@ static int ieee80211_set_wiphy_params(struct wiphy *wiphy, u32 changed)
                        return err;
        }
 
-       if (changed & WIPHY_PARAM_COVERAGE_CLASS) {
-               err = drv_set_coverage_class(local, wiphy->coverage_class);
+       if ((changed & WIPHY_PARAM_COVERAGE_CLASS) ||
+           (changed & WIPHY_PARAM_DYN_ACK)) {
+               s16 coverage_class;
+
+               coverage_class = changed & WIPHY_PARAM_COVERAGE_CLASS ?
+                                       wiphy->coverage_class : -1;
+               err = drv_set_coverage_class(local, coverage_class);
 
                if (err)
                        return err;
index 11423958116a3fc9e37c91684de3aade8fdef763..196d48c68134a08b644fc97f8f1a1fc740ec7bdf 100644 (file)
@@ -450,7 +450,7 @@ static inline int drv_set_rts_threshold(struct ieee80211_local *local,
 }
 
 static inline int drv_set_coverage_class(struct ieee80211_local *local,
-                                        u8 value)
+                                        s16 value)
 {
        int ret = 0;
        might_sleep();
index 02ac535d1274217653e2f9a48c6f6e60ed6d0927..38fae7ebe984a621540328b6bdad28dcd632fccb 100644 (file)
@@ -672,13 +672,13 @@ DEFINE_EVENT(local_u32_evt, drv_set_rts_threshold,
 );
 
 TRACE_EVENT(drv_set_coverage_class,
-       TP_PROTO(struct ieee80211_local *local, u8 value),
+       TP_PROTO(struct ieee80211_local *local, s16 value),
 
        TP_ARGS(local, value),
 
        TP_STRUCT__entry(
                LOCAL_ENTRY
-               __field(u8, value)
+               __field(s16, value)
        ),
 
        TP_fast_assign(