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: Emmanuel Grumbach <emmanuel.grumbach@intel.com> Link: https://lore.kernel.org/r/20190723180001.5828-1-emmanuel.grumbach@intel.com Signed-off-by: Johannes Berg <johannes.berg@intel.com>
This commit is contained in:
committed by
Johannes Berg
parent
690c4509e9
commit
5db4c4b955
@@ -6970,7 +6970,8 @@ exit:
|
|||||||
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 @@ out:
|
|||||||
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 @@ out_unlock:
|
|||||||
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,
|
|||||||
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 @@ out:
|
|||||||
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)
|
|||||||
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 {
|
|||||||
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,
|
|||||||
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 @@
|
|||||||
* 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,
|
|||||||
}
|
}
|
||||||
|
|
||||||
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,
|
|||||||
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,
|
|||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
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,
|
||||||
|
|||||||
Reference in New Issue
Block a user