Lines Matching refs:wdev

159 	struct wireless_dev *wdev;  in cfg80211_switch_netns()  local
165 list_for_each_entry(wdev, &rdev->wiphy.wdev_list, list) { in cfg80211_switch_netns()
166 if (!wdev->netdev) in cfg80211_switch_netns()
168 wdev->netdev->features &= ~NETIF_F_NETNS_LOCAL; in cfg80211_switch_netns()
169 err = dev_change_net_namespace(wdev->netdev, net, "wlan%d"); in cfg80211_switch_netns()
172 wdev->netdev->features |= NETIF_F_NETNS_LOCAL; in cfg80211_switch_netns()
179 list_for_each_entry_continue_reverse(wdev, in cfg80211_switch_netns()
182 if (!wdev->netdev) in cfg80211_switch_netns()
184 wdev->netdev->features &= ~NETIF_F_NETNS_LOCAL; in cfg80211_switch_netns()
185 err = dev_change_net_namespace(wdev->netdev, net, in cfg80211_switch_netns()
188 wdev->netdev->features |= NETIF_F_NETNS_LOCAL; in cfg80211_switch_netns()
194 list_for_each_entry(wdev, &rdev->wiphy.wdev_list, list) { in cfg80211_switch_netns()
195 if (!wdev->netdev) in cfg80211_switch_netns()
197 nl80211_notify_iface(rdev, wdev, NL80211_CMD_DEL_INTERFACE); in cfg80211_switch_netns()
211 list_for_each_entry(wdev, &rdev->wiphy.wdev_list, list) { in cfg80211_switch_netns()
212 if (!wdev->netdev) in cfg80211_switch_netns()
214 nl80211_notify_iface(rdev, wdev, NL80211_CMD_NEW_INTERFACE); in cfg80211_switch_netns()
228 struct wireless_dev *wdev) in cfg80211_stop_p2p_device() argument
232 if (WARN_ON(wdev->iftype != NL80211_IFTYPE_P2P_DEVICE)) in cfg80211_stop_p2p_device()
235 if (!wdev_running(wdev)) in cfg80211_stop_p2p_device()
238 rdev_stop_p2p_device(rdev, wdev); in cfg80211_stop_p2p_device()
239 wdev->is_running = false; in cfg80211_stop_p2p_device()
243 if (rdev->scan_req && rdev->scan_req->wdev == wdev) { in cfg80211_stop_p2p_device()
253 struct wireless_dev *wdev) in cfg80211_stop_nan() argument
257 if (WARN_ON(wdev->iftype != NL80211_IFTYPE_NAN)) in cfg80211_stop_nan()
260 if (!wdev_running(wdev)) in cfg80211_stop_nan()
263 rdev_stop_nan(rdev, wdev); in cfg80211_stop_nan()
264 wdev->is_running = false; in cfg80211_stop_nan()
272 struct wireless_dev *wdev; in cfg80211_shutdown_all_interfaces() local
276 list_for_each_entry(wdev, &rdev->wiphy.wdev_list, list) { in cfg80211_shutdown_all_interfaces()
277 if (wdev->netdev) { in cfg80211_shutdown_all_interfaces()
278 dev_close(wdev->netdev); in cfg80211_shutdown_all_interfaces()
286 switch (wdev->iftype) { in cfg80211_shutdown_all_interfaces()
288 cfg80211_stop_p2p_device(rdev, wdev); in cfg80211_shutdown_all_interfaces()
291 cfg80211_stop_nan(rdev, wdev); in cfg80211_shutdown_all_interfaces()
339 struct wireless_dev *wdev, *tmp; in cfg80211_destroy_ifaces() local
343 list_for_each_entry_safe(wdev, tmp, &rdev->wiphy.wdev_list, list) { in cfg80211_destroy_ifaces()
344 if (wdev->nl_owner_dead) { in cfg80211_destroy_ifaces()
345 if (wdev->netdev) in cfg80211_destroy_ifaces()
346 dev_close(wdev->netdev); in cfg80211_destroy_ifaces()
349 cfg80211_leave(rdev, wdev); in cfg80211_destroy_ifaces()
350 cfg80211_remove_virtual_intf(rdev, wdev); in cfg80211_destroy_ifaces()
1184 static void _cfg80211_unregister_wdev(struct wireless_dev *wdev, in _cfg80211_unregister_wdev() argument
1187 struct cfg80211_registered_device *rdev = wiphy_to_rdev(wdev->wiphy); in _cfg80211_unregister_wdev()
1194 nl80211_notify_iface(rdev, wdev, NL80211_CMD_DEL_INTERFACE); in _cfg80211_unregister_wdev()
1196 wdev->registered = false; in _cfg80211_unregister_wdev()
1198 if (wdev->netdev) { in _cfg80211_unregister_wdev()
1199 sysfs_remove_link(&wdev->netdev->dev.kobj, "phy80211"); in _cfg80211_unregister_wdev()
1201 unregister_netdevice(wdev->netdev); in _cfg80211_unregister_wdev()
1204 list_del_rcu(&wdev->list); in _cfg80211_unregister_wdev()
1208 cfg80211_mlme_purge_registrations(wdev); in _cfg80211_unregister_wdev()
1210 switch (wdev->iftype) { in _cfg80211_unregister_wdev()
1212 cfg80211_stop_p2p_device(rdev, wdev); in _cfg80211_unregister_wdev()
1215 cfg80211_stop_nan(rdev, wdev); in _cfg80211_unregister_wdev()
1222 kfree_sensitive(wdev->wext.keys); in _cfg80211_unregister_wdev()
1223 wdev->wext.keys = NULL; in _cfg80211_unregister_wdev()
1225 wiphy_work_cancel(wdev->wiphy, &wdev->cqm_rssi_work); in _cfg80211_unregister_wdev()
1227 cqm_config = rcu_access_pointer(wdev->cqm_config); in _cfg80211_unregister_wdev()
1234 cfg80211_process_wdev_events(wdev); in _cfg80211_unregister_wdev()
1236 if (wdev->iftype == NL80211_IFTYPE_STATION || in _cfg80211_unregister_wdev()
1237 wdev->iftype == NL80211_IFTYPE_P2P_CLIENT) { in _cfg80211_unregister_wdev()
1238 for (link_id = 0; link_id < ARRAY_SIZE(wdev->links); link_id++) { in _cfg80211_unregister_wdev()
1241 curbss = wdev->links[link_id].client.current_bss; in _cfg80211_unregister_wdev()
1245 cfg80211_put_bss(wdev->wiphy, &curbss->pub); in _cfg80211_unregister_wdev()
1246 wdev->links[link_id].client.current_bss = NULL; in _cfg80211_unregister_wdev()
1251 wdev->connected = false; in _cfg80211_unregister_wdev()
1254 void cfg80211_unregister_wdev(struct wireless_dev *wdev) in cfg80211_unregister_wdev() argument
1256 _cfg80211_unregister_wdev(wdev, true); in cfg80211_unregister_wdev()
1275 struct wireless_dev *wdev) in __cfg80211_leave() argument
1277 struct net_device *dev = wdev->netdev; in __cfg80211_leave()
1281 ASSERT_WDEV_LOCK(wdev); in __cfg80211_leave()
1283 cfg80211_pmsr_wdev_down(wdev); in __cfg80211_leave()
1285 cfg80211_stop_background_radar_detection(wdev); in __cfg80211_leave()
1287 switch (wdev->iftype) { in __cfg80211_leave()
1300 kfree(wdev->wext.ie); in __cfg80211_leave()
1301 wdev->wext.ie = NULL; in __cfg80211_leave()
1302 wdev->wext.ie_len = 0; in __cfg80211_leave()
1303 wdev->wext.connect.auth_type = NL80211_AUTHTYPE_AUTOMATIC; in __cfg80211_leave()
1335 struct wireless_dev *wdev) in cfg80211_leave() argument
1337 wdev_lock(wdev); in cfg80211_leave()
1338 __cfg80211_leave(rdev, wdev); in cfg80211_leave()
1339 wdev_unlock(wdev); in cfg80211_leave()
1342 void cfg80211_stop_iface(struct wiphy *wiphy, struct wireless_dev *wdev, in cfg80211_stop_iface() argument
1349 trace_cfg80211_stop_iface(wiphy, wdev); in cfg80211_stop_iface()
1357 spin_lock_irqsave(&wdev->event_lock, flags); in cfg80211_stop_iface()
1358 list_add_tail(&ev->list, &wdev->event_list); in cfg80211_stop_iface()
1359 spin_unlock_irqrestore(&wdev->event_lock, flags); in cfg80211_stop_iface()
1364 void cfg80211_init_wdev(struct wireless_dev *wdev) in cfg80211_init_wdev() argument
1366 mutex_init(&wdev->mtx); in cfg80211_init_wdev()
1367 INIT_LIST_HEAD(&wdev->event_list); in cfg80211_init_wdev()
1368 spin_lock_init(&wdev->event_lock); in cfg80211_init_wdev()
1369 INIT_LIST_HEAD(&wdev->mgmt_registrations); in cfg80211_init_wdev()
1370 INIT_LIST_HEAD(&wdev->pmsr_list); in cfg80211_init_wdev()
1371 spin_lock_init(&wdev->pmsr_lock); in cfg80211_init_wdev()
1372 INIT_WORK(&wdev->pmsr_free_wk, cfg80211_pmsr_free_wk); in cfg80211_init_wdev()
1375 wdev->wext.default_key = -1; in cfg80211_init_wdev()
1376 wdev->wext.default_mgmt_key = -1; in cfg80211_init_wdev()
1377 wdev->wext.connect.auth_type = NL80211_AUTHTYPE_AUTOMATIC; in cfg80211_init_wdev()
1380 wiphy_work_init(&wdev->cqm_rssi_work, cfg80211_cqm_rssi_notify_work); in cfg80211_init_wdev()
1382 if (wdev->wiphy->flags & WIPHY_FLAG_PS_ON_BY_DEFAULT) in cfg80211_init_wdev()
1383 wdev->ps = true; in cfg80211_init_wdev()
1385 wdev->ps = false; in cfg80211_init_wdev()
1387 wdev->ps_timeout = -1; in cfg80211_init_wdev()
1389 if ((wdev->iftype == NL80211_IFTYPE_STATION || in cfg80211_init_wdev()
1390 wdev->iftype == NL80211_IFTYPE_P2P_CLIENT || in cfg80211_init_wdev()
1391 wdev->iftype == NL80211_IFTYPE_ADHOC) && !wdev->use_4addr) in cfg80211_init_wdev()
1392 wdev->netdev->priv_flags |= IFF_DONT_BRIDGE; in cfg80211_init_wdev()
1394 INIT_WORK(&wdev->disconnect_wk, cfg80211_autodisconnect_wk); in cfg80211_init_wdev()
1398 struct wireless_dev *wdev) in cfg80211_register_wdev() argument
1410 if (!wdev->identifier) in cfg80211_register_wdev()
1411 wdev->identifier = ++rdev->wdev_id; in cfg80211_register_wdev()
1412 list_add_rcu(&wdev->list, &rdev->wiphy.wdev_list); in cfg80211_register_wdev()
1414 wdev->registered = true; in cfg80211_register_wdev()
1416 if (wdev->netdev && in cfg80211_register_wdev()
1417 sysfs_create_link(&wdev->netdev->dev.kobj, &rdev->wiphy.dev.kobj, in cfg80211_register_wdev()
1421 nl80211_notify_iface(rdev, wdev, NL80211_CMD_NEW_INTERFACE); in cfg80211_register_wdev()
1426 struct wireless_dev *wdev = dev->ieee80211_ptr; in cfg80211_register_netdevice() local
1432 if (WARN_ON(!wdev)) in cfg80211_register_netdevice()
1435 rdev = wiphy_to_rdev(wdev->wiphy); in cfg80211_register_netdevice()
1440 wdev->registered = true; in cfg80211_register_netdevice()
1441 wdev->registering = true; in cfg80211_register_netdevice()
1446 cfg80211_register_wdev(rdev, wdev); in cfg80211_register_netdevice()
1449 wdev->registering = false; in cfg80211_register_netdevice()
1451 wdev->registered = false; in cfg80211_register_netdevice()
1460 struct wireless_dev *wdev = dev->ieee80211_ptr; in cfg80211_netdev_notifier_call() local
1464 if (!wdev) in cfg80211_netdev_notifier_call()
1467 rdev = wiphy_to_rdev(wdev->wiphy); in cfg80211_netdev_notifier_call()
1469 WARN_ON(wdev->iftype == NL80211_IFTYPE_UNSPECIFIED); in cfg80211_netdev_notifier_call()
1474 wdev->netdev = dev; in cfg80211_netdev_notifier_call()
1478 cfg80211_init_wdev(wdev); in cfg80211_netdev_notifier_call()
1481 if (!wdev->registered) { in cfg80211_netdev_notifier_call()
1483 cfg80211_register_wdev(rdev, wdev); in cfg80211_netdev_notifier_call()
1492 if (wdev->registered && !wdev->registering) { in cfg80211_netdev_notifier_call()
1494 _cfg80211_unregister_wdev(wdev, false); in cfg80211_netdev_notifier_call()
1500 cfg80211_leave(rdev, wdev); in cfg80211_netdev_notifier_call()
1501 cfg80211_remove_links(wdev); in cfg80211_netdev_notifier_call()
1504 cancel_work_sync(&wdev->disconnect_wk); in cfg80211_netdev_notifier_call()
1505 cancel_work_sync(&wdev->pmsr_free_wk); in cfg80211_netdev_notifier_call()
1509 cfg80211_update_iface_num(rdev, wdev->iftype, -1); in cfg80211_netdev_notifier_call()
1510 if (rdev->scan_req && rdev->scan_req->wdev == wdev) { in cfg80211_netdev_notifier_call()
1520 if (WARN_ON(pos->dev == wdev->netdev)) in cfg80211_netdev_notifier_call()
1530 cfg80211_update_iface_num(rdev, wdev->iftype, 1); in cfg80211_netdev_notifier_call()
1531 wdev_lock(wdev); in cfg80211_netdev_notifier_call()
1532 switch (wdev->iftype) { in cfg80211_netdev_notifier_call()
1535 cfg80211_ibss_wext_join(rdev, wdev); in cfg80211_netdev_notifier_call()
1538 cfg80211_mgd_wext_connect(rdev, wdev); in cfg80211_netdev_notifier_call()
1549 setup.mesh_id = wdev->u.mesh.id; in cfg80211_netdev_notifier_call()
1550 setup.mesh_id_len = wdev->u.mesh.id_up_len; in cfg80211_netdev_notifier_call()
1551 if (wdev->u.mesh.id_up_len) in cfg80211_netdev_notifier_call()
1561 wdev_unlock(wdev); in cfg80211_netdev_notifier_call()
1568 if ((wdev->iftype == NL80211_IFTYPE_STATION || in cfg80211_netdev_notifier_call()
1569 wdev->iftype == NL80211_IFTYPE_P2P_CLIENT) && in cfg80211_netdev_notifier_call()
1571 rdev_set_power_mgmt(rdev, dev, wdev->ps, in cfg80211_netdev_notifier_call()
1572 wdev->ps_timeout)) { in cfg80211_netdev_notifier_call()
1574 wdev->ps = false; in cfg80211_netdev_notifier_call()
1579 if (!cfg80211_iftype_allowed(wdev->wiphy, wdev->iftype, in cfg80211_netdev_notifier_call()
1580 wdev->use_4addr, 0)) in cfg80211_netdev_notifier_call()