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:
Родитель
685328b296
Коммит
bdfbec2d2d
|
@ -1268,14 +1268,9 @@ static struct cfg80211_scan_request *
|
||||||
_new_connect_scan_req(struct wiphy *wiphy, struct cfg80211_connect_params *sme)
|
_new_connect_scan_req(struct wiphy *wiphy, struct cfg80211_connect_params *sme)
|
||||||
{
|
{
|
||||||
struct cfg80211_scan_request *creq = NULL;
|
struct cfg80211_scan_request *creq = NULL;
|
||||||
int i, n_channels = 0;
|
int i, n_channels = ieee80211_get_num_supported_channels(wiphy);
|
||||||
enum ieee80211_band band;
|
enum ieee80211_band band;
|
||||||
|
|
||||||
for (band = 0; band < IEEE80211_NUM_BANDS; band++) {
|
|
||||||
if (wiphy->bands[band])
|
|
||||||
n_channels += wiphy->bands[band]->n_channels;
|
|
||||||
}
|
|
||||||
|
|
||||||
creq = kzalloc(sizeof(*creq) + sizeof(struct cfg80211_ssid) +
|
creq = kzalloc(sizeof(*creq) + sizeof(struct cfg80211_ssid) +
|
||||||
n_channels * sizeof(void *),
|
n_channels * sizeof(void *),
|
||||||
GFP_ATOMIC);
|
GFP_ATOMIC);
|
||||||
|
|
|
@ -4640,6 +4640,14 @@ void cfg80211_report_wowlan_wakeup(struct wireless_dev *wdev,
|
||||||
*/
|
*/
|
||||||
void cfg80211_crit_proto_stopped(struct wireless_dev *wdev, gfp_t gfp);
|
void cfg80211_crit_proto_stopped(struct wireless_dev *wdev, gfp_t gfp);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ieee80211_get_num_supported_channels - get number of channels device has
|
||||||
|
* @wiphy: the wiphy
|
||||||
|
*
|
||||||
|
* Return: the number of channels supported by the device.
|
||||||
|
*/
|
||||||
|
unsigned int ieee80211_get_num_supported_channels(struct wiphy *wiphy);
|
||||||
|
|
||||||
/* Logging, debugging and troubleshooting/diagnostic helpers. */
|
/* Logging, debugging and troubleshooting/diagnostic helpers. */
|
||||||
|
|
||||||
/* wiphy_printk helpers, similar to dev_printk */
|
/* wiphy_printk helpers, similar to dev_printk */
|
||||||
|
|
|
@ -5285,12 +5285,7 @@ static int nl80211_trigger_scan(struct sk_buff *skb, struct genl_info *info)
|
||||||
goto unlock;
|
goto unlock;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
enum ieee80211_band band;
|
n_channels = ieee80211_get_num_supported_channels(wiphy);
|
||||||
n_channels = 0;
|
|
||||||
|
|
||||||
for (band = 0; band < IEEE80211_NUM_BANDS; band++)
|
|
||||||
if (wiphy->bands[band])
|
|
||||||
n_channels += wiphy->bands[band]->n_channels;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (info->attrs[NL80211_ATTR_SCAN_SSIDS])
|
if (info->attrs[NL80211_ATTR_SCAN_SSIDS])
|
||||||
|
@ -5498,11 +5493,7 @@ static int nl80211_start_sched_scan(struct sk_buff *skb,
|
||||||
if (!n_channels)
|
if (!n_channels)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
} else {
|
} else {
|
||||||
n_channels = 0;
|
n_channels = ieee80211_get_num_supported_channels(wiphy);
|
||||||
|
|
||||||
for (band = 0; band < IEEE80211_NUM_BANDS; band++)
|
|
||||||
if (wiphy->bands[band])
|
|
||||||
n_channels += wiphy->bands[band]->n_channels;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (info->attrs[NL80211_ATTR_SCAN_SSIDS])
|
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 */
|
/* Determine number of channels, needed to allocate creq */
|
||||||
if (wreq && wreq->num_channels)
|
if (wreq && wreq->num_channels)
|
||||||
n_channels = wreq->num_channels;
|
n_channels = wreq->num_channels;
|
||||||
else {
|
else
|
||||||
for (band = 0; band < IEEE80211_NUM_BANDS; band++)
|
n_channels = ieee80211_get_num_supported_channels(wiphy);
|
||||||
if (wiphy->bands[band])
|
|
||||||
n_channels += wiphy->bands[band]->n_channels;
|
|
||||||
}
|
|
||||||
|
|
||||||
creq = kzalloc(sizeof(*creq) + sizeof(struct cfg80211_ssid) +
|
creq = kzalloc(sizeof(*creq) + sizeof(struct cfg80211_ssid) +
|
||||||
n_channels * sizeof(void *),
|
n_channels * sizeof(void *),
|
||||||
|
|
|
@ -70,18 +70,11 @@ static int cfg80211_conn_scan(struct wireless_dev *wdev)
|
||||||
if (rdev->scan_req)
|
if (rdev->scan_req)
|
||||||
return -EBUSY;
|
return -EBUSY;
|
||||||
|
|
||||||
if (wdev->conn->params.channel) {
|
if (wdev->conn->params.channel)
|
||||||
n_channels = 1;
|
n_channels = 1;
|
||||||
} else {
|
else
|
||||||
enum ieee80211_band band;
|
n_channels = ieee80211_get_num_supported_channels(wdev->wiphy);
|
||||||
n_channels = 0;
|
|
||||||
|
|
||||||
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]) +
|
request = kzalloc(sizeof(*request) + sizeof(request->ssids[0]) +
|
||||||
sizeof(request->channels[0]) * n_channels,
|
sizeof(request->channels[0]) * n_channels,
|
||||||
GFP_KERNEL);
|
GFP_KERNEL);
|
||||||
|
|
|
@ -1481,6 +1481,19 @@ int ieee80211_get_ratemask(struct ieee80211_supported_band *sband,
|
||||||
return 0;
|
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 */
|
/* See IEEE 802.1H for LLC/SNAP encapsulation/decapsulation */
|
||||||
/* Ethernet-II snap header (RFC1042 for most EtherTypes) */
|
/* Ethernet-II snap header (RFC1042 for most EtherTypes) */
|
||||||
const unsigned char rfc1042_header[] __aligned(2) =
|
const unsigned char rfc1042_header[] __aligned(2) =
|
||||||
|
|
Загрузка…
Ссылка в новой задаче