Lines Matching refs:wil

108 int wil_cid_fill_sinfo(struct wil6210_priv *wil, int cid,  in wil_cid_fill_sinfo()  argument
119 struct wil_net_stats *stats = &wil->sta[cid].stats; in wil_cid_fill_sinfo()
122 rc = wmi_call(wil, WMI_NOTIFY_REQ_CMDID, &cmd, sizeof(cmd), in wil_cid_fill_sinfo()
127 wil_dbg_wmi(wil, "Link status for CID %d: {\n" in wil_cid_fill_sinfo()
144 sinfo->generation = wil->sinfo_gen; in wil_cid_fill_sinfo()
166 if (test_bit(wil_status_fwconnected, wil->status)) { in wil_cid_fill_sinfo()
178 struct wil6210_priv *wil = wiphy_to_wil(wiphy); in wil_cfg80211_get_station() local
181 int cid = wil_find_cid(wil, mac); in wil_cfg80211_get_station()
183 wil_dbg_misc(wil, "%s(%pM) CID %d\n", __func__, mac, cid); in wil_cfg80211_get_station()
187 rc = wil_cid_fill_sinfo(wil, cid, sinfo); in wil_cfg80211_get_station()
195 static int wil_find_cid_by_idx(struct wil6210_priv *wil, int idx) in wil_find_cid_by_idx() argument
199 for (i = 0; i < ARRAY_SIZE(wil->sta); i++) { in wil_find_cid_by_idx()
200 if (wil->sta[i].status == wil_sta_unused) in wil_find_cid_by_idx()
214 struct wil6210_priv *wil = wiphy_to_wil(wiphy); in wil_cfg80211_dump_station() local
216 int cid = wil_find_cid_by_idx(wil, idx); in wil_cfg80211_dump_station()
221 ether_addr_copy(mac, wil->sta[cid].addr); in wil_cfg80211_dump_station()
222 wil_dbg_misc(wil, "%s(%pM) CID %d\n", __func__, mac, cid); in wil_cfg80211_dump_station()
224 rc = wil_cid_fill_sinfo(wil, cid, sinfo); in wil_cfg80211_dump_station()
234 struct wil6210_priv *wil = wiphy_to_wil(wiphy); in wil_cfg80211_change_iface() local
235 struct wireless_dev *wdev = wil->wdev; in wil_cfg80211_change_iface()
245 wil->monitor_flags = *flags; in wil_cfg80211_change_iface()
247 wil->monitor_flags = 0; in wil_cfg80211_change_iface()
262 struct wil6210_priv *wil = wiphy_to_wil(wiphy); in wil_cfg80211_scan() local
263 struct wireless_dev *wdev = wil->wdev; in wil_cfg80211_scan()
271 if (wil->scan_request) { in wil_cfg80211_scan()
272 wil_err(wil, "Already scanning\n"); in wil_cfg80211_scan()
286 if (test_bit(wil_status_dontscan, wil->status)) { in wil_cfg80211_scan()
287 wil_err(wil, "Can't scan now\n"); in wil_cfg80211_scan()
291 wil_dbg_misc(wil, "Start scan_request 0x%p\n", request); in wil_cfg80211_scan()
292 wil_dbg_misc(wil, "SSID count: %d", request->n_ssids); in wil_cfg80211_scan()
295 wil_dbg_misc(wil, "SSID[%d]", i); in wil_cfg80211_scan()
302 rc = wmi_set_ssid(wil, request->ssids[0].ssid_len, in wil_cfg80211_scan()
305 rc = wmi_set_ssid(wil, 0, NULL); in wil_cfg80211_scan()
308 wil_err(wil, "set SSID for scan request failed: %d\n", rc); in wil_cfg80211_scan()
312 wil->scan_request = request; in wil_cfg80211_scan()
313 mod_timer(&wil->scan_timer, jiffies + WIL6210_SCAN_TO); in wil_cfg80211_scan()
322 wil_err(wil, in wil_cfg80211_scan()
329 wil_dbg_misc(wil, "Scan for ch %d : %d MHz\n", ch, in wil_cfg80211_scan()
337 wil_dbg_misc(wil, "Scan has no IE's\n"); in wil_cfg80211_scan()
339 rc = wmi_set_ie(wil, WMI_FRAME_PROBE_REQ, request->ie_len, request->ie); in wil_cfg80211_scan()
343 rc = wmi_send(wil, WMI_START_SCAN_CMDID, &cmd, sizeof(cmd.cmd) + in wil_cfg80211_scan()
348 del_timer_sync(&wil->scan_timer); in wil_cfg80211_scan()
349 wil->scan_request = NULL; in wil_cfg80211_scan()
355 static void wil_print_crypto(struct wil6210_priv *wil, in wil_print_crypto() argument
360 wil_dbg_misc(wil, "WPA versions: 0x%08x cipher group 0x%08x\n", in wil_print_crypto()
362 wil_dbg_misc(wil, "Pairwise ciphers [%d] {\n", c->n_ciphers_pairwise); in wil_print_crypto()
365 wil_dbg_misc(wil, " [%d] = 0x%08x\n", i, in wil_print_crypto()
367 wil_dbg_misc(wil, "}\n"); in wil_print_crypto()
368 wil_dbg_misc(wil, "AKM suites [%d] {\n", c->n_akm_suites); in wil_print_crypto()
371 wil_dbg_misc(wil, " [%d] = 0x%08x\n", i, in wil_print_crypto()
373 wil_dbg_misc(wil, "}\n"); in wil_print_crypto()
374 wil_dbg_misc(wil, "Control port : %d, eth_type 0x%04x no_encrypt %d\n", in wil_print_crypto()
379 static void wil_print_connect_params(struct wil6210_priv *wil, in wil_print_connect_params() argument
382 wil_info(wil, "Connecting to:\n"); in wil_print_connect_params()
384 wil_info(wil, " Channel: %d freq %d\n", in wil_print_connect_params()
388 wil_info(wil, " BSSID: %pM\n", sme->bssid); in wil_print_connect_params()
392 wil_info(wil, " Privacy: %s\n", sme->privacy ? "secure" : "open"); in wil_print_connect_params()
393 wil_print_crypto(wil, &sme->crypto); in wil_print_connect_params()
400 struct wil6210_priv *wil = wiphy_to_wil(wiphy); in wil_cfg80211_connect() local
408 wil_print_connect_params(wil, sme); in wil_cfg80211_connect()
410 if (test_bit(wil_status_fwconnecting, wil->status) || in wil_cfg80211_connect()
411 test_bit(wil_status_fwconnected, wil->status)) in wil_cfg80211_connect()
415 wil_err(wil, "IE too large (%td bytes)\n", sme->ie_len); in wil_cfg80211_connect()
423 wil_info(wil, "WSC connection\n"); in wil_cfg80211_connect()
429 wil_err(wil, "Unable to find BSS\n"); in wil_cfg80211_connect()
435 wil_err(wil, "No SSID\n"); in wil_cfg80211_connect()
439 wil->privacy = sme->privacy; in wil_cfg80211_connect()
441 if (wil->privacy) { in wil_cfg80211_connect()
443 rc = wmi_del_cipher_key(wil, 0, bss->bssid, in wil_cfg80211_connect()
446 wil_err(wil, "WMI_DELETE_CIPHER_KEY_CMD(PTK) failed\n"); in wil_cfg80211_connect()
449 rc = wmi_del_cipher_key(wil, 0, bss->bssid, in wil_cfg80211_connect()
452 wil_err(wil, "WMI_DELETE_CIPHER_KEY_CMD(GTK) failed\n"); in wil_cfg80211_connect()
461 rc = wmi_set_ie(wil, WMI_FRAME_ASSOC_REQ, sme->ie_len, sme->ie); in wil_cfg80211_connect()
475 wil_err(wil, "Unsupported BSS type, capability= 0x%04x\n", in wil_cfg80211_connect()
479 if (wil->privacy) { in wil_cfg80211_connect()
501 wil_err(wil, "BSS at unknown frequency %dMhz\n", in wil_cfg80211_connect()
511 set_bit(wil_status_fwconnecting, wil->status); in wil_cfg80211_connect()
513 rc = wmi_send(wil, WMI_CONNECT_CMDID, &conn, sizeof(conn)); in wil_cfg80211_connect()
517 mod_timer(&wil->connect_timer, in wil_cfg80211_connect()
520 clear_bit(wil_status_fwconnecting, wil->status); in wil_cfg80211_connect()
534 struct wil6210_priv *wil = wiphy_to_wil(wiphy); in wil_cfg80211_disconnect() local
536 wil_dbg_misc(wil, "%s(reason=%d)\n", __func__, reason_code); in wil_cfg80211_disconnect()
538 rc = wmi_send(wil, WMI_DISCONNECT_CMDID, NULL, 0); in wil_cfg80211_disconnect()
549 struct wil6210_priv *wil = wiphy_to_wil(wiphy); in wil_cfg80211_mgmt_tx() local
569 rc = wmi_call(wil, WMI_SW_TX_REQ_CMDID, cmd, sizeof(*cmd) + len, in wil_cfg80211_mgmt_tx()
584 struct wil6210_priv *wil = wiphy_to_wil(wiphy); in wil_cfg80211_set_channel() local
585 struct wireless_dev *wdev = wil->wdev; in wil_cfg80211_set_channel()
592 static enum wmi_key_usage wil_detect_key_usage(struct wil6210_priv *wil, in wil_detect_key_usage() argument
595 struct wireless_dev *wdev = wil->wdev; in wil_detect_key_usage()
615 wil_err(wil, "Can't determine GTK type\n"); in wil_detect_key_usage()
620 wil_dbg_misc(wil, "%s() -> %s\n", __func__, key_usage_str[rc]); in wil_detect_key_usage()
631 struct wil6210_priv *wil = wiphy_to_wil(wiphy); in wil_cfg80211_add_key() local
632 enum wmi_key_usage key_usage = wil_detect_key_usage(wil, pairwise); in wil_cfg80211_add_key()
634 wil_dbg_misc(wil, "%s(%pM[%d] %s)\n", __func__, mac_addr, key_index, in wil_cfg80211_add_key()
637 return wmi_add_cipher_key(wil, key_index, mac_addr, params->key_len, in wil_cfg80211_add_key()
646 struct wil6210_priv *wil = wiphy_to_wil(wiphy); in wil_cfg80211_del_key() local
647 enum wmi_key_usage key_usage = wil_detect_key_usage(wil, pairwise); in wil_cfg80211_del_key()
649 wil_dbg_misc(wil, "%s(%pM[%d] %s)\n", __func__, mac_addr, key_index, in wil_cfg80211_del_key()
652 return wmi_del_cipher_key(wil, key_index, mac_addr, key_usage); in wil_cfg80211_del_key()
670 struct wil6210_priv *wil = wiphy_to_wil(wiphy); in wil_remain_on_channel() local
674 wil_info(wil, "%s(%d, %d ms)\n", __func__, chan->center_freq, duration); in wil_remain_on_channel()
676 rc = wmi_set_channel(wil, chan->hw_value); in wil_remain_on_channel()
680 rc = wmi_rxon(wil, true); in wil_remain_on_channel()
689 struct wil6210_priv *wil = wiphy_to_wil(wiphy); in wil_cancel_remain_on_channel() local
692 wil_info(wil, "%s()\n", __func__); in wil_cancel_remain_on_channel()
694 rc = wmi_rxon(wil, false); in wil_cancel_remain_on_channel()
715 static int wil_fix_bcon(struct wil6210_priv *wil, in wil_fix_bcon() argument
742 struct wil6210_priv *wil = wiphy_to_wil(wiphy); in _wil_cfg80211_set_ies() local
744 rc = wmi_set_ie(wil, WMI_FRAME_PROBE_RESP, bcon->proberesp_ies_len, in _wil_cfg80211_set_ies()
749 rc = wmi_set_ie(wil, WMI_FRAME_ASSOC_RESP, bcon->assocresp_ies_len, in _wil_cfg80211_set_ies()
755 rc = wmi_set_ie(wil, WMI_FRAME_BEACON, bcon->tail_len, bcon->tail); in _wil_cfg80211_set_ies()
768 struct wil6210_priv *wil = wiphy_to_wil(wiphy); in _wil_cfg80211_start_ap() local
773 wil_set_recovery_state(wil, fw_recovery_idle); in _wil_cfg80211_start_ap()
775 mutex_lock(&wil->mutex); in _wil_cfg80211_start_ap()
777 __wil_down(wil); in _wil_cfg80211_start_ap()
778 rc = __wil_up(wil); in _wil_cfg80211_start_ap()
782 rc = wmi_set_ssid(wil, ssid_len, ssid); in _wil_cfg80211_start_ap()
790 wil->privacy = privacy; in _wil_cfg80211_start_ap()
791 wil->channel = chan; in _wil_cfg80211_start_ap()
792 wil->hidden_ssid = hidden_ssid; in _wil_cfg80211_start_ap()
796 rc = wmi_pcp_start(wil, bi, wmi_nettype, chan, hidden_ssid); in _wil_cfg80211_start_ap()
800 rc = wil_bcast_init(wil); in _wil_cfg80211_start_ap()
807 wmi_pcp_stop(wil); in _wil_cfg80211_start_ap()
811 mutex_unlock(&wil->mutex); in _wil_cfg80211_start_ap()
819 struct wil6210_priv *wil = wiphy_to_wil(wiphy); in wil_cfg80211_change_beacon() local
823 wil_dbg_misc(wil, "%s()\n", __func__); in wil_cfg80211_change_beacon()
826 if (wil_fix_bcon(wil, bcon)) { in wil_cfg80211_change_beacon()
827 wil_dbg_misc(wil, "Fixed bcon\n"); in wil_cfg80211_change_beacon()
837 if (wil->privacy != privacy) { in wil_cfg80211_change_beacon()
840 wil_dbg_misc(wil, "privacy changed %d=>%d. Restarting AP\n", in wil_cfg80211_change_beacon()
841 wil->privacy, privacy); in wil_cfg80211_change_beacon()
846 wil->channel, bcon, in wil_cfg80211_change_beacon()
847 wil->hidden_ssid); in wil_cfg80211_change_beacon()
860 struct wil6210_priv *wil = wiphy_to_wil(wiphy); in wil_cfg80211_start_ap() local
866 wil_dbg_misc(wil, "%s()\n", __func__); in wil_cfg80211_start_ap()
869 wil_err(wil, "AP: No channel???\n"); in wil_cfg80211_start_ap()
887 wil_err(wil, "AP: Invalid hidden SSID %d\n", info->hidden_ssid); in wil_cfg80211_start_ap()
890 wil_dbg_misc(wil, "AP on Channel %d %d MHz, %s\n", channel->hw_value, in wil_cfg80211_start_ap()
892 wil_dbg_misc(wil, "Privacy: %d auth_type %d\n", in wil_cfg80211_start_ap()
894 wil_dbg_misc(wil, "Hidden SSID mode: %d\n", in wil_cfg80211_start_ap()
896 wil_dbg_misc(wil, "BI %d DTIM %d\n", info->beacon_interval, in wil_cfg80211_start_ap()
901 wil_print_crypto(wil, crypto); in wil_cfg80211_start_ap()
903 if (wil_fix_bcon(wil, bcon)) { in wil_cfg80211_start_ap()
904 wil_dbg_misc(wil, "Fixed bcon\n"); in wil_cfg80211_start_ap()
919 struct wil6210_priv *wil = wiphy_to_wil(wiphy); in wil_cfg80211_stop_ap() local
921 wil_dbg_misc(wil, "%s()\n", __func__); in wil_cfg80211_stop_ap()
924 wil_set_recovery_state(wil, fw_recovery_idle); in wil_cfg80211_stop_ap()
926 mutex_lock(&wil->mutex); in wil_cfg80211_stop_ap()
928 wmi_pcp_stop(wil); in wil_cfg80211_stop_ap()
930 __wil_down(wil); in wil_cfg80211_stop_ap()
932 mutex_unlock(&wil->mutex); in wil_cfg80211_stop_ap()
941 struct wil6210_priv *wil = wiphy_to_wil(wiphy); in wil_cfg80211_del_station() local
943 wil_dbg_misc(wil, "%s(%pM, reason=%d)\n", __func__, params->mac, in wil_cfg80211_del_station()
946 mutex_lock(&wil->mutex); in wil_cfg80211_del_station()
947 wil6210_disconnect(wil, params->mac, params->reason_code, false); in wil_cfg80211_del_station()
948 mutex_unlock(&wil->mutex); in wil_cfg80211_del_station()
954 static void wil_probe_client_handle(struct wil6210_priv *wil, in wil_probe_client_handle() argument
957 struct net_device *ndev = wil_to_ndev(wil); in wil_probe_client_handle()
958 struct wil_sta_info *sta = &wil->sta[req->cid]; in wil_probe_client_handle()
967 static struct list_head *next_probe_client(struct wil6210_priv *wil) in next_probe_client() argument
971 mutex_lock(&wil->probe_client_mutex); in next_probe_client()
973 if (!list_empty(&wil->probe_client_pending)) { in next_probe_client()
974 ret = wil->probe_client_pending.next; in next_probe_client()
978 mutex_unlock(&wil->probe_client_mutex); in next_probe_client()
985 struct wil6210_priv *wil = container_of(work, struct wil6210_priv, in wil_probe_client_worker() local
990 while ((lh = next_probe_client(wil)) != NULL) { in wil_probe_client_worker()
993 wil_probe_client_handle(wil, req); in wil_probe_client_worker()
998 void wil_probe_client_flush(struct wil6210_priv *wil) in wil_probe_client_flush() argument
1002 wil_dbg_misc(wil, "%s()\n", __func__); in wil_probe_client_flush()
1004 mutex_lock(&wil->probe_client_mutex); in wil_probe_client_flush()
1006 list_for_each_entry_safe(req, t, &wil->probe_client_pending, list) { in wil_probe_client_flush()
1011 mutex_unlock(&wil->probe_client_mutex); in wil_probe_client_flush()
1018 struct wil6210_priv *wil = wiphy_to_wil(wiphy); in wil_cfg80211_probe_client() local
1020 int cid = wil_find_cid(wil, peer); in wil_cfg80211_probe_client()
1022 wil_dbg_misc(wil, "%s(%pM => CID %d)\n", __func__, peer, cid); in wil_cfg80211_probe_client()
1034 mutex_lock(&wil->probe_client_mutex); in wil_cfg80211_probe_client()
1035 list_add_tail(&req->list, &wil->probe_client_pending); in wil_cfg80211_probe_client()
1036 mutex_unlock(&wil->probe_client_mutex); in wil_cfg80211_probe_client()
1039 queue_work(wil->wq_service, &wil->probe_client_worker); in wil_cfg80211_probe_client()
1047 struct wil6210_priv *wil = wiphy_to_wil(wiphy); in wil_cfg80211_change_bss() local
1050 wil_dbg_misc(wil, "%s(ap_isolate %d => %d)\n", __func__, in wil_cfg80211_change_bss()
1051 wil->ap_isolate, params->ap_isolate); in wil_cfg80211_change_bss()
1052 wil->ap_isolate = params->ap_isolate; in wil_cfg80211_change_bss()
1147 void wil_wdev_free(struct wil6210_priv *wil) in wil_wdev_free() argument
1149 struct wireless_dev *wdev = wil_to_wdev(wil); in wil_wdev_free()
1151 dev_dbg(wil_to_dev(wil), "%s()\n", __func__); in wil_wdev_free()