Lines Matching refs:rdev
56 struct cfg80211_registered_device *result = NULL, *rdev; in cfg80211_rdev_by_wiphy_idx() local
60 list_for_each_entry(rdev, &cfg80211_rdev_list, list) { in cfg80211_rdev_by_wiphy_idx()
61 if (rdev->wiphy_idx == wiphy_idx) { in cfg80211_rdev_by_wiphy_idx()
62 result = rdev; in cfg80211_rdev_by_wiphy_idx()
72 struct cfg80211_registered_device *rdev = wiphy_to_rdev(wiphy); in get_wiphy_idx() local
74 return rdev->wiphy_idx; in get_wiphy_idx()
79 struct cfg80211_registered_device *rdev; in wiphy_idx_to_wiphy() local
83 rdev = cfg80211_rdev_by_wiphy_idx(wiphy_idx); in wiphy_idx_to_wiphy()
84 if (!rdev) in wiphy_idx_to_wiphy()
86 return &rdev->wiphy; in wiphy_idx_to_wiphy()
89 static int cfg80211_dev_check_name(struct cfg80211_registered_device *rdev, in cfg80211_dev_check_name() argument
99 if (taken == strlen(newname) && wiphy_idx != rdev->wiphy_idx) { in cfg80211_dev_check_name()
120 int cfg80211_dev_rename(struct cfg80211_registered_device *rdev, in cfg80211_dev_rename() argument
128 if (strcmp(newname, wiphy_name(&rdev->wiphy)) == 0) in cfg80211_dev_rename()
131 result = cfg80211_dev_check_name(rdev, newname); in cfg80211_dev_rename()
135 result = device_rename(&rdev->wiphy.dev, newname); in cfg80211_dev_rename()
139 if (rdev->wiphy.debugfsdir && in cfg80211_dev_rename()
140 !debugfs_rename(rdev->wiphy.debugfsdir->d_parent, in cfg80211_dev_rename()
141 rdev->wiphy.debugfsdir, in cfg80211_dev_rename()
142 rdev->wiphy.debugfsdir->d_parent, in cfg80211_dev_rename()
146 nl80211_notify_wiphy(rdev, NL80211_CMD_NEW_WIPHY); in cfg80211_dev_rename()
151 int cfg80211_switch_netns(struct cfg80211_registered_device *rdev, in cfg80211_switch_netns() argument
157 if (!(rdev->wiphy.flags & WIPHY_FLAG_NETNS_OK)) in cfg80211_switch_netns()
160 list_for_each_entry(wdev, &rdev->wdev_list, list) { in cfg80211_switch_netns()
172 net = wiphy_net(&rdev->wiphy); in cfg80211_switch_netns()
174 list_for_each_entry_continue_reverse(wdev, &rdev->wdev_list, in cfg80211_switch_netns()
188 wiphy_net_set(&rdev->wiphy, net); in cfg80211_switch_netns()
190 err = device_rename(&rdev->wiphy.dev, dev_name(&rdev->wiphy.dev)); in cfg80211_switch_netns()
198 struct cfg80211_registered_device *rdev = data; in cfg80211_rfkill_poll() local
200 rdev_rfkill_poll(rdev); in cfg80211_rfkill_poll()
203 void cfg80211_stop_p2p_device(struct cfg80211_registered_device *rdev, in cfg80211_stop_p2p_device() argument
214 rdev_stop_p2p_device(rdev, wdev); in cfg80211_stop_p2p_device()
217 rdev->opencount--; in cfg80211_stop_p2p_device()
219 if (rdev->scan_req && rdev->scan_req->wdev == wdev) { in cfg80211_stop_p2p_device()
220 if (WARN_ON(!rdev->scan_req->notified)) in cfg80211_stop_p2p_device()
221 rdev->scan_req->aborted = true; in cfg80211_stop_p2p_device()
222 ___cfg80211_scan_done(rdev, false); in cfg80211_stop_p2p_device()
228 struct cfg80211_registered_device *rdev = wiphy_to_rdev(wiphy); in cfg80211_shutdown_all_interfaces() local
233 list_for_each_entry(wdev, &rdev->wdev_list, list) { in cfg80211_shutdown_all_interfaces()
241 cfg80211_stop_p2p_device(rdev, wdev); in cfg80211_shutdown_all_interfaces()
252 struct cfg80211_registered_device *rdev = data; in cfg80211_rfkill_set_block() local
258 cfg80211_shutdown_all_interfaces(&rdev->wiphy); in cfg80211_rfkill_set_block()
266 struct cfg80211_registered_device *rdev; in cfg80211_rfkill_sync_work() local
268 rdev = container_of(work, struct cfg80211_registered_device, rfkill_sync); in cfg80211_rfkill_sync_work()
269 cfg80211_rfkill_set_block(rdev, rfkill_blocked(rdev->rfkill)); in cfg80211_rfkill_sync_work()
274 struct cfg80211_registered_device *rdev; in cfg80211_event_work() local
276 rdev = container_of(work, struct cfg80211_registered_device, in cfg80211_event_work()
280 cfg80211_process_rdev_events(rdev); in cfg80211_event_work()
284 void cfg80211_destroy_ifaces(struct cfg80211_registered_device *rdev) in cfg80211_destroy_ifaces() argument
290 spin_lock_irq(&rdev->destroy_list_lock); in cfg80211_destroy_ifaces()
291 while ((item = list_first_entry_or_null(&rdev->destroy_list, in cfg80211_destroy_ifaces()
299 spin_unlock_irq(&rdev->destroy_list_lock); in cfg80211_destroy_ifaces()
301 list_for_each_entry_safe(wdev, tmp, &rdev->wdev_list, list) { in cfg80211_destroy_ifaces()
303 rdev_del_virtual_intf(rdev, wdev); in cfg80211_destroy_ifaces()
306 spin_lock_irq(&rdev->destroy_list_lock); in cfg80211_destroy_ifaces()
308 spin_unlock_irq(&rdev->destroy_list_lock); in cfg80211_destroy_ifaces()
313 struct cfg80211_registered_device *rdev; in cfg80211_destroy_iface_wk() local
315 rdev = container_of(work, struct cfg80211_registered_device, in cfg80211_destroy_iface_wk()
319 cfg80211_destroy_ifaces(rdev); in cfg80211_destroy_iface_wk()
325 struct cfg80211_registered_device *rdev; in cfg80211_sched_scan_stop_wk() local
327 rdev = container_of(work, struct cfg80211_registered_device, in cfg80211_sched_scan_stop_wk()
332 __cfg80211_stop_sched_scan(rdev, false); in cfg80211_sched_scan_stop_wk()
344 struct cfg80211_registered_device *rdev; in wiphy_new_nm() local
356 alloc_size = sizeof(*rdev) + sizeof_priv; in wiphy_new_nm()
358 rdev = kzalloc(alloc_size, GFP_KERNEL); in wiphy_new_nm()
359 if (!rdev) in wiphy_new_nm()
362 rdev->ops = ops; in wiphy_new_nm()
364 rdev->wiphy_idx = atomic_inc_return(&wiphy_counter); in wiphy_new_nm()
366 if (unlikely(rdev->wiphy_idx < 0)) { in wiphy_new_nm()
369 kfree(rdev); in wiphy_new_nm()
374 rdev->wiphy_idx--; in wiphy_new_nm()
381 rv = cfg80211_dev_check_name(rdev, requested_name); in wiphy_new_nm()
388 rv = dev_set_name(&rdev->wiphy.dev, "%s", requested_name); in wiphy_new_nm()
400 dev_set_name(&rdev->wiphy.dev, PHY_NAME "%d", rdev->wiphy_idx); in wiphy_new_nm()
403 INIT_LIST_HEAD(&rdev->wdev_list); in wiphy_new_nm()
404 INIT_LIST_HEAD(&rdev->beacon_registrations); in wiphy_new_nm()
405 spin_lock_init(&rdev->beacon_registrations_lock); in wiphy_new_nm()
406 spin_lock_init(&rdev->bss_lock); in wiphy_new_nm()
407 INIT_LIST_HEAD(&rdev->bss_list); in wiphy_new_nm()
408 INIT_WORK(&rdev->scan_done_wk, __cfg80211_scan_done); in wiphy_new_nm()
409 INIT_WORK(&rdev->sched_scan_results_wk, __cfg80211_sched_scan_results); in wiphy_new_nm()
410 INIT_LIST_HEAD(&rdev->mlme_unreg); in wiphy_new_nm()
411 spin_lock_init(&rdev->mlme_unreg_lock); in wiphy_new_nm()
412 INIT_WORK(&rdev->mlme_unreg_wk, cfg80211_mlme_unreg_wk); in wiphy_new_nm()
413 INIT_DELAYED_WORK(&rdev->dfs_update_channels_wk, in wiphy_new_nm()
416 rdev->wiphy.wext = &cfg80211_wext_handler; in wiphy_new_nm()
419 device_initialize(&rdev->wiphy.dev); in wiphy_new_nm()
420 rdev->wiphy.dev.class = &ieee80211_class; in wiphy_new_nm()
421 rdev->wiphy.dev.platform_data = rdev; in wiphy_new_nm()
422 device_enable_async_suspend(&rdev->wiphy.dev); in wiphy_new_nm()
424 INIT_LIST_HEAD(&rdev->destroy_list); in wiphy_new_nm()
425 spin_lock_init(&rdev->destroy_list_lock); in wiphy_new_nm()
426 INIT_WORK(&rdev->destroy_work, cfg80211_destroy_iface_wk); in wiphy_new_nm()
427 INIT_WORK(&rdev->sched_scan_stop_wk, cfg80211_sched_scan_stop_wk); in wiphy_new_nm()
430 rdev->wiphy.flags |= WIPHY_FLAG_PS_ON_BY_DEFAULT; in wiphy_new_nm()
433 wiphy_net_set(&rdev->wiphy, &init_net); in wiphy_new_nm()
435 rdev->rfkill_ops.set_block = cfg80211_rfkill_set_block; in wiphy_new_nm()
436 rdev->rfkill = rfkill_alloc(dev_name(&rdev->wiphy.dev), in wiphy_new_nm()
437 &rdev->wiphy.dev, RFKILL_TYPE_WLAN, in wiphy_new_nm()
438 &rdev->rfkill_ops, rdev); in wiphy_new_nm()
440 if (!rdev->rfkill) { in wiphy_new_nm()
441 kfree(rdev); in wiphy_new_nm()
445 INIT_WORK(&rdev->rfkill_sync, cfg80211_rfkill_sync_work); in wiphy_new_nm()
446 INIT_WORK(&rdev->conn_work, cfg80211_conn_work); in wiphy_new_nm()
447 INIT_WORK(&rdev->event_work, cfg80211_event_work); in wiphy_new_nm()
449 init_waitqueue_head(&rdev->dev_wait); in wiphy_new_nm()
456 rdev->wiphy.retry_short = 7; in wiphy_new_nm()
457 rdev->wiphy.retry_long = 4; in wiphy_new_nm()
458 rdev->wiphy.frag_threshold = (u32) -1; in wiphy_new_nm()
459 rdev->wiphy.rts_threshold = (u32) -1; in wiphy_new_nm()
460 rdev->wiphy.coverage_class = 0; in wiphy_new_nm()
462 rdev->wiphy.max_num_csa_counters = 1; in wiphy_new_nm()
464 rdev->wiphy.max_sched_scan_plans = 1; in wiphy_new_nm()
465 rdev->wiphy.max_sched_scan_plan_interval = U32_MAX; in wiphy_new_nm()
467 return &rdev->wiphy; in wiphy_new_nm()
548 struct cfg80211_registered_device *rdev = wiphy_to_rdev(wiphy); in wiphy_register() local
567 (!rdev->ops->tdls_channel_switch || in wiphy_register()
568 !rdev->ops->tdls_cancel_channel_switch))) in wiphy_register()
616 !rdev->ops->set_mac_acl))) in wiphy_register()
687 if (WARN_ON(rdev->wiphy.wowlan && rdev->wiphy.wowlan->n_patterns && in wiphy_register()
688 (!rdev->wiphy.wowlan->pattern_min_len || in wiphy_register()
689 rdev->wiphy.wowlan->pattern_min_len > in wiphy_register()
690 rdev->wiphy.wowlan->pattern_max_len))) in wiphy_register()
697 rdev->wiphy.features |= NL80211_FEATURE_SCAN_FLUSH; in wiphy_register()
700 res = device_add(&rdev->wiphy.dev); in wiphy_register()
709 list_add_rcu(&rdev->list, &cfg80211_rdev_list); in wiphy_register()
713 rdev->wiphy.debugfsdir = in wiphy_register()
714 debugfs_create_dir(wiphy_name(&rdev->wiphy), in wiphy_register()
716 if (IS_ERR(rdev->wiphy.debugfsdir)) in wiphy_register()
717 rdev->wiphy.debugfsdir = NULL; in wiphy_register()
719 cfg80211_debugfs_rdev_add(rdev); in wiphy_register()
720 nl80211_notify_wiphy(rdev, NL80211_CMD_NEW_WIPHY); in wiphy_register()
733 rdev->wiphy.registered = true; in wiphy_register()
736 res = rfkill_register(rdev->rfkill); in wiphy_register()
738 rfkill_destroy(rdev->rfkill); in wiphy_register()
739 rdev->rfkill = NULL; in wiphy_register()
740 wiphy_unregister(&rdev->wiphy); in wiphy_register()
750 struct cfg80211_registered_device *rdev = wiphy_to_rdev(wiphy); in wiphy_rfkill_start_polling() local
752 if (!rdev->ops->rfkill_poll) in wiphy_rfkill_start_polling()
754 rdev->rfkill_ops.poll = cfg80211_rfkill_poll; in wiphy_rfkill_start_polling()
755 rfkill_resume_polling(rdev->rfkill); in wiphy_rfkill_start_polling()
761 struct cfg80211_registered_device *rdev = wiphy_to_rdev(wiphy); in wiphy_rfkill_stop_polling() local
763 rfkill_pause_polling(rdev->rfkill); in wiphy_rfkill_stop_polling()
769 struct cfg80211_registered_device *rdev = wiphy_to_rdev(wiphy); in wiphy_unregister() local
771 wait_event(rdev->dev_wait, ({ in wiphy_unregister()
774 __count = rdev->opencount; in wiphy_unregister()
778 if (rdev->rfkill) in wiphy_unregister()
779 rfkill_unregister(rdev->rfkill); in wiphy_unregister()
782 nl80211_notify_wiphy(rdev, NL80211_CMD_DEL_WIPHY); in wiphy_unregister()
783 rdev->wiphy.registered = false; in wiphy_unregister()
785 WARN_ON(!list_empty(&rdev->wdev_list)); in wiphy_unregister()
791 debugfs_remove_recursive(rdev->wiphy.debugfsdir); in wiphy_unregister()
792 list_del_rcu(&rdev->list); in wiphy_unregister()
802 device_del(&rdev->wiphy.dev); in wiphy_unregister()
806 flush_work(&rdev->scan_done_wk); in wiphy_unregister()
807 cancel_work_sync(&rdev->conn_work); in wiphy_unregister()
808 flush_work(&rdev->event_work); in wiphy_unregister()
809 cancel_delayed_work_sync(&rdev->dfs_update_channels_wk); in wiphy_unregister()
810 flush_work(&rdev->destroy_work); in wiphy_unregister()
811 flush_work(&rdev->sched_scan_stop_wk); in wiphy_unregister()
812 flush_work(&rdev->mlme_unreg_wk); in wiphy_unregister()
815 if (rdev->wiphy.wowlan_config && rdev->ops->set_wakeup) in wiphy_unregister()
816 rdev_set_wakeup(rdev, false); in wiphy_unregister()
818 cfg80211_rdev_free_wowlan(rdev); in wiphy_unregister()
819 cfg80211_rdev_free_coalesce(rdev); in wiphy_unregister()
823 void cfg80211_dev_free(struct cfg80211_registered_device *rdev) in cfg80211_dev_free() argument
827 rfkill_destroy(rdev->rfkill); in cfg80211_dev_free()
828 list_for_each_entry_safe(reg, treg, &rdev->beacon_registrations, list) { in cfg80211_dev_free()
832 list_for_each_entry_safe(scan, tmp, &rdev->bss_list, list) in cfg80211_dev_free()
833 cfg80211_put_bss(&rdev->wiphy, &scan->pub); in cfg80211_dev_free()
834 kfree(rdev); in cfg80211_dev_free()
845 struct cfg80211_registered_device *rdev = wiphy_to_rdev(wiphy); in wiphy_rfkill_set_hw_state() local
847 if (rfkill_set_hw_state(rdev->rfkill, blocked)) in wiphy_rfkill_set_hw_state()
848 schedule_work(&rdev->rfkill_sync); in wiphy_rfkill_set_hw_state()
854 struct cfg80211_registered_device *rdev = wiphy_to_rdev(wdev->wiphy); in cfg80211_unregister_wdev() local
862 rdev->devlist_generation++; in cfg80211_unregister_wdev()
867 cfg80211_stop_p2p_device(rdev, wdev); in cfg80211_unregister_wdev()
880 void cfg80211_update_iface_num(struct cfg80211_registered_device *rdev, in cfg80211_update_iface_num() argument
885 rdev->num_running_ifaces += num; in cfg80211_update_iface_num()
887 rdev->num_running_monitor_ifaces += num; in cfg80211_update_iface_num()
890 void __cfg80211_leave(struct cfg80211_registered_device *rdev, in __cfg80211_leave() argument
901 __cfg80211_leave_ibss(rdev, dev, true); in __cfg80211_leave()
905 sched_scan_req = rtnl_dereference(rdev->sched_scan_req); in __cfg80211_leave()
907 __cfg80211_stop_sched_scan(rdev, false); in __cfg80211_leave()
915 cfg80211_disconnect(rdev, dev, in __cfg80211_leave()
919 __cfg80211_leave_mesh(rdev, dev); in __cfg80211_leave()
923 __cfg80211_stop_ap(rdev, dev, true); in __cfg80211_leave()
926 __cfg80211_leave_ocb(rdev, dev); in __cfg80211_leave()
945 void cfg80211_leave(struct cfg80211_registered_device *rdev, in cfg80211_leave() argument
949 __cfg80211_leave(rdev, wdev); in cfg80211_leave()
956 struct cfg80211_registered_device *rdev = wiphy_to_rdev(wiphy); in cfg80211_stop_iface() local
971 queue_work(cfg80211_wq, &rdev->event_work); in cfg80211_stop_iface()
980 struct cfg80211_registered_device *rdev; in cfg80211_netdev_notifier_call() local
986 rdev = wiphy_to_rdev(wdev->wiphy); in cfg80211_netdev_notifier_call()
1006 wdev->identifier = ++rdev->wdev_id; in cfg80211_netdev_notifier_call()
1007 list_add_rcu(&wdev->list, &rdev->wdev_list); in cfg80211_netdev_notifier_call()
1008 rdev->devlist_generation++; in cfg80211_netdev_notifier_call()
1012 if (sysfs_create_link(&dev->dev.kobj, &rdev->wiphy.dev.kobj, in cfg80211_netdev_notifier_call()
1036 cfg80211_leave(rdev, wdev); in cfg80211_netdev_notifier_call()
1039 cfg80211_update_iface_num(rdev, wdev->iftype, -1); in cfg80211_netdev_notifier_call()
1040 if (rdev->scan_req && rdev->scan_req->wdev == wdev) { in cfg80211_netdev_notifier_call()
1041 if (WARN_ON(!rdev->scan_req->notified)) in cfg80211_netdev_notifier_call()
1042 rdev->scan_req->aborted = true; in cfg80211_netdev_notifier_call()
1043 ___cfg80211_scan_done(rdev, false); in cfg80211_netdev_notifier_call()
1046 sched_scan_req = rtnl_dereference(rdev->sched_scan_req); in cfg80211_netdev_notifier_call()
1049 __cfg80211_stop_sched_scan(rdev, false); in cfg80211_netdev_notifier_call()
1052 rdev->opencount--; in cfg80211_netdev_notifier_call()
1053 wake_up(&rdev->dev_wait); in cfg80211_netdev_notifier_call()
1056 cfg80211_update_iface_num(rdev, wdev->iftype, 1); in cfg80211_netdev_notifier_call()
1061 cfg80211_ibss_wext_join(rdev, wdev); in cfg80211_netdev_notifier_call()
1064 cfg80211_mgd_wext_connect(rdev, wdev); in cfg80211_netdev_notifier_call()
1078 __cfg80211_join_mesh(rdev, dev, in cfg80211_netdev_notifier_call()
1088 rdev->opencount++; in cfg80211_netdev_notifier_call()
1096 rdev->ops->set_power_mgmt) in cfg80211_netdev_notifier_call()
1097 if (rdev_set_power_mgmt(rdev, dev, wdev->ps, in cfg80211_netdev_notifier_call()
1114 rdev->devlist_generation++; in cfg80211_netdev_notifier_call()
1143 if (rfkill_blocked(rdev->rfkill)) in cfg80211_netdev_notifier_call()
1161 struct cfg80211_registered_device *rdev; in cfg80211_pernet_exit() local
1164 list_for_each_entry(rdev, &cfg80211_rdev_list, list) { in cfg80211_pernet_exit()
1165 if (net_eq(wiphy_net(&rdev->wiphy), net)) in cfg80211_pernet_exit()
1166 WARN_ON(cfg80211_switch_netns(rdev, &init_net)); in cfg80211_pernet_exit()