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->scan_request = request; in wil_cfg80211_scan()
293 mod_timer(&wil->scan_timer, jiffies + WIL6210_SCAN_TO); in wil_cfg80211_scan()
302 wil_err(wil, in wil_cfg80211_scan()
309 wil_dbg_misc(wil, "Scan for ch %d : %d MHz\n", ch, in wil_cfg80211_scan()
317 wil_dbg_misc(wil, "Scan has no IE's\n"); in wil_cfg80211_scan()
319 rc = wmi_set_ie(wil, WMI_FRAME_PROBE_REQ, request->ie_len, in wil_cfg80211_scan()
322 wil_err(wil, "Aborting scan, set_ie failed: %d\n", rc); in wil_cfg80211_scan()
326 rc = wmi_send(wil, WMI_START_SCAN_CMDID, &cmd, sizeof(cmd.cmd) + in wil_cfg80211_scan()
331 del_timer_sync(&wil->scan_timer); in wil_cfg80211_scan()
332 wil->scan_request = NULL; in wil_cfg80211_scan()
338 static void wil_print_crypto(struct wil6210_priv *wil, in wil_print_crypto() argument
343 wil_dbg_misc(wil, "WPA versions: 0x%08x cipher group 0x%08x\n", in wil_print_crypto()
345 wil_dbg_misc(wil, "Pairwise ciphers [%d] {\n", c->n_ciphers_pairwise); in wil_print_crypto()
348 wil_dbg_misc(wil, " [%d] = 0x%08x\n", i, in wil_print_crypto()
350 wil_dbg_misc(wil, "}\n"); in wil_print_crypto()
351 wil_dbg_misc(wil, "AKM suites [%d] {\n", c->n_akm_suites); in wil_print_crypto()
354 wil_dbg_misc(wil, " [%d] = 0x%08x\n", i, in wil_print_crypto()
356 wil_dbg_misc(wil, "}\n"); in wil_print_crypto()
357 wil_dbg_misc(wil, "Control port : %d, eth_type 0x%04x no_encrypt %d\n", in wil_print_crypto()
362 static void wil_print_connect_params(struct wil6210_priv *wil, in wil_print_connect_params() argument
365 wil_info(wil, "Connecting to:\n"); in wil_print_connect_params()
367 wil_info(wil, " Channel: %d freq %d\n", in wil_print_connect_params()
371 wil_info(wil, " BSSID: %pM\n", sme->bssid); in wil_print_connect_params()
375 wil_info(wil, " Privacy: %s\n", sme->privacy ? "secure" : "open"); in wil_print_connect_params()
376 wil_print_crypto(wil, &sme->crypto); in wil_print_connect_params()
383 struct wil6210_priv *wil = wiphy_to_wil(wiphy); in wil_cfg80211_connect() local
391 wil_print_connect_params(wil, sme); in wil_cfg80211_connect()
393 if (test_bit(wil_status_fwconnecting, wil->status) || in wil_cfg80211_connect()
394 test_bit(wil_status_fwconnected, wil->status)) in wil_cfg80211_connect()
398 wil_err(wil, "IE too large (%td bytes)\n", sme->ie_len); in wil_cfg80211_connect()
407 wil_err(wil, "Missing RSN IE for secure connection\n"); in wil_cfg80211_connect()
415 wil_err(wil, "Unable to find BSS\n"); in wil_cfg80211_connect()
421 wil_err(wil, "No SSID\n"); in wil_cfg80211_connect()
425 wil->privacy = sme->privacy; in wil_cfg80211_connect()
427 if (wil->privacy) { in wil_cfg80211_connect()
429 rc = wmi_del_cipher_key(wil, 0, bss->bssid); in wil_cfg80211_connect()
431 wil_err(wil, "WMI_DELETE_CIPHER_KEY_CMD failed\n"); in wil_cfg80211_connect()
440 rc = wmi_set_ie(wil, WMI_FRAME_ASSOC_REQ, sme->ie_len, sme->ie); in wil_cfg80211_connect()
442 wil_err(wil, "WMI_SET_APPIE_CMD failed\n"); in wil_cfg80211_connect()
456 wil_err(wil, "Unsupported BSS type, capability= 0x%04x\n", in wil_cfg80211_connect()
460 if (wil->privacy) { in wil_cfg80211_connect()
475 wil_err(wil, "BSS at unknown frequency %dMhz\n", in wil_cfg80211_connect()
485 set_bit(wil_status_fwconnecting, wil->status); in wil_cfg80211_connect()
487 rc = wmi_send(wil, WMI_CONNECT_CMDID, &conn, sizeof(conn)); in wil_cfg80211_connect()
491 mod_timer(&wil->connect_timer, in wil_cfg80211_connect()
494 clear_bit(wil_status_fwconnecting, wil->status); in wil_cfg80211_connect()
508 struct wil6210_priv *wil = wiphy_to_wil(wiphy); in wil_cfg80211_disconnect() local
510 rc = wmi_send(wil, WMI_DISCONNECT_CMDID, NULL, 0); in wil_cfg80211_disconnect()
521 struct wil6210_priv *wil = wiphy_to_wil(wiphy); in wil_cfg80211_mgmt_tx() local
541 rc = wmi_call(wil, WMI_SW_TX_REQ_CMDID, cmd, sizeof(*cmd) + len, in wil_cfg80211_mgmt_tx()
556 struct wil6210_priv *wil = wiphy_to_wil(wiphy); in wil_cfg80211_set_channel() local
557 struct wireless_dev *wdev = wil->wdev; in wil_cfg80211_set_channel()
570 struct wil6210_priv *wil = wiphy_to_wil(wiphy); in wil_cfg80211_add_key() local
576 return wmi_add_cipher_key(wil, key_index, mac_addr, in wil_cfg80211_add_key()
585 struct wil6210_priv *wil = wiphy_to_wil(wiphy); in wil_cfg80211_del_key() local
591 return wmi_del_cipher_key(wil, key_index, mac_addr); in wil_cfg80211_del_key()
609 struct wil6210_priv *wil = wiphy_to_wil(wiphy); in wil_remain_on_channel() local
613 wil_info(wil, "%s(%d, %d ms)\n", __func__, chan->center_freq, duration); in wil_remain_on_channel()
615 rc = wmi_set_channel(wil, chan->hw_value); in wil_remain_on_channel()
619 rc = wmi_rxon(wil, true); in wil_remain_on_channel()
628 struct wil6210_priv *wil = wiphy_to_wil(wiphy); in wil_cancel_remain_on_channel() local
631 wil_info(wil, "%s()\n", __func__); in wil_cancel_remain_on_channel()
633 rc = wmi_rxon(wil, false); in wil_cancel_remain_on_channel()
654 static int wil_fix_bcon(struct wil6210_priv *wil, in wil_fix_bcon() argument
682 struct wil6210_priv *wil = wiphy_to_wil(wiphy); in wil_cfg80211_change_beacon() local
685 wil_dbg_misc(wil, "%s()\n", __func__); in wil_cfg80211_change_beacon()
687 if (wil_fix_bcon(wil, bcon)) { in wil_cfg80211_change_beacon()
688 wil_dbg_misc(wil, "Fixed bcon\n"); in wil_cfg80211_change_beacon()
698 rc = wmi_set_ie(wil, WMI_FRAME_PROBE_RESP, in wil_cfg80211_change_beacon()
702 wil_err(wil, "set_ie(PROBE_RESP) failed\n"); in wil_cfg80211_change_beacon()
706 rc = wmi_set_ie(wil, WMI_FRAME_ASSOC_RESP, in wil_cfg80211_change_beacon()
710 wil_err(wil, "set_ie(ASSOC_RESP) failed\n"); in wil_cfg80211_change_beacon()
722 struct wil6210_priv *wil = wiphy_to_wil(wiphy); in wil_cfg80211_start_ap() local
729 wil_dbg_misc(wil, "%s()\n", __func__); in wil_cfg80211_start_ap()
732 wil_err(wil, "AP: No channel???\n"); in wil_cfg80211_start_ap()
736 wil_dbg_misc(wil, "AP on Channel %d %d MHz, %s\n", channel->hw_value, in wil_cfg80211_start_ap()
738 wil_dbg_misc(wil, "Privacy: %d auth_type %d\n", in wil_cfg80211_start_ap()
740 wil_dbg_misc(wil, "BI %d DTIM %d\n", info->beacon_interval, in wil_cfg80211_start_ap()
745 wil_print_crypto(wil, crypto); in wil_cfg80211_start_ap()
747 if (wil_fix_bcon(wil, bcon)) { in wil_cfg80211_start_ap()
748 wil_dbg_misc(wil, "Fixed bcon\n"); in wil_cfg80211_start_ap()
752 wil_set_recovery_state(wil, fw_recovery_idle); in wil_cfg80211_start_ap()
754 mutex_lock(&wil->mutex); in wil_cfg80211_start_ap()
756 __wil_down(wil); in wil_cfg80211_start_ap()
757 rc = __wil_up(wil); in wil_cfg80211_start_ap()
761 rc = wmi_set_ssid(wil, info->ssid_len, info->ssid); in wil_cfg80211_start_ap()
774 wmi_set_ie(wil, WMI_FRAME_PROBE_RESP, bcon->proberesp_ies_len, in wil_cfg80211_start_ap()
776 wmi_set_ie(wil, WMI_FRAME_ASSOC_RESP, bcon->assocresp_ies_len, in wil_cfg80211_start_ap()
779 wil->privacy = info->privacy; in wil_cfg80211_start_ap()
783 rc = wmi_pcp_start(wil, info->beacon_interval, wmi_nettype, in wil_cfg80211_start_ap()
788 rc = wil_bcast_init(wil); in wil_cfg80211_start_ap()
794 wmi_pcp_stop(wil); in wil_cfg80211_start_ap()
798 mutex_unlock(&wil->mutex); in wil_cfg80211_start_ap()
805 struct wil6210_priv *wil = wiphy_to_wil(wiphy); in wil_cfg80211_stop_ap() local
807 wil_dbg_misc(wil, "%s()\n", __func__); in wil_cfg80211_stop_ap()
810 wil_set_recovery_state(wil, fw_recovery_idle); in wil_cfg80211_stop_ap()
812 mutex_lock(&wil->mutex); in wil_cfg80211_stop_ap()
814 wmi_pcp_stop(wil); in wil_cfg80211_stop_ap()
816 __wil_down(wil); in wil_cfg80211_stop_ap()
817 __wil_up(wil); in wil_cfg80211_stop_ap()
819 mutex_unlock(&wil->mutex); in wil_cfg80211_stop_ap()
831 struct wil6210_priv *wil = wiphy_to_wil(wiphy); in wil_cfg80211_del_station() local
833 mutex_lock(&wil->mutex); in wil_cfg80211_del_station()
834 wil6210_disconnect(wil, params->mac, params->reason_code, false); in wil_cfg80211_del_station()
835 mutex_unlock(&wil->mutex); in wil_cfg80211_del_station()
841 static void wil_probe_client_handle(struct wil6210_priv *wil, in wil_probe_client_handle() argument
844 struct net_device *ndev = wil_to_ndev(wil); in wil_probe_client_handle()
845 struct wil_sta_info *sta = &wil->sta[req->cid]; in wil_probe_client_handle()
854 static struct list_head *next_probe_client(struct wil6210_priv *wil) in next_probe_client() argument
858 mutex_lock(&wil->probe_client_mutex); in next_probe_client()
860 if (!list_empty(&wil->probe_client_pending)) { in next_probe_client()
861 ret = wil->probe_client_pending.next; in next_probe_client()
865 mutex_unlock(&wil->probe_client_mutex); in next_probe_client()
872 struct wil6210_priv *wil = container_of(work, struct wil6210_priv, in wil_probe_client_worker() local
877 while ((lh = next_probe_client(wil)) != NULL) { in wil_probe_client_worker()
880 wil_probe_client_handle(wil, req); in wil_probe_client_worker()
885 void wil_probe_client_flush(struct wil6210_priv *wil) in wil_probe_client_flush() argument
889 wil_dbg_misc(wil, "%s()\n", __func__); in wil_probe_client_flush()
891 mutex_lock(&wil->probe_client_mutex); in wil_probe_client_flush()
893 list_for_each_entry_safe(req, t, &wil->probe_client_pending, list) { in wil_probe_client_flush()
898 mutex_unlock(&wil->probe_client_mutex); in wil_probe_client_flush()
905 struct wil6210_priv *wil = wiphy_to_wil(wiphy); in wil_cfg80211_probe_client() local
907 int cid = wil_find_cid(wil, peer); in wil_cfg80211_probe_client()
909 wil_dbg_misc(wil, "%s(%pM => CID %d)\n", __func__, peer, cid); in wil_cfg80211_probe_client()
921 mutex_lock(&wil->probe_client_mutex); in wil_cfg80211_probe_client()
922 list_add_tail(&req->list, &wil->probe_client_pending); in wil_cfg80211_probe_client()
923 mutex_unlock(&wil->probe_client_mutex); in wil_cfg80211_probe_client()
926 queue_work(wil->wq_service, &wil->probe_client_worker); in wil_cfg80211_probe_client()
934 struct wil6210_priv *wil = wiphy_to_wil(wiphy); in wil_cfg80211_change_bss() local
937 wil_dbg_misc(wil, "%s(ap_isolate %d => %d)\n", __func__, in wil_cfg80211_change_bss()
938 wil->ap_isolate, params->ap_isolate); in wil_cfg80211_change_bss()
939 wil->ap_isolate = params->ap_isolate; in wil_cfg80211_change_bss()
1035 void wil_wdev_free(struct wil6210_priv *wil) in wil_wdev_free() argument
1037 struct wireless_dev *wdev = wil_to_wdev(wil); in wil_wdev_free()
1039 dev_dbg(wil_to_dev(wil), "%s()\n", __func__); in wil_wdev_free()