diff options
author | Johannes Berg <johannes@sipsolutions.net> | 2009-02-10 15:25:55 -0500 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2009-02-13 13:45:49 -0500 |
commit | 2a5193119269062608582418deba7af82844159a (patch) | |
tree | 1f2fe8cffbeb7530dce7fa708310f6fb29ab0dd8 /net/wireless/core.c | |
parent | 849b7967818995a32c3017542e33eb3155944368 (diff) |
cfg80211/nl80211: scanning (and mac80211 update to use it)
This patch adds basic scan capability to cfg80211/nl80211 and
changes mac80211 to use it. The BSS list that cfg80211 maintains
is made driver-accessible with a private area in each BSS struct,
but mac80211 doesn't yet use it. That's another large project.
Signed-off-by: Johannes Berg <johannes@sipsolutions.net>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'net/wireless/core.c')
-rw-r--r-- | net/wireless/core.c | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/net/wireless/core.c b/net/wireless/core.c index 125226476089..3cccd1390cea 100644 --- a/net/wireless/core.c +++ b/net/wireless/core.c | |||
@@ -240,6 +240,8 @@ struct wiphy *wiphy_new(struct cfg80211_ops *ops, int sizeof_priv) | |||
240 | mutex_init(&drv->mtx); | 240 | mutex_init(&drv->mtx); |
241 | mutex_init(&drv->devlist_mtx); | 241 | mutex_init(&drv->devlist_mtx); |
242 | INIT_LIST_HEAD(&drv->netdev_list); | 242 | INIT_LIST_HEAD(&drv->netdev_list); |
243 | spin_lock_init(&drv->bss_lock); | ||
244 | INIT_LIST_HEAD(&drv->bss_list); | ||
243 | 245 | ||
244 | device_initialize(&drv->wiphy.dev); | 246 | device_initialize(&drv->wiphy.dev); |
245 | drv->wiphy.dev.class = &ieee80211_class; | 247 | drv->wiphy.dev.class = &ieee80211_class; |
@@ -259,6 +261,9 @@ int wiphy_register(struct wiphy *wiphy) | |||
259 | int i; | 261 | int i; |
260 | u16 ifmodes = wiphy->interface_modes; | 262 | u16 ifmodes = wiphy->interface_modes; |
261 | 263 | ||
264 | if (WARN_ON(wiphy->max_scan_ssids < 1)) | ||
265 | return -EINVAL; | ||
266 | |||
262 | /* sanity check ifmodes */ | 267 | /* sanity check ifmodes */ |
263 | WARN_ON(!ifmodes); | 268 | WARN_ON(!ifmodes); |
264 | ifmodes &= ((1 << __NL80211_IFTYPE_AFTER_LAST) - 1) & ~1; | 269 | ifmodes &= ((1 << __NL80211_IFTYPE_AFTER_LAST) - 1) & ~1; |
@@ -367,8 +372,11 @@ EXPORT_SYMBOL(wiphy_unregister); | |||
367 | 372 | ||
368 | void cfg80211_dev_free(struct cfg80211_registered_device *drv) | 373 | void cfg80211_dev_free(struct cfg80211_registered_device *drv) |
369 | { | 374 | { |
375 | struct cfg80211_internal_bss *scan, *tmp; | ||
370 | mutex_destroy(&drv->mtx); | 376 | mutex_destroy(&drv->mtx); |
371 | mutex_destroy(&drv->devlist_mtx); | 377 | mutex_destroy(&drv->devlist_mtx); |
378 | list_for_each_entry_safe(scan, tmp, &drv->bss_list, list) | ||
379 | kfree(scan); | ||
372 | kfree(drv); | 380 | kfree(drv); |
373 | } | 381 | } |
374 | 382 | ||