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()
1124 drv->connect_ext_vendor_cmd_avail = 1; in wiphy_info_handler()
1132 drv->capa.flags |= in wiphy_info_handler()
1136 drv->brcm_do_acs = 1; in wiphy_info_handler()
1191 static int wpa_driver_nl80211_get_info(struct wpa_driver_nl80211_data *drv, in wpa_driver_nl80211_get_info() argument
1199 info->capa = &drv->capa; in wpa_driver_nl80211_get_info()
1200 info->drv = drv; in wpa_driver_nl80211_get_info()
1202 feat = get_nl80211_protocol_features(drv); in wpa_driver_nl80211_get_info()
1205 msg = nl80211_cmd_msg(drv->first_bss, flags, NL80211_CMD_GET_WIPHY); in wpa_driver_nl80211_get_info()
1211 if (send_and_recv_resp(drv, msg, wiphy_info_handler, info)) in wpa_driver_nl80211_get_info()
1215 drv->capa.flags |= WPA_DRIVER_FLAGS_SME; in wpa_driver_nl80211_get_info()
1223 drv->capa.flags |= WPA_DRIVER_FLAGS_P2P_CAPABLE; in wpa_driver_nl80211_get_info()
1227 drv->capa.flags |= WPA_DRIVER_FLAGS_P2P_CONCURRENT; in wpa_driver_nl80211_get_info()
1228 drv->capa.flags |= WPA_DRIVER_FLAGS_P2P_MGMT_AND_NON_P2P; in wpa_driver_nl80211_get_info()
1233 drv->capa.num_multichan_concurrent = in wpa_driver_nl80211_get_info()
1236 if (drv->capa.flags & WPA_DRIVER_FLAGS_DEDICATED_P2P_DEVICE) in wpa_driver_nl80211_get_info()
1240 if (!drv->capa.max_remain_on_chan) in wpa_driver_nl80211_get_info()
1241 drv->capa.max_remain_on_chan = 5000; in wpa_driver_nl80211_get_info()
1243 drv->capa.wmm_ac_supported = info->wmm_ac_supported; in wpa_driver_nl80211_get_info()
1245 drv->capa.mac_addr_rand_sched_scan_supported = in wpa_driver_nl80211_get_info()
1247 drv->capa.mac_addr_rand_scan_supported = in wpa_driver_nl80211_get_info()
1251 drv->capa.flags |= WPA_DRIVER_FLAGS_AP_CSA; in wpa_driver_nl80211_get_info()
1252 if (!drv->capa.max_csa_counters) in wpa_driver_nl80211_get_info()
1253 drv->capa.max_csa_counters = 1; in wpa_driver_nl80211_get_info()
1256 if (!drv->capa.max_sched_scan_plans) { in wpa_driver_nl80211_get_info()
1257 drv->capa.max_sched_scan_plans = 1; in wpa_driver_nl80211_get_info()
1258 drv->capa.max_sched_scan_plan_interval = UINT32_MAX; in wpa_driver_nl80211_get_info()
1259 drv->capa.max_sched_scan_plan_iterations = 0; in wpa_driver_nl80211_get_info()
1263 drv->capa.flags |= WPA_DRIVER_FLAGS_UPDATE_FT_IES; in wpa_driver_nl80211_get_info()
1265 if (!drv->capa.max_num_akms) in wpa_driver_nl80211_get_info()
1266 drv->capa.max_num_akms = NL80211_MAX_NR_AKM_SUITES; in wpa_driver_nl80211_get_info()
1303 static void qca_nl80211_check_dfs_capa(struct wpa_driver_nl80211_data *drv) in qca_nl80211_check_dfs_capa() argument
1309 if (!drv->dfs_vendor_cmd_avail) in qca_nl80211_check_dfs_capa()
1312 if (!(msg = nl80211_drv_msg(drv, 0, NL80211_CMD_VENDOR)) || in qca_nl80211_check_dfs_capa()
1320 ret = send_and_recv_resp(drv, msg, dfs_info_handler, &dfs_capability); in qca_nl80211_check_dfs_capa()
1322 drv->capa.flags |= WPA_DRIVER_FLAGS_DFS_OFFLOAD; in qca_nl80211_check_dfs_capa()
1388 static void qca_nl80211_get_features(struct wpa_driver_nl80211_data *drv) in qca_nl80211_get_features() argument
1394 if (!drv->get_features_vendor_cmd_avail) in qca_nl80211_get_features()
1397 if (!(msg = nl80211_drv_msg(drv, 0, NL80211_CMD_VENDOR)) || in qca_nl80211_get_features()
1406 info.capa = &drv->capa; in qca_nl80211_get_features()
1407 ret = send_and_recv_resp(drv, msg, features_info_handler, &info); in qca_nl80211_get_features()
1412 drv->capa.flags |= WPA_DRIVER_FLAGS_KEY_MGMT_OFFLOAD; in qca_nl80211_get_features()
1415 drv->capa.flags |= WPA_DRIVER_FLAGS_SUPPORT_HW_MODE_ANY; in qca_nl80211_get_features()
1419 drv->capa.flags |= WPA_DRIVER_FLAGS_OFFCHANNEL_SIMULTANEOUS; in qca_nl80211_get_features()
1421 drv->capa.flags |= WPA_DRIVER_FLAGS_P2P_LISTEN_OFFLOAD; in qca_nl80211_get_features()
1423 drv->capa.flags |= WPA_DRIVER_FLAGS_OCE_STA; in qca_nl80211_get_features()
1425 drv->capa.flags |= WPA_DRIVER_FLAGS_OCE_AP; in qca_nl80211_get_features()
1427 drv->capa.flags |= WPA_DRIVER_FLAGS_OCE_STA_CFON; in qca_nl80211_get_features()
1429 drv->capa.flags2 |= WPA_DRIVER_FLAGS2_SEC_LTF_STA; in qca_nl80211_get_features()
1431 drv->capa.flags2 |= WPA_DRIVER_FLAGS2_SEC_LTF_AP; in qca_nl80211_get_features()
1433 drv->capa.flags2 |= WPA_DRIVER_FLAGS2_SEC_RTT_STA; in qca_nl80211_get_features()
1435 drv->capa.flags2 |= WPA_DRIVER_FLAGS2_SEC_RTT_AP; in qca_nl80211_get_features()
1439 drv->capa.flags2 |= WPA_DRIVER_FLAGS2_PROT_RANGE_NEG_STA; in qca_nl80211_get_features()
1443 drv->capa.flags2 |= WPA_DRIVER_FLAGS2_PROT_RANGE_NEG_AP; in qca_nl80211_get_features()
1446 drv->qca_ap_allowed_freqs = 1; in qca_nl80211_get_features()
1448 drv->capa.flags2 |= WPA_DRIVER_FLAGS2_HT_VHT_TWT_RESPONDER; in qca_nl80211_get_features()
1452 drv->capa.flags2 |= WPA_DRIVER_FLAGS2_RSN_OVERRIDE_STA; in qca_nl80211_get_features()
1461 int wpa_driver_nl80211_capa(struct wpa_driver_nl80211_data *drv) in wpa_driver_nl80211_capa() argument
1466 if (wpa_driver_nl80211_get_info(drv, &info)) in wpa_driver_nl80211_capa()
1472 drv->has_capability = 1; in wpa_driver_nl80211_capa()
1473 drv->has_driver_key_mgmt = info.has_key_mgmt | info.has_key_mgmt_iftype; in wpa_driver_nl80211_capa()
1477 if (!drv->has_driver_key_mgmt) { in wpa_driver_nl80211_capa()
1478 drv->capa.key_mgmt = WPA_DRIVER_CAPA_KEY_MGMT_WPA | in wpa_driver_nl80211_capa()
1487 if (drv->capa.enc & (WPA_DRIVER_CAPA_ENC_CCMP_256 | in wpa_driver_nl80211_capa()
1489 drv->capa.key_mgmt |= in wpa_driver_nl80211_capa()
1492 if (drv->capa.flags & WPA_DRIVER_FLAGS_SME) in wpa_driver_nl80211_capa()
1493 drv->capa.key_mgmt |= in wpa_driver_nl80211_capa()
1500 else if (drv->capa.flags & WPA_DRIVER_FLAGS_FILS_SK_OFFLOAD) in wpa_driver_nl80211_capa()
1501 drv->capa.key_mgmt |= in wpa_driver_nl80211_capa()
1511 drv->capa.key_mgmt_iftype[i] = drv->capa.key_mgmt; in wpa_driver_nl80211_capa()
1517 drv->capa.key_mgmt = 0; in wpa_driver_nl80211_capa()
1519 drv->capa.key_mgmt |= drv->capa.key_mgmt_iftype[i]; in wpa_driver_nl80211_capa()
1527 if (!drv->capa.key_mgmt_iftype[i]) in wpa_driver_nl80211_capa()
1528 drv->capa.key_mgmt_iftype[i] = in wpa_driver_nl80211_capa()
1529 drv->capa.key_mgmt; in wpa_driver_nl80211_capa()
1532 drv->capa.auth = WPA_DRIVER_AUTH_OPEN | in wpa_driver_nl80211_capa()
1536 drv->capa.flags |= WPA_DRIVER_FLAGS_VALID_ERROR_CODES; in wpa_driver_nl80211_capa()
1537 drv->capa.flags |= WPA_DRIVER_FLAGS_SET_KEYS_AFTER_ASSOC_DONE; in wpa_driver_nl80211_capa()
1538 drv->capa.flags |= WPA_DRIVER_FLAGS_EAPOL_TX_STATUS; in wpa_driver_nl80211_capa()
1547 drv->capa.flags |= WPA_DRIVER_FLAGS_AP_TEARDOWN_SUPPORT; in wpa_driver_nl80211_capa()
1550 drv->capa.flags |= WPA_DRIVER_FLAGS_DEAUTH_TX_STATUS; in wpa_driver_nl80211_capa()
1551 drv->capa.flags2 |= WPA_DRIVER_FLAGS2_AP_SME; in wpa_driver_nl80211_capa()
1557 drv->capa.flags |= WPA_DRIVER_FLAGS_AP_MLME; in wpa_driver_nl80211_capa()
1560 drv->device_ap_sme = info.device_ap_sme; in wpa_driver_nl80211_capa()
1561 drv->poll_command_supported = info.poll_command_supported; in wpa_driver_nl80211_capa()
1562 drv->data_tx_status = info.data_tx_status; in wpa_driver_nl80211_capa()
1563 drv->p2p_go_ctwindow_supported = info.p2p_go_ctwindow_supported; in wpa_driver_nl80211_capa()
1565 drv->capa.flags |= WPA_DRIVER_FLAGS_QOS_MAPPING; in wpa_driver_nl80211_capa()
1566 drv->have_low_prio_scan = info.have_low_prio_scan; in wpa_driver_nl80211_capa()
1572 drv->use_monitor = !info.device_ap_sme && in wpa_driver_nl80211_capa()
1580 if (!drv->use_monitor && !info.data_tx_status) in wpa_driver_nl80211_capa()
1581 drv->capa.flags &= ~WPA_DRIVER_FLAGS_EAPOL_TX_STATUS; in wpa_driver_nl80211_capa()
1585 qca_nl80211_check_dfs_capa(drv); in wpa_driver_nl80211_capa()
1586 qca_nl80211_get_features(drv); in wpa_driver_nl80211_capa()
1595 if (!(drv->capa.flags & WPA_DRIVER_FLAGS_OFFCHANNEL_TX)) in wpa_driver_nl80211_capa()
1596 drv->capa.flags &= ~WPA_DRIVER_FLAGS_OFFCHANNEL_SIMULTANEOUS; in wpa_driver_nl80211_capa()
1601 drv->capa.key_mgmt, drv->capa.enc, drv->capa.auth, in wpa_driver_nl80211_capa()
1602 (unsigned long long) drv->capa.flags, in wpa_driver_nl80211_capa()
1603 (unsigned long long) drv->capa.flags2, drv->capa.rrm_flags, in wpa_driver_nl80211_capa()
1604 drv->capa.probe_resp_offloads, drv->capa.max_stations, in wpa_driver_nl80211_capa()
1605 drv->capa.max_remain_on_chan, drv->capa.max_scan_ssids); in wpa_driver_nl80211_capa()
2605 static int nl80211_set_regulatory_flags(struct wpa_driver_nl80211_data *drv, in nl80211_set_regulatory_flags() argument
2614 nl80211_cmd(drv, msg, 0, NL80211_CMD_GET_REG); in nl80211_set_regulatory_flags()
2615 if (drv->capa.flags & WPA_DRIVER_FLAGS_SELF_MANAGED_REGULATORY) { in nl80211_set_regulatory_flags()
2616 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, drv->wiphy_idx)) { in nl80211_set_regulatory_flags()
2622 return send_and_recv_resp(drv, msg, nl80211_get_reg, results); in nl80211_set_regulatory_flags()
2643 static void nl80211_dump_chan_list(struct wpa_driver_nl80211_data *drv, in nl80211_dump_chan_list() argument
2663 drv->uses_6ghz = true; in nl80211_dump_chan_list()
2665 drv->uses_s1g = true; in nl80211_dump_chan_list()
2692 struct wpa_driver_nl80211_data *drv = bss->drv; in nl80211_get_hw_feature_data() local
2707 feat = get_nl80211_protocol_features(drv); in nl80211_get_hw_feature_data()
2716 if (send_and_recv_resp(drv, msg, phy_info_handler, &result) == 0) { in nl80211_get_hw_feature_data()
2719 nl80211_set_regulatory_flags(drv, &result); in nl80211_get_hw_feature_data()
2736 nl80211_dump_chan_list(drv, modes, *num_modes); in nl80211_get_hw_feature_data()