Lines Matching refs:local

71 		ieee80211_hw_config(sdata->local, 0);  in __ieee80211_recalc_txpower()
86 static u32 __ieee80211_idle_off(struct ieee80211_local *local) in __ieee80211_idle_off() argument
88 if (!(local->hw.conf.flags & IEEE80211_CONF_IDLE)) in __ieee80211_idle_off()
91 local->hw.conf.flags &= ~IEEE80211_CONF_IDLE; in __ieee80211_idle_off()
95 static u32 __ieee80211_idle_on(struct ieee80211_local *local) in __ieee80211_idle_on() argument
97 if (local->hw.conf.flags & IEEE80211_CONF_IDLE) in __ieee80211_idle_on()
100 ieee80211_flush_queues(local, NULL, false); in __ieee80211_idle_on()
102 local->hw.conf.flags |= IEEE80211_CONF_IDLE; in __ieee80211_idle_on()
106 static u32 __ieee80211_recalc_idle(struct ieee80211_local *local, in __ieee80211_recalc_idle() argument
112 lockdep_assert_held(&local->mtx); 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 scanning = test_bit(SCAN_SW_SCANNING, &local->scanning) || in __ieee80211_recalc_idle()
122 test_bit(SCAN_ONCHANNEL_SCANNING, &local->scanning); in __ieee80211_recalc_idle()
134 ieee80211_mod_tpt_led_trig(local, led_trig_start, led_trig_stop); in __ieee80211_recalc_idle()
137 return __ieee80211_idle_off(local); in __ieee80211_recalc_idle()
138 return __ieee80211_idle_on(local); in __ieee80211_recalc_idle()
141 u32 ieee80211_idle_off(struct ieee80211_local *local) in ieee80211_idle_off() argument
143 return __ieee80211_recalc_idle(local, true); in ieee80211_idle_off()
146 void ieee80211_recalc_idle(struct ieee80211_local *local) in ieee80211_recalc_idle() argument
148 u32 change = __ieee80211_recalc_idle(local, false); in ieee80211_recalc_idle()
150 ieee80211_hw_config(local, change); in ieee80211_recalc_idle()
156 struct ieee80211_local *local = sdata->local; in ieee80211_verify_mac() local
162 if (is_zero_ether_addr(local->hw.wiphy->addr_mask)) in ieee80211_verify_mac()
170 m = local->hw.wiphy->addr_mask; in ieee80211_verify_mac()
178 mutex_lock(&local->iflist_mtx); in ieee80211_verify_mac()
179 list_for_each_entry(iter, &local->interfaces, list) { in ieee80211_verify_mac()
197 mutex_unlock(&local->iflist_mtx); in ieee80211_verify_mac()
243 struct ieee80211_local *local = sdata->local; in ieee80211_check_concurrent_iface() local
250 list_for_each_entry(nsdata, &local->interfaces, list) { in ieee80211_check_concurrent_iface()
305 mutex_lock(&local->chanctx_mtx); in ieee80211_check_concurrent_iface()
307 mutex_unlock(&local->chanctx_mtx); in ieee80211_check_concurrent_iface()
314 int n_queues = sdata->local->hw.queues; in ieee80211_check_queues()
334 !ieee80211_hw_check(&sdata->local->hw, QUEUE_CONTROL)) { in ieee80211_check_queues()
361 wiphy_lock(sdata->local->hw.wiphy); in ieee80211_open()
363 wiphy_unlock(sdata->local->hw.wiphy); in ieee80211_open()
370 struct ieee80211_local *local = sdata->local; in ieee80211_do_stop() local
382 cancel_scan = rcu_access_pointer(local->scan_sdata) == sdata; in ieee80211_do_stop()
384 ieee80211_scan_cancel(local); in ieee80211_do_stop()
392 ieee80211_roc_purge(local, sdata); in ieee80211_do_stop()
429 atomic_dec(&local->iff_allmultis); in ieee80211_do_stop()
432 local->fif_pspoll--; in ieee80211_do_stop()
433 local->fif_probe_req--; in ieee80211_do_stop()
435 local->fif_probe_req--; in ieee80211_do_stop()
440 spin_lock_bh(&local->filter_lock); in ieee80211_do_stop()
441 __hw_addr_unsync(&local->mc_list, &sdata->dev->mc, in ieee80211_do_stop()
443 spin_unlock_bh(&local->filter_lock); in ieee80211_do_stop()
447 del_timer_sync(&local->dynamic_ps_timer); in ieee80211_do_stop()
448 cancel_work_sync(&local->dynamic_ps_enable_work); in ieee80211_do_stop()
452 mutex_lock(&local->mtx); in ieee80211_do_stop()
457 ieee80211_wake_vif_queues(local, sdata, in ieee80211_do_stop()
461 mutex_unlock(&local->mtx); in ieee80211_do_stop()
471 WARN_ON(local->suspended); in ieee80211_do_stop()
472 mutex_lock(&local->mtx); in ieee80211_do_stop()
474 mutex_unlock(&local->mtx); in ieee80211_do_stop()
490 local->total_ps_buffered--; in ieee80211_do_stop()
491 ieee80211_free_txskb(&local->hw, skb); in ieee80211_do_stop()
498 local->open_count--; in ieee80211_do_stop()
502 mutex_lock(&local->mtx); in ieee80211_do_stop()
504 mutex_unlock(&local->mtx); in ieee80211_do_stop()
512 local->cooked_mntrs--; in ieee80211_do_stop()
516 local->monitors--; in ieee80211_do_stop()
517 if (local->monitors == 0) { in ieee80211_do_stop()
518 local->hw.conf.flags &= ~IEEE80211_CONF_MONITOR; in ieee80211_do_stop()
538 RCU_INIT_POINTER(local->p2p_sdata, NULL); in ieee80211_do_stop()
558 spin_lock_irqsave(&local->queue_stop_reason_lock, flags); in ieee80211_do_stop()
560 skb_queue_walk_safe(&local->pending[i], skb, tmp) { in ieee80211_do_stop()
563 __skb_unlink(skb, &local->pending[i]); in ieee80211_do_stop()
564 ieee80211_free_txskb(&local->hw, skb); in ieee80211_do_stop()
568 spin_unlock_irqrestore(&local->queue_stop_reason_lock, flags); in ieee80211_do_stop()
571 ieee80211_txq_remove_vlan(local, sdata); in ieee80211_do_stop()
575 if (local->open_count == 0) in ieee80211_do_stop()
576 ieee80211_clear_tx_pending(local); in ieee80211_do_stop()
589 if (local->suspended) { in ieee80211_do_stop()
590 WARN_ON(local->wowlan); in ieee80211_do_stop()
591 WARN_ON(rcu_access_pointer(local->monitor_sdata)); in ieee80211_do_stop()
599 if (local->monitors == 0) in ieee80211_do_stop()
600 ieee80211_del_virtual_monitor(local); in ieee80211_do_stop()
602 mutex_lock(&local->mtx); in ieee80211_do_stop()
603 ieee80211_recalc_idle(local); in ieee80211_do_stop()
604 mutex_unlock(&local->mtx); in ieee80211_do_stop()
612 drv_remove_interface(local, sdata); in ieee80211_do_stop()
615 ieee80211_recalc_ps(local); in ieee80211_do_stop()
618 flush_delayed_work(&local->scan_work); in ieee80211_do_stop()
620 if (local->open_count == 0) { in ieee80211_do_stop()
621 ieee80211_stop_device(local); in ieee80211_do_stop()
628 ieee80211_configure_filter(local); in ieee80211_do_stop()
629 ieee80211_hw_config(local, hw_reconf_flags); in ieee80211_do_stop()
631 if (local->monitors == local->open_count) in ieee80211_do_stop()
632 ieee80211_add_virtual_monitor(local); in ieee80211_do_stop()
647 &tx_sdata->local->interfaces, list) { in ieee80211_stop_mbssid()
677 wiphy_lock(sdata->local->hw.wiphy); in ieee80211_stop()
679 wiphy_unlock(sdata->local->hw.wiphy); in ieee80211_stop()
687 struct ieee80211_local *local = sdata->local; in ieee80211_set_multicast_list() local
695 atomic_inc(&local->iff_allmultis); in ieee80211_set_multicast_list()
697 atomic_dec(&local->iff_allmultis); in ieee80211_set_multicast_list()
701 spin_lock_bh(&local->filter_lock); in ieee80211_set_multicast_list()
702 __hw_addr_sync(&local->mc_list, &dev->mc, dev->addr_len); in ieee80211_set_multicast_list()
703 spin_unlock_bh(&local->filter_lock); in ieee80211_set_multicast_list()
704 ieee80211_queue_work(&local->hw, &local->reconfig_filter); in ieee80211_set_multicast_list()
758 struct ieee80211_local *local = sdata->local; in ieee80211_monitor_select_queue() local
763 if (local->hw.queues < IEEE80211_NUM_ACS) in ieee80211_monitor_select_queue()
817 struct ieee80211_local *local = sdata->local; in ieee80211_set_sdata_offload_flags() local
822 if (ieee80211_hw_check(&local->hw, SUPPORTS_TX_ENCAP_OFFLOAD) && in ieee80211_set_sdata_offload_flags()
826 if (!ieee80211_hw_check(&local->hw, SUPPORTS_TX_FRAG) && in ieee80211_set_sdata_offload_flags()
827 local->hw.wiphy->frag_threshold != (u32)-1) in ieee80211_set_sdata_offload_flags()
830 if (local->monitors) in ieee80211_set_sdata_offload_flags()
836 if (ieee80211_hw_check(&local->hw, SUPPORTS_RX_DECAP_OFFLOAD) && in ieee80211_set_sdata_offload_flags()
840 if (local->monitors && in ieee80211_set_sdata_offload_flags()
841 !ieee80211_hw_check(&local->hw, SUPPORTS_CONC_MON_RX_DECAP)) in ieee80211_set_sdata_offload_flags()
857 struct ieee80211_local *local = sdata->local; in ieee80211_set_vif_encap_ops() local
868 if (!ieee80211_hw_check(&local->hw, SUPPORTS_TX_ENCAP_OFFLOAD) || in ieee80211_set_vif_encap_ops()
883 struct ieee80211_local *local = sdata->local; in ieee80211_recalc_sdata_offload() local
887 drv_update_vif_offload(local, sdata); in ieee80211_recalc_sdata_offload()
891 list_for_each_entry(vsdata, &local->interfaces, list) { in ieee80211_recalc_sdata_offload()
900 void ieee80211_recalc_offload(struct ieee80211_local *local) in ieee80211_recalc_offload() argument
904 if (!ieee80211_hw_check(&local->hw, SUPPORTS_TX_ENCAP_OFFLOAD)) in ieee80211_recalc_offload()
907 mutex_lock(&local->iflist_mtx); in ieee80211_recalc_offload()
909 list_for_each_entry(sdata, &local->interfaces, list) { in ieee80211_recalc_offload()
916 mutex_unlock(&local->iflist_mtx); in ieee80211_recalc_offload()
922 struct ieee80211_local *local = sdata->local; in ieee80211_adjust_monitor_flags() local
927 local->fif_##_s += offset; \ in ieee80211_adjust_monitor_flags()
941 struct ieee80211_local *local = sdata->local; in ieee80211_set_default_queues() local
945 if (ieee80211_hw_check(&local->hw, QUEUE_CONTROL)) in ieee80211_set_default_queues()
947 else if (local->hw.queues >= IEEE80211_NUM_ACS) in ieee80211_set_default_queues()
955 int ieee80211_add_virtual_monitor(struct ieee80211_local *local) in ieee80211_add_virtual_monitor() argument
960 if (!ieee80211_hw_check(&local->hw, WANT_MONITOR_VIF)) in ieee80211_add_virtual_monitor()
964 lockdep_assert_wiphy(local->hw.wiphy); in ieee80211_add_virtual_monitor()
966 if (local->monitor_sdata) in ieee80211_add_virtual_monitor()
969 sdata = kzalloc(sizeof(*sdata) + local->hw.vif_data_size, GFP_KERNEL); in ieee80211_add_virtual_monitor()
974 sdata->local = local; in ieee80211_add_virtual_monitor()
977 wiphy_name(local->hw.wiphy)); in ieee80211_add_virtual_monitor()
984 ret = drv_add_interface(local, sdata); in ieee80211_add_virtual_monitor()
999 mutex_lock(&local->iflist_mtx); in ieee80211_add_virtual_monitor()
1000 rcu_assign_pointer(local->monitor_sdata, sdata); in ieee80211_add_virtual_monitor()
1001 mutex_unlock(&local->iflist_mtx); in ieee80211_add_virtual_monitor()
1003 mutex_lock(&local->mtx); in ieee80211_add_virtual_monitor()
1004 ret = ieee80211_vif_use_channel(sdata, &local->monitor_chandef, in ieee80211_add_virtual_monitor()
1006 mutex_unlock(&local->mtx); in ieee80211_add_virtual_monitor()
1008 mutex_lock(&local->iflist_mtx); in ieee80211_add_virtual_monitor()
1009 RCU_INIT_POINTER(local->monitor_sdata, NULL); in ieee80211_add_virtual_monitor()
1010 mutex_unlock(&local->iflist_mtx); in ieee80211_add_virtual_monitor()
1012 drv_remove_interface(local, sdata); in ieee80211_add_virtual_monitor()
1024 void ieee80211_del_virtual_monitor(struct ieee80211_local *local) in ieee80211_del_virtual_monitor() argument
1028 if (!ieee80211_hw_check(&local->hw, WANT_MONITOR_VIF)) in ieee80211_del_virtual_monitor()
1032 lockdep_assert_wiphy(local->hw.wiphy); in ieee80211_del_virtual_monitor()
1034 mutex_lock(&local->iflist_mtx); in ieee80211_del_virtual_monitor()
1036 sdata = rcu_dereference_protected(local->monitor_sdata, in ieee80211_del_virtual_monitor()
1037 lockdep_is_held(&local->iflist_mtx)); in ieee80211_del_virtual_monitor()
1039 mutex_unlock(&local->iflist_mtx); in ieee80211_del_virtual_monitor()
1043 RCU_INIT_POINTER(local->monitor_sdata, NULL); in ieee80211_del_virtual_monitor()
1044 mutex_unlock(&local->iflist_mtx); in ieee80211_del_virtual_monitor()
1048 mutex_lock(&local->mtx); in ieee80211_del_virtual_monitor()
1050 mutex_unlock(&local->mtx); in ieee80211_del_virtual_monitor()
1052 drv_remove_interface(local, sdata); in ieee80211_del_virtual_monitor()
1066 struct ieee80211_local *local = sdata->local; in ieee80211_do_open() local
1078 mutex_lock(&local->mtx); in ieee80211_do_open()
1080 mutex_unlock(&local->mtx); in ieee80211_do_open()
1097 mutex_lock(&local->key_mtx); in ieee80211_do_open()
1100 mutex_unlock(&local->key_mtx); in ieee80211_do_open()
1126 if (local->open_count == 0) { in ieee80211_do_open()
1127 res = drv_start(local); in ieee80211_do_open()
1132 ieee80211_led_radio(local, true); in ieee80211_do_open()
1133 ieee80211_mod_tpt_led_trig(local, in ieee80211_do_open()
1142 eth_hw_addr_set(dev, local->hw.wiphy->perm_addr); in ieee80211_do_open()
1164 local->cooked_mntrs++; in ieee80211_do_open()
1169 res = drv_add_interface(local, sdata); in ieee80211_do_open()
1172 } else if (local->monitors == 0 && local->open_count == 0) { in ieee80211_do_open()
1173 res = ieee80211_add_virtual_monitor(local); in ieee80211_do_open()
1179 local->monitors++; in ieee80211_do_open()
1180 if (local->monitors == 1) { in ieee80211_do_open()
1181 local->hw.conf.flags |= IEEE80211_CONF_MONITOR; in ieee80211_do_open()
1186 ieee80211_configure_filter(local); in ieee80211_do_open()
1187 ieee80211_recalc_offload(local); in ieee80211_do_open()
1188 mutex_lock(&local->mtx); in ieee80211_do_open()
1189 ieee80211_recalc_idle(local); in ieee80211_do_open()
1190 mutex_unlock(&local->mtx); in ieee80211_do_open()
1196 ieee80211_del_virtual_monitor(local); in ieee80211_do_open()
1199 res = drv_add_interface(local, sdata); in ieee80211_do_open()
1211 local->fif_pspoll++; in ieee80211_do_open()
1212 local->fif_probe_req++; in ieee80211_do_open()
1214 ieee80211_configure_filter(local); in ieee80211_do_open()
1216 local->fif_probe_req++; in ieee80211_do_open()
1220 drv_config_iface_filter(local, sdata, in ieee80211_do_open()
1259 rcu_assign_pointer(local->p2p_sdata, sdata); in ieee80211_do_open()
1264 list_add_tail_rcu(&sdata->u.mntr.list, &local->mon_list); in ieee80211_do_open()
1276 atomic_inc(&local->iff_allmultis); in ieee80211_do_open()
1279 local->open_count++; in ieee80211_do_open()
1282 ieee80211_hw_config(local, hw_reconf_flags); in ieee80211_do_open()
1284 ieee80211_recalc_ps(local); in ieee80211_do_open()
1288 local->ops->wake_tx_queue) { in ieee80211_do_open()
1297 if (local->hw.queues < IEEE80211_NUM_ACS) in ieee80211_do_open()
1300 spin_lock_irqsave(&local->queue_stop_reason_lock, flags); in ieee80211_do_open()
1302 (local->queue_stop_reasons[sdata->vif.cab_queue] == 0 && in ieee80211_do_open()
1303 skb_queue_empty(&local->pending[sdata->vif.cab_queue]))) { in ieee80211_do_open()
1307 if (local->queue_stop_reasons[ac_queue] == 0 && in ieee80211_do_open()
1308 skb_queue_empty(&local->pending[ac_queue])) in ieee80211_do_open()
1312 spin_unlock_irqrestore(&local->queue_stop_reason_lock, flags); in ieee80211_do_open()
1317 drv_remove_interface(local, sdata); in ieee80211_do_open()
1319 if (!local->open_count) in ieee80211_do_open()
1320 drv_stop(local); in ieee80211_do_open()
1324 mutex_lock(&local->mtx); in ieee80211_do_open()
1326 mutex_unlock(&local->mtx); in ieee80211_do_open()
1353 static void ieee80211_iface_process_skb(struct ieee80211_local *local, in ieee80211_iface_process_skb() argument
1364 mutex_lock(&local->sta_mtx); in ieee80211_iface_process_skb()
1369 ieee80211_process_addba_request(local, sta, in ieee80211_iface_process_skb()
1373 ieee80211_process_addba_resp(local, sta, in ieee80211_iface_process_skb()
1385 mutex_unlock(&local->sta_mtx); in ieee80211_iface_process_skb()
1399 mutex_lock(&local->sta_mtx); in ieee80211_iface_process_skb()
1406 mutex_unlock(&local->sta_mtx); in ieee80211_iface_process_skb()
1452 mutex_lock(&local->sta_mtx); in ieee80211_iface_process_skb()
1462 mutex_unlock(&local->sta_mtx); in ieee80211_iface_process_skb()
1503 struct ieee80211_local *local = sdata->local; in ieee80211_iface_work() local
1509 if (test_bit(SCAN_SW_SCANNING, &local->scanning)) in ieee80211_iface_work()
1512 if (!ieee80211_can_run_worker(local)) in ieee80211_iface_work()
1522 ieee80211_iface_process_skb(local, sdata, skb); in ieee80211_iface_work()
1669 struct ieee80211_local *local = sdata->local; in ieee80211_runtime_change_iftype() local
1676 if (!local->ops->change_interface) in ieee80211_runtime_change_iftype()
1724 ieee80211_stop_vif_queues(local, sdata, in ieee80211_runtime_change_iftype()
1733 ret = drv_change_interface(local, sdata, internal_type, p2p); in ieee80211_runtime_change_iftype()
1750 ieee80211_wake_vif_queues(local, sdata, in ieee80211_runtime_change_iftype()
1782 static void ieee80211_assign_perm_addr(struct ieee80211_local *local, in ieee80211_assign_perm_addr() argument
1792 memcpy(perm_addr, local->hw.wiphy->perm_addr, ETH_ALEN); in ieee80211_assign_perm_addr()
1794 if (is_zero_ether_addr(local->hw.wiphy->addr_mask) && in ieee80211_assign_perm_addr()
1795 local->hw.wiphy->n_addresses <= 1) in ieee80211_assign_perm_addr()
1798 mutex_lock(&local->iflist_mtx); in ieee80211_assign_perm_addr()
1806 list_for_each_entry(sdata, &local->interfaces, list) { in ieee80211_assign_perm_addr()
1816 if (ieee80211_hw_check(&local->hw, P2P_DEV_ADDR_FOR_INTF)) { in ieee80211_assign_perm_addr()
1817 list_for_each_entry(sdata, &local->interfaces, list) { in ieee80211_assign_perm_addr()
1829 for (i = 0; i < local->hw.wiphy->n_addresses; i++) { in ieee80211_assign_perm_addr()
1832 list_for_each_entry(sdata, &local->interfaces, list) { in ieee80211_assign_perm_addr()
1833 if (ether_addr_equal(local->hw.wiphy->addresses[i].addr, in ieee80211_assign_perm_addr()
1842 local->hw.wiphy->addresses[i].addr, in ieee80211_assign_perm_addr()
1849 if (is_zero_ether_addr(local->hw.wiphy->addr_mask)) in ieee80211_assign_perm_addr()
1852 m = local->hw.wiphy->addr_mask; in ieee80211_assign_perm_addr()
1867 m = local->hw.wiphy->perm_addr; in ieee80211_assign_perm_addr()
1868 list_for_each_entry(sdata, &local->interfaces, list) { in ieee80211_assign_perm_addr()
1893 list_for_each_entry(sdata, &local->interfaces, list) { in ieee80211_assign_perm_addr()
1911 mutex_unlock(&local->iflist_mtx); in ieee80211_assign_perm_addr()
1914 int ieee80211_if_add(struct ieee80211_local *local, const char *name, in ieee80211_if_add() argument
1931 sdata = kzalloc(sizeof(*sdata) + local->hw.vif_data_size, in ieee80211_if_add()
1939 ieee80211_assign_perm_addr(local, wdev->address, type); in ieee80211_if_add()
1942 int size = ALIGN(sizeof(*sdata) + local->hw.vif_data_size, in ieee80211_if_add()
1946 if (local->ops->wake_tx_queue && in ieee80211_if_add()
1951 local->hw.txq_data_size; in ieee80211_if_add()
1953 if (local->ops->wake_tx_queue) { in ieee80211_if_add()
1957 if (local->hw.queues >= IEEE80211_NUM_ACS) in ieee80211_if_add()
1967 if (!local->ops->wake_tx_queue && local->hw.wiphy->tx_queue_len) in ieee80211_if_add()
1968 ndev->tx_queue_len = local->hw.wiphy->tx_queue_len; in ieee80211_if_add()
1970 dev_net_set(ndev, wiphy_net(local->hw.wiphy)); in ieee80211_if_add()
1978 ndev->needed_headroom = local->tx_headroom + in ieee80211_if_add()
1994 ieee80211_assign_perm_addr(local, ndev->perm_addr, type); in ieee80211_if_add()
1999 SET_NETDEV_DEV(ndev, wiphy_dev(local->hw.wiphy)); in ieee80211_if_add()
2016 sdata->wdev.wiphy = local->hw.wiphy; in ieee80211_if_add()
2017 sdata->local = local; in ieee80211_if_add()
2030 sband = local->hw.wiphy->bands[i]; in ieee80211_if_add()
2053 init_airtime_info(&sdata->airtime[i], &local->airtime[i]); in ieee80211_if_add()
2058 sdata->user_power_level = local->user_power_level; in ieee80211_if_add()
2070 ndev->features |= local->hw.netdev_features; in ieee80211_if_add()
2085 ndev->max_mtu = local->hw.max_mtu; in ieee80211_if_add()
2094 mutex_lock(&local->iflist_mtx); in ieee80211_if_add()
2095 list_add_tail_rcu(&sdata->list, &local->interfaces); in ieee80211_if_add()
2096 mutex_unlock(&local->iflist_mtx); in ieee80211_if_add()
2108 mutex_lock(&sdata->local->iflist_mtx); in ieee80211_if_remove()
2110 mutex_unlock(&sdata->local->iflist_mtx); in ieee80211_if_remove()
2113 ieee80211_txq_purge(sdata->local, to_txq_info(sdata->vif.txq)); in ieee80211_if_remove()
2132 void ieee80211_remove_interfaces(struct ieee80211_local *local) in ieee80211_remove_interfaces() argument
2151 cfg80211_shutdown_all_interfaces(local->hw.wiphy); in ieee80211_remove_interfaces()
2153 WARN(local->open_count, "%s: open count remains %d\n", in ieee80211_remove_interfaces()
2154 wiphy_name(local->hw.wiphy), local->open_count); in ieee80211_remove_interfaces()
2156 ieee80211_txq_teardown_flows(local); in ieee80211_remove_interfaces()
2158 mutex_lock(&local->iflist_mtx); in ieee80211_remove_interfaces()
2159 list_for_each_entry_safe(sdata, tmp, &local->interfaces, list) { in ieee80211_remove_interfaces()
2167 mutex_unlock(&local->iflist_mtx); in ieee80211_remove_interfaces()
2171 wiphy_lock(local->hw.wiphy); in ieee80211_remove_interfaces()
2177 wiphy_unlock(local->hw.wiphy); in ieee80211_remove_interfaces()