mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
synced 2025-01-09 15:29:16 +00:00
mac80211: Add new callback set_coverage_class
Mac80211 callback to driver set_coverage_class() sets slot time and ACK timeout for given IEEE 802.11 coverage class. The callback is optional, but it's essential for long distance links. Signed-off-by: Lukas Turek <8an@praha12.net> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
parent
81077e82c3
commit
310bc676e3
@ -1533,6 +1533,10 @@ enum ieee80211_ampdu_mlme_action {
|
|||||||
* and need to call wiphy_rfkill_set_hw_state() in the callback.
|
* and need to call wiphy_rfkill_set_hw_state() in the callback.
|
||||||
* The callback can sleep.
|
* The callback can sleep.
|
||||||
*
|
*
|
||||||
|
* @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.
|
||||||
|
*
|
||||||
* @testmode_cmd: Implement a cfg80211 test mode command.
|
* @testmode_cmd: Implement a cfg80211 test mode command.
|
||||||
* The callback can sleep.
|
* The callback can sleep.
|
||||||
*
|
*
|
||||||
@ -1592,6 +1596,7 @@ struct ieee80211_ops {
|
|||||||
struct ieee80211_sta *sta, u16 tid, u16 *ssn);
|
struct ieee80211_sta *sta, u16 tid, u16 *ssn);
|
||||||
|
|
||||||
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);
|
||||||
#ifdef CONFIG_NL80211_TESTMODE
|
#ifdef CONFIG_NL80211_TESTMODE
|
||||||
int (*testmode_cmd)(struct ieee80211_hw *hw, void *data, int len);
|
int (*testmode_cmd)(struct ieee80211_hw *hw, void *data, int len);
|
||||||
#endif
|
#endif
|
||||||
|
@ -1230,6 +1230,13 @@ static int ieee80211_set_wiphy_params(struct wiphy *wiphy, u32 changed)
|
|||||||
struct ieee80211_local *local = wiphy_priv(wiphy);
|
struct ieee80211_local *local = wiphy_priv(wiphy);
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
|
if (changed & WIPHY_PARAM_COVERAGE_CLASS) {
|
||||||
|
err = drv_set_coverage_class(local, wiphy->coverage_class);
|
||||||
|
|
||||||
|
if (err)
|
||||||
|
return err;
|
||||||
|
}
|
||||||
|
|
||||||
if (changed & WIPHY_PARAM_RTS_THRESHOLD) {
|
if (changed & WIPHY_PARAM_RTS_THRESHOLD) {
|
||||||
err = drv_set_rts_threshold(local, wiphy->rts_threshold);
|
err = drv_set_rts_threshold(local, wiphy->rts_threshold);
|
||||||
|
|
||||||
|
@ -214,6 +214,21 @@ static inline int drv_set_rts_threshold(struct ieee80211_local *local,
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline int drv_set_coverage_class(struct ieee80211_local *local,
|
||||||
|
u8 value)
|
||||||
|
{
|
||||||
|
int ret = 0;
|
||||||
|
might_sleep();
|
||||||
|
|
||||||
|
if (local->ops->set_coverage_class)
|
||||||
|
local->ops->set_coverage_class(&local->hw, value);
|
||||||
|
else
|
||||||
|
ret = -EOPNOTSUPP;
|
||||||
|
|
||||||
|
trace_drv_set_coverage_class(local, value, ret);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
static inline void drv_sta_notify(struct ieee80211_local *local,
|
static inline void drv_sta_notify(struct ieee80211_local *local,
|
||||||
struct ieee80211_sub_if_data *sdata,
|
struct ieee80211_sub_if_data *sdata,
|
||||||
enum sta_notify_cmd cmd,
|
enum sta_notify_cmd cmd,
|
||||||
|
@ -491,6 +491,29 @@ TRACE_EVENT(drv_set_rts_threshold,
|
|||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
TRACE_EVENT(drv_set_coverage_class,
|
||||||
|
TP_PROTO(struct ieee80211_local *local, u8 value, int ret),
|
||||||
|
|
||||||
|
TP_ARGS(local, value, ret),
|
||||||
|
|
||||||
|
TP_STRUCT__entry(
|
||||||
|
LOCAL_ENTRY
|
||||||
|
__field(u8, value)
|
||||||
|
__field(int, ret)
|
||||||
|
),
|
||||||
|
|
||||||
|
TP_fast_assign(
|
||||||
|
LOCAL_ASSIGN;
|
||||||
|
__entry->ret = ret;
|
||||||
|
__entry->value = value;
|
||||||
|
),
|
||||||
|
|
||||||
|
TP_printk(
|
||||||
|
LOCAL_PR_FMT " value:%d ret:%d",
|
||||||
|
LOCAL_PR_ARG, __entry->value, __entry->ret
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
TRACE_EVENT(drv_sta_notify,
|
TRACE_EVENT(drv_sta_notify,
|
||||||
TP_PROTO(struct ieee80211_local *local,
|
TP_PROTO(struct ieee80211_local *local,
|
||||||
struct ieee80211_sub_if_data *sdata,
|
struct ieee80211_sub_if_data *sdata,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user