Lines Matching full:local

85 static u32 __ieee80211_idle_off(struct ieee80211_local *local)  in __ieee80211_idle_off()  argument
87 if (!(local->hw.conf.flags & IEEE80211_CONF_IDLE)) in __ieee80211_idle_off()
90 local->hw.conf.flags &= ~IEEE80211_CONF_IDLE; in __ieee80211_idle_off()
94 static u32 __ieee80211_idle_on(struct ieee80211_local *local) in __ieee80211_idle_on() argument
96 if (local->hw.conf.flags & IEEE80211_CONF_IDLE) in __ieee80211_idle_on()
99 ieee80211_flush_queues(local, NULL, false); in __ieee80211_idle_on()
101 local->hw.conf.flags |= IEEE80211_CONF_IDLE; in __ieee80211_idle_on()
105 static u32 __ieee80211_recalc_idle(struct ieee80211_local *local, in __ieee80211_recalc_idle() argument
112 lockdep_assert_wiphy(local->hw.wiphy); in __ieee80211_recalc_idle()
115 !list_empty(&local->chanctx_list) || in __ieee80211_recalc_idle()
116 local->monitors; in __ieee80211_recalc_idle()
118 working = !local->ops->remain_on_channel && in __ieee80211_recalc_idle()
119 !list_empty(&local->roc_list); in __ieee80211_recalc_idle()
121 list_for_each_entry(iter, &local->interfaces, list) { in __ieee80211_recalc_idle()
129 scanning = test_bit(SCAN_SW_SCANNING, &local->scanning) || in __ieee80211_recalc_idle()
130 test_bit(SCAN_ONCHANNEL_SCANNING, &local->scanning); in __ieee80211_recalc_idle()
142 ieee80211_mod_tpt_led_trig(local, led_trig_start, led_trig_stop); in __ieee80211_recalc_idle()
145 return __ieee80211_idle_off(local); in __ieee80211_recalc_idle()
146 return __ieee80211_idle_on(local); in __ieee80211_recalc_idle()
149 u32 ieee80211_idle_off(struct ieee80211_local *local) in ieee80211_idle_off() argument
151 return __ieee80211_recalc_idle(local, true); in ieee80211_idle_off()
154 void ieee80211_recalc_idle(struct ieee80211_local *local) in ieee80211_recalc_idle() argument
156 u32 change = __ieee80211_recalc_idle(local, false); in ieee80211_recalc_idle()
158 ieee80211_hw_config(local, -1, change); in ieee80211_recalc_idle()
164 struct ieee80211_local *local = sdata->local; in ieee80211_verify_mac() local
170 lockdep_assert_wiphy(local->hw.wiphy); in ieee80211_verify_mac()
172 if (is_zero_ether_addr(local->hw.wiphy->addr_mask)) in ieee80211_verify_mac()
180 m = local->hw.wiphy->addr_mask; in ieee80211_verify_mac()
188 list_for_each_entry(iter, &local->interfaces, list) { in ieee80211_verify_mac()
213 struct ieee80211_local *local = sdata->local; in ieee80211_can_powered_addr_change() local
217 lockdep_assert_wiphy(local->hw.wiphy); in ieee80211_can_powered_addr_change()
231 list_for_each_entry(roc, &local->roc_list, list) { in ieee80211_can_powered_addr_change()
242 if (local->scanning) { in ieee80211_can_powered_addr_change()
243 scan_sdata = rcu_dereference_protected(local->scan_sdata, in ieee80211_can_powered_addr_change()
244 lockdep_is_held(&local->hw.wiphy->mtx)); in ieee80211_can_powered_addr_change()
271 struct ieee80211_local *local = sdata->local; in _ieee80211_change_mac() local
294 drv_remove_interface(local, sdata); in _ieee80211_change_mac()
306 WARN_ON(drv_add_interface(local, sdata)); in _ieee80211_change_mac()
314 struct ieee80211_local *local = sdata->local; in ieee80211_change_mac() local
324 guard(wiphy)(local->hw.wiphy); in ieee80211_change_mac()
344 struct ieee80211_local *local = sdata->local; in ieee80211_check_concurrent_iface() local
348 lockdep_assert_wiphy(local->hw.wiphy); in ieee80211_check_concurrent_iface()
351 list_for_each_entry(nsdata, &local->interfaces, list) { in ieee80211_check_concurrent_iface()
423 int n_queues = sdata->local->hw.queues; in ieee80211_check_queues()
443 !ieee80211_hw_check(&sdata->local->hw, QUEUE_CONTROL)) { in ieee80211_check_queues()
466 guard(wiphy)(sdata->local->hw.wiphy); in ieee80211_open()
477 struct ieee80211_local *local = sdata->local; in ieee80211_do_stop() local
488 lockdep_assert_wiphy(local->hw.wiphy); in ieee80211_do_stop()
493 cancel_scan = rcu_access_pointer(local->scan_sdata) == sdata; in ieee80211_do_stop()
495 ieee80211_scan_cancel(local); in ieee80211_do_stop()
497 ieee80211_roc_purge(local, sdata); in ieee80211_do_stop()
535 atomic_dec(&local->iff_allmultis); in ieee80211_do_stop()
538 local->fif_pspoll--; in ieee80211_do_stop()
539 local->fif_probe_req--; in ieee80211_do_stop()
541 local->fif_probe_req--; in ieee80211_do_stop()
546 spin_lock_bh(&local->filter_lock); in ieee80211_do_stop()
547 __hw_addr_unsync(&local->mc_list, &sdata->dev->mc, in ieee80211_do_stop()
549 spin_unlock_bh(&local->filter_lock); in ieee80211_do_stop()
553 timer_delete_sync(&local->dynamic_ps_timer); in ieee80211_do_stop()
554 wiphy_work_cancel(local->hw.wiphy, &local->dynamic_ps_enable_work); in ieee80211_do_stop()
565 wiphy_work_cancel(local->hw.wiphy, &sdata->deflink.csa.finalize_work); in ieee80211_do_stop()
566 wiphy_work_cancel(local->hw.wiphy, in ieee80211_do_stop()
568 wiphy_hrtimer_work_cancel(local->hw.wiphy, in ieee80211_do_stop()
573 WARN_ON(local->suspended); in ieee80211_do_stop()
590 local->total_ps_buffered--; in ieee80211_do_stop()
591 ieee80211_free_txskb(&local->hw, skb); in ieee80211_do_stop()
598 local->open_count--; in ieee80211_do_stop()
609 local->monitors--; in ieee80211_do_stop()
612 !ieee80211_hw_check(&local->hw, NO_VIRTUAL_MONITOR)) { in ieee80211_do_stop()
614 local->virt_monitors--; in ieee80211_do_stop()
615 if (local->virt_monitors == 0) { in ieee80211_do_stop()
616 local->hw.conf.flags &= ~IEEE80211_CONF_MONITOR; in ieee80211_do_stop()
636 wiphy_work_cancel(sdata->local->hw.wiphy, &sdata->work); in ieee80211_do_stop()
660 /* unlink from local queues... */ in ieee80211_do_stop()
661 spin_lock_irqsave(&local->queue_stop_reason_lock, flags); in ieee80211_do_stop()
663 skb_queue_walk_safe(&local->pending[i], skb, tmp) { in ieee80211_do_stop()
666 __skb_unlink(skb, &local->pending[i]); in ieee80211_do_stop()
671 spin_unlock_irqrestore(&local->queue_stop_reason_lock, flags); in ieee80211_do_stop()
676 ieee80211_free_txskb(&local->hw, skb); in ieee80211_do_stop()
680 ieee80211_txq_remove_vlan(local, sdata); in ieee80211_do_stop()
683 ieee80211_txq_purge(sdata->local, to_txq_info(sdata->vif.txq)); in ieee80211_do_stop()
687 if (local->open_count == 0) in ieee80211_do_stop()
688 ieee80211_clear_tx_pending(local); in ieee80211_do_stop()
701 if (local->suspended) { in ieee80211_do_stop()
702 WARN_ON(local->wowlan); in ieee80211_do_stop()
703 WARN_ON(rcu_access_pointer(local->monitor_sdata)); in ieee80211_do_stop()
711 if (local->virt_monitors == 0) in ieee80211_do_stop()
712 ieee80211_del_virtual_monitor(local); in ieee80211_do_stop()
714 ieee80211_recalc_idle(local); in ieee80211_do_stop()
715 ieee80211_recalc_offload(local); in ieee80211_do_stop()
718 !ieee80211_hw_check(&local->hw, NO_VIRTUAL_MONITOR)) in ieee80211_do_stop()
726 drv_remove_interface(local, sdata); in ieee80211_do_stop()
729 memset(sdata->vif.drv_priv, 0, local->hw.vif_data_size); in ieee80211_do_stop()
732 ieee80211_recalc_ps(local); in ieee80211_do_stop()
735 wiphy_delayed_work_flush(local->hw.wiphy, &local->scan_work); in ieee80211_do_stop()
737 if (local->open_count == 0) { in ieee80211_do_stop()
738 ieee80211_stop_device(local, false); in ieee80211_do_stop()
745 ieee80211_configure_filter(local); in ieee80211_do_stop()
746 ieee80211_hw_config(local, -1, hw_reconf_flags); in ieee80211_do_stop()
749 if (local->virt_monitors == local->open_count) in ieee80211_do_stop()
750 ieee80211_add_virtual_monitor(local, NULL); in ieee80211_do_stop()
760 lockdep_assert_wiphy(sdata->local->hw.wiphy); in ieee80211_stop_mbssid()
786 for_each_sdata_link(tx_sdata->local, link) { in ieee80211_stop_mbssid()
822 guard(wiphy)(sdata->local->hw.wiphy); in ieee80211_stop()
824 wiphy_work_cancel(sdata->local->hw.wiphy, &sdata->activate_links_work); in ieee80211_stop()
840 struct ieee80211_local *local = sdata->local; in ieee80211_set_multicast_list() local
848 atomic_inc(&local->iff_allmultis); in ieee80211_set_multicast_list()
850 atomic_dec(&local->iff_allmultis); in ieee80211_set_multicast_list()
854 spin_lock_bh(&local->filter_lock); in ieee80211_set_multicast_list()
855 __hw_addr_sync(&local->mc_list, &dev->mc, dev->addr_len); in ieee80211_set_multicast_list()
856 spin_unlock_bh(&local->filter_lock); in ieee80211_set_multicast_list()
857 wiphy_work_queue(local->hw.wiphy, &local->reconfig_filter); in ieee80211_set_multicast_list()
867 wiphy_work_cancel(sdata->local->hw.wiphy, &sdata->work); in ieee80211_teardown_sdata()
892 struct ieee80211_local *local = sdata->local; in ieee80211_netdev_setup_tc() local
894 return drv_net_setup_tc(local, sdata, dev, type, type_data); in ieee80211_netdev_setup_tc()
912 struct ieee80211_local *local = sdata->local; in ieee80211_monitor_select_queue() local
917 if (local->hw.queues < IEEE80211_NUM_ACS) in ieee80211_monitor_select_queue()
949 struct ieee80211_local *local; in ieee80211_netdev_fill_forward_path() local
954 local = sdata->local; in ieee80211_netdev_fill_forward_path()
956 if (!local->ops->net_fill_forward_path) in ieee80211_netdev_fill_forward_path()
996 ret = drv_net_fill_forward_path(local, sdata, &sta->sta, ctx, path); in ieee80211_netdev_fill_forward_path()
1028 struct ieee80211_local *local = sdata->local; in ieee80211_set_sdata_offload_flags() local
1033 if (ieee80211_hw_check(&local->hw, SUPPORTS_TX_ENCAP_OFFLOAD) && in ieee80211_set_sdata_offload_flags()
1037 if (!ieee80211_hw_check(&local->hw, SUPPORTS_TX_FRAG) && in ieee80211_set_sdata_offload_flags()
1038 local->hw.wiphy->frag_threshold != (u32)-1) in ieee80211_set_sdata_offload_flags()
1041 if (local->virt_monitors) in ieee80211_set_sdata_offload_flags()
1047 if (ieee80211_hw_check(&local->hw, SUPPORTS_RX_DECAP_OFFLOAD) && in ieee80211_set_sdata_offload_flags()
1051 if (local->virt_monitors && in ieee80211_set_sdata_offload_flags()
1052 !ieee80211_hw_check(&local->hw, SUPPORTS_CONC_MON_RX_DECAP)) in ieee80211_set_sdata_offload_flags()
1068 struct ieee80211_local *local = sdata->local; in ieee80211_set_vif_encap_ops() local
1079 if (!ieee80211_hw_check(&local->hw, SUPPORTS_TX_ENCAP_OFFLOAD) || in ieee80211_set_vif_encap_ops()
1094 struct ieee80211_local *local = sdata->local; in ieee80211_recalc_sdata_offload() local
1098 drv_update_vif_offload(local, sdata); in ieee80211_recalc_sdata_offload()
1102 list_for_each_entry(vsdata, &local->interfaces, list) { in ieee80211_recalc_sdata_offload()
1111 void ieee80211_recalc_offload(struct ieee80211_local *local) in ieee80211_recalc_offload() argument
1115 if (!ieee80211_hw_check(&local->hw, SUPPORTS_TX_ENCAP_OFFLOAD)) in ieee80211_recalc_offload()
1118 lockdep_assert_wiphy(local->hw.wiphy); in ieee80211_recalc_offload()
1120 list_for_each_entry(sdata, &local->interfaces, list) { in ieee80211_recalc_offload()
1131 struct ieee80211_local *local = sdata->local; in ieee80211_adjust_monitor_flags() local
1136 local->fif_##_s += offset; \ in ieee80211_adjust_monitor_flags()
1145 local->tx_mntrs += offset; in ieee80211_adjust_monitor_flags()
1152 struct ieee80211_local *local = sdata->local; in ieee80211_set_default_queues() local
1156 if (ieee80211_hw_check(&local->hw, QUEUE_CONTROL)) in ieee80211_set_default_queues()
1158 else if (local->hw.queues >= IEEE80211_NUM_ACS) in ieee80211_set_default_queues()
1166 static void ieee80211_sdata_init(struct ieee80211_local *local, in ieee80211_sdata_init() argument
1169 sdata->local = local; in ieee80211_sdata_init()
1184 int ieee80211_add_virtual_monitor(struct ieee80211_local *local, in ieee80211_add_virtual_monitor() argument
1191 lockdep_assert_wiphy(local->hw.wiphy); in ieee80211_add_virtual_monitor()
1193 if (ieee80211_hw_check(&local->hw, NO_VIRTUAL_MONITOR)) in ieee80211_add_virtual_monitor()
1197 sdata = wiphy_dereference(local->hw.wiphy, local->monitor_sdata); in ieee80211_add_virtual_monitor()
1201 sdata = kzalloc(sizeof(*sdata) + local->hw.vif_data_size, GFP_KERNEL); in ieee80211_add_virtual_monitor()
1208 wiphy_name(local->hw.wiphy)); in ieee80211_add_virtual_monitor()
1210 sdata->wdev.wiphy = local->hw.wiphy; in ieee80211_add_virtual_monitor()
1212 ieee80211_sdata_init(local, sdata); in ieee80211_add_virtual_monitor()
1216 if (ieee80211_hw_check(&local->hw, WANT_MONITOR_VIF)) { in ieee80211_add_virtual_monitor()
1217 ret = drv_add_interface(local, sdata); in ieee80211_add_virtual_monitor()
1233 mutex_lock(&local->iflist_mtx); in ieee80211_add_virtual_monitor()
1234 rcu_assign_pointer(local->monitor_sdata, sdata); in ieee80211_add_virtual_monitor()
1235 mutex_unlock(&local->iflist_mtx); in ieee80211_add_virtual_monitor()
1237 ret = ieee80211_link_use_channel(&sdata->deflink, &local->monitor_chanreq, in ieee80211_add_virtual_monitor()
1240 mutex_lock(&local->iflist_mtx); in ieee80211_add_virtual_monitor()
1241 RCU_INIT_POINTER(local->monitor_sdata, NULL); in ieee80211_add_virtual_monitor()
1242 mutex_unlock(&local->iflist_mtx); in ieee80211_add_virtual_monitor()
1244 drv_remove_interface(local, sdata); in ieee80211_add_virtual_monitor()
1258 list_for_each_entry_rcu(other, &local->mon_list, u.mntr.list) { in ieee80211_add_virtual_monitor()
1282 void ieee80211_del_virtual_monitor(struct ieee80211_local *local) in ieee80211_del_virtual_monitor() argument
1286 if (ieee80211_hw_check(&local->hw, NO_VIRTUAL_MONITOR)) in ieee80211_del_virtual_monitor()
1290 lockdep_assert_wiphy(local->hw.wiphy); in ieee80211_del_virtual_monitor()
1292 mutex_lock(&local->iflist_mtx); in ieee80211_del_virtual_monitor()
1294 sdata = rcu_dereference_protected(local->monitor_sdata, in ieee80211_del_virtual_monitor()
1295 lockdep_is_held(&local->iflist_mtx)); in ieee80211_del_virtual_monitor()
1297 mutex_unlock(&local->iflist_mtx); in ieee80211_del_virtual_monitor()
1304 if (ieee80211_hw_check(&local->hw, WANT_MONITOR_VIF)) in ieee80211_del_virtual_monitor()
1305 drv_remove_interface(local, sdata); in ieee80211_del_virtual_monitor()
1307 RCU_INIT_POINTER(local->monitor_sdata, NULL); in ieee80211_del_virtual_monitor()
1308 mutex_unlock(&local->iflist_mtx); in ieee80211_del_virtual_monitor()
1324 struct ieee80211_local *local = sdata->local; in ieee80211_do_open() local
1329 lockdep_assert_wiphy(local->hw.wiphy); in ieee80211_do_open()
1384 if (local->open_count == 0) { in ieee80211_do_open()
1386 local->reconfig_failure = false; in ieee80211_do_open()
1388 res = drv_start(local); in ieee80211_do_open()
1391 ieee80211_led_radio(local, true); in ieee80211_do_open()
1392 ieee80211_mod_tpt_led_trig(local, in ieee80211_do_open()
1401 eth_hw_addr_set(dev, local->hw.wiphy->perm_addr); in ieee80211_do_open()
1430 ieee80211_hw_check(&local->hw, NO_VIRTUAL_MONITOR)) { in ieee80211_do_open()
1431 res = drv_add_interface(local, sdata); in ieee80211_do_open()
1436 if (local->virt_monitors == local->open_count) { in ieee80211_do_open()
1437 res = ieee80211_add_virtual_monitor(local, sdata); in ieee80211_do_open()
1442 local->virt_monitors++; in ieee80211_do_open()
1445 if (local->virt_monitors == 1) { in ieee80211_do_open()
1446 local->hw.conf.flags |= IEEE80211_CONF_MONITOR; in ieee80211_do_open()
1451 local->monitors++; in ieee80211_do_open()
1454 ieee80211_configure_filter(local); in ieee80211_do_open()
1455 ieee80211_recalc_offload(local); in ieee80211_do_open()
1456 ieee80211_recalc_idle(local); in ieee80211_do_open()
1459 list_add_tail_rcu(&sdata->u.mntr.list, &local->mon_list); in ieee80211_do_open()
1463 ieee80211_del_virtual_monitor(local); in ieee80211_do_open()
1466 res = drv_add_interface(local, sdata); in ieee80211_do_open()
1478 local->fif_pspoll++; in ieee80211_do_open()
1479 local->fif_probe_req++; in ieee80211_do_open()
1481 ieee80211_configure_filter(local); in ieee80211_do_open()
1483 local->fif_probe_req++; in ieee80211_do_open()
1487 drv_config_iface_filter(local, sdata, in ieee80211_do_open()
1529 atomic_inc(&local->iff_allmultis); in ieee80211_do_open()
1532 local->open_count++; in ieee80211_do_open()
1534 if (local->open_count == 1) in ieee80211_do_open()
1535 ieee80211_hw_conf_init(local); in ieee80211_do_open()
1537 ieee80211_hw_config(local, -1, hw_reconf_flags); in ieee80211_do_open()
1539 ieee80211_recalc_ps(local); in ieee80211_do_open()
1545 drv_remove_interface(local, sdata); in ieee80211_do_open()
1547 if (!local->open_count) in ieee80211_do_open()
1548 drv_stop(local, false); in ieee80211_do_open()
1567 static void ieee80211_iface_process_skb(struct ieee80211_local *local, in ieee80211_iface_process_skb() argument
1573 lockdep_assert_wiphy(local->hw.wiphy); in ieee80211_iface_process_skb()
1584 ieee80211_process_addba_request(local, sta, in ieee80211_iface_process_skb()
1588 ieee80211_process_addba_resp(local, sta, in ieee80211_iface_process_skb()
1618 lockdep_is_held(&local->hw.wiphy->mtx)); in ieee80211_iface_process_skb()
1620 ieee80211_ht_handle_chanwidth_notif(local, sdata, sta, in ieee80211_iface_process_skb()
1783 struct ieee80211_local *local = sdata->local; in ieee80211_iface_work() local
1789 if (test_bit(SCAN_SW_SCANNING, &local->scanning)) in ieee80211_iface_work()
1792 if (!ieee80211_can_run_worker(local)) in ieee80211_iface_work()
1802 ieee80211_iface_process_skb(local, sdata, skb); in ieee80211_iface_work()
1845 struct ieee80211_local *local = wiphy_priv(wiphy); in ieee80211_activate_links_work() local
1847 if (local->in_reconfig) in ieee80211_activate_links_work()
1956 struct ieee80211_local *local = sdata->local; in ieee80211_runtime_change_iftype() local
1963 if (!local->ops->change_interface) in ieee80211_runtime_change_iftype()
2015 ieee80211_stop_vif_queues(local, sdata, in ieee80211_runtime_change_iftype()
2023 ret = drv_change_interface(local, sdata, internal_type, p2p); in ieee80211_runtime_change_iftype()
2040 ieee80211_wake_vif_queues(local, sdata, in ieee80211_runtime_change_iftype()
2072 static void ieee80211_assign_perm_addr(struct ieee80211_local *local, in ieee80211_assign_perm_addr() argument
2081 lockdep_assert_wiphy(local->hw.wiphy); in ieee80211_assign_perm_addr()
2084 memcpy(perm_addr, local->hw.wiphy->perm_addr, ETH_ALEN); in ieee80211_assign_perm_addr()
2086 if (is_zero_ether_addr(local->hw.wiphy->addr_mask) && in ieee80211_assign_perm_addr()
2087 local->hw.wiphy->n_addresses <= 1) in ieee80211_assign_perm_addr()
2096 list_for_each_entry(sdata, &local->interfaces, list) { in ieee80211_assign_perm_addr()
2106 if (ieee80211_hw_check(&local->hw, P2P_DEV_ADDR_FOR_INTF)) { in ieee80211_assign_perm_addr()
2107 list_for_each_entry(sdata, &local->interfaces, list) { in ieee80211_assign_perm_addr()
2119 for (i = 0; i < local->hw.wiphy->n_addresses; i++) { in ieee80211_assign_perm_addr()
2122 list_for_each_entry(sdata, &local->interfaces, list) { in ieee80211_assign_perm_addr()
2123 if (ether_addr_equal(local->hw.wiphy->addresses[i].addr, in ieee80211_assign_perm_addr()
2132 local->hw.wiphy->addresses[i].addr, in ieee80211_assign_perm_addr()
2139 if (is_zero_ether_addr(local->hw.wiphy->addr_mask)) in ieee80211_assign_perm_addr()
2142 m = local->hw.wiphy->addr_mask; in ieee80211_assign_perm_addr()
2157 m = local->hw.wiphy->perm_addr; in ieee80211_assign_perm_addr()
2158 list_for_each_entry(sdata, &local->interfaces, list) { in ieee80211_assign_perm_addr()
2183 list_for_each_entry(sdata, &local->interfaces, list) { in ieee80211_assign_perm_addr()
2201 int ieee80211_if_add(struct ieee80211_local *local, const char *name, in ieee80211_if_add() argument
2212 lockdep_assert_wiphy(local->hw.wiphy); in ieee80211_if_add()
2217 sdata = kzalloc(sizeof(*sdata) + local->hw.vif_data_size, in ieee80211_if_add()
2225 ieee80211_assign_perm_addr(local, wdev->address, type); in ieee80211_if_add()
2229 int size = ALIGN(sizeof(*sdata) + local->hw.vif_data_size, in ieee80211_if_add()
2237 local->hw.txq_data_size; in ieee80211_if_add()
2245 dev_net_set(ndev, wiphy_net(local->hw.wiphy)); in ieee80211_if_add()
2249 ndev->needed_headroom = local->tx_headroom + in ieee80211_if_add()
2264 ieee80211_assign_perm_addr(local, ndev->perm_addr, type); in ieee80211_if_add()
2269 SET_NETDEV_DEV(ndev, wiphy_dev(local->hw.wiphy)); in ieee80211_if_add()
2287 sdata->wdev.wiphy = local->hw.wiphy; in ieee80211_if_add()
2289 ieee80211_sdata_init(local, sdata); in ieee80211_if_add()
2298 sband = local->hw.wiphy->bands[i]; in ieee80211_if_add()
2330 ndev->features |= local->hw.netdev_features; in ieee80211_if_add()
2334 sdata->vif.netdev_features = local->hw.netdev_features; in ieee80211_if_add()
2347 ndev->max_mtu = local->hw.max_mtu; in ieee80211_if_add()
2356 mutex_lock(&local->iflist_mtx); in ieee80211_if_add()
2357 list_add_tail_rcu(&sdata->list, &local->interfaces); in ieee80211_if_add()
2358 mutex_unlock(&local->iflist_mtx); in ieee80211_if_add()
2369 lockdep_assert_wiphy(sdata->local->hw.wiphy); in ieee80211_if_remove()
2371 mutex_lock(&sdata->local->iflist_mtx); in ieee80211_if_remove()
2373 mutex_unlock(&sdata->local->iflist_mtx); in ieee80211_if_remove()
2376 ieee80211_txq_purge(sdata->local, to_txq_info(sdata->vif.txq)); in ieee80211_if_remove()
2395 void ieee80211_remove_interfaces(struct ieee80211_local *local) in ieee80211_remove_interfaces() argument
2413 cfg80211_shutdown_all_interfaces(local->hw.wiphy); in ieee80211_remove_interfaces()
2415 guard(wiphy)(local->hw.wiphy); in ieee80211_remove_interfaces()
2417 WARN(local->open_count, "%s: open count remains %d\n", in ieee80211_remove_interfaces()
2418 wiphy_name(local->hw.wiphy), local->open_count); in ieee80211_remove_interfaces()
2420 mutex_lock(&local->iflist_mtx); in ieee80211_remove_interfaces()
2421 list_splice_init(&local->interfaces, &unreg_list); in ieee80211_remove_interfaces()
2422 mutex_unlock(&local->iflist_mtx); in ieee80211_remove_interfaces()
2501 struct ieee80211_local *local = sdata->local; in ieee80211_vif_block_queues_csa() local
2503 if (ieee80211_hw_check(&local->hw, HANDLES_QUIET_CSA)) in ieee80211_vif_block_queues_csa()
2506 ieee80211_stop_vif_queues_norefcount(local, sdata, in ieee80211_vif_block_queues_csa()
2512 struct ieee80211_local *local = sdata->local; in ieee80211_vif_unblock_queues_csa() local
2514 ieee80211_wake_vif_queues_norefcount(local, sdata, in ieee80211_vif_unblock_queues_csa()