Skip to content

Commit

Permalink
mac80211: make remain_on_channel() op pass vif param
Browse files Browse the repository at this point in the history
Drivers (e.g. wl12xx) might need to know the vif
to roc on (mainly in order to configure the
rx filters correctly).

Add the vif to the op params, and update the current
users (iwlwifi) to use the new api.

Signed-off-by: Eliad Peller <eliad@wizery.com>
[fix hwsim]
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
  • Loading branch information
Eliad Peller authored and Johannes Berg committed Nov 19, 2012
1 parent 3475b09 commit 4988456
Show file tree
Hide file tree
Showing 7 changed files with 21 additions and 10 deletions.
1 change: 1 addition & 0 deletions drivers/net/wireless/iwlwifi/dvm/mac80211.c
Original file line number Diff line number Diff line change
Expand Up @@ -1032,6 +1032,7 @@ static void iwlagn_mac_flush(struct ieee80211_hw *hw, bool drop)
}

static int iwlagn_mac_remain_on_channel(struct ieee80211_hw *hw,
struct ieee80211_vif *vif,
struct ieee80211_channel *channel,
enum nl80211_channel_type channel_type,
int duration)
Expand Down
1 change: 1 addition & 0 deletions drivers/net/wireless/mac80211_hwsim.c
Original file line number Diff line number Diff line change
Expand Up @@ -1453,6 +1453,7 @@ static void hw_roc_done(struct work_struct *work)
}

static int mac80211_hwsim_roc(struct ieee80211_hw *hw,
struct ieee80211_vif *vif,
struct ieee80211_channel *chan,
enum nl80211_channel_type channel_type,
int duration)
Expand Down
1 change: 1 addition & 0 deletions include/net/mac80211.h
Original file line number Diff line number Diff line change
Expand Up @@ -2530,6 +2530,7 @@ struct ieee80211_ops {
int (*get_antenna)(struct ieee80211_hw *hw, u32 *tx_ant, u32 *rx_ant);

int (*remain_on_channel)(struct ieee80211_hw *hw,
struct ieee80211_vif *vif,
struct ieee80211_channel *chan,
enum nl80211_channel_type channel_type,
int duration);
Expand Down
6 changes: 4 additions & 2 deletions net/mac80211/cfg.c
Original file line number Diff line number Diff line change
Expand Up @@ -2287,7 +2287,8 @@ static int ieee80211_start_roc_work(struct ieee80211_local *local,
if (!duration)
duration = 10;

ret = drv_remain_on_channel(local, channel, channel_type, duration);
ret = drv_remain_on_channel(local, sdata, channel, channel_type,
duration);
if (ret) {
kfree(roc);
return ret;
Expand All @@ -2298,7 +2299,8 @@ static int ieee80211_start_roc_work(struct ieee80211_local *local,

out_check_combine:
list_for_each_entry(tmp, &local->roc_list, list) {
if (tmp->chan != channel || tmp->chan_type != channel_type)
if (tmp->chan != channel || tmp->chan_type != channel_type ||
tmp->sdata != sdata)
continue;

/*
Expand Down
7 changes: 4 additions & 3 deletions net/mac80211/driver-ops.h
Original file line number Diff line number Diff line change
Expand Up @@ -704,6 +704,7 @@ static inline int drv_get_antenna(struct ieee80211_local *local,
}

static inline int drv_remain_on_channel(struct ieee80211_local *local,
struct ieee80211_sub_if_data *sdata,
struct ieee80211_channel *chan,
enum nl80211_channel_type chantype,
unsigned int duration)
Expand All @@ -712,9 +713,9 @@ static inline int drv_remain_on_channel(struct ieee80211_local *local,

might_sleep();

trace_drv_remain_on_channel(local, chan, chantype, duration);
ret = local->ops->remain_on_channel(&local->hw, chan, chantype,
duration);
trace_drv_remain_on_channel(local, sdata, chan, chantype, duration);
ret = local->ops->remain_on_channel(&local->hw, &sdata->vif,
chan, chantype, duration);
trace_drv_return_int(local, ret);

return ret;
Expand Down
2 changes: 1 addition & 1 deletion net/mac80211/offchannel.c
Original file line number Diff line number Diff line change
Expand Up @@ -283,7 +283,7 @@ void ieee80211_start_next_roc(struct ieee80211_local *local)
if (!duration)
duration = 10;

ret = drv_remain_on_channel(local, roc->chan,
ret = drv_remain_on_channel(local, roc->sdata, roc->chan,
roc->chan_type,
duration);

Expand Down
13 changes: 9 additions & 4 deletions net/mac80211/trace.h
Original file line number Diff line number Diff line change
Expand Up @@ -1019,28 +1019,33 @@ TRACE_EVENT(drv_get_antenna,
);

TRACE_EVENT(drv_remain_on_channel,
TP_PROTO(struct ieee80211_local *local, struct ieee80211_channel *chan,
TP_PROTO(struct ieee80211_local *local,
struct ieee80211_sub_if_data *sdata,
struct ieee80211_channel *chan,
enum nl80211_channel_type chantype, unsigned int duration),

TP_ARGS(local, chan, chantype, duration),
TP_ARGS(local, sdata, chan, chantype, duration),

TP_STRUCT__entry(
LOCAL_ENTRY
VIF_ENTRY
__field(int, center_freq)
__field(int, channel_type)
__field(unsigned int, duration)
),

TP_fast_assign(
LOCAL_ASSIGN;
VIF_ASSIGN;
__entry->center_freq = chan->center_freq;
__entry->channel_type = chantype;
__entry->duration = duration;
),

TP_printk(
LOCAL_PR_FMT " freq:%dMHz duration:%dms",
LOCAL_PR_ARG, __entry->center_freq, __entry->duration
LOCAL_PR_FMT VIF_PR_FMT " freq:%dMHz duration:%dms",
LOCAL_PR_ARG, VIF_PR_ARG,
__entry->center_freq, __entry->duration
)
);

Expand Down

0 comments on commit 4988456

Please sign in to comment.