Commit 5db4c4b9 authored by Emmanuel Grumbach's avatar Emmanuel Grumbach Committed by Johannes Berg

mac80211: pass the vif to cancel_remain_on_channel

This low level driver can find it useful to get the vif
when a remain on channel session is cancelled.

iwlwifi will need this soon.
Signed-off-by: default avatarEmmanuel Grumbach <emmanuel.grumbach@intel.com>
Link: https://lore.kernel.org/r/20190723180001.5828-1-emmanuel.grumbach@intel.comSigned-off-by: default avatarJohannes Berg <johannes.berg@intel.com>
parent 690c4509
...@@ -6970,7 +6970,8 @@ static int ath10k_remain_on_channel(struct ieee80211_hw *hw, ...@@ -6970,7 +6970,8 @@ static int ath10k_remain_on_channel(struct ieee80211_hw *hw,
return ret; return ret;
} }
static int ath10k_cancel_remain_on_channel(struct ieee80211_hw *hw) static int ath10k_cancel_remain_on_channel(struct ieee80211_hw *hw,
struct ieee80211_vif *vif)
{ {
struct ath10k *ar = hw->priv; struct ath10k *ar = hw->priv;
......
...@@ -2392,7 +2392,8 @@ static int ath9k_remain_on_channel(struct ieee80211_hw *hw, ...@@ -2392,7 +2392,8 @@ static int ath9k_remain_on_channel(struct ieee80211_hw *hw,
return ret; return ret;
} }
static int ath9k_cancel_remain_on_channel(struct ieee80211_hw *hw) static int ath9k_cancel_remain_on_channel(struct ieee80211_hw *hw,
struct ieee80211_vif *vif)
{ {
struct ath_softc *sc = hw->priv; struct ath_softc *sc = hw->priv;
struct ath_common *common = ath9k_hw_common(sc->sc_ah); struct ath_common *common = ath9k_hw_common(sc->sc_ah);
......
...@@ -4010,7 +4010,8 @@ static int iwl_mvm_roc(struct ieee80211_hw *hw, ...@@ -4010,7 +4010,8 @@ static int iwl_mvm_roc(struct ieee80211_hw *hw,
return ret; return ret;
} }
static int iwl_mvm_cancel_roc(struct ieee80211_hw *hw) static int iwl_mvm_cancel_roc(struct ieee80211_hw *hw,
struct ieee80211_vif *vif)
{ {
struct iwl_mvm *mvm = IWL_MAC80211_GET_MVM(hw); struct iwl_mvm *mvm = IWL_MAC80211_GET_MVM(hw);
......
...@@ -2216,7 +2216,8 @@ static int mac80211_hwsim_roc(struct ieee80211_hw *hw, ...@@ -2216,7 +2216,8 @@ static int mac80211_hwsim_roc(struct ieee80211_hw *hw,
return 0; return 0;
} }
static int mac80211_hwsim_croc(struct ieee80211_hw *hw) static int mac80211_hwsim_croc(struct ieee80211_hw *hw,
struct ieee80211_vif *vif)
{ {
struct mac80211_hwsim_data *hwsim = hw->priv; struct mac80211_hwsim_data *hwsim = hw->priv;
......
...@@ -1818,7 +1818,8 @@ static int rsi_mac80211_roc(struct ieee80211_hw *hw, struct ieee80211_vif *vif, ...@@ -1818,7 +1818,8 @@ static int rsi_mac80211_roc(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
return status; return status;
} }
static int rsi_mac80211_cancel_roc(struct ieee80211_hw *hw) static int rsi_mac80211_cancel_roc(struct ieee80211_hw *hw,
struct ieee80211_vif *vif)
{ {
struct rsi_hw *adapter = hw->priv; struct rsi_hw *adapter = hw->priv;
struct rsi_common *common = adapter->priv; struct rsi_common *common = adapter->priv;
......
...@@ -5749,7 +5749,8 @@ static void wlcore_roc_complete_work(struct work_struct *work) ...@@ -5749,7 +5749,8 @@ static void wlcore_roc_complete_work(struct work_struct *work)
ieee80211_remain_on_channel_expired(wl->hw); ieee80211_remain_on_channel_expired(wl->hw);
} }
static int wlcore_op_cancel_remain_on_channel(struct ieee80211_hw *hw) static int wlcore_op_cancel_remain_on_channel(struct ieee80211_hw *hw,
struct ieee80211_vif *vif)
{ {
struct wl1271 *wl = hw->priv; struct wl1271 *wl = hw->priv;
......
...@@ -3914,7 +3914,8 @@ struct ieee80211_ops { ...@@ -3914,7 +3914,8 @@ struct ieee80211_ops {
struct ieee80211_channel *chan, struct ieee80211_channel *chan,
int duration, int duration,
enum ieee80211_roc_type type); enum ieee80211_roc_type type);
int (*cancel_remain_on_channel)(struct ieee80211_hw *hw); int (*cancel_remain_on_channel)(struct ieee80211_hw *hw,
struct ieee80211_vif *vif);
int (*set_ringparam)(struct ieee80211_hw *hw, u32 tx, u32 rx); int (*set_ringparam)(struct ieee80211_hw *hw, u32 tx, u32 rx);
void (*get_ringparam)(struct ieee80211_hw *hw, void (*get_ringparam)(struct ieee80211_hw *hw,
u32 *tx, u32 *tx_max, u32 *rx, u32 *rx_max); u32 *tx, u32 *tx_max, u32 *rx, u32 *rx_max);
......
...@@ -692,14 +692,16 @@ static inline int drv_remain_on_channel(struct ieee80211_local *local, ...@@ -692,14 +692,16 @@ static inline int drv_remain_on_channel(struct ieee80211_local *local,
return ret; return ret;
} }
static inline int drv_cancel_remain_on_channel(struct ieee80211_local *local) static inline int
drv_cancel_remain_on_channel(struct ieee80211_local *local,
struct ieee80211_sub_if_data *sdata)
{ {
int ret; int ret;
might_sleep(); might_sleep();
trace_drv_cancel_remain_on_channel(local); trace_drv_cancel_remain_on_channel(local, sdata);
ret = local->ops->cancel_remain_on_channel(&local->hw); ret = local->ops->cancel_remain_on_channel(&local->hw, &sdata->vif);
trace_drv_return_int(local, ret); trace_drv_return_int(local, ret);
return ret; return ret;
......
...@@ -8,6 +8,7 @@ ...@@ -8,6 +8,7 @@
* Copyright 2006-2007 Jiri Benc <jbenc@suse.cz> * Copyright 2006-2007 Jiri Benc <jbenc@suse.cz>
* Copyright 2007, Michael Wu <flamingice@sourmilk.net> * Copyright 2007, Michael Wu <flamingice@sourmilk.net>
* Copyright 2009 Johannes Berg <johannes@sipsolutions.net> * Copyright 2009 Johannes Berg <johannes@sipsolutions.net>
* Copyright (C) 2019 Intel Corporation
*/ */
#include <linux/export.h> #include <linux/export.h>
#include <net/mac80211.h> #include <net/mac80211.h>
...@@ -732,7 +733,7 @@ static int ieee80211_cancel_roc(struct ieee80211_local *local, ...@@ -732,7 +733,7 @@ static int ieee80211_cancel_roc(struct ieee80211_local *local,
} }
if (local->ops->remain_on_channel) { if (local->ops->remain_on_channel) {
ret = drv_cancel_remain_on_channel(local); ret = drv_cancel_remain_on_channel(local, roc->sdata);
if (WARN_ON_ONCE(ret)) { if (WARN_ON_ONCE(ret)) {
mutex_unlock(&local->mtx); mutex_unlock(&local->mtx);
return ret; return ret;
...@@ -991,7 +992,7 @@ void ieee80211_roc_purge(struct ieee80211_local *local, ...@@ -991,7 +992,7 @@ void ieee80211_roc_purge(struct ieee80211_local *local,
if (roc->started) { if (roc->started) {
if (local->ops->remain_on_channel) { if (local->ops->remain_on_channel) {
/* can race, so ignore return value */ /* can race, so ignore return value */
drv_cancel_remain_on_channel(local); drv_cancel_remain_on_channel(local, sdata);
ieee80211_roc_notify_destroy(roc); ieee80211_roc_notify_destroy(roc);
} else { } else {
roc->abort = true; roc->abort = true;
......
...@@ -1242,9 +1242,10 @@ TRACE_EVENT(drv_remain_on_channel, ...@@ -1242,9 +1242,10 @@ TRACE_EVENT(drv_remain_on_channel,
) )
); );
DEFINE_EVENT(local_only_evt, drv_cancel_remain_on_channel, DEFINE_EVENT(local_sdata_evt, drv_cancel_remain_on_channel,
TP_PROTO(struct ieee80211_local *local), TP_PROTO(struct ieee80211_local *local,
TP_ARGS(local) struct ieee80211_sub_if_data *sdata),
TP_ARGS(local, sdata)
); );
TRACE_EVENT(drv_set_ringparam, TRACE_EVENT(drv_set_ringparam,
......
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