Lines Matching refs:rdev
29 static int nl80211_crypto_settings(struct cfg80211_registered_device *rdev,
76 struct cfg80211_registered_device *rdev; in __cfg80211_wdev_from_attrs() local
96 list_for_each_entry(rdev, &cfg80211_rdev_list, list) { in __cfg80211_wdev_from_attrs()
99 if (wiphy_net(&rdev->wiphy) != netns) in __cfg80211_wdev_from_attrs()
102 if (have_wdev_id && rdev->wiphy_idx != wiphy_idx) in __cfg80211_wdev_from_attrs()
105 list_for_each_entry(wdev, &rdev->wdev_list, list) { in __cfg80211_wdev_from_attrs()
129 struct cfg80211_registered_device *rdev = NULL, *tmp; in __cfg80211_rdev_from_attrs() local
140 rdev = cfg80211_rdev_by_wiphy_idx( in __cfg80211_rdev_from_attrs()
161 if (rdev && tmp != rdev) in __cfg80211_rdev_from_attrs()
163 rdev = tmp; in __cfg80211_rdev_from_attrs()
182 if (rdev && tmp != rdev) in __cfg80211_rdev_from_attrs()
185 rdev = tmp; in __cfg80211_rdev_from_attrs()
189 if (!rdev) in __cfg80211_rdev_from_attrs()
192 if (netns != wiphy_net(&rdev->wiphy)) in __cfg80211_rdev_from_attrs()
195 return rdev; in __cfg80211_rdev_from_attrs()
483 struct cfg80211_registered_device **rdev, in nl80211_prepare_wdev_dump() argument
503 *rdev = wiphy_to_rdev((*wdev)->wiphy); in nl80211_prepare_wdev_dump()
505 cb->args[0] = (*rdev)->wiphy_idx + 1; in nl80211_prepare_wdev_dump()
516 *rdev = wiphy_to_rdev(wiphy); in nl80211_prepare_wdev_dump()
519 list_for_each_entry(tmp, &(*rdev)->wdev_list, list) { in nl80211_prepare_wdev_dump()
538 static void nl80211_finish_wdev_dump(struct cfg80211_registered_device *rdev) in nl80211_finish_wdev_dump() argument
819 nl80211_parse_connkeys(struct cfg80211_registered_device *rdev, in nl80211_parse_connkeys() argument
855 err = cfg80211_validate_key_settings(rdev, &parse.p, in nl80211_parse_connkeys()
1010 static int nl80211_send_wowlan_tcp_caps(struct cfg80211_registered_device *rdev, in nl80211_send_wowlan_tcp_caps() argument
1013 const struct wiphy_wowlan_tcp_support *tcp = rdev->wiphy.wowlan->tcp; in nl80211_send_wowlan_tcp_caps()
1051 struct cfg80211_registered_device *rdev, in nl80211_send_wowlan() argument
1056 if (!rdev->wiphy.wowlan) in nl80211_send_wowlan()
1063 if (((rdev->wiphy.wowlan->flags & WIPHY_WOWLAN_ANY) && in nl80211_send_wowlan()
1065 ((rdev->wiphy.wowlan->flags & WIPHY_WOWLAN_DISCONNECT) && in nl80211_send_wowlan()
1067 ((rdev->wiphy.wowlan->flags & WIPHY_WOWLAN_MAGIC_PKT) && in nl80211_send_wowlan()
1069 ((rdev->wiphy.wowlan->flags & WIPHY_WOWLAN_SUPPORTS_GTK_REKEY) && in nl80211_send_wowlan()
1071 ((rdev->wiphy.wowlan->flags & WIPHY_WOWLAN_GTK_REKEY_FAILURE) && in nl80211_send_wowlan()
1073 ((rdev->wiphy.wowlan->flags & WIPHY_WOWLAN_EAP_IDENTITY_REQ) && in nl80211_send_wowlan()
1075 ((rdev->wiphy.wowlan->flags & WIPHY_WOWLAN_4WAY_HANDSHAKE) && in nl80211_send_wowlan()
1077 ((rdev->wiphy.wowlan->flags & WIPHY_WOWLAN_RFKILL_RELEASE) && in nl80211_send_wowlan()
1081 if (rdev->wiphy.wowlan->n_patterns) { in nl80211_send_wowlan()
1083 .max_patterns = rdev->wiphy.wowlan->n_patterns, in nl80211_send_wowlan()
1084 .min_pattern_len = rdev->wiphy.wowlan->pattern_min_len, in nl80211_send_wowlan()
1085 .max_pattern_len = rdev->wiphy.wowlan->pattern_max_len, in nl80211_send_wowlan()
1086 .max_pkt_offset = rdev->wiphy.wowlan->max_pkt_offset, in nl80211_send_wowlan()
1094 if ((rdev->wiphy.wowlan->flags & WIPHY_WOWLAN_NET_DETECT) && in nl80211_send_wowlan()
1096 rdev->wiphy.wowlan->max_nd_match_sets)) in nl80211_send_wowlan()
1099 if (large && nl80211_send_wowlan_tcp_caps(rdev, msg)) in nl80211_send_wowlan()
1109 struct cfg80211_registered_device *rdev) in nl80211_send_coalesce() argument
1113 if (!rdev->wiphy.coalesce) in nl80211_send_coalesce()
1116 rule.max_rules = rdev->wiphy.coalesce->n_rules; in nl80211_send_coalesce()
1117 rule.max_delay = rdev->wiphy.coalesce->max_delay; in nl80211_send_coalesce()
1118 rule.pat.max_patterns = rdev->wiphy.coalesce->n_patterns; in nl80211_send_coalesce()
1119 rule.pat.min_pattern_len = rdev->wiphy.coalesce->pattern_min_len; in nl80211_send_coalesce()
1120 rule.pat.max_pattern_len = rdev->wiphy.coalesce->pattern_max_len; in nl80211_send_coalesce()
1121 rule.pat.max_pkt_offset = rdev->wiphy.coalesce->max_pkt_offset; in nl80211_send_coalesce()
1252 static int nl80211_send_wiphy(struct cfg80211_registered_device *rdev, in nl80211_send_wiphy() argument
1265 rdev->wiphy.mgmt_stypes; in nl80211_send_wiphy()
1275 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) || in nl80211_send_wiphy()
1277 wiphy_name(&rdev->wiphy)) || in nl80211_send_wiphy()
1288 rdev->wiphy.retry_short) || in nl80211_send_wiphy()
1290 rdev->wiphy.retry_long) || in nl80211_send_wiphy()
1292 rdev->wiphy.frag_threshold) || in nl80211_send_wiphy()
1294 rdev->wiphy.rts_threshold) || in nl80211_send_wiphy()
1296 rdev->wiphy.coverage_class) || in nl80211_send_wiphy()
1298 rdev->wiphy.max_scan_ssids) || in nl80211_send_wiphy()
1300 rdev->wiphy.max_sched_scan_ssids) || in nl80211_send_wiphy()
1302 rdev->wiphy.max_scan_ie_len) || in nl80211_send_wiphy()
1304 rdev->wiphy.max_sched_scan_ie_len) || in nl80211_send_wiphy()
1306 rdev->wiphy.max_match_sets)) in nl80211_send_wiphy()
1309 if ((rdev->wiphy.flags & WIPHY_FLAG_IBSS_RSN) && in nl80211_send_wiphy()
1312 if ((rdev->wiphy.flags & WIPHY_FLAG_MESH_AUTH) && in nl80211_send_wiphy()
1315 if ((rdev->wiphy.flags & WIPHY_FLAG_AP_UAPSD) && in nl80211_send_wiphy()
1318 if ((rdev->wiphy.flags & WIPHY_FLAG_SUPPORTS_FW_ROAM) && in nl80211_send_wiphy()
1321 if ((rdev->wiphy.flags & WIPHY_FLAG_SUPPORTS_TDLS) && in nl80211_send_wiphy()
1324 if ((rdev->wiphy.flags & WIPHY_FLAG_TDLS_EXTERNAL_SETUP) && in nl80211_send_wiphy()
1332 sizeof(u32) * rdev->wiphy.n_cipher_suites, in nl80211_send_wiphy()
1333 rdev->wiphy.cipher_suites)) in nl80211_send_wiphy()
1337 rdev->wiphy.max_num_pmkids)) in nl80211_send_wiphy()
1340 if ((rdev->wiphy.flags & WIPHY_FLAG_CONTROL_PORT_PROTOCOL) && in nl80211_send_wiphy()
1345 rdev->wiphy.available_antennas_tx) || in nl80211_send_wiphy()
1347 rdev->wiphy.available_antennas_rx)) in nl80211_send_wiphy()
1350 if ((rdev->wiphy.flags & WIPHY_FLAG_AP_PROBE_RESP_OFFLOAD) && in nl80211_send_wiphy()
1352 rdev->wiphy.probe_resp_offload)) in nl80211_send_wiphy()
1355 if ((rdev->wiphy.available_antennas_tx || in nl80211_send_wiphy()
1356 rdev->wiphy.available_antennas_rx) && in nl80211_send_wiphy()
1357 rdev->ops->get_antenna) { in nl80211_send_wiphy()
1360 res = rdev_get_antenna(rdev, &tx_ant, &rx_ant); in nl80211_send_wiphy()
1377 rdev->wiphy.interface_modes)) in nl80211_send_wiphy()
1391 sband = rdev->wiphy.bands[band]; in nl80211_send_wiphy()
1468 if (rdev->ops->op) { \ in nl80211_send_wiphy()
1492 if (rdev->wiphy.flags & WIPHY_FLAG_HAS_REMAIN_ON_CHANNEL) in nl80211_send_wiphy()
1497 if (rdev->wiphy.flags & WIPHY_FLAG_NETNS_OK) { in nl80211_send_wiphy()
1502 if (rdev->ops->set_monitor_channel || rdev->ops->start_ap || in nl80211_send_wiphy()
1503 rdev->ops->join_mesh) { in nl80211_send_wiphy()
1509 if (rdev->wiphy.flags & WIPHY_FLAG_SUPPORTS_TDLS) { in nl80211_send_wiphy()
1513 if (rdev->wiphy.flags & WIPHY_FLAG_SUPPORTS_SCHED_SCAN) in nl80211_send_wiphy()
1517 if (rdev->wiphy.flags & WIPHY_FLAG_REPORTS_OBSS) { in nl80211_send_wiphy()
1530 if (rdev->wiphy.flags & WIPHY_FLAG_HAS_CHANNEL_SWITCH) in nl80211_send_wiphy()
1533 if (rdev->wiphy.features & in nl80211_send_wiphy()
1540 if (rdev->ops->connect || rdev->ops->auth) { in nl80211_send_wiphy()
1546 if (rdev->ops->disconnect || rdev->ops->deauth) { in nl80211_send_wiphy()
1557 if (rdev->ops->remain_on_channel && in nl80211_send_wiphy()
1558 (rdev->wiphy.flags & WIPHY_FLAG_HAS_REMAIN_ON_CHANNEL) && in nl80211_send_wiphy()
1561 rdev->wiphy.max_remain_on_channel_duration)) in nl80211_send_wiphy()
1564 if ((rdev->wiphy.flags & WIPHY_FLAG_OFFCHAN_TX) && in nl80211_send_wiphy()
1575 if (nl80211_send_wowlan(msg, rdev, state->split)) in nl80211_send_wiphy()
1585 rdev->wiphy.software_iftypes)) in nl80211_send_wiphy()
1588 if (nl80211_put_iface_combinations(&rdev->wiphy, msg, in nl80211_send_wiphy()
1596 if ((rdev->wiphy.flags & WIPHY_FLAG_HAVE_AP_SME) && in nl80211_send_wiphy()
1598 rdev->wiphy.ap_sme_capa)) in nl80211_send_wiphy()
1601 features = rdev->wiphy.features; in nl80211_send_wiphy()
1612 if (rdev->wiphy.ht_capa_mod_mask && in nl80211_send_wiphy()
1614 sizeof(*rdev->wiphy.ht_capa_mod_mask), in nl80211_send_wiphy()
1615 rdev->wiphy.ht_capa_mod_mask)) in nl80211_send_wiphy()
1618 if (rdev->wiphy.flags & WIPHY_FLAG_HAVE_AP_SME && in nl80211_send_wiphy()
1619 rdev->wiphy.max_acl_mac_addrs && in nl80211_send_wiphy()
1621 rdev->wiphy.max_acl_mac_addrs)) in nl80211_send_wiphy()
1637 if (rdev->wiphy.extended_capabilities && in nl80211_send_wiphy()
1639 rdev->wiphy.extended_capabilities_len, in nl80211_send_wiphy()
1640 rdev->wiphy.extended_capabilities) || in nl80211_send_wiphy()
1642 rdev->wiphy.extended_capabilities_len, in nl80211_send_wiphy()
1643 rdev->wiphy.extended_capabilities_mask))) in nl80211_send_wiphy()
1646 if (rdev->wiphy.vht_capa_mod_mask && in nl80211_send_wiphy()
1648 sizeof(*rdev->wiphy.vht_capa_mod_mask), in nl80211_send_wiphy()
1649 rdev->wiphy.vht_capa_mod_mask)) in nl80211_send_wiphy()
1655 if (nl80211_send_coalesce(msg, rdev)) in nl80211_send_wiphy()
1658 if ((rdev->wiphy.flags & WIPHY_FLAG_SUPPORTS_5_10_MHZ) && in nl80211_send_wiphy()
1663 if (rdev->wiphy.max_ap_assoc_sta && in nl80211_send_wiphy()
1665 rdev->wiphy.max_ap_assoc_sta)) in nl80211_send_wiphy()
1671 if (rdev->wiphy.n_vendor_commands) { in nl80211_send_wiphy()
1679 for (i = 0; i < rdev->wiphy.n_vendor_commands; i++) { in nl80211_send_wiphy()
1680 info = &rdev->wiphy.vendor_commands[i].info; in nl80211_send_wiphy()
1687 if (rdev->wiphy.n_vendor_events) { in nl80211_send_wiphy()
1696 for (i = 0; i < rdev->wiphy.n_vendor_events; i++) { in nl80211_send_wiphy()
1697 info = &rdev->wiphy.vendor_events[i]; in nl80211_send_wiphy()
1706 if (rdev->wiphy.flags & WIPHY_FLAG_HAS_CHANNEL_SWITCH && in nl80211_send_wiphy()
1708 rdev->wiphy.max_num_csa_counters)) in nl80211_send_wiphy()
1711 if (rdev->wiphy.regulatory_flags & REGULATORY_WIPHY_SELF_MANAGED && in nl80211_send_wiphy()
1716 sizeof(rdev->wiphy.ext_features), in nl80211_send_wiphy()
1717 rdev->wiphy.ext_features)) in nl80211_send_wiphy()
1751 struct cfg80211_registered_device *rdev; in nl80211_dump_wiphy_parse() local
1758 rdev = wiphy_to_rdev( in nl80211_dump_wiphy_parse()
1760 state->filter_wiphy = rdev->wiphy_idx; in nl80211_dump_wiphy_parse()
1771 struct cfg80211_registered_device *rdev; in nl80211_dump_wiphy() local
1790 list_for_each_entry(rdev, &cfg80211_rdev_list, list) { in nl80211_dump_wiphy()
1791 if (!net_eq(wiphy_net(&rdev->wiphy), sock_net(skb->sk))) in nl80211_dump_wiphy()
1796 state->filter_wiphy != rdev->wiphy_idx) in nl80211_dump_wiphy()
1800 ret = nl80211_send_wiphy(rdev, NL80211_CMD_NEW_WIPHY, in nl80211_dump_wiphy()
1849 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_get_wiphy() local
1856 if (nl80211_send_wiphy(rdev, NL80211_CMD_NEW_WIPHY, msg, in nl80211_get_wiphy()
1918 static int nl80211_parse_chandef(struct cfg80211_registered_device *rdev, in nl80211_parse_chandef() argument
1929 chandef->chan = ieee80211_get_channel(&rdev->wiphy, control_freq); in nl80211_parse_chandef()
1971 if (!cfg80211_chandef_usable(&rdev->wiphy, chandef, in nl80211_parse_chandef()
1977 !(rdev->wiphy.flags & WIPHY_FLAG_SUPPORTS_5_10_MHZ)) in nl80211_parse_chandef()
1983 static int __nl80211_set_channel(struct cfg80211_registered_device *rdev, in __nl80211_set_channel() argument
1999 result = nl80211_parse_chandef(rdev, info, &chandef); in __nl80211_set_channel()
2006 if (!cfg80211_reg_can_beacon(&rdev->wiphy, &chandef, iftype)) { in __nl80211_set_channel()
2011 if (!dev || !rdev->ops->set_ap_chanwidth || in __nl80211_set_channel()
2012 !(rdev->wiphy.features & in __nl80211_set_channel()
2023 result = rdev_set_ap_chanwidth(rdev, dev, &chandef); in __nl80211_set_channel()
2031 result = cfg80211_set_mesh_channel(rdev, wdev, &chandef); in __nl80211_set_channel()
2034 result = cfg80211_set_monitor_channel(rdev, &chandef); in __nl80211_set_channel()
2045 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_set_channel() local
2048 return __nl80211_set_channel(rdev, netdev, info); in nl80211_set_channel()
2053 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_set_wds_peer() local
2064 if (!rdev->ops->set_wds_peer) in nl80211_set_wds_peer()
2071 return rdev_set_wds_peer(rdev, dev, bssid); in nl80211_set_wds_peer()
2077 struct cfg80211_registered_device *rdev; in nl80211_set_wiphy() local
2104 rdev = wiphy_to_rdev(netdev->ieee80211_ptr->wiphy); in nl80211_set_wiphy()
2110 rdev = __cfg80211_rdev_from_attrs(genl_info_net(info), in nl80211_set_wiphy()
2112 if (IS_ERR(rdev)) in nl80211_set_wiphy()
2113 return PTR_ERR(rdev); in nl80211_set_wiphy()
2127 rdev, nla_data(info->attrs[NL80211_ATTR_WIPHY_NAME])); in nl80211_set_wiphy()
2136 if (!rdev->ops->set_txq_params) in nl80211_set_wiphy()
2162 result = rdev_set_txq_params(rdev, netdev, in nl80211_set_wiphy()
2171 rdev, in nl80211_set_wiphy()
2183 if (!(rdev->wiphy.features & NL80211_FEATURE_VIF_TXPOWER)) in nl80211_set_wiphy()
2186 if (!rdev->ops->set_tx_power) in nl80211_set_wiphy()
2201 result = rdev_set_tx_power(rdev, txp_wdev, type, mbm); in nl80211_set_wiphy()
2209 if ((!rdev->wiphy.available_antennas_tx && in nl80211_set_wiphy()
2210 !rdev->wiphy.available_antennas_rx) || in nl80211_set_wiphy()
2211 !rdev->ops->set_antenna) in nl80211_set_wiphy()
2219 if ((~tx_ant && (tx_ant & ~rdev->wiphy.available_antennas_tx)) || in nl80211_set_wiphy()
2220 (~rx_ant && (rx_ant & ~rdev->wiphy.available_antennas_rx))) in nl80211_set_wiphy()
2223 tx_ant = tx_ant & rdev->wiphy.available_antennas_tx; in nl80211_set_wiphy()
2224 rx_ant = rx_ant & rdev->wiphy.available_antennas_rx; in nl80211_set_wiphy()
2226 result = rdev_set_antenna(rdev, tx_ant, rx_ant); in nl80211_set_wiphy()
2285 if (!(rdev->wiphy.features & NL80211_FEATURE_ACKTO_ESTIMATION)) in nl80211_set_wiphy()
2296 if (!rdev->ops->set_wiphy_params) in nl80211_set_wiphy()
2299 old_retry_short = rdev->wiphy.retry_short; in nl80211_set_wiphy()
2300 old_retry_long = rdev->wiphy.retry_long; in nl80211_set_wiphy()
2301 old_frag_threshold = rdev->wiphy.frag_threshold; in nl80211_set_wiphy()
2302 old_rts_threshold = rdev->wiphy.rts_threshold; in nl80211_set_wiphy()
2303 old_coverage_class = rdev->wiphy.coverage_class; in nl80211_set_wiphy()
2306 rdev->wiphy.retry_short = retry_short; in nl80211_set_wiphy()
2308 rdev->wiphy.retry_long = retry_long; in nl80211_set_wiphy()
2310 rdev->wiphy.frag_threshold = frag_threshold; in nl80211_set_wiphy()
2312 rdev->wiphy.rts_threshold = rts_threshold; in nl80211_set_wiphy()
2314 rdev->wiphy.coverage_class = coverage_class; in nl80211_set_wiphy()
2316 result = rdev_set_wiphy_params(rdev, changed); in nl80211_set_wiphy()
2318 rdev->wiphy.retry_short = old_retry_short; in nl80211_set_wiphy()
2319 rdev->wiphy.retry_long = old_retry_long; in nl80211_set_wiphy()
2320 rdev->wiphy.frag_threshold = old_frag_threshold; in nl80211_set_wiphy()
2321 rdev->wiphy.rts_threshold = old_rts_threshold; in nl80211_set_wiphy()
2322 rdev->wiphy.coverage_class = old_coverage_class; in nl80211_set_wiphy()
2365 struct cfg80211_registered_device *rdev, in nl80211_send_iface() argument
2384 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) || in nl80211_send_iface()
2389 rdev->devlist_generation ^ in nl80211_send_iface()
2393 if (rdev->ops->get_channel) { in nl80211_send_iface()
2397 ret = rdev_get_channel(rdev, wdev, &chandef); in nl80211_send_iface()
2423 struct cfg80211_registered_device *rdev; in nl80211_dump_interface() local
2427 list_for_each_entry(rdev, &cfg80211_rdev_list, list) { in nl80211_dump_interface()
2428 if (!net_eq(wiphy_net(&rdev->wiphy), sock_net(skb->sk))) in nl80211_dump_interface()
2436 list_for_each_entry(wdev, &rdev->wdev_list, list) { in nl80211_dump_interface()
2443 rdev, wdev, false) < 0) { in nl80211_dump_interface()
2463 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_get_interface() local
2471 rdev, wdev, false) < 0) { in nl80211_get_interface()
2509 static int nl80211_valid_4addr(struct cfg80211_registered_device *rdev, in nl80211_valid_4addr() argument
2521 if (rdev->wiphy.flags & WIPHY_FLAG_4ADDR_AP) in nl80211_valid_4addr()
2525 if (rdev->wiphy.flags & WIPHY_FLAG_4ADDR_STATION) in nl80211_valid_4addr()
2537 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_set_interface() local
2578 err = nl80211_valid_4addr(rdev, dev, params.use_4addr, ntype); in nl80211_set_interface()
2598 !(rdev->wiphy.features & NL80211_FEATURE_ACTIVE_MONITOR)) in nl80211_set_interface()
2602 err = cfg80211_change_iface(rdev, dev, ntype, flags, ¶ms); in nl80211_set_interface()
2614 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_new_interface() local
2623 cfg80211_destroy_ifaces(rdev); in nl80211_new_interface()
2636 if (!rdev->ops->add_virtual_intf || in nl80211_new_interface()
2637 !(rdev->wiphy.interface_modes & (1 << type))) in nl80211_new_interface()
2641 rdev->wiphy.features & NL80211_FEATURE_MAC_ON_CREATE) && in nl80211_new_interface()
2651 err = nl80211_valid_4addr(rdev, NULL, params.use_4addr, type); in nl80211_new_interface()
2661 !(rdev->wiphy.features & NL80211_FEATURE_ACTIVE_MONITOR)) in nl80211_new_interface()
2668 wdev = rdev_add_virtual_intf(rdev, in nl80211_new_interface()
2707 wdev->identifier = ++rdev->wdev_id; in nl80211_new_interface()
2708 list_add_rcu(&wdev->list, &rdev->wdev_list); in nl80211_new_interface()
2709 rdev->devlist_generation++; in nl80211_new_interface()
2716 rdev, wdev, false) < 0) { in nl80211_new_interface()
2724 rdev, wdev, false) < 0) { in nl80211_new_interface()
2729 genlmsg_multicast_netns(&nl80211_fam, wiphy_net(&rdev->wiphy), in nl80211_new_interface()
2740 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_del_interface() local
2745 if (!rdev->ops->del_virtual_intf) in nl80211_del_interface()
2749 if (msg && nl80211_send_iface(msg, 0, 0, 0, rdev, wdev, true) < 0) { in nl80211_del_interface()
2764 status = rdev_del_virtual_intf(rdev, wdev); in nl80211_del_interface()
2766 genlmsg_multicast_netns(&nl80211_fam, wiphy_net(&rdev->wiphy), in nl80211_del_interface()
2777 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_set_noack_map() local
2784 if (!rdev->ops->set_noack_map) in nl80211_set_noack_map()
2789 return rdev_set_noack_map(rdev, dev, noack_map); in nl80211_set_noack_map()
2841 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_get_key() local
2873 if (!rdev->ops->get_key) in nl80211_get_key()
2876 if (!pairwise && mac_addr && !(rdev->wiphy.flags & WIPHY_FLAG_IBSS_RSN)) in nl80211_get_key()
2898 err = rdev_get_key(rdev, dev, key_idx, pairwise, mac_addr, &cookie, in nl80211_get_key()
2919 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_set_key() local
2938 if (!rdev->ops->set_default_key) { in nl80211_set_key()
2947 err = rdev_set_default_key(rdev, dev, key.idx, in nl80211_set_key()
2962 if (!rdev->ops->set_default_mgmt_key) { in nl80211_set_key()
2971 err = rdev_set_default_mgmt_key(rdev, dev, key.idx); in nl80211_set_key()
2988 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_new_key() local
3016 if (!rdev->ops->add_key) in nl80211_new_key()
3019 if (cfg80211_validate_key_settings(rdev, &key.p, key.idx, in nl80211_new_key()
3027 err = rdev_add_key(rdev, dev, key.idx, in nl80211_new_key()
3037 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_del_key() local
3062 if (!rdev->ops->del_key) in nl80211_del_key()
3069 !(rdev->wiphy.flags & WIPHY_FLAG_IBSS_RSN)) in nl80211_del_key()
3073 err = rdev_del_key(rdev, dev, key.idx, in nl80211_del_key()
3158 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_set_mac_acl() local
3170 acl = parse_acl_data(&rdev->wiphy, info); in nl80211_set_mac_acl()
3174 err = rdev_set_mac_acl(rdev, dev, acl); in nl80211_set_mac_acl()
3238 static bool nl80211_get_ap_channel(struct cfg80211_registered_device *rdev, in nl80211_get_ap_channel() argument
3244 list_for_each_entry(wdev, &rdev->wdev_list, list) { in nl80211_get_ap_channel()
3260 static bool nl80211_valid_auth_type(struct cfg80211_registered_device *rdev, in nl80211_valid_auth_type() argument
3269 if (!(rdev->wiphy.features & NL80211_FEATURE_SAE) && in nl80211_valid_auth_type()
3286 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_start_ap() local
3296 if (!rdev->ops->start_ap) in nl80211_start_ap()
3319 err = cfg80211_validate_beacon_int(rdev, params.beacon_interval); in nl80211_start_ap()
3353 if (!nl80211_valid_auth_type(rdev, params.auth_type, in nl80211_start_ap()
3359 err = nl80211_crypto_settings(rdev, info, ¶ms.crypto, in nl80211_start_ap()
3365 if (!(rdev->wiphy.features & NL80211_FEATURE_INACTIVITY_TIMER)) in nl80211_start_ap()
3379 !(rdev->wiphy.features & NL80211_FEATURE_P2P_GO_CTWIN)) in nl80211_start_ap()
3393 !(rdev->wiphy.features & NL80211_FEATURE_P2P_GO_OPPPS)) in nl80211_start_ap()
3398 err = nl80211_parse_chandef(rdev, info, ¶ms.chandef); in nl80211_start_ap()
3403 } else if (!nl80211_get_ap_channel(rdev, ¶ms)) in nl80211_start_ap()
3406 if (!cfg80211_reg_can_beacon(&rdev->wiphy, ¶ms.chandef, in nl80211_start_ap()
3417 if (!(rdev->wiphy.features & in nl80211_start_ap()
3422 if (!(rdev->wiphy.features & in nl80211_start_ap()
3434 params.acl = parse_acl_data(&rdev->wiphy, info); in nl80211_start_ap()
3440 err = rdev_start_ap(rdev, dev, ¶ms); in nl80211_start_ap()
3457 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_set_beacon() local
3467 if (!rdev->ops->change_beacon) in nl80211_set_beacon()
3478 err = rdev_change_beacon(rdev, dev, ¶ms); in nl80211_set_beacon()
3486 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_stop_ap() local
3489 return cfg80211_stop_ap(rdev, dev, false); in nl80211_stop_ap()
3676 struct cfg80211_registered_device *rdev, in nl80211_send_station() argument
3724 switch (rdev->wiphy.signal_type) { in nl80211_send_station()
3856 struct cfg80211_registered_device *rdev; in nl80211_dump_station() local
3862 err = nl80211_prepare_wdev_dump(skb, cb, &rdev, &wdev); in nl80211_dump_station()
3871 if (!rdev->ops->dump_station) { in nl80211_dump_station()
3878 err = rdev_dump_station(rdev, wdev->netdev, sta_idx, in nl80211_dump_station()
3888 rdev, wdev->netdev, mac_addr, in nl80211_dump_station()
3900 nl80211_finish_wdev_dump(rdev); in nl80211_dump_station()
3907 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_get_station() local
3921 if (!rdev->ops->get_station) in nl80211_get_station()
3924 err = rdev_get_station(rdev, dev, mac_addr, &sinfo); in nl80211_get_station()
3934 rdev, dev, mac_addr, &sinfo) < 0) { in nl80211_get_station()
4077 struct cfg80211_registered_device *rdev) in get_vlan() argument
4090 if (!v->ieee80211_ptr || v->ieee80211_ptr->wiphy != &rdev->wiphy) { in get_vlan()
4211 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_set_station() local
4221 if (!rdev->ops->change_station) in nl80211_set_station()
4289 params.vlan = get_vlan(info, rdev); in nl80211_set_station()
4308 err = rdev_change_station(rdev, dev, mac_addr, ¶ms); in nl80211_set_station()
4319 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_new_station() local
4327 if (!rdev->ops->add_station) in nl80211_new_station()
4421 if (!(rdev->wiphy.flags & WIPHY_FLAG_AP_UAPSD) || in nl80211_new_station()
4433 if (!(rdev->wiphy.features & in nl80211_new_station()
4441 params.vlan = get_vlan(info, rdev); in nl80211_new_station()
4471 if (!(rdev->wiphy.flags & WIPHY_FLAG_SUPPORTS_TDLS)) in nl80211_new_station()
4474 if (!(rdev->wiphy.flags & WIPHY_FLAG_TDLS_EXTERNAL_SETUP)) in nl80211_new_station()
4488 err = rdev_add_station(rdev, dev, mac_addr, ¶ms); in nl80211_new_station()
4497 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_del_station() local
4512 if (!rdev->ops->del_station) in nl80211_del_station()
4536 return rdev_del_station(rdev, dev, ¶ms); in nl80211_del_station()
4597 struct cfg80211_registered_device *rdev; in nl80211_dump_mpath() local
4604 err = nl80211_prepare_wdev_dump(skb, cb, &rdev, &wdev); in nl80211_dump_mpath()
4608 if (!rdev->ops->dump_mpath) { in nl80211_dump_mpath()
4619 err = rdev_dump_mpath(rdev, wdev->netdev, path_idx, dst, in nl80211_dump_mpath()
4640 nl80211_finish_wdev_dump(rdev); in nl80211_dump_mpath()
4646 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_get_mpath() local
4661 if (!rdev->ops->get_mpath) in nl80211_get_mpath()
4667 err = rdev_get_mpath(rdev, dev, dst, next_hop, &pinfo); in nl80211_get_mpath()
4686 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_set_mpath() local
4700 if (!rdev->ops->change_mpath) in nl80211_set_mpath()
4706 return rdev_change_mpath(rdev, dev, dst, next_hop); in nl80211_set_mpath()
4711 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_new_mpath() local
4725 if (!rdev->ops->add_mpath) in nl80211_new_mpath()
4731 return rdev_add_mpath(rdev, dev, dst, next_hop); in nl80211_new_mpath()
4736 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_del_mpath() local
4743 if (!rdev->ops->del_mpath) in nl80211_del_mpath()
4746 return rdev_del_mpath(rdev, dev, dst); in nl80211_del_mpath()
4751 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_get_mpp() local
4766 if (!rdev->ops->get_mpp) in nl80211_get_mpp()
4772 err = rdev_get_mpp(rdev, dev, dst, mpp, &pinfo); in nl80211_get_mpp()
4793 struct cfg80211_registered_device *rdev; in nl80211_dump_mpp() local
4800 err = nl80211_prepare_wdev_dump(skb, cb, &rdev, &wdev); in nl80211_dump_mpp()
4804 if (!rdev->ops->dump_mpp) { in nl80211_dump_mpp()
4815 err = rdev_dump_mpp(rdev, wdev->netdev, path_idx, dst, in nl80211_dump_mpp()
4835 nl80211_finish_wdev_dump(rdev); in nl80211_dump_mpp()
4841 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_set_bss() local
4886 !(rdev->wiphy.features & NL80211_FEATURE_P2P_GO_CTWIN)) in nl80211_set_bss()
4900 !(rdev->wiphy.features & NL80211_FEATURE_P2P_GO_OPPPS)) in nl80211_set_bss()
4904 if (!rdev->ops->change_bss) in nl80211_set_bss()
4912 err = rdev_change_bss(rdev, dev, ¶ms); in nl80211_set_bss()
5017 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_get_mesh_config() local
5029 if (!rdev->ops->get_mesh_config) in nl80211_get_mesh_config()
5037 err = rdev_get_mesh_config(rdev, dev, &cur_params); in nl80211_get_mesh_config()
5303 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_parse_mesh_setup() local
5341 !(rdev->wiphy.features & NL80211_FEATURE_USERSPACE_MPM)) in nl80211_parse_mesh_setup()
5362 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_update_mesh_config() local
5372 if (!rdev->ops->update_mesh_config) in nl80211_update_mesh_config()
5384 err = rdev_update_mesh_config(rdev, dev, mask, &cfg); in nl80211_update_mesh_config()
5455 struct cfg80211_registered_device *rdev; in nl80211_get_reg_do() local
5472 rdev = cfg80211_get_dev_from_info(genl_info_net(info), info); in nl80211_get_reg_do()
5473 if (IS_ERR(rdev)) { in nl80211_get_reg_do()
5475 return PTR_ERR(rdev); in nl80211_get_reg_do()
5478 wiphy = &rdev->wiphy; in nl80211_get_reg_do()
5561 struct cfg80211_registered_device *rdev; in nl80211_get_reg_dump() local
5576 list_for_each_entry(rdev, &cfg80211_rdev_list, list) { in nl80211_get_reg_dump()
5577 regdom = get_wiphy_regdom(&rdev->wiphy); in nl80211_get_reg_dump()
5585 NLM_F_MULTI, &rdev->wiphy, regdom); in nl80211_get_reg_dump()
5740 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_trigger_scan() local
5751 wiphy = &rdev->wiphy; in nl80211_trigger_scan()
5753 if (!rdev->ops->scan) in nl80211_trigger_scan()
5756 if (rdev->scan_req || rdev->scan_msg) { in nl80211_trigger_scan()
5940 request->wiphy = &rdev->wiphy; in nl80211_trigger_scan()
5943 rdev->scan_req = request; in nl80211_trigger_scan()
5944 err = rdev_scan(rdev, request); in nl80211_trigger_scan()
5947 nl80211_send_scan_start(rdev, wdev); in nl80211_trigger_scan()
5952 rdev->scan_req = NULL; in nl80211_trigger_scan()
6251 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_start_sched_scan() local
6257 if (!(rdev->wiphy.flags & WIPHY_FLAG_SUPPORTS_SCHED_SCAN) || in nl80211_start_sched_scan()
6258 !rdev->ops->sched_scan_start) in nl80211_start_sched_scan()
6261 if (rdev->sched_scan_req) in nl80211_start_sched_scan()
6264 sched_scan_req = nl80211_parse_sched_scan(&rdev->wiphy, wdev, in nl80211_start_sched_scan()
6271 err = rdev_sched_scan_start(rdev, dev, sched_scan_req); in nl80211_start_sched_scan()
6276 sched_scan_req->wiphy = &rdev->wiphy; in nl80211_start_sched_scan()
6281 rcu_assign_pointer(rdev->sched_scan_req, sched_scan_req); in nl80211_start_sched_scan()
6283 nl80211_send_sched_scan(rdev, dev, in nl80211_start_sched_scan()
6296 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_stop_sched_scan() local
6298 if (!(rdev->wiphy.flags & WIPHY_FLAG_SUPPORTS_SCHED_SCAN) || in nl80211_stop_sched_scan()
6299 !rdev->ops->sched_scan_stop) in nl80211_stop_sched_scan()
6302 return __cfg80211_stop_sched_scan(rdev, false); in nl80211_stop_sched_scan()
6308 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_start_radar_detection() local
6320 err = nl80211_parse_chandef(rdev, info, &chandef); in nl80211_start_radar_detection()
6341 if (!rdev->ops->start_radar_detection) in nl80211_start_radar_detection()
6344 cac_time_ms = cfg80211_chandef_dfs_cac_time(&rdev->wiphy, &chandef); in nl80211_start_radar_detection()
6348 err = rdev->ops->start_radar_detection(&rdev->wiphy, dev, &chandef, in nl80211_start_radar_detection()
6361 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_channel_switch() local
6374 if (!rdev->ops->channel_switch || in nl80211_channel_switch()
6375 !(rdev->wiphy.flags & WIPHY_FLAG_HAS_CHANNEL_SWITCH)) in nl80211_channel_switch()
6443 if (rdev->wiphy.max_num_csa_counters && in nl80211_channel_switch()
6445 rdev->wiphy.max_num_csa_counters)) in nl80211_channel_switch()
6468 if (rdev->wiphy.max_num_csa_counters && in nl80211_channel_switch()
6470 rdev->wiphy.max_num_csa_counters)) in nl80211_channel_switch()
6490 err = nl80211_parse_chandef(rdev, info, ¶ms.chandef); in nl80211_channel_switch()
6494 if (!cfg80211_reg_can_beacon(&rdev->wiphy, ¶ms.chandef, in nl80211_channel_switch()
6511 err = rdev_channel_switch(rdev, dev, ¶ms); in nl80211_channel_switch()
6519 struct cfg80211_registered_device *rdev, in nl80211_send_bss() argument
6537 if (nla_put_u32(msg, NL80211_ATTR_GENERATION, rdev->bss_generation)) in nl80211_send_bss()
6591 switch (rdev->wiphy.signal_type) { in nl80211_send_bss()
6636 struct cfg80211_registered_device *rdev; in nl80211_dump_scan() local
6642 err = nl80211_prepare_wdev_dump(skb, cb, &rdev, &wdev); in nl80211_dump_scan()
6647 spin_lock_bh(&rdev->bss_lock); in nl80211_dump_scan()
6648 cfg80211_bss_expire(rdev); in nl80211_dump_scan()
6650 cb->seq = rdev->bss_generation; in nl80211_dump_scan()
6652 list_for_each_entry(scan, &rdev->bss_list, list) { in nl80211_dump_scan()
6657 rdev, wdev, scan) < 0) { in nl80211_dump_scan()
6663 spin_unlock_bh(&rdev->bss_lock); in nl80211_dump_scan()
6667 nl80211_finish_wdev_dump(rdev); in nl80211_dump_scan()
6745 struct cfg80211_registered_device *rdev; in nl80211_dump_survey() local
6751 res = nl80211_prepare_wdev_dump(skb, cb, &rdev, &wdev); in nl80211_dump_survey()
6763 if (!rdev->ops->dump_survey) { in nl80211_dump_survey()
6769 res = rdev_dump_survey(rdev, wdev->netdev, survey_idx, &survey); in nl80211_dump_survey()
6794 nl80211_finish_wdev_dump(rdev); in nl80211_dump_survey()
6806 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_authenticate() local
6854 for (i = 0; i < rdev->wiphy.n_cipher_suites; i++) { in nl80211_authenticate()
6855 if (key.p.cipher == rdev->wiphy.cipher_suites[i]) { in nl80211_authenticate()
6864 if (!rdev->ops->auth) in nl80211_authenticate()
6872 chan = nl80211_get_valid_chan(&rdev->wiphy, in nl80211_authenticate()
6886 if (!nl80211_valid_auth_type(rdev, auth_type, NL80211_CMD_AUTHENTICATE)) in nl80211_authenticate()
6913 err = cfg80211_mlme_auth(rdev, dev, chan, auth_type, bssid, in nl80211_authenticate()
6921 static int nl80211_crypto_settings(struct cfg80211_registered_device *rdev, in nl80211_crypto_settings() argument
6935 if (!(rdev->wiphy.flags & WIPHY_FLAG_CONTROL_PORT_PROTOCOL) && in nl80211_crypto_settings()
6961 &rdev->wiphy, in nl80211_crypto_settings()
6969 if (!cfg80211_supported_cipher_suite(&rdev->wiphy, in nl80211_crypto_settings()
7003 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_associate() local
7018 if (!rdev->ops->assoc) in nl80211_associate()
7027 chan = nl80211_get_valid_chan(&rdev->wiphy, in nl80211_associate()
7085 if (!(rdev->wiphy.features & in nl80211_associate()
7087 !(rdev->wiphy.features & NL80211_FEATURE_QUIET)) in nl80211_associate()
7092 err = nl80211_crypto_settings(rdev, info, &req.crypto, 1); in nl80211_associate()
7095 err = cfg80211_mlme_assoc(rdev, dev, chan, bssid, in nl80211_associate()
7105 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_deauthenticate() local
7121 if (!rdev->ops->deauth) in nl80211_deauthenticate()
7144 err = cfg80211_mlme_deauth(rdev, dev, bssid, ie, ie_len, reason_code, in nl80211_deauthenticate()
7152 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_disassociate() local
7168 if (!rdev->ops->disassoc) in nl80211_disassociate()
7191 err = cfg80211_mlme_disassoc(rdev, dev, bssid, ie, ie_len, reason_code, in nl80211_disassociate()
7198 nl80211_parse_mcast_rate(struct cfg80211_registered_device *rdev, in nl80211_parse_mcast_rate() argument
7202 struct wiphy *wiphy = &rdev->wiphy; in nl80211_parse_mcast_rate()
7227 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_join_ibss() local
7252 if (!rdev->ops->join_ibss) in nl80211_join_ibss()
7258 wiphy = &rdev->wiphy; in nl80211_join_ibss()
7274 err = nl80211_parse_chandef(rdev, info, &ibss.chandef); in nl80211_join_ibss()
7278 if (!cfg80211_reg_can_beacon(&rdev->wiphy, &ibss.chandef, in nl80211_join_ibss()
7289 if (!(rdev->wiphy.features & NL80211_FEATURE_HT_IBSS)) in nl80211_join_ibss()
7295 if (!(rdev->wiphy.features & NL80211_FEATURE_HT_IBSS)) in nl80211_join_ibss()
7297 if (!wiphy_ext_feature_isset(&rdev->wiphy, in nl80211_join_ibss()
7336 !nl80211_parse_mcast_rate(rdev, ibss.mcast_rate, in nl80211_join_ibss()
7343 connkeys = nl80211_parse_connkeys(rdev, in nl80211_join_ibss()
7362 err = cfg80211_join_ibss(rdev, dev, &ibss, connkeys); in nl80211_join_ibss()
7370 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_leave_ibss() local
7373 if (!rdev->ops->leave_ibss) in nl80211_leave_ibss()
7379 return cfg80211_leave_ibss(rdev, dev, false); in nl80211_leave_ibss()
7384 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_set_mcast_rate() local
7394 if (!rdev->ops->set_mcast_rate) in nl80211_set_mcast_rate()
7403 if (!nl80211_parse_mcast_rate(rdev, mcast_rate, nla_rate)) in nl80211_set_mcast_rate()
7406 err = rdev->ops->set_mcast_rate(&rdev->wiphy, dev, mcast_rate); in nl80211_set_mcast_rate()
7412 __cfg80211_alloc_vendor_skb(struct cfg80211_registered_device *rdev, in __cfg80211_alloc_vendor_skb() argument
7433 if (nla_put_u32(skb, NL80211_ATTR_WIPHY, rdev->wiphy_idx)) in __cfg80211_alloc_vendor_skb()
7457 ((void **)skb->cb)[0] = rdev; in __cfg80211_alloc_vendor_skb()
7475 struct cfg80211_registered_device *rdev = wiphy_to_rdev(wiphy); in __cfg80211_alloc_event_skb() local
7495 return __cfg80211_alloc_vendor_skb(rdev, wdev, approxlen, 0, 0, in __cfg80211_alloc_event_skb()
7502 struct cfg80211_registered_device *rdev = ((void **)skb->cb)[0]; in __cfg80211_send_event_skb() local
7516 genlmsg_multicast_netns(&nl80211_fam, wiphy_net(&rdev->wiphy), skb, 0, in __cfg80211_send_event_skb()
7524 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_testmode_do() local
7529 if (!rdev->ops->testmode_cmd) in nl80211_testmode_do()
7537 } else if (wdev->wiphy != &rdev->wiphy) { in nl80211_testmode_do()
7544 rdev->cur_cmd_info = info; in nl80211_testmode_do()
7545 err = rdev_testmode_cmd(rdev, wdev, in nl80211_testmode_do()
7548 rdev->cur_cmd_info = NULL; in nl80211_testmode_do()
7556 struct cfg80211_registered_device *rdev; in nl80211_testmode_dump() local
7577 rdev = __cfg80211_rdev_from_attrs(sock_net(skb->sk), in nl80211_testmode_dump()
7579 if (IS_ERR(rdev)) { in nl80211_testmode_dump()
7580 err = PTR_ERR(rdev); in nl80211_testmode_dump()
7583 phy_idx = rdev->wiphy_idx; in nl80211_testmode_dump()
7584 rdev = NULL; in nl80211_testmode_dump()
7596 rdev = cfg80211_rdev_by_wiphy_idx(phy_idx); in nl80211_testmode_dump()
7597 if (!rdev) { in nl80211_testmode_dump()
7602 if (!rdev->ops->testmode_dump) { in nl80211_testmode_dump()
7626 err = rdev_testmode_dump(rdev, skb, cb, data, data_len); in nl80211_testmode_dump()
7651 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_connect() local
7670 if (!nl80211_valid_auth_type(rdev, connect.auth_type, in nl80211_connect()
7678 err = nl80211_crypto_settings(rdev, info, &connect.crypto, in nl80211_connect()
7687 wiphy = &rdev->wiphy; in nl80211_connect()
7731 connkeys = nl80211_parse_connkeys(rdev, in nl80211_connect()
7774 if (!(rdev->wiphy.features & in nl80211_connect()
7776 !(rdev->wiphy.features & NL80211_FEATURE_QUIET)) in nl80211_connect()
7782 err = cfg80211_connect(rdev, dev, &connect, connkeys, NULL); in nl80211_connect()
7791 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_disconnect() local
7809 ret = cfg80211_disconnect(rdev, dev, reason, true); in nl80211_disconnect()
7816 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_wiphy_netns() local
7838 if (!net_eq(wiphy_net(&rdev->wiphy), net)) in nl80211_wiphy_netns()
7839 err = cfg80211_switch_netns(rdev, net); in nl80211_wiphy_netns()
7847 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_setdel_pmksa() local
7870 rdev_ops = rdev->ops->set_pmksa; in nl80211_setdel_pmksa()
7873 rdev_ops = rdev->ops->del_pmksa; in nl80211_setdel_pmksa()
7883 return rdev_ops(&rdev->wiphy, dev, &pmksa); in nl80211_setdel_pmksa()
7888 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_flush_pmksa() local
7895 if (!rdev->ops->flush_pmksa) in nl80211_flush_pmksa()
7898 return rdev_flush_pmksa(rdev, dev); in nl80211_flush_pmksa()
7903 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_tdls_mgmt() local
7911 if (!(rdev->wiphy.flags & WIPHY_FLAG_SUPPORTS_TDLS) || in nl80211_tdls_mgmt()
7912 !rdev->ops->tdls_mgmt) in nl80211_tdls_mgmt()
7931 return rdev_tdls_mgmt(rdev, dev, peer, action_code, in nl80211_tdls_mgmt()
7940 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_tdls_oper() local
7945 if (!(rdev->wiphy.flags & WIPHY_FLAG_SUPPORTS_TDLS) || in nl80211_tdls_oper()
7946 !rdev->ops->tdls_oper) in nl80211_tdls_oper()
7956 return rdev_tdls_oper(rdev, dev, peer, operation); in nl80211_tdls_oper()
7962 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_remain_on_channel() local
7977 if (!rdev->ops->remain_on_channel || in nl80211_remain_on_channel()
7978 !(rdev->wiphy.flags & WIPHY_FLAG_HAS_REMAIN_ON_CHANNEL)) in nl80211_remain_on_channel()
7986 duration > rdev->wiphy.max_remain_on_channel_duration) in nl80211_remain_on_channel()
7989 err = nl80211_parse_chandef(rdev, info, &chandef); in nl80211_remain_on_channel()
8004 err = rdev_remain_on_channel(rdev, wdev, chandef.chan, in nl80211_remain_on_channel()
8027 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_cancel_remain_on_channel() local
8034 if (!rdev->ops->cancel_remain_on_channel) in nl80211_cancel_remain_on_channel()
8039 return rdev_cancel_remain_on_channel(rdev, wdev, cookie); in nl80211_cancel_remain_on_channel()
8167 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_set_tx_bitrate_mask() local
8175 if (!rdev->ops->set_bitrate_mask) in nl80211_set_tx_bitrate_mask()
8181 sband = rdev->wiphy.bands[i]; in nl80211_set_tx_bitrate_mask()
8213 sband = rdev->wiphy.bands[band]; in nl80211_set_tx_bitrate_mask()
8255 if (!(rdev->wiphy.bands[band]->ht_cap.ht_supported || in nl80211_set_tx_bitrate_mask()
8256 rdev->wiphy.bands[band]->vht_cap.vht_supported)) in nl80211_set_tx_bitrate_mask()
8273 return rdev_set_bitrate_mask(rdev, dev, NULL, &mask); in nl80211_set_tx_bitrate_mask()
8278 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_register_mgmt() local
8303 if (!rdev->ops->mgmt_tx) in nl80211_register_mgmt()
8313 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_tx_mgmt() local
8328 if (!rdev->ops->mgmt_tx) in nl80211_tx_mgmt()
8348 if (!(rdev->wiphy.flags & WIPHY_FLAG_OFFCHAN_TX)) in nl80211_tx_mgmt()
8357 params.wait > rdev->wiphy.max_remain_on_channel_duration) in nl80211_tx_mgmt()
8364 if (params.offchan && !(rdev->wiphy.flags & WIPHY_FLAG_OFFCHAN_TX)) in nl80211_tx_mgmt()
8374 err = nl80211_parse_chandef(rdev, info, &chandef); in nl80211_tx_mgmt()
8417 err = cfg80211_mlme_mgmt_tx(rdev, wdev, ¶ms, &cookie); in nl80211_tx_mgmt()
8440 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_tx_mgmt_cancel_wait() local
8447 if (!rdev->ops->mgmt_tx_cancel_wait) in nl80211_tx_mgmt_cancel_wait()
8465 return rdev_mgmt_tx_cancel_wait(rdev, wdev, cookie); in nl80211_tx_mgmt_cancel_wait()
8470 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_set_power_save() local
8487 if (!rdev->ops->set_power_mgmt) in nl80211_set_power_save()
8495 err = rdev_set_power_mgmt(rdev, dev, state, wdev->ps_timeout); in nl80211_set_power_save()
8503 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_get_power_save() local
8513 if (!rdev->ops->set_power_mgmt) in nl80211_get_power_save()
8558 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_set_cqm_txe() local
8565 if (!rdev->ops->set_cqm_txe_config) in nl80211_set_cqm_txe()
8572 return rdev_set_cqm_txe_config(rdev, dev, rate, pkts, intvl); in nl80211_set_cqm_txe()
8578 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_set_cqm_rssi() local
8589 if (!rdev->ops->set_cqm_rssi_config) in nl80211_set_cqm_rssi()
8596 return rdev_set_cqm_rssi_config(rdev, dev, threshold, hysteresis); in nl80211_set_cqm_rssi()
8637 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_join_ocb() local
8642 err = nl80211_parse_chandef(rdev, info, &setup.chandef); in nl80211_join_ocb()
8646 return cfg80211_join_ocb(rdev, dev, &setup); in nl80211_join_ocb()
8651 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_leave_ocb() local
8654 return cfg80211_leave_ocb(rdev, dev); in nl80211_leave_ocb()
8659 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_join_mesh() local
8684 !nl80211_parse_mcast_rate(rdev, setup.mcast_rate, in nl80211_join_mesh()
8714 err = nl80211_parse_chandef(rdev, info, &setup.chandef); in nl80211_join_mesh()
8731 sband = rdev->wiphy.bands[setup.chandef.chan->band]; in nl80211_join_mesh()
8739 return cfg80211_join_mesh(rdev, dev, &setup, &cfg); in nl80211_join_mesh()
8744 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_leave_mesh() local
8747 return cfg80211_leave_mesh(rdev, dev); in nl80211_leave_mesh()
8752 struct cfg80211_registered_device *rdev) in nl80211_send_wowlan_patterns() argument
8754 struct cfg80211_wowlan *wowlan = rdev->wiphy.wowlan_config; in nl80211_send_wowlan_patterns()
8874 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_get_wowlan() local
8879 if (!rdev->wiphy.wowlan) in nl80211_get_wowlan()
8882 if (rdev->wiphy.wowlan_config && rdev->wiphy.wowlan_config->tcp) { in nl80211_get_wowlan()
8884 size += rdev->wiphy.wowlan_config->tcp->tokens_size + in nl80211_get_wowlan()
8885 rdev->wiphy.wowlan_config->tcp->payload_len + in nl80211_get_wowlan()
8886 rdev->wiphy.wowlan_config->tcp->wake_len + in nl80211_get_wowlan()
8887 rdev->wiphy.wowlan_config->tcp->wake_len / 8; in nl80211_get_wowlan()
8899 if (rdev->wiphy.wowlan_config) { in nl80211_get_wowlan()
8906 if ((rdev->wiphy.wowlan_config->any && in nl80211_get_wowlan()
8908 (rdev->wiphy.wowlan_config->disconnect && in nl80211_get_wowlan()
8910 (rdev->wiphy.wowlan_config->magic_pkt && in nl80211_get_wowlan()
8912 (rdev->wiphy.wowlan_config->gtk_rekey_failure && in nl80211_get_wowlan()
8914 (rdev->wiphy.wowlan_config->eap_identity_req && in nl80211_get_wowlan()
8916 (rdev->wiphy.wowlan_config->four_way_handshake && in nl80211_get_wowlan()
8918 (rdev->wiphy.wowlan_config->rfkill_release && in nl80211_get_wowlan()
8922 if (nl80211_send_wowlan_patterns(msg, rdev)) in nl80211_get_wowlan()
8926 rdev->wiphy.wowlan_config->tcp)) in nl80211_get_wowlan()
8931 rdev->wiphy.wowlan_config->nd_config)) in nl80211_get_wowlan()
8945 static int nl80211_parse_wowlan_tcp(struct cfg80211_registered_device *rdev, in nl80211_parse_wowlan_tcp() argument
8957 if (!rdev->wiphy.wowlan->tcp) in nl80211_parse_wowlan_tcp()
8977 if (data_size > rdev->wiphy.wowlan->tcp->data_payload_max) in nl80211_parse_wowlan_tcp()
8981 rdev->wiphy.wowlan->tcp->data_interval_max || in nl80211_parse_wowlan_tcp()
8986 if (wake_size > rdev->wiphy.wowlan->tcp->wake_payload_max) in nl80211_parse_wowlan_tcp()
9001 if (!rdev->wiphy.wowlan->tcp->tok) in nl80211_parse_wowlan_tcp()
9003 if (tok->len > rdev->wiphy.wowlan->tcp->tok->max_len) in nl80211_parse_wowlan_tcp()
9005 if (tok->len < rdev->wiphy.wowlan->tcp->tok->min_len) in nl80211_parse_wowlan_tcp()
9007 if (tokens_size > rdev->wiphy.wowlan->tcp->tok->bufsize) in nl80211_parse_wowlan_tcp()
9015 if (!rdev->wiphy.wowlan->tcp->seq) in nl80211_parse_wowlan_tcp()
9041 err = __sock_create(wiphy_net(&rdev->wiphy), PF_INET, SOCK_STREAM, in nl80211_parse_wowlan_tcp()
9090 static int nl80211_parse_wowlan_nd(struct cfg80211_registered_device *rdev, in nl80211_parse_wowlan_nd() argument
9113 trig->nd_config = nl80211_parse_sched_scan(&rdev->wiphy, NULL, tb); in nl80211_parse_wowlan_nd()
9125 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_set_wowlan() local
9129 const struct wiphy_wowlan_support *wowlan = rdev->wiphy.wowlan; in nl80211_set_wowlan()
9131 bool prev_enabled = rdev->wiphy.wowlan_config; in nl80211_set_wowlan()
9138 cfg80211_rdev_free_wowlan(rdev); in nl80211_set_wowlan()
9139 rdev->wiphy.wowlan_config = NULL; in nl80211_set_wowlan()
9272 rdev, tb[NL80211_WOWLAN_TRIG_TCP_CONNECTION], in nl80211_set_wowlan()
9281 rdev, wowlan, tb[NL80211_WOWLAN_TRIG_NET_DETECT], in nl80211_set_wowlan()
9303 cfg80211_rdev_free_wowlan(rdev); in nl80211_set_wowlan()
9304 rdev->wiphy.wowlan_config = ntrig; in nl80211_set_wowlan()
9307 if (rdev->ops->set_wakeup && in nl80211_set_wowlan()
9308 prev_enabled != !!rdev->wiphy.wowlan_config) in nl80211_set_wowlan()
9309 rdev_set_wakeup(rdev, rdev->wiphy.wowlan_config); in nl80211_set_wowlan()
9324 struct cfg80211_registered_device *rdev) in nl80211_send_coalesce_rules() argument
9330 if (!rdev->coalesce->n_rules) in nl80211_send_coalesce_rules()
9337 for (i = 0; i < rdev->coalesce->n_rules; i++) { in nl80211_send_coalesce_rules()
9342 rule = &rdev->coalesce->rules[i]; in nl80211_send_coalesce_rules()
9381 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_get_coalesce() local
9385 if (!rdev->wiphy.coalesce) in nl80211_get_coalesce()
9397 if (rdev->coalesce && nl80211_send_coalesce_rules(msg, rdev)) in nl80211_get_coalesce()
9408 void cfg80211_rdev_free_coalesce(struct cfg80211_registered_device *rdev) in cfg80211_rdev_free_coalesce() argument
9410 struct cfg80211_coalesce *coalesce = rdev->coalesce; in cfg80211_rdev_free_coalesce()
9425 rdev->coalesce = NULL; in cfg80211_rdev_free_coalesce()
9428 static int nl80211_parse_coalesce_rule(struct cfg80211_registered_device *rdev, in nl80211_parse_coalesce_rule() argument
9433 const struct wiphy_coalesce_support *coalesce = rdev->wiphy.coalesce; in nl80211_parse_coalesce_rule()
9519 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_set_coalesce() local
9520 const struct wiphy_coalesce_support *coalesce = rdev->wiphy.coalesce; in nl80211_set_coalesce()
9527 if (!rdev->wiphy.coalesce || !rdev->ops->set_coalesce) in nl80211_set_coalesce()
9531 cfg80211_rdev_free_coalesce(rdev); in nl80211_set_coalesce()
9532 rdev->ops->set_coalesce(&rdev->wiphy, NULL); in nl80211_set_coalesce()
9552 err = nl80211_parse_coalesce_rule(rdev, rule, in nl80211_set_coalesce()
9560 err = rdev->ops->set_coalesce(&rdev->wiphy, &new_coalesce); in nl80211_set_coalesce()
9569 cfg80211_rdev_free_coalesce(rdev); in nl80211_set_coalesce()
9570 rdev->coalesce = n_coalesce; in nl80211_set_coalesce()
9587 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_set_rekey_data() local
9621 if (!rdev->ops->set_rekey_data) { in nl80211_set_rekey_data()
9626 err = rdev_set_rekey_data(rdev, dev, &rekey_data); in nl80211_set_rekey_data()
9652 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_probe_client() local
9668 if (!rdev->ops->probe_client) in nl80211_probe_client()
9684 err = rdev_probe_client(rdev, dev, addr, &cookie); in nl80211_probe_client()
9704 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_register_beacons() local
9708 if (!(rdev->wiphy.flags & WIPHY_FLAG_REPORTS_OBSS)) in nl80211_register_beacons()
9716 spin_lock_bh(&rdev->beacon_registrations_lock); in nl80211_register_beacons()
9717 list_for_each_entry(reg, &rdev->beacon_registrations, list) { in nl80211_register_beacons()
9725 list_add(&nreg->list, &rdev->beacon_registrations); in nl80211_register_beacons()
9727 spin_unlock_bh(&rdev->beacon_registrations_lock); in nl80211_register_beacons()
9731 spin_unlock_bh(&rdev->beacon_registrations_lock); in nl80211_register_beacons()
9738 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_start_p2p_device() local
9742 if (!rdev->ops->start_p2p_device) in nl80211_start_p2p_device()
9751 if (rfkill_blocked(rdev->rfkill)) in nl80211_start_p2p_device()
9754 err = rdev_start_p2p_device(rdev, wdev); in nl80211_start_p2p_device()
9759 rdev->opencount++; in nl80211_start_p2p_device()
9766 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_stop_p2p_device() local
9772 if (!rdev->ops->stop_p2p_device) in nl80211_stop_p2p_device()
9775 cfg80211_stop_p2p_device(rdev, wdev); in nl80211_stop_p2p_device()
9809 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_update_ft_ies() local
9813 if (!rdev->ops->update_ft_ies) in nl80211_update_ft_ies()
9825 return rdev_update_ft_ies(rdev, dev, &ft_params); in nl80211_update_ft_ies()
9831 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_crit_protocol_start() local
9837 if (!rdev->ops->crit_proto_start) in nl80211_crit_protocol_start()
9840 if (WARN_ON(!rdev->ops->crit_proto_stop)) in nl80211_crit_protocol_start()
9843 if (rdev->crit_proto_nlportid) in nl80211_crit_protocol_start()
9863 ret = rdev_crit_proto_start(rdev, wdev, proto, duration); in nl80211_crit_protocol_start()
9865 rdev->crit_proto_nlportid = info->snd_portid; in nl80211_crit_protocol_start()
9873 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_crit_protocol_stop() local
9876 if (!rdev->ops->crit_proto_stop) in nl80211_crit_protocol_stop()
9879 if (rdev->crit_proto_nlportid) { in nl80211_crit_protocol_stop()
9880 rdev->crit_proto_nlportid = 0; in nl80211_crit_protocol_stop()
9881 rdev_crit_proto_stop(rdev, wdev); in nl80211_crit_protocol_stop()
9888 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_vendor_cmd() local
9894 if (!rdev->wiphy.vendor_commands) in nl80211_vendor_cmd()
9902 } else if (wdev->wiphy != &rdev->wiphy) { in nl80211_vendor_cmd()
9912 for (i = 0; i < rdev->wiphy.n_vendor_commands; i++) { in nl80211_vendor_cmd()
9917 vcmd = &rdev->wiphy.vendor_commands[i]; in nl80211_vendor_cmd()
9946 rdev->cur_cmd_info = info; in nl80211_vendor_cmd()
9947 err = rdev->wiphy.vendor_commands[i].doit(&rdev->wiphy, wdev, in nl80211_vendor_cmd()
9949 rdev->cur_cmd_info = NULL; in nl80211_vendor_cmd()
9961 struct cfg80211_registered_device *rdev = wiphy_to_rdev(wiphy); in __cfg80211_alloc_reply_skb() local
9963 if (WARN_ON(!rdev->cur_cmd_info)) in __cfg80211_alloc_reply_skb()
9966 return __cfg80211_alloc_vendor_skb(rdev, NULL, approxlen, in __cfg80211_alloc_reply_skb()
9967 rdev->cur_cmd_info->snd_portid, in __cfg80211_alloc_reply_skb()
9968 rdev->cur_cmd_info->snd_seq, in __cfg80211_alloc_reply_skb()
9975 struct cfg80211_registered_device *rdev = ((void **)skb->cb)[0]; in cfg80211_vendor_cmd_reply() local
9982 if (WARN_ON(!rdev->cur_cmd_info)) { in cfg80211_vendor_cmd_reply()
9989 return genlmsg_reply(skb, rdev->cur_cmd_info); in cfg80211_vendor_cmd_reply()
9997 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_set_qos_map() local
10003 if (!rdev->ops->set_qos_map) in nl80211_set_qos_map()
10038 ret = rdev_set_qos_map(rdev, dev, qos_map); in nl80211_set_qos_map()
10047 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_add_tx_ts() local
10055 if (!(rdev->wiphy.features & NL80211_FEATURE_SUPPORTS_WMM_ADMISSION)) in nl80211_add_tx_ts()
10101 err = rdev_add_tx_ts(rdev, dev, tsid, peer, up, admitted_time); in nl80211_add_tx_ts()
10110 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_del_tx_ts() local
10124 err = rdev_del_tx_ts(rdev, dev, tsid, peer); in nl80211_del_tx_ts()
10133 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_tdls_channel_switch() local
10141 if (!rdev->ops->tdls_channel_switch || in nl80211_tdls_channel_switch()
10142 !(rdev->wiphy.features & NL80211_FEATURE_TDLS_CHANNEL_SWITCH)) in nl80211_tdls_channel_switch()
10157 err = nl80211_parse_chandef(rdev, info, &chandef); in nl80211_tdls_channel_switch()
10172 if (!cfg80211_reg_can_beacon(&rdev->wiphy, &chandef, wdev->iftype)) in nl80211_tdls_channel_switch()
10183 err = rdev_tdls_channel_switch(rdev, dev, addr, oper_class, &chandef); in nl80211_tdls_channel_switch()
10192 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_tdls_cancel_channel_switch() local
10197 if (!rdev->ops->tdls_channel_switch || in nl80211_tdls_cancel_channel_switch()
10198 !rdev->ops->tdls_cancel_channel_switch || in nl80211_tdls_cancel_channel_switch()
10199 !(rdev->wiphy.features & NL80211_FEATURE_TDLS_CHANNEL_SWITCH)) in nl80211_tdls_cancel_channel_switch()
10216 rdev_tdls_cancel_channel_switch(rdev, dev, addr); in nl80211_tdls_cancel_channel_switch()
10237 struct cfg80211_registered_device *rdev; in nl80211_pre_doit() local
10246 rdev = cfg80211_get_dev_from_info(genl_info_net(info), info); in nl80211_pre_doit()
10247 if (IS_ERR(rdev)) { in nl80211_pre_doit()
10250 return PTR_ERR(rdev); in nl80211_pre_doit()
10252 info->user_ptr[0] = rdev; in nl80211_pre_doit()
10266 rdev = wiphy_to_rdev(wdev->wiphy); in nl80211_pre_doit()
10297 info->user_ptr[0] = rdev; in nl80211_pre_doit()
11041 void nl80211_notify_wiphy(struct cfg80211_registered_device *rdev, in nl80211_notify_wiphy() argument
11054 if (nl80211_send_wiphy(rdev, cmd, msg, 0, 0, 0, &state) < 0) { in nl80211_notify_wiphy()
11059 genlmsg_multicast_netns(&nl80211_fam, wiphy_net(&rdev->wiphy), msg, 0, in nl80211_notify_wiphy()
11064 struct cfg80211_registered_device *rdev) in nl80211_add_scan_req() argument
11066 struct cfg80211_scan_request *req = rdev->scan_req; in nl80211_add_scan_req()
11105 struct cfg80211_registered_device *rdev, in nl80211_send_scan_msg() argument
11116 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) || in nl80211_send_scan_msg()
11123 nl80211_add_scan_req(msg, rdev); in nl80211_send_scan_msg()
11135 struct cfg80211_registered_device *rdev, in nl80211_send_sched_scan_msg() argument
11145 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) || in nl80211_send_sched_scan_msg()
11157 void nl80211_send_scan_start(struct cfg80211_registered_device *rdev, in nl80211_send_scan_start() argument
11166 if (nl80211_send_scan_msg(msg, rdev, wdev, 0, 0, 0, in nl80211_send_scan_start()
11172 genlmsg_multicast_netns(&nl80211_fam, wiphy_net(&rdev->wiphy), msg, 0, in nl80211_send_scan_start()
11176 struct sk_buff *nl80211_build_scan_msg(struct cfg80211_registered_device *rdev, in nl80211_build_scan_msg() argument
11185 if (nl80211_send_scan_msg(msg, rdev, wdev, 0, 0, 0, in nl80211_build_scan_msg()
11195 void nl80211_send_scan_result(struct cfg80211_registered_device *rdev, in nl80211_send_scan_result() argument
11201 genlmsg_multicast_netns(&nl80211_fam, wiphy_net(&rdev->wiphy), msg, 0, in nl80211_send_scan_result()
11205 void nl80211_send_sched_scan_results(struct cfg80211_registered_device *rdev, in nl80211_send_sched_scan_results() argument
11214 if (nl80211_send_sched_scan_msg(msg, rdev, netdev, 0, 0, 0, in nl80211_send_sched_scan_results()
11220 genlmsg_multicast_netns(&nl80211_fam, wiphy_net(&rdev->wiphy), msg, 0, in nl80211_send_sched_scan_results()
11224 void nl80211_send_sched_scan(struct cfg80211_registered_device *rdev, in nl80211_send_sched_scan() argument
11233 if (nl80211_send_sched_scan_msg(msg, rdev, netdev, 0, 0, 0, cmd) < 0) { in nl80211_send_sched_scan()
11238 genlmsg_multicast_netns(&nl80211_fam, wiphy_net(&rdev->wiphy), msg, 0, in nl80211_send_sched_scan()
11326 static void nl80211_send_mlme_event(struct cfg80211_registered_device *rdev, in nl80211_send_mlme_event() argument
11345 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) || in nl80211_send_mlme_event()
11365 genlmsg_multicast_netns(&nl80211_fam, wiphy_net(&rdev->wiphy), msg, 0, in nl80211_send_mlme_event()
11374 void nl80211_send_rx_auth(struct cfg80211_registered_device *rdev, in nl80211_send_rx_auth() argument
11378 nl80211_send_mlme_event(rdev, netdev, buf, len, in nl80211_send_rx_auth()
11382 void nl80211_send_rx_assoc(struct cfg80211_registered_device *rdev, in nl80211_send_rx_assoc() argument
11386 nl80211_send_mlme_event(rdev, netdev, buf, len, in nl80211_send_rx_assoc()
11390 void nl80211_send_deauth(struct cfg80211_registered_device *rdev, in nl80211_send_deauth() argument
11394 nl80211_send_mlme_event(rdev, netdev, buf, len, in nl80211_send_deauth()
11398 void nl80211_send_disassoc(struct cfg80211_registered_device *rdev, in nl80211_send_disassoc() argument
11402 nl80211_send_mlme_event(rdev, netdev, buf, len, in nl80211_send_disassoc()
11411 struct cfg80211_registered_device *rdev = wiphy_to_rdev(wiphy); in cfg80211_rx_unprot_mlme_mgmt() local
11424 nl80211_send_mlme_event(rdev, dev, buf, len, cmd, GFP_ATOMIC, -1); in cfg80211_rx_unprot_mlme_mgmt()
11428 static void nl80211_send_mlme_timeout(struct cfg80211_registered_device *rdev, in nl80211_send_mlme_timeout() argument
11445 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) || in nl80211_send_mlme_timeout()
11453 genlmsg_multicast_netns(&nl80211_fam, wiphy_net(&rdev->wiphy), msg, 0, in nl80211_send_mlme_timeout()
11462 void nl80211_send_auth_timeout(struct cfg80211_registered_device *rdev, in nl80211_send_auth_timeout() argument
11466 nl80211_send_mlme_timeout(rdev, netdev, NL80211_CMD_AUTHENTICATE, in nl80211_send_auth_timeout()
11470 void nl80211_send_assoc_timeout(struct cfg80211_registered_device *rdev, in nl80211_send_assoc_timeout() argument
11474 nl80211_send_mlme_timeout(rdev, netdev, NL80211_CMD_ASSOCIATE, in nl80211_send_assoc_timeout()
11478 void nl80211_send_connect_result(struct cfg80211_registered_device *rdev, in nl80211_send_connect_result() argument
11497 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) || in nl80211_send_connect_result()
11509 genlmsg_multicast_netns(&nl80211_fam, wiphy_net(&rdev->wiphy), msg, 0, in nl80211_send_connect_result()
11519 void nl80211_send_roamed(struct cfg80211_registered_device *rdev, in nl80211_send_roamed() argument
11537 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) || in nl80211_send_roamed()
11548 genlmsg_multicast_netns(&nl80211_fam, wiphy_net(&rdev->wiphy), msg, 0, in nl80211_send_roamed()
11558 void nl80211_send_disconnected(struct cfg80211_registered_device *rdev, in nl80211_send_disconnected() argument
11575 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) || in nl80211_send_disconnected()
11586 genlmsg_multicast_netns(&nl80211_fam, wiphy_net(&rdev->wiphy), msg, 0, in nl80211_send_disconnected()
11596 void nl80211_send_ibss_bssid(struct cfg80211_registered_device *rdev, in nl80211_send_ibss_bssid() argument
11613 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) || in nl80211_send_ibss_bssid()
11620 genlmsg_multicast_netns(&nl80211_fam, wiphy_net(&rdev->wiphy), msg, 0, in nl80211_send_ibss_bssid()
11633 struct cfg80211_registered_device *rdev = wiphy_to_rdev(wdev->wiphy); in cfg80211_notify_new_peer_candidate() local
11652 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) || in cfg80211_notify_new_peer_candidate()
11661 genlmsg_multicast_netns(&nl80211_fam, wiphy_net(&rdev->wiphy), msg, 0, in cfg80211_notify_new_peer_candidate()
11671 void nl80211_michael_mic_failure(struct cfg80211_registered_device *rdev, in nl80211_michael_mic_failure() argument
11689 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) || in nl80211_michael_mic_failure()
11700 genlmsg_multicast_netns(&nl80211_fam, wiphy_net(&rdev->wiphy), msg, 0, in nl80211_michael_mic_failure()
11765 int cmd, struct cfg80211_registered_device *rdev, in nl80211_send_remain_on_chan_event() argument
11783 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) || in nl80211_send_remain_on_chan_event()
11799 genlmsg_multicast_netns(&nl80211_fam, wiphy_net(&rdev->wiphy), msg, 0, in nl80211_send_remain_on_chan_event()
11813 struct cfg80211_registered_device *rdev = wiphy_to_rdev(wiphy); in cfg80211_ready_on_channel() local
11817 rdev, wdev, cookie, chan, in cfg80211_ready_on_channel()
11827 struct cfg80211_registered_device *rdev = wiphy_to_rdev(wiphy); in cfg80211_remain_on_channel_expired() local
11831 rdev, wdev, cookie, chan, 0, gfp); in cfg80211_remain_on_channel_expired()
11839 struct cfg80211_registered_device *rdev = wiphy_to_rdev(wiphy); in cfg80211_new_sta() local
11849 rdev, dev, mac_addr, sinfo) < 0) { in cfg80211_new_sta()
11854 genlmsg_multicast_netns(&nl80211_fam, wiphy_net(&rdev->wiphy), msg, 0, in cfg80211_new_sta()
11863 struct cfg80211_registered_device *rdev = wiphy_to_rdev(wiphy); in cfg80211_del_sta_sinfo() local
11877 rdev, dev, mac_addr, sinfo) < 0) { in cfg80211_del_sta_sinfo()
11882 genlmsg_multicast_netns(&nl80211_fam, wiphy_net(&rdev->wiphy), msg, 0, in cfg80211_del_sta_sinfo()
11892 struct cfg80211_registered_device *rdev = wiphy_to_rdev(wiphy); in cfg80211_conn_failed() local
11913 genlmsg_multicast_netns(&nl80211_fam, wiphy_net(&rdev->wiphy), msg, 0, in cfg80211_conn_failed()
11927 struct cfg80211_registered_device *rdev = wiphy_to_rdev(wdev->wiphy); in __nl80211_unexpected_frame() local
11945 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) || in __nl80211_unexpected_frame()
11951 genlmsg_unicast(wiphy_net(&rdev->wiphy), msg, nlportid); in __nl80211_unexpected_frame()
12002 int nl80211_send_mgmt(struct cfg80211_registered_device *rdev, in nl80211_send_mgmt() argument
12021 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) || in nl80211_send_mgmt()
12035 return genlmsg_unicast(wiphy_net(&rdev->wiphy), msg, nlportid); in nl80211_send_mgmt()
12047 struct cfg80211_registered_device *rdev = wiphy_to_rdev(wiphy); in cfg80211_mgmt_tx_status() local
12064 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) || in cfg80211_mgmt_tx_status()
12075 genlmsg_multicast_netns(&nl80211_fam, wiphy_net(&rdev->wiphy), msg, 0, in cfg80211_mgmt_tx_status()
12089 struct cfg80211_registered_device *rdev = wiphy_to_rdev(wdev->wiphy); in cfg80211_prepare_cqm() local
12104 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) || in cfg80211_prepare_cqm()
12115 cb[2] = rdev; in cfg80211_prepare_cqm()
12126 struct cfg80211_registered_device *rdev = cb[2]; in cfg80211_send_cqm() local
12133 genlmsg_multicast_netns(&nl80211_fam, wiphy_net(&rdev->wiphy), msg, 0, in cfg80211_send_cqm()
12234 static void nl80211_gtk_rekey_notify(struct cfg80211_registered_device *rdev, in nl80211_gtk_rekey_notify() argument
12252 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) || in nl80211_gtk_rekey_notify()
12269 genlmsg_multicast_netns(&nl80211_fam, wiphy_net(&rdev->wiphy), msg, 0, in nl80211_gtk_rekey_notify()
12283 struct cfg80211_registered_device *rdev = wiphy_to_rdev(wiphy); in cfg80211_gtk_rekey_notify() local
12286 nl80211_gtk_rekey_notify(rdev, dev, bssid, replay_ctr, gfp); in cfg80211_gtk_rekey_notify()
12291 nl80211_pmksa_candidate_notify(struct cfg80211_registered_device *rdev, in nl80211_pmksa_candidate_notify() argument
12309 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) || in nl80211_pmksa_candidate_notify()
12327 genlmsg_multicast_netns(&nl80211_fam, wiphy_net(&rdev->wiphy), msg, 0, in nl80211_pmksa_candidate_notify()
12341 struct cfg80211_registered_device *rdev = wiphy_to_rdev(wiphy); in cfg80211_pmksa_candidate_notify() local
12344 nl80211_pmksa_candidate_notify(rdev, dev, index, bssid, preauth, gfp); in cfg80211_pmksa_candidate_notify()
12348 static void nl80211_ch_switch_notify(struct cfg80211_registered_device *rdev, in nl80211_ch_switch_notify() argument
12380 genlmsg_multicast_netns(&nl80211_fam, wiphy_net(&rdev->wiphy), msg, 0, in nl80211_ch_switch_notify()
12394 struct cfg80211_registered_device *rdev = wiphy_to_rdev(wiphy); in cfg80211_ch_switch_notify() local
12402 nl80211_ch_switch_notify(rdev, dev, chandef, GFP_KERNEL, in cfg80211_ch_switch_notify()
12413 struct cfg80211_registered_device *rdev = wiphy_to_rdev(wiphy); in cfg80211_ch_switch_started_notify() local
12417 nl80211_ch_switch_notify(rdev, dev, chandef, GFP_KERNEL, in cfg80211_ch_switch_started_notify()
12423 nl80211_radar_notify(struct cfg80211_registered_device *rdev, in nl80211_radar_notify() argument
12441 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx)) in nl80211_radar_notify()
12461 genlmsg_multicast_netns(&nl80211_fam, wiphy_net(&rdev->wiphy), msg, 0, in nl80211_radar_notify()
12474 struct cfg80211_registered_device *rdev = wiphy_to_rdev(wdev->wiphy); in cfg80211_probe_status() local
12491 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) || in cfg80211_probe_status()
12500 genlmsg_multicast_netns(&nl80211_fam, wiphy_net(&rdev->wiphy), msg, 0, in cfg80211_probe_status()
12514 struct cfg80211_registered_device *rdev = wiphy_to_rdev(wiphy); in cfg80211_report_obss_beacon() local
12521 spin_lock_bh(&rdev->beacon_registrations_lock); in cfg80211_report_obss_beacon()
12522 list_for_each_entry(reg, &rdev->beacon_registrations, list) { in cfg80211_report_obss_beacon()
12525 spin_unlock_bh(&rdev->beacon_registrations_lock); in cfg80211_report_obss_beacon()
12533 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) || in cfg80211_report_obss_beacon()
12543 genlmsg_unicast(wiphy_net(&rdev->wiphy), msg, reg->nlportid); in cfg80211_report_obss_beacon()
12545 spin_unlock_bh(&rdev->beacon_registrations_lock); in cfg80211_report_obss_beacon()
12549 spin_unlock_bh(&rdev->beacon_registrations_lock); in cfg80211_report_obss_beacon()
12620 struct cfg80211_registered_device *rdev = wiphy_to_rdev(wdev->wiphy); in cfg80211_report_wowlan_wakeup() local
12638 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) || in cfg80211_report_wowlan_wakeup()
12719 genlmsg_multicast_netns(&nl80211_fam, wiphy_net(&rdev->wiphy), msg, 0, in cfg80211_report_wowlan_wakeup()
12734 struct cfg80211_registered_device *rdev = wiphy_to_rdev(wdev->wiphy); in cfg80211_tdls_oper_request() local
12751 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) || in cfg80211_tdls_oper_request()
12761 genlmsg_multicast_netns(&nl80211_fam, wiphy_net(&rdev->wiphy), msg, 0, in cfg80211_tdls_oper_request()
12776 struct cfg80211_registered_device *rdev; in nl80211_netlink_notify() local
12785 list_for_each_entry_rcu(rdev, &cfg80211_rdev_list, list) { in nl80211_netlink_notify()
12789 rcu_dereference(rdev->sched_scan_req); in nl80211_netlink_notify()
12795 list_for_each_entry_rcu(wdev, &rdev->wdev_list, list) { in nl80211_netlink_notify()
12802 spin_lock_bh(&rdev->beacon_registrations_lock); in nl80211_netlink_notify()
12803 list_for_each_entry_safe(reg, tmp, &rdev->beacon_registrations, in nl80211_netlink_notify()
12811 spin_unlock_bh(&rdev->beacon_registrations_lock); in nl80211_netlink_notify()
12819 spin_lock(&rdev->destroy_list_lock); in nl80211_netlink_notify()
12820 list_add(&destroy->list, &rdev->destroy_list); in nl80211_netlink_notify()
12821 spin_unlock(&rdev->destroy_list_lock); in nl80211_netlink_notify()
12822 schedule_work(&rdev->destroy_work); in nl80211_netlink_notify()
12827 if (rdev->ops->sched_scan_stop && in nl80211_netlink_notify()
12828 rdev->wiphy.flags & WIPHY_FLAG_SUPPORTS_SCHED_SCAN) in nl80211_netlink_notify()
12829 schedule_work(&rdev->sched_scan_stop_wk); in nl80211_netlink_notify()
12851 struct cfg80211_registered_device *rdev = wiphy_to_rdev(wiphy); in cfg80211_ft_event() local
12868 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) || in cfg80211_ft_event()
12883 genlmsg_multicast_netns(&nl80211_fam, wiphy_net(&rdev->wiphy), msg, 0, in cfg80211_ft_event()
12893 struct cfg80211_registered_device *rdev; in cfg80211_crit_proto_stopped() local
12898 rdev = wiphy_to_rdev(wdev->wiphy); in cfg80211_crit_proto_stopped()
12899 if (!rdev->crit_proto_nlportid) in cfg80211_crit_proto_stopped()
12902 nlportid = rdev->crit_proto_nlportid; in cfg80211_crit_proto_stopped()
12903 rdev->crit_proto_nlportid = 0; in cfg80211_crit_proto_stopped()
12913 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) || in cfg80211_crit_proto_stopped()
12919 genlmsg_unicast(wiphy_net(&rdev->wiphy), msg, nlportid); in cfg80211_crit_proto_stopped()
12933 struct cfg80211_registered_device *rdev = wiphy_to_rdev(wiphy); in nl80211_send_ap_stopped() local
12945 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) || in nl80211_send_ap_stopped()