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