cfg80211: Add a function to get the number of supported channels
Add a utility function to get the number of channels supported by the device, and update the places in the code that need this data. Signed-off-by: Ilan Peer <ilan.peer@intel.com> [replace another occurrence in libertas, fix kernel-doc, fix bugs] Signed-off-by: Johannes Berg <johannes.berg@intel.com>
This commit is contained in:

committato da
Johannes Berg

parent
685328b296
commit
bdfbec2d2d
@@ -5285,12 +5285,7 @@ static int nl80211_trigger_scan(struct sk_buff *skb, struct genl_info *info)
|
||||
goto unlock;
|
||||
}
|
||||
} else {
|
||||
enum ieee80211_band band;
|
||||
n_channels = 0;
|
||||
|
||||
for (band = 0; band < IEEE80211_NUM_BANDS; band++)
|
||||
if (wiphy->bands[band])
|
||||
n_channels += wiphy->bands[band]->n_channels;
|
||||
n_channels = ieee80211_get_num_supported_channels(wiphy);
|
||||
}
|
||||
|
||||
if (info->attrs[NL80211_ATTR_SCAN_SSIDS])
|
||||
@@ -5498,11 +5493,7 @@ static int nl80211_start_sched_scan(struct sk_buff *skb,
|
||||
if (!n_channels)
|
||||
return -EINVAL;
|
||||
} else {
|
||||
n_channels = 0;
|
||||
|
||||
for (band = 0; band < IEEE80211_NUM_BANDS; band++)
|
||||
if (wiphy->bands[band])
|
||||
n_channels += wiphy->bands[band]->n_channels;
|
||||
n_channels = ieee80211_get_num_supported_channels(wiphy);
|
||||
}
|
||||
|
||||
if (info->attrs[NL80211_ATTR_SCAN_SSIDS])
|
||||
|
@@ -1089,11 +1089,8 @@ int cfg80211_wext_siwscan(struct net_device *dev,
|
||||
/* Determine number of channels, needed to allocate creq */
|
||||
if (wreq && wreq->num_channels)
|
||||
n_channels = wreq->num_channels;
|
||||
else {
|
||||
for (band = 0; band < IEEE80211_NUM_BANDS; band++)
|
||||
if (wiphy->bands[band])
|
||||
n_channels += wiphy->bands[band]->n_channels;
|
||||
}
|
||||
else
|
||||
n_channels = ieee80211_get_num_supported_channels(wiphy);
|
||||
|
||||
creq = kzalloc(sizeof(*creq) + sizeof(struct cfg80211_ssid) +
|
||||
n_channels * sizeof(void *),
|
||||
|
@@ -70,18 +70,11 @@ static int cfg80211_conn_scan(struct wireless_dev *wdev)
|
||||
if (rdev->scan_req)
|
||||
return -EBUSY;
|
||||
|
||||
if (wdev->conn->params.channel) {
|
||||
if (wdev->conn->params.channel)
|
||||
n_channels = 1;
|
||||
} else {
|
||||
enum ieee80211_band band;
|
||||
n_channels = 0;
|
||||
else
|
||||
n_channels = ieee80211_get_num_supported_channels(wdev->wiphy);
|
||||
|
||||
for (band = 0; band < IEEE80211_NUM_BANDS; band++) {
|
||||
if (!wdev->wiphy->bands[band])
|
||||
continue;
|
||||
n_channels += wdev->wiphy->bands[band]->n_channels;
|
||||
}
|
||||
}
|
||||
request = kzalloc(sizeof(*request) + sizeof(request->ssids[0]) +
|
||||
sizeof(request->channels[0]) * n_channels,
|
||||
GFP_KERNEL);
|
||||
|
@@ -1481,6 +1481,19 @@ int ieee80211_get_ratemask(struct ieee80211_supported_band *sband,
|
||||
return 0;
|
||||
}
|
||||
|
||||
unsigned int ieee80211_get_num_supported_channels(struct wiphy *wiphy)
|
||||
{
|
||||
enum ieee80211_band band;
|
||||
unsigned int n_channels = 0;
|
||||
|
||||
for (band = 0; band < IEEE80211_NUM_BANDS; band++)
|
||||
if (wiphy->bands[band])
|
||||
n_channels += wiphy->bands[band]->n_channels;
|
||||
|
||||
return n_channels;
|
||||
}
|
||||
EXPORT_SYMBOL(ieee80211_get_num_supported_channels);
|
||||
|
||||
/* See IEEE 802.1H for LLC/SNAP encapsulation/decapsulation */
|
||||
/* Ethernet-II snap header (RFC1042 for most EtherTypes) */
|
||||
const unsigned char rfc1042_header[] __aligned(2) =
|
||||
|
Fai riferimento in un nuovo problema
Block a user