Lines Matching refs:wdev

156 	struct wireless_dev *wdev;  in cfg80211_switch_netns()  local
162 list_for_each_entry(wdev, &rdev->wiphy.wdev_list, list) { in cfg80211_switch_netns()
163 if (!wdev->netdev) in cfg80211_switch_netns()
165 wdev->netdev->netns_immutable = false; in cfg80211_switch_netns()
166 err = dev_change_net_namespace(wdev->netdev, net, "wlan%d"); in cfg80211_switch_netns()
169 wdev->netdev->netns_immutable = true; in cfg80211_switch_netns()
176 list_for_each_entry_continue_reverse(wdev, in cfg80211_switch_netns()
179 if (!wdev->netdev) in cfg80211_switch_netns()
181 wdev->netdev->netns_immutable = false; in cfg80211_switch_netns()
182 err = dev_change_net_namespace(wdev->netdev, net, in cfg80211_switch_netns()
185 wdev->netdev->netns_immutable = true; in cfg80211_switch_netns()
193 list_for_each_entry(wdev, &rdev->wiphy.wdev_list, list) { in cfg80211_switch_netns()
194 if (!wdev->netdev) in cfg80211_switch_netns()
196 nl80211_notify_iface(rdev, wdev, NL80211_CMD_DEL_INTERFACE); in cfg80211_switch_netns()
208 list_for_each_entry(wdev, &rdev->wiphy.wdev_list, list) { in cfg80211_switch_netns()
209 if (!wdev->netdev) in cfg80211_switch_netns()
211 nl80211_notify_iface(rdev, wdev, NL80211_CMD_NEW_INTERFACE); in cfg80211_switch_netns()
227 struct wireless_dev *wdev) in cfg80211_stop_p2p_device() argument
231 if (WARN_ON(wdev->iftype != NL80211_IFTYPE_P2P_DEVICE)) in cfg80211_stop_p2p_device()
234 if (!wdev_running(wdev)) in cfg80211_stop_p2p_device()
237 rdev_stop_p2p_device(rdev, wdev); in cfg80211_stop_p2p_device()
238 wdev->is_running = false; in cfg80211_stop_p2p_device()
242 if (rdev->scan_req && rdev->scan_req->wdev == wdev) { in cfg80211_stop_p2p_device()
252 struct wireless_dev *wdev) in cfg80211_stop_nan() argument
256 if (WARN_ON(wdev->iftype != NL80211_IFTYPE_NAN)) in cfg80211_stop_nan()
259 if (!wdev_running(wdev)) in cfg80211_stop_nan()
262 rdev_stop_nan(rdev, wdev); in cfg80211_stop_nan()
263 wdev->is_running = false; in cfg80211_stop_nan()
271 struct wireless_dev *wdev; in cfg80211_shutdown_all_interfaces() local
275 list_for_each_entry(wdev, &rdev->wiphy.wdev_list, list) { in cfg80211_shutdown_all_interfaces()
276 if (wdev->netdev) { in cfg80211_shutdown_all_interfaces()
277 dev_close(wdev->netdev); in cfg80211_shutdown_all_interfaces()
285 switch (wdev->iftype) { in cfg80211_shutdown_all_interfaces()
287 cfg80211_stop_p2p_device(rdev, wdev); in cfg80211_shutdown_all_interfaces()
290 cfg80211_stop_nan(rdev, wdev); in cfg80211_shutdown_all_interfaces()
336 struct wireless_dev *wdev, *tmp; in cfg80211_destroy_ifaces() local
340 list_for_each_entry_safe(wdev, tmp, &rdev->wiphy.wdev_list, list) { in cfg80211_destroy_ifaces()
341 if (wdev->nl_owner_dead) { in cfg80211_destroy_ifaces()
342 if (wdev->netdev) in cfg80211_destroy_ifaces()
343 dev_close(wdev->netdev); in cfg80211_destroy_ifaces()
347 cfg80211_leave(rdev, wdev); in cfg80211_destroy_ifaces()
348 cfg80211_remove_virtual_intf(rdev, wdev); in cfg80211_destroy_ifaces()
1239 static void _cfg80211_unregister_wdev(struct wireless_dev *wdev, in _cfg80211_unregister_wdev() argument
1242 struct cfg80211_registered_device *rdev = wiphy_to_rdev(wdev->wiphy); in _cfg80211_unregister_wdev()
1249 nl80211_notify_iface(rdev, wdev, NL80211_CMD_DEL_INTERFACE); in _cfg80211_unregister_wdev()
1251 wdev->registered = false; in _cfg80211_unregister_wdev()
1253 if (wdev->netdev) { in _cfg80211_unregister_wdev()
1254 sysfs_remove_link(&wdev->netdev->dev.kobj, "phy80211"); in _cfg80211_unregister_wdev()
1256 unregister_netdevice(wdev->netdev); in _cfg80211_unregister_wdev()
1259 list_del_rcu(&wdev->list); in _cfg80211_unregister_wdev()
1263 cfg80211_mlme_purge_registrations(wdev); in _cfg80211_unregister_wdev()
1265 switch (wdev->iftype) { in _cfg80211_unregister_wdev()
1267 cfg80211_stop_p2p_device(rdev, wdev); in _cfg80211_unregister_wdev()
1270 cfg80211_stop_nan(rdev, wdev); in _cfg80211_unregister_wdev()
1277 kfree_sensitive(wdev->wext.keys); in _cfg80211_unregister_wdev()
1278 wdev->wext.keys = NULL; in _cfg80211_unregister_wdev()
1280 wiphy_work_cancel(wdev->wiphy, &wdev->cqm_rssi_work); in _cfg80211_unregister_wdev()
1282 cqm_config = rcu_access_pointer(wdev->cqm_config); in _cfg80211_unregister_wdev()
1284 RCU_INIT_POINTER(wdev->cqm_config, NULL); in _cfg80211_unregister_wdev()
1290 cfg80211_process_wdev_events(wdev); in _cfg80211_unregister_wdev()
1292 if (wdev->iftype == NL80211_IFTYPE_STATION || in _cfg80211_unregister_wdev()
1293 wdev->iftype == NL80211_IFTYPE_P2P_CLIENT) { in _cfg80211_unregister_wdev()
1294 for (link_id = 0; link_id < ARRAY_SIZE(wdev->links); link_id++) { in _cfg80211_unregister_wdev()
1297 curbss = wdev->links[link_id].client.current_bss; in _cfg80211_unregister_wdev()
1301 cfg80211_put_bss(wdev->wiphy, &curbss->pub); in _cfg80211_unregister_wdev()
1302 wdev->links[link_id].client.current_bss = NULL; in _cfg80211_unregister_wdev()
1307 wdev->connected = false; in _cfg80211_unregister_wdev()
1310 void cfg80211_unregister_wdev(struct wireless_dev *wdev) in cfg80211_unregister_wdev() argument
1312 _cfg80211_unregister_wdev(wdev, true); in cfg80211_unregister_wdev()
1331 struct wireless_dev *wdev) in cfg80211_leave() argument
1333 struct net_device *dev = wdev->netdev; in cfg80211_leave()
1338 cfg80211_pmsr_wdev_down(wdev); in cfg80211_leave()
1340 cfg80211_stop_background_radar_detection(wdev); in cfg80211_leave()
1342 switch (wdev->iftype) { in cfg80211_leave()
1355 kfree(wdev->wext.ie); in cfg80211_leave()
1356 wdev->wext.ie = NULL; in cfg80211_leave()
1357 wdev->wext.ie_len = 0; in cfg80211_leave()
1358 wdev->wext.connect.auth_type = NL80211_AUTHTYPE_AUTOMATIC; in cfg80211_leave()
1389 void cfg80211_stop_iface(struct wiphy *wiphy, struct wireless_dev *wdev, in cfg80211_stop_iface() argument
1396 trace_cfg80211_stop_iface(wiphy, wdev); in cfg80211_stop_iface()
1404 spin_lock_irqsave(&wdev->event_lock, flags); in cfg80211_stop_iface()
1405 list_add_tail(&ev->list, &wdev->event_list); in cfg80211_stop_iface()
1406 spin_unlock_irqrestore(&wdev->event_lock, flags); in cfg80211_stop_iface()
1411 void cfg80211_init_wdev(struct wireless_dev *wdev) in cfg80211_init_wdev() argument
1413 INIT_LIST_HEAD(&wdev->event_list); in cfg80211_init_wdev()
1414 spin_lock_init(&wdev->event_lock); in cfg80211_init_wdev()
1415 INIT_LIST_HEAD(&wdev->mgmt_registrations); in cfg80211_init_wdev()
1416 INIT_LIST_HEAD(&wdev->pmsr_list); in cfg80211_init_wdev()
1417 spin_lock_init(&wdev->pmsr_lock); in cfg80211_init_wdev()
1418 INIT_WORK(&wdev->pmsr_free_wk, cfg80211_pmsr_free_wk); in cfg80211_init_wdev()
1421 wdev->wext.default_key = -1; in cfg80211_init_wdev()
1422 wdev->wext.default_mgmt_key = -1; in cfg80211_init_wdev()
1423 wdev->wext.connect.auth_type = NL80211_AUTHTYPE_AUTOMATIC; in cfg80211_init_wdev()
1426 wiphy_work_init(&wdev->cqm_rssi_work, cfg80211_cqm_rssi_notify_work); in cfg80211_init_wdev()
1428 if (wdev->wiphy->flags & WIPHY_FLAG_PS_ON_BY_DEFAULT) in cfg80211_init_wdev()
1429 wdev->ps = true; in cfg80211_init_wdev()
1431 wdev->ps = false; in cfg80211_init_wdev()
1433 wdev->ps_timeout = -1; in cfg80211_init_wdev()
1435 wdev->radio_mask = BIT(wdev->wiphy->n_radio) - 1; in cfg80211_init_wdev()
1437 if ((wdev->iftype == NL80211_IFTYPE_STATION || in cfg80211_init_wdev()
1438 wdev->iftype == NL80211_IFTYPE_P2P_CLIENT || in cfg80211_init_wdev()
1439 wdev->iftype == NL80211_IFTYPE_ADHOC) && !wdev->use_4addr) in cfg80211_init_wdev()
1440 wdev->netdev->priv_flags |= IFF_DONT_BRIDGE; in cfg80211_init_wdev()
1442 INIT_WORK(&wdev->disconnect_wk, cfg80211_autodisconnect_wk); in cfg80211_init_wdev()
1446 struct wireless_dev *wdev) in cfg80211_register_wdev() argument
1458 if (!wdev->identifier) in cfg80211_register_wdev()
1459 wdev->identifier = ++rdev->wdev_id; in cfg80211_register_wdev()
1460 list_add_rcu(&wdev->list, &rdev->wiphy.wdev_list); in cfg80211_register_wdev()
1462 wdev->registered = true; in cfg80211_register_wdev()
1464 if (wdev->netdev && in cfg80211_register_wdev()
1465 sysfs_create_link(&wdev->netdev->dev.kobj, &rdev->wiphy.dev.kobj, in cfg80211_register_wdev()
1469 nl80211_notify_iface(rdev, wdev, NL80211_CMD_NEW_INTERFACE); in cfg80211_register_wdev()
1474 struct wireless_dev *wdev = dev->ieee80211_ptr; in cfg80211_register_netdevice() local
1480 if (WARN_ON(!wdev)) in cfg80211_register_netdevice()
1483 rdev = wiphy_to_rdev(wdev->wiphy); in cfg80211_register_netdevice()
1488 wdev->registered = true; in cfg80211_register_netdevice()
1489 wdev->registering = true; in cfg80211_register_netdevice()
1494 cfg80211_register_wdev(rdev, wdev); in cfg80211_register_netdevice()
1497 wdev->registering = false; in cfg80211_register_netdevice()
1499 wdev->registered = false; in cfg80211_register_netdevice()
1508 struct wireless_dev *wdev = dev->ieee80211_ptr; in cfg80211_netdev_notifier_call() local
1512 if (!wdev) in cfg80211_netdev_notifier_call()
1515 rdev = wiphy_to_rdev(wdev->wiphy); in cfg80211_netdev_notifier_call()
1517 WARN_ON(wdev->iftype == NL80211_IFTYPE_UNSPECIFIED); in cfg80211_netdev_notifier_call()
1522 wdev->netdev = dev; in cfg80211_netdev_notifier_call()
1526 cfg80211_init_wdev(wdev); in cfg80211_netdev_notifier_call()
1529 if (!wdev->registered) { in cfg80211_netdev_notifier_call()
1532 cfg80211_register_wdev(rdev, wdev); in cfg80211_netdev_notifier_call()
1540 if (wdev->registered && !wdev->registering) { in cfg80211_netdev_notifier_call()
1543 _cfg80211_unregister_wdev(wdev, false); in cfg80211_netdev_notifier_call()
1548 cfg80211_leave(rdev, wdev); in cfg80211_netdev_notifier_call()
1549 cfg80211_remove_links(wdev); in cfg80211_netdev_notifier_call()
1552 cancel_work_sync(&wdev->disconnect_wk); in cfg80211_netdev_notifier_call()
1553 cancel_work_sync(&wdev->pmsr_free_wk); in cfg80211_netdev_notifier_call()
1557 cfg80211_update_iface_num(rdev, wdev->iftype, -1); in cfg80211_netdev_notifier_call()
1558 if (rdev->scan_req && rdev->scan_req->wdev == wdev) { in cfg80211_netdev_notifier_call()
1568 if (WARN_ON(pos->dev == wdev->netdev)) in cfg80211_netdev_notifier_call()
1578 cfg80211_update_iface_num(rdev, wdev->iftype, 1); in cfg80211_netdev_notifier_call()
1579 switch (wdev->iftype) { in cfg80211_netdev_notifier_call()
1582 cfg80211_ibss_wext_join(rdev, wdev); in cfg80211_netdev_notifier_call()
1585 cfg80211_mgd_wext_connect(rdev, wdev); in cfg80211_netdev_notifier_call()
1596 setup.mesh_id = wdev->u.mesh.id; in cfg80211_netdev_notifier_call()
1597 setup.mesh_id_len = wdev->u.mesh.id_up_len; in cfg80211_netdev_notifier_call()
1598 if (wdev->u.mesh.id_up_len) in cfg80211_netdev_notifier_call()
1614 if ((wdev->iftype == NL80211_IFTYPE_STATION || in cfg80211_netdev_notifier_call()
1615 wdev->iftype == NL80211_IFTYPE_P2P_CLIENT) && in cfg80211_netdev_notifier_call()
1617 rdev_set_power_mgmt(rdev, dev, wdev->ps, in cfg80211_netdev_notifier_call()
1618 wdev->ps_timeout)) { in cfg80211_netdev_notifier_call()
1620 wdev->ps = false; in cfg80211_netdev_notifier_call()
1625 if (!cfg80211_iftype_allowed(wdev->wiphy, wdev->iftype, in cfg80211_netdev_notifier_call()
1626 wdev->use_4addr, 0)) in cfg80211_netdev_notifier_call()