Lines Matching refs:wil

105 static int wil_num_supported_channels(struct wil6210_priv *wil)  in wil_num_supported_channels()  argument
109 if (!test_bit(WMI_FW_CAPABILITY_CHANNEL_4, wil->fw_capabilities)) in wil_num_supported_channels()
115 void update_supported_bands(struct wil6210_priv *wil) in update_supported_bands() argument
117 struct wiphy *wiphy = wil_to_wiphy(wil); in update_supported_bands()
119 wil_dbg_misc(wil, "update supported bands"); in update_supported_bands()
122 wil_num_supported_channels(wil); in update_supported_bands()
124 if (test_bit(WMI_FW_CAPABILITY_CHANNEL_BONDING, wil->fw_capabilities)) { in update_supported_bands()
433 struct wil6210_priv *wil = vif_to_wil(vif); in wil_cid_fill_sinfo() local
442 struct wil_net_stats *stats = &wil->sta[cid].stats; in wil_cid_fill_sinfo()
448 rc = wmi_call(wil, WMI_NOTIFY_REQ_CMDID, vif->mid, &cmd, sizeof(cmd), in wil_cid_fill_sinfo()
454 wil_dbg_wmi(wil, "Link status for CID %d MID %d: {\n" in wil_cid_fill_sinfo()
473 sinfo->generation = wil->sinfo_gen; in wil_cid_fill_sinfo()
484 if (wil->use_enhanced_dma_hw && reply.evt.tx_mode != WMI_TX_MODE_DMG) in wil_cid_fill_sinfo()
504 wil->fw_capabilities)) in wil_cid_fill_sinfo()
518 struct wil6210_priv *wil = wiphy_to_wil(wiphy); in wil_cfg80211_get_station() local
521 int cid = wil_find_cid(wil, vif->mid, mac); in wil_cfg80211_get_station()
523 wil_dbg_misc(wil, "get_station: %pM CID %d MID %d\n", mac, cid, in wil_cfg80211_get_station()
525 if (!wil_cid_valid(wil, cid)) in wil_cfg80211_get_station()
536 int wil_find_cid_by_idx(struct wil6210_priv *wil, u8 mid, int idx) in wil_find_cid_by_idx() argument
540 for (i = 0; i < wil->max_assoc_sta; i++) { in wil_find_cid_by_idx()
541 if (wil->sta[i].status == wil_sta_unused) in wil_find_cid_by_idx()
543 if (wil->sta[i].mid != mid) in wil_find_cid_by_idx()
558 struct wil6210_priv *wil = wiphy_to_wil(wiphy); in wil_cfg80211_dump_station() local
560 int cid = wil_find_cid_by_idx(wil, vif->mid, idx); in wil_cfg80211_dump_station()
562 if (!wil_cid_valid(wil, cid)) in wil_cfg80211_dump_station()
565 ether_addr_copy(mac, wil->sta[cid].addr); in wil_cfg80211_dump_station()
566 wil_dbg_misc(wil, "dump_station: %pM CID %d MID %d\n", mac, cid, in wil_cfg80211_dump_station()
577 struct wil6210_priv *wil = wiphy_to_wil(wiphy); in wil_cfg80211_start_p2p_device() local
579 wil_dbg_misc(wil, "start_p2p_device: entered\n"); in wil_cfg80211_start_p2p_device()
580 wil->p2p_dev_started = 1; in wil_cfg80211_start_p2p_device()
587 struct wil6210_priv *wil = wiphy_to_wil(wiphy); in wil_cfg80211_stop_p2p_device() local
589 if (!wil->p2p_dev_started) in wil_cfg80211_stop_p2p_device()
592 wil_dbg_misc(wil, "stop_p2p_device: entered\n"); in wil_cfg80211_stop_p2p_device()
593 mutex_lock(&wil->mutex); in wil_cfg80211_stop_p2p_device()
594 mutex_lock(&wil->vif_mutex); in wil_cfg80211_stop_p2p_device()
595 wil_p2p_stop_radio_operations(wil); in wil_cfg80211_stop_p2p_device()
596 wil->p2p_dev_started = 0; in wil_cfg80211_stop_p2p_device()
597 mutex_unlock(&wil->vif_mutex); in wil_cfg80211_stop_p2p_device()
598 mutex_unlock(&wil->mutex); in wil_cfg80211_stop_p2p_device()
601 static int wil_cfg80211_validate_add_iface(struct wil6210_priv *wil, in wil_cfg80211_validate_add_iface() argument
610 for (i = 0; i < GET_MAX_VIFS(wil); i++) { in wil_cfg80211_validate_add_iface()
611 if (wil->vifs[i]) { in wil_cfg80211_validate_add_iface()
612 wdev = vif_to_wdev(wil->vifs[i]); in wil_cfg80211_validate_add_iface()
617 return cfg80211_check_combinations(wil->wiphy, &params); in wil_cfg80211_validate_add_iface()
620 static int wil_cfg80211_validate_change_iface(struct wil6210_priv *wil, in wil_cfg80211_validate_change_iface() argument
631 for (i = 0; i < GET_MAX_VIFS(wil); i++) { in wil_cfg80211_validate_change_iface()
632 struct wil6210_vif *vif_pos = wil->vifs[i]; in wil_cfg80211_validate_change_iface()
643 ret = cfg80211_check_combinations(wil->wiphy, &params); in wil_cfg80211_validate_change_iface()
654 struct wil6210_priv *wil = wiphy_to_wil(wiphy); in wil_cfg80211_add_iface() local
655 struct net_device *ndev_main = wil->main_ndev, *ndev; in wil_cfg80211_add_iface()
660 wil_dbg_misc(wil, "add_iface, type %d\n", type); in wil_cfg80211_add_iface()
667 if (wil->p2p_wdev) { in wil_cfg80211_add_iface()
668 wil_err(wil, "P2P_DEVICE interface already created\n"); in wil_cfg80211_add_iface()
681 wil->p2p_wdev = p2p_wdev; in wil_cfg80211_add_iface()
686 if (!wil->wiphy->n_iface_combinations) { in wil_cfg80211_add_iface()
687 wil_err(wil, "virtual interfaces not supported\n"); in wil_cfg80211_add_iface()
691 rc = wil_cfg80211_validate_add_iface(wil, type); in wil_cfg80211_add_iface()
693 wil_err(wil, "iface validation failed, err=%d\n", rc); in wil_cfg80211_add_iface()
697 vif = wil_vif_alloc(wil, name, name_assign_type, type); in wil_cfg80211_add_iface()
713 rc = wil_vif_add(wil, vif); in wil_cfg80211_add_iface()
717 wil_info(wil, "added VIF, mid %d iftype %d MAC %pM\n", in wil_cfg80211_add_iface()
727 struct wil6210_priv *wil = vif_to_wil(vif); in wil_vif_prepare_stop() local
739 wil_info(wil, "failed to stop AP, status %d\n", in wil_vif_prepare_stop()
753 struct wil6210_priv *wil = wiphy_to_wil(wiphy); in wil_cfg80211_del_iface() local
754 struct wil6210_vif *vif = wdev_to_vif(wil, wdev); in wil_cfg80211_del_iface()
757 wil_dbg_misc(wil, "del_iface\n"); in wil_cfg80211_del_iface()
760 if (wdev != wil->p2p_wdev) { in wil_cfg80211_del_iface()
761 wil_err(wil, "delete of incorrect interface 0x%p\n", in wil_cfg80211_del_iface()
767 wil_p2p_wdev_free(wil); in wil_cfg80211_del_iface()
772 wil_err(wil, "cannot remove the main interface\n"); in wil_cfg80211_del_iface()
780 wil_info(wil, "deleted VIF, mid %d iftype %d MAC %pM\n", in wil_cfg80211_del_iface()
783 wil_vif_remove(wil, vif->mid); in wil_cfg80211_del_iface()
803 struct wil6210_priv *wil = wiphy_to_wil(wiphy); in wil_cfg80211_change_iface() local
809 wil_dbg_misc(wil, "change_iface: type=%d\n", type); in wil_cfg80211_change_iface()
812 rc = wil_cfg80211_validate_change_iface(wil, vif, type); in wil_cfg80211_change_iface()
814 wil_err(wil, "iface validation failed, err=%d\n", rc); in wil_cfg80211_change_iface()
822 if (!wil_has_other_active_ifaces(wil, ndev, true, false) && in wil_cfg80211_change_iface()
823 netif_running(ndev) && !wil_is_recovery_blocked(wil) && in wil_cfg80211_change_iface()
825 wil_dbg_misc(wil, "interface is up. resetting...\n"); in wil_cfg80211_change_iface()
826 mutex_lock(&wil->mutex); in wil_cfg80211_change_iface()
827 __wil_down(wil); in wil_cfg80211_change_iface()
828 rc = __wil_up(wil); in wil_cfg80211_change_iface()
829 mutex_unlock(&wil->mutex); in wil_cfg80211_change_iface()
844 wil->monitor_flags = params->flags; in wil_cfg80211_change_iface()
850 if (vif->mid != 0 && wil_has_active_ifaces(wil, true, false)) { in wil_cfg80211_change_iface()
853 rc = wmi_port_delete(wil, vif->mid); in wil_cfg80211_change_iface()
856 rc = wmi_port_allocate(wil, vif->mid, ndev->dev_addr, type); in wil_cfg80211_change_iface()
868 struct wil6210_priv *wil = wiphy_to_wil(wiphy); in wil_cfg80211_scan() local
870 struct wil6210_vif *vif = wdev_to_vif(wil, wdev); in wil_cfg80211_scan()
878 wil_dbg_misc(wil, "scan: wdev=0x%p iftype=%d\n", wdev, wdev->iftype); in wil_cfg80211_scan()
892 if (test_bit(wil_status_dontscan, wil->status)) { in wil_cfg80211_scan()
893 wil_err(wil, "Can't scan now\n"); in wil_cfg80211_scan()
897 mutex_lock(&wil->mutex); in wil_cfg80211_scan()
899 mutex_lock(&wil->vif_mutex); in wil_cfg80211_scan()
901 wil_err(wil, "Already scanning\n"); in wil_cfg80211_scan()
902 mutex_unlock(&wil->vif_mutex); in wil_cfg80211_scan()
906 mutex_unlock(&wil->vif_mutex); in wil_cfg80211_scan()
909 if (!wil->p2p_dev_started) { in wil_cfg80211_scan()
910 wil_err(wil, "P2P search requested on stopped P2P device\n"); in wil_cfg80211_scan()
918 wil->radio_wdev = wdev; in wil_cfg80211_scan()
922 wil->radio_wdev = in wil_cfg80211_scan()
923 wil->main_ndev->ieee80211_ptr; in wil_cfg80211_scan()
932 wil_dbg_misc(wil, "Start scan_request 0x%p\n", request); in wil_cfg80211_scan()
933 wil_dbg_misc(wil, "SSID count: %d", request->n_ssids); in wil_cfg80211_scan()
936 wil_dbg_misc(wil, "SSID[%d]", i); in wil_cfg80211_scan()
949 wil_err(wil, "set SSID for scan request failed: %d\n", rc); in wil_cfg80211_scan()
964 wil_err(wil, in wil_cfg80211_scan()
971 wil_dbg_misc(wil, "Scan for ch %d : %d MHz\n", ch, in wil_cfg80211_scan()
979 wil_dbg_misc(wil, "Scan has no IE's\n"); in wil_cfg80211_scan()
986 if (wil->discovery_mode && cmd.cmd.scan_type == WMI_ACTIVE_SCAN) { in wil_cfg80211_scan()
988 wil_dbg_misc(wil, "active scan with discovery_mode=1\n"); in wil_cfg80211_scan()
992 wil->radio_wdev = wdev; in wil_cfg80211_scan()
993 rc = wmi_send(wil, WMI_START_SCAN_CMDID, vif->mid, in wil_cfg80211_scan()
1001 wil->radio_wdev = wil->main_ndev->ieee80211_ptr; in wil_cfg80211_scan()
1005 mutex_unlock(&wil->mutex); in wil_cfg80211_scan()
1012 struct wil6210_priv *wil = wiphy_to_wil(wiphy); in wil_cfg80211_abort_scan() local
1013 struct wil6210_vif *vif = wdev_to_vif(wil, wdev); in wil_cfg80211_abort_scan()
1015 wil_dbg_misc(wil, "wdev=0x%p iftype=%d\n", wdev, wdev->iftype); in wil_cfg80211_abort_scan()
1017 mutex_lock(&wil->mutex); in wil_cfg80211_abort_scan()
1018 mutex_lock(&wil->vif_mutex); in wil_cfg80211_abort_scan()
1024 wil_dbg_misc(wil, "abort scan was called on the wrong iface\n"); in wil_cfg80211_abort_scan()
1028 if (wdev == wil->p2p_wdev && wil->radio_wdev == wil->p2p_wdev) in wil_cfg80211_abort_scan()
1029 wil_p2p_stop_radio_operations(wil); in wil_cfg80211_abort_scan()
1034 mutex_unlock(&wil->vif_mutex); in wil_cfg80211_abort_scan()
1035 mutex_unlock(&wil->mutex); in wil_cfg80211_abort_scan()
1038 static void wil_print_crypto(struct wil6210_priv *wil, in wil_print_crypto() argument
1043 wil_dbg_misc(wil, "WPA versions: 0x%08x cipher group 0x%08x\n", in wil_print_crypto()
1045 wil_dbg_misc(wil, "Pairwise ciphers [%d] {\n", c->n_ciphers_pairwise); in wil_print_crypto()
1048 wil_dbg_misc(wil, " [%d] = 0x%08x\n", i, in wil_print_crypto()
1050 wil_dbg_misc(wil, "}\n"); in wil_print_crypto()
1051 wil_dbg_misc(wil, "AKM suites [%d] {\n", c->n_akm_suites); in wil_print_crypto()
1054 wil_dbg_misc(wil, " [%d] = 0x%08x\n", i, in wil_print_crypto()
1056 wil_dbg_misc(wil, "}\n"); in wil_print_crypto()
1057 wil_dbg_misc(wil, "Control port : %d, eth_type 0x%04x no_encrypt %d\n", in wil_print_crypto()
1082 static void wil_print_connect_params(struct wil6210_priv *wil, in wil_print_connect_params() argument
1085 wil_info(wil, "Connecting to:\n"); in wil_print_connect_params()
1087 wil_info(wil, " Channel: %d freq %d\n", in wil_print_connect_params()
1091 wil_info(wil, " BSSID: %pM\n", sme->bssid); in wil_print_connect_params()
1096 wil_info(wil, " Previous BSSID=%pM\n", sme->prev_bssid); in wil_print_connect_params()
1097 wil_info(wil, " Auth Type: %s\n", in wil_print_connect_params()
1099 wil_info(wil, " Privacy: %s\n", sme->privacy ? "secure" : "open"); in wil_print_connect_params()
1100 wil_info(wil, " PBSS: %d\n", sme->pbss); in wil_print_connect_params()
1101 wil_print_crypto(wil, &sme->crypto); in wil_print_connect_params()
1108 struct wil6210_priv *wil = wiphy_to_wil(wiphy); in wil_ft_connect() local
1113 if (!test_bit(WMI_FW_CAPABILITY_FT_ROAMING, wil->fw_capabilities)) { in wil_ft_connect()
1114 wil_err(wil, "FT: FW does not support FT roaming\n"); in wil_ft_connect()
1119 wil_err(wil, "FT: prev_bssid was not set\n"); in wil_ft_connect()
1124 wil_err(wil, "FT: can not roam to same AP\n"); in wil_ft_connect()
1129 wil_err(wil, "FT: roam while not connected\n"); in wil_ft_connect()
1134 wil_err(wil, "FT: privacy mismatch, current (%d) roam (%d)\n", in wil_ft_connect()
1140 wil_err(wil, "FT: roam is not valid for PBSS\n"); in wil_ft_connect()
1148 wil_info(wil, "FT: roaming\n"); in wil_ft_connect()
1151 rc = wmi_send(wil, WMI_FT_AUTH_CMDID, vif->mid, in wil_ft_connect()
1162 static int wil_get_wmi_edmg_channel(struct wil6210_priv *wil, u8 edmg_bw_config, in wil_get_wmi_edmg_channel() argument
1178 wil_err(wil, "Unsupported edmg channel bitmap 0x%x\n", in wil_get_wmi_edmg_channel()
1183 wil_err(wil, "Unsupported EDMG BW configuration %d\n", in wil_get_wmi_edmg_channel()
1193 struct wil6210_priv *wil = wiphy_to_wil(wiphy); in wil_cfg80211_connect() local
1205 wil_dbg_misc(wil, "connect, mid=%d\n", vif->mid); in wil_cfg80211_connect()
1206 wil_print_connect_params(wil, sme); in wil_cfg80211_connect()
1220 wil_err(wil, "IE too large (%td bytes)\n", sme->ie_len); in wil_cfg80211_connect()
1228 wil_info(wil, "WSC connection\n"); in wil_cfg80211_connect()
1230 wil_err(wil, "No WSC with FT roam\n"); in wil_cfg80211_connect()
1242 wil_err(wil, "Unable to find BSS\n"); in wil_cfg80211_connect()
1248 wil_err(wil, "No SSID\n"); in wil_cfg80211_connect()
1267 wil_err(wil, "Unsupported BSS type, capability= 0x%04x\n", in wil_cfg80211_connect()
1275 wil_err(wil, "BSS at unknown frequency %dMhz\n", in wil_cfg80211_connect()
1283 wil_err(wil, "FT: Unsupported BSS type, capability= 0x%04x\n", in wil_cfg80211_connect()
1299 wil_err(wil, "WMI_DELETE_CIPHER_KEY_CMD(PTK) failed\n"); in wil_cfg80211_connect()
1305 wil_err(wil, "WMI_DELETE_CIPHER_KEY_CMD(GTK) failed\n"); in wil_cfg80211_connect()
1334 rc = wil_get_wmi_edmg_channel(wil, sme->edmg.bw_config, in wil_cfg80211_connect()
1344 rc = wmi_send(wil, WMI_CONNECT_CMDID, vif->mid, &conn, sizeof(conn)); in wil_cfg80211_connect()
1347 if (!wil_has_other_active_ifaces(wil, ndev, false, true)) in wil_cfg80211_connect()
1348 wil6210_bus_request(wil, WIL_MAX_BUS_REQUEST_KBPS); in wil_cfg80211_connect()
1368 struct wil6210_priv *wil = wiphy_to_wil(wiphy); in wil_cfg80211_disconnect() local
1371 wil_dbg_misc(wil, "disconnect: reason=%d, mid=%d\n", in wil_cfg80211_disconnect()
1376 wil_err(wil, "Disconnect was called while disconnected\n"); in wil_cfg80211_disconnect()
1381 rc = wmi_call(wil, WMI_DISCONNECT_CMDID, vif->mid, NULL, 0, in wil_cfg80211_disconnect()
1385 wil_err(wil, "disconnect error %d\n", rc); in wil_cfg80211_disconnect()
1392 struct wil6210_priv *wil = wiphy_to_wil(wiphy); in wil_cfg80211_set_wiphy_params() local
1402 rc = wmi_set_mgmt_retry(wil, wiphy->retry_short); in wil_cfg80211_set_wiphy_params()
1416 struct wil6210_priv *wil = wiphy_to_wil(wiphy); in wil_cfg80211_mgmt_tx() local
1417 struct wil6210_vif *vif = wdev_to_vif(wil, wdev); in wil_cfg80211_mgmt_tx()
1421 wil_dbg_misc(wil, "mgmt_tx: channel %d offchan %d, wait %d\n", in wil_cfg80211_mgmt_tx()
1432 wil_err(wil, "invalid channel\n"); in wil_cfg80211_mgmt_tx()
1437 wil_dbg_misc(wil, in wil_cfg80211_mgmt_tx()
1444 wil_dbg_misc(wil, in wil_cfg80211_mgmt_tx()
1451 wil_err(wil, in wil_cfg80211_mgmt_tx()
1477 struct wil6210_priv *wil = wiphy_to_wil(wiphy); in wil_cfg80211_set_channel() local
1479 wil->monitor_chandef = *chandef; in wil_cfg80211_set_channel()
1487 struct wil6210_priv *wil = wdev_to_wil(wdev); in wil_detect_key_usage() local
1504 wil_err(wil, "Can't determine GTK type\n"); in wil_detect_key_usage()
1509 wil_dbg_misc(wil, "detect_key_usage: -> %s\n", key_usage_str[rc]); in wil_detect_key_usage()
1515 wil_find_sta_by_key_usage(struct wil6210_priv *wil, u8 mid, in wil_find_sta_by_key_usage() argument
1525 cid = wil_find_cid(wil, mid, mac_addr); in wil_find_sta_by_key_usage()
1527 cid = wil_find_cid_by_idx(wil, mid, 0); in wil_find_sta_by_key_usage()
1529 wil_err(wil, "No CID for %pM %s\n", mac_addr, in wil_find_sta_by_key_usage()
1534 return &wil->sta[cid]; in wil_find_sta_by_key_usage()
1606 struct wil6210_priv *wil = wiphy_to_wil(wiphy); in wil_cfg80211_add_key() local
1609 struct wil_sta_info *cs = wil_find_sta_by_key_usage(wil, vif->mid, in wil_cfg80211_add_key()
1614 wil_err(wil, "NULL params\n"); in wil_cfg80211_add_key()
1618 wil_dbg_misc(wil, "add_key: %pM %s[%d] PN %*phN\n", in wil_cfg80211_add_key()
1627 wil_err(wil, "Not connected, %pM %s[%d] PN %*phN\n", in wil_cfg80211_add_key()
1638 wil_err(wil, in wil_cfg80211_add_key()
1646 spin_lock_bh(&wil->eap_lock); in wil_cfg80211_add_key()
1652 wil_dbg_misc(wil, "Store EAPOL key\n"); in wil_cfg80211_add_key()
1654 spin_unlock_bh(&wil->eap_lock); in wil_cfg80211_add_key()
1681 struct wil6210_priv *wil = wiphy_to_wil(wiphy); in wil_cfg80211_del_key() local
1684 struct wil_sta_info *cs = wil_find_sta_by_key_usage(wil, vif->mid, in wil_cfg80211_del_key()
1688 wil_dbg_misc(wil, "del_key: %pM %s[%d]\n", mac_addr, in wil_cfg80211_del_key()
1692 wil_info(wil, "Not connected, %pM %s[%d]\n", in wil_cfg80211_del_key()
1707 struct wil6210_priv *wil = wiphy_to_wil(wiphy); in wil_cfg80211_set_default_key() local
1709 wil_dbg_misc(wil, "set_default_key: entered\n"); in wil_cfg80211_set_default_key()
1719 struct wil6210_priv *wil = wiphy_to_wil(wiphy); in wil_remain_on_channel() local
1722 wil_dbg_misc(wil, in wil_remain_on_channel()
1726 rc = wil_p2p_listen(wil, wdev, duration, chan, cookie); in wil_remain_on_channel()
1734 struct wil6210_priv *wil = wiphy_to_wil(wiphy); in wil_cancel_remain_on_channel() local
1735 struct wil6210_vif *vif = wdev_to_vif(wil, wdev); in wil_cancel_remain_on_channel()
1737 wil_dbg_misc(wil, "cancel_remain_on_channel\n"); in wil_cancel_remain_on_channel()
1915 struct wil6210_priv *wil = wiphy_to_wil(wiphy); in _wil_cfg80211_start_ap() local
1928 wil_dbg_misc(wil, "start_ap: mid=%d, is_go=%d\n", vif->mid, is_go); in _wil_cfg80211_start_ap()
1930 wil_err(wil, "P2P GO must be in PBSS\n"); in _wil_cfg80211_start_ap()
1934 wil_set_recovery_state(wil, fw_recovery_idle); in _wil_cfg80211_start_ap()
1948 wil->fw_capabilities)) { in _wil_cfg80211_start_ap()
1949 wil_err(wil, "FW does not support FT roaming\n"); in _wil_cfg80211_start_ap()
1955 mutex_lock(&wil->mutex); in _wil_cfg80211_start_ap()
1957 if (!wil_has_other_active_ifaces(wil, ndev, true, false)) { in _wil_cfg80211_start_ap()
1958 __wil_down(wil); in _wil_cfg80211_start_ap()
1959 rc = __wil_up(wil); in _wil_cfg80211_start_ap()
1982 if (!wil_has_other_active_ifaces(wil, ndev, false, true)) in _wil_cfg80211_start_ap()
1983 wil6210_bus_request(wil, WIL_MAX_BUS_REQUEST_KBPS); in _wil_cfg80211_start_ap()
2000 if (!wil_has_other_active_ifaces(wil, ndev, false, true)) in _wil_cfg80211_start_ap()
2001 wil6210_bus_request(wil, WIL_DEFAULT_BUS_REQUEST_KBPS); in _wil_cfg80211_start_ap()
2003 mutex_unlock(&wil->mutex); in _wil_cfg80211_start_ap()
2007 void wil_cfg80211_ap_recovery(struct wil6210_priv *wil) in wil_cfg80211_ap_recovery() argument
2010 struct wiphy *wiphy = wil_to_wiphy(wil); in wil_cfg80211_ap_recovery()
2012 for (i = 0; i < GET_MAX_VIFS(wil); i++) { in wil_cfg80211_ap_recovery()
2013 struct wil6210_vif *vif = wil->vifs[i]; in wil_cfg80211_ap_recovery()
2029 wil_info(wil, in wil_cfg80211_ap_recovery()
2042 wil_err(wil, "vif %d recovery failed (%d)\n", i, rc); in wil_cfg80211_ap_recovery()
2055 wil_err(wil, "vif %d recovery add key failed (%d)\n", in wil_cfg80211_ap_recovery()
2064 struct wil6210_priv *wil = wiphy_to_wil(wiphy); in wil_cfg80211_change_beacon() local
2070 wil_dbg_misc(wil, "change_beacon, mid=%d\n", vif->mid); in wil_cfg80211_change_beacon()
2083 wil_dbg_misc(wil, "privacy changed %d=>%d. Restarting AP\n", in wil_cfg80211_change_beacon()
2105 struct wil6210_priv *wil = wiphy_to_wil(wiphy); in wil_cfg80211_start_ap() local
2112 wil_dbg_misc(wil, "start_ap\n"); in wil_cfg80211_start_ap()
2114 rc = wil_get_wmi_edmg_channel(wil, info->chandef.edmg.bw_config, in wil_cfg80211_start_ap()
2121 wil_err(wil, "AP: No channel???\n"); in wil_cfg80211_start_ap()
2139 wil_err(wil, "AP: Invalid hidden SSID %d\n", info->hidden_ssid); in wil_cfg80211_start_ap()
2142 wil_dbg_misc(wil, "AP on Channel %d %d MHz, %s\n", channel->hw_value, in wil_cfg80211_start_ap()
2144 wil_dbg_misc(wil, "Privacy: %d auth_type %d\n", in wil_cfg80211_start_ap()
2146 wil_dbg_misc(wil, "Hidden SSID mode: %d\n", in wil_cfg80211_start_ap()
2148 wil_dbg_misc(wil, "BI %d DTIM %d\n", info->beacon_interval, in wil_cfg80211_start_ap()
2150 wil_dbg_misc(wil, "PBSS %d\n", info->pbss); in wil_cfg80211_start_ap()
2154 wil_print_crypto(wil, crypto); in wil_cfg80211_start_ap()
2168 struct wil6210_priv *wil = wiphy_to_wil(wiphy); in wil_cfg80211_stop_ap() local
2172 wil_dbg_misc(wil, "stop_ap, mid=%d\n", vif->mid); in wil_cfg80211_stop_ap()
2175 last = !wil_has_other_active_ifaces(wil, ndev, false, true); in wil_cfg80211_stop_ap()
2177 wil6210_bus_request(wil, WIL_DEFAULT_BUS_REQUEST_KBPS); in wil_cfg80211_stop_ap()
2178 wil_set_recovery_state(wil, fw_recovery_idle); in wil_cfg80211_stop_ap()
2179 set_bit(wil_status_resetting, wil->status); in wil_cfg80211_stop_ap()
2182 mutex_lock(&wil->mutex); in wil_cfg80211_stop_ap()
2194 __wil_down(wil); in wil_cfg80211_stop_ap()
2198 mutex_unlock(&wil->mutex); in wil_cfg80211_stop_ap()
2209 struct wil6210_priv *wil = wiphy_to_wil(wiphy); in wil_cfg80211_add_station() local
2211 wil_dbg_misc(wil, "add station %pM aid %d mid %d mask 0x%x set 0x%x\n", in wil_cfg80211_add_station()
2216 wil_err(wil, "not supported with AP SME enabled\n"); in wil_cfg80211_add_station()
2221 wil_err(wil, "invalid aid\n"); in wil_cfg80211_add_station()
2233 struct wil6210_priv *wil = wiphy_to_wil(wiphy); in wil_cfg80211_del_station() local
2235 wil_dbg_misc(wil, "del_station: %pM, reason=%d mid=%d\n", in wil_cfg80211_del_station()
2238 mutex_lock(&wil->mutex); in wil_cfg80211_del_station()
2240 mutex_unlock(&wil->mutex); in wil_cfg80211_del_station()
2251 struct wil6210_priv *wil = wiphy_to_wil(wiphy); in wil_cfg80211_change_station() local
2256 wil_dbg_misc(wil, "change station %pM mask 0x%x set 0x%x mid %d\n", in wil_cfg80211_change_station()
2261 wil_dbg_misc(wil, "not supported with AP SME enabled\n"); in wil_cfg80211_change_station()
2268 cid = wil_find_cid(wil, vif->mid, mac); in wil_cfg80211_change_station()
2270 wil_err(wil, "station not found\n"); in wil_cfg80211_change_station()
2274 for (i = 0; i < ARRAY_SIZE(wil->ring2cid_tid); i++) in wil_cfg80211_change_station()
2275 if (wil->ring2cid_tid[i][0] == cid) { in wil_cfg80211_change_station()
2276 txdata = &wil->ring_tx_data[i]; in wil_cfg80211_change_station()
2281 wil_err(wil, "ring data not found\n"); in wil_cfg80211_change_station()
2287 wil_dbg_misc(wil, "cid %d ring %d authorize %d\n", cid, i, in wil_cfg80211_change_station()
2294 static void wil_probe_client_handle(struct wil6210_priv *wil, in wil_probe_client_handle() argument
2299 struct wil_sta_info *sta = &wil->sta[req->cid]; in wil_probe_client_handle()
2329 struct wil6210_priv *wil = vif_to_wil(vif); in wil_probe_client_worker() local
2336 wil_probe_client_handle(wil, vif, req); in wil_probe_client_worker()
2344 struct wil6210_priv *wil = vif_to_wil(vif); in wil_probe_client_flush() local
2346 wil_dbg_misc(wil, "probe_client_flush\n"); in wil_probe_client_flush()
2362 struct wil6210_priv *wil = wiphy_to_wil(wiphy); in wil_cfg80211_probe_client() local
2365 int cid = wil_find_cid(wil, vif->mid, peer); in wil_cfg80211_probe_client()
2367 wil_dbg_misc(wil, "probe_client: %pM => CID %d MID %d\n", in wil_cfg80211_probe_client()
2385 queue_work(wil->wq_service, &vif->probe_client_worker); in wil_cfg80211_probe_client()
2393 struct wil6210_priv *wil = wiphy_to_wil(wiphy); in wil_cfg80211_change_bss() local
2397 wil_dbg_misc(wil, "change_bss: ap_isolate MID %d, %d => %d\n", in wil_cfg80211_change_bss()
2409 struct wil6210_priv *wil = wiphy_to_wil(wiphy); in wil_cfg80211_set_power_mgmt() local
2412 wil_dbg_misc(wil, "enabled=%d, timeout=%d\n", in wil_cfg80211_set_power_mgmt()
2420 return wil_ps_update(wil, ps_profile); in wil_cfg80211_set_power_mgmt()
2426 struct wil6210_priv *wil = wiphy_to_wil(wiphy); in wil_cfg80211_suspend() local
2431 if (test_bit(wil_status_suspended, wil->status)) { in wil_cfg80211_suspend()
2432 wil_dbg_pm(wil, "trying to suspend while suspended\n"); in wil_cfg80211_suspend()
2436 rc = wil_can_suspend(wil, false); in wil_cfg80211_suspend()
2440 wil_dbg_pm(wil, "suspending\n"); in wil_cfg80211_suspend()
2442 mutex_lock(&wil->mutex); in wil_cfg80211_suspend()
2443 mutex_lock(&wil->vif_mutex); in wil_cfg80211_suspend()
2444 wil_p2p_stop_radio_operations(wil); in wil_cfg80211_suspend()
2445 wil_abort_scan_all_vifs(wil, true); in wil_cfg80211_suspend()
2446 mutex_unlock(&wil->vif_mutex); in wil_cfg80211_suspend()
2447 mutex_unlock(&wil->mutex); in wil_cfg80211_suspend()
2455 struct wil6210_priv *wil = wiphy_to_wil(wiphy); in wil_cfg80211_resume() local
2457 wil_dbg_pm(wil, "resuming\n"); in wil_cfg80211_resume()
2467 struct wil6210_priv *wil = wiphy_to_wil(wiphy); in wil_cfg80211_sched_scan_start() local
2474 wil_dbg_misc(wil, in wil_cfg80211_sched_scan_start()
2478 wil_dbg_misc(wil, "SSID[%d]:", i); in wil_cfg80211_sched_scan_start()
2483 wil_dbg_misc(wil, "channels:"); in wil_cfg80211_sched_scan_start()
2485 wil_dbg_misc(wil, " %d%s", request->channels[i]->hw_value, in wil_cfg80211_sched_scan_start()
2487 wil_dbg_misc(wil, "n_match_sets %d, min_rssi_thold %d, delay %d\n", in wil_cfg80211_sched_scan_start()
2493 wil_dbg_misc(wil, "MATCHSET[%d]: rssi_thold %d\n", in wil_cfg80211_sched_scan_start()
2499 wil_dbg_misc(wil, "n_scan_plans %d\n", request->n_scan_plans); in wil_cfg80211_sched_scan_start()
2503 wil_dbg_misc(wil, "SCAN PLAN[%d]: interval %d iterations %d\n", in wil_cfg80211_sched_scan_start()
2511 return wmi_start_sched_scan(wil, request); in wil_cfg80211_sched_scan_start()
2518 struct wil6210_priv *wil = wiphy_to_wil(wiphy); in wil_cfg80211_sched_scan_stop() local
2525 rc = wmi_stop_sched_scan(wil); in wil_cfg80211_sched_scan_stop()
2529 wil_dbg_misc(wil, "sched scan stopped (%d)\n", rc); in wil_cfg80211_sched_scan_stop()
2538 struct wil6210_priv *wil = wiphy_to_wil(wiphy); in wil_cfg80211_update_ft_ies() local
2544 wil_dbg_misc(wil, "update ft ies, mid=%d\n", vif->mid); in wil_cfg80211_update_ft_ies()
2548 if (!test_bit(WMI_FW_CAPABILITY_FT_ROAMING, wil->fw_capabilities)) { in wil_cfg80211_update_ft_ies()
2549 wil_err(wil, "FW does not support FT roaming\n"); in wil_cfg80211_update_ft_ies()
2567 wil_err(wil, "FT: bss is NULL\n"); in wil_cfg80211_update_ft_ies()
2574 rc = wmi_send(wil, WMI_FT_REASSOC_CMDID, vif->mid, in wil_cfg80211_update_ft_ies()
2577 wil_err(wil, "FT: reassoc failed (%d)\n", rc); in wil_cfg80211_update_ft_ies()
2586 struct wil6210_priv *wil = wiphy_to_wil(wiphy); in wil_cfg80211_set_multicast_to_unicast() local
2588 if (wil->multicast_to_unicast == enabled) in wil_cfg80211_set_multicast_to_unicast()
2591 wil_info(wil, "set multicast to unicast, enabled=%d\n", enabled); in wil_cfg80211_set_multicast_to_unicast()
2592 wil->multicast_to_unicast = enabled; in wil_cfg80211_set_multicast_to_unicast()
2601 struct wil6210_priv *wil = wiphy_to_wil(wiphy); in wil_cfg80211_set_cqm_rssi_config() local
2604 wil->cqm_rssi_thold = rssi_thold; in wil_cfg80211_set_cqm_rssi_config()
2606 rc = wmi_set_cqm_rssi_config(wil, rssi_thold, rssi_hyst); in wil_cfg80211_set_cqm_rssi_config()
2609 wil->cqm_rssi_thold = 0; in wil_cfg80211_set_cqm_rssi_config()
2697 struct wil6210_priv *wil, const struct wil_fw_record_concurrency *conc) in wil_cfg80211_iface_combinations_from_fw() argument
2699 struct wiphy *wiphy = wil_to_wiphy(wil); in wil_cfg80211_iface_combinations_from_fw()
2709 wil_dbg_misc(wil, "iface_combinations already set, skipping\n"); in wil_cfg80211_iface_combinations_from_fw()
2737 wil_dbg_misc(wil, in wil_cfg80211_iface_combinations_from_fw()
2746 wil_dbg_misc(wil, in wil_cfg80211_iface_combinations_from_fw()
2756 wil_dbg_misc(wil, "multiple VIFs supported, n_mids %d\n", conc->n_mids); in wil_cfg80211_iface_combinations_from_fw()
2757 wil->max_vifs = conc->n_mids + 1; /* including main interface */ in wil_cfg80211_iface_combinations_from_fw()
2758 if (wil->max_vifs > WIL_MAX_VIFS) { in wil_cfg80211_iface_combinations_from_fw()
2759 wil_info(wil, "limited number of VIFs supported(%d, FW %d)\n", in wil_cfg80211_iface_combinations_from_fw()
2760 WIL_MAX_VIFS, wil->max_vifs); in wil_cfg80211_iface_combinations_from_fw()
2761 wil->max_vifs = WIL_MAX_VIFS; in wil_cfg80211_iface_combinations_from_fw()
2771 struct wil6210_priv *wil; in wil_cfg80211_init() local
2787 wil = wiphy_to_wil(wiphy); in wil_cfg80211_init()
2788 wil->wiphy = wiphy; in wil_cfg80211_init()
2792 cfg80211_chandef_create(&wil->monitor_chandef, ch, NL80211_CHAN_NO_HT); in wil_cfg80211_init()
2794 return wil; in wil_cfg80211_init()
2797 void wil_cfg80211_deinit(struct wil6210_priv *wil) in wil_cfg80211_deinit() argument
2799 struct wiphy *wiphy = wil_to_wiphy(wil); in wil_cfg80211_deinit()
2801 dev_dbg(wil_to_dev(wil), "%s()\n", __func__); in wil_cfg80211_deinit()
2813 void wil_p2p_wdev_free(struct wil6210_priv *wil) in wil_p2p_wdev_free() argument
2817 mutex_lock(&wil->vif_mutex); in wil_p2p_wdev_free()
2818 p2p_wdev = wil->p2p_wdev; in wil_p2p_wdev_free()
2819 wil->p2p_wdev = NULL; in wil_p2p_wdev_free()
2820 wil->radio_wdev = wil->main_ndev->ieee80211_ptr; in wil_p2p_wdev_free()
2821 mutex_unlock(&wil->vif_mutex); in wil_p2p_wdev_free()
2848 struct wil6210_priv *wil = wdev_to_wil(wdev); in wil_rf_sector_get_cfg() local
2849 struct wil6210_vif *vif = wdev_to_vif(wil, wdev); in wil_rf_sector_get_cfg()
2867 if (!test_bit(WMI_FW_CAPABILITY_RF_SECTORS, wil->fw_capabilities)) in wil_rf_sector_get_cfg()
2873 wil_err(wil, "Invalid rf sector ATTR\n"); in wil_rf_sector_get_cfg()
2880 wil_err(wil, "Invalid rf sector spec\n"); in wil_rf_sector_get_cfg()
2887 wil_err(wil, "Invalid sector index %d\n", sector_index); in wil_rf_sector_get_cfg()
2893 wil_err(wil, "Invalid sector type %d\n", sector_type); in wil_rf_sector_get_cfg()
2900 wil_err(wil, "Invalid rf module mask 0x%x\n", rf_modules_vec); in wil_rf_sector_get_cfg()
2907 rc = wmi_call(wil, WMI_GET_RF_SECTOR_PARAMS_CMDID, vif->mid, in wil_rf_sector_get_cfg()
2914 wil_err(wil, "get rf sector cfg failed with status %d\n", in wil_rf_sector_get_cfg()
2969 struct wil6210_priv *wil = wdev_to_wil(wdev); in wil_rf_sector_set_cfg() local
2970 struct wil6210_vif *vif = wdev_to_vif(wil, wdev); in wil_rf_sector_set_cfg()
2987 if (!test_bit(WMI_FW_CAPABILITY_RF_SECTORS, wil->fw_capabilities)) in wil_rf_sector_set_cfg()
2993 wil_err(wil, "Invalid rf sector ATTR\n"); in wil_rf_sector_set_cfg()
3000 wil_err(wil, "Invalid rf sector spec\n"); in wil_rf_sector_set_cfg()
3007 wil_err(wil, "Invalid sector index %d\n", sector_index); in wil_rf_sector_set_cfg()
3013 wil_err(wil, "Invalid sector type %d\n", sector_type); in wil_rf_sector_set_cfg()
3029 wil_err(wil, "invalid sector cfg\n"); in wil_rf_sector_set_cfg()
3040 wil_err(wil, "missing cfg params\n"); in wil_rf_sector_set_cfg()
3047 wil_err(wil, "invalid RF module index %d\n", in wil_rf_sector_set_cfg()
3068 rc = wmi_call(wil, WMI_SET_RF_SECTOR_PARAMS_CMDID, vif->mid, in wil_rf_sector_set_cfg()
3081 struct wil6210_priv *wil = wdev_to_wil(wdev); in wil_rf_sector_get_selected() local
3082 struct wil6210_vif *vif = wdev_to_vif(wil, wdev); in wil_rf_sector_get_selected()
3096 if (!test_bit(WMI_FW_CAPABILITY_RF_SECTORS, wil->fw_capabilities)) in wil_rf_sector_get_selected()
3102 wil_err(wil, "Invalid rf sector ATTR\n"); in wil_rf_sector_get_selected()
3107 wil_err(wil, "Invalid rf sector spec\n"); in wil_rf_sector_get_selected()
3112 wil_err(wil, "Invalid sector type %d\n", sector_type); in wil_rf_sector_get_selected()
3118 cid = wil_find_cid(wil, vif->mid, mac_addr); in wil_rf_sector_get_selected()
3120 wil_err(wil, "invalid MAC address %pM\n", mac_addr); in wil_rf_sector_get_selected()
3125 wil_err(wil, "must specify MAC address when connected\n"); in wil_rf_sector_get_selected()
3133 rc = wmi_call(wil, WMI_GET_SELECTED_RF_SECTOR_INDEX_CMDID, vif->mid, in wil_rf_sector_get_selected()
3141 wil_err(wil, "get rf selected sector cfg failed with status %d\n", in wil_rf_sector_get_selected()
3165 static int wil_rf_sector_wmi_set_selected(struct wil6210_priv *wil, in wil_rf_sector_wmi_set_selected() argument
3182 rc = wmi_call(wil, WMI_SET_SELECTED_RF_SECTOR_INDEX_CMDID, mid, in wil_rf_sector_wmi_set_selected()
3196 struct wil6210_priv *wil = wdev_to_wil(wdev); in wil_rf_sector_set_selected() local
3197 struct wil6210_vif *vif = wdev_to_vif(wil, wdev); in wil_rf_sector_set_selected()
3204 if (!test_bit(WMI_FW_CAPABILITY_RF_SECTORS, wil->fw_capabilities)) in wil_rf_sector_set_selected()
3210 wil_err(wil, "Invalid rf sector ATTR\n"); in wil_rf_sector_set_selected()
3216 wil_err(wil, "Invalid rf sector spec\n"); in wil_rf_sector_set_selected()
3224 wil_err(wil, "Invalid sector index %d\n", sector_index); in wil_rf_sector_set_selected()
3230 wil_err(wil, "Invalid sector type %d\n", sector_type); in wil_rf_sector_set_selected()
3237 cid = wil_find_cid(wil, vif->mid, mac_addr); in wil_rf_sector_set_selected()
3239 wil_err(wil, "invalid MAC address %pM\n", in wil_rf_sector_set_selected()
3245 wil_err(wil, "broadcast MAC valid only with unlocking\n"); in wil_rf_sector_set_selected()
3252 wil_err(wil, "must specify MAC address when connected\n"); in wil_rf_sector_set_selected()
3259 rc = wil_rf_sector_wmi_set_selected(wil, vif->mid, sector_index, in wil_rf_sector_set_selected()
3264 wil, vif->mid, WMI_INVALID_RF_SECTOR_INDEX, in wil_rf_sector_set_selected()
3267 for (i = 0; i < wil->max_assoc_sta; i++) { in wil_rf_sector_set_selected()
3268 if (wil->sta[i].mid != vif->mid) in wil_rf_sector_set_selected()
3271 wil, vif->mid, in wil_rf_sector_set_selected()
3279 wil_err(wil, "unlock cid %d failed with status %d\n", in wil_rf_sector_set_selected()