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 ASSERT_WDEV_LOCK(wdev); 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->channels[0] = wdev->conn->params.channel; in cfg80211_conn_scan()
104 bands = wdev->wiphy->bands[band]; in cfg80211_conn_scan()
121 memcpy(request->ssids[0].ssid, wdev->conn->params.ssid, in cfg80211_conn_scan()
122 wdev->conn->params.ssid_len); in cfg80211_conn_scan()
123 request->ssids[0].ssid_len = wdev->conn->params.ssid_len; in cfg80211_conn_scan()
127 request->wdev = wdev; in cfg80211_conn_scan()
135 wdev->conn->state = CFG80211_CONN_SCANNING; in cfg80211_conn_scan()
136 nl80211_send_scan_start(rdev, wdev); in cfg80211_conn_scan()
137 dev_hold(wdev->netdev); in cfg80211_conn_scan()
145 static int cfg80211_conn_do_work(struct wireless_dev *wdev, in cfg80211_conn_do_work() argument
148 struct cfg80211_registered_device *rdev = wiphy_to_rdev(wdev->wiphy); in cfg80211_conn_do_work()
154 ASSERT_WDEV_LOCK(wdev); in cfg80211_conn_do_work()
156 if (!wdev->conn) in cfg80211_conn_do_work()
159 params = &wdev->conn->params; in cfg80211_conn_do_work()
161 switch (wdev->conn->state) { in cfg80211_conn_do_work()
166 return cfg80211_conn_scan(wdev); in cfg80211_conn_do_work()
170 wdev->conn->state = CFG80211_CONN_AUTHENTICATING; in cfg80211_conn_do_work()
181 err = cfg80211_mlme_auth(rdev, wdev->netdev, &auth_req); in cfg80211_conn_do_work()
190 wdev->conn->state = CFG80211_CONN_ASSOCIATING; in cfg80211_conn_do_work()
191 if (wdev->conn->prev_bssid_valid) in cfg80211_conn_do_work()
192 req.prev_bssid = wdev->conn->prev_bssid; in cfg80211_conn_do_work()
212 err = cfg80211_mlme_assoc(rdev, wdev->netdev, &req); in cfg80211_conn_do_work()
217 cfg80211_mlme_deauth(rdev, wdev->netdev, params->bssid, in cfg80211_conn_do_work()
226 cfg80211_mlme_deauth(rdev, wdev->netdev, params->bssid, in cfg80211_conn_do_work()
231 cfg80211_mlme_deauth(rdev, wdev->netdev, params->bssid, in cfg80211_conn_do_work()
237 cfg80211_sme_free(wdev); in cfg80211_conn_do_work()
248 struct wireless_dev *wdev; in cfg80211_conn_work() local
254 list_for_each_entry(wdev, &rdev->wiphy.wdev_list, list) { in cfg80211_conn_work()
255 if (!wdev->netdev) in cfg80211_conn_work()
258 wdev_lock(wdev); in cfg80211_conn_work()
259 if (!netif_running(wdev->netdev)) { in cfg80211_conn_work()
260 wdev_unlock(wdev); in cfg80211_conn_work()
263 if (!wdev->conn || in cfg80211_conn_work()
264 wdev->conn->state == CFG80211_CONN_CONNECTED) { in cfg80211_conn_work()
265 wdev_unlock(wdev); in cfg80211_conn_work()
268 if (wdev->conn->params.bssid) { in cfg80211_conn_work()
269 memcpy(bssid_buf, wdev->conn->params.bssid, ETH_ALEN); in cfg80211_conn_work()
273 if (cfg80211_conn_do_work(wdev, &treason)) { in cfg80211_conn_work()
280 __cfg80211_connect_result(wdev->netdev, &cr, false); in cfg80211_conn_work()
282 wdev_unlock(wdev); in cfg80211_conn_work()
298 static struct cfg80211_bss *cfg80211_get_conn_bss(struct wireless_dev *wdev) in cfg80211_get_conn_bss() argument
300 struct cfg80211_registered_device *rdev = wiphy_to_rdev(wdev->wiphy); in cfg80211_get_conn_bss()
303 ASSERT_WDEV_LOCK(wdev); in cfg80211_get_conn_bss()
305 bss = cfg80211_get_bss(wdev->wiphy, wdev->conn->params.channel, in cfg80211_get_conn_bss()
306 wdev->conn->params.bssid, in cfg80211_get_conn_bss()
307 wdev->conn->params.ssid, in cfg80211_get_conn_bss()
308 wdev->conn->params.ssid_len, in cfg80211_get_conn_bss()
309 wdev->conn_bss_type, in cfg80211_get_conn_bss()
310 IEEE80211_PRIVACY(wdev->conn->params.privacy)); in cfg80211_get_conn_bss()
314 cfg80211_step_auth_next(wdev->conn, bss); in cfg80211_get_conn_bss()
322 struct wireless_dev *wdev = dev->ieee80211_ptr; in __cfg80211_sme_scan_done() local
323 struct cfg80211_registered_device *rdev = wiphy_to_rdev(wdev->wiphy); in __cfg80211_sme_scan_done()
326 ASSERT_WDEV_LOCK(wdev); in __cfg80211_sme_scan_done()
328 if (!wdev->conn) in __cfg80211_sme_scan_done()
331 if (wdev->conn->state != CFG80211_CONN_SCANNING && in __cfg80211_sme_scan_done()
332 wdev->conn->state != CFG80211_CONN_SCAN_AGAIN) in __cfg80211_sme_scan_done()
335 bss = cfg80211_get_conn_bss(wdev); in __cfg80211_sme_scan_done()
344 struct wireless_dev *wdev = dev->ieee80211_ptr; in cfg80211_sme_scan_done() local
346 wdev_lock(wdev); in cfg80211_sme_scan_done()
348 wdev_unlock(wdev); in cfg80211_sme_scan_done()
351 void cfg80211_sme_rx_auth(struct wireless_dev *wdev, const u8 *buf, size_t len) in cfg80211_sme_rx_auth() argument
353 struct wiphy *wiphy = wdev->wiphy; in cfg80211_sme_rx_auth()
358 ASSERT_WDEV_LOCK(wdev); in cfg80211_sme_rx_auth()
360 if (!wdev->conn || wdev->conn->state == CFG80211_CONN_CONNECTED) in cfg80211_sme_rx_auth()
364 wdev->conn->auto_auth && in cfg80211_sme_rx_auth()
365 wdev->conn->params.auth_type != NL80211_AUTHTYPE_NETWORK_EAP) { in cfg80211_sme_rx_auth()
367 switch (wdev->conn->params.auth_type) { in cfg80211_sme_rx_auth()
369 if (wdev->connect_keys) in cfg80211_sme_rx_auth()
370 wdev->conn->params.auth_type = in cfg80211_sme_rx_auth()
373 wdev->conn->params.auth_type = in cfg80211_sme_rx_auth()
377 wdev->conn->params.auth_type = in cfg80211_sme_rx_auth()
382 wdev->conn->params.auth_type = in cfg80211_sme_rx_auth()
386 wdev->conn->state = CFG80211_CONN_AUTHENTICATE_NEXT; in cfg80211_sme_rx_auth()
395 __cfg80211_connect_result(wdev->netdev, &cr, false); in cfg80211_sme_rx_auth()
396 } else if (wdev->conn->state == CFG80211_CONN_AUTHENTICATING) { in cfg80211_sme_rx_auth()
397 wdev->conn->state = CFG80211_CONN_ASSOCIATE_NEXT; in cfg80211_sme_rx_auth()
402 bool cfg80211_sme_rx_assoc_resp(struct wireless_dev *wdev, u16 status) in cfg80211_sme_rx_assoc_resp() argument
404 struct cfg80211_registered_device *rdev = wiphy_to_rdev(wdev->wiphy); in cfg80211_sme_rx_assoc_resp()
406 if (!wdev->conn) in cfg80211_sme_rx_assoc_resp()
410 wdev->conn->state = CFG80211_CONN_CONNECTED; in cfg80211_sme_rx_assoc_resp()
414 if (wdev->conn->prev_bssid_valid) { in cfg80211_sme_rx_assoc_resp()
420 wdev->conn->prev_bssid_valid = false; in cfg80211_sme_rx_assoc_resp()
421 wdev->conn->state = CFG80211_CONN_ASSOCIATE_NEXT; in cfg80211_sme_rx_assoc_resp()
426 wdev->conn->state = CFG80211_CONN_ASSOC_FAILED; in cfg80211_sme_rx_assoc_resp()
431 void cfg80211_sme_deauth(struct wireless_dev *wdev) in cfg80211_sme_deauth() argument
433 cfg80211_sme_free(wdev); in cfg80211_sme_deauth()
436 void cfg80211_sme_auth_timeout(struct wireless_dev *wdev) in cfg80211_sme_auth_timeout() argument
438 struct cfg80211_registered_device *rdev = wiphy_to_rdev(wdev->wiphy); in cfg80211_sme_auth_timeout()
440 if (!wdev->conn) in cfg80211_sme_auth_timeout()
443 wdev->conn->state = CFG80211_CONN_AUTH_FAILED_TIMEOUT; in cfg80211_sme_auth_timeout()
447 void cfg80211_sme_disassoc(struct wireless_dev *wdev) in cfg80211_sme_disassoc() argument
449 struct cfg80211_registered_device *rdev = wiphy_to_rdev(wdev->wiphy); in cfg80211_sme_disassoc()
451 if (!wdev->conn) in cfg80211_sme_disassoc()
454 wdev->conn->state = CFG80211_CONN_DEAUTH; in cfg80211_sme_disassoc()
458 void cfg80211_sme_assoc_timeout(struct wireless_dev *wdev) in cfg80211_sme_assoc_timeout() argument
460 struct cfg80211_registered_device *rdev = wiphy_to_rdev(wdev->wiphy); in cfg80211_sme_assoc_timeout()
462 if (!wdev->conn) in cfg80211_sme_assoc_timeout()
465 wdev->conn->state = CFG80211_CONN_ASSOC_FAILED_TIMEOUT; in cfg80211_sme_assoc_timeout()
469 void cfg80211_sme_abandon_assoc(struct wireless_dev *wdev) in cfg80211_sme_abandon_assoc() argument
471 struct cfg80211_registered_device *rdev = wiphy_to_rdev(wdev->wiphy); in cfg80211_sme_abandon_assoc()
473 if (!wdev->conn) in cfg80211_sme_abandon_assoc()
476 wdev->conn->state = CFG80211_CONN_ABANDON; in cfg80211_sme_abandon_assoc()
480 static void cfg80211_wdev_release_bsses(struct wireless_dev *wdev) in cfg80211_wdev_release_bsses() argument
484 for_each_valid_link(wdev, link) { in cfg80211_wdev_release_bsses()
485 if (!wdev->links[link].client.current_bss) in cfg80211_wdev_release_bsses()
487 cfg80211_unhold_bss(wdev->links[link].client.current_bss); in cfg80211_wdev_release_bsses()
488 cfg80211_put_bss(wdev->wiphy, in cfg80211_wdev_release_bsses()
489 &wdev->links[link].client.current_bss->pub); in cfg80211_wdev_release_bsses()
490 wdev->links[link].client.current_bss = NULL; in cfg80211_wdev_release_bsses()
494 void cfg80211_wdev_release_link_bsses(struct wireless_dev *wdev, u16 link_mask) in cfg80211_wdev_release_link_bsses() argument
498 for_each_valid_link(wdev, link) { in cfg80211_wdev_release_link_bsses()
499 if (!wdev->links[link].client.current_bss || in cfg80211_wdev_release_link_bsses()
502 cfg80211_unhold_bss(wdev->links[link].client.current_bss); in cfg80211_wdev_release_link_bsses()
503 cfg80211_put_bss(wdev->wiphy, in cfg80211_wdev_release_link_bsses()
504 &wdev->links[link].client.current_bss->pub); in cfg80211_wdev_release_link_bsses()
505 wdev->links[link].client.current_bss = NULL; in cfg80211_wdev_release_link_bsses()
509 static int cfg80211_sme_get_conn_ies(struct wireless_dev *wdev, in cfg80211_sme_get_conn_ies() argument
513 struct cfg80211_registered_device *rdev = wiphy_to_rdev(wdev->wiphy); in cfg80211_sme_get_conn_ies()
565 static int cfg80211_sme_connect(struct wireless_dev *wdev, in cfg80211_sme_connect() argument
569 struct cfg80211_registered_device *rdev = wiphy_to_rdev(wdev->wiphy); in cfg80211_sme_connect()
576 cfg80211_wdev_release_bsses(wdev); in cfg80211_sme_connect()
578 if (wdev->connected) { in cfg80211_sme_connect()
579 cfg80211_sme_free(wdev); in cfg80211_sme_connect()
580 wdev->connected = false; in cfg80211_sme_connect()
583 if (wdev->conn) in cfg80211_sme_connect()
586 wdev->conn = kzalloc(sizeof(*wdev->conn), GFP_KERNEL); in cfg80211_sme_connect()
587 if (!wdev->conn) in cfg80211_sme_connect()
593 memcpy(&wdev->conn->params, connect, sizeof(*connect)); in cfg80211_sme_connect()
595 wdev->conn->params.bssid = wdev->conn->bssid; in cfg80211_sme_connect()
596 memcpy(wdev->conn->bssid, connect->bssid, ETH_ALEN); in cfg80211_sme_connect()
599 if (cfg80211_sme_get_conn_ies(wdev, connect->ie, connect->ie_len, in cfg80211_sme_connect()
600 &wdev->conn->ie, in cfg80211_sme_connect()
601 &wdev->conn->params.ie_len)) { in cfg80211_sme_connect()
602 kfree(wdev->conn); in cfg80211_sme_connect()
603 wdev->conn = NULL; in cfg80211_sme_connect()
606 wdev->conn->params.ie = wdev->conn->ie; in cfg80211_sme_connect()
609 wdev->conn->auto_auth = true; in cfg80211_sme_connect()
611 wdev->conn->params.auth_type = in cfg80211_sme_connect()
614 wdev->conn->auto_auth = false; in cfg80211_sme_connect()
617 wdev->conn->params.ssid = wdev->u.client.ssid; in cfg80211_sme_connect()
618 wdev->conn->params.ssid_len = wdev->u.client.ssid_len; in cfg80211_sme_connect()
621 bss = cfg80211_get_bss(wdev->wiphy, wdev->conn->params.channel, in cfg80211_sme_connect()
622 wdev->conn->params.bssid, in cfg80211_sme_connect()
623 wdev->conn->params.ssid, in cfg80211_sme_connect()
624 wdev->conn->params.ssid_len, in cfg80211_sme_connect()
625 wdev->conn_bss_type, in cfg80211_sme_connect()
626 IEEE80211_PRIVACY(wdev->conn->params.privacy)); in cfg80211_sme_connect()
629 memcpy(wdev->conn->prev_bssid, prev_bssid, ETH_ALEN); in cfg80211_sme_connect()
630 wdev->conn->prev_bssid_valid = true; in cfg80211_sme_connect()
637 cfg80211_step_auth_next(wdev->conn, bss); in cfg80211_sme_connect()
638 err = cfg80211_conn_do_work(wdev, &treason); in cfg80211_sme_connect()
639 cfg80211_put_bss(wdev->wiphy, bss); in cfg80211_sme_connect()
642 err = cfg80211_conn_scan(wdev); in cfg80211_sme_connect()
651 wdev->conn->state = CFG80211_CONN_SCAN_AGAIN; in cfg80211_sme_connect()
656 cfg80211_sme_free(wdev); in cfg80211_sme_connect()
661 static int cfg80211_sme_disconnect(struct wireless_dev *wdev, u16 reason) in cfg80211_sme_disconnect() argument
663 struct cfg80211_registered_device *rdev = wiphy_to_rdev(wdev->wiphy); in cfg80211_sme_disconnect()
666 if (!wdev->conn) in cfg80211_sme_disconnect()
672 if (wdev->conn->state == CFG80211_CONN_SCANNING || in cfg80211_sme_disconnect()
673 wdev->conn->state == CFG80211_CONN_SCAN_AGAIN) { in cfg80211_sme_disconnect()
679 err = cfg80211_mlme_deauth(rdev, wdev->netdev, in cfg80211_sme_disconnect()
680 wdev->conn->params.bssid, in cfg80211_sme_disconnect()
683 cfg80211_sme_free(wdev); in cfg80211_sme_disconnect()
694 struct wireless_dev *wdev; in cfg80211_is_all_idle() local
706 list_for_each_entry(wdev, &rdev->wiphy.wdev_list, list) { in cfg80211_is_all_idle()
707 wdev_lock(wdev); in cfg80211_is_all_idle()
708 if (wdev->conn || wdev->connected || in cfg80211_is_all_idle()
709 cfg80211_beaconing_iface_active(wdev)) in cfg80211_is_all_idle()
711 wdev_unlock(wdev); in cfg80211_is_all_idle()
729 cfg80211_connect_result_release_bsses(struct wireless_dev *wdev, in cfg80211_connect_result_release_bsses() argument
738 cfg80211_put_bss(wdev->wiphy, cr->links[link].bss); in cfg80211_connect_result_release_bsses()
752 struct wireless_dev *wdev = dev->ieee80211_ptr; in __cfg80211_connect_result() local
764 ASSERT_WDEV_LOCK(wdev); in __cfg80211_connect_result()
766 if (WARN_ON(wdev->iftype != NL80211_IFTYPE_STATION && in __cfg80211_connect_result()
767 wdev->iftype != NL80211_IFTYPE_P2P_CLIENT)) in __cfg80211_connect_result()
779 if (WARN_ON(wdev->connect_keys)) in __cfg80211_connect_result()
783 wdev->unprot_beacon_reported = 0; in __cfg80211_connect_result()
784 nl80211_send_connect_result(wiphy_to_rdev(wdev->wiphy), dev, cr, in __cfg80211_connect_result()
808 memcpy(wdev->wext.prev_bssid, connected_addr, ETH_ALEN); in __cfg80211_connect_result()
809 wdev->wext.prev_bssid_valid = true; in __cfg80211_connect_result()
816 if (!wiphy_to_rdev(wdev->wiphy)->ops->connect) { in __cfg80211_connect_result()
832 cfg80211_get_bss(wdev->wiphy, NULL, in __cfg80211_connect_result()
834 wdev->u.client.ssid, in __cfg80211_connect_result()
835 wdev->u.client.ssid_len, in __cfg80211_connect_result()
836 wdev->conn_bss_type, in __cfg80211_connect_result()
846 cfg80211_wdev_release_bsses(wdev); in __cfg80211_connect_result()
849 kfree_sensitive(wdev->connect_keys); in __cfg80211_connect_result()
850 wdev->connect_keys = NULL; in __cfg80211_connect_result()
851 wdev->u.client.ssid_len = 0; in __cfg80211_connect_result()
852 wdev->conn_owner_nlportid = 0; in __cfg80211_connect_result()
853 cfg80211_connect_result_release_bsses(wdev, cr); in __cfg80211_connect_result()
854 cfg80211_sme_free(wdev); in __cfg80211_connect_result()
859 cfg80211_connect_result_release_bsses(wdev, cr); in __cfg80211_connect_result()
863 memset(wdev->links, 0, sizeof(wdev->links)); in __cfg80211_connect_result()
872 cfg80211_put_bss(wdev->wiphy, cr->links[link].bss); in __cfg80211_connect_result()
874 wdev->valid_links = cr->valid_links; in __cfg80211_connect_result()
876 wdev->links[link].client.current_bss = in __cfg80211_connect_result()
878 wdev->connected = true; in __cfg80211_connect_result()
879 ether_addr_copy(wdev->u.client.connected_addr, connected_addr); in __cfg80211_connect_result()
882 memcpy(wdev->links[link].addr, cr->links[link].addr, in __cfg80211_connect_result()
886 cfg80211_upload_connect_keys(wdev); in __cfg80211_connect_result()
908 regulatory_hint_country_ie(wdev->wiphy, in __cfg80211_connect_result()
913 if (!wdev->u.client.ssid_len) { in __cfg80211_connect_result()
922 memcpy(wdev->u.client.ssid, ssid->data, ssid->datalen); in __cfg80211_connect_result()
923 wdev->u.client.ssid_len = ssid->datalen; in __cfg80211_connect_result()
932 cfg80211_put_bss(wdev->wiphy, cr->links[link].bss); in __cfg80211_connect_result()
935 static void cfg80211_update_link_bss(struct wireless_dev *wdev, in cfg80211_update_link_bss() argument
938 struct cfg80211_registered_device *rdev = wiphy_to_rdev(wdev->wiphy); in cfg80211_update_link_bss()
948 found = cfg80211_get_bss(wdev->wiphy, NULL, in cfg80211_update_link_bss()
950 wdev->u.client.ssid, in cfg80211_update_link_bss()
951 wdev->u.client.ssid_len, in cfg80211_update_link_bss()
952 wdev->conn_bss_type, in cfg80211_update_link_bss()
973 cfg80211_put_bss(wdev->wiphy, tmp); in cfg80211_update_link_bss()
982 struct wireless_dev *wdev = dev->ieee80211_ptr; in cfg80211_connect_done() local
983 struct cfg80211_registered_device *rdev = wiphy_to_rdev(wdev->wiphy); in cfg80211_connect_done()
991 cfg80211_update_link_bss(wdev, &params->links[link].bss); in cfg80211_connect_done()
1004 cfg80211_put_bss(wdev->wiphy, in cfg80211_connect_done()
1079 spin_lock_irqsave(&wdev->event_lock, flags); in cfg80211_connect_done()
1080 list_add_tail(&ev->list, &wdev->event_list); in cfg80211_connect_done()
1081 spin_unlock_irqrestore(&wdev->event_lock, flags); in cfg80211_connect_done()
1087 void __cfg80211_roamed(struct wireless_dev *wdev, in __cfg80211_roamed() argument
1096 ASSERT_WDEV_LOCK(wdev); in __cfg80211_roamed()
1098 if (WARN_ON(wdev->iftype != NL80211_IFTYPE_STATION && in __cfg80211_roamed()
1099 wdev->iftype != NL80211_IFTYPE_P2P_CLIENT)) in __cfg80211_roamed()
1102 if (WARN_ON(!wdev->connected)) in __cfg80211_roamed()
1115 cfg80211_wdev_release_bsses(wdev); in __cfg80211_roamed()
1122 memset(wdev->links, 0, sizeof(wdev->links)); in __cfg80211_roamed()
1123 wdev->valid_links = info->valid_links; in __cfg80211_roamed()
1126 wdev->links[link].client.current_bss = in __cfg80211_roamed()
1133 ether_addr_copy(wdev->u.client.connected_addr, connected_addr); in __cfg80211_roamed()
1136 memcpy(wdev->links[link].addr, info->links[link].addr, in __cfg80211_roamed()
1139 wdev->unprot_beacon_reported = 0; in __cfg80211_roamed()
1140 nl80211_send_roamed(wiphy_to_rdev(wdev->wiphy), in __cfg80211_roamed()
1141 wdev->netdev, info, GFP_KERNEL); in __cfg80211_roamed()
1148 wireless_send_event(wdev->netdev, IWEVASSOCREQIE, in __cfg80211_roamed()
1155 wireless_send_event(wdev->netdev, IWEVASSOCRESPIE, in __cfg80211_roamed()
1162 memcpy(wdev->wext.prev_bssid, connected_addr, ETH_ALEN); in __cfg80211_roamed()
1163 wdev->wext.prev_bssid_valid = true; in __cfg80211_roamed()
1164 wireless_send_event(wdev->netdev, SIOCGIWAP, &wrqu, NULL); in __cfg80211_roamed()
1171 cfg80211_put_bss(wdev->wiphy, info->links[link].bss); in __cfg80211_roamed()
1178 struct wireless_dev *wdev = dev->ieee80211_ptr; in cfg80211_roamed() local
1179 struct cfg80211_registered_device *rdev = wiphy_to_rdev(wdev->wiphy); in cfg80211_roamed()
1195 cfg80211_get_bss(wdev->wiphy, in cfg80211_roamed()
1198 wdev->u.client.ssid, in cfg80211_roamed()
1199 wdev->u.client.ssid_len, in cfg80211_roamed()
1200 wdev->conn_bss_type, in cfg80211_roamed()
1284 spin_lock_irqsave(&wdev->event_lock, flags); in cfg80211_roamed()
1285 list_add_tail(&ev->list, &wdev->event_list); in cfg80211_roamed()
1286 spin_unlock_irqrestore(&wdev->event_lock, flags); in cfg80211_roamed()
1292 cfg80211_put_bss(wdev->wiphy, info->links[link].bss); in cfg80211_roamed()
1297 void __cfg80211_port_authorized(struct wireless_dev *wdev, const u8 *bssid, in __cfg80211_port_authorized() argument
1300 ASSERT_WDEV_LOCK(wdev); in __cfg80211_port_authorized()
1302 if (WARN_ON(wdev->iftype != NL80211_IFTYPE_STATION && in __cfg80211_port_authorized()
1303 wdev->iftype != NL80211_IFTYPE_P2P_CLIENT)) in __cfg80211_port_authorized()
1306 if (WARN_ON(!wdev->connected) || in __cfg80211_port_authorized()
1307 WARN_ON(!ether_addr_equal(wdev->u.client.connected_addr, bssid))) in __cfg80211_port_authorized()
1310 nl80211_send_port_authorized(wiphy_to_rdev(wdev->wiphy), wdev->netdev, in __cfg80211_port_authorized()
1317 struct wireless_dev *wdev = dev->ieee80211_ptr; in cfg80211_port_authorized() local
1318 struct cfg80211_registered_device *rdev = wiphy_to_rdev(wdev->wiphy); in cfg80211_port_authorized()
1339 spin_lock_irqsave(&wdev->event_lock, flags); in cfg80211_port_authorized()
1340 list_add_tail(&ev->list, &wdev->event_list); in cfg80211_port_authorized()
1341 spin_unlock_irqrestore(&wdev->event_lock, flags); in cfg80211_port_authorized()
1349 struct wireless_dev *wdev = dev->ieee80211_ptr; in __cfg80211_disconnected() local
1350 struct cfg80211_registered_device *rdev = wiphy_to_rdev(wdev->wiphy); in __cfg80211_disconnected()
1356 ASSERT_WDEV_LOCK(wdev); in __cfg80211_disconnected()
1358 if (WARN_ON(wdev->iftype != NL80211_IFTYPE_STATION && in __cfg80211_disconnected()
1359 wdev->iftype != NL80211_IFTYPE_P2P_CLIENT)) in __cfg80211_disconnected()
1362 cfg80211_wdev_release_bsses(wdev); in __cfg80211_disconnected()
1363 wdev->connected = false; in __cfg80211_disconnected()
1364 wdev->u.client.ssid_len = 0; in __cfg80211_disconnected()
1365 wdev->conn_owner_nlportid = 0; in __cfg80211_disconnected()
1366 kfree_sensitive(wdev->connect_keys); in __cfg80211_disconnected()
1367 wdev->connect_keys = NULL; in __cfg80211_disconnected()
1374 rdev_crit_proto_stop(rdev, wdev); in __cfg80211_disconnected()
1385 wdev->wiphy, in __cfg80211_disconnected()
1388 wdev->wiphy, in __cfg80211_disconnected()
1401 wdev->wext.connect.ssid_len = 0; in __cfg80211_disconnected()
1411 struct wireless_dev *wdev = dev->ieee80211_ptr; in cfg80211_disconnected() local
1412 struct cfg80211_registered_device *rdev = wiphy_to_rdev(wdev->wiphy); in cfg80211_disconnected()
1427 spin_lock_irqsave(&wdev->event_lock, flags); in cfg80211_disconnected()
1428 list_add_tail(&ev->list, &wdev->event_list); in cfg80211_disconnected()
1429 spin_unlock_irqrestore(&wdev->event_lock, flags); in cfg80211_disconnected()
1443 struct wireless_dev *wdev = dev->ieee80211_ptr; in cfg80211_connect() local
1446 ASSERT_WDEV_LOCK(wdev); in cfg80211_connect()
1453 if (wdev->u.client.ssid_len && in cfg80211_connect()
1454 (wdev->u.client.ssid_len != connect->ssid_len || in cfg80211_connect()
1455 memcmp(wdev->u.client.ssid, connect->ssid, wdev->u.client.ssid_len))) in cfg80211_connect()
1462 if (wdev->connected) { in cfg80211_connect()
1466 wdev->u.client.connected_addr)) in cfg80211_connect()
1475 if (wdev->connect_keys) in cfg80211_connect()
1520 wdev->connect_keys = connkeys; in cfg80211_connect()
1521 memcpy(wdev->u.client.ssid, connect->ssid, connect->ssid_len); in cfg80211_connect()
1522 wdev->u.client.ssid_len = connect->ssid_len; in cfg80211_connect()
1524 wdev->conn_bss_type = connect->pbss ? IEEE80211_BSS_TYPE_PBSS : in cfg80211_connect()
1528 err = cfg80211_sme_connect(wdev, connect, prev_bssid); in cfg80211_connect()
1533 wdev->connect_keys = NULL; in cfg80211_connect()
1538 if (!wdev->connected) in cfg80211_connect()
1539 wdev->u.client.ssid_len = 0; in cfg80211_connect()
1549 struct wireless_dev *wdev = dev->ieee80211_ptr; in cfg80211_disconnect() local
1552 ASSERT_WDEV_LOCK(wdev); in cfg80211_disconnect()
1554 kfree_sensitive(wdev->connect_keys); in cfg80211_disconnect()
1555 wdev->connect_keys = NULL; in cfg80211_disconnect()
1557 wdev->conn_owner_nlportid = 0; in cfg80211_disconnect()
1559 if (wdev->conn) in cfg80211_disconnect()
1560 err = cfg80211_sme_disconnect(wdev, reason); in cfg80211_disconnect()
1563 else if (wdev->u.client.ssid_len) in cfg80211_disconnect()
1571 if (!wdev->connected) in cfg80211_disconnect()
1572 wdev->u.client.ssid_len = 0; in cfg80211_disconnect()
1583 struct wireless_dev *wdev = in cfg80211_autodisconnect_wk() local
1585 struct cfg80211_registered_device *rdev = wiphy_to_rdev(wdev->wiphy); in cfg80211_autodisconnect_wk()
1587 wiphy_lock(wdev->wiphy); in cfg80211_autodisconnect_wk()
1588 wdev_lock(wdev); in cfg80211_autodisconnect_wk()
1590 if (wdev->conn_owner_nlportid) { in cfg80211_autodisconnect_wk()
1591 switch (wdev->iftype) { in cfg80211_autodisconnect_wk()
1593 __cfg80211_leave_ibss(rdev, wdev->netdev, false); in cfg80211_autodisconnect_wk()
1597 __cfg80211_stop_ap(rdev, wdev->netdev, -1, false); in cfg80211_autodisconnect_wk()
1600 __cfg80211_leave_mesh(rdev, wdev->netdev); in cfg80211_autodisconnect_wk()
1609 if (rdev->ops->disconnect || wdev->connected) in cfg80211_autodisconnect_wk()
1610 cfg80211_disconnect(rdev, wdev->netdev, in cfg80211_autodisconnect_wk()
1614 cfg80211_mlme_deauth(rdev, wdev->netdev, in cfg80211_autodisconnect_wk()
1615 wdev->disconnect_bssid, in cfg80211_autodisconnect_wk()
1625 wdev_unlock(wdev); in cfg80211_autodisconnect_wk()
1626 wiphy_unlock(wdev->wiphy); in cfg80211_autodisconnect_wk()