Lines Matching refs:local

44 	struct ieee80211_local *local;  in wiphy_to_ieee80211_hw()  local
47 local = wiphy_priv(wiphy); in wiphy_to_ieee80211_hw()
48 return &local->hw; in wiphy_to_ieee80211_hw()
162 struct ieee80211_local *local = hw_to_local(hw); in ieee80211_rts_duration() local
170 sband = local->hw.wiphy->bands[frame_txctl->band]; in ieee80211_rts_duration()
206 struct ieee80211_local *local = hw_to_local(hw); in ieee80211_ctstoself_duration() local
214 sband = local->hw.wiphy->bands[frame_txctl->band]; in ieee80211_ctstoself_duration()
243 void ieee80211_propagate_queue_wake(struct ieee80211_local *local, int queue) in ieee80211_propagate_queue_wake() argument
248 if (local->ops->wake_tx_queue) in ieee80211_propagate_queue_wake()
251 if (local->hw.queues < IEEE80211_NUM_ACS) in ieee80211_propagate_queue_wake()
254 list_for_each_entry_rcu(sdata, &local->interfaces, list) { in ieee80211_propagate_queue_wake()
261 local->queue_stop_reasons[sdata->vif.cab_queue] != 0) in ieee80211_propagate_queue_wake()
269 local->queue_stop_reasons[ac_queue] == 0 && in ieee80211_propagate_queue_wake()
270 skb_queue_empty(&local->pending[ac_queue]))) in ieee80211_propagate_queue_wake()
280 struct ieee80211_local *local = hw_to_local(hw); in __ieee80211_wake_queue() local
282 trace_wake_queue(local, queue, reason); in __ieee80211_wake_queue()
287 if (!test_bit(reason, &local->queue_stop_reasons[queue])) in __ieee80211_wake_queue()
291 local->q_stop_reasons[queue][reason] = 0; in __ieee80211_wake_queue()
293 local->q_stop_reasons[queue][reason]--; in __ieee80211_wake_queue()
294 if (WARN_ON(local->q_stop_reasons[queue][reason] < 0)) in __ieee80211_wake_queue()
295 local->q_stop_reasons[queue][reason] = 0; in __ieee80211_wake_queue()
298 if (local->q_stop_reasons[queue][reason] == 0) in __ieee80211_wake_queue()
299 __clear_bit(reason, &local->queue_stop_reasons[queue]); in __ieee80211_wake_queue()
301 if (local->queue_stop_reasons[queue] != 0) in __ieee80211_wake_queue()
305 if (skb_queue_empty(&local->pending[queue])) { in __ieee80211_wake_queue()
307 ieee80211_propagate_queue_wake(local, queue); in __ieee80211_wake_queue()
310 tasklet_schedule(&local->tx_pending_tasklet); in __ieee80211_wake_queue()
317 struct ieee80211_local *local = hw_to_local(hw); in ieee80211_wake_queue_by_reason() local
320 spin_lock_irqsave(&local->queue_stop_reason_lock, flags); in ieee80211_wake_queue_by_reason()
322 spin_unlock_irqrestore(&local->queue_stop_reason_lock, flags); in ieee80211_wake_queue_by_reason()
337 struct ieee80211_local *local = hw_to_local(hw); in __ieee80211_stop_queue() local
341 trace_stop_queue(local, queue, reason); in __ieee80211_stop_queue()
347 local->q_stop_reasons[queue][reason] = 1; in __ieee80211_stop_queue()
349 local->q_stop_reasons[queue][reason]++; in __ieee80211_stop_queue()
351 if (__test_and_set_bit(reason, &local->queue_stop_reasons[queue])) in __ieee80211_stop_queue()
354 if (local->ops->wake_tx_queue) in __ieee80211_stop_queue()
357 if (local->hw.queues < IEEE80211_NUM_ACS) in __ieee80211_stop_queue()
361 list_for_each_entry_rcu(sdata, &local->interfaces, list) { in __ieee80211_stop_queue()
380 struct ieee80211_local *local = hw_to_local(hw); in ieee80211_stop_queue_by_reason() local
383 spin_lock_irqsave(&local->queue_stop_reason_lock, flags); in ieee80211_stop_queue_by_reason()
385 spin_unlock_irqrestore(&local->queue_stop_reason_lock, flags); in ieee80211_stop_queue_by_reason()
396 void ieee80211_add_pending_skb(struct ieee80211_local *local, in ieee80211_add_pending_skb() argument
399 struct ieee80211_hw *hw = &local->hw; in ieee80211_add_pending_skb()
405 ieee80211_free_txskb(&local->hw, skb); in ieee80211_add_pending_skb()
409 spin_lock_irqsave(&local->queue_stop_reason_lock, flags); in ieee80211_add_pending_skb()
412 __skb_queue_tail(&local->pending[queue], skb); in ieee80211_add_pending_skb()
415 spin_unlock_irqrestore(&local->queue_stop_reason_lock, flags); in ieee80211_add_pending_skb()
418 void ieee80211_add_pending_skbs(struct ieee80211_local *local, in ieee80211_add_pending_skbs() argument
421 struct ieee80211_hw *hw = &local->hw; in ieee80211_add_pending_skbs()
426 spin_lock_irqsave(&local->queue_stop_reason_lock, flags); in ieee80211_add_pending_skbs()
431 ieee80211_free_txskb(&local->hw, skb); in ieee80211_add_pending_skbs()
441 __skb_queue_tail(&local->pending[queue], skb); in ieee80211_add_pending_skbs()
448 spin_unlock_irqrestore(&local->queue_stop_reason_lock, flags); in ieee80211_add_pending_skbs()
456 struct ieee80211_local *local = hw_to_local(hw); in ieee80211_stop_queues_by_reason() local
460 spin_lock_irqsave(&local->queue_stop_reason_lock, flags); in ieee80211_stop_queues_by_reason()
465 spin_unlock_irqrestore(&local->queue_stop_reason_lock, flags); in ieee80211_stop_queues_by_reason()
478 struct ieee80211_local *local = hw_to_local(hw); in ieee80211_queue_stopped() local
485 spin_lock_irqsave(&local->queue_stop_reason_lock, flags); in ieee80211_queue_stopped()
487 &local->queue_stop_reasons[queue]); in ieee80211_queue_stopped()
488 spin_unlock_irqrestore(&local->queue_stop_reason_lock, flags); in ieee80211_queue_stopped()
498 struct ieee80211_local *local = hw_to_local(hw); in ieee80211_wake_queues_by_reason() local
502 spin_lock_irqsave(&local->queue_stop_reason_lock, flags); in ieee80211_wake_queues_by_reason()
507 spin_unlock_irqrestore(&local->queue_stop_reason_lock, flags); in ieee80211_wake_queues_by_reason()
519 ieee80211_get_vif_queues(struct ieee80211_local *local, in ieee80211_get_vif_queues() argument
524 if (sdata && ieee80211_hw_check(&local->hw, QUEUE_CONTROL)) { in ieee80211_get_vif_queues()
535 queues = BIT(local->hw.queues) - 1; in ieee80211_get_vif_queues()
541 void __ieee80211_flush_queues(struct ieee80211_local *local, in __ieee80211_flush_queues() argument
545 if (!local->ops->flush) in __ieee80211_flush_queues()
552 if (!queues || !ieee80211_hw_check(&local->hw, QUEUE_CONTROL)) in __ieee80211_flush_queues()
553 queues = ieee80211_get_vif_queues(local, sdata); in __ieee80211_flush_queues()
555 ieee80211_stop_queues_by_reason(&local->hw, queues, in __ieee80211_flush_queues()
559 drv_flush(local, sdata, queues, drop); in __ieee80211_flush_queues()
561 ieee80211_wake_queues_by_reason(&local->hw, queues, in __ieee80211_flush_queues()
566 void ieee80211_flush_queues(struct ieee80211_local *local, in ieee80211_flush_queues() argument
569 __ieee80211_flush_queues(local, sdata, 0, drop); in ieee80211_flush_queues()
572 void ieee80211_stop_vif_queues(struct ieee80211_local *local, in ieee80211_stop_vif_queues() argument
576 ieee80211_stop_queues_by_reason(&local->hw, in ieee80211_stop_vif_queues()
577 ieee80211_get_vif_queues(local, sdata), in ieee80211_stop_vif_queues()
581 void ieee80211_wake_vif_queues(struct ieee80211_local *local, in ieee80211_wake_vif_queues() argument
585 ieee80211_wake_queues_by_reason(&local->hw, in ieee80211_wake_vif_queues()
586 ieee80211_get_vif_queues(local, sdata), in ieee80211_wake_vif_queues()
590 static void __iterate_interfaces(struct ieee80211_local *local, in __iterate_interfaces() argument
599 list_for_each_entry_rcu(sdata, &local->interfaces, list) { in __iterate_interfaces()
618 sdata = rcu_dereference_check(local->monitor_sdata, in __iterate_interfaces()
619 lockdep_is_held(&local->iflist_mtx) || in __iterate_interfaces()
633 struct ieee80211_local *local = hw_to_local(hw); in ieee80211_iterate_interfaces() local
635 mutex_lock(&local->iflist_mtx); in ieee80211_iterate_interfaces()
636 __iterate_interfaces(local, iter_flags, iterator, data); in ieee80211_iterate_interfaces()
637 mutex_unlock(&local->iflist_mtx); in ieee80211_iterate_interfaces()
647 struct ieee80211_local *local = hw_to_local(hw); in ieee80211_iterate_active_interfaces_atomic() local
650 __iterate_interfaces(local, iter_flags | IEEE80211_IFACE_ITER_ACTIVE, in ieee80211_iterate_active_interfaces_atomic()
662 struct ieee80211_local *local = hw_to_local(hw); in ieee80211_iterate_active_interfaces_rtnl() local
666 __iterate_interfaces(local, iter_flags | IEEE80211_IFACE_ITER_ACTIVE, in ieee80211_iterate_active_interfaces_rtnl()
671 static void __iterate_stations(struct ieee80211_local *local, in __iterate_stations() argument
678 list_for_each_entry_rcu(sta, &local->sta_list, list) { in __iterate_stations()
691 struct ieee80211_local *local = hw_to_local(hw); in ieee80211_iterate_stations_atomic() local
694 __iterate_stations(local, iterator, data); in ieee80211_iterate_stations_atomic()
736 static bool ieee80211_can_queue_work(struct ieee80211_local *local) in ieee80211_can_queue_work() argument
738 if (local->quiescing || (local->suspended && !local->resuming)) { in ieee80211_can_queue_work()
748 struct ieee80211_local *local = hw_to_local(hw); in ieee80211_queue_work() local
750 if (!ieee80211_can_queue_work(local)) in ieee80211_queue_work()
753 queue_work(local->workqueue, work); in ieee80211_queue_work()
761 struct ieee80211_local *local = hw_to_local(hw); in ieee80211_queue_delayed_work() local
763 if (!ieee80211_can_queue_work(local)) in ieee80211_queue_delayed_work()
766 queue_delayed_work(local->workqueue, dwork, delay); in ieee80211_queue_delayed_work()
1176 struct ieee80211_local *local = sdata->local; in ieee80211_set_wmm_default() local
1184 if (!local->ops->conf_tx) in ieee80211_set_wmm_default()
1187 if (local->hw.queues < IEEE80211_NUM_ACS) in ieee80211_set_wmm_default()
1271 drv_conf_tx(local, sdata, ac, &qparam); in ieee80211_set_wmm_default()
1290 struct ieee80211_local *local = sdata->local; in ieee80211_send_auth() local
1296 skb = dev_alloc_skb(local->hw.extra_tx_headroom + IEEE80211_WEP_IV_LEN + in ieee80211_send_auth()
1301 skb_reserve(skb, local->hw.extra_tx_headroom + IEEE80211_WEP_IV_LEN); in ieee80211_send_auth()
1317 err = ieee80211_wep_encrypt(local, skb, key, key_len, key_idx); in ieee80211_send_auth()
1330 struct ieee80211_local *local = sdata->local; in ieee80211_send_deauth_disassoc() local
1345 skb = dev_alloc_skb(local->hw.extra_tx_headroom + in ieee80211_send_deauth_disassoc()
1350 skb_reserve(skb, local->hw.extra_tx_headroom); in ieee80211_send_deauth_disassoc()
1364 static int ieee80211_build_preq_ies_band(struct ieee80211_local *local, in ieee80211_build_preq_ies_band() argument
1386 sband = local->hw.wiphy->bands[band]; in ieee80211_build_preq_ies_band()
1563 int ieee80211_build_preq_ies(struct ieee80211_local *local, u8 *buffer, in ieee80211_build_preq_ies() argument
1578 pos += ieee80211_build_preq_ies_band(local, in ieee80211_build_preq_ies()
1615 struct ieee80211_local *local = sdata->local; in ieee80211_build_probe_req() local
1634 skb = ieee80211_probereq_get(&local->hw, src, ssid, ssid_len, in ieee80211_build_probe_req()
1640 ies_len = ieee80211_build_preq_ies(local, skb_tail_pointer(skb), in ieee80211_build_probe_req()
1666 sband = sdata->local->hw.wiphy->bands[band]; in ieee80211_sta_get_rates()
1710 void ieee80211_stop_device(struct ieee80211_local *local) in ieee80211_stop_device() argument
1712 ieee80211_led_radio(local, false); in ieee80211_stop_device()
1713 ieee80211_mod_tpt_led_trig(local, 0, IEEE80211_TPT_LEDTRIG_FL_RADIO); in ieee80211_stop_device()
1715 cancel_work_sync(&local->reconfig_filter); in ieee80211_stop_device()
1717 flush_workqueue(local->workqueue); in ieee80211_stop_device()
1718 drv_stop(local); in ieee80211_stop_device()
1721 static void ieee80211_flush_completed_scan(struct ieee80211_local *local, in ieee80211_flush_completed_scan() argument
1731 if (test_bit(SCAN_COMPLETED, &local->scanning)) { in ieee80211_flush_completed_scan()
1738 set_bit(SCAN_ABORTED, &local->scanning); in ieee80211_flush_completed_scan()
1739 ieee80211_queue_delayed_work(&local->hw, &local->scan_work, 0); in ieee80211_flush_completed_scan()
1740 flush_delayed_work(&local->scan_work); in ieee80211_flush_completed_scan()
1744 static void ieee80211_handle_reconfig_failure(struct ieee80211_local *local) in ieee80211_handle_reconfig_failure() argument
1759 local->resuming = false; in ieee80211_handle_reconfig_failure()
1760 local->suspended = false; in ieee80211_handle_reconfig_failure()
1761 local->in_reconfig = false; in ieee80211_handle_reconfig_failure()
1763 ieee80211_flush_completed_scan(local, true); in ieee80211_handle_reconfig_failure()
1768 ieee80211_sched_scan_end(local); in ieee80211_handle_reconfig_failure()
1770 list_for_each_entry(sdata, &local->interfaces, list) in ieee80211_handle_reconfig_failure()
1776 mutex_lock(&local->chanctx_mtx); in ieee80211_handle_reconfig_failure()
1777 list_for_each_entry(ctx, &local->chanctx_list, list) in ieee80211_handle_reconfig_failure()
1779 mutex_unlock(&local->chanctx_mtx); in ieee80211_handle_reconfig_failure()
1781 cfg80211_shutdown_all_interfaces(local->hw.wiphy); in ieee80211_handle_reconfig_failure()
1784 static void ieee80211_assign_chanctx(struct ieee80211_local *local, in ieee80211_assign_chanctx() argument
1790 if (!local->use_chanctx) in ieee80211_assign_chanctx()
1793 mutex_lock(&local->chanctx_mtx); in ieee80211_assign_chanctx()
1795 lockdep_is_held(&local->chanctx_mtx)); in ieee80211_assign_chanctx()
1798 drv_assign_vif_chanctx(local, sdata, ctx); in ieee80211_assign_chanctx()
1800 mutex_unlock(&local->chanctx_mtx); in ieee80211_assign_chanctx()
1805 struct ieee80211_local *local = sdata->local; in ieee80211_reconfig_stations() local
1809 mutex_lock(&local->sta_mtx); in ieee80211_reconfig_stations()
1810 list_for_each_entry(sta, &local->sta_list, list) { in ieee80211_reconfig_stations()
1818 WARN_ON(drv_sta_state(local, sta->sdata, sta, state, in ieee80211_reconfig_stations()
1821 mutex_unlock(&local->sta_mtx); in ieee80211_reconfig_stations()
1829 res = drv_start_nan(sdata->local, sdata, in ieee80211_reconfig_nan()
1834 funcs = kcalloc(sdata->local->hw.max_nan_de_entries + 1, in ieee80211_reconfig_nan()
1852 res = drv_add_nan_func(sdata->local, sdata, funcs[i]); in ieee80211_reconfig_nan()
1865 int ieee80211_reconfig(struct ieee80211_local *local) in ieee80211_reconfig() argument
1867 struct ieee80211_hw *hw = &local->hw; in ieee80211_reconfig()
1876 bool suspended = local->suspended; in ieee80211_reconfig()
1879 if (!local->open_count) in ieee80211_reconfig()
1884 local->resuming = true; in ieee80211_reconfig()
1886 if (local->wowlan) { in ieee80211_reconfig()
1893 local->suspended = false; in ieee80211_reconfig()
1894 res = drv_resume(local); in ieee80211_reconfig()
1895 local->wowlan = false; in ieee80211_reconfig()
1897 local->resuming = false; in ieee80211_reconfig()
1909 local->suspended = true; in ieee80211_reconfig()
1920 if (suspended && local->in_reconfig && !reconfig_due_to_wowlan) in ieee80211_reconfig()
1921 cancel_work_sync(&local->restart_work); in ieee80211_reconfig()
1923 local->started = false; in ieee80211_reconfig()
1931 res = drv_start(local); in ieee80211_reconfig()
1937 ieee80211_handle_reconfig_failure(local); in ieee80211_reconfig()
1942 drv_set_frag_threshold(local, hw->wiphy->frag_threshold); in ieee80211_reconfig()
1945 drv_set_rts_threshold(local, hw->wiphy->rts_threshold); in ieee80211_reconfig()
1948 drv_set_coverage_class(local, hw->wiphy->coverage_class); in ieee80211_reconfig()
1950 ieee80211_led_radio(local, true); in ieee80211_reconfig()
1951 ieee80211_mod_tpt_led_trig(local, in ieee80211_reconfig()
1955 sdata = rtnl_dereference(local->monitor_sdata); in ieee80211_reconfig()
1958 WARN_ON(local->resuming); in ieee80211_reconfig()
1959 res = drv_add_interface(local, sdata); in ieee80211_reconfig()
1961 RCU_INIT_POINTER(local->monitor_sdata, NULL); in ieee80211_reconfig()
1967 list_for_each_entry(sdata, &local->interfaces, list) { in ieee80211_reconfig()
1971 res = drv_add_interface(local, sdata); in ieee80211_reconfig()
1981 list_for_each_entry_continue_reverse(sdata, &local->interfaces, in ieee80211_reconfig()
1986 drv_remove_interface(local, sdata); in ieee80211_reconfig()
1987 ieee80211_handle_reconfig_failure(local); in ieee80211_reconfig()
1992 if (local->use_chanctx) { in ieee80211_reconfig()
1993 mutex_lock(&local->chanctx_mtx); in ieee80211_reconfig()
1994 list_for_each_entry(ctx, &local->chanctx_list, list) in ieee80211_reconfig()
1997 WARN_ON(drv_add_chanctx(local, ctx)); in ieee80211_reconfig()
1998 mutex_unlock(&local->chanctx_mtx); in ieee80211_reconfig()
2000 sdata = rtnl_dereference(local->monitor_sdata); in ieee80211_reconfig()
2002 ieee80211_assign_chanctx(local, sdata); in ieee80211_reconfig()
2006 ieee80211_hw_config(local, ~0); in ieee80211_reconfig()
2008 ieee80211_configure_filter(local); in ieee80211_reconfig()
2011 list_for_each_entry(sdata, &local->interfaces, list) { in ieee80211_reconfig()
2017 ieee80211_assign_chanctx(local, sdata); in ieee80211_reconfig()
2028 drv_conf_tx(local, sdata, i, in ieee80211_reconfig()
2082 drv_start_ap(local, sdata); in ieee80211_reconfig()
2096 ieee80211_handle_reconfig_failure(local); in ieee80211_reconfig()
2115 ieee80211_recalc_ps(local); in ieee80211_reconfig()
2123 if (!(local->hw.conf.flags & IEEE80211_CONF_PS)) { in ieee80211_reconfig()
2124 list_for_each_entry(sdata, &local->interfaces, list) { in ieee80211_reconfig()
2130 ieee80211_send_nullfunc(local, sdata, false); in ieee80211_reconfig()
2135 mutex_lock(&local->sta_mtx); in ieee80211_reconfig()
2136 list_for_each_entry(sta, &local->sta_list, list) { in ieee80211_reconfig()
2148 WARN_ON(drv_sta_state(local, sta->sdata, sta, state, in ieee80211_reconfig()
2151 mutex_unlock(&local->sta_mtx); in ieee80211_reconfig()
2154 list_for_each_entry(sdata, &local->interfaces, list) in ieee80211_reconfig()
2157 list_for_each_entry(sdata, &local->interfaces, list) in ieee80211_reconfig()
2162 mutex_lock(&local->mtx); in ieee80211_reconfig()
2163 sched_scan_sdata = rcu_dereference_protected(local->sched_scan_sdata, in ieee80211_reconfig()
2164 lockdep_is_held(&local->mtx)); in ieee80211_reconfig()
2165 sched_scan_req = rcu_dereference_protected(local->sched_scan_req, in ieee80211_reconfig()
2166 lockdep_is_held(&local->mtx)); in ieee80211_reconfig()
2178 RCU_INIT_POINTER(local->sched_scan_sdata, NULL); in ieee80211_reconfig()
2179 RCU_INIT_POINTER(local->sched_scan_req, NULL); in ieee80211_reconfig()
2182 mutex_unlock(&local->mtx); in ieee80211_reconfig()
2185 cfg80211_sched_scan_stopped_rtnl(local->hw.wiphy, 0); in ieee80211_reconfig()
2189 if (local->monitors == local->open_count && local->monitors > 0) in ieee80211_reconfig()
2190 ieee80211_add_virtual_monitor(local); in ieee80211_reconfig()
2203 mutex_lock(&local->sta_mtx); in ieee80211_reconfig()
2205 list_for_each_entry(sta, &local->sta_list, list) { in ieee80211_reconfig()
2206 if (!local->resuming) in ieee80211_reconfig()
2212 mutex_unlock(&local->sta_mtx); in ieee80211_reconfig()
2215 if (local->in_reconfig) { in ieee80211_reconfig()
2216 local->in_reconfig = false; in ieee80211_reconfig()
2220 mutex_lock(&local->mtx); in ieee80211_reconfig()
2221 ieee80211_start_next_roc(local); in ieee80211_reconfig()
2222 mutex_unlock(&local->mtx); in ieee80211_reconfig()
2233 if (local->open_count && (!suspended || reconfig_due_to_wowlan)) in ieee80211_reconfig()
2234 drv_reconfig_complete(local, IEEE80211_RECONFIG_TYPE_RESTART); in ieee80211_reconfig()
2241 local->suspended = false; in ieee80211_reconfig()
2243 local->resuming = false; in ieee80211_reconfig()
2245 ieee80211_flush_completed_scan(local, false); in ieee80211_reconfig()
2247 if (local->open_count && !reconfig_due_to_wowlan) in ieee80211_reconfig()
2248 drv_reconfig_complete(local, IEEE80211_RECONFIG_TYPE_SUSPEND); in ieee80211_reconfig()
2250 list_for_each_entry(sdata, &local->interfaces, list) { in ieee80211_reconfig()
2257 mod_timer(&local->sta_cleanup, jiffies + 1); in ieee80211_reconfig()
2268 struct ieee80211_local *local; in ieee80211_resume_disconnect() local
2275 local = sdata->local; in ieee80211_resume_disconnect()
2277 if (WARN_ON(!local->resuming)) in ieee80211_resume_disconnect()
2285 mutex_lock(&local->key_mtx); in ieee80211_resume_disconnect()
2288 mutex_unlock(&local->key_mtx); in ieee80211_resume_disconnect()
2294 struct ieee80211_local *local = sdata->local; in ieee80211_recalc_smps() local
2298 mutex_lock(&local->chanctx_mtx); in ieee80211_recalc_smps()
2301 lockdep_is_held(&local->chanctx_mtx)); in ieee80211_recalc_smps()
2313 ieee80211_recalc_smps_chanctx(local, chanctx); in ieee80211_recalc_smps()
2315 mutex_unlock(&local->chanctx_mtx); in ieee80211_recalc_smps()
2320 struct ieee80211_local *local = sdata->local; in ieee80211_recalc_min_chandef() local
2324 mutex_lock(&local->chanctx_mtx); in ieee80211_recalc_min_chandef()
2327 lockdep_is_held(&local->chanctx_mtx)); in ieee80211_recalc_min_chandef()
2333 ieee80211_recalc_chanctx_min_def(local, chanctx); in ieee80211_recalc_min_chandef()
2335 mutex_unlock(&local->chanctx_mtx); in ieee80211_recalc_min_chandef()
2749 struct ieee80211_local *local = sdata->local; in ieee80211_add_srates_ie() local
2758 sband = local->hw.wiphy->bands[band]; in ieee80211_add_srates_ie()
2793 struct ieee80211_local *local = sdata->local; in ieee80211_add_ext_srates_ie() local
2803 sband = local->hw.wiphy->bands[band]; in ieee80211_add_ext_srates_ie()
2878 u64 ieee80211_calculate_rx_timestamp(struct ieee80211_local *local, in ieee80211_calculate_rx_timestamp() argument
2926 sband = local->hw.wiphy->bands[status->band]; in ieee80211_calculate_rx_timestamp()
2961 void ieee80211_dfs_cac_cancel(struct ieee80211_local *local) in ieee80211_dfs_cac_cancel() argument
2969 mutex_lock(&local->mtx); in ieee80211_dfs_cac_cancel()
2970 list_for_each_entry(sdata, &local->interfaces, list) { in ieee80211_dfs_cac_cancel()
2986 mutex_unlock(&local->mtx); in ieee80211_dfs_cac_cancel()
2991 struct ieee80211_local *local = in ieee80211_dfs_radar_detected_work() local
2993 struct cfg80211_chan_def chandef = local->hw.conf.chandef; in ieee80211_dfs_radar_detected_work()
2997 mutex_lock(&local->chanctx_mtx); in ieee80211_dfs_radar_detected_work()
2998 list_for_each_entry(ctx, &local->chanctx_list, list) { in ieee80211_dfs_radar_detected_work()
3005 mutex_unlock(&local->chanctx_mtx); in ieee80211_dfs_radar_detected_work()
3008 ieee80211_dfs_cac_cancel(local); in ieee80211_dfs_radar_detected_work()
3015 cfg80211_radar_event(local->hw.wiphy, &chandef, GFP_KERNEL); in ieee80211_dfs_radar_detected_work()
3020 struct ieee80211_local *local = hw_to_local(hw); in ieee80211_radar_detected() local
3022 trace_api_radar_detected(local); in ieee80211_radar_detected()
3024 schedule_work(&local->radar_detected_work); in ieee80211_radar_detected()
3118 struct ieee80211_local *local = sdata->local; in ieee80211_send_action_csa() local
3128 skb = dev_alloc_skb(local->tx_headroom + hdr_len + in ieee80211_send_action_csa()
3136 skb_reserve(skb, local->tx_headroom); in ieee80211_send_action_csa()
3224 ieee80211_cs_get(struct ieee80211_local *local, u32 cipher, in ieee80211_cs_get() argument
3227 const struct ieee80211_cipher_scheme *l = local->hw.cipher_schemes; in ieee80211_cs_get()
3228 int n = local->hw.n_cipher_schemes; in ieee80211_cs_get()
3245 int ieee80211_cs_headroom(struct ieee80211_local *local, in ieee80211_cs_headroom() argument
3254 cs = ieee80211_cs_get(local, crypto->ciphers_pairwise[i], in ieee80211_cs_headroom()
3261 cs = ieee80211_cs_get(local, crypto->cipher_group, iftype); in ieee80211_cs_headroom()
3415 void ieee80211_recalc_dtim(struct ieee80211_local *local, in ieee80211_recalc_dtim() argument
3418 u64 tsf = drv_get_tsf(local, sdata); in ieee80211_recalc_dtim()
3456 static u8 ieee80211_chanctx_radar_detect(struct ieee80211_local *local, in ieee80211_chanctx_radar_detect() argument
3462 lockdep_assert_held(&local->chanctx_mtx); in ieee80211_chanctx_radar_detect()
3490 struct ieee80211_local *local = sdata->local; in ieee80211_check_combinations() local
3499 lockdep_assert_held(&local->chanctx_mtx); in ieee80211_check_combinations()
3522 if (local->hw.wiphy->software_iftypes & BIT(iftype)) { in ieee80211_check_combinations()
3534 list_for_each_entry(ctx, &local->chanctx_list, list) { in ieee80211_check_combinations()
3538 ieee80211_chanctx_radar_detect(local, ctx); in ieee80211_check_combinations()
3550 list_for_each_entry_rcu(sdata_iter, &local->interfaces, list) { in ieee80211_check_combinations()
3557 local->hw.wiphy->software_iftypes & BIT(wdev_iter->iftype)) in ieee80211_check_combinations()
3567 return cfg80211_check_combinations(local->hw.wiphy, &params); in ieee80211_check_combinations()
3580 int ieee80211_max_num_channels(struct ieee80211_local *local) in ieee80211_max_num_channels() argument
3588 lockdep_assert_held(&local->chanctx_mtx); in ieee80211_max_num_channels()
3590 list_for_each_entry(ctx, &local->chanctx_list, list) { in ieee80211_max_num_channels()
3597 ieee80211_chanctx_radar_detect(local, ctx); in ieee80211_max_num_channels()
3600 list_for_each_entry_rcu(sdata, &local->interfaces, list) in ieee80211_max_num_channels()
3603 err = cfg80211_iter_combinations(local->hw.wiphy, &params, in ieee80211_max_num_channels()