mirror of
https://github.com/torvalds/linux.git
synced 2024-11-12 07:01:57 +00:00
mac80211: add max channel calculation utility function
The utility function has no uses yet. It is aimed at future chanctx reservation management and channel switching. Signed-off-by: Michal Kazior <michal.kazior@tieto.com> Signed-off-by: Johannes Berg <johannes.berg@intel.com>
This commit is contained in:
parent
65a124dd71
commit
6fa001bc7e
@ -1822,6 +1822,7 @@ int ieee80211_check_combinations(struct ieee80211_sub_if_data *sdata,
|
||||
const struct cfg80211_chan_def *chandef,
|
||||
enum ieee80211_chanctx_mode chanmode,
|
||||
u8 radar_detect);
|
||||
int ieee80211_max_num_channels(struct ieee80211_local *local);
|
||||
|
||||
#ifdef CONFIG_MAC80211_NOINLINE
|
||||
#define debug_noinline noinline
|
||||
|
@ -2873,3 +2873,45 @@ int ieee80211_check_combinations(struct ieee80211_sub_if_data *sdata,
|
||||
num_different_channels,
|
||||
radar_detect, num);
|
||||
}
|
||||
|
||||
static void
|
||||
ieee80211_iter_max_chans(const struct ieee80211_iface_combination *c,
|
||||
void *data)
|
||||
{
|
||||
u32 *max_num_different_channels = data;
|
||||
|
||||
*max_num_different_channels = max(*max_num_different_channels,
|
||||
c->num_different_channels);
|
||||
}
|
||||
|
||||
int ieee80211_max_num_channels(struct ieee80211_local *local)
|
||||
{
|
||||
struct ieee80211_sub_if_data *sdata;
|
||||
int num[NUM_NL80211_IFTYPES] = {};
|
||||
struct ieee80211_chanctx *ctx;
|
||||
int num_different_channels = 0;
|
||||
u8 radar_detect = 0;
|
||||
u32 max_num_different_channels = 1;
|
||||
int err;
|
||||
|
||||
lockdep_assert_held(&local->chanctx_mtx);
|
||||
|
||||
list_for_each_entry(ctx, &local->chanctx_list, list) {
|
||||
num_different_channels++;
|
||||
|
||||
if (ctx->conf.radar_enabled)
|
||||
radar_detect |= BIT(ctx->conf.def.width);
|
||||
}
|
||||
|
||||
list_for_each_entry_rcu(sdata, &local->interfaces, list)
|
||||
num[sdata->wdev.iftype]++;
|
||||
|
||||
err = cfg80211_iter_combinations(local->hw.wiphy,
|
||||
num_different_channels, radar_detect,
|
||||
num, ieee80211_iter_max_chans,
|
||||
&max_num_different_channels);
|
||||
if (err < 0)
|
||||
return err;
|
||||
|
||||
return max_num_different_channels;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user