Lines Matching full:local

101 	struct ieee80211_local *local = sdata->local;  in ieee80211_check_concurrent_iface()  local
108 list_for_each_entry(nsdata, &local->interfaces, list) { in ieee80211_check_concurrent_iface()
155 struct ieee80211_local *local = sdata->local; in ieee80211_adjust_monitor_flags() local
160 local->fif_##_s += offset; \ in ieee80211_adjust_monitor_flags()
180 struct ieee80211_local *local = sdata->local; in ieee80211_do_open() local
225 if (local->open_count == 0) { in ieee80211_do_open()
226 res = drv_start(local); in ieee80211_do_open()
229 if (local->ops->napi_poll) in ieee80211_do_open()
230 napi_enable(&local->napi); in ieee80211_do_open()
233 ieee80211_led_radio(local, true); in ieee80211_do_open()
234 ieee80211_mod_tpt_led_trig(local, in ieee80211_do_open()
244 local->hw.wiphy->perm_addr, in ieee80211_do_open()
249 if (!local->open_count) in ieee80211_do_open()
250 drv_stop(local); in ieee80211_do_open()
261 local->cooked_mntrs++; in ieee80211_do_open()
266 local->monitors++; in ieee80211_do_open()
267 if (local->monitors == 1) { in ieee80211_do_open()
268 local->hw.conf.flags |= IEEE80211_CONF_MONITOR; in ieee80211_do_open()
273 ieee80211_configure_filter(local); in ieee80211_do_open()
279 res = drv_add_interface(local, sdata); in ieee80211_do_open()
285 local->fif_pspoll++; in ieee80211_do_open()
286 local->fif_probe_req++; in ieee80211_do_open()
288 ieee80211_configure_filter(local); in ieee80211_do_open()
290 local->fif_probe_req++; in ieee80211_do_open()
340 atomic_inc(&local->iff_allmultis); in ieee80211_do_open()
343 atomic_inc(&local->iff_promiscs); in ieee80211_do_open()
345 mutex_lock(&local->mtx); in ieee80211_do_open()
346 hw_reconf_flags |= __ieee80211_recalc_idle(local); in ieee80211_do_open()
347 mutex_unlock(&local->mtx); in ieee80211_do_open()
350 local->open_count++; in ieee80211_do_open()
353 ieee80211_hw_config(local, hw_reconf_flags); in ieee80211_do_open()
355 ieee80211_recalc_ps(local, -1); in ieee80211_do_open()
361 drv_remove_interface(local, sdata); in ieee80211_do_open()
363 if (!local->open_count) in ieee80211_do_open()
364 drv_stop(local); in ieee80211_do_open()
392 struct ieee80211_local *local = sdata->local; in ieee80211_do_stop() local
401 if (local->scan_sdata == sdata) in ieee80211_do_stop()
402 ieee80211_scan_cancel(local); in ieee80211_do_stop()
428 sta_info_flush(local, sdata); in ieee80211_do_stop()
437 atomic_dec(&local->iff_allmultis); in ieee80211_do_stop()
440 atomic_dec(&local->iff_promiscs); in ieee80211_do_stop()
443 local->fif_pspoll--; in ieee80211_do_stop()
444 local->fif_probe_req--; in ieee80211_do_stop()
446 local->fif_probe_req--; in ieee80211_do_stop()
450 spin_lock_bh(&local->filter_lock); in ieee80211_do_stop()
451 __hw_addr_unsync(&local->mc_list, &sdata->dev->mc, in ieee80211_do_stop()
453 spin_unlock_bh(&local->filter_lock); in ieee80211_do_stop()
456 ieee80211_configure_filter(local); in ieee80211_do_stop()
458 del_timer_sync(&local->dynamic_ps_timer); in ieee80211_do_stop()
459 cancel_work_sync(&local->dynamic_ps_enable_work); in ieee80211_do_stop()
487 local->total_ps_buffered -= skb_queue_len(&sdata->u.ap.ps_bc_buf); in ieee80211_do_stop()
492 local->open_count--; in ieee80211_do_stop()
501 local->cooked_mntrs--; in ieee80211_do_stop()
505 local->monitors--; in ieee80211_do_stop()
506 if (local->monitors == 0) { in ieee80211_do_stop()
507 local->hw.conf.flags &= ~IEEE80211_CONF_MONITOR; in ieee80211_do_stop()
512 ieee80211_configure_filter(local); in ieee80211_do_stop()
540 drv_remove_interface(local, sdata); in ieee80211_do_stop()
545 mutex_lock(&local->mtx); in ieee80211_do_stop()
546 hw_reconf_flags |= __ieee80211_recalc_idle(local); in ieee80211_do_stop()
547 mutex_unlock(&local->mtx); in ieee80211_do_stop()
549 ieee80211_recalc_ps(local, -1); in ieee80211_do_stop()
551 if (local->open_count == 0) { in ieee80211_do_stop()
552 if (local->ops->napi_poll) in ieee80211_do_stop()
553 napi_disable(&local->napi); in ieee80211_do_stop()
554 ieee80211_clear_tx_pending(local); in ieee80211_do_stop()
555 ieee80211_stop_device(local); in ieee80211_do_stop()
564 orig_ct = local->_oper_channel_type; in ieee80211_do_stop()
565 ieee80211_set_channel_type(local, NULL, NL80211_CHAN_NO_HT); in ieee80211_do_stop()
568 if (hw_reconf_flags || (orig_ct != local->_oper_channel_type)) in ieee80211_do_stop()
569 ieee80211_hw_config(local, hw_reconf_flags); in ieee80211_do_stop()
571 spin_lock_irqsave(&local->queue_stop_reason_lock, flags); in ieee80211_do_stop()
573 skb_queue_walk_safe(&local->pending[i], skb, tmp) { in ieee80211_do_stop()
576 __skb_unlink(skb, &local->pending[i]); in ieee80211_do_stop()
581 spin_unlock_irqrestore(&local->queue_stop_reason_lock, flags); in ieee80211_do_stop()
596 struct ieee80211_local *local = sdata->local; in ieee80211_set_multicast_list() local
606 atomic_inc(&local->iff_allmultis); in ieee80211_set_multicast_list()
608 atomic_dec(&local->iff_allmultis); in ieee80211_set_multicast_list()
614 atomic_inc(&local->iff_promiscs); in ieee80211_set_multicast_list()
616 atomic_dec(&local->iff_promiscs); in ieee80211_set_multicast_list()
619 spin_lock_bh(&local->filter_lock); in ieee80211_set_multicast_list()
620 __hw_addr_sync(&local->mc_list, &dev->mc, dev->addr_len); in ieee80211_set_multicast_list()
621 spin_unlock_bh(&local->filter_lock); in ieee80211_set_multicast_list()
622 ieee80211_queue_work(&local->hw, &local->reconfig_filter); in ieee80211_set_multicast_list()
632 struct ieee80211_local *local = sdata->local; in ieee80211_teardown_sdata() local
648 flushed = sta_info_flush(local, sdata); in ieee80211_teardown_sdata()
673 struct ieee80211_local *local = sdata->local; in ieee80211_monitor_select_queue() local
677 if (local->hw.queues < 4) in ieee80211_monitor_select_queue()
686 return ieee80211_select_queue_80211(local, skb, hdr); in ieee80211_monitor_select_queue()
712 struct ieee80211_local *local = sdata->local; in ieee80211_iface_work() local
720 if (local->scanning) in ieee80211_iface_work()
727 if (WARN(local->suspended, in ieee80211_iface_work()
747 mutex_lock(&local->sta_mtx); in ieee80211_iface_work()
753 local, sta, mgmt, len); in ieee80211_iface_work()
756 ieee80211_process_addba_resp(local, sta, in ieee80211_iface_work()
768 mutex_unlock(&local->sta_mtx); in ieee80211_iface_work()
788 mutex_lock(&local->sta_mtx); in ieee80211_iface_work()
799 mutex_unlock(&local->sta_mtx); in ieee80211_iface_work()
911 struct ieee80211_local *local = sdata->local; in ieee80211_runtime_change_iftype() local
918 if (!local->ops->change_interface) in ieee80211_runtime_change_iftype()
967 ret = drv_change_interface(local, sdata, internal_type, p2p); in ieee80211_runtime_change_iftype()
990 if (sdata->local->oper_channel->flags & IEEE80211_CHAN_NO_IBSS && in ieee80211_if_change_type()
1006 ieee80211_mandatory_rates(sdata->local, in ieee80211_if_change_type()
1007 sdata->local->hw.conf.channel->band); in ieee80211_if_change_type()
1015 static void ieee80211_assign_perm_addr(struct ieee80211_local *local, in ieee80211_assign_perm_addr() argument
1026 memcpy(dev->perm_addr, local->hw.wiphy->perm_addr, ETH_ALEN); in ieee80211_assign_perm_addr()
1028 if (is_zero_ether_addr(local->hw.wiphy->addr_mask) && in ieee80211_assign_perm_addr()
1029 local->hw.wiphy->n_addresses <= 1) in ieee80211_assign_perm_addr()
1033 mutex_lock(&local->iflist_mtx); in ieee80211_assign_perm_addr()
1042 list_for_each_entry(sdata, &local->interfaces, list) { in ieee80211_assign_perm_addr()
1052 for (i = 0; i < local->hw.wiphy->n_addresses; i++) { in ieee80211_assign_perm_addr()
1055 list_for_each_entry(sdata, &local->interfaces, list) { in ieee80211_assign_perm_addr()
1056 if (memcmp(local->hw.wiphy->addresses[i].addr, in ieee80211_assign_perm_addr()
1065 local->hw.wiphy->addresses[i].addr, in ieee80211_assign_perm_addr()
1072 if (is_zero_ether_addr(local->hw.wiphy->addr_mask)) in ieee80211_assign_perm_addr()
1075 m = local->hw.wiphy->addr_mask; in ieee80211_assign_perm_addr()
1086 m = local->hw.wiphy->perm_addr; in ieee80211_assign_perm_addr()
1106 list_for_each_entry(sdata, &local->interfaces, list) { in ieee80211_assign_perm_addr()
1124 mutex_unlock(&local->iflist_mtx); in ieee80211_assign_perm_addr()
1127 int ieee80211_if_add(struct ieee80211_local *local, const char *name, in ieee80211_if_add() argument
1137 ndev = alloc_netdev_mqs(sizeof(*sdata) + local->hw.vif_data_size, in ieee80211_if_add()
1138 name, ieee80211_if_setup, local->hw.queues, 1); in ieee80211_if_add()
1141 dev_net_set(ndev, wiphy_net(local->hw.wiphy)); in ieee80211_if_add()
1143 ndev->needed_headroom = local->tx_headroom + in ieee80211_if_add()
1156 ieee80211_assign_perm_addr(local, ndev, type); in ieee80211_if_add()
1158 SET_NETDEV_DEV(ndev, wiphy_dev(local->hw.wiphy)); in ieee80211_if_add()
1167 sdata->wdev.wiphy = local->hw.wiphy; in ieee80211_if_add()
1168 sdata->local = local; in ieee80211_if_add()
1181 sband = local->hw.wiphy->bands[i]; in ieee80211_if_add()
1199 mutex_lock(&local->iflist_mtx); in ieee80211_if_add()
1200 list_add_tail_rcu(&sdata->list, &local->interfaces); in ieee80211_if_add()
1201 mutex_unlock(&local->iflist_mtx); in ieee80211_if_add()
1217 mutex_lock(&sdata->local->iflist_mtx); in ieee80211_if_remove()
1219 mutex_unlock(&sdata->local->iflist_mtx); in ieee80211_if_remove()
1232 void ieee80211_remove_interfaces(struct ieee80211_local *local) in ieee80211_remove_interfaces() argument
1239 mutex_lock(&local->iflist_mtx); in ieee80211_remove_interfaces()
1240 list_for_each_entry_safe(sdata, tmp, &local->interfaces, list) { in ieee80211_remove_interfaces()
1248 mutex_unlock(&local->iflist_mtx); in ieee80211_remove_interfaces()
1253 static u32 ieee80211_idle_off(struct ieee80211_local *local, in ieee80211_idle_off() argument
1256 if (!(local->hw.conf.flags & IEEE80211_CONF_IDLE)) in ieee80211_idle_off()
1260 wiphy_debug(local->hw.wiphy, "device no longer idle - %s\n", reason); in ieee80211_idle_off()
1263 local->hw.conf.flags &= ~IEEE80211_CONF_IDLE; in ieee80211_idle_off()
1267 static u32 ieee80211_idle_on(struct ieee80211_local *local) in ieee80211_idle_on() argument
1269 if (local->hw.conf.flags & IEEE80211_CONF_IDLE) in ieee80211_idle_on()
1273 wiphy_debug(local->hw.wiphy, "device now idle\n"); in ieee80211_idle_on()
1276 drv_flush(local, false); in ieee80211_idle_on()
1278 local->hw.conf.flags |= IEEE80211_CONF_IDLE; in ieee80211_idle_on()
1282 u32 __ieee80211_recalc_idle(struct ieee80211_local *local) in __ieee80211_recalc_idle() argument
1292 !lockdep_is_held(&local->iflist_mtx)); in __ieee80211_recalc_idle()
1294 lockdep_assert_held(&local->mtx); in __ieee80211_recalc_idle()
1296 list_for_each_entry(sdata, &local->interfaces, list) { in __ieee80211_recalc_idle()
1321 list_for_each_entry(wk, &local->work_list, list) { in __ieee80211_recalc_idle()
1326 if (local->scan_sdata) { in __ieee80211_recalc_idle()
1328 local->scan_sdata->vif.bss_conf.idle = false; in __ieee80211_recalc_idle()
1331 if (local->hw_roc_channel) in __ieee80211_recalc_idle()
1334 list_for_each_entry(sdata, &local->interfaces, list) { in __ieee80211_recalc_idle()
1355 ieee80211_mod_tpt_led_trig(local, led_trig_start, led_trig_stop); in __ieee80211_recalc_idle()
1358 return ieee80211_idle_off(local, "hw remain-on-channel"); in __ieee80211_recalc_idle()
1360 return ieee80211_idle_off(local, "working"); in __ieee80211_recalc_idle()
1362 return ieee80211_idle_off(local, "scanning"); in __ieee80211_recalc_idle()
1364 return ieee80211_idle_on(local); in __ieee80211_recalc_idle()
1366 return ieee80211_idle_off(local, "in use"); in __ieee80211_recalc_idle()
1371 void ieee80211_recalc_idle(struct ieee80211_local *local) in ieee80211_recalc_idle() argument
1375 mutex_lock(&local->iflist_mtx); in ieee80211_recalc_idle()
1376 chg = __ieee80211_recalc_idle(local); in ieee80211_recalc_idle()
1377 mutex_unlock(&local->iflist_mtx); in ieee80211_recalc_idle()
1379 ieee80211_hw_config(local, chg); in ieee80211_recalc_idle()