mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-09-28 21:33:52 +00:00
cfg80211: clean up naming once and for all
We've named the registered devices 'drv' sometimes, thinking of "driver", which is not what it is, it's the internal representation of a wiphy, i.e. a device. Let's clean up the naming once and and use 'rdev' aka 'registered device' everywhere. Signed-off-by: Johannes Berg <johannes@sipsolutions.net> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
parent
667503ddcb
commit
79c97e97ae
7 changed files with 352 additions and 352 deletions
|
@ -30,10 +30,10 @@ MODULE_DESCRIPTION("wireless configuration support");
|
||||||
/* RCU might be appropriate here since we usually
|
/* RCU might be appropriate here since we usually
|
||||||
* only read the list, and that can happen quite
|
* only read the list, and that can happen quite
|
||||||
* often because we need to do it for each command */
|
* often because we need to do it for each command */
|
||||||
LIST_HEAD(cfg80211_drv_list);
|
LIST_HEAD(cfg80211_rdev_list);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* This is used to protect the cfg80211_drv_list, cfg80211_regdomain,
|
* This is used to protect the cfg80211_rdev_list, cfg80211_regdomain,
|
||||||
* country_ie_regdomain, the reg_beacon_list and the the last regulatory
|
* country_ie_regdomain, the reg_beacon_list and the the last regulatory
|
||||||
* request receipt (last_request).
|
* request receipt (last_request).
|
||||||
*/
|
*/
|
||||||
|
@ -43,18 +43,18 @@ DEFINE_MUTEX(cfg80211_mutex);
|
||||||
static struct dentry *ieee80211_debugfs_dir;
|
static struct dentry *ieee80211_debugfs_dir;
|
||||||
|
|
||||||
/* requires cfg80211_mutex to be held! */
|
/* requires cfg80211_mutex to be held! */
|
||||||
struct cfg80211_registered_device *cfg80211_drv_by_wiphy_idx(int wiphy_idx)
|
struct cfg80211_registered_device *cfg80211_rdev_by_wiphy_idx(int wiphy_idx)
|
||||||
{
|
{
|
||||||
struct cfg80211_registered_device *result = NULL, *drv;
|
struct cfg80211_registered_device *result = NULL, *rdev;
|
||||||
|
|
||||||
if (!wiphy_idx_valid(wiphy_idx))
|
if (!wiphy_idx_valid(wiphy_idx))
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
assert_cfg80211_lock();
|
assert_cfg80211_lock();
|
||||||
|
|
||||||
list_for_each_entry(drv, &cfg80211_drv_list, list) {
|
list_for_each_entry(rdev, &cfg80211_rdev_list, list) {
|
||||||
if (drv->wiphy_idx == wiphy_idx) {
|
if (rdev->wiphy_idx == wiphy_idx) {
|
||||||
result = drv;
|
result = rdev;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -64,32 +64,32 @@ struct cfg80211_registered_device *cfg80211_drv_by_wiphy_idx(int wiphy_idx)
|
||||||
|
|
||||||
int get_wiphy_idx(struct wiphy *wiphy)
|
int get_wiphy_idx(struct wiphy *wiphy)
|
||||||
{
|
{
|
||||||
struct cfg80211_registered_device *drv;
|
struct cfg80211_registered_device *rdev;
|
||||||
if (!wiphy)
|
if (!wiphy)
|
||||||
return WIPHY_IDX_STALE;
|
return WIPHY_IDX_STALE;
|
||||||
drv = wiphy_to_dev(wiphy);
|
rdev = wiphy_to_dev(wiphy);
|
||||||
return drv->wiphy_idx;
|
return rdev->wiphy_idx;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* requires cfg80211_drv_mutex to be held! */
|
/* requires cfg80211_rdev_mutex to be held! */
|
||||||
struct wiphy *wiphy_idx_to_wiphy(int wiphy_idx)
|
struct wiphy *wiphy_idx_to_wiphy(int wiphy_idx)
|
||||||
{
|
{
|
||||||
struct cfg80211_registered_device *drv;
|
struct cfg80211_registered_device *rdev;
|
||||||
|
|
||||||
if (!wiphy_idx_valid(wiphy_idx))
|
if (!wiphy_idx_valid(wiphy_idx))
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
assert_cfg80211_lock();
|
assert_cfg80211_lock();
|
||||||
|
|
||||||
drv = cfg80211_drv_by_wiphy_idx(wiphy_idx);
|
rdev = cfg80211_rdev_by_wiphy_idx(wiphy_idx);
|
||||||
if (!drv)
|
if (!rdev)
|
||||||
return NULL;
|
return NULL;
|
||||||
return &drv->wiphy;
|
return &rdev->wiphy;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* requires cfg80211_mutex to be held! */
|
/* requires cfg80211_mutex to be held! */
|
||||||
struct cfg80211_registered_device *
|
struct cfg80211_registered_device *
|
||||||
__cfg80211_drv_from_info(struct genl_info *info)
|
__cfg80211_rdev_from_info(struct genl_info *info)
|
||||||
{
|
{
|
||||||
int ifindex;
|
int ifindex;
|
||||||
struct cfg80211_registered_device *bywiphyidx = NULL, *byifidx = NULL;
|
struct cfg80211_registered_device *bywiphyidx = NULL, *byifidx = NULL;
|
||||||
|
@ -99,7 +99,7 @@ __cfg80211_drv_from_info(struct genl_info *info)
|
||||||
assert_cfg80211_lock();
|
assert_cfg80211_lock();
|
||||||
|
|
||||||
if (info->attrs[NL80211_ATTR_WIPHY]) {
|
if (info->attrs[NL80211_ATTR_WIPHY]) {
|
||||||
bywiphyidx = cfg80211_drv_by_wiphy_idx(
|
bywiphyidx = cfg80211_rdev_by_wiphy_idx(
|
||||||
nla_get_u32(info->attrs[NL80211_ATTR_WIPHY]));
|
nla_get_u32(info->attrs[NL80211_ATTR_WIPHY]));
|
||||||
err = -ENODEV;
|
err = -ENODEV;
|
||||||
}
|
}
|
||||||
|
@ -134,26 +134,26 @@ __cfg80211_drv_from_info(struct genl_info *info)
|
||||||
struct cfg80211_registered_device *
|
struct cfg80211_registered_device *
|
||||||
cfg80211_get_dev_from_info(struct genl_info *info)
|
cfg80211_get_dev_from_info(struct genl_info *info)
|
||||||
{
|
{
|
||||||
struct cfg80211_registered_device *drv;
|
struct cfg80211_registered_device *rdev;
|
||||||
|
|
||||||
mutex_lock(&cfg80211_mutex);
|
mutex_lock(&cfg80211_mutex);
|
||||||
drv = __cfg80211_drv_from_info(info);
|
rdev = __cfg80211_rdev_from_info(info);
|
||||||
|
|
||||||
/* if it is not an error we grab the lock on
|
/* if it is not an error we grab the lock on
|
||||||
* it to assure it won't be going away while
|
* it to assure it won't be going away while
|
||||||
* we operate on it */
|
* we operate on it */
|
||||||
if (!IS_ERR(drv))
|
if (!IS_ERR(rdev))
|
||||||
mutex_lock(&drv->mtx);
|
mutex_lock(&rdev->mtx);
|
||||||
|
|
||||||
mutex_unlock(&cfg80211_mutex);
|
mutex_unlock(&cfg80211_mutex);
|
||||||
|
|
||||||
return drv;
|
return rdev;
|
||||||
}
|
}
|
||||||
|
|
||||||
struct cfg80211_registered_device *
|
struct cfg80211_registered_device *
|
||||||
cfg80211_get_dev_from_ifindex(int ifindex)
|
cfg80211_get_dev_from_ifindex(int ifindex)
|
||||||
{
|
{
|
||||||
struct cfg80211_registered_device *drv = ERR_PTR(-ENODEV);
|
struct cfg80211_registered_device *rdev = ERR_PTR(-ENODEV);
|
||||||
struct net_device *dev;
|
struct net_device *dev;
|
||||||
|
|
||||||
mutex_lock(&cfg80211_mutex);
|
mutex_lock(&cfg80211_mutex);
|
||||||
|
@ -161,21 +161,21 @@ cfg80211_get_dev_from_ifindex(int ifindex)
|
||||||
if (!dev)
|
if (!dev)
|
||||||
goto out;
|
goto out;
|
||||||
if (dev->ieee80211_ptr) {
|
if (dev->ieee80211_ptr) {
|
||||||
drv = wiphy_to_dev(dev->ieee80211_ptr->wiphy);
|
rdev = wiphy_to_dev(dev->ieee80211_ptr->wiphy);
|
||||||
mutex_lock(&drv->mtx);
|
mutex_lock(&rdev->mtx);
|
||||||
} else
|
} else
|
||||||
drv = ERR_PTR(-ENODEV);
|
rdev = ERR_PTR(-ENODEV);
|
||||||
dev_put(dev);
|
dev_put(dev);
|
||||||
out:
|
out:
|
||||||
mutex_unlock(&cfg80211_mutex);
|
mutex_unlock(&cfg80211_mutex);
|
||||||
return drv;
|
return rdev;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* requires cfg80211_mutex to be held */
|
/* requires cfg80211_mutex to be held */
|
||||||
int cfg80211_dev_rename(struct cfg80211_registered_device *rdev,
|
int cfg80211_dev_rename(struct cfg80211_registered_device *rdev,
|
||||||
char *newname)
|
char *newname)
|
||||||
{
|
{
|
||||||
struct cfg80211_registered_device *drv;
|
struct cfg80211_registered_device *rdev2;
|
||||||
int wiphy_idx, taken = -1, result, digits;
|
int wiphy_idx, taken = -1, result, digits;
|
||||||
|
|
||||||
assert_cfg80211_lock();
|
assert_cfg80211_lock();
|
||||||
|
@ -201,8 +201,8 @@ int cfg80211_dev_rename(struct cfg80211_registered_device *rdev,
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
/* Ensure another device does not already have this name. */
|
/* Ensure another device does not already have this name. */
|
||||||
list_for_each_entry(drv, &cfg80211_drv_list, list)
|
list_for_each_entry(rdev2, &cfg80211_rdev_list, list)
|
||||||
if (strcmp(newname, dev_name(&drv->wiphy.dev)) == 0)
|
if (strcmp(newname, dev_name(&rdev2->wiphy.dev)) == 0)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
result = device_rename(&rdev->wiphy.dev, newname);
|
result = device_rename(&rdev->wiphy.dev, newname);
|
||||||
|
@ -224,26 +224,26 @@ int cfg80211_dev_rename(struct cfg80211_registered_device *rdev,
|
||||||
|
|
||||||
static void cfg80211_rfkill_poll(struct rfkill *rfkill, void *data)
|
static void cfg80211_rfkill_poll(struct rfkill *rfkill, void *data)
|
||||||
{
|
{
|
||||||
struct cfg80211_registered_device *drv = data;
|
struct cfg80211_registered_device *rdev = data;
|
||||||
|
|
||||||
drv->ops->rfkill_poll(&drv->wiphy);
|
rdev->ops->rfkill_poll(&rdev->wiphy);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int cfg80211_rfkill_set_block(void *data, bool blocked)
|
static int cfg80211_rfkill_set_block(void *data, bool blocked)
|
||||||
{
|
{
|
||||||
struct cfg80211_registered_device *drv = data;
|
struct cfg80211_registered_device *rdev = data;
|
||||||
struct wireless_dev *wdev;
|
struct wireless_dev *wdev;
|
||||||
|
|
||||||
if (!blocked)
|
if (!blocked)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
rtnl_lock();
|
rtnl_lock();
|
||||||
mutex_lock(&drv->devlist_mtx);
|
mutex_lock(&rdev->devlist_mtx);
|
||||||
|
|
||||||
list_for_each_entry(wdev, &drv->netdev_list, list)
|
list_for_each_entry(wdev, &rdev->netdev_list, list)
|
||||||
dev_close(wdev->netdev);
|
dev_close(wdev->netdev);
|
||||||
|
|
||||||
mutex_unlock(&drv->devlist_mtx);
|
mutex_unlock(&rdev->devlist_mtx);
|
||||||
rtnl_unlock();
|
rtnl_unlock();
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -251,10 +251,10 @@ static int cfg80211_rfkill_set_block(void *data, bool blocked)
|
||||||
|
|
||||||
static void cfg80211_rfkill_sync_work(struct work_struct *work)
|
static void cfg80211_rfkill_sync_work(struct work_struct *work)
|
||||||
{
|
{
|
||||||
struct cfg80211_registered_device *drv;
|
struct cfg80211_registered_device *rdev;
|
||||||
|
|
||||||
drv = container_of(work, struct cfg80211_registered_device, rfkill_sync);
|
rdev = container_of(work, struct cfg80211_registered_device, rfkill_sync);
|
||||||
cfg80211_rfkill_set_block(drv, rfkill_blocked(drv->rfkill));
|
cfg80211_rfkill_set_block(rdev, rfkill_blocked(rdev->rfkill));
|
||||||
}
|
}
|
||||||
|
|
||||||
static void cfg80211_process_events(struct wireless_dev *wdev)
|
static void cfg80211_process_events(struct wireless_dev *wdev)
|
||||||
|
@ -328,79 +328,79 @@ struct wiphy *wiphy_new(const struct cfg80211_ops *ops, int sizeof_priv)
|
||||||
{
|
{
|
||||||
static int wiphy_counter;
|
static int wiphy_counter;
|
||||||
|
|
||||||
struct cfg80211_registered_device *drv;
|
struct cfg80211_registered_device *rdev;
|
||||||
int alloc_size;
|
int alloc_size;
|
||||||
|
|
||||||
WARN_ON(!ops->add_key && ops->del_key);
|
WARN_ON(!ops->add_key && ops->del_key);
|
||||||
WARN_ON(ops->add_key && !ops->del_key);
|
WARN_ON(ops->add_key && !ops->del_key);
|
||||||
|
|
||||||
alloc_size = sizeof(*drv) + sizeof_priv;
|
alloc_size = sizeof(*rdev) + sizeof_priv;
|
||||||
|
|
||||||
drv = kzalloc(alloc_size, GFP_KERNEL);
|
rdev = kzalloc(alloc_size, GFP_KERNEL);
|
||||||
if (!drv)
|
if (!rdev)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
drv->ops = ops;
|
rdev->ops = ops;
|
||||||
|
|
||||||
mutex_lock(&cfg80211_mutex);
|
mutex_lock(&cfg80211_mutex);
|
||||||
|
|
||||||
drv->wiphy_idx = wiphy_counter++;
|
rdev->wiphy_idx = wiphy_counter++;
|
||||||
|
|
||||||
if (unlikely(!wiphy_idx_valid(drv->wiphy_idx))) {
|
if (unlikely(!wiphy_idx_valid(rdev->wiphy_idx))) {
|
||||||
wiphy_counter--;
|
wiphy_counter--;
|
||||||
mutex_unlock(&cfg80211_mutex);
|
mutex_unlock(&cfg80211_mutex);
|
||||||
/* ugh, wrapped! */
|
/* ugh, wrapped! */
|
||||||
kfree(drv);
|
kfree(rdev);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
mutex_unlock(&cfg80211_mutex);
|
mutex_unlock(&cfg80211_mutex);
|
||||||
|
|
||||||
/* give it a proper name */
|
/* give it a proper name */
|
||||||
dev_set_name(&drv->wiphy.dev, PHY_NAME "%d", drv->wiphy_idx);
|
dev_set_name(&rdev->wiphy.dev, PHY_NAME "%d", rdev->wiphy_idx);
|
||||||
|
|
||||||
mutex_init(&drv->mtx);
|
mutex_init(&rdev->mtx);
|
||||||
mutex_init(&drv->devlist_mtx);
|
mutex_init(&rdev->devlist_mtx);
|
||||||
INIT_LIST_HEAD(&drv->netdev_list);
|
INIT_LIST_HEAD(&rdev->netdev_list);
|
||||||
spin_lock_init(&drv->bss_lock);
|
spin_lock_init(&rdev->bss_lock);
|
||||||
INIT_LIST_HEAD(&drv->bss_list);
|
INIT_LIST_HEAD(&rdev->bss_list);
|
||||||
INIT_WORK(&drv->scan_done_wk, __cfg80211_scan_done);
|
INIT_WORK(&rdev->scan_done_wk, __cfg80211_scan_done);
|
||||||
|
|
||||||
device_initialize(&drv->wiphy.dev);
|
device_initialize(&rdev->wiphy.dev);
|
||||||
drv->wiphy.dev.class = &ieee80211_class;
|
rdev->wiphy.dev.class = &ieee80211_class;
|
||||||
drv->wiphy.dev.platform_data = drv;
|
rdev->wiphy.dev.platform_data = rdev;
|
||||||
|
|
||||||
drv->rfkill_ops.set_block = cfg80211_rfkill_set_block;
|
rdev->rfkill_ops.set_block = cfg80211_rfkill_set_block;
|
||||||
drv->rfkill = rfkill_alloc(dev_name(&drv->wiphy.dev),
|
rdev->rfkill = rfkill_alloc(dev_name(&rdev->wiphy.dev),
|
||||||
&drv->wiphy.dev, RFKILL_TYPE_WLAN,
|
&rdev->wiphy.dev, RFKILL_TYPE_WLAN,
|
||||||
&drv->rfkill_ops, drv);
|
&rdev->rfkill_ops, rdev);
|
||||||
|
|
||||||
if (!drv->rfkill) {
|
if (!rdev->rfkill) {
|
||||||
kfree(drv);
|
kfree(rdev);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
INIT_WORK(&drv->rfkill_sync, cfg80211_rfkill_sync_work);
|
INIT_WORK(&rdev->rfkill_sync, cfg80211_rfkill_sync_work);
|
||||||
INIT_WORK(&drv->conn_work, cfg80211_conn_work);
|
INIT_WORK(&rdev->conn_work, cfg80211_conn_work);
|
||||||
INIT_WORK(&drv->event_work, cfg80211_event_work);
|
INIT_WORK(&rdev->event_work, cfg80211_event_work);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Initialize wiphy parameters to IEEE 802.11 MIB default values.
|
* Initialize wiphy parameters to IEEE 802.11 MIB default values.
|
||||||
* Fragmentation and RTS threshold are disabled by default with the
|
* Fragmentation and RTS threshold are disabled by default with the
|
||||||
* special -1 value.
|
* special -1 value.
|
||||||
*/
|
*/
|
||||||
drv->wiphy.retry_short = 7;
|
rdev->wiphy.retry_short = 7;
|
||||||
drv->wiphy.retry_long = 4;
|
rdev->wiphy.retry_long = 4;
|
||||||
drv->wiphy.frag_threshold = (u32) -1;
|
rdev->wiphy.frag_threshold = (u32) -1;
|
||||||
drv->wiphy.rts_threshold = (u32) -1;
|
rdev->wiphy.rts_threshold = (u32) -1;
|
||||||
|
|
||||||
return &drv->wiphy;
|
return &rdev->wiphy;
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(wiphy_new);
|
EXPORT_SYMBOL(wiphy_new);
|
||||||
|
|
||||||
int wiphy_register(struct wiphy *wiphy)
|
int wiphy_register(struct wiphy *wiphy)
|
||||||
{
|
{
|
||||||
struct cfg80211_registered_device *drv = wiphy_to_dev(wiphy);
|
struct cfg80211_registered_device *rdev = wiphy_to_dev(wiphy);
|
||||||
int res;
|
int res;
|
||||||
enum ieee80211_band band;
|
enum ieee80211_band band;
|
||||||
struct ieee80211_supported_band *sband;
|
struct ieee80211_supported_band *sband;
|
||||||
|
@ -454,11 +454,11 @@ int wiphy_register(struct wiphy *wiphy)
|
||||||
/* check and set up bitrates */
|
/* check and set up bitrates */
|
||||||
ieee80211_set_bitrate_flags(wiphy);
|
ieee80211_set_bitrate_flags(wiphy);
|
||||||
|
|
||||||
res = device_add(&drv->wiphy.dev);
|
res = device_add(&rdev->wiphy.dev);
|
||||||
if (res)
|
if (res)
|
||||||
return res;
|
return res;
|
||||||
|
|
||||||
res = rfkill_register(drv->rfkill);
|
res = rfkill_register(rdev->rfkill);
|
||||||
if (res)
|
if (res)
|
||||||
goto out_rm_dev;
|
goto out_rm_dev;
|
||||||
|
|
||||||
|
@ -467,16 +467,16 @@ int wiphy_register(struct wiphy *wiphy)
|
||||||
/* set up regulatory info */
|
/* set up regulatory info */
|
||||||
wiphy_update_regulatory(wiphy, NL80211_REGDOM_SET_BY_CORE);
|
wiphy_update_regulatory(wiphy, NL80211_REGDOM_SET_BY_CORE);
|
||||||
|
|
||||||
list_add(&drv->list, &cfg80211_drv_list);
|
list_add(&rdev->list, &cfg80211_rdev_list);
|
||||||
|
|
||||||
mutex_unlock(&cfg80211_mutex);
|
mutex_unlock(&cfg80211_mutex);
|
||||||
|
|
||||||
/* add to debugfs */
|
/* add to debugfs */
|
||||||
drv->wiphy.debugfsdir =
|
rdev->wiphy.debugfsdir =
|
||||||
debugfs_create_dir(wiphy_name(&drv->wiphy),
|
debugfs_create_dir(wiphy_name(&rdev->wiphy),
|
||||||
ieee80211_debugfs_dir);
|
ieee80211_debugfs_dir);
|
||||||
if (IS_ERR(drv->wiphy.debugfsdir))
|
if (IS_ERR(rdev->wiphy.debugfsdir))
|
||||||
drv->wiphy.debugfsdir = NULL;
|
rdev->wiphy.debugfsdir = NULL;
|
||||||
|
|
||||||
if (wiphy->custom_regulatory) {
|
if (wiphy->custom_regulatory) {
|
||||||
struct regulatory_request request;
|
struct regulatory_request request;
|
||||||
|
@ -489,48 +489,48 @@ int wiphy_register(struct wiphy *wiphy)
|
||||||
nl80211_send_reg_change_event(&request);
|
nl80211_send_reg_change_event(&request);
|
||||||
}
|
}
|
||||||
|
|
||||||
cfg80211_debugfs_drv_add(drv);
|
cfg80211_debugfs_rdev_add(rdev);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
out_rm_dev:
|
out_rm_dev:
|
||||||
device_del(&drv->wiphy.dev);
|
device_del(&rdev->wiphy.dev);
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(wiphy_register);
|
EXPORT_SYMBOL(wiphy_register);
|
||||||
|
|
||||||
void wiphy_rfkill_start_polling(struct wiphy *wiphy)
|
void wiphy_rfkill_start_polling(struct wiphy *wiphy)
|
||||||
{
|
{
|
||||||
struct cfg80211_registered_device *drv = wiphy_to_dev(wiphy);
|
struct cfg80211_registered_device *rdev = wiphy_to_dev(wiphy);
|
||||||
|
|
||||||
if (!drv->ops->rfkill_poll)
|
if (!rdev->ops->rfkill_poll)
|
||||||
return;
|
return;
|
||||||
drv->rfkill_ops.poll = cfg80211_rfkill_poll;
|
rdev->rfkill_ops.poll = cfg80211_rfkill_poll;
|
||||||
rfkill_resume_polling(drv->rfkill);
|
rfkill_resume_polling(rdev->rfkill);
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(wiphy_rfkill_start_polling);
|
EXPORT_SYMBOL(wiphy_rfkill_start_polling);
|
||||||
|
|
||||||
void wiphy_rfkill_stop_polling(struct wiphy *wiphy)
|
void wiphy_rfkill_stop_polling(struct wiphy *wiphy)
|
||||||
{
|
{
|
||||||
struct cfg80211_registered_device *drv = wiphy_to_dev(wiphy);
|
struct cfg80211_registered_device *rdev = wiphy_to_dev(wiphy);
|
||||||
|
|
||||||
rfkill_pause_polling(drv->rfkill);
|
rfkill_pause_polling(rdev->rfkill);
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(wiphy_rfkill_stop_polling);
|
EXPORT_SYMBOL(wiphy_rfkill_stop_polling);
|
||||||
|
|
||||||
void wiphy_unregister(struct wiphy *wiphy)
|
void wiphy_unregister(struct wiphy *wiphy)
|
||||||
{
|
{
|
||||||
struct cfg80211_registered_device *drv = wiphy_to_dev(wiphy);
|
struct cfg80211_registered_device *rdev = wiphy_to_dev(wiphy);
|
||||||
|
|
||||||
rfkill_unregister(drv->rfkill);
|
rfkill_unregister(rdev->rfkill);
|
||||||
|
|
||||||
/* protect the device list */
|
/* protect the device list */
|
||||||
mutex_lock(&cfg80211_mutex);
|
mutex_lock(&cfg80211_mutex);
|
||||||
|
|
||||||
BUG_ON(!list_empty(&drv->netdev_list));
|
BUG_ON(!list_empty(&rdev->netdev_list));
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Try to grab drv->mtx. If a command is still in progress,
|
* Try to grab rdev->mtx. If a command is still in progress,
|
||||||
* hopefully the driver will refuse it since it's tearing
|
* hopefully the driver will refuse it since it's tearing
|
||||||
* down the device already. We wait for this command to complete
|
* down the device already. We wait for this command to complete
|
||||||
* before unlinking the item from the list.
|
* before unlinking the item from the list.
|
||||||
|
@ -539,38 +539,38 @@ void wiphy_unregister(struct wiphy *wiphy)
|
||||||
* get to lock contention here if userspace issues a command
|
* get to lock contention here if userspace issues a command
|
||||||
* that identified the hardware by wiphy index.
|
* that identified the hardware by wiphy index.
|
||||||
*/
|
*/
|
||||||
mutex_lock(&drv->mtx);
|
mutex_lock(&rdev->mtx);
|
||||||
/* unlock again before freeing */
|
/* unlock again before freeing */
|
||||||
mutex_unlock(&drv->mtx);
|
mutex_unlock(&rdev->mtx);
|
||||||
|
|
||||||
cancel_work_sync(&drv->conn_work);
|
cancel_work_sync(&rdev->conn_work);
|
||||||
cancel_work_sync(&drv->scan_done_wk);
|
cancel_work_sync(&rdev->scan_done_wk);
|
||||||
kfree(drv->scan_req);
|
kfree(rdev->scan_req);
|
||||||
flush_work(&drv->event_work);
|
flush_work(&rdev->event_work);
|
||||||
|
|
||||||
cfg80211_debugfs_drv_del(drv);
|
cfg80211_debugfs_rdev_del(rdev);
|
||||||
|
|
||||||
/* If this device got a regulatory hint tell core its
|
/* If this device got a regulatory hint tell core its
|
||||||
* free to listen now to a new shiny device regulatory hint */
|
* free to listen now to a new shiny device regulatory hint */
|
||||||
reg_device_remove(wiphy);
|
reg_device_remove(wiphy);
|
||||||
|
|
||||||
list_del(&drv->list);
|
list_del(&rdev->list);
|
||||||
device_del(&drv->wiphy.dev);
|
device_del(&rdev->wiphy.dev);
|
||||||
debugfs_remove(drv->wiphy.debugfsdir);
|
debugfs_remove(rdev->wiphy.debugfsdir);
|
||||||
|
|
||||||
mutex_unlock(&cfg80211_mutex);
|
mutex_unlock(&cfg80211_mutex);
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(wiphy_unregister);
|
EXPORT_SYMBOL(wiphy_unregister);
|
||||||
|
|
||||||
void cfg80211_dev_free(struct cfg80211_registered_device *drv)
|
void cfg80211_dev_free(struct cfg80211_registered_device *rdev)
|
||||||
{
|
{
|
||||||
struct cfg80211_internal_bss *scan, *tmp;
|
struct cfg80211_internal_bss *scan, *tmp;
|
||||||
rfkill_destroy(drv->rfkill);
|
rfkill_destroy(rdev->rfkill);
|
||||||
mutex_destroy(&drv->mtx);
|
mutex_destroy(&rdev->mtx);
|
||||||
mutex_destroy(&drv->devlist_mtx);
|
mutex_destroy(&rdev->devlist_mtx);
|
||||||
list_for_each_entry_safe(scan, tmp, &drv->bss_list, list)
|
list_for_each_entry_safe(scan, tmp, &rdev->bss_list, list)
|
||||||
cfg80211_put_bss(&scan->pub);
|
cfg80211_put_bss(&scan->pub);
|
||||||
kfree(drv);
|
kfree(rdev);
|
||||||
}
|
}
|
||||||
|
|
||||||
void wiphy_free(struct wiphy *wiphy)
|
void wiphy_free(struct wiphy *wiphy)
|
||||||
|
@ -581,10 +581,10 @@ EXPORT_SYMBOL(wiphy_free);
|
||||||
|
|
||||||
void wiphy_rfkill_set_hw_state(struct wiphy *wiphy, bool blocked)
|
void wiphy_rfkill_set_hw_state(struct wiphy *wiphy, bool blocked)
|
||||||
{
|
{
|
||||||
struct cfg80211_registered_device *drv = wiphy_to_dev(wiphy);
|
struct cfg80211_registered_device *rdev = wiphy_to_dev(wiphy);
|
||||||
|
|
||||||
if (rfkill_set_hw_state(drv->rfkill, blocked))
|
if (rfkill_set_hw_state(rdev->rfkill, blocked))
|
||||||
schedule_work(&drv->rfkill_sync);
|
schedule_work(&rdev->rfkill_sync);
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(wiphy_rfkill_set_hw_state);
|
EXPORT_SYMBOL(wiphy_rfkill_set_hw_state);
|
||||||
|
|
||||||
|
|
|
@ -97,13 +97,13 @@ bool wiphy_idx_valid(int wiphy_idx)
|
||||||
}
|
}
|
||||||
|
|
||||||
extern struct mutex cfg80211_mutex;
|
extern struct mutex cfg80211_mutex;
|
||||||
extern struct list_head cfg80211_drv_list;
|
extern struct list_head cfg80211_rdev_list;
|
||||||
|
|
||||||
#define assert_cfg80211_lock() WARN_ON(!mutex_is_locked(&cfg80211_mutex))
|
#define assert_cfg80211_lock() WARN_ON(!mutex_is_locked(&cfg80211_mutex))
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* You can use this to mark a wiphy_idx as not having an associated wiphy.
|
* You can use this to mark a wiphy_idx as not having an associated wiphy.
|
||||||
* It guarantees cfg80211_drv_by_wiphy_idx(wiphy_idx) will return NULL
|
* It guarantees cfg80211_rdev_by_wiphy_idx(wiphy_idx) will return NULL
|
||||||
*/
|
*/
|
||||||
#define WIPHY_IDX_STALE -1
|
#define WIPHY_IDX_STALE -1
|
||||||
|
|
||||||
|
@ -136,11 +136,11 @@ static inline void cfg80211_unhold_bss(struct cfg80211_internal_bss *bss)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
struct cfg80211_registered_device *cfg80211_drv_by_wiphy_idx(int wiphy_idx);
|
struct cfg80211_registered_device *cfg80211_rdev_by_wiphy_idx(int wiphy_idx);
|
||||||
int get_wiphy_idx(struct wiphy *wiphy);
|
int get_wiphy_idx(struct wiphy *wiphy);
|
||||||
|
|
||||||
struct cfg80211_registered_device *
|
struct cfg80211_registered_device *
|
||||||
__cfg80211_drv_from_info(struct genl_info *info);
|
__cfg80211_rdev_from_info(struct genl_info *info);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* This function returns a pointer to the driver
|
* This function returns a pointer to the driver
|
||||||
|
@ -153,7 +153,7 @@ __cfg80211_drv_from_info(struct genl_info *info);
|
||||||
*
|
*
|
||||||
* This is necessary because we need to lock the global
|
* This is necessary because we need to lock the global
|
||||||
* mutex to get an item off the list safely, and then
|
* mutex to get an item off the list safely, and then
|
||||||
* we lock the drv mutex so it doesn't go away under us.
|
* we lock the rdev mutex so it doesn't go away under us.
|
||||||
*
|
*
|
||||||
* We don't want to keep cfg80211_mutex locked
|
* We don't want to keep cfg80211_mutex locked
|
||||||
* for all the time in order to allow requests on
|
* for all the time in order to allow requests on
|
||||||
|
@ -165,22 +165,22 @@ __cfg80211_drv_from_info(struct genl_info *info);
|
||||||
extern struct cfg80211_registered_device *
|
extern struct cfg80211_registered_device *
|
||||||
cfg80211_get_dev_from_info(struct genl_info *info);
|
cfg80211_get_dev_from_info(struct genl_info *info);
|
||||||
|
|
||||||
/* requires cfg80211_drv_mutex to be held! */
|
/* requires cfg80211_rdev_mutex to be held! */
|
||||||
struct wiphy *wiphy_idx_to_wiphy(int wiphy_idx);
|
struct wiphy *wiphy_idx_to_wiphy(int wiphy_idx);
|
||||||
|
|
||||||
/* identical to cfg80211_get_dev_from_info but only operate on ifindex */
|
/* identical to cfg80211_get_dev_from_info but only operate on ifindex */
|
||||||
extern struct cfg80211_registered_device *
|
extern struct cfg80211_registered_device *
|
||||||
cfg80211_get_dev_from_ifindex(int ifindex);
|
cfg80211_get_dev_from_ifindex(int ifindex);
|
||||||
|
|
||||||
static inline void cfg80211_lock_rdev(struct cfg80211_registered_device *drv)
|
static inline void cfg80211_lock_rdev(struct cfg80211_registered_device *rdev)
|
||||||
{
|
{
|
||||||
mutex_lock(&drv->mtx);
|
mutex_lock(&rdev->mtx);
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void cfg80211_unlock_rdev(struct cfg80211_registered_device *drv)
|
static inline void cfg80211_unlock_rdev(struct cfg80211_registered_device *rdev)
|
||||||
{
|
{
|
||||||
BUG_ON(IS_ERR(drv) || !drv);
|
BUG_ON(IS_ERR(rdev) || !rdev);
|
||||||
mutex_unlock(&drv->mtx);
|
mutex_unlock(&rdev->mtx);
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void wdev_lock(struct wireless_dev *wdev)
|
static inline void wdev_lock(struct wireless_dev *wdev)
|
||||||
|
@ -240,9 +240,9 @@ struct cfg80211_event {
|
||||||
|
|
||||||
|
|
||||||
/* free object */
|
/* free object */
|
||||||
extern void cfg80211_dev_free(struct cfg80211_registered_device *drv);
|
extern void cfg80211_dev_free(struct cfg80211_registered_device *rdev);
|
||||||
|
|
||||||
extern int cfg80211_dev_rename(struct cfg80211_registered_device *drv,
|
extern int cfg80211_dev_rename(struct cfg80211_registered_device *rdev,
|
||||||
char *newname);
|
char *newname);
|
||||||
|
|
||||||
void ieee80211_set_bitrate_flags(struct wiphy *wiphy);
|
void ieee80211_set_bitrate_flags(struct wiphy *wiphy);
|
||||||
|
|
|
@ -104,15 +104,15 @@ static const struct file_operations ht40allow_map_ops = {
|
||||||
};
|
};
|
||||||
|
|
||||||
#define DEBUGFS_ADD(name) \
|
#define DEBUGFS_ADD(name) \
|
||||||
drv->debugfs.name = debugfs_create_file(#name, S_IRUGO, phyd, \
|
rdev->debugfs.name = debugfs_create_file(#name, S_IRUGO, phyd, \
|
||||||
&drv->wiphy, &name## _ops);
|
&rdev->wiphy, &name## _ops);
|
||||||
#define DEBUGFS_DEL(name) \
|
#define DEBUGFS_DEL(name) \
|
||||||
debugfs_remove(drv->debugfs.name); \
|
debugfs_remove(rdev->debugfs.name); \
|
||||||
drv->debugfs.name = NULL;
|
rdev->debugfs.name = NULL;
|
||||||
|
|
||||||
void cfg80211_debugfs_drv_add(struct cfg80211_registered_device *drv)
|
void cfg80211_debugfs_rdev_add(struct cfg80211_registered_device *rdev)
|
||||||
{
|
{
|
||||||
struct dentry *phyd = drv->wiphy.debugfsdir;
|
struct dentry *phyd = rdev->wiphy.debugfsdir;
|
||||||
|
|
||||||
DEBUGFS_ADD(rts_threshold);
|
DEBUGFS_ADD(rts_threshold);
|
||||||
DEBUGFS_ADD(fragmentation_threshold);
|
DEBUGFS_ADD(fragmentation_threshold);
|
||||||
|
@ -121,7 +121,7 @@ void cfg80211_debugfs_drv_add(struct cfg80211_registered_device *drv)
|
||||||
DEBUGFS_ADD(ht40allow_map);
|
DEBUGFS_ADD(ht40allow_map);
|
||||||
}
|
}
|
||||||
|
|
||||||
void cfg80211_debugfs_drv_del(struct cfg80211_registered_device *drv)
|
void cfg80211_debugfs_rdev_del(struct cfg80211_registered_device *rdev)
|
||||||
{
|
{
|
||||||
DEBUGFS_DEL(rts_threshold);
|
DEBUGFS_DEL(rts_threshold);
|
||||||
DEBUGFS_DEL(fragmentation_threshold);
|
DEBUGFS_DEL(fragmentation_threshold);
|
||||||
|
|
|
@ -2,13 +2,13 @@
|
||||||
#define __CFG80211_DEBUGFS_H
|
#define __CFG80211_DEBUGFS_H
|
||||||
|
|
||||||
#ifdef CONFIG_CFG80211_DEBUGFS
|
#ifdef CONFIG_CFG80211_DEBUGFS
|
||||||
void cfg80211_debugfs_drv_add(struct cfg80211_registered_device *drv);
|
void cfg80211_debugfs_rdev_add(struct cfg80211_registered_device *rdev);
|
||||||
void cfg80211_debugfs_drv_del(struct cfg80211_registered_device *drv);
|
void cfg80211_debugfs_rdev_del(struct cfg80211_registered_device *rdev);
|
||||||
#else
|
#else
|
||||||
static inline
|
static inline
|
||||||
void cfg80211_debugfs_drv_add(struct cfg80211_registered_device *drv) {}
|
void cfg80211_debugfs_rdev_add(struct cfg80211_registered_device *rdev) {}
|
||||||
static inline
|
static inline
|
||||||
void cfg80211_debugfs_drv_del(struct cfg80211_registered_device *drv) {}
|
void cfg80211_debugfs_rdev_del(struct cfg80211_registered_device *rdev) {}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif /* __CFG80211_DEBUGFS_H */
|
#endif /* __CFG80211_DEBUGFS_H */
|
||||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -1061,10 +1061,10 @@ static bool ignore_reg_update(struct wiphy *wiphy,
|
||||||
|
|
||||||
static void update_all_wiphy_regulatory(enum nl80211_reg_initiator initiator)
|
static void update_all_wiphy_regulatory(enum nl80211_reg_initiator initiator)
|
||||||
{
|
{
|
||||||
struct cfg80211_registered_device *drv;
|
struct cfg80211_registered_device *rdev;
|
||||||
|
|
||||||
list_for_each_entry(drv, &cfg80211_drv_list, list)
|
list_for_each_entry(rdev, &cfg80211_rdev_list, list)
|
||||||
wiphy_update_regulatory(&drv->wiphy, initiator);
|
wiphy_update_regulatory(&rdev->wiphy, initiator);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void handle_reg_beacon(struct wiphy *wiphy,
|
static void handle_reg_beacon(struct wiphy *wiphy,
|
||||||
|
@ -1614,7 +1614,7 @@ static void reg_process_pending_hints(void)
|
||||||
/* Processes beacon hints -- this has nothing to do with country IEs */
|
/* Processes beacon hints -- this has nothing to do with country IEs */
|
||||||
static void reg_process_pending_beacon_hints(void)
|
static void reg_process_pending_beacon_hints(void)
|
||||||
{
|
{
|
||||||
struct cfg80211_registered_device *drv;
|
struct cfg80211_registered_device *rdev;
|
||||||
struct reg_beacon *pending_beacon, *tmp;
|
struct reg_beacon *pending_beacon, *tmp;
|
||||||
|
|
||||||
mutex_lock(&cfg80211_mutex);
|
mutex_lock(&cfg80211_mutex);
|
||||||
|
@ -1633,8 +1633,8 @@ static void reg_process_pending_beacon_hints(void)
|
||||||
list_del_init(&pending_beacon->list);
|
list_del_init(&pending_beacon->list);
|
||||||
|
|
||||||
/* Applies the beacon hint to current wiphys */
|
/* Applies the beacon hint to current wiphys */
|
||||||
list_for_each_entry(drv, &cfg80211_drv_list, list)
|
list_for_each_entry(rdev, &cfg80211_rdev_list, list)
|
||||||
wiphy_update_new_beacon(&drv->wiphy, pending_beacon);
|
wiphy_update_new_beacon(&rdev->wiphy, pending_beacon);
|
||||||
|
|
||||||
/* Remembers the beacon hint for new wiphys or reg changes */
|
/* Remembers the beacon hint for new wiphys or reg changes */
|
||||||
list_add_tail(&pending_beacon->list, ®_beacon_list);
|
list_add_tail(&pending_beacon->list, ®_beacon_list);
|
||||||
|
@ -1814,23 +1814,23 @@ void regulatory_hint_11d(struct wiphy *wiphy,
|
||||||
if (likely(last_request->initiator ==
|
if (likely(last_request->initiator ==
|
||||||
NL80211_REGDOM_SET_BY_COUNTRY_IE &&
|
NL80211_REGDOM_SET_BY_COUNTRY_IE &&
|
||||||
wiphy_idx_valid(last_request->wiphy_idx))) {
|
wiphy_idx_valid(last_request->wiphy_idx))) {
|
||||||
struct cfg80211_registered_device *drv_last_ie;
|
struct cfg80211_registered_device *rdev_last_ie;
|
||||||
|
|
||||||
drv_last_ie =
|
rdev_last_ie =
|
||||||
cfg80211_drv_by_wiphy_idx(last_request->wiphy_idx);
|
cfg80211_rdev_by_wiphy_idx(last_request->wiphy_idx);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Lets keep this simple -- we trust the first AP
|
* Lets keep this simple -- we trust the first AP
|
||||||
* after we intersect with CRDA
|
* after we intersect with CRDA
|
||||||
*/
|
*/
|
||||||
if (likely(&drv_last_ie->wiphy == wiphy)) {
|
if (likely(&rdev_last_ie->wiphy == wiphy)) {
|
||||||
/*
|
/*
|
||||||
* Ignore IEs coming in on this wiphy with
|
* Ignore IEs coming in on this wiphy with
|
||||||
* the same alpha2 and environment cap
|
* the same alpha2 and environment cap
|
||||||
*/
|
*/
|
||||||
if (likely(alpha2_equal(drv_last_ie->country_ie_alpha2,
|
if (likely(alpha2_equal(rdev_last_ie->country_ie_alpha2,
|
||||||
alpha2) &&
|
alpha2) &&
|
||||||
env == drv_last_ie->env)) {
|
env == rdev_last_ie->env)) {
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
/*
|
/*
|
||||||
|
@ -1846,9 +1846,9 @@ void regulatory_hint_11d(struct wiphy *wiphy,
|
||||||
* Ignore IEs coming in on two separate wiphys with
|
* Ignore IEs coming in on two separate wiphys with
|
||||||
* the same alpha2 and environment cap
|
* the same alpha2 and environment cap
|
||||||
*/
|
*/
|
||||||
if (likely(alpha2_equal(drv_last_ie->country_ie_alpha2,
|
if (likely(alpha2_equal(rdev_last_ie->country_ie_alpha2,
|
||||||
alpha2) &&
|
alpha2) &&
|
||||||
env == drv_last_ie->env)) {
|
env == rdev_last_ie->env)) {
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
/* We could potentially intersect though */
|
/* We could potentially intersect though */
|
||||||
|
@ -1995,14 +1995,14 @@ static void print_regdomain(const struct ieee80211_regdomain *rd)
|
||||||
|
|
||||||
if (last_request->initiator ==
|
if (last_request->initiator ==
|
||||||
NL80211_REGDOM_SET_BY_COUNTRY_IE) {
|
NL80211_REGDOM_SET_BY_COUNTRY_IE) {
|
||||||
struct cfg80211_registered_device *drv;
|
struct cfg80211_registered_device *rdev;
|
||||||
drv = cfg80211_drv_by_wiphy_idx(
|
rdev = cfg80211_rdev_by_wiphy_idx(
|
||||||
last_request->wiphy_idx);
|
last_request->wiphy_idx);
|
||||||
if (drv) {
|
if (rdev) {
|
||||||
printk(KERN_INFO "cfg80211: Current regulatory "
|
printk(KERN_INFO "cfg80211: Current regulatory "
|
||||||
"domain updated by AP to: %c%c\n",
|
"domain updated by AP to: %c%c\n",
|
||||||
drv->country_ie_alpha2[0],
|
rdev->country_ie_alpha2[0],
|
||||||
drv->country_ie_alpha2[1]);
|
rdev->country_ie_alpha2[1]);
|
||||||
} else
|
} else
|
||||||
printk(KERN_INFO "cfg80211: Current regulatory "
|
printk(KERN_INFO "cfg80211: Current regulatory "
|
||||||
"domain intersected: \n");
|
"domain intersected: \n");
|
||||||
|
@ -2063,7 +2063,7 @@ static inline void reg_country_ie_process_debug(
|
||||||
static int __set_regdom(const struct ieee80211_regdomain *rd)
|
static int __set_regdom(const struct ieee80211_regdomain *rd)
|
||||||
{
|
{
|
||||||
const struct ieee80211_regdomain *intersected_rd = NULL;
|
const struct ieee80211_regdomain *intersected_rd = NULL;
|
||||||
struct cfg80211_registered_device *drv = NULL;
|
struct cfg80211_registered_device *rdev = NULL;
|
||||||
struct wiphy *request_wiphy;
|
struct wiphy *request_wiphy;
|
||||||
/* Some basic sanity checks first */
|
/* Some basic sanity checks first */
|
||||||
|
|
||||||
|
@ -2202,11 +2202,11 @@ static int __set_regdom(const struct ieee80211_regdomain *rd)
|
||||||
if (!intersected_rd)
|
if (!intersected_rd)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
drv = wiphy_to_dev(request_wiphy);
|
rdev = wiphy_to_dev(request_wiphy);
|
||||||
|
|
||||||
drv->country_ie_alpha2[0] = rd->alpha2[0];
|
rdev->country_ie_alpha2[0] = rd->alpha2[0];
|
||||||
drv->country_ie_alpha2[1] = rd->alpha2[1];
|
rdev->country_ie_alpha2[1] = rd->alpha2[1];
|
||||||
drv->env = last_request->country_ie_env;
|
rdev->env = last_request->country_ie_env;
|
||||||
|
|
||||||
BUG_ON(intersected_rd == rd);
|
BUG_ON(intersected_rd == rd);
|
||||||
|
|
||||||
|
|
|
@ -33,15 +33,15 @@ struct cfg80211_conn {
|
||||||
|
|
||||||
static int cfg80211_conn_scan(struct wireless_dev *wdev)
|
static int cfg80211_conn_scan(struct wireless_dev *wdev)
|
||||||
{
|
{
|
||||||
struct cfg80211_registered_device *drv = wiphy_to_dev(wdev->wiphy);
|
struct cfg80211_registered_device *rdev = wiphy_to_dev(wdev->wiphy);
|
||||||
struct cfg80211_scan_request *request;
|
struct cfg80211_scan_request *request;
|
||||||
int n_channels, err;
|
int n_channels, err;
|
||||||
|
|
||||||
ASSERT_RTNL();
|
ASSERT_RTNL();
|
||||||
ASSERT_RDEV_LOCK(drv);
|
ASSERT_RDEV_LOCK(rdev);
|
||||||
ASSERT_WDEV_LOCK(wdev);
|
ASSERT_WDEV_LOCK(wdev);
|
||||||
|
|
||||||
if (drv->scan_req)
|
if (rdev->scan_req)
|
||||||
return -EBUSY;
|
return -EBUSY;
|
||||||
|
|
||||||
if (wdev->conn->params.channel) {
|
if (wdev->conn->params.channel) {
|
||||||
|
@ -87,16 +87,16 @@ static int cfg80211_conn_scan(struct wireless_dev *wdev)
|
||||||
request->ssids[0].ssid_len = wdev->conn->params.ssid_len;
|
request->ssids[0].ssid_len = wdev->conn->params.ssid_len;
|
||||||
|
|
||||||
request->ifidx = wdev->netdev->ifindex;
|
request->ifidx = wdev->netdev->ifindex;
|
||||||
request->wiphy = &drv->wiphy;
|
request->wiphy = &rdev->wiphy;
|
||||||
|
|
||||||
drv->scan_req = request;
|
rdev->scan_req = request;
|
||||||
|
|
||||||
err = drv->ops->scan(wdev->wiphy, wdev->netdev, request);
|
err = rdev->ops->scan(wdev->wiphy, wdev->netdev, request);
|
||||||
if (!err) {
|
if (!err) {
|
||||||
wdev->conn->state = CFG80211_CONN_SCANNING;
|
wdev->conn->state = CFG80211_CONN_SCANNING;
|
||||||
nl80211_send_scan_start(drv, wdev->netdev);
|
nl80211_send_scan_start(rdev, wdev->netdev);
|
||||||
} else {
|
} else {
|
||||||
drv->scan_req = NULL;
|
rdev->scan_req = NULL;
|
||||||
kfree(request);
|
kfree(request);
|
||||||
}
|
}
|
||||||
return err;
|
return err;
|
||||||
|
@ -104,7 +104,7 @@ static int cfg80211_conn_scan(struct wireless_dev *wdev)
|
||||||
|
|
||||||
static int cfg80211_conn_do_work(struct wireless_dev *wdev)
|
static int cfg80211_conn_do_work(struct wireless_dev *wdev)
|
||||||
{
|
{
|
||||||
struct cfg80211_registered_device *drv = wiphy_to_dev(wdev->wiphy);
|
struct cfg80211_registered_device *rdev = wiphy_to_dev(wdev->wiphy);
|
||||||
struct cfg80211_connect_params *params;
|
struct cfg80211_connect_params *params;
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
|
@ -119,15 +119,15 @@ static int cfg80211_conn_do_work(struct wireless_dev *wdev)
|
||||||
case CFG80211_CONN_SCAN_AGAIN:
|
case CFG80211_CONN_SCAN_AGAIN:
|
||||||
return cfg80211_conn_scan(wdev);
|
return cfg80211_conn_scan(wdev);
|
||||||
case CFG80211_CONN_AUTHENTICATE_NEXT:
|
case CFG80211_CONN_AUTHENTICATE_NEXT:
|
||||||
BUG_ON(!drv->ops->auth);
|
BUG_ON(!rdev->ops->auth);
|
||||||
wdev->conn->state = CFG80211_CONN_AUTHENTICATING;
|
wdev->conn->state = CFG80211_CONN_AUTHENTICATING;
|
||||||
return __cfg80211_mlme_auth(drv, wdev->netdev,
|
return __cfg80211_mlme_auth(rdev, wdev->netdev,
|
||||||
params->channel, params->auth_type,
|
params->channel, params->auth_type,
|
||||||
params->bssid,
|
params->bssid,
|
||||||
params->ssid, params->ssid_len,
|
params->ssid, params->ssid_len,
|
||||||
NULL, 0);
|
NULL, 0);
|
||||||
case CFG80211_CONN_ASSOCIATE_NEXT:
|
case CFG80211_CONN_ASSOCIATE_NEXT:
|
||||||
BUG_ON(!drv->ops->assoc);
|
BUG_ON(!rdev->ops->assoc);
|
||||||
wdev->conn->state = CFG80211_CONN_ASSOCIATING;
|
wdev->conn->state = CFG80211_CONN_ASSOCIATING;
|
||||||
/*
|
/*
|
||||||
* We could, later, implement roaming here and then actually
|
* We could, later, implement roaming here and then actually
|
||||||
|
@ -135,14 +135,14 @@ static int cfg80211_conn_do_work(struct wireless_dev *wdev)
|
||||||
* that some APs don't like that -- so we'd need to retry
|
* that some APs don't like that -- so we'd need to retry
|
||||||
* the association.
|
* the association.
|
||||||
*/
|
*/
|
||||||
err = __cfg80211_mlme_assoc(drv, wdev->netdev,
|
err = __cfg80211_mlme_assoc(rdev, wdev->netdev,
|
||||||
params->channel, params->bssid,
|
params->channel, params->bssid,
|
||||||
NULL,
|
NULL,
|
||||||
params->ssid, params->ssid_len,
|
params->ssid, params->ssid_len,
|
||||||
params->ie, params->ie_len,
|
params->ie, params->ie_len,
|
||||||
false, ¶ms->crypto);
|
false, ¶ms->crypto);
|
||||||
if (err)
|
if (err)
|
||||||
__cfg80211_mlme_deauth(drv, wdev->netdev, params->bssid,
|
__cfg80211_mlme_deauth(rdev, wdev->netdev, params->bssid,
|
||||||
NULL, 0,
|
NULL, 0,
|
||||||
WLAN_REASON_DEAUTH_LEAVING);
|
WLAN_REASON_DEAUTH_LEAVING);
|
||||||
return err;
|
return err;
|
||||||
|
@ -153,15 +153,15 @@ static int cfg80211_conn_do_work(struct wireless_dev *wdev)
|
||||||
|
|
||||||
void cfg80211_conn_work(struct work_struct *work)
|
void cfg80211_conn_work(struct work_struct *work)
|
||||||
{
|
{
|
||||||
struct cfg80211_registered_device *drv =
|
struct cfg80211_registered_device *rdev =
|
||||||
container_of(work, struct cfg80211_registered_device, conn_work);
|
container_of(work, struct cfg80211_registered_device, conn_work);
|
||||||
struct wireless_dev *wdev;
|
struct wireless_dev *wdev;
|
||||||
|
|
||||||
rtnl_lock();
|
rtnl_lock();
|
||||||
cfg80211_lock_rdev(drv);
|
cfg80211_lock_rdev(rdev);
|
||||||
mutex_lock(&drv->devlist_mtx);
|
mutex_lock(&rdev->devlist_mtx);
|
||||||
|
|
||||||
list_for_each_entry(wdev, &drv->netdev_list, list) {
|
list_for_each_entry(wdev, &rdev->netdev_list, list) {
|
||||||
wdev_lock(wdev);
|
wdev_lock(wdev);
|
||||||
if (!netif_running(wdev->netdev)) {
|
if (!netif_running(wdev->netdev)) {
|
||||||
wdev_unlock(wdev);
|
wdev_unlock(wdev);
|
||||||
|
@ -181,14 +181,14 @@ void cfg80211_conn_work(struct work_struct *work)
|
||||||
wdev_unlock(wdev);
|
wdev_unlock(wdev);
|
||||||
}
|
}
|
||||||
|
|
||||||
mutex_unlock(&drv->devlist_mtx);
|
mutex_unlock(&rdev->devlist_mtx);
|
||||||
cfg80211_unlock_rdev(drv);
|
cfg80211_unlock_rdev(rdev);
|
||||||
rtnl_unlock();
|
rtnl_unlock();
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool cfg80211_get_conn_bss(struct wireless_dev *wdev)
|
static bool cfg80211_get_conn_bss(struct wireless_dev *wdev)
|
||||||
{
|
{
|
||||||
struct cfg80211_registered_device *drv = wiphy_to_dev(wdev->wiphy);
|
struct cfg80211_registered_device *rdev = wiphy_to_dev(wdev->wiphy);
|
||||||
struct cfg80211_bss *bss;
|
struct cfg80211_bss *bss;
|
||||||
u16 capa = WLAN_CAPABILITY_ESS;
|
u16 capa = WLAN_CAPABILITY_ESS;
|
||||||
|
|
||||||
|
@ -209,7 +209,7 @@ static bool cfg80211_get_conn_bss(struct wireless_dev *wdev)
|
||||||
wdev->conn->params.bssid = wdev->conn->bssid;
|
wdev->conn->params.bssid = wdev->conn->bssid;
|
||||||
wdev->conn->params.channel = bss->channel;
|
wdev->conn->params.channel = bss->channel;
|
||||||
wdev->conn->state = CFG80211_CONN_AUTHENTICATE_NEXT;
|
wdev->conn->state = CFG80211_CONN_AUTHENTICATE_NEXT;
|
||||||
schedule_work(&drv->conn_work);
|
schedule_work(&rdev->conn_work);
|
||||||
|
|
||||||
cfg80211_put_bss(bss);
|
cfg80211_put_bss(bss);
|
||||||
return true;
|
return true;
|
||||||
|
@ -218,7 +218,7 @@ static bool cfg80211_get_conn_bss(struct wireless_dev *wdev)
|
||||||
static void __cfg80211_sme_scan_done(struct net_device *dev)
|
static void __cfg80211_sme_scan_done(struct net_device *dev)
|
||||||
{
|
{
|
||||||
struct wireless_dev *wdev = dev->ieee80211_ptr;
|
struct wireless_dev *wdev = dev->ieee80211_ptr;
|
||||||
struct cfg80211_registered_device *drv = wiphy_to_dev(wdev->wiphy);
|
struct cfg80211_registered_device *rdev = wiphy_to_dev(wdev->wiphy);
|
||||||
|
|
||||||
ASSERT_WDEV_LOCK(wdev);
|
ASSERT_WDEV_LOCK(wdev);
|
||||||
|
|
||||||
|
@ -235,7 +235,7 @@ static void __cfg80211_sme_scan_done(struct net_device *dev)
|
||||||
if (!cfg80211_get_conn_bss(wdev)) {
|
if (!cfg80211_get_conn_bss(wdev)) {
|
||||||
/* not found */
|
/* not found */
|
||||||
if (wdev->conn->state == CFG80211_CONN_SCAN_AGAIN)
|
if (wdev->conn->state == CFG80211_CONN_SCAN_AGAIN)
|
||||||
schedule_work(&drv->conn_work);
|
schedule_work(&rdev->conn_work);
|
||||||
else
|
else
|
||||||
__cfg80211_connect_result(
|
__cfg80211_connect_result(
|
||||||
wdev->netdev,
|
wdev->netdev,
|
||||||
|
|
Loading…
Reference in a new issue