Lines Matching refs:drv

39 static u32 get_nl80211_protocol_features(struct wpa_driver_nl80211_data *drv)  in get_nl80211_protocol_features()  argument
48 if (!nl80211_cmd(drv, msg, 0, NL80211_CMD_GET_PROTOCOL_FEATURES)) { in get_nl80211_protocol_features()
53 if (send_and_recv_resp(drv, msg, protocol_feature_handler, &feat) == 0) in get_nl80211_protocol_features()
61 struct wpa_driver_nl80211_data *drv; member
370 info->drv->capa.key_mgmt_iftype[WPA_IF_IBSS] = key_mgmt; in get_iface_akm_suites_info()
373 info->drv->capa.key_mgmt_iftype[WPA_IF_STATION] = in get_iface_akm_suites_info()
377 info->drv->capa.key_mgmt_iftype[WPA_IF_AP_BSS] = in get_iface_akm_suites_info()
381 info->drv->capa.key_mgmt_iftype[WPA_IF_AP_VLAN] = in get_iface_akm_suites_info()
385 info->drv->capa.key_mgmt_iftype[WPA_IF_MESH] = key_mgmt; in get_iface_akm_suites_info()
388 info->drv->capa.key_mgmt_iftype[WPA_IF_P2P_CLIENT] = in get_iface_akm_suites_info()
392 info->drv->capa.key_mgmt_iftype[WPA_IF_P2P_GO] = in get_iface_akm_suites_info()
396 info->drv->capa.key_mgmt_iftype[WPA_IF_P2P_DEVICE] = in get_iface_akm_suites_info()
400 info->drv->capa.key_mgmt_iftype[WPA_IF_NAN] = key_mgmt; in get_iface_akm_suites_info()
660 info->drv->multicast_registrations = 1; in wiphy_info_ext_feature_flags()
664 info->drv->fils_discovery = 1; in wiphy_info_ext_feature_flags()
668 info->drv->unsol_bcast_probe_resp = 1; in wiphy_info_ext_feature_flags()
671 info->drv->puncturing = 1; in wiphy_info_ext_feature_flags()
837 static void wiphy_info_extended_capab(struct wpa_driver_nl80211_data *drv, in wiphy_info_extended_capab() argument
843 if (!tb || drv->num_iface_capa == NL80211_IFTYPE_MAX) in wiphy_info_extended_capab()
858 capa = &drv->iface_capa[drv->num_iface_capa]; in wiphy_info_extended_capab()
896 drv->num_iface_capa++; in wiphy_info_extended_capab()
897 if (drv->num_iface_capa == NL80211_IFTYPE_MAX) in wiphy_info_extended_capab()
906 os_free(drv->iface_capa[i].ext_capa); in wiphy_info_extended_capab()
907 drv->iface_capa[i].ext_capa = NULL; in wiphy_info_extended_capab()
908 os_free(drv->iface_capa[i].ext_capa_mask); in wiphy_info_extended_capab()
909 drv->iface_capa[i].ext_capa_mask = NULL; in wiphy_info_extended_capab()
910 drv->iface_capa[i].ext_capa_len = 0; in wiphy_info_extended_capab()
912 drv->num_iface_capa = 0; in wiphy_info_extended_capab()
946 struct wpa_driver_nl80211_data *drv = info->drv; in wiphy_info_handler() local
952 drv->wiphy_idx = nla_get_u32(tb[NL80211_ATTR_WIPHY]); in wiphy_info_handler()
955 os_strlcpy(drv->phyname, in wiphy_info_handler()
957 sizeof(drv->phyname)); in wiphy_info_handler()
1030 drv->extended_capa == NULL) { in wiphy_info_handler()
1031 drv->extended_capa = in wiphy_info_handler()
1033 if (drv->extended_capa) { in wiphy_info_handler()
1034 os_memcpy(drv->extended_capa, in wiphy_info_handler()
1037 drv->extended_capa_len = in wiphy_info_handler()
1041 drv->extended_capa, drv->extended_capa_len); in wiphy_info_handler()
1043 drv->extended_capa_mask = in wiphy_info_handler()
1045 if (drv->extended_capa_mask) { in wiphy_info_handler()
1046 os_memcpy(drv->extended_capa_mask, in wiphy_info_handler()
1051 drv->extended_capa_mask, in wiphy_info_handler()
1052 drv->extended_capa_len); in wiphy_info_handler()
1054 os_free(drv->extended_capa); in wiphy_info_handler()
1055 drv->extended_capa = NULL; in wiphy_info_handler()
1056 drv->extended_capa_len = 0; in wiphy_info_handler()
1060 wiphy_info_extended_capab(drv, tb[NL80211_ATTR_IFTYPE_EXT_CAPA]); in wiphy_info_handler()
1076 drv->vendor_cmd_test_avail = 1; in wiphy_info_handler()
1080 drv->roaming_vendor_cmd_avail = 1; in wiphy_info_handler()
1083 drv->dfs_vendor_cmd_avail = 1; in wiphy_info_handler()
1086 drv->get_features_vendor_cmd_avail = 1; in wiphy_info_handler()
1089 drv->get_pref_freq_list = 1; in wiphy_info_handler()
1092 drv->set_prob_oper_freq = 1; in wiphy_info_handler()
1095 drv->capa.flags |= in wiphy_info_handler()
1097 drv->qca_do_acs = 1; in wiphy_info_handler()
1100 drv->setband_vendor_cmd_avail = 1; in wiphy_info_handler()
1103 drv->scan_vendor_cmd_avail = 1; in wiphy_info_handler()
1106 drv->set_wifi_conf_vendor_cmd_avail = 1; in wiphy_info_handler()
1109 drv->fetch_bss_trans_status = 1; in wiphy_info_handler()
1112 drv->roam_vendor_cmd_avail = 1; in wiphy_info_handler()
1115 drv->add_sta_node_vendor_cmd_avail = 1; in wiphy_info_handler()
1118 drv->get_sta_info_vendor_cmd_avail = 1; in wiphy_info_handler()
1121 drv->secure_ranging_ctx_vendor_cmd_avail = 1; in wiphy_info_handler()
1129 drv->capa.flags |= in wiphy_info_handler()
1133 drv->brcm_do_acs = 1; in wiphy_info_handler()
1188 static int wpa_driver_nl80211_get_info(struct wpa_driver_nl80211_data *drv, in wpa_driver_nl80211_get_info() argument
1196 info->capa = &drv->capa; in wpa_driver_nl80211_get_info()
1197 info->drv = drv; in wpa_driver_nl80211_get_info()
1199 feat = get_nl80211_protocol_features(drv); in wpa_driver_nl80211_get_info()
1202 msg = nl80211_cmd_msg(drv->first_bss, flags, NL80211_CMD_GET_WIPHY); in wpa_driver_nl80211_get_info()
1208 if (send_and_recv_resp(drv, msg, wiphy_info_handler, info)) in wpa_driver_nl80211_get_info()
1212 drv->capa.flags |= WPA_DRIVER_FLAGS_SME; in wpa_driver_nl80211_get_info()
1220 drv->capa.flags |= WPA_DRIVER_FLAGS_P2P_CAPABLE; in wpa_driver_nl80211_get_info()
1224 drv->capa.flags |= WPA_DRIVER_FLAGS_P2P_CONCURRENT; in wpa_driver_nl80211_get_info()
1225 drv->capa.flags |= WPA_DRIVER_FLAGS_P2P_MGMT_AND_NON_P2P; in wpa_driver_nl80211_get_info()
1230 drv->capa.num_multichan_concurrent = in wpa_driver_nl80211_get_info()
1233 if (drv->capa.flags & WPA_DRIVER_FLAGS_DEDICATED_P2P_DEVICE) in wpa_driver_nl80211_get_info()
1237 if (!drv->capa.max_remain_on_chan) in wpa_driver_nl80211_get_info()
1238 drv->capa.max_remain_on_chan = 5000; in wpa_driver_nl80211_get_info()
1240 drv->capa.wmm_ac_supported = info->wmm_ac_supported; in wpa_driver_nl80211_get_info()
1242 drv->capa.mac_addr_rand_sched_scan_supported = in wpa_driver_nl80211_get_info()
1244 drv->capa.mac_addr_rand_scan_supported = in wpa_driver_nl80211_get_info()
1248 drv->capa.flags |= WPA_DRIVER_FLAGS_AP_CSA; in wpa_driver_nl80211_get_info()
1249 if (!drv->capa.max_csa_counters) in wpa_driver_nl80211_get_info()
1250 drv->capa.max_csa_counters = 1; in wpa_driver_nl80211_get_info()
1253 if (!drv->capa.max_sched_scan_plans) { in wpa_driver_nl80211_get_info()
1254 drv->capa.max_sched_scan_plans = 1; in wpa_driver_nl80211_get_info()
1255 drv->capa.max_sched_scan_plan_interval = UINT32_MAX; in wpa_driver_nl80211_get_info()
1256 drv->capa.max_sched_scan_plan_iterations = 0; in wpa_driver_nl80211_get_info()
1260 drv->capa.flags |= WPA_DRIVER_FLAGS_UPDATE_FT_IES; in wpa_driver_nl80211_get_info()
1262 if (!drv->capa.max_num_akms) in wpa_driver_nl80211_get_info()
1263 drv->capa.max_num_akms = NL80211_MAX_NR_AKM_SUITES; in wpa_driver_nl80211_get_info()
1300 static void qca_nl80211_check_dfs_capa(struct wpa_driver_nl80211_data *drv) in qca_nl80211_check_dfs_capa() argument
1306 if (!drv->dfs_vendor_cmd_avail) in qca_nl80211_check_dfs_capa()
1309 if (!(msg = nl80211_drv_msg(drv, 0, NL80211_CMD_VENDOR)) || in qca_nl80211_check_dfs_capa()
1317 ret = send_and_recv_resp(drv, msg, dfs_info_handler, &dfs_capability); in qca_nl80211_check_dfs_capa()
1319 drv->capa.flags |= WPA_DRIVER_FLAGS_DFS_OFFLOAD; in qca_nl80211_check_dfs_capa()
1385 static void qca_nl80211_get_features(struct wpa_driver_nl80211_data *drv) in qca_nl80211_get_features() argument
1391 if (!drv->get_features_vendor_cmd_avail) in qca_nl80211_get_features()
1394 if (!(msg = nl80211_drv_msg(drv, 0, NL80211_CMD_VENDOR)) || in qca_nl80211_get_features()
1403 info.capa = &drv->capa; in qca_nl80211_get_features()
1404 ret = send_and_recv_resp(drv, msg, features_info_handler, &info); in qca_nl80211_get_features()
1409 drv->capa.flags |= WPA_DRIVER_FLAGS_KEY_MGMT_OFFLOAD; in qca_nl80211_get_features()
1412 drv->capa.flags |= WPA_DRIVER_FLAGS_SUPPORT_HW_MODE_ANY; in qca_nl80211_get_features()
1416 drv->capa.flags |= WPA_DRIVER_FLAGS_OFFCHANNEL_SIMULTANEOUS; in qca_nl80211_get_features()
1418 drv->capa.flags |= WPA_DRIVER_FLAGS_P2P_LISTEN_OFFLOAD; in qca_nl80211_get_features()
1420 drv->capa.flags |= WPA_DRIVER_FLAGS_OCE_STA; in qca_nl80211_get_features()
1422 drv->capa.flags |= WPA_DRIVER_FLAGS_OCE_AP; in qca_nl80211_get_features()
1424 drv->capa.flags |= WPA_DRIVER_FLAGS_OCE_STA_CFON; in qca_nl80211_get_features()
1426 drv->capa.flags2 |= WPA_DRIVER_FLAGS2_SEC_LTF_STA; in qca_nl80211_get_features()
1428 drv->capa.flags2 |= WPA_DRIVER_FLAGS2_SEC_LTF_AP; in qca_nl80211_get_features()
1430 drv->capa.flags2 |= WPA_DRIVER_FLAGS2_SEC_RTT_STA; in qca_nl80211_get_features()
1432 drv->capa.flags2 |= WPA_DRIVER_FLAGS2_SEC_RTT_AP; in qca_nl80211_get_features()
1436 drv->capa.flags2 |= WPA_DRIVER_FLAGS2_PROT_RANGE_NEG_STA; in qca_nl80211_get_features()
1440 drv->capa.flags2 |= WPA_DRIVER_FLAGS2_PROT_RANGE_NEG_AP; in qca_nl80211_get_features()
1443 drv->qca_ap_allowed_freqs = 1; in qca_nl80211_get_features()
1445 drv->capa.flags2 |= WPA_DRIVER_FLAGS2_HT_VHT_TWT_RESPONDER; in qca_nl80211_get_features()
1452 int wpa_driver_nl80211_capa(struct wpa_driver_nl80211_data *drv) in wpa_driver_nl80211_capa() argument
1457 if (wpa_driver_nl80211_get_info(drv, &info)) in wpa_driver_nl80211_capa()
1463 drv->has_capability = 1; in wpa_driver_nl80211_capa()
1464 drv->has_driver_key_mgmt = info.has_key_mgmt | info.has_key_mgmt_iftype; in wpa_driver_nl80211_capa()
1468 if (!drv->has_driver_key_mgmt) { in wpa_driver_nl80211_capa()
1469 drv->capa.key_mgmt = WPA_DRIVER_CAPA_KEY_MGMT_WPA | in wpa_driver_nl80211_capa()
1477 if (drv->capa.enc & (WPA_DRIVER_CAPA_ENC_CCMP_256 | in wpa_driver_nl80211_capa()
1479 drv->capa.key_mgmt |= in wpa_driver_nl80211_capa()
1482 if (drv->capa.flags & WPA_DRIVER_FLAGS_SME) in wpa_driver_nl80211_capa()
1483 drv->capa.key_mgmt |= in wpa_driver_nl80211_capa()
1489 else if (drv->capa.flags & WPA_DRIVER_FLAGS_FILS_SK_OFFLOAD) in wpa_driver_nl80211_capa()
1490 drv->capa.key_mgmt |= in wpa_driver_nl80211_capa()
1500 drv->capa.key_mgmt_iftype[i] = drv->capa.key_mgmt; in wpa_driver_nl80211_capa()
1506 drv->capa.key_mgmt = 0; in wpa_driver_nl80211_capa()
1508 drv->capa.key_mgmt |= drv->capa.key_mgmt_iftype[i]; in wpa_driver_nl80211_capa()
1516 if (!drv->capa.key_mgmt_iftype[i]) in wpa_driver_nl80211_capa()
1517 drv->capa.key_mgmt_iftype[i] = in wpa_driver_nl80211_capa()
1518 drv->capa.key_mgmt; in wpa_driver_nl80211_capa()
1521 drv->capa.auth = WPA_DRIVER_AUTH_OPEN | in wpa_driver_nl80211_capa()
1525 drv->capa.flags |= WPA_DRIVER_FLAGS_VALID_ERROR_CODES; in wpa_driver_nl80211_capa()
1526 drv->capa.flags |= WPA_DRIVER_FLAGS_SET_KEYS_AFTER_ASSOC_DONE; in wpa_driver_nl80211_capa()
1527 drv->capa.flags |= WPA_DRIVER_FLAGS_EAPOL_TX_STATUS; in wpa_driver_nl80211_capa()
1536 drv->capa.flags |= WPA_DRIVER_FLAGS_AP_TEARDOWN_SUPPORT; in wpa_driver_nl80211_capa()
1539 drv->capa.flags |= WPA_DRIVER_FLAGS_DEAUTH_TX_STATUS; in wpa_driver_nl80211_capa()
1540 drv->capa.flags2 |= WPA_DRIVER_FLAGS2_AP_SME; in wpa_driver_nl80211_capa()
1546 drv->capa.flags |= WPA_DRIVER_FLAGS_AP_MLME; in wpa_driver_nl80211_capa()
1549 drv->device_ap_sme = info.device_ap_sme; in wpa_driver_nl80211_capa()
1550 drv->poll_command_supported = info.poll_command_supported; in wpa_driver_nl80211_capa()
1551 drv->data_tx_status = info.data_tx_status; in wpa_driver_nl80211_capa()
1552 drv->p2p_go_ctwindow_supported = info.p2p_go_ctwindow_supported; in wpa_driver_nl80211_capa()
1554 drv->capa.flags |= WPA_DRIVER_FLAGS_QOS_MAPPING; in wpa_driver_nl80211_capa()
1555 drv->have_low_prio_scan = info.have_low_prio_scan; in wpa_driver_nl80211_capa()
1561 drv->use_monitor = !info.device_ap_sme && in wpa_driver_nl80211_capa()
1569 if (!drv->use_monitor && !info.data_tx_status) in wpa_driver_nl80211_capa()
1570 drv->capa.flags &= ~WPA_DRIVER_FLAGS_EAPOL_TX_STATUS; in wpa_driver_nl80211_capa()
1574 qca_nl80211_check_dfs_capa(drv); in wpa_driver_nl80211_capa()
1575 qca_nl80211_get_features(drv); in wpa_driver_nl80211_capa()
1584 if (!(drv->capa.flags & WPA_DRIVER_FLAGS_OFFCHANNEL_TX)) in wpa_driver_nl80211_capa()
1585 drv->capa.flags &= ~WPA_DRIVER_FLAGS_OFFCHANNEL_SIMULTANEOUS; in wpa_driver_nl80211_capa()
1590 drv->capa.key_mgmt, drv->capa.enc, drv->capa.auth, in wpa_driver_nl80211_capa()
1591 (unsigned long long) drv->capa.flags, in wpa_driver_nl80211_capa()
1592 (unsigned long long) drv->capa.flags2, drv->capa.rrm_flags, in wpa_driver_nl80211_capa()
1593 drv->capa.probe_resp_offloads, drv->capa.max_stations, in wpa_driver_nl80211_capa()
1594 drv->capa.max_remain_on_chan, drv->capa.max_scan_ssids); in wpa_driver_nl80211_capa()
2594 static int nl80211_set_regulatory_flags(struct wpa_driver_nl80211_data *drv, in nl80211_set_regulatory_flags() argument
2603 nl80211_cmd(drv, msg, 0, NL80211_CMD_GET_REG); in nl80211_set_regulatory_flags()
2604 if (drv->capa.flags & WPA_DRIVER_FLAGS_SELF_MANAGED_REGULATORY) { in nl80211_set_regulatory_flags()
2605 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, drv->wiphy_idx)) { in nl80211_set_regulatory_flags()
2611 return send_and_recv_resp(drv, msg, nl80211_get_reg, results); in nl80211_set_regulatory_flags()
2632 static void nl80211_dump_chan_list(struct wpa_driver_nl80211_data *drv, in nl80211_dump_chan_list() argument
2652 drv->uses_6ghz = true; in nl80211_dump_chan_list()
2654 drv->uses_s1g = true; in nl80211_dump_chan_list()
2681 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_get_hw_feature_data() local
2696 feat = get_nl80211_protocol_features(drv); in nl80211_get_hw_feature_data()
2705 if (send_and_recv_resp(drv, msg, phy_info_handler, &result) == 0) { in nl80211_get_hw_feature_data()
2708 nl80211_set_regulatory_flags(drv, &result); in nl80211_get_hw_feature_data()
2725 nl80211_dump_chan_list(drv, modes, *num_modes); in nl80211_get_hw_feature_data()