Lines Matching refs:local

41 	struct ieee80211_local *local;  in wiphy_to_ieee80211_hw()  local
43 local = wiphy_priv(wiphy); in wiphy_to_ieee80211_hw()
44 return &local->hw; in wiphy_to_ieee80211_hw()
210 struct ieee80211_local *local = hw_to_local(hw); in ieee80211_rts_duration() local
218 sband = local->hw.wiphy->bands[frame_txctl->band]; in ieee80211_rts_duration()
254 struct ieee80211_local *local = hw_to_local(hw); in ieee80211_ctstoself_duration() local
262 sband = local->hw.wiphy->bands[frame_txctl->band]; in ieee80211_ctstoself_duration()
293 struct ieee80211_local *local = sdata->local; in __ieee80211_wake_txqs() local
295 struct fq *fq = &local->fq; in __ieee80211_wake_txqs()
309 list_for_each_entry_rcu(sta, &local->sta_list, list) { in __ieee80211_wake_txqs()
329 drv_wake_tx_queue(local, txqi); in __ieee80211_wake_txqs()
345 drv_wake_tx_queue(local, txqi); in __ieee80211_wake_txqs()
354 __releases(&local->queue_stop_reason_lock)
355 __acquires(&local->queue_stop_reason_lock)
356 _ieee80211_wake_txqs(struct ieee80211_local *local, unsigned long *flags) in _ieee80211_wake_txqs() argument
364 if (local->hw.queues < IEEE80211_NUM_ACS) in _ieee80211_wake_txqs()
367 for (i = 0; i < local->hw.queues; i++) { in _ieee80211_wake_txqs()
368 if (local->queue_stop_reasons[i]) in _ieee80211_wake_txqs()
371 spin_unlock_irqrestore(&local->queue_stop_reason_lock, *flags); in _ieee80211_wake_txqs()
372 list_for_each_entry_rcu(sdata, &local->interfaces, list) { in _ieee80211_wake_txqs()
383 spin_lock_irqsave(&local->queue_stop_reason_lock, *flags); in _ieee80211_wake_txqs()
391 struct ieee80211_local *local = (struct ieee80211_local *)data; in ieee80211_wake_txqs() local
394 spin_lock_irqsave(&local->queue_stop_reason_lock, flags); in ieee80211_wake_txqs()
395 _ieee80211_wake_txqs(local, &flags); in ieee80211_wake_txqs()
396 spin_unlock_irqrestore(&local->queue_stop_reason_lock, flags); in ieee80211_wake_txqs()
399 void ieee80211_propagate_queue_wake(struct ieee80211_local *local, int queue) in ieee80211_propagate_queue_wake() argument
404 if (local->ops->wake_tx_queue) in ieee80211_propagate_queue_wake()
407 if (local->hw.queues < IEEE80211_NUM_ACS) in ieee80211_propagate_queue_wake()
410 list_for_each_entry_rcu(sdata, &local->interfaces, list) { in ieee80211_propagate_queue_wake()
417 local->queue_stop_reasons[sdata->vif.cab_queue] != 0) in ieee80211_propagate_queue_wake()
425 local->queue_stop_reasons[ac_queue] == 0 && in ieee80211_propagate_queue_wake()
426 skb_queue_empty(&local->pending[ac_queue]))) in ieee80211_propagate_queue_wake()
437 struct ieee80211_local *local = hw_to_local(hw); in __ieee80211_wake_queue() local
439 trace_wake_queue(local, queue, reason); in __ieee80211_wake_queue()
444 if (!test_bit(reason, &local->queue_stop_reasons[queue])) in __ieee80211_wake_queue()
448 local->q_stop_reasons[queue][reason] = 0; in __ieee80211_wake_queue()
450 local->q_stop_reasons[queue][reason]--; in __ieee80211_wake_queue()
451 if (WARN_ON(local->q_stop_reasons[queue][reason] < 0)) in __ieee80211_wake_queue()
452 local->q_stop_reasons[queue][reason] = 0; in __ieee80211_wake_queue()
455 if (local->q_stop_reasons[queue][reason] == 0) in __ieee80211_wake_queue()
456 __clear_bit(reason, &local->queue_stop_reasons[queue]); in __ieee80211_wake_queue()
458 if (local->queue_stop_reasons[queue] != 0) in __ieee80211_wake_queue()
462 if (skb_queue_empty(&local->pending[queue])) { in __ieee80211_wake_queue()
464 ieee80211_propagate_queue_wake(local, queue); in __ieee80211_wake_queue()
467 tasklet_schedule(&local->tx_pending_tasklet); in __ieee80211_wake_queue()
476 if (local->ops->wake_tx_queue) { in __ieee80211_wake_queue()
478 tasklet_schedule(&local->wake_txqs_tasklet); in __ieee80211_wake_queue()
480 _ieee80211_wake_txqs(local, flags); in __ieee80211_wake_queue()
488 struct ieee80211_local *local = hw_to_local(hw); in ieee80211_wake_queue_by_reason() local
491 spin_lock_irqsave(&local->queue_stop_reason_lock, flags); in ieee80211_wake_queue_by_reason()
493 spin_unlock_irqrestore(&local->queue_stop_reason_lock, flags); in ieee80211_wake_queue_by_reason()
508 struct ieee80211_local *local = hw_to_local(hw); in __ieee80211_stop_queue() local
512 trace_stop_queue(local, queue, reason); in __ieee80211_stop_queue()
518 local->q_stop_reasons[queue][reason] = 1; in __ieee80211_stop_queue()
520 local->q_stop_reasons[queue][reason]++; in __ieee80211_stop_queue()
522 if (__test_and_set_bit(reason, &local->queue_stop_reasons[queue])) in __ieee80211_stop_queue()
525 if (local->hw.queues < IEEE80211_NUM_ACS) in __ieee80211_stop_queue()
529 list_for_each_entry_rcu(sdata, &local->interfaces, list) { in __ieee80211_stop_queue()
538 if (!local->ops->wake_tx_queue) { in __ieee80211_stop_queue()
542 spin_lock(&local->fq.lock); in __ieee80211_stop_queue()
544 spin_unlock(&local->fq.lock); in __ieee80211_stop_queue()
555 struct ieee80211_local *local = hw_to_local(hw); in ieee80211_stop_queue_by_reason() local
558 spin_lock_irqsave(&local->queue_stop_reason_lock, flags); in ieee80211_stop_queue_by_reason()
560 spin_unlock_irqrestore(&local->queue_stop_reason_lock, flags); in ieee80211_stop_queue_by_reason()
571 void ieee80211_add_pending_skb(struct ieee80211_local *local, in ieee80211_add_pending_skb() argument
574 struct ieee80211_hw *hw = &local->hw; in ieee80211_add_pending_skb()
580 ieee80211_free_txskb(&local->hw, skb); in ieee80211_add_pending_skb()
584 spin_lock_irqsave(&local->queue_stop_reason_lock, flags); in ieee80211_add_pending_skb()
587 __skb_queue_tail(&local->pending[queue], skb); in ieee80211_add_pending_skb()
590 spin_unlock_irqrestore(&local->queue_stop_reason_lock, flags); in ieee80211_add_pending_skb()
593 void ieee80211_add_pending_skbs(struct ieee80211_local *local, in ieee80211_add_pending_skbs() argument
596 struct ieee80211_hw *hw = &local->hw; in ieee80211_add_pending_skbs()
601 spin_lock_irqsave(&local->queue_stop_reason_lock, flags); in ieee80211_add_pending_skbs()
606 ieee80211_free_txskb(&local->hw, skb); in ieee80211_add_pending_skbs()
616 __skb_queue_tail(&local->pending[queue], skb); in ieee80211_add_pending_skbs()
623 spin_unlock_irqrestore(&local->queue_stop_reason_lock, flags); in ieee80211_add_pending_skbs()
631 struct ieee80211_local *local = hw_to_local(hw); in ieee80211_stop_queues_by_reason() local
635 spin_lock_irqsave(&local->queue_stop_reason_lock, flags); in ieee80211_stop_queues_by_reason()
640 spin_unlock_irqrestore(&local->queue_stop_reason_lock, flags); in ieee80211_stop_queues_by_reason()
653 struct ieee80211_local *local = hw_to_local(hw); in ieee80211_queue_stopped() local
660 spin_lock_irqsave(&local->queue_stop_reason_lock, flags); in ieee80211_queue_stopped()
662 &local->queue_stop_reasons[queue]); in ieee80211_queue_stopped()
663 spin_unlock_irqrestore(&local->queue_stop_reason_lock, flags); in ieee80211_queue_stopped()
673 struct ieee80211_local *local = hw_to_local(hw); in ieee80211_wake_queues_by_reason() local
677 spin_lock_irqsave(&local->queue_stop_reason_lock, flags); in ieee80211_wake_queues_by_reason()
682 spin_unlock_irqrestore(&local->queue_stop_reason_lock, flags); in ieee80211_wake_queues_by_reason()
694 ieee80211_get_vif_queues(struct ieee80211_local *local, in ieee80211_get_vif_queues() argument
699 if (sdata && ieee80211_hw_check(&local->hw, QUEUE_CONTROL)) { in ieee80211_get_vif_queues()
710 queues = BIT(local->hw.queues) - 1; in ieee80211_get_vif_queues()
716 void __ieee80211_flush_queues(struct ieee80211_local *local, in __ieee80211_flush_queues() argument
720 if (!local->ops->flush) in __ieee80211_flush_queues()
727 if (!queues || !ieee80211_hw_check(&local->hw, QUEUE_CONTROL)) in __ieee80211_flush_queues()
728 queues = ieee80211_get_vif_queues(local, sdata); in __ieee80211_flush_queues()
730 ieee80211_stop_queues_by_reason(&local->hw, queues, in __ieee80211_flush_queues()
734 drv_flush(local, sdata, queues, drop); in __ieee80211_flush_queues()
736 ieee80211_wake_queues_by_reason(&local->hw, queues, in __ieee80211_flush_queues()
741 void ieee80211_flush_queues(struct ieee80211_local *local, in ieee80211_flush_queues() argument
744 __ieee80211_flush_queues(local, sdata, 0, drop); in ieee80211_flush_queues()
747 void ieee80211_stop_vif_queues(struct ieee80211_local *local, in ieee80211_stop_vif_queues() argument
751 ieee80211_stop_queues_by_reason(&local->hw, in ieee80211_stop_vif_queues()
752 ieee80211_get_vif_queues(local, sdata), in ieee80211_stop_vif_queues()
756 void ieee80211_wake_vif_queues(struct ieee80211_local *local, in ieee80211_wake_vif_queues() argument
760 ieee80211_wake_queues_by_reason(&local->hw, in ieee80211_wake_vif_queues()
761 ieee80211_get_vif_queues(local, sdata), in ieee80211_wake_vif_queues()
765 static void __iterate_interfaces(struct ieee80211_local *local, in __iterate_interfaces() argument
774 list_for_each_entry_rcu(sdata, &local->interfaces, list) { in __iterate_interfaces()
796 sdata = rcu_dereference_check(local->monitor_sdata, in __iterate_interfaces()
797 lockdep_is_held(&local->iflist_mtx) || in __iterate_interfaces()
811 struct ieee80211_local *local = hw_to_local(hw); in ieee80211_iterate_interfaces() local
813 mutex_lock(&local->iflist_mtx); in ieee80211_iterate_interfaces()
814 __iterate_interfaces(local, iter_flags, iterator, data); in ieee80211_iterate_interfaces()
815 mutex_unlock(&local->iflist_mtx); in ieee80211_iterate_interfaces()
825 struct ieee80211_local *local = hw_to_local(hw); in ieee80211_iterate_active_interfaces_atomic() local
828 __iterate_interfaces(local, iter_flags | IEEE80211_IFACE_ITER_ACTIVE, in ieee80211_iterate_active_interfaces_atomic()
840 struct ieee80211_local *local = hw_to_local(hw); in ieee80211_iterate_active_interfaces_rtnl() local
844 __iterate_interfaces(local, iter_flags | IEEE80211_IFACE_ITER_ACTIVE, in ieee80211_iterate_active_interfaces_rtnl()
849 static void __iterate_stations(struct ieee80211_local *local, in __iterate_stations() argument
856 list_for_each_entry_rcu(sta, &local->sta_list, list) { in __iterate_stations()
869 struct ieee80211_local *local = hw_to_local(hw); in ieee80211_iterate_stations_atomic() local
872 __iterate_stations(local, iterator, data); in ieee80211_iterate_stations_atomic()
914 static bool ieee80211_can_queue_work(struct ieee80211_local *local) in ieee80211_can_queue_work() argument
916 if (local->quiescing || (local->suspended && !local->resuming)) { in ieee80211_can_queue_work()
926 struct ieee80211_local *local = hw_to_local(hw); in ieee80211_queue_work() local
928 if (!ieee80211_can_queue_work(local)) in ieee80211_queue_work()
931 queue_work(local->workqueue, work); in ieee80211_queue_work()
939 struct ieee80211_local *local = hw_to_local(hw); in ieee80211_queue_delayed_work() local
941 if (!ieee80211_can_queue_work(local)) in ieee80211_queue_delayed_work()
944 queue_delayed_work(local->workqueue, dwork, delay); in ieee80211_queue_delayed_work()
1569 struct ieee80211_local *local = sdata->local; in ieee80211_set_wmm_default() local
1577 if (!local->ops->conf_tx) in ieee80211_set_wmm_default()
1580 if (local->hw.queues < IEEE80211_NUM_ACS) in ieee80211_set_wmm_default()
1664 drv_conf_tx(local, sdata, ac, &qparam); in ieee80211_set_wmm_default()
1683 struct ieee80211_local *local = sdata->local; in ieee80211_send_auth() local
1689 skb = dev_alloc_skb(local->hw.extra_tx_headroom + IEEE80211_WEP_IV_LEN + in ieee80211_send_auth()
1694 skb_reserve(skb, local->hw.extra_tx_headroom + IEEE80211_WEP_IV_LEN); in ieee80211_send_auth()
1710 err = ieee80211_wep_encrypt(local, skb, key, key_len, key_idx); in ieee80211_send_auth()
1724 struct ieee80211_local *local = sdata->local; in ieee80211_send_deauth_disassoc() local
1739 skb = dev_alloc_skb(local->hw.extra_tx_headroom + in ieee80211_send_deauth_disassoc()
1744 skb_reserve(skb, local->hw.extra_tx_headroom); in ieee80211_send_deauth_disassoc()
1779 struct ieee80211_local *local = sdata->local; in ieee80211_build_preq_ies_band() local
1794 sband = local->hw.wiphy->bands[band]; in ieee80211_build_preq_ies_band()
2031 struct ieee80211_local *local = sdata->local; in ieee80211_build_probe_req() local
2050 skb = ieee80211_probereq_get(&local->hw, src, ssid, ssid_len, in ieee80211_build_probe_req()
2082 sband = sdata->local->hw.wiphy->bands[band]; in ieee80211_sta_get_rates()
2126 void ieee80211_stop_device(struct ieee80211_local *local) in ieee80211_stop_device() argument
2128 ieee80211_led_radio(local, false); in ieee80211_stop_device()
2129 ieee80211_mod_tpt_led_trig(local, 0, IEEE80211_TPT_LEDTRIG_FL_RADIO); in ieee80211_stop_device()
2131 cancel_work_sync(&local->reconfig_filter); in ieee80211_stop_device()
2133 flush_workqueue(local->workqueue); in ieee80211_stop_device()
2134 drv_stop(local); in ieee80211_stop_device()
2137 static void ieee80211_flush_completed_scan(struct ieee80211_local *local, in ieee80211_flush_completed_scan() argument
2147 if (test_bit(SCAN_COMPLETED, &local->scanning)) { in ieee80211_flush_completed_scan()
2154 set_bit(SCAN_ABORTED, &local->scanning); in ieee80211_flush_completed_scan()
2155 ieee80211_queue_delayed_work(&local->hw, &local->scan_work, 0); in ieee80211_flush_completed_scan()
2156 flush_delayed_work(&local->scan_work); in ieee80211_flush_completed_scan()
2160 static void ieee80211_handle_reconfig_failure(struct ieee80211_local *local) in ieee80211_handle_reconfig_failure() argument
2175 local->resuming = false; in ieee80211_handle_reconfig_failure()
2176 local->suspended = false; in ieee80211_handle_reconfig_failure()
2177 local->in_reconfig = false; in ieee80211_handle_reconfig_failure()
2179 ieee80211_flush_completed_scan(local, true); in ieee80211_handle_reconfig_failure()
2184 ieee80211_sched_scan_end(local); in ieee80211_handle_reconfig_failure()
2186 list_for_each_entry(sdata, &local->interfaces, list) in ieee80211_handle_reconfig_failure()
2192 mutex_lock(&local->chanctx_mtx); in ieee80211_handle_reconfig_failure()
2193 list_for_each_entry(ctx, &local->chanctx_list, list) in ieee80211_handle_reconfig_failure()
2195 mutex_unlock(&local->chanctx_mtx); in ieee80211_handle_reconfig_failure()
2197 cfg80211_shutdown_all_interfaces(local->hw.wiphy); in ieee80211_handle_reconfig_failure()
2200 static void ieee80211_assign_chanctx(struct ieee80211_local *local, in ieee80211_assign_chanctx() argument
2206 if (!local->use_chanctx) in ieee80211_assign_chanctx()
2209 mutex_lock(&local->chanctx_mtx); in ieee80211_assign_chanctx()
2211 lockdep_is_held(&local->chanctx_mtx)); in ieee80211_assign_chanctx()
2214 drv_assign_vif_chanctx(local, sdata, ctx); in ieee80211_assign_chanctx()
2216 mutex_unlock(&local->chanctx_mtx); in ieee80211_assign_chanctx()
2221 struct ieee80211_local *local = sdata->local; in ieee80211_reconfig_stations() local
2225 mutex_lock(&local->sta_mtx); in ieee80211_reconfig_stations()
2226 list_for_each_entry(sta, &local->sta_list, list) { in ieee80211_reconfig_stations()
2234 WARN_ON(drv_sta_state(local, sta->sdata, sta, state, in ieee80211_reconfig_stations()
2237 mutex_unlock(&local->sta_mtx); in ieee80211_reconfig_stations()
2245 res = drv_start_nan(sdata->local, sdata, in ieee80211_reconfig_nan()
2250 funcs = kcalloc(sdata->local->hw.max_nan_de_entries + 1, in ieee80211_reconfig_nan()
2268 res = drv_add_nan_func(sdata->local, sdata, funcs[i]); in ieee80211_reconfig_nan()
2281 int ieee80211_reconfig(struct ieee80211_local *local) in ieee80211_reconfig() argument
2283 struct ieee80211_hw *hw = &local->hw; in ieee80211_reconfig()
2292 bool suspended = local->suspended; in ieee80211_reconfig()
2295 if (!local->open_count) in ieee80211_reconfig()
2300 local->resuming = true; in ieee80211_reconfig()
2302 if (local->wowlan) { in ieee80211_reconfig()
2309 local->suspended = false; in ieee80211_reconfig()
2310 res = drv_resume(local); in ieee80211_reconfig()
2311 local->wowlan = false; in ieee80211_reconfig()
2313 local->resuming = false; in ieee80211_reconfig()
2325 local->suspended = true; in ieee80211_reconfig()
2336 if (suspended && local->in_reconfig && !reconfig_due_to_wowlan) in ieee80211_reconfig()
2337 cancel_work_sync(&local->restart_work); in ieee80211_reconfig()
2339 local->started = false; in ieee80211_reconfig()
2347 res = drv_start(local); in ieee80211_reconfig()
2353 ieee80211_handle_reconfig_failure(local); in ieee80211_reconfig()
2358 drv_set_frag_threshold(local, hw->wiphy->frag_threshold); in ieee80211_reconfig()
2361 drv_set_rts_threshold(local, hw->wiphy->rts_threshold); in ieee80211_reconfig()
2364 drv_set_coverage_class(local, hw->wiphy->coverage_class); in ieee80211_reconfig()
2366 ieee80211_led_radio(local, true); in ieee80211_reconfig()
2367 ieee80211_mod_tpt_led_trig(local, in ieee80211_reconfig()
2371 sdata = rtnl_dereference(local->monitor_sdata); in ieee80211_reconfig()
2374 WARN_ON(local->resuming); in ieee80211_reconfig()
2375 res = drv_add_interface(local, sdata); in ieee80211_reconfig()
2377 RCU_INIT_POINTER(local->monitor_sdata, NULL); in ieee80211_reconfig()
2383 list_for_each_entry(sdata, &local->interfaces, list) { in ieee80211_reconfig()
2387 res = drv_add_interface(local, sdata); in ieee80211_reconfig()
2397 list_for_each_entry_continue_reverse(sdata, &local->interfaces, in ieee80211_reconfig()
2402 drv_remove_interface(local, sdata); in ieee80211_reconfig()
2403 ieee80211_handle_reconfig_failure(local); in ieee80211_reconfig()
2408 if (local->use_chanctx) { in ieee80211_reconfig()
2409 mutex_lock(&local->chanctx_mtx); in ieee80211_reconfig()
2410 list_for_each_entry(ctx, &local->chanctx_list, list) in ieee80211_reconfig()
2413 WARN_ON(drv_add_chanctx(local, ctx)); in ieee80211_reconfig()
2414 mutex_unlock(&local->chanctx_mtx); in ieee80211_reconfig()
2416 sdata = rtnl_dereference(local->monitor_sdata); in ieee80211_reconfig()
2418 ieee80211_assign_chanctx(local, sdata); in ieee80211_reconfig()
2422 ieee80211_hw_config(local, ~0); in ieee80211_reconfig()
2424 ieee80211_configure_filter(local); in ieee80211_reconfig()
2427 list_for_each_entry(sdata, &local->interfaces, list) { in ieee80211_reconfig()
2433 ieee80211_assign_chanctx(local, sdata); in ieee80211_reconfig()
2441 WARN_ON(drv_join_ibss(local, sdata)); in ieee80211_reconfig()
2448 drv_conf_tx(local, sdata, i, in ieee80211_reconfig()
2499 wiphy_ext_feature_isset(sdata->local->hw.wiphy, in ieee80211_reconfig()
2507 drv_start_ap(local, sdata); in ieee80211_reconfig()
2520 ieee80211_handle_reconfig_failure(local); in ieee80211_reconfig()
2539 ieee80211_recalc_ps(local); in ieee80211_reconfig()
2547 if (!(local->hw.conf.flags & IEEE80211_CONF_PS)) { in ieee80211_reconfig()
2548 list_for_each_entry(sdata, &local->interfaces, list) { in ieee80211_reconfig()
2554 ieee80211_send_nullfunc(local, sdata, false); in ieee80211_reconfig()
2559 mutex_lock(&local->sta_mtx); in ieee80211_reconfig()
2560 list_for_each_entry(sta, &local->sta_list, list) { in ieee80211_reconfig()
2572 WARN_ON(drv_sta_state(local, sta->sdata, sta, state, in ieee80211_reconfig()
2575 mutex_unlock(&local->sta_mtx); in ieee80211_reconfig()
2578 list_for_each_entry(sdata, &local->interfaces, list) in ieee80211_reconfig()
2582 mutex_lock(&local->mtx); in ieee80211_reconfig()
2583 sched_scan_sdata = rcu_dereference_protected(local->sched_scan_sdata, in ieee80211_reconfig()
2584 lockdep_is_held(&local->mtx)); in ieee80211_reconfig()
2585 sched_scan_req = rcu_dereference_protected(local->sched_scan_req, in ieee80211_reconfig()
2586 lockdep_is_held(&local->mtx)); in ieee80211_reconfig()
2598 RCU_INIT_POINTER(local->sched_scan_sdata, NULL); in ieee80211_reconfig()
2599 RCU_INIT_POINTER(local->sched_scan_req, NULL); in ieee80211_reconfig()
2602 mutex_unlock(&local->mtx); in ieee80211_reconfig()
2605 cfg80211_sched_scan_stopped_rtnl(local->hw.wiphy, 0); in ieee80211_reconfig()
2609 if (local->monitors == local->open_count && local->monitors > 0) in ieee80211_reconfig()
2610 ieee80211_add_virtual_monitor(local); in ieee80211_reconfig()
2623 mutex_lock(&local->sta_mtx); in ieee80211_reconfig()
2625 list_for_each_entry(sta, &local->sta_list, list) { in ieee80211_reconfig()
2626 if (!local->resuming) in ieee80211_reconfig()
2632 mutex_unlock(&local->sta_mtx); in ieee80211_reconfig()
2635 if (local->in_reconfig) { in ieee80211_reconfig()
2636 local->in_reconfig = false; in ieee80211_reconfig()
2640 mutex_lock(&local->mtx); in ieee80211_reconfig()
2641 ieee80211_start_next_roc(local); in ieee80211_reconfig()
2642 mutex_unlock(&local->mtx); in ieee80211_reconfig()
2645 list_for_each_entry(sdata, &local->interfaces, list) in ieee80211_reconfig()
2646 ieee80211_queue_work(&local->hw, &sdata->work); in ieee80211_reconfig()
2657 if (local->open_count && (!suspended || reconfig_due_to_wowlan)) in ieee80211_reconfig()
2658 drv_reconfig_complete(local, IEEE80211_RECONFIG_TYPE_RESTART); in ieee80211_reconfig()
2665 local->suspended = false; in ieee80211_reconfig()
2667 local->resuming = false; in ieee80211_reconfig()
2669 ieee80211_flush_completed_scan(local, false); in ieee80211_reconfig()
2671 if (local->open_count && !reconfig_due_to_wowlan) in ieee80211_reconfig()
2672 drv_reconfig_complete(local, IEEE80211_RECONFIG_TYPE_SUSPEND); in ieee80211_reconfig()
2674 list_for_each_entry(sdata, &local->interfaces, list) { in ieee80211_reconfig()
2681 mod_timer(&local->sta_cleanup, jiffies + 1); in ieee80211_reconfig()
2692 struct ieee80211_local *local; in ieee80211_resume_disconnect() local
2699 local = sdata->local; in ieee80211_resume_disconnect()
2701 if (WARN_ON(!local->resuming)) in ieee80211_resume_disconnect()
2709 mutex_lock(&local->key_mtx); in ieee80211_resume_disconnect()
2712 mutex_unlock(&local->key_mtx); in ieee80211_resume_disconnect()
2718 struct ieee80211_local *local = sdata->local; in ieee80211_recalc_smps() local
2722 mutex_lock(&local->chanctx_mtx); in ieee80211_recalc_smps()
2725 lockdep_is_held(&local->chanctx_mtx)); in ieee80211_recalc_smps()
2737 ieee80211_recalc_smps_chanctx(local, chanctx); in ieee80211_recalc_smps()
2739 mutex_unlock(&local->chanctx_mtx); in ieee80211_recalc_smps()
2744 struct ieee80211_local *local = sdata->local; in ieee80211_recalc_min_chandef() local
2748 mutex_lock(&local->chanctx_mtx); in ieee80211_recalc_min_chandef()
2751 lockdep_is_held(&local->chanctx_mtx)); in ieee80211_recalc_min_chandef()
2757 ieee80211_recalc_chanctx_min_def(local, chanctx); in ieee80211_recalc_min_chandef()
2759 mutex_unlock(&local->chanctx_mtx); in ieee80211_recalc_min_chandef()
3366 struct ieee80211_local *local = sdata->local; in ieee80211_chandef_he_6ghz_oper() local
3379 sband = local->hw.wiphy->bands[NL80211_BAND_6GHZ]; in ieee80211_chandef_he_6ghz_oper()
3413 he_chandef.chan = ieee80211_get_channel(sdata->local->hw.wiphy, freq); in ieee80211_chandef_he_6ghz_oper()
3539 struct ieee80211_local *local = sdata->local; in ieee80211_add_srates_ie() local
3548 sband = local->hw.wiphy->bands[band]; in ieee80211_add_srates_ie()
3583 struct ieee80211_local *local = sdata->local; in ieee80211_add_ext_srates_ie() local
3593 sband = local->hw.wiphy->bands[band]; in ieee80211_add_ext_srates_ie()
3668 u64 ieee80211_calculate_rx_timestamp(struct ieee80211_local *local, in ieee80211_calculate_rx_timestamp() argument
3716 sband = local->hw.wiphy->bands[status->band]; in ieee80211_calculate_rx_timestamp()
3751 void ieee80211_dfs_cac_cancel(struct ieee80211_local *local) in ieee80211_dfs_cac_cancel() argument
3759 mutex_lock(&local->mtx); in ieee80211_dfs_cac_cancel()
3760 list_for_each_entry(sdata, &local->interfaces, list) { in ieee80211_dfs_cac_cancel()
3776 mutex_unlock(&local->mtx); in ieee80211_dfs_cac_cancel()
3781 struct ieee80211_local *local = in ieee80211_dfs_radar_detected_work() local
3783 struct cfg80211_chan_def chandef = local->hw.conf.chandef; in ieee80211_dfs_radar_detected_work()
3787 mutex_lock(&local->chanctx_mtx); in ieee80211_dfs_radar_detected_work()
3788 list_for_each_entry(ctx, &local->chanctx_list, list) { in ieee80211_dfs_radar_detected_work()
3795 mutex_unlock(&local->chanctx_mtx); in ieee80211_dfs_radar_detected_work()
3798 ieee80211_dfs_cac_cancel(local); in ieee80211_dfs_radar_detected_work()
3805 cfg80211_radar_event(local->hw.wiphy, &chandef, GFP_KERNEL); in ieee80211_dfs_radar_detected_work()
3810 struct ieee80211_local *local = hw_to_local(hw); in ieee80211_radar_detected() local
3812 trace_api_radar_detected(local); in ieee80211_radar_detected()
3814 schedule_work(&local->radar_detected_work); in ieee80211_radar_detected()
3913 struct ieee80211_local *local = sdata->local; in ieee80211_send_action_csa() local
3923 skb = dev_alloc_skb(local->tx_headroom + hdr_len + in ieee80211_send_action_csa()
3931 skb_reserve(skb, local->tx_headroom); in ieee80211_send_action_csa()
4019 ieee80211_cs_get(struct ieee80211_local *local, u32 cipher, in ieee80211_cs_get() argument
4022 const struct ieee80211_cipher_scheme *l = local->hw.cipher_schemes; in ieee80211_cs_get()
4023 int n = local->hw.n_cipher_schemes; in ieee80211_cs_get()
4040 int ieee80211_cs_headroom(struct ieee80211_local *local, in ieee80211_cs_headroom() argument
4049 cs = ieee80211_cs_get(local, crypto->ciphers_pairwise[i], in ieee80211_cs_headroom()
4056 cs = ieee80211_cs_get(local, crypto->cipher_group, iftype); in ieee80211_cs_headroom()
4210 void ieee80211_recalc_dtim(struct ieee80211_local *local, in ieee80211_recalc_dtim() argument
4213 u64 tsf = drv_get_tsf(local, sdata); in ieee80211_recalc_dtim()
4251 static u8 ieee80211_chanctx_radar_detect(struct ieee80211_local *local, in ieee80211_chanctx_radar_detect() argument
4257 lockdep_assert_held(&local->chanctx_mtx); in ieee80211_chanctx_radar_detect()
4285 struct ieee80211_local *local = sdata->local; in ieee80211_check_combinations() local
4294 lockdep_assert_held(&local->chanctx_mtx); in ieee80211_check_combinations()
4317 if (cfg80211_iftype_allowed(local->hw.wiphy, iftype, 0, 1)) { in ieee80211_check_combinations()
4329 list_for_each_entry(ctx, &local->chanctx_list, list) { in ieee80211_check_combinations()
4333 ieee80211_chanctx_radar_detect(local, ctx); in ieee80211_check_combinations()
4345 list_for_each_entry_rcu(sdata_iter, &local->interfaces, list) { in ieee80211_check_combinations()
4352 cfg80211_iftype_allowed(local->hw.wiphy, in ieee80211_check_combinations()
4363 return cfg80211_check_combinations(local->hw.wiphy, &params); in ieee80211_check_combinations()
4376 int ieee80211_max_num_channels(struct ieee80211_local *local) in ieee80211_max_num_channels() argument
4384 lockdep_assert_held(&local->chanctx_mtx); in ieee80211_max_num_channels()
4386 list_for_each_entry(ctx, &local->chanctx_list, list) { in ieee80211_max_num_channels()
4393 ieee80211_chanctx_radar_detect(local, ctx); in ieee80211_max_num_channels()
4396 list_for_each_entry_rcu(sdata, &local->interfaces, list) in ieee80211_max_num_channels()
4399 err = cfg80211_iter_combinations(local->hw.wiphy, &params, in ieee80211_max_num_channels()