Commit a4bcaf55 authored by Lorenzo Bianconi's avatar Lorenzo Bianconi Committed by Johannes Berg

mac80211: extend set_coverage_class signature

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: default avatarLorenzo Bianconi <lorenzo.bianconi83@gmail.com>
Signed-off-by: default avatarJohannes Berg <johannes.berg@intel.com>
parent 3057dbfd
...@@ -704,7 +704,7 @@ ath5k_get_survey(struct ieee80211_hw *hw, int idx, struct survey_info *survey) ...@@ -704,7 +704,7 @@ ath5k_get_survey(struct ieee80211_hw *hw, int idx, struct survey_info *survey)
* reset. * reset.
*/ */
static void 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; struct ath5k_hw *ah = hw->priv;
......
...@@ -1722,7 +1722,7 @@ static int ath9k_htc_set_rts_threshold(struct ieee80211_hw *hw, u32 value) ...@@ -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, static void ath9k_htc_set_coverage_class(struct ieee80211_hw *hw,
u8 coverage_class) s16 coverage_class)
{ {
struct ath9k_htc_priv *priv = hw->priv; struct ath9k_htc_priv *priv = hw->priv;
......
...@@ -1959,7 +1959,8 @@ static int ath9k_get_survey(struct ieee80211_hw *hw, int idx, ...@@ -1959,7 +1959,8 @@ static int ath9k_get_survey(struct ieee80211_hw *hw, int idx,
return 0; 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_softc *sc = hw->priv;
struct ath_hw *ah = sc->sc_ah; struct ath_hw *ah = sc->sc_ah;
......
...@@ -696,7 +696,8 @@ static void p54_flush(struct ieee80211_hw *dev, struct ieee80211_vif *vif, ...@@ -696,7 +696,8 @@ static void p54_flush(struct ieee80211_hw *dev, struct ieee80211_vif *vif,
WARN(total, "tx flush timeout, unresponsive firmware"); 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; struct p54_common *priv = dev->priv;
......
...@@ -2673,7 +2673,9 @@ enum ieee80211_roc_type { ...@@ -2673,7 +2673,9 @@ enum ieee80211_roc_type {
* *
* @set_coverage_class: Set slot time for given coverage class as specified * @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 * 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 * @testmode_cmd: Implement a cfg80211 test mode command. The passed @vif may
* be %NULL. The callback can sleep. * be %NULL. The callback can sleep.
...@@ -2957,7 +2959,7 @@ struct ieee80211_ops { ...@@ -2957,7 +2959,7 @@ struct ieee80211_ops {
int (*get_survey)(struct ieee80211_hw *hw, int idx, int (*get_survey)(struct ieee80211_hw *hw, int idx,
struct survey_info *survey); struct survey_info *survey);
void (*rfkill_poll)(struct ieee80211_hw *hw); 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 #ifdef CONFIG_NL80211_TESTMODE
int (*testmode_cmd)(struct ieee80211_hw *hw, struct ieee80211_vif *vif, int (*testmode_cmd)(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
void *data, int len); void *data, int len);
......
...@@ -1978,8 +1978,13 @@ static int ieee80211_set_wiphy_params(struct wiphy *wiphy, u32 changed) ...@@ -1978,8 +1978,13 @@ static int ieee80211_set_wiphy_params(struct wiphy *wiphy, u32 changed)
return err; return err;
} }
if (changed & WIPHY_PARAM_COVERAGE_CLASS) { if ((changed & WIPHY_PARAM_COVERAGE_CLASS) ||
err = drv_set_coverage_class(local, wiphy->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) if (err)
return err; return err;
......
...@@ -450,7 +450,7 @@ static inline int drv_set_rts_threshold(struct ieee80211_local *local, ...@@ -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, static inline int drv_set_coverage_class(struct ieee80211_local *local,
u8 value) s16 value)
{ {
int ret = 0; int ret = 0;
might_sleep(); might_sleep();
......
...@@ -672,13 +672,13 @@ DEFINE_EVENT(local_u32_evt, drv_set_rts_threshold, ...@@ -672,13 +672,13 @@ DEFINE_EVENT(local_u32_evt, drv_set_rts_threshold,
); );
TRACE_EVENT(drv_set_coverage_class, 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_ARGS(local, value),
TP_STRUCT__entry( TP_STRUCT__entry(
LOCAL_ENTRY LOCAL_ENTRY
__field(u8, value) __field(s16, value)
), ),
TP_fast_assign( TP_fast_assign(
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment