Lines Matching full:local

71 		ieee80211_hw_config(sdata->local, 0);  in __ieee80211_recalc_txpower()
87 static u32 __ieee80211_idle_off(struct ieee80211_local *local) in __ieee80211_idle_off() argument
89 if (!(local->hw.conf.flags & IEEE80211_CONF_IDLE)) in __ieee80211_idle_off()
92 local->hw.conf.flags &= ~IEEE80211_CONF_IDLE; in __ieee80211_idle_off()
96 static u32 __ieee80211_idle_on(struct ieee80211_local *local) in __ieee80211_idle_on() argument
98 if (local->hw.conf.flags & IEEE80211_CONF_IDLE) in __ieee80211_idle_on()
101 ieee80211_flush_queues(local, NULL, false); in __ieee80211_idle_on()
103 local->hw.conf.flags |= IEEE80211_CONF_IDLE; in __ieee80211_idle_on()
107 static u32 __ieee80211_recalc_idle(struct ieee80211_local *local, in __ieee80211_recalc_idle() argument
113 lockdep_assert_held(&local->mtx); in __ieee80211_recalc_idle()
116 !list_empty(&local->chanctx_list) || in __ieee80211_recalc_idle()
117 local->monitors; in __ieee80211_recalc_idle()
119 working = !local->ops->remain_on_channel && in __ieee80211_recalc_idle()
120 !list_empty(&local->roc_list); in __ieee80211_recalc_idle()
122 scanning = test_bit(SCAN_SW_SCANNING, &local->scanning) || in __ieee80211_recalc_idle()
123 test_bit(SCAN_ONCHANNEL_SCANNING, &local->scanning); in __ieee80211_recalc_idle()
135 ieee80211_mod_tpt_led_trig(local, led_trig_start, led_trig_stop); in __ieee80211_recalc_idle()
138 return __ieee80211_idle_off(local); in __ieee80211_recalc_idle()
139 return __ieee80211_idle_on(local); in __ieee80211_recalc_idle()
142 u32 ieee80211_idle_off(struct ieee80211_local *local) in ieee80211_idle_off() argument
144 return __ieee80211_recalc_idle(local, true); in ieee80211_idle_off()
147 void ieee80211_recalc_idle(struct ieee80211_local *local) in ieee80211_recalc_idle() argument
149 u32 change = __ieee80211_recalc_idle(local, false); in ieee80211_recalc_idle()
151 ieee80211_hw_config(local, change); in ieee80211_recalc_idle()
157 struct ieee80211_local *local = sdata->local; in ieee80211_verify_mac() local
163 if (is_zero_ether_addr(local->hw.wiphy->addr_mask)) in ieee80211_verify_mac()
171 m = local->hw.wiphy->addr_mask; in ieee80211_verify_mac()
179 mutex_lock(&local->iflist_mtx); in ieee80211_verify_mac()
180 list_for_each_entry(iter, &local->interfaces, list) { in ieee80211_verify_mac()
198 mutex_unlock(&local->iflist_mtx); in ieee80211_verify_mac()
206 struct ieee80211_local *local = sdata->local; in ieee80211_can_powered_addr_change() local
217 mutex_lock(&local->mtx); in ieee80211_can_powered_addr_change()
220 list_for_each_entry(roc, &local->roc_list, list) { in ieee80211_can_powered_addr_change()
231 if (local->scanning) { in ieee80211_can_powered_addr_change()
232 scan_sdata = rcu_dereference_protected(local->scan_sdata, in ieee80211_can_powered_addr_change()
233 lockdep_is_held(&local->mtx)); in ieee80211_can_powered_addr_change()
250 mutex_unlock(&local->mtx); in ieee80211_can_powered_addr_change()
257 struct ieee80211_local *local = sdata->local; in ieee80211_change_mac() local
280 drv_remove_interface(local, sdata); in ieee80211_change_mac()
292 WARN_ON(drv_add_interface(local, sdata)); in ieee80211_change_mac()
312 struct ieee80211_local *local = sdata->local; in ieee80211_check_concurrent_iface() local
319 list_for_each_entry(nsdata, &local->interfaces, list) { in ieee80211_check_concurrent_iface()
379 mutex_lock(&local->chanctx_mtx); in ieee80211_check_concurrent_iface()
381 mutex_unlock(&local->chanctx_mtx); in ieee80211_check_concurrent_iface()
388 int n_queues = sdata->local->hw.queues; in ieee80211_check_queues()
408 !ieee80211_hw_check(&sdata->local->hw, QUEUE_CONTROL)) { in ieee80211_check_queues()
435 wiphy_lock(sdata->local->hw.wiphy); in ieee80211_open()
437 wiphy_unlock(sdata->local->hw.wiphy); in ieee80211_open()
444 struct ieee80211_local *local = sdata->local; in ieee80211_do_stop() local
457 cancel_scan = rcu_access_pointer(local->scan_sdata) == sdata; in ieee80211_do_stop()
459 ieee80211_scan_cancel(local); in ieee80211_do_stop()
464 if (!local->ops->wake_tx_queue && sdata->dev) in ieee80211_do_stop()
467 ieee80211_roc_purge(local, sdata); in ieee80211_do_stop()
504 atomic_dec(&local->iff_allmultis); in ieee80211_do_stop()
507 local->fif_pspoll--; in ieee80211_do_stop()
508 local->fif_probe_req--; in ieee80211_do_stop()
510 local->fif_probe_req--; in ieee80211_do_stop()
515 spin_lock_bh(&local->filter_lock); in ieee80211_do_stop()
516 __hw_addr_unsync(&local->mc_list, &sdata->dev->mc, in ieee80211_do_stop()
518 spin_unlock_bh(&local->filter_lock); in ieee80211_do_stop()
522 del_timer_sync(&local->dynamic_ps_timer); in ieee80211_do_stop()
523 cancel_work_sync(&local->dynamic_ps_enable_work); in ieee80211_do_stop()
532 mutex_lock(&local->mtx); in ieee80211_do_stop()
537 ieee80211_wake_vif_queues(local, sdata, in ieee80211_do_stop()
541 mutex_unlock(&local->mtx); in ieee80211_do_stop()
551 WARN_ON(local->suspended); in ieee80211_do_stop()
552 mutex_lock(&local->mtx); in ieee80211_do_stop()
554 mutex_unlock(&local->mtx); in ieee80211_do_stop()
570 local->total_ps_buffered--; in ieee80211_do_stop()
571 ieee80211_free_txskb(&local->hw, skb); in ieee80211_do_stop()
578 local->open_count--; in ieee80211_do_stop()
582 mutex_lock(&local->mtx); in ieee80211_do_stop()
584 mutex_unlock(&local->mtx); in ieee80211_do_stop()
592 local->cooked_mntrs--; in ieee80211_do_stop()
596 local->monitors--; in ieee80211_do_stop()
597 if (local->monitors == 0) { in ieee80211_do_stop()
598 local->hw.conf.flags &= ~IEEE80211_CONF_MONITOR; in ieee80211_do_stop()
618 RCU_INIT_POINTER(local->p2p_sdata, NULL); in ieee80211_do_stop()
638 spin_lock_irqsave(&local->queue_stop_reason_lock, flags); in ieee80211_do_stop()
640 skb_queue_walk_safe(&local->pending[i], skb, tmp) { in ieee80211_do_stop()
643 __skb_unlink(skb, &local->pending[i]); in ieee80211_do_stop()
644 ieee80211_free_txskb(&local->hw, skb); in ieee80211_do_stop()
648 spin_unlock_irqrestore(&local->queue_stop_reason_lock, flags); in ieee80211_do_stop()
651 ieee80211_txq_remove_vlan(local, sdata); in ieee80211_do_stop()
655 if (local->open_count == 0) in ieee80211_do_stop()
656 ieee80211_clear_tx_pending(local); in ieee80211_do_stop()
669 if (local->suspended) { in ieee80211_do_stop()
670 WARN_ON(local->wowlan); in ieee80211_do_stop()
671 WARN_ON(rcu_access_pointer(local->monitor_sdata)); in ieee80211_do_stop()
679 if (local->monitors == 0) in ieee80211_do_stop()
680 ieee80211_del_virtual_monitor(local); in ieee80211_do_stop()
682 mutex_lock(&local->mtx); in ieee80211_do_stop()
683 ieee80211_recalc_idle(local); in ieee80211_do_stop()
684 mutex_unlock(&local->mtx); in ieee80211_do_stop()
692 drv_remove_interface(local, sdata); in ieee80211_do_stop()
695 ieee80211_recalc_ps(local); in ieee80211_do_stop()
698 flush_delayed_work(&local->scan_work); in ieee80211_do_stop()
700 if (local->open_count == 0) { in ieee80211_do_stop()
701 ieee80211_stop_device(local); in ieee80211_do_stop()
708 ieee80211_configure_filter(local); in ieee80211_do_stop()
709 ieee80211_hw_config(local, hw_reconf_flags); in ieee80211_do_stop()
711 if (local->monitors == local->open_count) in ieee80211_do_stop()
712 ieee80211_add_virtual_monitor(local); in ieee80211_do_stop()
727 &tx_sdata->local->interfaces, list) { in ieee80211_stop_mbssid()
759 wiphy_lock(sdata->local->hw.wiphy); in ieee80211_stop()
761 wiphy_unlock(sdata->local->hw.wiphy); in ieee80211_stop()
769 struct ieee80211_local *local = sdata->local; in ieee80211_set_multicast_list() local
777 atomic_inc(&local->iff_allmultis); in ieee80211_set_multicast_list()
779 atomic_dec(&local->iff_allmultis); in ieee80211_set_multicast_list()
783 spin_lock_bh(&local->filter_lock); in ieee80211_set_multicast_list()
784 __hw_addr_sync(&local->mc_list, &dev->mc, dev->addr_len); in ieee80211_set_multicast_list()
785 spin_unlock_bh(&local->filter_lock); in ieee80211_set_multicast_list()
786 ieee80211_queue_work(&local->hw, &local->reconfig_filter); in ieee80211_set_multicast_list()
843 struct ieee80211_local *local = sdata->local; in ieee80211_monitor_select_queue() local
848 if (local->hw.queues < IEEE80211_NUM_ACS) in ieee80211_monitor_select_queue()
881 struct ieee80211_local *local; in ieee80211_netdev_fill_forward_path() local
886 local = sdata->local; in ieee80211_netdev_fill_forward_path()
888 if (!local->ops->net_fill_forward_path) in ieee80211_netdev_fill_forward_path()
928 ret = drv_net_fill_forward_path(local, sdata, &sta->sta, ctx, path); in ieee80211_netdev_fill_forward_path()
961 struct ieee80211_local *local = sdata->local; in ieee80211_set_sdata_offload_flags() local
966 if (ieee80211_hw_check(&local->hw, SUPPORTS_TX_ENCAP_OFFLOAD) && in ieee80211_set_sdata_offload_flags()
970 if (!ieee80211_hw_check(&local->hw, SUPPORTS_TX_FRAG) && in ieee80211_set_sdata_offload_flags()
971 local->hw.wiphy->frag_threshold != (u32)-1) in ieee80211_set_sdata_offload_flags()
974 if (local->monitors) in ieee80211_set_sdata_offload_flags()
980 if (ieee80211_hw_check(&local->hw, SUPPORTS_RX_DECAP_OFFLOAD) && in ieee80211_set_sdata_offload_flags()
984 if (local->monitors && in ieee80211_set_sdata_offload_flags()
985 !ieee80211_hw_check(&local->hw, SUPPORTS_CONC_MON_RX_DECAP)) in ieee80211_set_sdata_offload_flags()
1001 struct ieee80211_local *local = sdata->local; in ieee80211_set_vif_encap_ops() local
1012 if (!ieee80211_hw_check(&local->hw, SUPPORTS_TX_ENCAP_OFFLOAD) || in ieee80211_set_vif_encap_ops()
1027 struct ieee80211_local *local = sdata->local; in ieee80211_recalc_sdata_offload() local
1031 drv_update_vif_offload(local, sdata); in ieee80211_recalc_sdata_offload()
1035 list_for_each_entry(vsdata, &local->interfaces, list) { in ieee80211_recalc_sdata_offload()
1044 void ieee80211_recalc_offload(struct ieee80211_local *local) in ieee80211_recalc_offload() argument
1048 if (!ieee80211_hw_check(&local->hw, SUPPORTS_TX_ENCAP_OFFLOAD)) in ieee80211_recalc_offload()
1051 mutex_lock(&local->iflist_mtx); in ieee80211_recalc_offload()
1053 list_for_each_entry(sdata, &local->interfaces, list) { in ieee80211_recalc_offload()
1060 mutex_unlock(&local->iflist_mtx); in ieee80211_recalc_offload()
1066 struct ieee80211_local *local = sdata->local; in ieee80211_adjust_monitor_flags() local
1071 local->fif_##_s += offset; \ in ieee80211_adjust_monitor_flags()
1085 struct ieee80211_local *local = sdata->local; in ieee80211_set_default_queues() local
1089 if (ieee80211_hw_check(&local->hw, QUEUE_CONTROL)) in ieee80211_set_default_queues()
1091 else if (local->hw.queues >= IEEE80211_NUM_ACS) in ieee80211_set_default_queues()
1099 static void ieee80211_sdata_init(struct ieee80211_local *local, in ieee80211_sdata_init() argument
1102 sdata->local = local; in ieee80211_sdata_init()
1115 int ieee80211_add_virtual_monitor(struct ieee80211_local *local) in ieee80211_add_virtual_monitor() argument
1120 if (!ieee80211_hw_check(&local->hw, WANT_MONITOR_VIF)) in ieee80211_add_virtual_monitor()
1124 lockdep_assert_wiphy(local->hw.wiphy); in ieee80211_add_virtual_monitor()
1126 if (local->monitor_sdata) in ieee80211_add_virtual_monitor()
1129 sdata = kzalloc(sizeof(*sdata) + local->hw.vif_data_size, GFP_KERNEL); in ieee80211_add_virtual_monitor()
1136 wiphy_name(local->hw.wiphy)); in ieee80211_add_virtual_monitor()
1139 ieee80211_sdata_init(local, sdata); in ieee80211_add_virtual_monitor()
1143 ret = drv_add_interface(local, sdata); in ieee80211_add_virtual_monitor()
1158 mutex_lock(&local->iflist_mtx); in ieee80211_add_virtual_monitor()
1159 rcu_assign_pointer(local->monitor_sdata, sdata); in ieee80211_add_virtual_monitor()
1160 mutex_unlock(&local->iflist_mtx); in ieee80211_add_virtual_monitor()
1162 mutex_lock(&local->mtx); in ieee80211_add_virtual_monitor()
1163 ret = ieee80211_link_use_channel(&sdata->deflink, &local->monitor_chandef, in ieee80211_add_virtual_monitor()
1165 mutex_unlock(&local->mtx); in ieee80211_add_virtual_monitor()
1167 mutex_lock(&local->iflist_mtx); in ieee80211_add_virtual_monitor()
1168 RCU_INIT_POINTER(local->monitor_sdata, NULL); in ieee80211_add_virtual_monitor()
1169 mutex_unlock(&local->iflist_mtx); in ieee80211_add_virtual_monitor()
1171 drv_remove_interface(local, sdata); in ieee80211_add_virtual_monitor()
1183 void ieee80211_del_virtual_monitor(struct ieee80211_local *local) in ieee80211_del_virtual_monitor() argument
1187 if (!ieee80211_hw_check(&local->hw, WANT_MONITOR_VIF)) in ieee80211_del_virtual_monitor()
1191 lockdep_assert_wiphy(local->hw.wiphy); in ieee80211_del_virtual_monitor()
1193 mutex_lock(&local->iflist_mtx); in ieee80211_del_virtual_monitor()
1195 sdata = rcu_dereference_protected(local->monitor_sdata, in ieee80211_del_virtual_monitor()
1196 lockdep_is_held(&local->iflist_mtx)); in ieee80211_del_virtual_monitor()
1198 mutex_unlock(&local->iflist_mtx); in ieee80211_del_virtual_monitor()
1202 RCU_INIT_POINTER(local->monitor_sdata, NULL); in ieee80211_del_virtual_monitor()
1203 mutex_unlock(&local->iflist_mtx); in ieee80211_del_virtual_monitor()
1207 mutex_lock(&local->mtx); in ieee80211_del_virtual_monitor()
1209 mutex_unlock(&local->mtx); in ieee80211_del_virtual_monitor()
1211 drv_remove_interface(local, sdata); in ieee80211_del_virtual_monitor()
1225 struct ieee80211_local *local = sdata->local; in ieee80211_do_open() local
1237 mutex_lock(&local->mtx); in ieee80211_do_open()
1239 mutex_unlock(&local->mtx); in ieee80211_do_open()
1256 mutex_lock(&local->key_mtx); in ieee80211_do_open()
1259 mutex_unlock(&local->key_mtx); in ieee80211_do_open()
1285 if (local->open_count == 0) { in ieee80211_do_open()
1286 res = drv_start(local); in ieee80211_do_open()
1291 ieee80211_led_radio(local, true); in ieee80211_do_open()
1292 ieee80211_mod_tpt_led_trig(local, in ieee80211_do_open()
1301 eth_hw_addr_set(dev, local->hw.wiphy->perm_addr); in ieee80211_do_open()
1323 local->cooked_mntrs++; in ieee80211_do_open()
1328 res = drv_add_interface(local, sdata); in ieee80211_do_open()
1331 } else if (local->monitors == 0 && local->open_count == 0) { in ieee80211_do_open()
1332 res = ieee80211_add_virtual_monitor(local); in ieee80211_do_open()
1338 local->monitors++; in ieee80211_do_open()
1339 if (local->monitors == 1) { in ieee80211_do_open()
1340 local->hw.conf.flags |= IEEE80211_CONF_MONITOR; in ieee80211_do_open()
1345 ieee80211_configure_filter(local); in ieee80211_do_open()
1346 ieee80211_recalc_offload(local); in ieee80211_do_open()
1347 mutex_lock(&local->mtx); in ieee80211_do_open()
1348 ieee80211_recalc_idle(local); in ieee80211_do_open()
1349 mutex_unlock(&local->mtx); in ieee80211_do_open()
1355 ieee80211_del_virtual_monitor(local); in ieee80211_do_open()
1358 res = drv_add_interface(local, sdata); in ieee80211_do_open()
1370 local->fif_pspoll++; in ieee80211_do_open()
1371 local->fif_probe_req++; in ieee80211_do_open()
1373 ieee80211_configure_filter(local); in ieee80211_do_open()
1375 local->fif_probe_req++; in ieee80211_do_open()
1379 drv_config_iface_filter(local, sdata, in ieee80211_do_open()
1417 rcu_assign_pointer(local->p2p_sdata, sdata); in ieee80211_do_open()
1422 list_add_tail_rcu(&sdata->u.mntr.list, &local->mon_list); in ieee80211_do_open()
1434 atomic_inc(&local->iff_allmultis); in ieee80211_do_open()
1437 local->open_count++; in ieee80211_do_open()
1440 ieee80211_hw_config(local, hw_reconf_flags); in ieee80211_do_open()
1442 ieee80211_recalc_ps(local); in ieee80211_do_open()
1446 local->ops->wake_tx_queue) { in ieee80211_do_open()
1455 if (local->hw.queues < IEEE80211_NUM_ACS) in ieee80211_do_open()
1458 spin_lock_irqsave(&local->queue_stop_reason_lock, flags); in ieee80211_do_open()
1460 (local->queue_stop_reasons[sdata->vif.cab_queue] == 0 && in ieee80211_do_open()
1461 skb_queue_empty(&local->pending[sdata->vif.cab_queue]))) { in ieee80211_do_open()
1465 if (local->queue_stop_reasons[ac_queue] == 0 && in ieee80211_do_open()
1466 skb_queue_empty(&local->pending[ac_queue])) in ieee80211_do_open()
1470 spin_unlock_irqrestore(&local->queue_stop_reason_lock, flags); in ieee80211_do_open()
1477 drv_remove_interface(local, sdata); in ieee80211_do_open()
1479 if (!local->open_count) in ieee80211_do_open()
1480 drv_stop(local); in ieee80211_do_open()
1484 mutex_lock(&local->mtx); in ieee80211_do_open()
1486 mutex_unlock(&local->mtx); in ieee80211_do_open()
1513 static void ieee80211_iface_process_skb(struct ieee80211_local *local, in ieee80211_iface_process_skb() argument
1524 mutex_lock(&local->sta_mtx); in ieee80211_iface_process_skb()
1529 ieee80211_process_addba_request(local, sta, in ieee80211_iface_process_skb()
1533 ieee80211_process_addba_resp(local, sta, in ieee80211_iface_process_skb()
1545 mutex_unlock(&local->sta_mtx); in ieee80211_iface_process_skb()
1559 mutex_lock(&local->sta_mtx); in ieee80211_iface_process_skb()
1567 mutex_unlock(&local->sta_mtx); in ieee80211_iface_process_skb()
1614 mutex_lock(&local->sta_mtx); in ieee80211_iface_process_skb()
1624 mutex_unlock(&local->sta_mtx); in ieee80211_iface_process_skb()
1665 struct ieee80211_local *local = sdata->local; in ieee80211_iface_work() local
1671 if (test_bit(SCAN_SW_SCANNING, &local->scanning)) in ieee80211_iface_work()
1674 if (!ieee80211_can_run_worker(local)) in ieee80211_iface_work()
1684 ieee80211_iface_process_skb(local, sdata, skb); in ieee80211_iface_work()
1840 struct ieee80211_local *local = sdata->local; in ieee80211_runtime_change_iftype() local
1847 if (!local->ops->change_interface) in ieee80211_runtime_change_iftype()
1899 ieee80211_stop_vif_queues(local, sdata, in ieee80211_runtime_change_iftype()
1908 ret = drv_change_interface(local, sdata, internal_type, p2p); in ieee80211_runtime_change_iftype()
1925 ieee80211_wake_vif_queues(local, sdata, in ieee80211_runtime_change_iftype()
1957 static void ieee80211_assign_perm_addr(struct ieee80211_local *local, in ieee80211_assign_perm_addr() argument
1967 memcpy(perm_addr, local->hw.wiphy->perm_addr, ETH_ALEN); in ieee80211_assign_perm_addr()
1969 if (is_zero_ether_addr(local->hw.wiphy->addr_mask) && in ieee80211_assign_perm_addr()
1970 local->hw.wiphy->n_addresses <= 1) in ieee80211_assign_perm_addr()
1973 mutex_lock(&local->iflist_mtx); in ieee80211_assign_perm_addr()
1981 list_for_each_entry(sdata, &local->interfaces, list) { in ieee80211_assign_perm_addr()
1991 if (ieee80211_hw_check(&local->hw, P2P_DEV_ADDR_FOR_INTF)) { in ieee80211_assign_perm_addr()
1992 list_for_each_entry(sdata, &local->interfaces, list) { in ieee80211_assign_perm_addr()
2004 for (i = 0; i < local->hw.wiphy->n_addresses; i++) { in ieee80211_assign_perm_addr()
2007 list_for_each_entry(sdata, &local->interfaces, list) { in ieee80211_assign_perm_addr()
2008 if (ether_addr_equal(local->hw.wiphy->addresses[i].addr, in ieee80211_assign_perm_addr()
2017 local->hw.wiphy->addresses[i].addr, in ieee80211_assign_perm_addr()
2024 if (is_zero_ether_addr(local->hw.wiphy->addr_mask)) in ieee80211_assign_perm_addr()
2027 m = local->hw.wiphy->addr_mask; in ieee80211_assign_perm_addr()
2042 m = local->hw.wiphy->perm_addr; in ieee80211_assign_perm_addr()
2043 list_for_each_entry(sdata, &local->interfaces, list) { in ieee80211_assign_perm_addr()
2068 list_for_each_entry(sdata, &local->interfaces, list) { in ieee80211_assign_perm_addr()
2086 mutex_unlock(&local->iflist_mtx); in ieee80211_assign_perm_addr()
2089 int ieee80211_if_add(struct ieee80211_local *local, const char *name, in ieee80211_if_add() argument
2106 sdata = kzalloc(sizeof(*sdata) + local->hw.vif_data_size, in ieee80211_if_add()
2114 ieee80211_assign_perm_addr(local, wdev->address, type); in ieee80211_if_add()
2118 int size = ALIGN(sizeof(*sdata) + local->hw.vif_data_size, in ieee80211_if_add()
2122 if (local->ops->wake_tx_queue && in ieee80211_if_add()
2127 local->hw.txq_data_size; in ieee80211_if_add()
2129 if (local->ops->wake_tx_queue) { in ieee80211_if_add()
2133 if (local->hw.queues >= IEEE80211_NUM_ACS) in ieee80211_if_add()
2143 if (!local->ops->wake_tx_queue && local->hw.wiphy->tx_queue_len) in ieee80211_if_add()
2144 ndev->tx_queue_len = local->hw.wiphy->tx_queue_len; in ieee80211_if_add()
2146 dev_net_set(ndev, wiphy_net(local->hw.wiphy)); in ieee80211_if_add()
2154 ndev->needed_headroom = local->tx_headroom + in ieee80211_if_add()
2170 ieee80211_assign_perm_addr(local, ndev->perm_addr, type); in ieee80211_if_add()
2175 SET_NETDEV_DEV(ndev, wiphy_dev(local->hw.wiphy)); in ieee80211_if_add()
2193 sdata->wdev.wiphy = local->hw.wiphy; in ieee80211_if_add()
2195 ieee80211_sdata_init(local, sdata); in ieee80211_if_add()
2206 sband = local->hw.wiphy->bands[i]; in ieee80211_if_add()
2231 sdata->deflink.user_power_level = local->user_power_level; in ieee80211_if_add()
2241 ndev->features |= local->hw.netdev_features; in ieee80211_if_add()
2257 ndev->max_mtu = local->hw.max_mtu; in ieee80211_if_add()
2266 mutex_lock(&local->iflist_mtx); in ieee80211_if_add()
2267 list_add_tail_rcu(&sdata->list, &local->interfaces); in ieee80211_if_add()
2268 mutex_unlock(&local->iflist_mtx); in ieee80211_if_add()
2280 mutex_lock(&sdata->local->iflist_mtx); in ieee80211_if_remove()
2282 mutex_unlock(&sdata->local->iflist_mtx); in ieee80211_if_remove()
2285 ieee80211_txq_purge(sdata->local, to_txq_info(sdata->vif.txq)); in ieee80211_if_remove()
2304 void ieee80211_remove_interfaces(struct ieee80211_local *local) in ieee80211_remove_interfaces() argument
2323 cfg80211_shutdown_all_interfaces(local->hw.wiphy); in ieee80211_remove_interfaces()
2325 WARN(local->open_count, "%s: open count remains %d\n", in ieee80211_remove_interfaces()
2326 wiphy_name(local->hw.wiphy), local->open_count); in ieee80211_remove_interfaces()
2328 ieee80211_txq_teardown_flows(local); in ieee80211_remove_interfaces()
2330 mutex_lock(&local->iflist_mtx); in ieee80211_remove_interfaces()
2331 list_for_each_entry_safe(sdata, tmp, &local->interfaces, list) { in ieee80211_remove_interfaces()
2339 mutex_unlock(&local->iflist_mtx); in ieee80211_remove_interfaces()
2343 wiphy_lock(local->hw.wiphy); in ieee80211_remove_interfaces()
2349 wiphy_unlock(local->hw.wiphy); in ieee80211_remove_interfaces()