Lines Matching refs:rdev

30 static int nl80211_crypto_settings(struct cfg80211_registered_device *rdev,
77 struct cfg80211_registered_device *rdev; in __cfg80211_wdev_from_attrs() local
97 list_for_each_entry(rdev, &cfg80211_rdev_list, list) { in __cfg80211_wdev_from_attrs()
100 if (wiphy_net(&rdev->wiphy) != netns) in __cfg80211_wdev_from_attrs()
103 if (have_wdev_id && rdev->wiphy_idx != wiphy_idx) in __cfg80211_wdev_from_attrs()
106 list_for_each_entry(wdev, &rdev->wdev_list, list) { in __cfg80211_wdev_from_attrs()
130 struct cfg80211_registered_device *rdev = NULL, *tmp; in __cfg80211_rdev_from_attrs() local
141 rdev = cfg80211_rdev_by_wiphy_idx( in __cfg80211_rdev_from_attrs()
162 if (rdev && tmp != rdev) in __cfg80211_rdev_from_attrs()
164 rdev = tmp; in __cfg80211_rdev_from_attrs()
183 if (rdev && tmp != rdev) in __cfg80211_rdev_from_attrs()
186 rdev = tmp; in __cfg80211_rdev_from_attrs()
190 if (!rdev) in __cfg80211_rdev_from_attrs()
193 if (netns != wiphy_net(&rdev->wiphy)) in __cfg80211_rdev_from_attrs()
196 return rdev; in __cfg80211_rdev_from_attrs()
490 struct cfg80211_registered_device **rdev, in nl80211_prepare_wdev_dump() argument
510 *rdev = wiphy_to_rdev((*wdev)->wiphy); in nl80211_prepare_wdev_dump()
512 cb->args[0] = (*rdev)->wiphy_idx + 1; in nl80211_prepare_wdev_dump()
523 *rdev = wiphy_to_rdev(wiphy); in nl80211_prepare_wdev_dump()
526 list_for_each_entry(tmp, &(*rdev)->wdev_list, list) { in nl80211_prepare_wdev_dump()
545 static void nl80211_finish_wdev_dump(struct cfg80211_registered_device *rdev) in nl80211_finish_wdev_dump() argument
826 nl80211_parse_connkeys(struct cfg80211_registered_device *rdev, in nl80211_parse_connkeys() argument
862 err = cfg80211_validate_key_settings(rdev, &parse.p, in nl80211_parse_connkeys()
1017 static int nl80211_send_wowlan_tcp_caps(struct cfg80211_registered_device *rdev, in nl80211_send_wowlan_tcp_caps() argument
1020 const struct wiphy_wowlan_tcp_support *tcp = rdev->wiphy.wowlan->tcp; in nl80211_send_wowlan_tcp_caps()
1058 struct cfg80211_registered_device *rdev, in nl80211_send_wowlan() argument
1063 if (!rdev->wiphy.wowlan) in nl80211_send_wowlan()
1070 if (((rdev->wiphy.wowlan->flags & WIPHY_WOWLAN_ANY) && in nl80211_send_wowlan()
1072 ((rdev->wiphy.wowlan->flags & WIPHY_WOWLAN_DISCONNECT) && in nl80211_send_wowlan()
1074 ((rdev->wiphy.wowlan->flags & WIPHY_WOWLAN_MAGIC_PKT) && in nl80211_send_wowlan()
1076 ((rdev->wiphy.wowlan->flags & WIPHY_WOWLAN_SUPPORTS_GTK_REKEY) && in nl80211_send_wowlan()
1078 ((rdev->wiphy.wowlan->flags & WIPHY_WOWLAN_GTK_REKEY_FAILURE) && in nl80211_send_wowlan()
1080 ((rdev->wiphy.wowlan->flags & WIPHY_WOWLAN_EAP_IDENTITY_REQ) && in nl80211_send_wowlan()
1082 ((rdev->wiphy.wowlan->flags & WIPHY_WOWLAN_4WAY_HANDSHAKE) && in nl80211_send_wowlan()
1084 ((rdev->wiphy.wowlan->flags & WIPHY_WOWLAN_RFKILL_RELEASE) && in nl80211_send_wowlan()
1088 if (rdev->wiphy.wowlan->n_patterns) { in nl80211_send_wowlan()
1090 .max_patterns = rdev->wiphy.wowlan->n_patterns, in nl80211_send_wowlan()
1091 .min_pattern_len = rdev->wiphy.wowlan->pattern_min_len, in nl80211_send_wowlan()
1092 .max_pattern_len = rdev->wiphy.wowlan->pattern_max_len, in nl80211_send_wowlan()
1093 .max_pkt_offset = rdev->wiphy.wowlan->max_pkt_offset, in nl80211_send_wowlan()
1101 if ((rdev->wiphy.wowlan->flags & WIPHY_WOWLAN_NET_DETECT) && in nl80211_send_wowlan()
1103 rdev->wiphy.wowlan->max_nd_match_sets)) in nl80211_send_wowlan()
1106 if (large && nl80211_send_wowlan_tcp_caps(rdev, msg)) in nl80211_send_wowlan()
1116 struct cfg80211_registered_device *rdev) in nl80211_send_coalesce() argument
1120 if (!rdev->wiphy.coalesce) in nl80211_send_coalesce()
1123 rule.max_rules = rdev->wiphy.coalesce->n_rules; in nl80211_send_coalesce()
1124 rule.max_delay = rdev->wiphy.coalesce->max_delay; in nl80211_send_coalesce()
1125 rule.pat.max_patterns = rdev->wiphy.coalesce->n_patterns; in nl80211_send_coalesce()
1126 rule.pat.min_pattern_len = rdev->wiphy.coalesce->pattern_min_len; in nl80211_send_coalesce()
1127 rule.pat.max_pattern_len = rdev->wiphy.coalesce->pattern_max_len; in nl80211_send_coalesce()
1128 rule.pat.max_pkt_offset = rdev->wiphy.coalesce->max_pkt_offset; in nl80211_send_coalesce()
1259 static int nl80211_send_wiphy(struct cfg80211_registered_device *rdev, in nl80211_send_wiphy() argument
1272 rdev->wiphy.mgmt_stypes; in nl80211_send_wiphy()
1282 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) || in nl80211_send_wiphy()
1284 wiphy_name(&rdev->wiphy)) || in nl80211_send_wiphy()
1295 rdev->wiphy.retry_short) || in nl80211_send_wiphy()
1297 rdev->wiphy.retry_long) || in nl80211_send_wiphy()
1299 rdev->wiphy.frag_threshold) || in nl80211_send_wiphy()
1301 rdev->wiphy.rts_threshold) || in nl80211_send_wiphy()
1303 rdev->wiphy.coverage_class) || in nl80211_send_wiphy()
1305 rdev->wiphy.max_scan_ssids) || in nl80211_send_wiphy()
1307 rdev->wiphy.max_sched_scan_ssids) || in nl80211_send_wiphy()
1309 rdev->wiphy.max_scan_ie_len) || in nl80211_send_wiphy()
1311 rdev->wiphy.max_sched_scan_ie_len) || in nl80211_send_wiphy()
1313 rdev->wiphy.max_match_sets) || in nl80211_send_wiphy()
1315 rdev->wiphy.max_sched_scan_plans) || in nl80211_send_wiphy()
1317 rdev->wiphy.max_sched_scan_plan_interval) || in nl80211_send_wiphy()
1319 rdev->wiphy.max_sched_scan_plan_iterations)) in nl80211_send_wiphy()
1322 if ((rdev->wiphy.flags & WIPHY_FLAG_IBSS_RSN) && in nl80211_send_wiphy()
1325 if ((rdev->wiphy.flags & WIPHY_FLAG_MESH_AUTH) && in nl80211_send_wiphy()
1328 if ((rdev->wiphy.flags & WIPHY_FLAG_AP_UAPSD) && in nl80211_send_wiphy()
1331 if ((rdev->wiphy.flags & WIPHY_FLAG_SUPPORTS_FW_ROAM) && in nl80211_send_wiphy()
1334 if ((rdev->wiphy.flags & WIPHY_FLAG_SUPPORTS_TDLS) && in nl80211_send_wiphy()
1337 if ((rdev->wiphy.flags & WIPHY_FLAG_TDLS_EXTERNAL_SETUP) && in nl80211_send_wiphy()
1345 sizeof(u32) * rdev->wiphy.n_cipher_suites, in nl80211_send_wiphy()
1346 rdev->wiphy.cipher_suites)) in nl80211_send_wiphy()
1350 rdev->wiphy.max_num_pmkids)) in nl80211_send_wiphy()
1353 if ((rdev->wiphy.flags & WIPHY_FLAG_CONTROL_PORT_PROTOCOL) && in nl80211_send_wiphy()
1358 rdev->wiphy.available_antennas_tx) || in nl80211_send_wiphy()
1360 rdev->wiphy.available_antennas_rx)) in nl80211_send_wiphy()
1363 if ((rdev->wiphy.flags & WIPHY_FLAG_AP_PROBE_RESP_OFFLOAD) && in nl80211_send_wiphy()
1365 rdev->wiphy.probe_resp_offload)) in nl80211_send_wiphy()
1368 if ((rdev->wiphy.available_antennas_tx || in nl80211_send_wiphy()
1369 rdev->wiphy.available_antennas_rx) && in nl80211_send_wiphy()
1370 rdev->ops->get_antenna) { in nl80211_send_wiphy()
1373 res = rdev_get_antenna(rdev, &tx_ant, &rx_ant); in nl80211_send_wiphy()
1390 rdev->wiphy.interface_modes)) in nl80211_send_wiphy()
1404 sband = rdev->wiphy.bands[band]; in nl80211_send_wiphy()
1481 if (rdev->ops->op) { \ in nl80211_send_wiphy()
1505 if (rdev->wiphy.flags & WIPHY_FLAG_HAS_REMAIN_ON_CHANNEL) in nl80211_send_wiphy()
1510 if (rdev->wiphy.flags & WIPHY_FLAG_NETNS_OK) { in nl80211_send_wiphy()
1515 if (rdev->ops->set_monitor_channel || rdev->ops->start_ap || in nl80211_send_wiphy()
1516 rdev->ops->join_mesh) { in nl80211_send_wiphy()
1522 if (rdev->wiphy.flags & WIPHY_FLAG_SUPPORTS_TDLS) { in nl80211_send_wiphy()
1526 if (rdev->wiphy.flags & WIPHY_FLAG_SUPPORTS_SCHED_SCAN) in nl80211_send_wiphy()
1530 if (rdev->wiphy.flags & WIPHY_FLAG_REPORTS_OBSS) { in nl80211_send_wiphy()
1543 if (rdev->wiphy.flags & WIPHY_FLAG_HAS_CHANNEL_SWITCH) in nl80211_send_wiphy()
1546 if (rdev->wiphy.features & in nl80211_send_wiphy()
1553 if (rdev->ops->connect || rdev->ops->auth) { in nl80211_send_wiphy()
1559 if (rdev->ops->disconnect || rdev->ops->deauth) { in nl80211_send_wiphy()
1570 if (rdev->ops->remain_on_channel && in nl80211_send_wiphy()
1571 (rdev->wiphy.flags & WIPHY_FLAG_HAS_REMAIN_ON_CHANNEL) && in nl80211_send_wiphy()
1574 rdev->wiphy.max_remain_on_channel_duration)) in nl80211_send_wiphy()
1577 if ((rdev->wiphy.flags & WIPHY_FLAG_OFFCHAN_TX) && in nl80211_send_wiphy()
1588 if (nl80211_send_wowlan(msg, rdev, state->split)) in nl80211_send_wiphy()
1598 rdev->wiphy.software_iftypes)) in nl80211_send_wiphy()
1601 if (nl80211_put_iface_combinations(&rdev->wiphy, msg, in nl80211_send_wiphy()
1609 if ((rdev->wiphy.flags & WIPHY_FLAG_HAVE_AP_SME) && in nl80211_send_wiphy()
1611 rdev->wiphy.ap_sme_capa)) in nl80211_send_wiphy()
1614 features = rdev->wiphy.features; in nl80211_send_wiphy()
1625 if (rdev->wiphy.ht_capa_mod_mask && in nl80211_send_wiphy()
1627 sizeof(*rdev->wiphy.ht_capa_mod_mask), in nl80211_send_wiphy()
1628 rdev->wiphy.ht_capa_mod_mask)) in nl80211_send_wiphy()
1631 if (rdev->wiphy.flags & WIPHY_FLAG_HAVE_AP_SME && in nl80211_send_wiphy()
1632 rdev->wiphy.max_acl_mac_addrs && in nl80211_send_wiphy()
1634 rdev->wiphy.max_acl_mac_addrs)) in nl80211_send_wiphy()
1650 if (rdev->wiphy.extended_capabilities && in nl80211_send_wiphy()
1652 rdev->wiphy.extended_capabilities_len, in nl80211_send_wiphy()
1653 rdev->wiphy.extended_capabilities) || in nl80211_send_wiphy()
1655 rdev->wiphy.extended_capabilities_len, in nl80211_send_wiphy()
1656 rdev->wiphy.extended_capabilities_mask))) in nl80211_send_wiphy()
1659 if (rdev->wiphy.vht_capa_mod_mask && in nl80211_send_wiphy()
1661 sizeof(*rdev->wiphy.vht_capa_mod_mask), in nl80211_send_wiphy()
1662 rdev->wiphy.vht_capa_mod_mask)) in nl80211_send_wiphy()
1668 if (nl80211_send_coalesce(msg, rdev)) in nl80211_send_wiphy()
1671 if ((rdev->wiphy.flags & WIPHY_FLAG_SUPPORTS_5_10_MHZ) && in nl80211_send_wiphy()
1676 if (rdev->wiphy.max_ap_assoc_sta && in nl80211_send_wiphy()
1678 rdev->wiphy.max_ap_assoc_sta)) in nl80211_send_wiphy()
1684 if (rdev->wiphy.n_vendor_commands) { in nl80211_send_wiphy()
1692 for (i = 0; i < rdev->wiphy.n_vendor_commands; i++) { in nl80211_send_wiphy()
1693 info = &rdev->wiphy.vendor_commands[i].info; in nl80211_send_wiphy()
1700 if (rdev->wiphy.n_vendor_events) { in nl80211_send_wiphy()
1709 for (i = 0; i < rdev->wiphy.n_vendor_events; i++) { in nl80211_send_wiphy()
1710 info = &rdev->wiphy.vendor_events[i]; in nl80211_send_wiphy()
1719 if (rdev->wiphy.flags & WIPHY_FLAG_HAS_CHANNEL_SWITCH && in nl80211_send_wiphy()
1721 rdev->wiphy.max_num_csa_counters)) in nl80211_send_wiphy()
1724 if (rdev->wiphy.regulatory_flags & REGULATORY_WIPHY_SELF_MANAGED && in nl80211_send_wiphy()
1729 sizeof(rdev->wiphy.ext_features), in nl80211_send_wiphy()
1730 rdev->wiphy.ext_features)) in nl80211_send_wiphy()
1764 struct cfg80211_registered_device *rdev; in nl80211_dump_wiphy_parse() local
1771 rdev = wiphy_to_rdev( in nl80211_dump_wiphy_parse()
1773 state->filter_wiphy = rdev->wiphy_idx; in nl80211_dump_wiphy_parse()
1784 struct cfg80211_registered_device *rdev; in nl80211_dump_wiphy() local
1803 list_for_each_entry(rdev, &cfg80211_rdev_list, list) { in nl80211_dump_wiphy()
1804 if (!net_eq(wiphy_net(&rdev->wiphy), sock_net(skb->sk))) in nl80211_dump_wiphy()
1809 state->filter_wiphy != rdev->wiphy_idx) in nl80211_dump_wiphy()
1813 ret = nl80211_send_wiphy(rdev, NL80211_CMD_NEW_WIPHY, in nl80211_dump_wiphy()
1862 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_get_wiphy() local
1869 if (nl80211_send_wiphy(rdev, NL80211_CMD_NEW_WIPHY, msg, in nl80211_get_wiphy()
1931 static int nl80211_parse_chandef(struct cfg80211_registered_device *rdev, in nl80211_parse_chandef() argument
1942 chandef->chan = ieee80211_get_channel(&rdev->wiphy, control_freq); in nl80211_parse_chandef()
1984 if (!cfg80211_chandef_usable(&rdev->wiphy, chandef, in nl80211_parse_chandef()
1990 !(rdev->wiphy.flags & WIPHY_FLAG_SUPPORTS_5_10_MHZ)) in nl80211_parse_chandef()
1996 static int __nl80211_set_channel(struct cfg80211_registered_device *rdev, in __nl80211_set_channel() argument
2012 result = nl80211_parse_chandef(rdev, info, &chandef); in __nl80211_set_channel()
2019 if (!cfg80211_reg_can_beacon_relax(&rdev->wiphy, &chandef, in __nl80211_set_channel()
2025 if (!dev || !rdev->ops->set_ap_chanwidth || in __nl80211_set_channel()
2026 !(rdev->wiphy.features & in __nl80211_set_channel()
2037 result = rdev_set_ap_chanwidth(rdev, dev, &chandef); in __nl80211_set_channel()
2045 result = cfg80211_set_mesh_channel(rdev, wdev, &chandef); in __nl80211_set_channel()
2048 result = cfg80211_set_monitor_channel(rdev, &chandef); in __nl80211_set_channel()
2059 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_set_channel() local
2062 return __nl80211_set_channel(rdev, netdev, info); in nl80211_set_channel()
2067 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_set_wds_peer() local
2078 if (!rdev->ops->set_wds_peer) in nl80211_set_wds_peer()
2085 return rdev_set_wds_peer(rdev, dev, bssid); in nl80211_set_wds_peer()
2091 struct cfg80211_registered_device *rdev; in nl80211_set_wiphy() local
2118 rdev = wiphy_to_rdev(netdev->ieee80211_ptr->wiphy); in nl80211_set_wiphy()
2124 rdev = __cfg80211_rdev_from_attrs(genl_info_net(info), in nl80211_set_wiphy()
2126 if (IS_ERR(rdev)) in nl80211_set_wiphy()
2127 return PTR_ERR(rdev); in nl80211_set_wiphy()
2141 rdev, nla_data(info->attrs[NL80211_ATTR_WIPHY_NAME])); in nl80211_set_wiphy()
2150 if (!rdev->ops->set_txq_params) in nl80211_set_wiphy()
2176 result = rdev_set_txq_params(rdev, netdev, in nl80211_set_wiphy()
2185 rdev, in nl80211_set_wiphy()
2197 if (!(rdev->wiphy.features & NL80211_FEATURE_VIF_TXPOWER)) in nl80211_set_wiphy()
2200 if (!rdev->ops->set_tx_power) in nl80211_set_wiphy()
2215 result = rdev_set_tx_power(rdev, txp_wdev, type, mbm); in nl80211_set_wiphy()
2223 if ((!rdev->wiphy.available_antennas_tx && in nl80211_set_wiphy()
2224 !rdev->wiphy.available_antennas_rx) || in nl80211_set_wiphy()
2225 !rdev->ops->set_antenna) in nl80211_set_wiphy()
2233 if ((~tx_ant && (tx_ant & ~rdev->wiphy.available_antennas_tx)) || in nl80211_set_wiphy()
2234 (~rx_ant && (rx_ant & ~rdev->wiphy.available_antennas_rx))) in nl80211_set_wiphy()
2237 tx_ant = tx_ant & rdev->wiphy.available_antennas_tx; in nl80211_set_wiphy()
2238 rx_ant = rx_ant & rdev->wiphy.available_antennas_rx; in nl80211_set_wiphy()
2240 result = rdev_set_antenna(rdev, tx_ant, rx_ant); in nl80211_set_wiphy()
2299 if (!(rdev->wiphy.features & NL80211_FEATURE_ACKTO_ESTIMATION)) in nl80211_set_wiphy()
2310 if (!rdev->ops->set_wiphy_params) in nl80211_set_wiphy()
2313 old_retry_short = rdev->wiphy.retry_short; in nl80211_set_wiphy()
2314 old_retry_long = rdev->wiphy.retry_long; in nl80211_set_wiphy()
2315 old_frag_threshold = rdev->wiphy.frag_threshold; in nl80211_set_wiphy()
2316 old_rts_threshold = rdev->wiphy.rts_threshold; in nl80211_set_wiphy()
2317 old_coverage_class = rdev->wiphy.coverage_class; in nl80211_set_wiphy()
2320 rdev->wiphy.retry_short = retry_short; in nl80211_set_wiphy()
2322 rdev->wiphy.retry_long = retry_long; in nl80211_set_wiphy()
2324 rdev->wiphy.frag_threshold = frag_threshold; in nl80211_set_wiphy()
2326 rdev->wiphy.rts_threshold = rts_threshold; in nl80211_set_wiphy()
2328 rdev->wiphy.coverage_class = coverage_class; in nl80211_set_wiphy()
2330 result = rdev_set_wiphy_params(rdev, changed); in nl80211_set_wiphy()
2332 rdev->wiphy.retry_short = old_retry_short; in nl80211_set_wiphy()
2333 rdev->wiphy.retry_long = old_retry_long; in nl80211_set_wiphy()
2334 rdev->wiphy.frag_threshold = old_frag_threshold; in nl80211_set_wiphy()
2335 rdev->wiphy.rts_threshold = old_rts_threshold; in nl80211_set_wiphy()
2336 rdev->wiphy.coverage_class = old_coverage_class; in nl80211_set_wiphy()
2380 struct cfg80211_registered_device *rdev, in nl80211_send_iface() argument
2399 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) || in nl80211_send_iface()
2404 rdev->devlist_generation ^ in nl80211_send_iface()
2408 if (rdev->ops->get_channel) { in nl80211_send_iface()
2412 ret = rdev_get_channel(rdev, wdev, &chandef); in nl80211_send_iface()
2419 if (rdev->ops->get_tx_power) { in nl80211_send_iface()
2422 ret = rdev_get_tx_power(rdev, wdev, &dbm); in nl80211_send_iface()
2448 struct cfg80211_registered_device *rdev; in nl80211_dump_interface() local
2452 list_for_each_entry(rdev, &cfg80211_rdev_list, list) { in nl80211_dump_interface()
2453 if (!net_eq(wiphy_net(&rdev->wiphy), sock_net(skb->sk))) in nl80211_dump_interface()
2461 list_for_each_entry(wdev, &rdev->wdev_list, list) { in nl80211_dump_interface()
2468 rdev, wdev, false) < 0) { in nl80211_dump_interface()
2488 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_get_interface() local
2496 rdev, wdev, false) < 0) { in nl80211_get_interface()
2534 static int nl80211_valid_4addr(struct cfg80211_registered_device *rdev, in nl80211_valid_4addr() argument
2546 if (rdev->wiphy.flags & WIPHY_FLAG_4ADDR_AP) in nl80211_valid_4addr()
2550 if (rdev->wiphy.flags & WIPHY_FLAG_4ADDR_STATION) in nl80211_valid_4addr()
2562 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_set_interface() local
2603 err = nl80211_valid_4addr(rdev, dev, params.use_4addr, ntype); in nl80211_set_interface()
2623 !(rdev->wiphy.features & NL80211_FEATURE_ACTIVE_MONITOR)) in nl80211_set_interface()
2627 err = cfg80211_change_iface(rdev, dev, ntype, flags, &params); in nl80211_set_interface()
2639 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_new_interface() local
2648 cfg80211_destroy_ifaces(rdev); in nl80211_new_interface()
2661 if (!rdev->ops->add_virtual_intf || in nl80211_new_interface()
2662 !(rdev->wiphy.interface_modes & (1 << type))) in nl80211_new_interface()
2666 rdev->wiphy.features & NL80211_FEATURE_MAC_ON_CREATE) && in nl80211_new_interface()
2676 err = nl80211_valid_4addr(rdev, NULL, params.use_4addr, type); in nl80211_new_interface()
2686 !(rdev->wiphy.features & NL80211_FEATURE_ACTIVE_MONITOR)) in nl80211_new_interface()
2693 wdev = rdev_add_virtual_intf(rdev, in nl80211_new_interface()
2732 wdev->identifier = ++rdev->wdev_id; in nl80211_new_interface()
2733 list_add_rcu(&wdev->list, &rdev->wdev_list); in nl80211_new_interface()
2734 rdev->devlist_generation++; in nl80211_new_interface()
2741 rdev, wdev, false) < 0) { in nl80211_new_interface()
2749 rdev, wdev, false) < 0) { in nl80211_new_interface()
2754 genlmsg_multicast_netns(&nl80211_fam, wiphy_net(&rdev->wiphy), in nl80211_new_interface()
2765 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_del_interface() local
2770 if (!rdev->ops->del_virtual_intf) in nl80211_del_interface()
2774 if (msg && nl80211_send_iface(msg, 0, 0, 0, rdev, wdev, true) < 0) { in nl80211_del_interface()
2789 status = rdev_del_virtual_intf(rdev, wdev); in nl80211_del_interface()
2791 genlmsg_multicast_netns(&nl80211_fam, wiphy_net(&rdev->wiphy), in nl80211_del_interface()
2802 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_set_noack_map() local
2809 if (!rdev->ops->set_noack_map) in nl80211_set_noack_map()
2814 return rdev_set_noack_map(rdev, dev, noack_map); in nl80211_set_noack_map()
2866 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_get_key() local
2898 if (!rdev->ops->get_key) in nl80211_get_key()
2901 if (!pairwise && mac_addr && !(rdev->wiphy.flags & WIPHY_FLAG_IBSS_RSN)) in nl80211_get_key()
2923 err = rdev_get_key(rdev, dev, key_idx, pairwise, mac_addr, &cookie, in nl80211_get_key()
2944 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_set_key() local
2963 if (!rdev->ops->set_default_key) { in nl80211_set_key()
2972 err = rdev_set_default_key(rdev, dev, key.idx, in nl80211_set_key()
2987 if (!rdev->ops->set_default_mgmt_key) { in nl80211_set_key()
2996 err = rdev_set_default_mgmt_key(rdev, dev, key.idx); in nl80211_set_key()
3013 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_new_key() local
3041 if (!rdev->ops->add_key) in nl80211_new_key()
3044 if (cfg80211_validate_key_settings(rdev, &key.p, key.idx, in nl80211_new_key()
3052 err = rdev_add_key(rdev, dev, key.idx, in nl80211_new_key()
3062 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_del_key() local
3087 if (!rdev->ops->del_key) in nl80211_del_key()
3094 !(rdev->wiphy.flags & WIPHY_FLAG_IBSS_RSN)) in nl80211_del_key()
3098 err = rdev_del_key(rdev, dev, key.idx, in nl80211_del_key()
3183 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_set_mac_acl() local
3195 acl = parse_acl_data(&rdev->wiphy, info); in nl80211_set_mac_acl()
3199 err = rdev_set_mac_acl(rdev, dev, acl); in nl80211_set_mac_acl()
3263 static bool nl80211_get_ap_channel(struct cfg80211_registered_device *rdev, in nl80211_get_ap_channel() argument
3269 list_for_each_entry(wdev, &rdev->wdev_list, list) { in nl80211_get_ap_channel()
3285 static bool nl80211_valid_auth_type(struct cfg80211_registered_device *rdev, in nl80211_valid_auth_type() argument
3294 if (!(rdev->wiphy.features & NL80211_FEATURE_SAE) && in nl80211_valid_auth_type()
3311 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_start_ap() local
3321 if (!rdev->ops->start_ap) in nl80211_start_ap()
3344 err = cfg80211_validate_beacon_int(rdev, params.beacon_interval); in nl80211_start_ap()
3378 if (!nl80211_valid_auth_type(rdev, params.auth_type, in nl80211_start_ap()
3384 err = nl80211_crypto_settings(rdev, info, &params.crypto, in nl80211_start_ap()
3390 if (!(rdev->wiphy.features & NL80211_FEATURE_INACTIVITY_TIMER)) in nl80211_start_ap()
3404 !(rdev->wiphy.features & NL80211_FEATURE_P2P_GO_CTWIN)) in nl80211_start_ap()
3418 !(rdev->wiphy.features & NL80211_FEATURE_P2P_GO_OPPPS)) in nl80211_start_ap()
3423 err = nl80211_parse_chandef(rdev, info, &params.chandef); in nl80211_start_ap()
3428 } else if (!nl80211_get_ap_channel(rdev, &params)) in nl80211_start_ap()
3431 if (!cfg80211_reg_can_beacon_relax(&rdev->wiphy, &params.chandef, in nl80211_start_ap()
3442 if (!(rdev->wiphy.features & in nl80211_start_ap()
3447 if (!(rdev->wiphy.features & in nl80211_start_ap()
3459 params.acl = parse_acl_data(&rdev->wiphy, info); in nl80211_start_ap()
3465 err = rdev_start_ap(rdev, dev, &params); in nl80211_start_ap()
3482 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_set_beacon() local
3492 if (!rdev->ops->change_beacon) in nl80211_set_beacon()
3503 err = rdev_change_beacon(rdev, dev, &params); in nl80211_set_beacon()
3511 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_stop_ap() local
3514 return cfg80211_stop_ap(rdev, dev, false); in nl80211_stop_ap()
3701 struct cfg80211_registered_device *rdev, in nl80211_send_station() argument
3749 switch (rdev->wiphy.signal_type) { in nl80211_send_station()
3881 struct cfg80211_registered_device *rdev; in nl80211_dump_station() local
3887 err = nl80211_prepare_wdev_dump(skb, cb, &rdev, &wdev); in nl80211_dump_station()
3896 if (!rdev->ops->dump_station) { in nl80211_dump_station()
3903 err = rdev_dump_station(rdev, wdev->netdev, sta_idx, in nl80211_dump_station()
3913 rdev, wdev->netdev, mac_addr, in nl80211_dump_station()
3925 nl80211_finish_wdev_dump(rdev); in nl80211_dump_station()
3932 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_get_station() local
3946 if (!rdev->ops->get_station) in nl80211_get_station()
3949 err = rdev_get_station(rdev, dev, mac_addr, &sinfo); in nl80211_get_station()
3959 rdev, dev, mac_addr, &sinfo) < 0) { in nl80211_get_station()
4109 struct cfg80211_registered_device *rdev) in get_vlan() argument
4122 if (!v->ieee80211_ptr || v->ieee80211_ptr->wiphy != &rdev->wiphy) { in get_vlan()
4243 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_set_station() local
4251 if (!rdev->ops->change_station) in nl80211_set_station()
4327 params.vlan = get_vlan(info, rdev); in nl80211_set_station()
4346 err = rdev_change_station(rdev, dev, mac_addr, &params); in nl80211_set_station()
4357 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_new_station() local
4365 if (!rdev->ops->add_station) in nl80211_new_station()
4459 if (!(rdev->wiphy.flags & WIPHY_FLAG_AP_UAPSD) || in nl80211_new_station()
4471 if (!(rdev->wiphy.features & in nl80211_new_station()
4479 params.vlan = get_vlan(info, rdev); in nl80211_new_station()
4509 if (!(rdev->wiphy.flags & WIPHY_FLAG_SUPPORTS_TDLS)) in nl80211_new_station()
4512 if (!(rdev->wiphy.flags & WIPHY_FLAG_TDLS_EXTERNAL_SETUP)) in nl80211_new_station()
4526 err = rdev_add_station(rdev, dev, mac_addr, &params); in nl80211_new_station()
4535 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_del_station() local
4550 if (!rdev->ops->del_station) in nl80211_del_station()
4574 return rdev_del_station(rdev, dev, &params); in nl80211_del_station()
4635 struct cfg80211_registered_device *rdev; in nl80211_dump_mpath() local
4642 err = nl80211_prepare_wdev_dump(skb, cb, &rdev, &wdev); in nl80211_dump_mpath()
4646 if (!rdev->ops->dump_mpath) { in nl80211_dump_mpath()
4657 err = rdev_dump_mpath(rdev, wdev->netdev, path_idx, dst, in nl80211_dump_mpath()
4678 nl80211_finish_wdev_dump(rdev); in nl80211_dump_mpath()
4684 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_get_mpath() local
4699 if (!rdev->ops->get_mpath) in nl80211_get_mpath()
4705 err = rdev_get_mpath(rdev, dev, dst, next_hop, &pinfo); in nl80211_get_mpath()
4724 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_set_mpath() local
4738 if (!rdev->ops->change_mpath) in nl80211_set_mpath()
4744 return rdev_change_mpath(rdev, dev, dst, next_hop); in nl80211_set_mpath()
4749 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_new_mpath() local
4763 if (!rdev->ops->add_mpath) in nl80211_new_mpath()
4769 return rdev_add_mpath(rdev, dev, dst, next_hop); in nl80211_new_mpath()
4774 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_del_mpath() local
4781 if (!rdev->ops->del_mpath) in nl80211_del_mpath()
4784 return rdev_del_mpath(rdev, dev, dst); in nl80211_del_mpath()
4789 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_get_mpp() local
4804 if (!rdev->ops->get_mpp) in nl80211_get_mpp()
4810 err = rdev_get_mpp(rdev, dev, dst, mpp, &pinfo); in nl80211_get_mpp()
4831 struct cfg80211_registered_device *rdev; in nl80211_dump_mpp() local
4838 err = nl80211_prepare_wdev_dump(skb, cb, &rdev, &wdev); in nl80211_dump_mpp()
4842 if (!rdev->ops->dump_mpp) { in nl80211_dump_mpp()
4853 err = rdev_dump_mpp(rdev, wdev->netdev, path_idx, dst, in nl80211_dump_mpp()
4873 nl80211_finish_wdev_dump(rdev); in nl80211_dump_mpp()
4879 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_set_bss() local
4924 !(rdev->wiphy.features & NL80211_FEATURE_P2P_GO_CTWIN)) in nl80211_set_bss()
4938 !(rdev->wiphy.features & NL80211_FEATURE_P2P_GO_OPPPS)) in nl80211_set_bss()
4942 if (!rdev->ops->change_bss) in nl80211_set_bss()
4950 err = rdev_change_bss(rdev, dev, &params); in nl80211_set_bss()
5005 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_get_mesh_config() local
5017 if (!rdev->ops->get_mesh_config) in nl80211_get_mesh_config()
5025 err = rdev_get_mesh_config(rdev, dev, &cur_params); in nl80211_get_mesh_config()
5291 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_parse_mesh_setup() local
5329 !(rdev->wiphy.features & NL80211_FEATURE_USERSPACE_MPM)) in nl80211_parse_mesh_setup()
5350 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_update_mesh_config() local
5360 if (!rdev->ops->update_mesh_config) in nl80211_update_mesh_config()
5372 err = rdev_update_mesh_config(rdev, dev, mask, &cfg); in nl80211_update_mesh_config()
5443 struct cfg80211_registered_device *rdev; in nl80211_get_reg_do() local
5460 rdev = cfg80211_get_dev_from_info(genl_info_net(info), info); in nl80211_get_reg_do()
5461 if (IS_ERR(rdev)) { in nl80211_get_reg_do()
5463 return PTR_ERR(rdev); in nl80211_get_reg_do()
5466 wiphy = &rdev->wiphy; in nl80211_get_reg_do()
5549 struct cfg80211_registered_device *rdev; in nl80211_get_reg_dump() local
5564 list_for_each_entry(rdev, &cfg80211_rdev_list, list) { in nl80211_get_reg_dump()
5565 regdom = get_wiphy_regdom(&rdev->wiphy); in nl80211_get_reg_dump()
5573 NLM_F_MULTI, &rdev->wiphy, regdom); in nl80211_get_reg_dump()
5780 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_trigger_scan() local
5791 wiphy = &rdev->wiphy; in nl80211_trigger_scan()
5793 if (!rdev->ops->scan) in nl80211_trigger_scan()
5796 if (rdev->scan_req || rdev->scan_msg) { in nl80211_trigger_scan()
5980 request->wiphy = &rdev->wiphy; in nl80211_trigger_scan()
5983 rdev->scan_req = request; in nl80211_trigger_scan()
5984 err = rdev_scan(rdev, request); in nl80211_trigger_scan()
5987 nl80211_send_scan_start(rdev, wdev); in nl80211_trigger_scan()
5992 rdev->scan_req = NULL; in nl80211_trigger_scan()
6413 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_start_sched_scan() local
6419 if (!(rdev->wiphy.flags & WIPHY_FLAG_SUPPORTS_SCHED_SCAN) || in nl80211_start_sched_scan()
6420 !rdev->ops->sched_scan_start) in nl80211_start_sched_scan()
6423 if (rdev->sched_scan_req) in nl80211_start_sched_scan()
6426 sched_scan_req = nl80211_parse_sched_scan(&rdev->wiphy, wdev, in nl80211_start_sched_scan()
6433 err = rdev_sched_scan_start(rdev, dev, sched_scan_req); in nl80211_start_sched_scan()
6438 sched_scan_req->wiphy = &rdev->wiphy; in nl80211_start_sched_scan()
6443 rcu_assign_pointer(rdev->sched_scan_req, sched_scan_req); in nl80211_start_sched_scan()
6445 nl80211_send_sched_scan(rdev, dev, in nl80211_start_sched_scan()
6458 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_stop_sched_scan() local
6460 if (!(rdev->wiphy.flags & WIPHY_FLAG_SUPPORTS_SCHED_SCAN) || in nl80211_stop_sched_scan()
6461 !rdev->ops->sched_scan_stop) in nl80211_stop_sched_scan()
6464 return __cfg80211_stop_sched_scan(rdev, false); in nl80211_stop_sched_scan()
6470 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_start_radar_detection() local
6482 err = nl80211_parse_chandef(rdev, info, &chandef); in nl80211_start_radar_detection()
6503 if (!rdev->ops->start_radar_detection) in nl80211_start_radar_detection()
6506 cac_time_ms = cfg80211_chandef_dfs_cac_time(&rdev->wiphy, &chandef); in nl80211_start_radar_detection()
6510 err = rdev->ops->start_radar_detection(&rdev->wiphy, dev, &chandef, in nl80211_start_radar_detection()
6523 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_channel_switch() local
6536 if (!rdev->ops->channel_switch || in nl80211_channel_switch()
6537 !(rdev->wiphy.flags & WIPHY_FLAG_HAS_CHANNEL_SWITCH)) in nl80211_channel_switch()
6605 if (rdev->wiphy.max_num_csa_counters && in nl80211_channel_switch()
6607 rdev->wiphy.max_num_csa_counters)) in nl80211_channel_switch()
6630 if (rdev->wiphy.max_num_csa_counters && in nl80211_channel_switch()
6632 rdev->wiphy.max_num_csa_counters)) in nl80211_channel_switch()
6652 err = nl80211_parse_chandef(rdev, info, &params.chandef); in nl80211_channel_switch()
6656 if (!cfg80211_reg_can_beacon_relax(&rdev->wiphy, &params.chandef, in nl80211_channel_switch()
6673 err = rdev_channel_switch(rdev, dev, &params); in nl80211_channel_switch()
6681 struct cfg80211_registered_device *rdev, in nl80211_send_bss() argument
6699 if (nla_put_u32(msg, NL80211_ATTR_GENERATION, rdev->bss_generation)) in nl80211_send_bss()
6758 switch (rdev->wiphy.signal_type) { in nl80211_send_bss()
6803 struct cfg80211_registered_device *rdev; in nl80211_dump_scan() local
6809 err = nl80211_prepare_wdev_dump(skb, cb, &rdev, &wdev); in nl80211_dump_scan()
6814 spin_lock_bh(&rdev->bss_lock); in nl80211_dump_scan()
6815 cfg80211_bss_expire(rdev); in nl80211_dump_scan()
6817 cb->seq = rdev->bss_generation; in nl80211_dump_scan()
6819 list_for_each_entry(scan, &rdev->bss_list, list) { in nl80211_dump_scan()
6824 rdev, wdev, scan) < 0) { in nl80211_dump_scan()
6830 spin_unlock_bh(&rdev->bss_lock); in nl80211_dump_scan()
6834 nl80211_finish_wdev_dump(rdev); in nl80211_dump_scan()
6912 struct cfg80211_registered_device *rdev; in nl80211_dump_survey() local
6918 res = nl80211_prepare_wdev_dump(skb, cb, &rdev, &wdev); in nl80211_dump_survey()
6930 if (!rdev->ops->dump_survey) { in nl80211_dump_survey()
6936 res = rdev_dump_survey(rdev, wdev->netdev, survey_idx, &survey); in nl80211_dump_survey()
6961 nl80211_finish_wdev_dump(rdev); in nl80211_dump_survey()
6973 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_authenticate() local
7021 for (i = 0; i < rdev->wiphy.n_cipher_suites; i++) { in nl80211_authenticate()
7022 if (key.p.cipher == rdev->wiphy.cipher_suites[i]) { in nl80211_authenticate()
7031 if (!rdev->ops->auth) in nl80211_authenticate()
7039 chan = nl80211_get_valid_chan(&rdev->wiphy, in nl80211_authenticate()
7053 if (!nl80211_valid_auth_type(rdev, auth_type, NL80211_CMD_AUTHENTICATE)) in nl80211_authenticate()
7080 err = cfg80211_mlme_auth(rdev, dev, chan, auth_type, bssid, in nl80211_authenticate()
7088 static int nl80211_crypto_settings(struct cfg80211_registered_device *rdev, in nl80211_crypto_settings() argument
7102 if (!(rdev->wiphy.flags & WIPHY_FLAG_CONTROL_PORT_PROTOCOL) && in nl80211_crypto_settings()
7128 &rdev->wiphy, in nl80211_crypto_settings()
7136 if (!cfg80211_supported_cipher_suite(&rdev->wiphy, in nl80211_crypto_settings()
7170 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_associate() local
7185 if (!rdev->ops->assoc) in nl80211_associate()
7194 chan = nl80211_get_valid_chan(&rdev->wiphy, in nl80211_associate()
7252 if (!(rdev->wiphy.features & in nl80211_associate()
7254 !(rdev->wiphy.features & NL80211_FEATURE_QUIET)) in nl80211_associate()
7259 err = nl80211_crypto_settings(rdev, info, &req.crypto, 1); in nl80211_associate()
7262 err = cfg80211_mlme_assoc(rdev, dev, chan, bssid, in nl80211_associate()
7272 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_deauthenticate() local
7288 if (!rdev->ops->deauth) in nl80211_deauthenticate()
7311 err = cfg80211_mlme_deauth(rdev, dev, bssid, ie, ie_len, reason_code, in nl80211_deauthenticate()
7319 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_disassociate() local
7335 if (!rdev->ops->disassoc) in nl80211_disassociate()
7358 err = cfg80211_mlme_disassoc(rdev, dev, bssid, ie, ie_len, reason_code, in nl80211_disassociate()
7365 nl80211_parse_mcast_rate(struct cfg80211_registered_device *rdev, in nl80211_parse_mcast_rate() argument
7369 struct wiphy *wiphy = &rdev->wiphy; in nl80211_parse_mcast_rate()
7394 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_join_ibss() local
7419 if (!rdev->ops->join_ibss) in nl80211_join_ibss()
7425 wiphy = &rdev->wiphy; in nl80211_join_ibss()
7441 err = nl80211_parse_chandef(rdev, info, &ibss.chandef); in nl80211_join_ibss()
7445 if (!cfg80211_reg_can_beacon(&rdev->wiphy, &ibss.chandef, in nl80211_join_ibss()
7456 if (!(rdev->wiphy.features & NL80211_FEATURE_HT_IBSS)) in nl80211_join_ibss()
7462 if (!(rdev->wiphy.features & NL80211_FEATURE_HT_IBSS)) in nl80211_join_ibss()
7464 if (!wiphy_ext_feature_isset(&rdev->wiphy, in nl80211_join_ibss()
7503 !nl80211_parse_mcast_rate(rdev, ibss.mcast_rate, in nl80211_join_ibss()
7510 connkeys = nl80211_parse_connkeys(rdev, in nl80211_join_ibss()
7529 err = cfg80211_join_ibss(rdev, dev, &ibss, connkeys); in nl80211_join_ibss()
7537 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_leave_ibss() local
7540 if (!rdev->ops->leave_ibss) in nl80211_leave_ibss()
7546 return cfg80211_leave_ibss(rdev, dev, false); in nl80211_leave_ibss()
7551 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_set_mcast_rate() local
7562 if (!rdev->ops->set_mcast_rate) in nl80211_set_mcast_rate()
7571 if (!nl80211_parse_mcast_rate(rdev, mcast_rate, nla_rate)) in nl80211_set_mcast_rate()
7574 err = rdev->ops->set_mcast_rate(&rdev->wiphy, dev, mcast_rate); in nl80211_set_mcast_rate()
7580 __cfg80211_alloc_vendor_skb(struct cfg80211_registered_device *rdev, in __cfg80211_alloc_vendor_skb() argument
7601 if (nla_put_u32(skb, NL80211_ATTR_WIPHY, rdev->wiphy_idx)) in __cfg80211_alloc_vendor_skb()
7625 ((void **)skb->cb)[0] = rdev; in __cfg80211_alloc_vendor_skb()
7643 struct cfg80211_registered_device *rdev = wiphy_to_rdev(wiphy); in __cfg80211_alloc_event_skb() local
7663 return __cfg80211_alloc_vendor_skb(rdev, wdev, approxlen, 0, 0, in __cfg80211_alloc_event_skb()
7670 struct cfg80211_registered_device *rdev = ((void **)skb->cb)[0]; in __cfg80211_send_event_skb() local
7684 genlmsg_multicast_netns(&nl80211_fam, wiphy_net(&rdev->wiphy), skb, 0, in __cfg80211_send_event_skb()
7692 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_testmode_do() local
7697 if (!rdev->ops->testmode_cmd) in nl80211_testmode_do()
7705 } else if (wdev->wiphy != &rdev->wiphy) { in nl80211_testmode_do()
7712 rdev->cur_cmd_info = info; in nl80211_testmode_do()
7713 err = rdev_testmode_cmd(rdev, wdev, in nl80211_testmode_do()
7716 rdev->cur_cmd_info = NULL; in nl80211_testmode_do()
7724 struct cfg80211_registered_device *rdev; in nl80211_testmode_dump() local
7745 rdev = __cfg80211_rdev_from_attrs(sock_net(skb->sk), in nl80211_testmode_dump()
7747 if (IS_ERR(rdev)) { in nl80211_testmode_dump()
7748 err = PTR_ERR(rdev); in nl80211_testmode_dump()
7751 phy_idx = rdev->wiphy_idx; in nl80211_testmode_dump()
7752 rdev = NULL; in nl80211_testmode_dump()
7764 rdev = cfg80211_rdev_by_wiphy_idx(phy_idx); in nl80211_testmode_dump()
7765 if (!rdev) { in nl80211_testmode_dump()
7770 if (!rdev->ops->testmode_dump) { in nl80211_testmode_dump()
7794 err = rdev_testmode_dump(rdev, skb, cb, data, data_len); in nl80211_testmode_dump()
7819 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_connect() local
7838 if (!nl80211_valid_auth_type(rdev, connect.auth_type, in nl80211_connect()
7846 err = nl80211_crypto_settings(rdev, info, &connect.crypto, in nl80211_connect()
7855 wiphy = &rdev->wiphy; in nl80211_connect()
7899 connkeys = nl80211_parse_connkeys(rdev, in nl80211_connect()
7942 if (!(rdev->wiphy.features & in nl80211_connect()
7944 !(rdev->wiphy.features & NL80211_FEATURE_QUIET)) { in nl80211_connect()
7952 err = cfg80211_connect(rdev, dev, &connect, connkeys, NULL); in nl80211_connect()
7961 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_disconnect() local
7979 ret = cfg80211_disconnect(rdev, dev, reason, true); in nl80211_disconnect()
7986 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_wiphy_netns() local
8008 if (!net_eq(wiphy_net(&rdev->wiphy), net)) in nl80211_wiphy_netns()
8009 err = cfg80211_switch_netns(rdev, net); in nl80211_wiphy_netns()
8017 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_setdel_pmksa() local
8040 rdev_ops = rdev->ops->set_pmksa; in nl80211_setdel_pmksa()
8043 rdev_ops = rdev->ops->del_pmksa; in nl80211_setdel_pmksa()
8053 return rdev_ops(&rdev->wiphy, dev, &pmksa); in nl80211_setdel_pmksa()
8058 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_flush_pmksa() local
8065 if (!rdev->ops->flush_pmksa) in nl80211_flush_pmksa()
8068 return rdev_flush_pmksa(rdev, dev); in nl80211_flush_pmksa()
8073 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_tdls_mgmt() local
8081 if (!(rdev->wiphy.flags & WIPHY_FLAG_SUPPORTS_TDLS) || in nl80211_tdls_mgmt()
8082 !rdev->ops->tdls_mgmt) in nl80211_tdls_mgmt()
8101 return rdev_tdls_mgmt(rdev, dev, peer, action_code, in nl80211_tdls_mgmt()
8110 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_tdls_oper() local
8115 if (!(rdev->wiphy.flags & WIPHY_FLAG_SUPPORTS_TDLS) || in nl80211_tdls_oper()
8116 !rdev->ops->tdls_oper) in nl80211_tdls_oper()
8126 return rdev_tdls_oper(rdev, dev, peer, operation); in nl80211_tdls_oper()
8132 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_remain_on_channel() local
8147 if (!rdev->ops->remain_on_channel || in nl80211_remain_on_channel()
8148 !(rdev->wiphy.flags & WIPHY_FLAG_HAS_REMAIN_ON_CHANNEL)) in nl80211_remain_on_channel()
8156 duration > rdev->wiphy.max_remain_on_channel_duration) in nl80211_remain_on_channel()
8159 err = nl80211_parse_chandef(rdev, info, &chandef); in nl80211_remain_on_channel()
8174 err = rdev_remain_on_channel(rdev, wdev, chandef.chan, in nl80211_remain_on_channel()
8197 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_cancel_remain_on_channel() local
8204 if (!rdev->ops->cancel_remain_on_channel) in nl80211_cancel_remain_on_channel()
8209 return rdev_cancel_remain_on_channel(rdev, wdev, cookie); in nl80211_cancel_remain_on_channel()
8337 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_set_tx_bitrate_mask() local
8345 if (!rdev->ops->set_bitrate_mask) in nl80211_set_tx_bitrate_mask()
8351 sband = rdev->wiphy.bands[i]; in nl80211_set_tx_bitrate_mask()
8383 sband = rdev->wiphy.bands[band]; in nl80211_set_tx_bitrate_mask()
8425 if (!(rdev->wiphy.bands[band]->ht_cap.ht_supported || in nl80211_set_tx_bitrate_mask()
8426 rdev->wiphy.bands[band]->vht_cap.vht_supported)) in nl80211_set_tx_bitrate_mask()
8443 return rdev_set_bitrate_mask(rdev, dev, NULL, &mask); in nl80211_set_tx_bitrate_mask()
8448 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_register_mgmt() local
8473 if (!rdev->ops->mgmt_tx) in nl80211_register_mgmt()
8483 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_tx_mgmt() local
8498 if (!rdev->ops->mgmt_tx) in nl80211_tx_mgmt()
8518 if (!(rdev->wiphy.flags & WIPHY_FLAG_OFFCHAN_TX)) in nl80211_tx_mgmt()
8527 params.wait > rdev->wiphy.max_remain_on_channel_duration) in nl80211_tx_mgmt()
8534 if (params.offchan && !(rdev->wiphy.flags & WIPHY_FLAG_OFFCHAN_TX)) in nl80211_tx_mgmt()
8544 err = nl80211_parse_chandef(rdev, info, &chandef); in nl80211_tx_mgmt()
8587 err = cfg80211_mlme_mgmt_tx(rdev, wdev, &params, &cookie); in nl80211_tx_mgmt()
8610 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_tx_mgmt_cancel_wait() local
8617 if (!rdev->ops->mgmt_tx_cancel_wait) in nl80211_tx_mgmt_cancel_wait()
8635 return rdev_mgmt_tx_cancel_wait(rdev, wdev, cookie); in nl80211_tx_mgmt_cancel_wait()
8640 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_set_power_save() local
8657 if (!rdev->ops->set_power_mgmt) in nl80211_set_power_save()
8665 err = rdev_set_power_mgmt(rdev, dev, state, wdev->ps_timeout); in nl80211_set_power_save()
8673 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_get_power_save() local
8683 if (!rdev->ops->set_power_mgmt) in nl80211_get_power_save()
8728 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_set_cqm_txe() local
8735 if (!rdev->ops->set_cqm_txe_config) in nl80211_set_cqm_txe()
8742 return rdev_set_cqm_txe_config(rdev, dev, rate, pkts, intvl); in nl80211_set_cqm_txe()
8748 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_set_cqm_rssi() local
8759 if (!rdev->ops->set_cqm_rssi_config) in nl80211_set_cqm_rssi()
8766 return rdev_set_cqm_rssi_config(rdev, dev, threshold, hysteresis); in nl80211_set_cqm_rssi()
8807 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_join_ocb() local
8812 err = nl80211_parse_chandef(rdev, info, &setup.chandef); in nl80211_join_ocb()
8816 return cfg80211_join_ocb(rdev, dev, &setup); in nl80211_join_ocb()
8821 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_leave_ocb() local
8824 return cfg80211_leave_ocb(rdev, dev); in nl80211_leave_ocb()
8829 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_join_mesh() local
8854 !nl80211_parse_mcast_rate(rdev, setup.mcast_rate, in nl80211_join_mesh()
8884 err = nl80211_parse_chandef(rdev, info, &setup.chandef); in nl80211_join_mesh()
8901 sband = rdev->wiphy.bands[setup.chandef.chan->band]; in nl80211_join_mesh()
8909 return cfg80211_join_mesh(rdev, dev, &setup, &cfg); in nl80211_join_mesh()
8914 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_leave_mesh() local
8917 return cfg80211_leave_mesh(rdev, dev); in nl80211_leave_mesh()
8922 struct cfg80211_registered_device *rdev) in nl80211_send_wowlan_patterns() argument
8924 struct cfg80211_wowlan *wowlan = rdev->wiphy.wowlan_config; in nl80211_send_wowlan_patterns()
9063 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_get_wowlan() local
9068 if (!rdev->wiphy.wowlan) in nl80211_get_wowlan()
9071 if (rdev->wiphy.wowlan_config && rdev->wiphy.wowlan_config->tcp) { in nl80211_get_wowlan()
9073 size += rdev->wiphy.wowlan_config->tcp->tokens_size + in nl80211_get_wowlan()
9074 rdev->wiphy.wowlan_config->tcp->payload_len + in nl80211_get_wowlan()
9075 rdev->wiphy.wowlan_config->tcp->wake_len + in nl80211_get_wowlan()
9076 rdev->wiphy.wowlan_config->tcp->wake_len / 8; in nl80211_get_wowlan()
9088 if (rdev->wiphy.wowlan_config) { in nl80211_get_wowlan()
9095 if ((rdev->wiphy.wowlan_config->any && in nl80211_get_wowlan()
9097 (rdev->wiphy.wowlan_config->disconnect && in nl80211_get_wowlan()
9099 (rdev->wiphy.wowlan_config->magic_pkt && in nl80211_get_wowlan()
9101 (rdev->wiphy.wowlan_config->gtk_rekey_failure && in nl80211_get_wowlan()
9103 (rdev->wiphy.wowlan_config->eap_identity_req && in nl80211_get_wowlan()
9105 (rdev->wiphy.wowlan_config->four_way_handshake && in nl80211_get_wowlan()
9107 (rdev->wiphy.wowlan_config->rfkill_release && in nl80211_get_wowlan()
9111 if (nl80211_send_wowlan_patterns(msg, rdev)) in nl80211_get_wowlan()
9115 rdev->wiphy.wowlan_config->tcp)) in nl80211_get_wowlan()
9120 rdev->wiphy.wowlan_config->nd_config)) in nl80211_get_wowlan()
9134 static int nl80211_parse_wowlan_tcp(struct cfg80211_registered_device *rdev, in nl80211_parse_wowlan_tcp() argument
9146 if (!rdev->wiphy.wowlan->tcp) in nl80211_parse_wowlan_tcp()
9166 if (data_size > rdev->wiphy.wowlan->tcp->data_payload_max) in nl80211_parse_wowlan_tcp()
9170 rdev->wiphy.wowlan->tcp->data_interval_max || in nl80211_parse_wowlan_tcp()
9175 if (wake_size > rdev->wiphy.wowlan->tcp->wake_payload_max) in nl80211_parse_wowlan_tcp()
9190 if (!rdev->wiphy.wowlan->tcp->tok) in nl80211_parse_wowlan_tcp()
9192 if (tok->len > rdev->wiphy.wowlan->tcp->tok->max_len) in nl80211_parse_wowlan_tcp()
9194 if (tok->len < rdev->wiphy.wowlan->tcp->tok->min_len) in nl80211_parse_wowlan_tcp()
9196 if (tokens_size > rdev->wiphy.wowlan->tcp->tok->bufsize) in nl80211_parse_wowlan_tcp()
9204 if (!rdev->wiphy.wowlan->tcp->seq) in nl80211_parse_wowlan_tcp()
9230 err = __sock_create(wiphy_net(&rdev->wiphy), PF_INET, SOCK_STREAM, in nl80211_parse_wowlan_tcp()
9279 static int nl80211_parse_wowlan_nd(struct cfg80211_registered_device *rdev, in nl80211_parse_wowlan_nd() argument
9302 trig->nd_config = nl80211_parse_sched_scan(&rdev->wiphy, NULL, tb); in nl80211_parse_wowlan_nd()
9314 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_set_wowlan() local
9318 const struct wiphy_wowlan_support *wowlan = rdev->wiphy.wowlan; in nl80211_set_wowlan()
9320 bool prev_enabled = rdev->wiphy.wowlan_config; in nl80211_set_wowlan()
9327 cfg80211_rdev_free_wowlan(rdev); in nl80211_set_wowlan()
9328 rdev->wiphy.wowlan_config = NULL; in nl80211_set_wowlan()
9461 rdev, tb[NL80211_WOWLAN_TRIG_TCP_CONNECTION], in nl80211_set_wowlan()
9470 rdev, wowlan, tb[NL80211_WOWLAN_TRIG_NET_DETECT], in nl80211_set_wowlan()
9492 cfg80211_rdev_free_wowlan(rdev); in nl80211_set_wowlan()
9493 rdev->wiphy.wowlan_config = ntrig; in nl80211_set_wowlan()
9496 if (rdev->ops->set_wakeup && in nl80211_set_wowlan()
9497 prev_enabled != !!rdev->wiphy.wowlan_config) in nl80211_set_wowlan()
9498 rdev_set_wakeup(rdev, rdev->wiphy.wowlan_config); in nl80211_set_wowlan()
9514 struct cfg80211_registered_device *rdev) in nl80211_send_coalesce_rules() argument
9520 if (!rdev->coalesce->n_rules) in nl80211_send_coalesce_rules()
9527 for (i = 0; i < rdev->coalesce->n_rules; i++) { in nl80211_send_coalesce_rules()
9532 rule = &rdev->coalesce->rules[i]; in nl80211_send_coalesce_rules()
9571 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_get_coalesce() local
9575 if (!rdev->wiphy.coalesce) in nl80211_get_coalesce()
9587 if (rdev->coalesce && nl80211_send_coalesce_rules(msg, rdev)) in nl80211_get_coalesce()
9598 void cfg80211_rdev_free_coalesce(struct cfg80211_registered_device *rdev) in cfg80211_rdev_free_coalesce() argument
9600 struct cfg80211_coalesce *coalesce = rdev->coalesce; in cfg80211_rdev_free_coalesce()
9615 rdev->coalesce = NULL; in cfg80211_rdev_free_coalesce()
9618 static int nl80211_parse_coalesce_rule(struct cfg80211_registered_device *rdev, in nl80211_parse_coalesce_rule() argument
9623 const struct wiphy_coalesce_support *coalesce = rdev->wiphy.coalesce; in nl80211_parse_coalesce_rule()
9709 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_set_coalesce() local
9710 const struct wiphy_coalesce_support *coalesce = rdev->wiphy.coalesce; in nl80211_set_coalesce()
9717 if (!rdev->wiphy.coalesce || !rdev->ops->set_coalesce) in nl80211_set_coalesce()
9721 cfg80211_rdev_free_coalesce(rdev); in nl80211_set_coalesce()
9722 rdev->ops->set_coalesce(&rdev->wiphy, NULL); in nl80211_set_coalesce()
9742 err = nl80211_parse_coalesce_rule(rdev, rule, in nl80211_set_coalesce()
9750 err = rdev->ops->set_coalesce(&rdev->wiphy, &new_coalesce); in nl80211_set_coalesce()
9759 cfg80211_rdev_free_coalesce(rdev); in nl80211_set_coalesce()
9760 rdev->coalesce = n_coalesce; in nl80211_set_coalesce()
9777 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_set_rekey_data() local
9811 if (!rdev->ops->set_rekey_data) { in nl80211_set_rekey_data()
9816 err = rdev_set_rekey_data(rdev, dev, &rekey_data); in nl80211_set_rekey_data()
9842 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_probe_client() local
9858 if (!rdev->ops->probe_client) in nl80211_probe_client()
9874 err = rdev_probe_client(rdev, dev, addr, &cookie); in nl80211_probe_client()
9894 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_register_beacons() local
9898 if (!(rdev->wiphy.flags & WIPHY_FLAG_REPORTS_OBSS)) in nl80211_register_beacons()
9906 spin_lock_bh(&rdev->beacon_registrations_lock); in nl80211_register_beacons()
9907 list_for_each_entry(reg, &rdev->beacon_registrations, list) { in nl80211_register_beacons()
9915 list_add(&nreg->list, &rdev->beacon_registrations); in nl80211_register_beacons()
9917 spin_unlock_bh(&rdev->beacon_registrations_lock); in nl80211_register_beacons()
9921 spin_unlock_bh(&rdev->beacon_registrations_lock); in nl80211_register_beacons()
9928 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_start_p2p_device() local
9932 if (!rdev->ops->start_p2p_device) in nl80211_start_p2p_device()
9941 if (rfkill_blocked(rdev->rfkill)) in nl80211_start_p2p_device()
9944 err = rdev_start_p2p_device(rdev, wdev); in nl80211_start_p2p_device()
9949 rdev->opencount++; in nl80211_start_p2p_device()
9956 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_stop_p2p_device() local
9962 if (!rdev->ops->stop_p2p_device) in nl80211_stop_p2p_device()
9965 cfg80211_stop_p2p_device(rdev, wdev); in nl80211_stop_p2p_device()
9999 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_update_ft_ies() local
10003 if (!rdev->ops->update_ft_ies) in nl80211_update_ft_ies()
10015 return rdev_update_ft_ies(rdev, dev, &ft_params); in nl80211_update_ft_ies()
10021 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_crit_protocol_start() local
10027 if (!rdev->ops->crit_proto_start) in nl80211_crit_protocol_start()
10030 if (WARN_ON(!rdev->ops->crit_proto_stop)) in nl80211_crit_protocol_start()
10033 if (rdev->crit_proto_nlportid) in nl80211_crit_protocol_start()
10053 ret = rdev_crit_proto_start(rdev, wdev, proto, duration); in nl80211_crit_protocol_start()
10055 rdev->crit_proto_nlportid = info->snd_portid; in nl80211_crit_protocol_start()
10063 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_crit_protocol_stop() local
10066 if (!rdev->ops->crit_proto_stop) in nl80211_crit_protocol_stop()
10069 if (rdev->crit_proto_nlportid) { in nl80211_crit_protocol_stop()
10070 rdev->crit_proto_nlportid = 0; in nl80211_crit_protocol_stop()
10071 rdev_crit_proto_stop(rdev, wdev); in nl80211_crit_protocol_stop()
10078 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_vendor_cmd() local
10084 if (!rdev->wiphy.vendor_commands) in nl80211_vendor_cmd()
10092 } else if (wdev->wiphy != &rdev->wiphy) { in nl80211_vendor_cmd()
10102 for (i = 0; i < rdev->wiphy.n_vendor_commands; i++) { in nl80211_vendor_cmd()
10107 vcmd = &rdev->wiphy.vendor_commands[i]; in nl80211_vendor_cmd()
10139 rdev->cur_cmd_info = info; in nl80211_vendor_cmd()
10140 err = rdev->wiphy.vendor_commands[i].doit(&rdev->wiphy, wdev, in nl80211_vendor_cmd()
10142 rdev->cur_cmd_info = NULL; in nl80211_vendor_cmd()
10151 struct cfg80211_registered_device **rdev, in nl80211_prepare_vendor_dump() argument
10172 *rdev = wiphy_to_rdev(wiphy); in nl80211_prepare_vendor_dump()
10176 list_for_each_entry(tmp, &(*rdev)->wdev_list, list) { in nl80211_prepare_vendor_dump()
10205 *rdev = __cfg80211_rdev_from_attrs(sock_net(skb->sk), in nl80211_prepare_vendor_dump()
10207 if (IS_ERR(*rdev)) { in nl80211_prepare_vendor_dump()
10208 err = PTR_ERR(*rdev); in nl80211_prepare_vendor_dump()
10215 for (i = 0; i < (*rdev)->wiphy.n_vendor_commands; i++) { in nl80211_prepare_vendor_dump()
10218 vcmd = &(*rdev)->wiphy.vendor_commands[i]; in nl80211_prepare_vendor_dump()
10243 cb->args[0] = (*rdev)->wiphy_idx + 1; in nl80211_prepare_vendor_dump()
10260 struct cfg80211_registered_device *rdev; in nl80211_vendor_cmd_dump() local
10269 err = nl80211_prepare_vendor_dump(skb, cb, &rdev, &wdev); in nl80211_vendor_cmd_dump()
10276 vcmd = &rdev->wiphy.vendor_commands[vcmd_idx]; in nl80211_vendor_cmd_dump()
10302 if (nla_put_u32(skb, NL80211_ATTR_WIPHY, rdev->wiphy_idx) || in nl80211_vendor_cmd_dump()
10315 err = vcmd->dumpit(&rdev->wiphy, wdev, skb, data, data_len, in nl80211_vendor_cmd_dump()
10341 struct cfg80211_registered_device *rdev = wiphy_to_rdev(wiphy); in __cfg80211_alloc_reply_skb() local
10343 if (WARN_ON(!rdev->cur_cmd_info)) in __cfg80211_alloc_reply_skb()
10346 return __cfg80211_alloc_vendor_skb(rdev, NULL, approxlen, in __cfg80211_alloc_reply_skb()
10347 rdev->cur_cmd_info->snd_portid, in __cfg80211_alloc_reply_skb()
10348 rdev->cur_cmd_info->snd_seq, in __cfg80211_alloc_reply_skb()
10355 struct cfg80211_registered_device *rdev = ((void **)skb->cb)[0]; in cfg80211_vendor_cmd_reply() local
10362 if (WARN_ON(!rdev->cur_cmd_info)) { in cfg80211_vendor_cmd_reply()
10369 return genlmsg_reply(skb, rdev->cur_cmd_info); in cfg80211_vendor_cmd_reply()
10377 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_set_qos_map() local
10383 if (!rdev->ops->set_qos_map) in nl80211_set_qos_map()
10418 ret = rdev_set_qos_map(rdev, dev, qos_map); in nl80211_set_qos_map()
10427 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_add_tx_ts() local
10435 if (!(rdev->wiphy.features & NL80211_FEATURE_SUPPORTS_WMM_ADMISSION)) in nl80211_add_tx_ts()
10481 err = rdev_add_tx_ts(rdev, dev, tsid, peer, up, admitted_time); in nl80211_add_tx_ts()
10490 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_del_tx_ts() local
10504 err = rdev_del_tx_ts(rdev, dev, tsid, peer); in nl80211_del_tx_ts()
10513 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_tdls_channel_switch() local
10521 if (!rdev->ops->tdls_channel_switch || in nl80211_tdls_channel_switch()
10522 !(rdev->wiphy.features & NL80211_FEATURE_TDLS_CHANNEL_SWITCH)) in nl80211_tdls_channel_switch()
10537 err = nl80211_parse_chandef(rdev, info, &chandef); in nl80211_tdls_channel_switch()
10552 if (!cfg80211_reg_can_beacon_relax(&rdev->wiphy, &chandef, in nl80211_tdls_channel_switch()
10564 err = rdev_tdls_channel_switch(rdev, dev, addr, oper_class, &chandef); in nl80211_tdls_channel_switch()
10573 struct cfg80211_registered_device *rdev = info->user_ptr[0]; in nl80211_tdls_cancel_channel_switch() local
10578 if (!rdev->ops->tdls_channel_switch || in nl80211_tdls_cancel_channel_switch()
10579 !rdev->ops->tdls_cancel_channel_switch || in nl80211_tdls_cancel_channel_switch()
10580 !(rdev->wiphy.features & NL80211_FEATURE_TDLS_CHANNEL_SWITCH)) in nl80211_tdls_cancel_channel_switch()
10597 rdev_tdls_cancel_channel_switch(rdev, dev, addr); in nl80211_tdls_cancel_channel_switch()
10618 struct cfg80211_registered_device *rdev; in nl80211_pre_doit() local
10627 rdev = cfg80211_get_dev_from_info(genl_info_net(info), info); in nl80211_pre_doit()
10628 if (IS_ERR(rdev)) { in nl80211_pre_doit()
10631 return PTR_ERR(rdev); in nl80211_pre_doit()
10633 info->user_ptr[0] = rdev; in nl80211_pre_doit()
10647 rdev = wiphy_to_rdev(wdev->wiphy); in nl80211_pre_doit()
10678 info->user_ptr[0] = rdev; in nl80211_pre_doit()
11425 void nl80211_notify_wiphy(struct cfg80211_registered_device *rdev, in nl80211_notify_wiphy() argument
11438 if (nl80211_send_wiphy(rdev, cmd, msg, 0, 0, 0, &state) < 0) { in nl80211_notify_wiphy()
11443 genlmsg_multicast_netns(&nl80211_fam, wiphy_net(&rdev->wiphy), msg, 0, in nl80211_notify_wiphy()
11448 struct cfg80211_registered_device *rdev) in nl80211_add_scan_req() argument
11450 struct cfg80211_scan_request *req = rdev->scan_req; in nl80211_add_scan_req()
11489 struct cfg80211_registered_device *rdev, in nl80211_send_scan_msg() argument
11500 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) || in nl80211_send_scan_msg()
11507 nl80211_add_scan_req(msg, rdev); in nl80211_send_scan_msg()
11519 struct cfg80211_registered_device *rdev, in nl80211_send_sched_scan_msg() argument
11529 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) || in nl80211_send_sched_scan_msg()
11541 void nl80211_send_scan_start(struct cfg80211_registered_device *rdev, in nl80211_send_scan_start() argument
11550 if (nl80211_send_scan_msg(msg, rdev, wdev, 0, 0, 0, in nl80211_send_scan_start()
11556 genlmsg_multicast_netns(&nl80211_fam, wiphy_net(&rdev->wiphy), msg, 0, in nl80211_send_scan_start()
11560 struct sk_buff *nl80211_build_scan_msg(struct cfg80211_registered_device *rdev, in nl80211_build_scan_msg() argument
11569 if (nl80211_send_scan_msg(msg, rdev, wdev, 0, 0, 0, in nl80211_build_scan_msg()
11579 void nl80211_send_scan_result(struct cfg80211_registered_device *rdev, in nl80211_send_scan_result() argument
11585 genlmsg_multicast_netns(&nl80211_fam, wiphy_net(&rdev->wiphy), msg, 0, in nl80211_send_scan_result()
11589 void nl80211_send_sched_scan_results(struct cfg80211_registered_device *rdev, in nl80211_send_sched_scan_results() argument
11598 if (nl80211_send_sched_scan_msg(msg, rdev, netdev, 0, 0, 0, in nl80211_send_sched_scan_results()
11604 genlmsg_multicast_netns(&nl80211_fam, wiphy_net(&rdev->wiphy), msg, 0, in nl80211_send_sched_scan_results()
11608 void nl80211_send_sched_scan(struct cfg80211_registered_device *rdev, in nl80211_send_sched_scan() argument
11617 if (nl80211_send_sched_scan_msg(msg, rdev, netdev, 0, 0, 0, cmd) < 0) { in nl80211_send_sched_scan()
11622 genlmsg_multicast_netns(&nl80211_fam, wiphy_net(&rdev->wiphy), msg, 0, in nl80211_send_sched_scan()
11710 static void nl80211_send_mlme_event(struct cfg80211_registered_device *rdev, in nl80211_send_mlme_event() argument
11729 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) || in nl80211_send_mlme_event()
11749 genlmsg_multicast_netns(&nl80211_fam, wiphy_net(&rdev->wiphy), msg, 0, in nl80211_send_mlme_event()
11758 void nl80211_send_rx_auth(struct cfg80211_registered_device *rdev, in nl80211_send_rx_auth() argument
11762 nl80211_send_mlme_event(rdev, netdev, buf, len, in nl80211_send_rx_auth()
11766 void nl80211_send_rx_assoc(struct cfg80211_registered_device *rdev, in nl80211_send_rx_assoc() argument
11770 nl80211_send_mlme_event(rdev, netdev, buf, len, in nl80211_send_rx_assoc()
11774 void nl80211_send_deauth(struct cfg80211_registered_device *rdev, in nl80211_send_deauth() argument
11778 nl80211_send_mlme_event(rdev, netdev, buf, len, in nl80211_send_deauth()
11782 void nl80211_send_disassoc(struct cfg80211_registered_device *rdev, in nl80211_send_disassoc() argument
11786 nl80211_send_mlme_event(rdev, netdev, buf, len, in nl80211_send_disassoc()
11795 struct cfg80211_registered_device *rdev = wiphy_to_rdev(wiphy); in cfg80211_rx_unprot_mlme_mgmt() local
11808 nl80211_send_mlme_event(rdev, dev, buf, len, cmd, GFP_ATOMIC, -1); in cfg80211_rx_unprot_mlme_mgmt()
11812 static void nl80211_send_mlme_timeout(struct cfg80211_registered_device *rdev, in nl80211_send_mlme_timeout() argument
11829 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) || in nl80211_send_mlme_timeout()
11837 genlmsg_multicast_netns(&nl80211_fam, wiphy_net(&rdev->wiphy), msg, 0, in nl80211_send_mlme_timeout()
11846 void nl80211_send_auth_timeout(struct cfg80211_registered_device *rdev, in nl80211_send_auth_timeout() argument
11850 nl80211_send_mlme_timeout(rdev, netdev, NL80211_CMD_AUTHENTICATE, in nl80211_send_auth_timeout()
11854 void nl80211_send_assoc_timeout(struct cfg80211_registered_device *rdev, in nl80211_send_assoc_timeout() argument
11858 nl80211_send_mlme_timeout(rdev, netdev, NL80211_CMD_ASSOCIATE, in nl80211_send_assoc_timeout()
11862 void nl80211_send_connect_result(struct cfg80211_registered_device *rdev, in nl80211_send_connect_result() argument
11881 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) || in nl80211_send_connect_result()
11893 genlmsg_multicast_netns(&nl80211_fam, wiphy_net(&rdev->wiphy), msg, 0, in nl80211_send_connect_result()
11903 void nl80211_send_roamed(struct cfg80211_registered_device *rdev, in nl80211_send_roamed() argument
11921 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) || in nl80211_send_roamed()
11932 genlmsg_multicast_netns(&nl80211_fam, wiphy_net(&rdev->wiphy), msg, 0, in nl80211_send_roamed()
11942 void nl80211_send_disconnected(struct cfg80211_registered_device *rdev, in nl80211_send_disconnected() argument
11959 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) || in nl80211_send_disconnected()
11970 genlmsg_multicast_netns(&nl80211_fam, wiphy_net(&rdev->wiphy), msg, 0, in nl80211_send_disconnected()
11980 void nl80211_send_ibss_bssid(struct cfg80211_registered_device *rdev, in nl80211_send_ibss_bssid() argument
11997 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) || in nl80211_send_ibss_bssid()
12004 genlmsg_multicast_netns(&nl80211_fam, wiphy_net(&rdev->wiphy), msg, 0, in nl80211_send_ibss_bssid()
12017 struct cfg80211_registered_device *rdev = wiphy_to_rdev(wdev->wiphy); in cfg80211_notify_new_peer_candidate() local
12036 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) || in cfg80211_notify_new_peer_candidate()
12045 genlmsg_multicast_netns(&nl80211_fam, wiphy_net(&rdev->wiphy), msg, 0, in cfg80211_notify_new_peer_candidate()
12055 void nl80211_michael_mic_failure(struct cfg80211_registered_device *rdev, in nl80211_michael_mic_failure() argument
12073 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) || in nl80211_michael_mic_failure()
12084 genlmsg_multicast_netns(&nl80211_fam, wiphy_net(&rdev->wiphy), msg, 0, in nl80211_michael_mic_failure()
12149 int cmd, struct cfg80211_registered_device *rdev, in nl80211_send_remain_on_chan_event() argument
12167 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) || in nl80211_send_remain_on_chan_event()
12183 genlmsg_multicast_netns(&nl80211_fam, wiphy_net(&rdev->wiphy), msg, 0, in nl80211_send_remain_on_chan_event()
12197 struct cfg80211_registered_device *rdev = wiphy_to_rdev(wiphy); in cfg80211_ready_on_channel() local
12201 rdev, wdev, cookie, chan, in cfg80211_ready_on_channel()
12211 struct cfg80211_registered_device *rdev = wiphy_to_rdev(wiphy); in cfg80211_remain_on_channel_expired() local
12215 rdev, wdev, cookie, chan, 0, gfp); in cfg80211_remain_on_channel_expired()
12223 struct cfg80211_registered_device *rdev = wiphy_to_rdev(wiphy); in cfg80211_new_sta() local
12233 rdev, dev, mac_addr, sinfo) < 0) { in cfg80211_new_sta()
12238 genlmsg_multicast_netns(&nl80211_fam, wiphy_net(&rdev->wiphy), msg, 0, in cfg80211_new_sta()
12247 struct cfg80211_registered_device *rdev = wiphy_to_rdev(wiphy); in cfg80211_del_sta_sinfo() local
12261 rdev, dev, mac_addr, sinfo) < 0) { in cfg80211_del_sta_sinfo()
12266 genlmsg_multicast_netns(&nl80211_fam, wiphy_net(&rdev->wiphy), msg, 0, in cfg80211_del_sta_sinfo()
12276 struct cfg80211_registered_device *rdev = wiphy_to_rdev(wiphy); in cfg80211_conn_failed() local
12297 genlmsg_multicast_netns(&nl80211_fam, wiphy_net(&rdev->wiphy), msg, 0, in cfg80211_conn_failed()
12311 struct cfg80211_registered_device *rdev = wiphy_to_rdev(wdev->wiphy); in __nl80211_unexpected_frame() local
12329 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) || in __nl80211_unexpected_frame()
12335 genlmsg_unicast(wiphy_net(&rdev->wiphy), msg, nlportid); in __nl80211_unexpected_frame()
12386 int nl80211_send_mgmt(struct cfg80211_registered_device *rdev, in nl80211_send_mgmt() argument
12405 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) || in nl80211_send_mgmt()
12419 return genlmsg_unicast(wiphy_net(&rdev->wiphy), msg, nlportid); in nl80211_send_mgmt()
12431 struct cfg80211_registered_device *rdev = wiphy_to_rdev(wiphy); in cfg80211_mgmt_tx_status() local
12448 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) || in cfg80211_mgmt_tx_status()
12459 genlmsg_multicast_netns(&nl80211_fam, wiphy_net(&rdev->wiphy), msg, 0, in cfg80211_mgmt_tx_status()
12473 struct cfg80211_registered_device *rdev = wiphy_to_rdev(wdev->wiphy); in cfg80211_prepare_cqm() local
12488 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) || in cfg80211_prepare_cqm()
12499 cb[2] = rdev; in cfg80211_prepare_cqm()
12510 struct cfg80211_registered_device *rdev = cb[2]; in cfg80211_send_cqm() local
12517 genlmsg_multicast_netns(&nl80211_fam, wiphy_net(&rdev->wiphy), msg, 0, in cfg80211_send_cqm()
12618 static void nl80211_gtk_rekey_notify(struct cfg80211_registered_device *rdev, in nl80211_gtk_rekey_notify() argument
12636 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) || in nl80211_gtk_rekey_notify()
12653 genlmsg_multicast_netns(&nl80211_fam, wiphy_net(&rdev->wiphy), msg, 0, in nl80211_gtk_rekey_notify()
12667 struct cfg80211_registered_device *rdev = wiphy_to_rdev(wiphy); in cfg80211_gtk_rekey_notify() local
12670 nl80211_gtk_rekey_notify(rdev, dev, bssid, replay_ctr, gfp); in cfg80211_gtk_rekey_notify()
12675 nl80211_pmksa_candidate_notify(struct cfg80211_registered_device *rdev, in nl80211_pmksa_candidate_notify() argument
12693 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) || in nl80211_pmksa_candidate_notify()
12711 genlmsg_multicast_netns(&nl80211_fam, wiphy_net(&rdev->wiphy), msg, 0, in nl80211_pmksa_candidate_notify()
12725 struct cfg80211_registered_device *rdev = wiphy_to_rdev(wiphy); in cfg80211_pmksa_candidate_notify() local
12728 nl80211_pmksa_candidate_notify(rdev, dev, index, bssid, preauth, gfp); in cfg80211_pmksa_candidate_notify()
12732 static void nl80211_ch_switch_notify(struct cfg80211_registered_device *rdev, in nl80211_ch_switch_notify() argument
12764 genlmsg_multicast_netns(&nl80211_fam, wiphy_net(&rdev->wiphy), msg, 0, in nl80211_ch_switch_notify()
12778 struct cfg80211_registered_device *rdev = wiphy_to_rdev(wiphy); in cfg80211_ch_switch_notify() local
12786 nl80211_ch_switch_notify(rdev, dev, chandef, GFP_KERNEL, in cfg80211_ch_switch_notify()
12797 struct cfg80211_registered_device *rdev = wiphy_to_rdev(wiphy); in cfg80211_ch_switch_started_notify() local
12801 nl80211_ch_switch_notify(rdev, dev, chandef, GFP_KERNEL, in cfg80211_ch_switch_started_notify()
12807 nl80211_radar_notify(struct cfg80211_registered_device *rdev, in nl80211_radar_notify() argument
12825 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx)) in nl80211_radar_notify()
12845 genlmsg_multicast_netns(&nl80211_fam, wiphy_net(&rdev->wiphy), msg, 0, in nl80211_radar_notify()
12858 struct cfg80211_registered_device *rdev = wiphy_to_rdev(wdev->wiphy); in cfg80211_probe_status() local
12875 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) || in cfg80211_probe_status()
12884 genlmsg_multicast_netns(&nl80211_fam, wiphy_net(&rdev->wiphy), msg, 0, in cfg80211_probe_status()
12898 struct cfg80211_registered_device *rdev = wiphy_to_rdev(wiphy); in cfg80211_report_obss_beacon() local
12905 spin_lock_bh(&rdev->beacon_registrations_lock); in cfg80211_report_obss_beacon()
12906 list_for_each_entry(reg, &rdev->beacon_registrations, list) { in cfg80211_report_obss_beacon()
12909 spin_unlock_bh(&rdev->beacon_registrations_lock); in cfg80211_report_obss_beacon()
12917 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) || in cfg80211_report_obss_beacon()
12927 genlmsg_unicast(wiphy_net(&rdev->wiphy), msg, reg->nlportid); in cfg80211_report_obss_beacon()
12929 spin_unlock_bh(&rdev->beacon_registrations_lock); in cfg80211_report_obss_beacon()
12933 spin_unlock_bh(&rdev->beacon_registrations_lock); in cfg80211_report_obss_beacon()
13004 struct cfg80211_registered_device *rdev = wiphy_to_rdev(wdev->wiphy); in cfg80211_report_wowlan_wakeup() local
13022 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) || in cfg80211_report_wowlan_wakeup()
13103 genlmsg_multicast_netns(&nl80211_fam, wiphy_net(&rdev->wiphy), msg, 0, in cfg80211_report_wowlan_wakeup()
13118 struct cfg80211_registered_device *rdev = wiphy_to_rdev(wdev->wiphy); in cfg80211_tdls_oper_request() local
13135 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) || in cfg80211_tdls_oper_request()
13145 genlmsg_multicast_netns(&nl80211_fam, wiphy_net(&rdev->wiphy), msg, 0, in cfg80211_tdls_oper_request()
13160 struct cfg80211_registered_device *rdev; in nl80211_netlink_notify() local
13169 list_for_each_entry_rcu(rdev, &cfg80211_rdev_list, list) { in nl80211_netlink_notify()
13173 rcu_dereference(rdev->sched_scan_req); in nl80211_netlink_notify()
13179 list_for_each_entry_rcu(wdev, &rdev->wdev_list, list) { in nl80211_netlink_notify()
13186 spin_lock_bh(&rdev->beacon_registrations_lock); in nl80211_netlink_notify()
13187 list_for_each_entry_safe(reg, tmp, &rdev->beacon_registrations, in nl80211_netlink_notify()
13195 spin_unlock_bh(&rdev->beacon_registrations_lock); in nl80211_netlink_notify()
13203 spin_lock(&rdev->destroy_list_lock); in nl80211_netlink_notify()
13204 list_add(&destroy->list, &rdev->destroy_list); in nl80211_netlink_notify()
13205 spin_unlock(&rdev->destroy_list_lock); in nl80211_netlink_notify()
13206 schedule_work(&rdev->destroy_work); in nl80211_netlink_notify()
13211 if (rdev->ops->sched_scan_stop && in nl80211_netlink_notify()
13212 rdev->wiphy.flags & WIPHY_FLAG_SUPPORTS_SCHED_SCAN) in nl80211_netlink_notify()
13213 schedule_work(&rdev->sched_scan_stop_wk); in nl80211_netlink_notify()
13235 struct cfg80211_registered_device *rdev = wiphy_to_rdev(wiphy); in cfg80211_ft_event() local
13252 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) || in cfg80211_ft_event()
13267 genlmsg_multicast_netns(&nl80211_fam, wiphy_net(&rdev->wiphy), msg, 0, in cfg80211_ft_event()
13277 struct cfg80211_registered_device *rdev; in cfg80211_crit_proto_stopped() local
13282 rdev = wiphy_to_rdev(wdev->wiphy); in cfg80211_crit_proto_stopped()
13283 if (!rdev->crit_proto_nlportid) in cfg80211_crit_proto_stopped()
13286 nlportid = rdev->crit_proto_nlportid; in cfg80211_crit_proto_stopped()
13287 rdev->crit_proto_nlportid = 0; in cfg80211_crit_proto_stopped()
13297 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) || in cfg80211_crit_proto_stopped()
13303 genlmsg_unicast(wiphy_net(&rdev->wiphy), msg, nlportid); in cfg80211_crit_proto_stopped()
13317 struct cfg80211_registered_device *rdev = wiphy_to_rdev(wiphy); in nl80211_send_ap_stopped() local
13329 if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx) || in nl80211_send_ap_stopped()