Lines Matching refs:wdev
158 struct wireless_dev *wdev; in cfg80211_switch_netns() local
164 list_for_each_entry(wdev, &rdev->wiphy.wdev_list, list) { in cfg80211_switch_netns()
165 if (!wdev->netdev) in cfg80211_switch_netns()
167 wdev->netdev->features &= ~NETIF_F_NETNS_LOCAL; in cfg80211_switch_netns()
168 err = dev_change_net_namespace(wdev->netdev, net, "wlan%d"); in cfg80211_switch_netns()
171 wdev->netdev->features |= NETIF_F_NETNS_LOCAL; in cfg80211_switch_netns()
178 list_for_each_entry_continue_reverse(wdev, in cfg80211_switch_netns()
181 if (!wdev->netdev) in cfg80211_switch_netns()
183 wdev->netdev->features &= ~NETIF_F_NETNS_LOCAL; in cfg80211_switch_netns()
184 err = dev_change_net_namespace(wdev->netdev, net, in cfg80211_switch_netns()
187 wdev->netdev->features |= NETIF_F_NETNS_LOCAL; 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()
206 list_for_each_entry(wdev, &rdev->wiphy.wdev_list, list) { in cfg80211_switch_netns()
207 if (!wdev->netdev) in cfg80211_switch_netns()
209 nl80211_notify_iface(rdev, wdev, NL80211_CMD_NEW_INTERFACE); in cfg80211_switch_netns()
223 struct wireless_dev *wdev) in cfg80211_stop_p2p_device() argument
227 if (WARN_ON(wdev->iftype != NL80211_IFTYPE_P2P_DEVICE)) in cfg80211_stop_p2p_device()
230 if (!wdev_running(wdev)) in cfg80211_stop_p2p_device()
233 rdev_stop_p2p_device(rdev, wdev); in cfg80211_stop_p2p_device()
234 wdev->is_running = false; in cfg80211_stop_p2p_device()
238 if (rdev->scan_req && rdev->scan_req->wdev == wdev) { in cfg80211_stop_p2p_device()
248 struct wireless_dev *wdev) in cfg80211_stop_nan() argument
252 if (WARN_ON(wdev->iftype != NL80211_IFTYPE_NAN)) in cfg80211_stop_nan()
255 if (!wdev_running(wdev)) in cfg80211_stop_nan()
258 rdev_stop_nan(rdev, wdev); in cfg80211_stop_nan()
259 wdev->is_running = false; in cfg80211_stop_nan()
267 struct wireless_dev *wdev; in cfg80211_shutdown_all_interfaces() local
271 list_for_each_entry(wdev, &rdev->wiphy.wdev_list, list) { in cfg80211_shutdown_all_interfaces()
272 if (wdev->netdev) { in cfg80211_shutdown_all_interfaces()
273 dev_close(wdev->netdev); in cfg80211_shutdown_all_interfaces()
281 switch (wdev->iftype) { in cfg80211_shutdown_all_interfaces()
283 cfg80211_stop_p2p_device(rdev, wdev); in cfg80211_shutdown_all_interfaces()
286 cfg80211_stop_nan(rdev, wdev); in cfg80211_shutdown_all_interfaces()
334 struct wireless_dev *wdev, *tmp; in cfg80211_destroy_ifaces() local
339 list_for_each_entry(wdev, &rdev->wiphy.wdev_list, list) { in cfg80211_destroy_ifaces()
340 if (wdev->nl_owner_dead) { in cfg80211_destroy_ifaces()
341 if (wdev->netdev) in cfg80211_destroy_ifaces()
342 dev_close(wdev->netdev); in cfg80211_destroy_ifaces()
351 list_for_each_entry_safe(wdev, tmp, &rdev->wiphy.wdev_list, list) { in cfg80211_destroy_ifaces()
352 if (wdev->nl_owner_dead) { in cfg80211_destroy_ifaces()
353 cfg80211_leave(rdev, wdev); in cfg80211_destroy_ifaces()
354 rdev_del_virtual_intf(rdev, wdev); in cfg80211_destroy_ifaces()
1103 void cfg80211_cqm_config_free(struct wireless_dev *wdev) in cfg80211_cqm_config_free() argument
1105 kfree(wdev->cqm_config); in cfg80211_cqm_config_free()
1106 wdev->cqm_config = NULL; in cfg80211_cqm_config_free()
1109 static void _cfg80211_unregister_wdev(struct wireless_dev *wdev, in _cfg80211_unregister_wdev() argument
1112 struct cfg80211_registered_device *rdev = wiphy_to_rdev(wdev->wiphy); in _cfg80211_unregister_wdev()
1117 flush_work(&wdev->pmsr_free_wk); in _cfg80211_unregister_wdev()
1119 nl80211_notify_iface(rdev, wdev, NL80211_CMD_DEL_INTERFACE); in _cfg80211_unregister_wdev()
1121 wdev->registered = false; in _cfg80211_unregister_wdev()
1123 if (wdev->netdev) { in _cfg80211_unregister_wdev()
1124 sysfs_remove_link(&wdev->netdev->dev.kobj, "phy80211"); in _cfg80211_unregister_wdev()
1126 unregister_netdevice(wdev->netdev); in _cfg80211_unregister_wdev()
1129 list_del_rcu(&wdev->list); in _cfg80211_unregister_wdev()
1133 cfg80211_mlme_purge_registrations(wdev); in _cfg80211_unregister_wdev()
1135 switch (wdev->iftype) { in _cfg80211_unregister_wdev()
1137 cfg80211_stop_p2p_device(rdev, wdev); in _cfg80211_unregister_wdev()
1140 cfg80211_stop_nan(rdev, wdev); in _cfg80211_unregister_wdev()
1147 kfree_sensitive(wdev->wext.keys); in _cfg80211_unregister_wdev()
1148 wdev->wext.keys = NULL; in _cfg80211_unregister_wdev()
1151 if (wdev->netdev) in _cfg80211_unregister_wdev()
1152 flush_work(&wdev->disconnect_wk); in _cfg80211_unregister_wdev()
1154 cfg80211_cqm_config_free(wdev); in _cfg80211_unregister_wdev()
1160 cfg80211_process_wdev_events(wdev); in _cfg80211_unregister_wdev()
1162 if (WARN_ON(wdev->current_bss)) { in _cfg80211_unregister_wdev()
1163 cfg80211_unhold_bss(wdev->current_bss); in _cfg80211_unregister_wdev()
1164 cfg80211_put_bss(wdev->wiphy, &wdev->current_bss->pub); in _cfg80211_unregister_wdev()
1165 wdev->current_bss = NULL; in _cfg80211_unregister_wdev()
1169 void cfg80211_unregister_wdev(struct wireless_dev *wdev) in cfg80211_unregister_wdev() argument
1171 _cfg80211_unregister_wdev(wdev, true); in cfg80211_unregister_wdev()
1190 struct wireless_dev *wdev) in __cfg80211_leave() argument
1192 struct net_device *dev = wdev->netdev; in __cfg80211_leave()
1196 ASSERT_WDEV_LOCK(wdev); in __cfg80211_leave()
1198 cfg80211_pmsr_wdev_down(wdev); in __cfg80211_leave()
1200 switch (wdev->iftype) { in __cfg80211_leave()
1213 kfree(wdev->wext.ie); in __cfg80211_leave()
1214 wdev->wext.ie = NULL; in __cfg80211_leave()
1215 wdev->wext.ie_len = 0; in __cfg80211_leave()
1216 wdev->wext.connect.auth_type = NL80211_AUTHTYPE_AUTOMATIC; in __cfg80211_leave()
1248 struct wireless_dev *wdev) in cfg80211_leave() argument
1250 wdev_lock(wdev); in cfg80211_leave()
1251 __cfg80211_leave(rdev, wdev); in cfg80211_leave()
1252 wdev_unlock(wdev); in cfg80211_leave()
1255 void cfg80211_stop_iface(struct wiphy *wiphy, struct wireless_dev *wdev, in cfg80211_stop_iface() argument
1262 trace_cfg80211_stop_iface(wiphy, wdev); in cfg80211_stop_iface()
1270 spin_lock_irqsave(&wdev->event_lock, flags); in cfg80211_stop_iface()
1271 list_add_tail(&ev->list, &wdev->event_list); in cfg80211_stop_iface()
1272 spin_unlock_irqrestore(&wdev->event_lock, flags); in cfg80211_stop_iface()
1277 void cfg80211_init_wdev(struct wireless_dev *wdev) in cfg80211_init_wdev() argument
1279 mutex_init(&wdev->mtx); in cfg80211_init_wdev()
1280 INIT_LIST_HEAD(&wdev->event_list); in cfg80211_init_wdev()
1281 spin_lock_init(&wdev->event_lock); in cfg80211_init_wdev()
1282 INIT_LIST_HEAD(&wdev->mgmt_registrations); in cfg80211_init_wdev()
1283 INIT_LIST_HEAD(&wdev->pmsr_list); in cfg80211_init_wdev()
1284 spin_lock_init(&wdev->pmsr_lock); in cfg80211_init_wdev()
1285 INIT_WORK(&wdev->pmsr_free_wk, cfg80211_pmsr_free_wk); in cfg80211_init_wdev()
1288 wdev->wext.default_key = -1; in cfg80211_init_wdev()
1289 wdev->wext.default_mgmt_key = -1; in cfg80211_init_wdev()
1290 wdev->wext.connect.auth_type = NL80211_AUTHTYPE_AUTOMATIC; in cfg80211_init_wdev()
1293 if (wdev->wiphy->flags & WIPHY_FLAG_PS_ON_BY_DEFAULT) in cfg80211_init_wdev()
1294 wdev->ps = true; in cfg80211_init_wdev()
1296 wdev->ps = false; in cfg80211_init_wdev()
1298 wdev->ps_timeout = -1; in cfg80211_init_wdev()
1300 if ((wdev->iftype == NL80211_IFTYPE_STATION || in cfg80211_init_wdev()
1301 wdev->iftype == NL80211_IFTYPE_P2P_CLIENT || in cfg80211_init_wdev()
1302 wdev->iftype == NL80211_IFTYPE_ADHOC) && !wdev->use_4addr) in cfg80211_init_wdev()
1303 wdev->netdev->priv_flags |= IFF_DONT_BRIDGE; in cfg80211_init_wdev()
1305 INIT_WORK(&wdev->disconnect_wk, cfg80211_autodisconnect_wk); in cfg80211_init_wdev()
1309 struct wireless_dev *wdev) in cfg80211_register_wdev() argument
1321 if (!wdev->identifier) in cfg80211_register_wdev()
1322 wdev->identifier = ++rdev->wdev_id; in cfg80211_register_wdev()
1323 list_add_rcu(&wdev->list, &rdev->wiphy.wdev_list); in cfg80211_register_wdev()
1325 wdev->registered = true; in cfg80211_register_wdev()
1327 if (wdev->netdev && in cfg80211_register_wdev()
1328 sysfs_create_link(&wdev->netdev->dev.kobj, &rdev->wiphy.dev.kobj, in cfg80211_register_wdev()
1332 nl80211_notify_iface(rdev, wdev, NL80211_CMD_NEW_INTERFACE); in cfg80211_register_wdev()
1337 struct wireless_dev *wdev = dev->ieee80211_ptr; in cfg80211_register_netdevice() local
1343 if (WARN_ON(!wdev)) in cfg80211_register_netdevice()
1346 rdev = wiphy_to_rdev(wdev->wiphy); in cfg80211_register_netdevice()
1351 wdev->registered = true; in cfg80211_register_netdevice()
1352 wdev->registering = true; in cfg80211_register_netdevice()
1357 cfg80211_register_wdev(rdev, wdev); in cfg80211_register_netdevice()
1360 wdev->registering = false; in cfg80211_register_netdevice()
1362 wdev->registered = false; in cfg80211_register_netdevice()
1371 struct wireless_dev *wdev = dev->ieee80211_ptr; in cfg80211_netdev_notifier_call() local
1375 if (!wdev) in cfg80211_netdev_notifier_call()
1378 rdev = wiphy_to_rdev(wdev->wiphy); in cfg80211_netdev_notifier_call()
1380 WARN_ON(wdev->iftype == NL80211_IFTYPE_UNSPECIFIED); in cfg80211_netdev_notifier_call()
1385 wdev->netdev = dev; in cfg80211_netdev_notifier_call()
1389 cfg80211_init_wdev(wdev); in cfg80211_netdev_notifier_call()
1392 if (!wdev->registered) { in cfg80211_netdev_notifier_call()
1394 cfg80211_register_wdev(rdev, wdev); in cfg80211_netdev_notifier_call()
1403 if (wdev->registered && !wdev->registering) { in cfg80211_netdev_notifier_call()
1405 _cfg80211_unregister_wdev(wdev, false); in cfg80211_netdev_notifier_call()
1411 cfg80211_leave(rdev, wdev); in cfg80211_netdev_notifier_call()
1416 cfg80211_update_iface_num(rdev, wdev->iftype, -1); in cfg80211_netdev_notifier_call()
1417 if (rdev->scan_req && rdev->scan_req->wdev == wdev) { in cfg80211_netdev_notifier_call()
1427 if (WARN_ON(pos->dev == wdev->netdev)) in cfg80211_netdev_notifier_call()
1437 cfg80211_update_iface_num(rdev, wdev->iftype, 1); in cfg80211_netdev_notifier_call()
1438 wdev_lock(wdev); in cfg80211_netdev_notifier_call()
1439 switch (wdev->iftype) { in cfg80211_netdev_notifier_call()
1442 cfg80211_ibss_wext_join(rdev, wdev); in cfg80211_netdev_notifier_call()
1445 cfg80211_mgd_wext_connect(rdev, wdev); in cfg80211_netdev_notifier_call()
1456 setup.mesh_id = wdev->ssid; in cfg80211_netdev_notifier_call()
1457 setup.mesh_id_len = wdev->mesh_id_up_len; in cfg80211_netdev_notifier_call()
1458 if (wdev->mesh_id_up_len) in cfg80211_netdev_notifier_call()
1468 wdev_unlock(wdev); in cfg80211_netdev_notifier_call()
1475 if ((wdev->iftype == NL80211_IFTYPE_STATION || in cfg80211_netdev_notifier_call()
1476 wdev->iftype == NL80211_IFTYPE_P2P_CLIENT) && in cfg80211_netdev_notifier_call()
1478 rdev_set_power_mgmt(rdev, dev, wdev->ps, in cfg80211_netdev_notifier_call()
1479 wdev->ps_timeout)) { in cfg80211_netdev_notifier_call()
1481 wdev->ps = false; in cfg80211_netdev_notifier_call()
1486 if (!cfg80211_iftype_allowed(wdev->wiphy, wdev->iftype, in cfg80211_netdev_notifier_call()
1487 wdev->use_4addr, 0)) in cfg80211_netdev_notifier_call()