Lines Matching refs:wdev
54 static void cfg80211_sme_free(struct wireless_dev *wdev) in cfg80211_sme_free() argument
56 if (!wdev->conn) in cfg80211_sme_free()
59 kfree(wdev->conn->ie); in cfg80211_sme_free()
60 kfree(wdev->conn); in cfg80211_sme_free()
61 wdev->conn = NULL; in cfg80211_sme_free()
64 static int cfg80211_conn_scan(struct wireless_dev *wdev) in cfg80211_conn_scan() argument
66 struct cfg80211_registered_device *rdev = wiphy_to_rdev(wdev->wiphy); in cfg80211_conn_scan()
70 lockdep_assert_wiphy(wdev->wiphy); in cfg80211_conn_scan()
75 if (wdev->conn->params.channel) in cfg80211_conn_scan()
78 n_channels = ieee80211_get_num_supported_channels(wdev->wiphy); in cfg80211_conn_scan()
86 if (wdev->conn->params.channel) { in cfg80211_conn_scan()
87 enum nl80211_band band = wdev->conn->params.channel->band; in cfg80211_conn_scan()
89 wdev->wiphy->bands[band]; in cfg80211_conn_scan()
95 request->req.channels[0] = wdev->conn->params.channel; in cfg80211_conn_scan()
104 bands = wdev->wiphy->bands[band]; in cfg80211_conn_scan()
122 memcpy(request->req.ssids[0].ssid, wdev->conn->params.ssid, in cfg80211_conn_scan()
123 wdev->conn->params.ssid_len); in cfg80211_conn_scan()
124 request->req.ssids[0].ssid_len = wdev->conn->params.ssid_len; in cfg80211_conn_scan()
128 request->req.wdev = wdev; in cfg80211_conn_scan()
136 wdev->conn->state = CFG80211_CONN_SCANNING; in cfg80211_conn_scan()
137 nl80211_send_scan_start(rdev, wdev); in cfg80211_conn_scan()
138 dev_hold(wdev->netdev); in cfg80211_conn_scan()
146 static int cfg80211_conn_do_work(struct wireless_dev *wdev, in cfg80211_conn_do_work() argument
149 struct cfg80211_registered_device *rdev = wiphy_to_rdev(wdev->wiphy); in cfg80211_conn_do_work()
155 lockdep_assert_wiphy(wdev->wiphy); in cfg80211_conn_do_work()
157 if (!wdev->conn) in cfg80211_conn_do_work()
160 params = &wdev->conn->params; in cfg80211_conn_do_work()
162 switch (wdev->conn->state) { in cfg80211_conn_do_work()
167 return cfg80211_conn_scan(wdev); in cfg80211_conn_do_work()
171 wdev->conn->state = CFG80211_CONN_AUTHENTICATING; in cfg80211_conn_do_work()
182 err = cfg80211_mlme_auth(rdev, wdev->netdev, &auth_req); in cfg80211_conn_do_work()
191 wdev->conn->state = CFG80211_CONN_ASSOCIATING; in cfg80211_conn_do_work()
192 if (wdev->conn->prev_bssid_valid) in cfg80211_conn_do_work()
193 req.prev_bssid = wdev->conn->prev_bssid; in cfg80211_conn_do_work()
213 err = cfg80211_mlme_assoc(rdev, wdev->netdev, in cfg80211_conn_do_work()
219 cfg80211_mlme_deauth(rdev, wdev->netdev, params->bssid, in cfg80211_conn_do_work()
228 cfg80211_mlme_deauth(rdev, wdev->netdev, params->bssid, in cfg80211_conn_do_work()
233 cfg80211_mlme_deauth(rdev, wdev->netdev, params->bssid, in cfg80211_conn_do_work()
239 cfg80211_sme_free(wdev); in cfg80211_conn_do_work()
250 struct wireless_dev *wdev; in cfg80211_conn_work() local
256 list_for_each_entry(wdev, &rdev->wiphy.wdev_list, list) { in cfg80211_conn_work()
257 if (!wdev->netdev) in cfg80211_conn_work()
260 if (!netif_running(wdev->netdev)) in cfg80211_conn_work()
263 if (!wdev->conn || in cfg80211_conn_work()
264 wdev->conn->state == CFG80211_CONN_CONNECTED) in cfg80211_conn_work()
267 if (wdev->conn->params.bssid) { in cfg80211_conn_work()
268 memcpy(bssid_buf, wdev->conn->params.bssid, ETH_ALEN); in cfg80211_conn_work()
272 if (cfg80211_conn_do_work(wdev, &treason)) { in cfg80211_conn_work()
279 __cfg80211_connect_result(wdev->netdev, &cr, false); in cfg80211_conn_work()
294 static struct cfg80211_bss *cfg80211_get_conn_bss(struct wireless_dev *wdev) in cfg80211_get_conn_bss() argument
296 struct cfg80211_registered_device *rdev = wiphy_to_rdev(wdev->wiphy); in cfg80211_get_conn_bss()
299 lockdep_assert_wiphy(wdev->wiphy); in cfg80211_get_conn_bss()
301 bss = cfg80211_get_bss(wdev->wiphy, wdev->conn->params.channel, in cfg80211_get_conn_bss()
302 wdev->conn->params.bssid, in cfg80211_get_conn_bss()
303 wdev->conn->params.ssid, in cfg80211_get_conn_bss()
304 wdev->conn->params.ssid_len, in cfg80211_get_conn_bss()
305 wdev->conn_bss_type, in cfg80211_get_conn_bss()
306 IEEE80211_PRIVACY(wdev->conn->params.privacy)); in cfg80211_get_conn_bss()
310 cfg80211_step_auth_next(wdev->conn, bss); in cfg80211_get_conn_bss()
318 struct wireless_dev *wdev = dev->ieee80211_ptr; in cfg80211_sme_scan_done() local
319 struct cfg80211_registered_device *rdev = wiphy_to_rdev(wdev->wiphy); in cfg80211_sme_scan_done()
322 lockdep_assert_wiphy(wdev->wiphy); in cfg80211_sme_scan_done()
324 if (!wdev->conn) in cfg80211_sme_scan_done()
327 if (wdev->conn->state != CFG80211_CONN_SCANNING && in cfg80211_sme_scan_done()
328 wdev->conn->state != CFG80211_CONN_SCAN_AGAIN) in cfg80211_sme_scan_done()
331 bss = cfg80211_get_conn_bss(wdev); in cfg80211_sme_scan_done()
338 void cfg80211_sme_rx_auth(struct wireless_dev *wdev, const u8 *buf, size_t len) in cfg80211_sme_rx_auth() argument
340 struct wiphy *wiphy = wdev->wiphy; in cfg80211_sme_rx_auth()
345 lockdep_assert_wiphy(wdev->wiphy); in cfg80211_sme_rx_auth()
347 if (!wdev->conn || wdev->conn->state == CFG80211_CONN_CONNECTED) in cfg80211_sme_rx_auth()
351 wdev->conn->auto_auth && in cfg80211_sme_rx_auth()
352 wdev->conn->params.auth_type != NL80211_AUTHTYPE_NETWORK_EAP) { in cfg80211_sme_rx_auth()
354 switch (wdev->conn->params.auth_type) { in cfg80211_sme_rx_auth()
356 if (wdev->connect_keys) in cfg80211_sme_rx_auth()
357 wdev->conn->params.auth_type = in cfg80211_sme_rx_auth()
360 wdev->conn->params.auth_type = in cfg80211_sme_rx_auth()
364 wdev->conn->params.auth_type = in cfg80211_sme_rx_auth()
369 wdev->conn->params.auth_type = in cfg80211_sme_rx_auth()
373 wdev->conn->state = CFG80211_CONN_AUTHENTICATE_NEXT; in cfg80211_sme_rx_auth()
382 __cfg80211_connect_result(wdev->netdev, &cr, false); in cfg80211_sme_rx_auth()
383 } else if (wdev->conn->state == CFG80211_CONN_AUTHENTICATING) { in cfg80211_sme_rx_auth()
384 wdev->conn->state = CFG80211_CONN_ASSOCIATE_NEXT; in cfg80211_sme_rx_auth()
389 bool cfg80211_sme_rx_assoc_resp(struct wireless_dev *wdev, u16 status) in cfg80211_sme_rx_assoc_resp() argument
391 struct cfg80211_registered_device *rdev = wiphy_to_rdev(wdev->wiphy); in cfg80211_sme_rx_assoc_resp()
393 if (!wdev->conn) in cfg80211_sme_rx_assoc_resp()
397 wdev->conn->state = CFG80211_CONN_CONNECTED; in cfg80211_sme_rx_assoc_resp()
401 if (wdev->conn->prev_bssid_valid) { in cfg80211_sme_rx_assoc_resp()
407 wdev->conn->prev_bssid_valid = false; in cfg80211_sme_rx_assoc_resp()
408 wdev->conn->state = CFG80211_CONN_ASSOCIATE_NEXT; in cfg80211_sme_rx_assoc_resp()
413 wdev->conn->state = CFG80211_CONN_ASSOC_FAILED; in cfg80211_sme_rx_assoc_resp()
418 void cfg80211_sme_deauth(struct wireless_dev *wdev) in cfg80211_sme_deauth() argument
420 cfg80211_sme_free(wdev); in cfg80211_sme_deauth()
423 void cfg80211_sme_auth_timeout(struct wireless_dev *wdev) in cfg80211_sme_auth_timeout() argument
425 struct cfg80211_registered_device *rdev = wiphy_to_rdev(wdev->wiphy); in cfg80211_sme_auth_timeout()
427 if (!wdev->conn) in cfg80211_sme_auth_timeout()
430 wdev->conn->state = CFG80211_CONN_AUTH_FAILED_TIMEOUT; in cfg80211_sme_auth_timeout()
434 void cfg80211_sme_disassoc(struct wireless_dev *wdev) in cfg80211_sme_disassoc() argument
436 struct cfg80211_registered_device *rdev = wiphy_to_rdev(wdev->wiphy); in cfg80211_sme_disassoc()
438 if (!wdev->conn) in cfg80211_sme_disassoc()
441 wdev->conn->state = CFG80211_CONN_DEAUTH; in cfg80211_sme_disassoc()
445 void cfg80211_sme_assoc_timeout(struct wireless_dev *wdev) in cfg80211_sme_assoc_timeout() argument
447 struct cfg80211_registered_device *rdev = wiphy_to_rdev(wdev->wiphy); in cfg80211_sme_assoc_timeout()
449 if (!wdev->conn) in cfg80211_sme_assoc_timeout()
452 wdev->conn->state = CFG80211_CONN_ASSOC_FAILED_TIMEOUT; in cfg80211_sme_assoc_timeout()
456 void cfg80211_sme_abandon_assoc(struct wireless_dev *wdev) in cfg80211_sme_abandon_assoc() argument
458 struct cfg80211_registered_device *rdev = wiphy_to_rdev(wdev->wiphy); in cfg80211_sme_abandon_assoc()
460 if (!wdev->conn) in cfg80211_sme_abandon_assoc()
463 wdev->conn->state = CFG80211_CONN_ABANDON; in cfg80211_sme_abandon_assoc()
467 static void cfg80211_wdev_release_bsses(struct wireless_dev *wdev) in cfg80211_wdev_release_bsses() argument
471 for_each_valid_link(wdev, link) { in cfg80211_wdev_release_bsses()
472 if (!wdev->links[link].client.current_bss) in cfg80211_wdev_release_bsses()
474 cfg80211_unhold_bss(wdev->links[link].client.current_bss); in cfg80211_wdev_release_bsses()
475 cfg80211_put_bss(wdev->wiphy, in cfg80211_wdev_release_bsses()
476 &wdev->links[link].client.current_bss->pub); in cfg80211_wdev_release_bsses()
477 wdev->links[link].client.current_bss = NULL; in cfg80211_wdev_release_bsses()
481 void cfg80211_wdev_release_link_bsses(struct wireless_dev *wdev, u16 link_mask) in cfg80211_wdev_release_link_bsses() argument
485 for_each_valid_link(wdev, link) { in cfg80211_wdev_release_link_bsses()
486 if (!wdev->links[link].client.current_bss || in cfg80211_wdev_release_link_bsses()
489 cfg80211_unhold_bss(wdev->links[link].client.current_bss); in cfg80211_wdev_release_link_bsses()
490 cfg80211_put_bss(wdev->wiphy, in cfg80211_wdev_release_link_bsses()
491 &wdev->links[link].client.current_bss->pub); in cfg80211_wdev_release_link_bsses()
492 wdev->links[link].client.current_bss = NULL; in cfg80211_wdev_release_link_bsses()
496 static int cfg80211_sme_get_conn_ies(struct wireless_dev *wdev, in cfg80211_sme_get_conn_ies() argument
500 struct cfg80211_registered_device *rdev = wiphy_to_rdev(wdev->wiphy); in cfg80211_sme_get_conn_ies()
552 static int cfg80211_sme_connect(struct wireless_dev *wdev, in cfg80211_sme_connect() argument
556 struct cfg80211_registered_device *rdev = wiphy_to_rdev(wdev->wiphy); in cfg80211_sme_connect()
563 cfg80211_wdev_release_bsses(wdev); in cfg80211_sme_connect()
565 if (wdev->connected) { in cfg80211_sme_connect()
566 cfg80211_sme_free(wdev); in cfg80211_sme_connect()
567 wdev->connected = false; in cfg80211_sme_connect()
570 if (wdev->conn) in cfg80211_sme_connect()
573 wdev->conn = kzalloc(sizeof(*wdev->conn), GFP_KERNEL); in cfg80211_sme_connect()
574 if (!wdev->conn) in cfg80211_sme_connect()
580 memcpy(&wdev->conn->params, connect, sizeof(*connect)); in cfg80211_sme_connect()
582 wdev->conn->params.bssid = wdev->conn->bssid; in cfg80211_sme_connect()
583 memcpy(wdev->conn->bssid, connect->bssid, ETH_ALEN); in cfg80211_sme_connect()
586 if (cfg80211_sme_get_conn_ies(wdev, connect->ie, connect->ie_len, in cfg80211_sme_connect()
587 &wdev->conn->ie, in cfg80211_sme_connect()
588 &wdev->conn->params.ie_len)) { in cfg80211_sme_connect()
589 kfree(wdev->conn); in cfg80211_sme_connect()
590 wdev->conn = NULL; in cfg80211_sme_connect()
593 wdev->conn->params.ie = wdev->conn->ie; in cfg80211_sme_connect()
596 wdev->conn->auto_auth = true; in cfg80211_sme_connect()
598 wdev->conn->params.auth_type = in cfg80211_sme_connect()
601 wdev->conn->auto_auth = false; in cfg80211_sme_connect()
604 wdev->conn->params.ssid = wdev->u.client.ssid; in cfg80211_sme_connect()
605 wdev->conn->params.ssid_len = wdev->u.client.ssid_len; in cfg80211_sme_connect()
608 bss = cfg80211_get_bss(wdev->wiphy, wdev->conn->params.channel, in cfg80211_sme_connect()
609 wdev->conn->params.bssid, in cfg80211_sme_connect()
610 wdev->conn->params.ssid, in cfg80211_sme_connect()
611 wdev->conn->params.ssid_len, in cfg80211_sme_connect()
612 wdev->conn_bss_type, in cfg80211_sme_connect()
613 IEEE80211_PRIVACY(wdev->conn->params.privacy)); in cfg80211_sme_connect()
616 memcpy(wdev->conn->prev_bssid, prev_bssid, ETH_ALEN); in cfg80211_sme_connect()
617 wdev->conn->prev_bssid_valid = true; in cfg80211_sme_connect()
624 cfg80211_step_auth_next(wdev->conn, bss); in cfg80211_sme_connect()
625 err = cfg80211_conn_do_work(wdev, &treason); in cfg80211_sme_connect()
626 cfg80211_put_bss(wdev->wiphy, bss); in cfg80211_sme_connect()
629 err = cfg80211_conn_scan(wdev); in cfg80211_sme_connect()
638 wdev->conn->state = CFG80211_CONN_SCAN_AGAIN; in cfg80211_sme_connect()
643 cfg80211_sme_free(wdev); in cfg80211_sme_connect()
648 static int cfg80211_sme_disconnect(struct wireless_dev *wdev, u16 reason) in cfg80211_sme_disconnect() argument
650 struct cfg80211_registered_device *rdev = wiphy_to_rdev(wdev->wiphy); in cfg80211_sme_disconnect()
653 if (!wdev->conn) in cfg80211_sme_disconnect()
659 if (wdev->conn->state == CFG80211_CONN_SCANNING || in cfg80211_sme_disconnect()
660 wdev->conn->state == CFG80211_CONN_SCAN_AGAIN) { in cfg80211_sme_disconnect()
666 err = cfg80211_mlme_deauth(rdev, wdev->netdev, in cfg80211_sme_disconnect()
667 wdev->conn->params.bssid, in cfg80211_sme_disconnect()
670 cfg80211_sme_free(wdev); in cfg80211_sme_disconnect()
681 struct wireless_dev *wdev; in cfg80211_is_all_idle() local
695 list_for_each_entry(wdev, &rdev->wiphy.wdev_list, list) { in cfg80211_is_all_idle()
696 if (wdev->conn || wdev->connected || in cfg80211_is_all_idle()
697 cfg80211_beaconing_iface_active(wdev)) in cfg80211_is_all_idle()
716 cfg80211_connect_result_release_bsses(struct wireless_dev *wdev, in cfg80211_connect_result_release_bsses() argument
725 cfg80211_put_bss(wdev->wiphy, cr->links[link].bss); in cfg80211_connect_result_release_bsses()
739 struct wireless_dev *wdev = dev->ieee80211_ptr; in __cfg80211_connect_result() local
751 lockdep_assert_wiphy(wdev->wiphy); in __cfg80211_connect_result()
753 if (WARN_ON(wdev->iftype != NL80211_IFTYPE_STATION && in __cfg80211_connect_result()
754 wdev->iftype != NL80211_IFTYPE_P2P_CLIENT)) in __cfg80211_connect_result()
766 if (WARN_ON(wdev->connect_keys)) in __cfg80211_connect_result()
770 wdev->unprot_beacon_reported = 0; in __cfg80211_connect_result()
771 nl80211_send_connect_result(wiphy_to_rdev(wdev->wiphy), dev, cr, in __cfg80211_connect_result()
795 memcpy(wdev->wext.prev_bssid, connected_addr, ETH_ALEN); in __cfg80211_connect_result()
796 wdev->wext.prev_bssid_valid = true; in __cfg80211_connect_result()
803 if (!wiphy_to_rdev(wdev->wiphy)->ops->connect) { in __cfg80211_connect_result()
819 cfg80211_get_bss(wdev->wiphy, NULL, in __cfg80211_connect_result()
821 wdev->u.client.ssid, in __cfg80211_connect_result()
822 wdev->u.client.ssid_len, in __cfg80211_connect_result()
823 wdev->conn_bss_type, in __cfg80211_connect_result()
833 cfg80211_wdev_release_bsses(wdev); in __cfg80211_connect_result()
836 kfree_sensitive(wdev->connect_keys); in __cfg80211_connect_result()
837 wdev->connect_keys = NULL; in __cfg80211_connect_result()
838 wdev->u.client.ssid_len = 0; in __cfg80211_connect_result()
839 wdev->conn_owner_nlportid = 0; in __cfg80211_connect_result()
840 cfg80211_connect_result_release_bsses(wdev, cr); in __cfg80211_connect_result()
841 cfg80211_sme_free(wdev); in __cfg80211_connect_result()
846 cfg80211_connect_result_release_bsses(wdev, cr); in __cfg80211_connect_result()
850 memset(wdev->links, 0, sizeof(wdev->links)); in __cfg80211_connect_result()
859 cfg80211_put_bss(wdev->wiphy, cr->links[link].bss); in __cfg80211_connect_result()
861 wdev->valid_links = cr->valid_links; in __cfg80211_connect_result()
863 wdev->links[link].client.current_bss = in __cfg80211_connect_result()
865 wdev->connected = true; in __cfg80211_connect_result()
866 ether_addr_copy(wdev->u.client.connected_addr, connected_addr); in __cfg80211_connect_result()
869 memcpy(wdev->links[link].addr, cr->links[link].addr, in __cfg80211_connect_result()
873 cfg80211_upload_connect_keys(wdev); in __cfg80211_connect_result()
895 regulatory_hint_country_ie(wdev->wiphy, in __cfg80211_connect_result()
900 if (!wdev->u.client.ssid_len) { in __cfg80211_connect_result()
909 memcpy(wdev->u.client.ssid, ssid->data, ssid->datalen); in __cfg80211_connect_result()
910 wdev->u.client.ssid_len = ssid->datalen; in __cfg80211_connect_result()
919 cfg80211_put_bss(wdev->wiphy, cr->links[link].bss); in __cfg80211_connect_result()
922 static void cfg80211_update_link_bss(struct wireless_dev *wdev, in cfg80211_update_link_bss() argument
925 struct cfg80211_registered_device *rdev = wiphy_to_rdev(wdev->wiphy); in cfg80211_update_link_bss()
935 found = cfg80211_get_bss(wdev->wiphy, NULL, in cfg80211_update_link_bss()
937 wdev->u.client.ssid, in cfg80211_update_link_bss()
938 wdev->u.client.ssid_len, in cfg80211_update_link_bss()
939 wdev->conn_bss_type, in cfg80211_update_link_bss()
960 cfg80211_put_bss(wdev->wiphy, tmp); in cfg80211_update_link_bss()
969 struct wireless_dev *wdev = dev->ieee80211_ptr; in cfg80211_connect_done() local
970 struct cfg80211_registered_device *rdev = wiphy_to_rdev(wdev->wiphy); in cfg80211_connect_done()
978 cfg80211_update_link_bss(wdev, ¶ms->links[link].bss); in cfg80211_connect_done()
991 cfg80211_put_bss(wdev->wiphy, in cfg80211_connect_done()
1067 spin_lock_irqsave(&wdev->event_lock, flags); in cfg80211_connect_done()
1068 list_add_tail(&ev->list, &wdev->event_list); in cfg80211_connect_done()
1069 spin_unlock_irqrestore(&wdev->event_lock, flags); in cfg80211_connect_done()
1075 void __cfg80211_roamed(struct wireless_dev *wdev, in __cfg80211_roamed() argument
1084 lockdep_assert_wiphy(wdev->wiphy); in __cfg80211_roamed()
1086 if (WARN_ON(wdev->iftype != NL80211_IFTYPE_STATION && in __cfg80211_roamed()
1087 wdev->iftype != NL80211_IFTYPE_P2P_CLIENT)) in __cfg80211_roamed()
1090 if (WARN_ON(!wdev->connected)) in __cfg80211_roamed()
1103 cfg80211_wdev_release_bsses(wdev); in __cfg80211_roamed()
1110 memset(wdev->links, 0, sizeof(wdev->links)); in __cfg80211_roamed()
1111 wdev->valid_links = info->valid_links; in __cfg80211_roamed()
1114 wdev->links[link].client.current_bss = in __cfg80211_roamed()
1121 ether_addr_copy(wdev->u.client.connected_addr, connected_addr); in __cfg80211_roamed()
1124 memcpy(wdev->links[link].addr, info->links[link].addr, in __cfg80211_roamed()
1127 wdev->unprot_beacon_reported = 0; in __cfg80211_roamed()
1128 nl80211_send_roamed(wiphy_to_rdev(wdev->wiphy), in __cfg80211_roamed()
1129 wdev->netdev, info, GFP_KERNEL); in __cfg80211_roamed()
1136 wireless_send_event(wdev->netdev, IWEVASSOCREQIE, in __cfg80211_roamed()
1143 wireless_send_event(wdev->netdev, IWEVASSOCRESPIE, in __cfg80211_roamed()
1150 memcpy(wdev->wext.prev_bssid, connected_addr, ETH_ALEN); in __cfg80211_roamed()
1151 wdev->wext.prev_bssid_valid = true; in __cfg80211_roamed()
1152 wireless_send_event(wdev->netdev, SIOCGIWAP, &wrqu, NULL); in __cfg80211_roamed()
1159 cfg80211_put_bss(wdev->wiphy, info->links[link].bss); in __cfg80211_roamed()
1166 struct wireless_dev *wdev = dev->ieee80211_ptr; in cfg80211_roamed() local
1167 struct cfg80211_registered_device *rdev = wiphy_to_rdev(wdev->wiphy); in cfg80211_roamed()
1183 cfg80211_get_bss(wdev->wiphy, in cfg80211_roamed()
1186 wdev->u.client.ssid, in cfg80211_roamed()
1187 wdev->u.client.ssid_len, in cfg80211_roamed()
1188 wdev->conn_bss_type, in cfg80211_roamed()
1272 spin_lock_irqsave(&wdev->event_lock, flags); in cfg80211_roamed()
1273 list_add_tail(&ev->list, &wdev->event_list); in cfg80211_roamed()
1274 spin_unlock_irqrestore(&wdev->event_lock, flags); in cfg80211_roamed()
1280 cfg80211_put_bss(wdev->wiphy, info->links[link].bss); in cfg80211_roamed()
1285 void __cfg80211_port_authorized(struct wireless_dev *wdev, const u8 *peer_addr, in __cfg80211_port_authorized() argument
1288 lockdep_assert_wiphy(wdev->wiphy); in __cfg80211_port_authorized()
1290 if (WARN_ON(wdev->iftype != NL80211_IFTYPE_STATION && in __cfg80211_port_authorized()
1291 wdev->iftype != NL80211_IFTYPE_P2P_CLIENT && in __cfg80211_port_authorized()
1292 wdev->iftype != NL80211_IFTYPE_AP && in __cfg80211_port_authorized()
1293 wdev->iftype != NL80211_IFTYPE_P2P_GO)) in __cfg80211_port_authorized()
1296 if (wdev->iftype == NL80211_IFTYPE_STATION || in __cfg80211_port_authorized()
1297 wdev->iftype == NL80211_IFTYPE_P2P_CLIENT) { in __cfg80211_port_authorized()
1298 if (WARN_ON(!wdev->connected) || in __cfg80211_port_authorized()
1299 WARN_ON(!ether_addr_equal(wdev->u.client.connected_addr, peer_addr))) in __cfg80211_port_authorized()
1303 nl80211_send_port_authorized(wiphy_to_rdev(wdev->wiphy), wdev->netdev, in __cfg80211_port_authorized()
1310 struct wireless_dev *wdev = dev->ieee80211_ptr; in cfg80211_port_authorized() local
1311 struct cfg80211_registered_device *rdev = wiphy_to_rdev(wdev->wiphy); in cfg80211_port_authorized()
1332 spin_lock_irqsave(&wdev->event_lock, flags); in cfg80211_port_authorized()
1333 list_add_tail(&ev->list, &wdev->event_list); in cfg80211_port_authorized()
1334 spin_unlock_irqrestore(&wdev->event_lock, flags); in cfg80211_port_authorized()
1342 struct wireless_dev *wdev = dev->ieee80211_ptr; in __cfg80211_disconnected() local
1343 struct cfg80211_registered_device *rdev = wiphy_to_rdev(wdev->wiphy); in __cfg80211_disconnected()
1349 lockdep_assert_wiphy(wdev->wiphy); in __cfg80211_disconnected()
1351 if (WARN_ON(wdev->iftype != NL80211_IFTYPE_STATION && in __cfg80211_disconnected()
1352 wdev->iftype != NL80211_IFTYPE_P2P_CLIENT)) in __cfg80211_disconnected()
1355 cfg80211_wdev_release_bsses(wdev); in __cfg80211_disconnected()
1356 wdev->valid_links = 0; in __cfg80211_disconnected()
1357 wdev->connected = false; in __cfg80211_disconnected()
1358 wdev->u.client.ssid_len = 0; in __cfg80211_disconnected()
1359 wdev->conn_owner_nlportid = 0; in __cfg80211_disconnected()
1360 kfree_sensitive(wdev->connect_keys); in __cfg80211_disconnected()
1361 wdev->connect_keys = NULL; in __cfg80211_disconnected()
1368 rdev_crit_proto_stop(rdev, wdev); in __cfg80211_disconnected()
1379 wdev->wiphy, in __cfg80211_disconnected()
1382 wdev->wiphy, in __cfg80211_disconnected()
1395 wdev->wext.connect.ssid_len = 0; in __cfg80211_disconnected()
1400 cfg80211_schedule_channels_check(wdev); in __cfg80211_disconnected()
1407 struct wireless_dev *wdev = dev->ieee80211_ptr; in cfg80211_disconnected() local
1408 struct cfg80211_registered_device *rdev = wiphy_to_rdev(wdev->wiphy); in cfg80211_disconnected()
1423 spin_lock_irqsave(&wdev->event_lock, flags); in cfg80211_disconnected()
1424 list_add_tail(&ev->list, &wdev->event_list); in cfg80211_disconnected()
1425 spin_unlock_irqrestore(&wdev->event_lock, flags); in cfg80211_disconnected()
1439 struct wireless_dev *wdev = dev->ieee80211_ptr; in cfg80211_connect() local
1442 lockdep_assert_wiphy(wdev->wiphy); in cfg80211_connect()
1449 if (wdev->u.client.ssid_len && in cfg80211_connect()
1450 (wdev->u.client.ssid_len != connect->ssid_len || in cfg80211_connect()
1451 memcmp(wdev->u.client.ssid, connect->ssid, wdev->u.client.ssid_len))) in cfg80211_connect()
1458 if (wdev->connected) { in cfg80211_connect()
1462 wdev->u.client.connected_addr)) in cfg80211_connect()
1471 if (wdev->connect_keys) in cfg80211_connect()
1516 wdev->connect_keys = connkeys; in cfg80211_connect()
1517 memcpy(wdev->u.client.ssid, connect->ssid, connect->ssid_len); in cfg80211_connect()
1518 wdev->u.client.ssid_len = connect->ssid_len; in cfg80211_connect()
1520 wdev->conn_bss_type = connect->pbss ? IEEE80211_BSS_TYPE_PBSS : in cfg80211_connect()
1524 err = cfg80211_sme_connect(wdev, connect, prev_bssid); in cfg80211_connect()
1529 wdev->connect_keys = NULL; in cfg80211_connect()
1534 if (!wdev->connected) in cfg80211_connect()
1535 wdev->u.client.ssid_len = 0; in cfg80211_connect()
1545 struct wireless_dev *wdev = dev->ieee80211_ptr; in cfg80211_disconnect() local
1548 lockdep_assert_wiphy(wdev->wiphy); in cfg80211_disconnect()
1550 kfree_sensitive(wdev->connect_keys); in cfg80211_disconnect()
1551 wdev->connect_keys = NULL; in cfg80211_disconnect()
1553 wdev->conn_owner_nlportid = 0; in cfg80211_disconnect()
1555 if (wdev->conn) in cfg80211_disconnect()
1556 err = cfg80211_sme_disconnect(wdev, reason); in cfg80211_disconnect()
1559 else if (wdev->u.client.ssid_len) in cfg80211_disconnect()
1567 if (!wdev->connected) in cfg80211_disconnect()
1568 wdev->u.client.ssid_len = 0; in cfg80211_disconnect()
1579 struct wireless_dev *wdev = in cfg80211_autodisconnect_wk() local
1581 struct cfg80211_registered_device *rdev = wiphy_to_rdev(wdev->wiphy); in cfg80211_autodisconnect_wk()
1583 guard(wiphy)(wdev->wiphy); in cfg80211_autodisconnect_wk()
1585 if (wdev->conn_owner_nlportid) { in cfg80211_autodisconnect_wk()
1586 switch (wdev->iftype) { in cfg80211_autodisconnect_wk()
1588 cfg80211_leave_ibss(rdev, wdev->netdev, false); in cfg80211_autodisconnect_wk()
1592 cfg80211_stop_ap(rdev, wdev->netdev, -1, false); in cfg80211_autodisconnect_wk()
1595 cfg80211_leave_mesh(rdev, wdev->netdev); in cfg80211_autodisconnect_wk()
1604 if (rdev->ops->disconnect || wdev->connected) in cfg80211_autodisconnect_wk()
1605 cfg80211_disconnect(rdev, wdev->netdev, in cfg80211_autodisconnect_wk()
1609 cfg80211_mlme_deauth(rdev, wdev->netdev, in cfg80211_autodisconnect_wk()
1610 wdev->disconnect_bssid, in cfg80211_autodisconnect_wk()