Lines Matching full:drv

197 static void mlme_event_auth(struct wpa_driver_nl80211_data *drv,  in mlme_event_auth()  argument
203 if (!(drv->capa.flags & WPA_DRIVER_FLAGS_SME) && in mlme_event_auth()
204 drv->force_connect_cmd) { in mlme_event_auth()
222 os_memcpy(drv->auth_bssid, mgmt->sa, ETH_ALEN); in mlme_event_auth()
223 os_memset(drv->auth_attempt_bssid, 0, ETH_ALEN); in mlme_event_auth()
235 wpa_supplicant_event(drv->ctx, EVENT_AUTH, &event); in mlme_event_auth()
259 static void mlme_event_assoc(struct wpa_driver_nl80211_data *drv, in mlme_event_assoc() argument
268 if (!(drv->capa.flags & WPA_DRIVER_FLAGS_SME) && in mlme_event_assoc()
269 drv->force_connect_cmd) { in mlme_event_assoc()
299 wpa_supplicant_event(drv->ctx, EVENT_ASSOC_REJECT, &event); in mlme_event_assoc()
303 drv->associated = 1; in mlme_event_assoc()
304 os_memcpy(drv->bssid, mgmt->sa, ETH_ALEN); in mlme_event_assoc()
305 os_memcpy(drv->prev_bssid, mgmt->sa, ETH_ALEN); in mlme_event_assoc()
322 * drv->ssid needs to be set here to satisfy later checking. */ in mlme_event_assoc()
323 ssid_len = nl80211_get_assoc_ssid(drv, drv->ssid); in mlme_event_assoc()
325 drv->ssid_len = ssid_len; in mlme_event_assoc()
327 "nl80211: Set drv->ssid based on scan res info to '%s'", in mlme_event_assoc()
328 wpa_ssid_txt(drv->ssid, drv->ssid_len)); in mlme_event_assoc()
331 event.assoc_info.freq = drv->assoc_freq; in mlme_event_assoc()
332 drv->first_bss->flink->freq = drv->assoc_freq; in mlme_event_assoc()
336 wpa_supplicant_event(drv->ctx, EVENT_ASSOC, &event); in mlme_event_assoc()
375 drv_get_connect_fail_reason_code(struct wpa_driver_nl80211_data *drv) in drv_get_connect_fail_reason_code() argument
381 msg = nl80211_drv_msg(drv, 0, NL80211_CMD_VENDOR); in drv_get_connect_fail_reason_code()
389 ret = send_and_recv_resp(drv, msg, in drv_get_connect_fail_reason_code()
426 static void qca_nl80211_link_reconfig_event(struct wpa_driver_nl80211_data *drv, in qca_nl80211_link_reconfig_event() argument
445 if (!drv->sta_mlo_info.valid_links || in qca_nl80211_link_reconfig_event()
446 !ether_addr_equal(drv->sta_mlo_info.ap_mld_addr, ap_mld)) { in qca_nl80211_link_reconfig_event()
447 if (drv->pending_link_reconfig_data == data) { in qca_nl80211_link_reconfig_event()
450 os_free(drv->pending_link_reconfig_data); in qca_nl80211_link_reconfig_event()
451 drv->pending_link_reconfig_data = NULL; in qca_nl80211_link_reconfig_event()
457 if (drv->pending_link_reconfig_data) { in qca_nl80211_link_reconfig_event()
459 os_free(drv->pending_link_reconfig_data); in qca_nl80211_link_reconfig_event()
461 drv->pending_link_reconfig_data = os_memdup(data, len); in qca_nl80211_link_reconfig_event()
462 if (!drv->pending_link_reconfig_data) in qca_nl80211_link_reconfig_event()
464 drv->pending_link_reconfig_data_len = len; in qca_nl80211_link_reconfig_event()
473 drv->sta_mlo_info.valid_links &= ~removed_links; in qca_nl80211_link_reconfig_event()
479 if (removed_links & BIT(drv->sta_mlo_info.assoc_link_id)) { in qca_nl80211_link_reconfig_event()
480 for_each_link(drv->sta_mlo_info.valid_links, i) { in qca_nl80211_link_reconfig_event()
481 os_memcpy(drv->bssid, drv->sta_mlo_info.links[i].bssid, in qca_nl80211_link_reconfig_event()
483 drv->sta_mlo_info.assoc_link_id = i; in qca_nl80211_link_reconfig_event()
491 wpa_supplicant_event(drv->ctx, EVENT_LINK_RECONFIG, NULL); in qca_nl80211_link_reconfig_event()
733 static void nl80211_parse_mlo_info(struct wpa_driver_nl80211_data *drv, in nl80211_parse_mlo_info() argument
741 struct driver_sta_mlo_info *mlo = &drv->sta_mlo_info; in nl80211_parse_mlo_info()
759 drv->sta_mlo_info.assoc_link_id = res; in nl80211_parse_mlo_info()
780 os_memcpy(drv->bssid, mlo->links[drv->sta_mlo_info.assoc_link_id].bssid, in nl80211_parse_mlo_info()
782 os_memcpy(drv->prev_bssid, drv->bssid, ETH_ALEN); in nl80211_parse_mlo_info()
788 qca_nl80211_tid_to_link_map_event(struct wpa_driver_nl80211_data *drv, in qca_nl80211_tid_to_link_map_event() argument
808 if (!drv->sta_mlo_info.valid_links || in qca_nl80211_tid_to_link_map_event()
809 !ether_addr_equal(drv->sta_mlo_info.ap_mld_addr, ap_mld)) { in qca_nl80211_tid_to_link_map_event()
810 if (drv->pending_t2lm_data == data) { in qca_nl80211_tid_to_link_map_event()
813 os_free(drv->pending_t2lm_data); in qca_nl80211_tid_to_link_map_event()
814 drv->pending_t2lm_data = NULL; in qca_nl80211_tid_to_link_map_event()
819 if (drv->pending_t2lm_data) { in qca_nl80211_tid_to_link_map_event()
822 os_free(drv->pending_t2lm_data); in qca_nl80211_tid_to_link_map_event()
824 drv->pending_t2lm_data = os_memdup(data, len); in qca_nl80211_tid_to_link_map_event()
825 if (!drv->pending_t2lm_data) in qca_nl80211_tid_to_link_map_event()
827 drv->pending_t2lm_data_len = len; in qca_nl80211_tid_to_link_map_event()
872 for_each_link(drv->sta_mlo_info.valid_links, i) { in qca_nl80211_tid_to_link_map_event()
885 drv->sta_mlo_info.default_map = event.t2l_map_info.default_map; in qca_nl80211_tid_to_link_map_event()
887 event.t2l_map_info.valid_links = drv->sta_mlo_info.valid_links; in qca_nl80211_tid_to_link_map_event()
888 for (i = 0; i < MAX_NUM_MLD_LINKS && !drv->sta_mlo_info.default_map; in qca_nl80211_tid_to_link_map_event()
890 if (!(drv->sta_mlo_info.valid_links & BIT(i))) in qca_nl80211_tid_to_link_map_event()
893 drv->sta_mlo_info.links[i].t2lmap.uplink = in qca_nl80211_tid_to_link_map_event()
895 drv->sta_mlo_info.links[i].t2lmap.downlink = in qca_nl80211_tid_to_link_map_event()
899 wpa_supplicant_event(drv->ctx, EVENT_TID_LINK_MAP, &event); in qca_nl80211_tid_to_link_map_event()
904 static void mlme_event_connect(struct wpa_driver_nl80211_data *drv, in mlme_event_connect() argument
926 if (drv->capa.flags & WPA_DRIVER_FLAGS_SME) { in mlme_event_connect()
936 drv->connect_reassoc = 0; in mlme_event_connect()
943 status_code, drv->ignore_next_local_disconnect); in mlme_event_connect()
952 if (drv->ignore_next_local_disconnect) { in mlme_event_connect()
953 drv->ignore_next_local_disconnect = 0; in mlme_event_connect()
956 drv->auth_attempt_bssid)) { in mlme_event_connect()
996 if (drv->get_sta_info_vendor_cmd_avail) { in mlme_event_connect()
999 reason_code = drv_get_connect_fail_reason_code(drv); in mlme_event_connect()
1005 wpa_supplicant_event(drv->ctx, EVENT_ASSOC_REJECT, &event); in mlme_event_connect()
1009 drv->associated = 1; in mlme_event_connect()
1010 os_memset(&drv->sta_mlo_info, 0, sizeof(drv->sta_mlo_info)); in mlme_event_connect()
1011 nl80211_parse_mlo_info(drv, qca_roam_auth, addr, mlo_links, req_ie, in mlme_event_connect()
1013 if (!drv->sta_mlo_info.valid_links && addr) { in mlme_event_connect()
1014 os_memcpy(drv->bssid, nla_data(addr), ETH_ALEN); in mlme_event_connect()
1015 os_memcpy(drv->prev_bssid, drv->bssid, ETH_ALEN); in mlme_event_connect()
1027 drv->ssid_len = ssid[1]; in mlme_event_connect()
1028 os_memcpy(drv->ssid, ssid + 2, ssid[1]); in mlme_event_connect()
1030 "nl80211: Set drv->ssid based on req_ie to '%s'", in mlme_event_connect()
1031 wpa_ssid_txt(drv->ssid, in mlme_event_connect()
1032 drv->ssid_len)); in mlme_event_connect()
1041 event.assoc_info.freq = nl80211_get_assoc_freq(drv); in mlme_event_connect()
1042 drv->first_bss->flink->freq = drv->assoc_freq; in mlme_event_connect()
1045 (ssid_len = nl80211_get_assoc_ssid(drv, drv->ssid)) > 0) { in mlme_event_connect()
1047 * drv->ssid needs to be set here to satisfy later checking. */ in mlme_event_connect()
1048 drv->ssid_len = ssid_len; in mlme_event_connect()
1050 "nl80211: Set drv->ssid based on scan res info to '%s'", in mlme_event_connect()
1051 wpa_ssid_txt(drv->ssid, drv->ssid_len)); in mlme_event_connect()
1094 wpa_supplicant_event(drv->ctx, EVENT_ASSOC, &event); in mlme_event_connect()
1101 drv->ignore_next_local_disconnect = 0; in mlme_event_connect()
1104 if (drv->pending_t2lm_data) in mlme_event_connect()
1105 qca_nl80211_tid_to_link_map_event(drv, drv->pending_t2lm_data, in mlme_event_connect()
1106 drv->pending_t2lm_data_len); in mlme_event_connect()
1108 drv->sta_mlo_info.default_map = true; in mlme_event_connect()
1110 if (drv->pending_link_reconfig_data) in mlme_event_connect()
1112 drv, drv->pending_link_reconfig_data, in mlme_event_connect()
1113 drv->pending_link_reconfig_data_len); in mlme_event_connect()
1118 static void mlme_event_disconnect(struct wpa_driver_nl80211_data *drv, in mlme_event_disconnect() argument
1125 if (drv->capa.flags & WPA_DRIVER_FLAGS_SME) { in mlme_event_disconnect()
1135 if (drv->ignore_next_local_disconnect) { in mlme_event_disconnect()
1136 drv->ignore_next_local_disconnect = 0; in mlme_event_disconnect()
1148 nl80211_mark_disconnected(drv); in mlme_event_disconnect()
1153 wpa_supplicant_event(drv->ctx, EVENT_DEAUTH, &data); in mlme_event_disconnect()
1193 static void mlme_event_ch_switch(struct wpa_driver_nl80211_data *drv, in mlme_event_ch_switch() argument
1214 bss = get_bss_ifindex(drv, ifidx); in mlme_event_ch_switch()
1286 if (link && is_sta_interface(drv->nlmode)) { in mlme_event_ch_switch()
1290 drv->sta_mlo_info.valid_links & BIT(link_id)) { in mlme_event_ch_switch()
1291 drv->sta_mlo_info.links[link_id].freq = in mlme_event_ch_switch()
1299 if (link_id != drv->sta_mlo_info.assoc_link_id) in mlme_event_ch_switch()
1303 drv->assoc_freq = data.ch_switch.freq; in mlme_event_ch_switch()
1310 static void mlme_timeout_event(struct wpa_driver_nl80211_data *drv, in mlme_timeout_event() argument
1331 wpa_supplicant_event(drv->ctx, ev, &event); in mlme_timeout_event()
1340 struct wpa_driver_nl80211_data *drv = bss->drv; in mlme_event_mgmt() local
1363 rx_freq = drv->last_mgmt_freq = event.rx_mgmt.freq; in mlme_event_mgmt()
1379 wpa_supplicant_event(drv->ctx, EVENT_RX_MGMT, &event); in mlme_event_mgmt()
1389 struct wpa_driver_nl80211_data *drv = bss->drv; in mlme_event_mgmt_tx_status() local
1403 if (cookie_val && cookie_val == drv->eapol_tx_cookie && in mlme_event_mgmt_tx_status()
1416 if (!is_ap_interface(drv->nlmode) && in mlme_event_mgmt_tx_status()
1424 cookie_val == drv->send_frame_cookie ? in mlme_event_mgmt_tx_status()
1426 if (cookie_val != drv->send_frame_cookie) in mlme_event_mgmt_tx_status()
1428 } else if (!is_ap_interface(drv->nlmode) && in mlme_event_mgmt_tx_status()
1442 event.tx_status.link_id = cookie_val == drv->send_frame_cookie ? in mlme_event_mgmt_tx_status()
1443 drv->send_frame_link_id : NL80211_DRV_LINK_ID_NA; in mlme_event_mgmt_tx_status()
1448 static void mlme_event_deauth_disassoc(struct wpa_driver_nl80211_data *drv, in mlme_event_deauth_disassoc() argument
1466 if ((drv->capa.flags & WPA_DRIVER_FLAGS_SME) && in mlme_event_deauth_disassoc()
1467 !drv->associated && in mlme_event_deauth_disassoc()
1468 !ether_addr_equal(bssid, drv->auth_bssid) && in mlme_event_deauth_disassoc()
1469 !ether_addr_equal(bssid, drv->auth_attempt_bssid) && in mlme_event_deauth_disassoc()
1470 ether_addr_equal(bssid, drv->prev_bssid)) { in mlme_event_deauth_disassoc()
1479 if (ether_addr_equal(mgmt->sa, drv->first_bss->addr) || in mlme_event_deauth_disassoc()
1480 (!is_zero_ether_addr(drv->first_bss->prev_addr) && in mlme_event_deauth_disassoc()
1482 drv->first_bss->prev_addr))) { in mlme_event_deauth_disassoc()
1485 drv->ignore_next_local_deauth = 0; in mlme_event_deauth_disassoc()
1490 MAC2STR(drv->auth_attempt_bssid)); in mlme_event_deauth_disassoc()
1495 if (!(drv->capa.flags & WPA_DRIVER_FLAGS_SME) && in mlme_event_deauth_disassoc()
1496 drv->connect_reassoc && drv->associated && in mlme_event_deauth_disassoc()
1497 ether_addr_equal(bssid, drv->prev_bssid) && in mlme_event_deauth_disassoc()
1498 !ether_addr_equal(bssid, drv->auth_attempt_bssid)) { in mlme_event_deauth_disassoc()
1509 MAC2STR(drv->auth_attempt_bssid)); in mlme_event_deauth_disassoc()
1513 if (drv->associated != 0 && in mlme_event_deauth_disassoc()
1514 !ether_addr_equal(bssid, drv->bssid) && in mlme_event_deauth_disassoc()
1515 !ether_addr_equal(bssid, drv->auth_bssid)) { in mlme_event_deauth_disassoc()
1528 nl80211_mark_disconnected(drv); in mlme_event_deauth_disassoc()
1537 ether_addr_equal(mgmt->sa, drv->first_bss->addr); in mlme_event_deauth_disassoc()
1547 ether_addr_equal(mgmt->sa, drv->first_bss->addr); in mlme_event_deauth_disassoc()
1548 if (drv->ignore_deauth_event) { in mlme_event_deauth_disassoc()
1550 drv->ignore_deauth_event = 0; in mlme_event_deauth_disassoc()
1552 drv->ignore_next_local_deauth = 0; in mlme_event_deauth_disassoc()
1555 if (drv->ignore_next_local_deauth) { in mlme_event_deauth_disassoc()
1556 drv->ignore_next_local_deauth = 0; in mlme_event_deauth_disassoc()
1572 wpa_supplicant_event(drv->ctx, type, &event); in mlme_event_deauth_disassoc()
1576 static void mlme_event_unprot_disconnect(struct wpa_driver_nl80211_data *drv, in mlme_event_unprot_disconnect() argument
1609 wpa_supplicant_event(drv->ctx, type, &event); in mlme_event_unprot_disconnect()
1613 static void mlme_event_unprot_beacon(struct wpa_driver_nl80211_data *drv, in mlme_event_unprot_beacon() argument
1626 wpa_supplicant_event(drv->ctx, EVENT_UNPROT_BEACON, &event); in mlme_event_unprot_beacon()
1652 struct wpa_driver_nl80211_data *drv = bss->drv; in mlme_event() local
1660 mlme_timeout_event(drv, cmd, addr); in mlme_event()
1720 (is_zero_ether_addr(drv->first_bss->prev_addr) || in mlme_event()
1733 mlme_event_auth(drv, nla_data(frame), nla_len(frame)); in mlme_event()
1736 mlme_event_assoc(drv, nla_data(frame), nla_len(frame), wmm, in mlme_event()
1740 mlme_event_deauth_disassoc(drv, EVENT_DEAUTH, in mlme_event()
1744 mlme_event_deauth_disassoc(drv, EVENT_DISASSOC, in mlme_event()
1756 mlme_event_unprot_disconnect(drv, EVENT_UNPROT_DEAUTH, in mlme_event()
1760 mlme_event_unprot_disconnect(drv, EVENT_UNPROT_DISASSOC, in mlme_event()
1764 mlme_event_unprot_beacon(drv, nla_data(frame), nla_len(frame)); in mlme_event()
1808 static void mlme_event_join_ibss(struct wpa_driver_nl80211_data *drv, in mlme_event_join_ibss() argument
1819 os_memcpy(drv->bssid, nla_data(tb[NL80211_ATTR_MAC]), ETH_ALEN); in mlme_event_join_ibss()
1821 drv->associated = 1; in mlme_event_join_ibss()
1823 MAC2STR(drv->bssid)); in mlme_event_join_ibss()
1825 freq = nl80211_get_assoc_freq(drv); in mlme_event_join_ibss()
1829 drv->first_bss->flink->freq = freq; in mlme_event_join_ibss()
1835 wpa_supplicant_event(drv->ctx, EVENT_ASSOC, &event); in mlme_event_join_ibss()
1839 static void mlme_event_remain_on_channel(struct wpa_driver_nl80211_data *drv, in mlme_event_remain_on_channel() argument
1870 cookie == drv->remain_on_chan_cookie ? "match" : "unknown"); in mlme_event_remain_on_channel()
1872 if (cookie != drv->remain_on_chan_cookie) in mlme_event_remain_on_channel()
1876 drv->pending_remain_on_chan = 0; in mlme_event_remain_on_channel()
1881 wpa_supplicant_event(drv->ctx, cancel_event ? in mlme_event_remain_on_channel()
1887 static void mlme_event_ft_event(struct wpa_driver_nl80211_data *drv, in mlme_event_ft_event() argument
1911 wpa_supplicant_event(drv->ctx, EVENT_FT_RESPONSE, &data); in mlme_event_ft_event()
1915 static void mlme_event_dh_event(struct wpa_driver_nl80211_data *drv, in mlme_event_dh_event() argument
1923 if (!is_ap_interface(drv->nlmode)) in mlme_event_dh_event()
1968 static void send_scan_event(struct wpa_driver_nl80211_data *drv, int aborted, in send_scan_event() argument
1979 if (!external_scan && drv->scan_for_auth) { in send_scan_event()
1980 drv->scan_for_auth = 0; in send_scan_event()
1983 wpa_driver_nl80211_authenticate_retry(drv); in send_scan_event()
2041 wpa_supplicant_event(drv->ctx, EVENT_SCAN_RESULTS, &event); in send_scan_event()
2045 static void nl80211_cqm_event(struct wpa_driver_nl80211_data *drv, in nl80211_cqm_event() argument
2082 wpa_supplicant_event(drv->ctx, EVENT_STATION_LOW_ACK, &ed); in nl80211_cqm_event()
2088 wpa_supplicant_event(drv->ctx, EVENT_BEACON_LOSS, NULL); in nl80211_cqm_event()
2131 res = nl80211_get_link_signal(drv, drv->bssid, &ed.signal_change.data); in nl80211_cqm_event()
2141 res = nl80211_get_link_noise(drv, &ed.signal_change); in nl80211_cqm_event()
2150 wpa_supplicant_event(drv->ctx, EVENT_SIGNAL_CHANGE, &ed); in nl80211_cqm_event()
2154 static void nl80211_new_peer_candidate(struct wpa_driver_nl80211_data *drv, in nl80211_new_peer_candidate() argument
2160 if (drv->nlmode != NL80211_IFTYPE_MESH_POINT || in nl80211_new_peer_candidate()
2172 wpa_supplicant_event(drv->ctx, EVENT_NEW_PEER_CANDIDATE, &data); in nl80211_new_peer_candidate()
2176 static void nl80211_new_station_event(struct wpa_driver_nl80211_data *drv, in nl80211_new_station_event() argument
2189 if (is_ap_interface(drv->nlmode) && drv->device_ap_sme) { in nl80211_new_station_event()
2237 if (drv->nlmode != NL80211_IFTYPE_ADHOC) in nl80211_new_station_event()
2246 static void nl80211_del_station_event(struct wpa_driver_nl80211_data *drv, in nl80211_del_station_event() argument
2259 if (is_ap_interface(drv->nlmode) && drv->device_ap_sme) { in nl80211_del_station_event()
2264 if (drv->nlmode != NL80211_IFTYPE_ADHOC) in nl80211_del_station_event()
2273 static void nl80211_rekey_offload_event(struct wpa_driver_nl80211_data *drv, in nl80211_rekey_offload_event() argument
2308 wpa_supplicant_event(drv->ctx, EVENT_DRIVER_GTK_REKEY, &data); in nl80211_rekey_offload_event()
2312 static void nl80211_pmksa_candidate_event(struct wpa_driver_nl80211_data *drv, in nl80211_pmksa_candidate_event() argument
2342 wpa_supplicant_event(drv->ctx, EVENT_PMKID_CANDIDATE, &data); in nl80211_pmksa_candidate_event()
2346 static void nl80211_client_probe_event(struct wpa_driver_nl80211_data *drv, in nl80211_client_probe_event() argument
2367 wpa_supplicant_event(drv->ctx, EVENT_DRIVER_CLIENT_POLL_OK, &data); in nl80211_client_probe_event()
2371 static void nl80211_tdls_oper_event(struct wpa_driver_nl80211_data *drv, in nl80211_tdls_oper_event() argument
2410 wpa_supplicant_event(drv->ctx, EVENT_TDLS, &data); in nl80211_tdls_oper_event()
2414 static void nl80211_stop_ap(struct wpa_driver_nl80211_data *drv, in nl80211_stop_ap() argument
2417 wpa_supplicant_event(drv->ctx, EVENT_INTERFACE_UNAVAILABLE, NULL); in nl80211_stop_ap()
2421 static void nl80211_connect_failed_event(struct wpa_driver_nl80211_data *drv, in nl80211_connect_failed_event() argument
2454 wpa_supplicant_event(drv->ctx, EVENT_CONNECT_FAILED_REASON, &data); in nl80211_connect_failed_event()
2458 static void nl80211_radar_event(struct wpa_driver_nl80211_data *drv, in nl80211_radar_event() argument
2477 nl80211_get_link_id_by_freq(drv->first_bss, in nl80211_radar_event()
2520 wpa_supplicant_event(drv->ctx, EVENT_DFS_RADAR_DETECTED, &data); in nl80211_radar_event()
2523 wpa_supplicant_event(drv->ctx, EVENT_DFS_CAC_FINISHED, &data); in nl80211_radar_event()
2526 wpa_supplicant_event(drv->ctx, EVENT_DFS_CAC_ABORTED, &data); in nl80211_radar_event()
2529 wpa_supplicant_event(drv->ctx, EVENT_DFS_NOP_FINISHED, &data); in nl80211_radar_event()
2532 wpa_supplicant_event(drv->ctx, EVENT_DFS_PRE_CAC_EXPIRED, in nl80211_radar_event()
2536 wpa_supplicant_event(drv->ctx, EVENT_DFS_CAC_STARTED, &data); in nl80211_radar_event()
2549 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_spurious_frame() local
2560 wpa_supplicant_event(drv->ctx, EVENT_RX_FROM_UNKNOWN, &event); in nl80211_spurious_frame()
2566 static void qca_nl80211_avoid_freq(struct wpa_driver_nl80211_data *drv, in qca_nl80211_avoid_freq() argument
2607 wpa_supplicant_event(drv->ctx, EVENT_AVOID_FREQUENCIES, &event); in qca_nl80211_avoid_freq()
2632 static unsigned int chan_to_freq(struct wpa_driver_nl80211_data *drv, in chan_to_freq() argument
2642 modes = nl80211_get_hw_feature_data(drv->first_bss, &num_modes, in chan_to_freq()
2678 static void qca_nl80211_acs_select_ch(struct wpa_driver_nl80211_data *drv, in qca_nl80211_acs_select_ch() argument
2719 chan_to_freq(drv, chan, in qca_nl80211_acs_select_ch()
2730 chan_to_freq(drv, chan, in qca_nl80211_acs_select_ch()
2769 wpa_supplicant_event(drv->ctx, EVENT_ACS_CHANNEL_SELECTED, &event); in qca_nl80211_acs_select_ch()
2773 static void qca_nl80211_key_mgmt_auth(struct wpa_driver_nl80211_data *drv, in qca_nl80211_key_mgmt_auth() argument
2794 mlme_event_connect(drv, NL80211_CMD_ROAM, true, NULL, in qca_nl80211_key_mgmt_auth()
2812 drv, OUI_QCA, QCA_NL80211_VENDOR_SUBCMD_KEY_MGMT_ROAM_AUTH, in qca_nl80211_key_mgmt_auth()
2820 qca_nl80211_key_mgmt_auth_handler(struct wpa_driver_nl80211_data *drv, in qca_nl80211_key_mgmt_auth_handler() argument
2823 if (!drv->roam_indication_done) { in qca_nl80211_key_mgmt_auth_handler()
2827 os_free(drv->pending_roam_data); in qca_nl80211_key_mgmt_auth_handler()
2828 drv->pending_roam_data = os_memdup(data, len); in qca_nl80211_key_mgmt_auth_handler()
2829 if (!drv->pending_roam_data) in qca_nl80211_key_mgmt_auth_handler()
2831 drv->pending_roam_data_len = len; in qca_nl80211_key_mgmt_auth_handler()
2834 drv->roam_indication_done = false; in qca_nl80211_key_mgmt_auth_handler()
2835 qca_nl80211_key_mgmt_auth(drv, data, len); in qca_nl80211_key_mgmt_auth_handler()
2840 struct wpa_driver_nl80211_data *drv, u32 subcmd, u8 *msg, int length) in qca_nl80211_dfs_offload_radar_event() argument
2867 nl80211_get_link_id_by_freq(drv->first_bss, in qca_nl80211_dfs_offload_radar_event()
2912 wpa_supplicant_event(drv->ctx, EVENT_DFS_RADAR_DETECTED, &data); in qca_nl80211_dfs_offload_radar_event()
2915 wpa_supplicant_event(drv->ctx, EVENT_DFS_CAC_STARTED, &data); in qca_nl80211_dfs_offload_radar_event()
2918 wpa_supplicant_event(drv->ctx, EVENT_DFS_CAC_FINISHED, &data); in qca_nl80211_dfs_offload_radar_event()
2921 wpa_supplicant_event(drv->ctx, EVENT_DFS_CAC_ABORTED, &data); in qca_nl80211_dfs_offload_radar_event()
2924 wpa_supplicant_event(drv->ctx, EVENT_DFS_NOP_FINISHED, &data); in qca_nl80211_dfs_offload_radar_event()
2935 static void qca_nl80211_scan_trigger_event(struct wpa_driver_nl80211_data *drv, in qca_nl80211_scan_trigger_event() argument
2949 if (cookie != drv->vendor_scan_cookie) { in qca_nl80211_scan_trigger_event()
2960 drv->scan_state = SCAN_STARTED; in qca_nl80211_scan_trigger_event()
2961 wpa_supplicant_event(drv->ctx, EVENT_SCAN_STARTED, &event); in qca_nl80211_scan_trigger_event()
2965 static void send_vendor_scan_event(struct wpa_driver_nl80211_data *drv, in send_vendor_scan_event() argument
3024 wpa_supplicant_event(drv->ctx, EVENT_SCAN_RESULTS, &event); in send_vendor_scan_event()
3028 static void qca_nl80211_scan_done_event(struct wpa_driver_nl80211_data *drv, in qca_nl80211_scan_done_event() argument
3047 if (cookie != drv->vendor_scan_cookie) { in qca_nl80211_scan_done_event()
3053 drv->scan_state = SCAN_COMPLETED; in qca_nl80211_scan_done_event()
3055 drv->scan_state = SCAN_ABORTED; in qca_nl80211_scan_done_event()
3057 eloop_cancel_timeout(wpa_driver_nl80211_scan_timeout, drv, in qca_nl80211_scan_done_event()
3058 drv->ctx); in qca_nl80211_scan_done_event()
3059 drv->vendor_scan_cookie = 0; in qca_nl80211_scan_done_event()
3060 drv->last_scan_cmd = 0; in qca_nl80211_scan_done_event()
3063 send_vendor_scan_event(drv, (status == VENDOR_SCAN_STATUS_ABORTED), tb, in qca_nl80211_scan_done_event()
3068 static void qca_nl80211_p2p_lo_stop_event(struct wpa_driver_nl80211_data *drv, in qca_nl80211_p2p_lo_stop_event() argument
3089 wpa_supplicant_event(drv->ctx, EVENT_P2P_LO_STOP, &event); in qca_nl80211_p2p_lo_stop_event()
3095 static void qca_nl80211_pasn_auth(struct wpa_driver_nl80211_data *drv, in qca_nl80211_pasn_auth() argument
3163 wpa_supplicant_event(drv->ctx, EVENT_PASN_AUTH, &event); in qca_nl80211_pasn_auth()
3171 static void nl80211_vendor_event_qca(struct wpa_driver_nl80211_data *drv, in nl80211_vendor_event_qca() argument
3180 qca_nl80211_avoid_freq(drv, data, len); in nl80211_vendor_event_qca()
3183 qca_nl80211_key_mgmt_auth_handler(drv, data, len); in nl80211_vendor_event_qca()
3186 qca_nl80211_acs_select_ch(drv, data, len); in nl80211_vendor_event_qca()
3193 qca_nl80211_dfs_offload_radar_event(drv, subcmd, data, len); in nl80211_vendor_event_qca()
3196 qca_nl80211_scan_trigger_event(drv, data, len); in nl80211_vendor_event_qca()
3199 qca_nl80211_scan_done_event(drv, data, len); in nl80211_vendor_event_qca()
3202 qca_nl80211_p2p_lo_stop_event(drv, data, len); in nl80211_vendor_event_qca()
3206 qca_nl80211_pasn_auth(drv, data, len); in nl80211_vendor_event_qca()
3210 qca_nl80211_tid_to_link_map_event(drv, data, len); in nl80211_vendor_event_qca()
3213 qca_nl80211_link_reconfig_event(drv, data, len); in nl80211_vendor_event_qca()
3227 static void brcm_nl80211_acs_select_ch(struct wpa_driver_nl80211_data *drv, in brcm_nl80211_acs_select_ch() argument
3278 wpa_supplicant_event(drv->ctx, EVENT_ACS_CHANNEL_SELECTED, &event); in brcm_nl80211_acs_select_ch()
3282 static void nl80211_vendor_event_brcm(struct wpa_driver_nl80211_data *drv, in nl80211_vendor_event_brcm() argument
3293 brcm_nl80211_acs_select_ch(drv, data, len); in nl80211_vendor_event_brcm()
3306 static void nl80211_vendor_event(struct wpa_driver_nl80211_data *drv, in nl80211_vendor_event() argument
3333 wiphy_idx = nl80211_get_wiphy_index(drv->first_bss); in nl80211_vendor_event()
3344 * qca_nl80211_key_mgmt_auth() and drv->pending_roam_data). */ in nl80211_vendor_event()
3347 wpa_driver_nl80211_driver_event(drv, vendor_id, subcmd, data, in nl80211_vendor_event()
3354 nl80211_vendor_event_qca(drv, subcmd, data, len); in nl80211_vendor_event()
3358 nl80211_vendor_event_brcm(drv, subcmd, data, len); in nl80211_vendor_event()
3368 static void nl80211_reg_change_event(struct wpa_driver_nl80211_data *drv, in nl80211_reg_change_event() argument
3427 wpa_supplicant_event(drv->ctx, EVENT_CHANNEL_LIST_CHANGED, &data); in nl80211_reg_change_event()
3471 static void nl80211_reg_beacon_hint_event(struct wpa_driver_nl80211_data *drv, in nl80211_reg_beacon_hint_event() argument
3489 wpa_supplicant_event(drv->ctx, EVENT_CHANNEL_LIST_CHANGED, &data); in nl80211_reg_beacon_hint_event()
3493 static void nl80211_external_auth(struct wpa_driver_nl80211_data *drv, in nl80211_external_auth() argument
3544 wpa_supplicant_event(drv->ctx, EVENT_EXTERNAL_AUTH, &event); in nl80211_external_auth()
3548 static void nl80211_port_authorized(struct wpa_driver_nl80211_data *drv, in nl80211_port_authorized() argument
3564 if (is_ap_interface(drv->nlmode) && drv->device_ap_sme) { in nl80211_port_authorized()
3569 } else if (is_sta_interface(drv->nlmode)) { in nl80211_port_authorized()
3572 connected_addr = drv->sta_mlo_info.valid_links ? in nl80211_port_authorized()
3573 drv->sta_mlo_info.ap_mld_addr : drv->bssid; in nl80211_port_authorized()
3592 wpa_supplicant_event(drv->ctx, EVENT_PORT_AUTHORIZED, &event); in nl80211_port_authorized()
3596 static void nl80211_sta_opmode_change_event(struct wpa_driver_nl80211_data *drv, in nl80211_sta_opmode_change_event() argument
3665 wpa_supplicant_event(drv->ctx, EVENT_STATION_OPMODE_CHANGED, &ed); in nl80211_sta_opmode_change_event()
3718 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_control_port_frame_tx_status() local
3734 nla_get_u64(cookie) == drv->eapol_tx_cookie ? in nl80211_control_port_frame_tx_status()
3735 drv->eapol_tx_link_id : NL80211_DRV_LINK_ID_NA; in nl80211_control_port_frame_tx_status()
3741 static void nl80211_frame_wait_cancel(struct wpa_driver_nl80211_data *drv, in nl80211_frame_wait_cancel() argument
3752 for (i = 0; i < drv->num_send_frame_cookies; i++) { in nl80211_frame_wait_cancel()
3753 if (cookie == drv->send_frame_cookies[i]) { in nl80211_frame_wait_cancel()
3762 drv->send_frame_cookie == cookie ? " (match-saved)" : ""); in nl80211_frame_wait_cancel()
3763 if (drv->send_frame_cookie == cookie) { in nl80211_frame_wait_cancel()
3764 drv->send_frame_cookie = (u64) -1; in nl80211_frame_wait_cancel()
3771 if (i < drv->num_send_frame_cookies - 1) in nl80211_frame_wait_cancel()
3772 os_memmove(&drv->send_frame_cookies[i], in nl80211_frame_wait_cancel()
3773 &drv->send_frame_cookies[i + 1], in nl80211_frame_wait_cancel()
3774 (drv->num_send_frame_cookies - i - 1) * sizeof(u64)); in nl80211_frame_wait_cancel()
3775 drv->num_send_frame_cookies--; in nl80211_frame_wait_cancel()
3778 wpa_supplicant_event(drv->ctx, EVENT_TX_WAIT_EXPIRE, NULL); in nl80211_frame_wait_cancel()
3782 static void nl80211_assoc_comeback(struct wpa_driver_nl80211_data *drv, in nl80211_assoc_comeback() argument
3859 struct wpa_driver_nl80211_data *drv = bss->drv; in do_process_drv_event() local
3863 wpa_printf(MSG_DEBUG, "nl80211: Drv Event %d (%s) received for %s", in do_process_drv_event()
3868 (drv->capa.flags & WPA_DRIVER_FLAGS_KEY_MGMT_OFFLOAD)) { in do_process_drv_event()
3869 if (drv->pending_roam_data) { in do_process_drv_event()
3872 qca_nl80211_key_mgmt_auth(drv, drv->pending_roam_data, in do_process_drv_event()
3873 drv->pending_roam_data_len); in do_process_drv_event()
3874 os_free(drv->pending_roam_data); in do_process_drv_event()
3875 drv->pending_roam_data = NULL; in do_process_drv_event()
3882 drv->roam_indication_done = true; in do_process_drv_event()
3890 if (drv->ap_scan_as_station != NL80211_IFTYPE_UNSPECIFIED && in do_process_drv_event()
3897 wpa_dbg(drv->ctx, MSG_DEBUG, "nl80211: Scan trigger"); in do_process_drv_event()
3898 drv->scan_state = SCAN_STARTED; in do_process_drv_event()
3899 if (drv->scan_for_auth) { in do_process_drv_event()
3909 wpa_supplicant_event(drv->ctx, EVENT_SCAN_STARTED, NULL); in do_process_drv_event()
3912 wpa_dbg(drv->ctx, MSG_DEBUG, "nl80211: Sched scan started"); in do_process_drv_event()
3913 drv->scan_state = SCHED_SCAN_STARTED; in do_process_drv_event()
3916 wpa_dbg(drv->ctx, MSG_DEBUG, "nl80211: Sched scan stopped"); in do_process_drv_event()
3917 drv->scan_state = SCHED_SCAN_STOPPED; in do_process_drv_event()
3918 wpa_supplicant_event(drv->ctx, EVENT_SCHED_SCAN_STOPPED, NULL); in do_process_drv_event()
3921 wpa_dbg(drv->ctx, MSG_DEBUG, in do_process_drv_event()
3923 if (drv->last_scan_cmd != NL80211_CMD_VENDOR) in do_process_drv_event()
3924 drv->scan_state = SCAN_COMPLETED; in do_process_drv_event()
3925 drv->scan_complete_events = 1; in do_process_drv_event()
3926 if (drv->last_scan_cmd == NL80211_CMD_TRIGGER_SCAN) { in do_process_drv_event()
3928 drv, drv->ctx); in do_process_drv_event()
3929 drv->last_scan_cmd = 0; in do_process_drv_event()
3933 send_scan_event(drv, 0, tb, external_scan_event); in do_process_drv_event()
3936 wpa_dbg(drv->ctx, MSG_DEBUG, in do_process_drv_event()
3938 drv->scan_state = SCHED_SCAN_RESULTS; in do_process_drv_event()
3939 send_scan_event(drv, 0, tb, 0); in do_process_drv_event()
3942 wpa_dbg(drv->ctx, MSG_DEBUG, "nl80211: Scan aborted"); in do_process_drv_event()
3943 if (drv->last_scan_cmd != NL80211_CMD_VENDOR) in do_process_drv_event()
3944 drv->scan_state = SCAN_ABORTED; in do_process_drv_event()
3945 if (drv->last_scan_cmd == NL80211_CMD_TRIGGER_SCAN) { in do_process_drv_event()
3951 drv, drv->ctx); in do_process_drv_event()
3952 drv->last_scan_cmd = 0; in do_process_drv_event()
3956 send_scan_event(drv, 1, tb, external_scan_event); in do_process_drv_event()
3977 mlme_event_connect(drv, cmd, false, in do_process_drv_event()
3993 mlme_event_ch_switch(drv, in do_process_drv_event()
4005 mlme_event_ch_switch(drv, in do_process_drv_event()
4017 mlme_event_disconnect(drv, tb[NL80211_ATTR_REASON_CODE], in do_process_drv_event()
4025 mlme_event_join_ibss(drv, tb); in do_process_drv_event()
4028 mlme_event_remain_on_channel(drv, 0, tb); in do_process_drv_event()
4031 mlme_event_remain_on_channel(drv, 1, tb); in do_process_drv_event()
4034 nl80211_cqm_event(drv, tb); in do_process_drv_event()
4038 nl80211_reg_change_event(drv, tb); in do_process_drv_event()
4041 nl80211_reg_beacon_hint_event(drv, tb); in do_process_drv_event()
4044 nl80211_new_station_event(drv, bss, tb); in do_process_drv_event()
4047 nl80211_del_station_event(drv, bss, tb); in do_process_drv_event()
4050 nl80211_rekey_offload_event(drv, tb); in do_process_drv_event()
4053 nl80211_pmksa_candidate_event(drv, tb); in do_process_drv_event()
4056 nl80211_client_probe_event(drv, tb); in do_process_drv_event()
4059 nl80211_tdls_oper_event(drv, tb); in do_process_drv_event()
4062 nl80211_connect_failed_event(drv, tb); in do_process_drv_event()
4065 mlme_event_ft_event(drv, tb); in do_process_drv_event()
4068 nl80211_radar_event(drv, tb); in do_process_drv_event()
4071 nl80211_stop_ap(drv, tb); in do_process_drv_event()
4074 nl80211_vendor_event(drv, tb); in do_process_drv_event()
4077 nl80211_new_peer_candidate(drv, tb); in do_process_drv_event()
4080 nl80211_port_authorized(drv, tb); in do_process_drv_event()
4083 nl80211_sta_opmode_change_event(drv, tb); in do_process_drv_event()
4086 mlme_event_dh_event(drv, bss, tb); in do_process_drv_event()
4090 mlme_event_unprot_beacon(drv, nla_data(frame), in do_process_drv_event()
4103 nl80211_frame_wait_cancel(drv, tb[NL80211_ATTR_COOKIE]); in do_process_drv_event()
4106 nl80211_assoc_comeback(drv, tb[NL80211_ATTR_MAC], in do_process_drv_event()
4118 wpa_supplicant_event(drv->ctx, EVENT_LINK_RECONFIG, NULL); in do_process_drv_event()
4121 wpa_dbg(drv->ctx, MSG_DEBUG, "nl80211: Ignored unknown event " in do_process_drv_event()
4129 struct wpa_driver_nl80211_data *drv) in nl80211_drv_in_list() argument
4135 if (drv == tmp) in nl80211_drv_in_list()
4148 struct wpa_driver_nl80211_data *drv, *tmp; in process_global_event() local
4160 dl_list_for_each_safe(drv, tmp, &global->interfaces, in process_global_event()
4162 if (drv->ignore_next_local_deauth > 0 && in process_global_event()
4163 drv->ignore_next_local_deauth <= seq) { in process_global_event()
4166 drv->ignore_next_local_deauth = 0; in process_global_event()
4169 if (drv->ignore_next_local_disconnect > 0 && in process_global_event()
4170 drv->ignore_next_local_disconnect <= seq) { in process_global_event()
4173 drv->ignore_next_local_disconnect = 0; in process_global_event()
4193 dl_list_for_each_safe(drv, tmp, &global->interfaces, in process_global_event()
4195 for (bss = drv->first_bss; bss; bss = bss->next) { in process_global_event()
4211 if (!nl80211_drv_in_list(global, drv)) in process_global_event()
4260 nl80211_external_auth(bss->drv, tb); in process_bss_event()